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 5e26f61fa7..94c523a6c9 100644 --- a/packages/backend/src/server/api/endpoints/admin/relays/remove.ts +++ b/packages/backend/src/server/api/endpoints/admin/relays/remove.ts @@ -2,28 +2,14 @@ import { Injectable } from '@nestjs/common'; import { Endpoint } from '@/server/api/endpoint-base.js'; import { RelayService } from '@/core/RelayService.js'; -export const meta = { - tags: ['admin'], - - requireCredential: true, - requireModerator: true, -} as const; - -export const paramDef = { - type: 'object', - properties: { - inbox: { type: 'string' }, - }, - required: ['inbox'], -} as const; - // eslint-disable-next-line import/no-default-export @Injectable() -export default class extends Endpoint { +export default class extends Endpoint<'admin/relays/remove'> { + name = 'admin/relays/remove' as const; constructor( private relayService: RelayService, ) { - super(meta, paramDef, async (ps, me) => { + super(async (ps, me) => { return await this.relayService.removeRelay(ps.inbox); }); } diff --git a/packages/backend/src/server/api/endpoints/admin/roles/assign.ts b/packages/backend/src/server/api/endpoints/admin/roles/assign.ts index b80aaba122..198fee55f7 100644 --- a/packages/backend/src/server/api/endpoints/admin/roles/assign.ts +++ b/packages/backend/src/server/api/endpoints/admin/roles/assign.ts @@ -5,52 +5,10 @@ import { DI } from '@/di-symbols.js'; import { ApiError } from '@/server/api/error.js'; import { RoleService } from '@/core/RoleService.js'; -export const meta = { - tags: ['admin', 'role'], - - requireCredential: true, - requireModerator: true, - - errors: { - noSuchRole: { - message: 'No such role.', - code: 'NO_SUCH_ROLE', - id: '6503c040-6af4-4ed9-bf07-f2dd16678eab', - }, - - noSuchUser: { - message: 'No such user.', - code: 'NO_SUCH_USER', - id: '558ea170-f653-4700-94d0-5a818371d0df', - }, - - accessDenied: { - message: 'Only administrators can edit members of the role.', - code: 'ACCESS_DENIED', - id: '25b5bc31-dc79-4ebd-9bd2-c84978fd052c', - }, - }, -} as const; - -export const paramDef = { - type: 'object', - properties: { - roleId: { type: 'string', format: 'misskey:id' }, - userId: { type: 'string', format: 'misskey:id' }, - expiresAt: { - type: 'integer', - nullable: true, - }, - }, - required: [ - 'roleId', - 'userId', - ], -} as const; - // eslint-disable-next-line import/no-default-export @Injectable() -export default class extends Endpoint { +export default class extends Endpoint<'admin/roles/assign'> { + name = 'admin/roles/assign' as const; constructor( @Inject(DI.usersRepository) private usersRepository: UsersRepository, @@ -60,19 +18,19 @@ export default class extends Endpoint { private roleService: RoleService, ) { - super(meta, paramDef, async (ps, me) => { + super(async (ps, me) => { const role = await this.rolesRepository.findOneBy({ id: ps.roleId }); if (role == null) { - throw new ApiError(meta.errors.noSuchRole); + throw new ApiError(this.meta.errors.noSuchRole); } if (!role.canEditMembersByModerator && !(await this.roleService.isAdministrator(me))) { - throw new ApiError(meta.errors.accessDenied); + throw new ApiError(this.meta.errors.accessDenied); } const user = await this.usersRepository.findOneBy({ id: ps.userId }); if (user == null) { - throw new ApiError(meta.errors.noSuchUser); + throw new ApiError(this.meta.errors.noSuchUser); } if (ps.expiresAt && ps.expiresAt <= Date.now()) { diff --git a/packages/backend/src/server/api/endpoints/admin/roles/create.ts b/packages/backend/src/server/api/endpoints/admin/roles/create.ts index 916172f54a..e189fb27f5 100644 --- a/packages/backend/src/server/api/endpoints/admin/roles/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/roles/create.ts @@ -6,53 +6,10 @@ import { DI } from '@/di-symbols.js'; import { IdService } from '@/core/IdService.js'; import { RoleEntityService } from '@/core/entities/RoleEntityService.js'; -export const meta = { - tags: ['admin', 'role'], - - requireCredential: true, - requireAdmin: true, -} as const; - -export const paramDef = { - type: 'object', - properties: { - name: { type: 'string' }, - description: { type: 'string' }, - color: { type: 'string', nullable: true }, - iconUrl: { type: 'string', nullable: true }, - target: { type: 'string', enum: ['manual', 'conditional'] }, - condFormula: { type: 'object' }, - isPublic: { type: 'boolean' }, - isModerator: { type: 'boolean' }, - isAdministrator: { type: 'boolean' }, - isExplorable: { type: 'boolean', default: false }, // optional for backward compatibility - asBadge: { type: 'boolean' }, - canEditMembersByModerator: { type: 'boolean' }, - displayOrder: { type: 'number' }, - policies: { - type: 'object', - }, - }, - required: [ - 'name', - 'description', - 'color', - 'iconUrl', - 'target', - 'condFormula', - 'isPublic', - 'isModerator', - 'isAdministrator', - 'asBadge', - 'canEditMembersByModerator', - 'displayOrder', - 'policies', - ], -} as const; - // eslint-disable-next-line import/no-default-export @Injectable() -export default class extends Endpoint { +export default class extends Endpoint<'admin/roles/create'> { + name = 'admin/roles/create' as const; constructor( @Inject(DI.rolesRepository) private rolesRepository: RolesRepository, @@ -61,7 +18,7 @@ export default class extends Endpoint { private idService: IdService, private roleEntityService: RoleEntityService, ) { - super(meta, paramDef, async (ps, me) => { + super(async (ps, me) => { const date = new Date(); const created = await this.rolesRepository.insert({ id: this.idService.genId(), diff --git a/packages/misskey-js/src/endpoints.ts b/packages/misskey-js/src/endpoints.ts index 01709bea9a..6d629d8501 100644 --- a/packages/misskey-js/src/endpoints.ts +++ b/packages/misskey-js/src/endpoints.ts @@ -1039,7 +1039,116 @@ export const endpoints = { }, }, }], - } + }, + 'admin/relays/remove': { + tags: ['admin'], + + requireCredential: true, + requireModerator: true, + + defines: [{ + req: { + type: 'object', + properties: { + inbox: { type: 'string' }, + }, + required: ['inbox'], + }, + res: undefined, + }], + }, + 'admin/roles/assign': { + tags: ['admin', 'role'], + + requireCredential: true, + requireModerator: true, + + errors: { + noSuchRole: { + message: 'No such role.', + code: 'NO_SUCH_ROLE', + id: '6503c040-6af4-4ed9-bf07-f2dd16678eab', + }, + + noSuchUser: { + message: 'No such user.', + code: 'NO_SUCH_USER', + id: '558ea170-f653-4700-94d0-5a818371d0df', + }, + + accessDenied: { + message: 'Only administrators can edit members of the role.', + code: 'ACCESS_DENIED', + id: '25b5bc31-dc79-4ebd-9bd2-c84978fd052c', + }, + }, + + defines: [{ + req: { + type: 'object', + properties: { + roleId: { type: 'string', format: 'misskey:id' }, + userId: { type: 'string', format: 'misskey:id' }, + expiresAt: { + type: ['integer', 'null'], + }, + }, + required: [ + 'roleId', + 'userId', + ], + }, + res: undefined, + }], + }, + 'admin/roles/create': { + tags: ['admin', 'role'], + + requireCredential: true, + requireAdmin: true, + + defines: [{ + req: { + type: 'object', + properties: { + name: { type: 'string' }, + description: { type: 'string' }, + color: { type: ['string', 'null'] }, + iconUrl: { type: ['string', 'null'] }, + target: { type: 'string', enum: ['manual', 'conditional'] }, + condFormula: { type: 'object' }, + isPublic: { type: 'boolean' }, + isModerator: { type: 'boolean' }, + isAdministrator: { type: 'boolean' }, + isExplorable: { type: 'boolean', default: false }, // optional for backward compatibility + asBadge: { type: 'boolean' }, + canEditMembersByModerator: { type: 'boolean' }, + displayOrder: { type: 'number' }, + policies: { + type: 'object', + }, + }, + required: [ + 'name', + 'description', + 'color', + 'iconUrl', + 'target', + 'condFormula', + 'isPublic', + 'isModerator', + 'isAdministrator', + 'asBadge', + 'canEditMembersByModerator', + 'displayOrder', + 'policies', + ], + }, + res: { + $ref: 'https://misskey-hub.net/api/schemas/Role', + }, + }], + }, } as const satisfies { [x: string]: IEndpointMeta; }; /**