summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/admin
diff options
context:
space:
mode:
authormisskey-release-bot[bot] <157398866+misskey-release-bot[bot]@users.noreply.github.com>2025-05-31 12:37:06 +0000
committerGitHub <noreply@github.com>2025-05-31 12:37:06 +0000
commit92b9a5218db145e9bb831cefd36c309de86083b5 (patch)
tree2ebad71633f9bbacabbc193254223146f1662aee /packages/backend/src/server/api/endpoints/admin
parentMerge pull request #15933 from misskey-dev/develop (diff)
parentRelease: 2025.5.1 (diff)
downloadmisskey-92b9a5218db145e9bb831cefd36c309de86083b5.tar.gz
misskey-92b9a5218db145e9bb831cefd36c309de86083b5.tar.bz2
misskey-92b9a5218db145e9bb831cefd36c309de86083b5.zip
Merge pull request #16005 from misskey-dev/develop
Release: 2025.5.1
Diffstat (limited to 'packages/backend/src/server/api/endpoints/admin')
-rw-r--r--packages/backend/src/server/api/endpoints/admin/drive/show-file.ts35
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/update.ts67
-rw-r--r--packages/backend/src/server/api/endpoints/admin/invite/create.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/admin/meta.ts31
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/jobs.ts12
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/queue-stats.ts113
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/queues.ts42
-rw-r--r--packages/backend/src/server/api/endpoints/admin/queue/show-job.ts7
-rw-r--r--packages/backend/src/server/api/endpoints/admin/update-meta.ts33
9 files changed, 294 insertions, 48 deletions
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 a7136d8c8c..b84a5c73f9 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
@@ -162,14 +162,21 @@ export const meta = {
} as const;
export const paramDef = {
- type: 'object',
- properties: {
- fileId: { type: 'string', format: 'misskey:id' },
- url: { type: 'string' },
- },
anyOf: [
- { required: ['fileId'] },
- { required: ['url'] },
+ {
+ type: 'object',
+ properties: {
+ fileId: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['fileId'],
+ },
+ {
+ type: 'object',
+ properties: {
+ url: { type: 'string' },
+ },
+ required: ['url'],
+ },
],
} as const;
@@ -186,15 +193,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private idService: IdService,
) {
super(meta, paramDef, async (ps, me) => {
- const file = ps.fileId ? await this.driveFilesRepository.findOneBy({ id: ps.fileId }) : await this.driveFilesRepository.findOne({
- where: [{
- url: ps.url,
- }, {
- thumbnailUrl: ps.url,
- }, {
- webpublicUrl: ps.url,
- }],
- });
+ const file = await this.driveFilesRepository.findOneBy(
+ 'fileId' in ps
+ ? { id: ps.fileId }
+ : [{ url: ps.url }, { thumbnailUrl: ps.url }, { webpublicUrl: ps.url }],
+ );
if (file == null) {
throw new ApiError(meta.errors.noSuchFile);
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 6834a6d213..7bde10af46 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
@@ -37,29 +37,45 @@ export const meta = {
} as const;
export const paramDef = {
- type: 'object',
- properties: {
- id: { type: 'string', format: 'misskey:id' },
- name: { type: 'string', pattern: '^[a-zA-Z0-9_]+$' },
- fileId: { type: 'string', format: 'misskey:id' },
- category: {
- type: 'string',
- nullable: true,
- description: 'Use `null` to reset the category.',
+ allOf: [
+ {
+ anyOf: [
+ {
+ type: 'object',
+ properties: {
+ id: { type: 'string', format: 'misskey:id' },
+ },
+ required: ['id'],
+ },
+ {
+ type: 'object',
+ properties: {
+ name: { type: 'string', pattern: '^[a-zA-Z0-9_]+$' },
+ },
+ required: ['name'],
+ },
+ ],
+ },
+ {
+ type: 'object',
+ properties: {
+ fileId: { type: 'string', format: 'misskey:id' },
+ category: {
+ type: 'string',
+ nullable: true,
+ description: 'Use `null` to reset the category.',
+ },
+ aliases: { type: 'array', items: {
+ type: 'string',
+ } },
+ license: { type: 'string', nullable: true },
+ isSensitive: { type: 'boolean' },
+ localOnly: { type: 'boolean' },
+ roleIdsThatCanBeUsedThisEmojiAsReaction: { type: 'array', items: {
+ type: 'string',
+ } },
+ },
},
- aliases: { type: 'array', items: {
- type: 'string',
- } },
- license: { type: 'string', nullable: true },
- isSensitive: { type: 'boolean' },
- localOnly: { type: 'boolean' },
- roleIdsThatCanBeUsedThisEmojiAsReaction: { type: 'array', items: {
- type: 'string',
- } },
- },
- anyOf: [
- { required: ['id'] },
- { required: ['name'] },
],
} as const;
@@ -78,10 +94,9 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
if (driveFile == null) throw new ApiError(meta.errors.noSuchFile);
}
- // JSON schemeのanyOfの型変換がうまくいっていないらしい
- const required = { id: ps.id, name: ps.name } as
- | { id: MiEmoji['id']; name?: string }
- | { id?: MiEmoji['id']; name: string };
+ const required = 'id' in ps
+ ? { id: ps.id, name: 'name' in ps ? ps.name as string : undefined }
+ : { name: ps.name };
const error = await this.customEmojiService.update({
...required,
diff --git a/packages/backend/src/server/api/endpoints/admin/invite/create.ts b/packages/backend/src/server/api/endpoints/admin/invite/create.ts
index 5ecae3161a..e52b177e2b 100644
--- a/packages/backend/src/server/api/endpoints/admin/invite/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/invite/create.ts
@@ -68,6 +68,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
for (let i = 0; i < ps.count; i++) {
ticketsPromises.push(this.registrationTicketsRepository.insertOne({
id: this.idService.gen(),
+ createdBy: me,
+ createdById: me.id,
expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null,
code: generateInviteCode(),
}));
diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts
index 4a106e7175..924163afbb 100644
--- a/packages/backend/src/server/api/endpoints/admin/meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/meta.ts
@@ -495,6 +495,10 @@ export const meta = {
type: 'boolean',
optional: false, nullable: false,
},
+ urlPreviewAllowRedirect: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
urlPreviewTimeout: {
type: 'number',
optional: false, nullable: false,
@@ -546,6 +550,27 @@ export const meta = {
},
},
},
+ singleUserMode: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
+ ugcVisibilityForVisitor: {
+ type: 'string',
+ enum: ['all', 'local', 'none'],
+ optional: false, nullable: false,
+ },
+ proxyRemoteFiles: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
+ signToActivityPubGet: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
+ allowExternalApRedirect: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
},
},
} as const;
@@ -683,6 +708,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
notesPerOneAd: instance.notesPerOneAd,
summalyProxy: instance.urlPreviewSummaryProxyUrl,
urlPreviewEnabled: instance.urlPreviewEnabled,
+ urlPreviewAllowRedirect: instance.urlPreviewAllowRedirect,
urlPreviewTimeout: instance.urlPreviewTimeout,
urlPreviewMaximumContentLength: instance.urlPreviewMaximumContentLength,
urlPreviewRequireContentLength: instance.urlPreviewRequireContentLength,
@@ -691,6 +717,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
federation: instance.federation,
federationHosts: instance.federationHosts,
deliverSuspendedSoftware: instance.deliverSuspendedSoftware,
+ singleUserMode: instance.singleUserMode,
+ ugcVisibilityForVisitor: instance.ugcVisibilityForVisitor,
+ proxyRemoteFiles: instance.proxyRemoteFiles,
+ signToActivityPubGet: instance.signToActivityPubGet,
+ allowExternalApRedirect: instance.allowExternalApRedirect,
};
});
}
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 79731c9786..a68e95bf3f 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,6 @@
import { Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
-import { ModerationLogService } from '@/core/ModerationLogService.js';
import { QUEUE_TYPES, QueueService } from '@/core/QueueService.js';
export const meta = {
@@ -14,13 +13,22 @@ export const meta = {
requireCredential: true,
requireModerator: true,
kind: 'read:admin:queue',
+
+ res: {
+ type: 'array',
+ optional: false, nullable: false,
+ items: {
+ optional: false, nullable: false,
+ ref: 'QueueJob',
+ },
+ },
} as const;
export const paramDef = {
type: 'object',
properties: {
queue: { type: 'string', enum: QUEUE_TYPES },
- state: { type: 'array', items: { type: 'string', enum: ['active', 'wait', 'delayed', 'completed', 'failed'] } },
+ state: { type: 'array', items: { type: 'string', enum: ['active', 'wait', 'delayed', 'completed', 'failed', 'paused'] } },
search: { type: 'string' },
},
required: ['queue', 'state'],
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/queue-stats.ts b/packages/backend/src/server/api/endpoints/admin/queue/queue-stats.ts
index 10ce48332a..0098160165 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/queue-stats.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/queue-stats.ts
@@ -5,7 +5,6 @@
import { Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
-import { ModerationLogService } from '@/core/ModerationLogService.js';
import { QUEUE_TYPES, QueueService } from '@/core/QueueService.js';
export const meta = {
@@ -14,6 +13,118 @@ export const meta = {
requireCredential: true,
requireModerator: true,
kind: 'read:admin:queue',
+
+ res: {
+ type: 'object',
+ optional: false, nullable: false,
+ properties: {
+ name: {
+ type: 'string',
+ optional: false, nullable: false,
+ enum: QUEUE_TYPES,
+ },
+ qualifiedName: {
+ type: 'string',
+ optional: false, nullable: false,
+ },
+ counts: {
+ type: 'object',
+ optional: false, nullable: false,
+ additionalProperties: {
+ type: 'number',
+ },
+ },
+ isPaused: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
+ metrics: {
+ type: 'object',
+ optional: false, nullable: false,
+ properties: {
+ completed: {
+ optional: false, nullable: false,
+ ref: 'QueueMetrics',
+ },
+ failed: {
+ optional: false, nullable: false,
+ ref: 'QueueMetrics',
+ },
+ },
+ },
+ db: {
+ type: 'object',
+ optional: false, nullable: false,
+ properties: {
+ version: {
+ type: 'string',
+ optional: false, nullable: false,
+ },
+ mode: {
+ type: 'string',
+ optional: false, nullable: false,
+ enum: ['cluster', 'standalone', 'sentinel'],
+ },
+ runId: {
+ type: 'string',
+ optional: false, nullable: false,
+ },
+ processId: {
+ type: 'string',
+ optional: false, nullable: false,
+ },
+ port: {
+ type: 'number',
+ optional: false, nullable: false,
+ },
+ os: {
+ type: 'string',
+ optional: false, nullable: false,
+ },
+ uptime: {
+ type: 'number',
+ optional: false, nullable: false,
+ },
+ memory: {
+ type: 'object',
+ optional: false, nullable: false,
+ properties: {
+ total: {
+ type: 'number',
+ optional: false, nullable: false,
+ },
+ used: {
+ type: 'number',
+ optional: false, nullable: false,
+ },
+ fragmentationRatio: {
+ type: 'number',
+ optional: false, nullable: false,
+ },
+ peak: {
+ type: 'number',
+ optional: false, nullable: false,
+ },
+ },
+ },
+ clients: {
+ type: 'object',
+ optional: false, nullable: false,
+ properties: {
+ blocked: {
+ type: 'number',
+ optional: false, nullable: false,
+ },
+ connected: {
+ type: 'number',
+ optional: false, nullable: false,
+ },
+ },
+ },
+ },
+ }
+ },
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/queues.ts b/packages/backend/src/server/api/endpoints/admin/queue/queues.ts
index 3a38275f60..8d27e38c84 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/queues.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/queues.ts
@@ -5,7 +5,6 @@
import { Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
-import { ModerationLogService } from '@/core/ModerationLogService.js';
import { QUEUE_TYPES, QueueService } from '@/core/QueueService.js';
export const meta = {
@@ -14,6 +13,47 @@ export const meta = {
requireCredential: true,
requireModerator: true,
kind: 'read:admin:queue',
+
+ res: {
+ type: 'array',
+ optional: false, nullable: false,
+ items: {
+ type: 'object',
+ optional: false, nullable: false,
+ properties: {
+ name: {
+ type: 'string',
+ optional: false, nullable: false,
+ enum: QUEUE_TYPES,
+ },
+ counts: {
+ type: 'object',
+ optional: false, nullable: false,
+ additionalProperties: {
+ type: 'number',
+ },
+ },
+ isPaused: {
+ type: 'boolean',
+ optional: false, nullable: false,
+ },
+ metrics: {
+ type: 'object',
+ optional: false, nullable: false,
+ properties: {
+ completed: {
+ optional: false, nullable: false,
+ ref: 'QueueMetrics',
+ },
+ failed: {
+ optional: false, nullable: false,
+ ref: 'QueueMetrics',
+ },
+ },
+ },
+ },
+ },
+ },
} as const;
export const paramDef = {
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/show-job.ts b/packages/backend/src/server/api/endpoints/admin/queue/show-job.ts
index 63747b5540..1735c22674 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/show-job.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/show-job.ts
@@ -5,7 +5,6 @@
import { Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
-import { ModerationLogService } from '@/core/ModerationLogService.js';
import { QUEUE_TYPES, QueueService } from '@/core/QueueService.js';
export const meta = {
@@ -14,6 +13,11 @@ export const meta = {
requireCredential: true,
requireModerator: true,
kind: 'read:admin:queue',
+
+ res: {
+ optional: false, nullable: false,
+ ref: 'QueueJob',
+ },
} as const;
export const paramDef = {
@@ -28,7 +32,6 @@ export const paramDef = {
@Injectable()
export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
constructor(
- private moderationLogService: ModerationLogService,
private queueService: QueueService,
) {
super(meta, paramDef, async (ps, me) => {
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 31eeaa5e38..578aa2b662 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -170,6 +170,7 @@ export const paramDef = {
description: '[Deprecated] Use "urlPreviewSummaryProxyUrl" instead.',
},
urlPreviewEnabled: { type: 'boolean' },
+ urlPreviewAllowRedirect: { type: 'boolean' },
urlPreviewTimeout: { type: 'integer' },
urlPreviewMaximumContentLength: { type: 'integer' },
urlPreviewRequireContentLength: { type: 'boolean' },
@@ -196,6 +197,14 @@ export const paramDef = {
required: ['software', 'versionRange'],
},
},
+ singleUserMode: { type: 'boolean' },
+ ugcVisibilityForVisitor: {
+ type: 'string',
+ enum: ['all', 'local', 'none'],
+ },
+ proxyRemoteFiles: { type: 'boolean' },
+ signToActivityPubGet: { type: 'boolean' },
+ allowExternalApRedirect: { type: 'boolean' },
},
required: [],
} as const;
@@ -656,6 +665,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
set.urlPreviewEnabled = ps.urlPreviewEnabled;
}
+ if (ps.urlPreviewAllowRedirect !== undefined) {
+ set.urlPreviewAllowRedirect = ps.urlPreviewAllowRedirect;
+ }
+
if (ps.urlPreviewTimeout !== undefined) {
set.urlPreviewTimeout = ps.urlPreviewTimeout;
}
@@ -690,6 +703,26 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
set.federationHosts = ps.federationHosts.filter(Boolean).map(x => x.toLowerCase());
}
+ if (ps.singleUserMode !== undefined) {
+ set.singleUserMode = ps.singleUserMode;
+ }
+
+ if (ps.ugcVisibilityForVisitor !== undefined) {
+ set.ugcVisibilityForVisitor = ps.ugcVisibilityForVisitor;
+ }
+
+ if (ps.proxyRemoteFiles !== undefined) {
+ set.proxyRemoteFiles = ps.proxyRemoteFiles;
+ }
+
+ if (ps.signToActivityPubGet !== undefined) {
+ set.signToActivityPubGet = ps.signToActivityPubGet;
+ }
+
+ if (ps.allowExternalApRedirect !== undefined) {
+ set.allowExternalApRedirect = ps.allowExternalApRedirect;
+ }
+
const before = await this.metaService.fetch(true);
await this.metaService.update(set);