From 1cb2b38dcbf7f9cf1fbe60b0e62a3fb0467d36e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Wed, 12 Feb 2025 09:45:01 +0900 Subject: [PATCH 01/10] backend --- packages/backend/src/core/CoreModule.ts | 6 + .../src/core/FanoutTimelineEndpointService.ts | 5 + .../backend/src/core/GlobalEventService.ts | 4 +- packages/backend/src/core/QueryService.ts | 18 +- packages/backend/src/core/SearchService.ts | 7 +- .../src/core/note/NoteMutingService.ts | 143 + packages/backend/src/di-symbols.ts | 1 + .../src/misc/is-muting-note-related.ts | 26 + packages/backend/src/models/NoteMuting.ts | 44 + .../backend/src/models/RepositoryModule.ts | 9 + packages/backend/src/models/_.ts | 3 + .../backend/src/server/api/endpoint-list.ts | 4 + .../server/api/endpoints/antennas/notes.ts | 1 + .../server/api/endpoints/channels/timeline.ts | 1 + .../src/server/api/endpoints/clips/notes.ts | 1 + .../server/api/endpoints/notes/children.ts | 1 + .../api/endpoints/notes/global-timeline.ts | 1 + .../api/endpoints/notes/hybrid-timeline.ts | 3 +- .../api/endpoints/notes/local-timeline.ts | 9 +- .../server/api/endpoints/notes/mentions.ts | 1 + .../api/endpoints/notes/muting/create.ts | 62 + .../api/endpoints/notes/muting/delete.ts | 55 + .../server/api/endpoints/notes/muting/list.ts | 63 + .../api/endpoints/notes/muting/update.ts | 64 + .../src/server/api/endpoints/notes/renotes.ts | 7 +- .../src/server/api/endpoints/notes/replies.ts | 7 +- .../api/endpoints/notes/search-by-tag.ts | 7 +- .../server/api/endpoints/notes/timeline.ts | 1 + .../api/endpoints/notes/user-list-timeline.ts | 1 + .../src/server/api/endpoints/roles/notes.ts | 1 + .../src/server/api/endpoints/users/notes.ts | 1 + .../src/server/api/stream/Connection.ts | 7 +- .../backend/src/server/api/stream/channel.ts | 8 + packages/misskey-js/etc/misskey-js.api.md | 16 + .../misskey-js/src/autogen/apiClientJSDoc.ts | 4692 +++++++++-------- packages/misskey-js/src/autogen/endpoint.ts | 8 + packages/misskey-js/src/autogen/entities.ts | 4 + 37 files changed, 2950 insertions(+), 2342 deletions(-) create mode 100644 packages/backend/src/core/note/NoteMutingService.ts create mode 100644 packages/backend/src/misc/is-muting-note-related.ts create mode 100644 packages/backend/src/models/NoteMuting.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/muting/create.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/muting/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/muting/list.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/muting/update.ts diff --git a/packages/backend/src/core/CoreModule.ts b/packages/backend/src/core/CoreModule.ts index dc85a23e5b..88cccff0ba 100644 --- a/packages/backend/src/core/CoreModule.ts +++ b/packages/backend/src/core/CoreModule.ts @@ -4,6 +4,7 @@ */ import { Module } from '@nestjs/common'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; import { FanoutTimelineEndpointService } from '@/core/FanoutTimelineEndpointService.js'; import { AbuseReportService } from '@/core/AbuseReportService.js'; import { SystemWebhookEntityService } from '@/core/entities/SystemWebhookEntityService.js'; @@ -185,6 +186,7 @@ const $NoteCreateService: Provider = { provide: 'NoteCreateService', useExisting const $NoteDeleteService: Provider = { provide: 'NoteDeleteService', useExisting: NoteDeleteService }; const $NotePiningService: Provider = { provide: 'NotePiningService', useExisting: NotePiningService }; const $NoteReadService: Provider = { provide: 'NoteReadService', useExisting: NoteReadService }; +const $NoteMutingService: Provider = { provide: 'NoteMutingService', useExisting: NoteMutingService }; const $NotificationService: Provider = { provide: 'NotificationService', useExisting: NotificationService }; const $PollService: Provider = { provide: 'PollService', useExisting: PollService }; const $SystemAccountService: Provider = { provide: 'SystemAccountService', useExisting: SystemAccountService }; @@ -334,6 +336,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting NoteDeleteService, NotePiningService, NoteReadService, + NoteMutingService, NotificationService, PollService, SystemAccountService, @@ -479,6 +482,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting $NoteDeleteService, $NotePiningService, $NoteReadService, + $NoteMutingService, $NotificationService, $PollService, $SystemAccountService, @@ -625,6 +629,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting NoteDeleteService, NotePiningService, NoteReadService, + NoteMutingService, NotificationService, PollService, SystemAccountService, @@ -769,6 +774,7 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting $NoteDeleteService, $NotePiningService, $NoteReadService, + $NoteMutingService, $NotificationService, $PollService, $SystemAccountService, diff --git a/packages/backend/src/core/FanoutTimelineEndpointService.ts b/packages/backend/src/core/FanoutTimelineEndpointService.ts index b05af99c5e..fd2dfa2043 100644 --- a/packages/backend/src/core/FanoutTimelineEndpointService.ts +++ b/packages/backend/src/core/FanoutTimelineEndpointService.ts @@ -17,6 +17,7 @@ import { isQuote, isRenote } from '@/misc/is-renote.js'; import { CacheService } from '@/core/CacheService.js'; import { isReply } from '@/misc/is-reply.js'; import { isInstanceMuted } from '@/misc/is-instance-muted.js'; +import { NoteMutingService } from './note/NoteMutingService.js'; type TimelineOptions = { untilId: string | null, @@ -45,6 +46,7 @@ export class FanoutTimelineEndpointService { private noteEntityService: NoteEntityService, private cacheService: CacheService, private fanoutTimelineService: FanoutTimelineService, + private noteMutingService: NoteMutingService, ) { } @@ -101,11 +103,13 @@ export class FanoutTimelineEndpointService { userIdsWhoMeMutingRenotes, userIdsWhoBlockingMe, userMutedInstances, + noteMutings, ] = await Promise.all([ this.cacheService.userMutingsCache.fetch(ps.me.id), this.cacheService.renoteMutingsCache.fetch(ps.me.id), this.cacheService.userBlockedCache.fetch(ps.me.id), this.cacheService.userProfileCache.fetch(me.id).then(p => new Set(p.mutedInstances)), + this.noteMutingService.getMutingNoteIdsSet(me.id), ]); const parentFilter = filter; @@ -114,6 +118,7 @@ export class FanoutTimelineEndpointService { if (isUserRelated(note, userIdsWhoMeMuting, ps.ignoreAuthorFromMute)) return false; if (!ps.ignoreAuthorFromMute && isRenote(note) && !isQuote(note) && userIdsWhoMeMutingRenotes.has(note.userId)) return false; if (isInstanceMuted(note, userMutedInstances)) return false; + if (noteMutings.has(note.id)) return false; return parentFilter(note); }; diff --git a/packages/backend/src/core/GlobalEventService.ts b/packages/backend/src/core/GlobalEventService.ts index 224fdabc4c..7e4893a1a4 100644 --- a/packages/backend/src/core/GlobalEventService.ts +++ b/packages/backend/src/core/GlobalEventService.ts @@ -20,7 +20,7 @@ import type { MiPage } from '@/models/Page.js'; import type { MiWebhook } from '@/models/Webhook.js'; import type { MiSystemWebhook } from '@/models/SystemWebhook.js'; import type { MiMeta } from '@/models/Meta.js'; -import { MiAvatarDecoration, MiReversiGame, MiRole, MiRoleAssignment } from '@/models/_.js'; +import { MiAvatarDecoration, MiNoteMuting, MiReversiGame, MiRole, MiRoleAssignment } from '@/models/_.js'; import type { Packed } from '@/misc/json-schema.js'; import { DI } from '@/di-symbols.js'; import type { Config } from '@/config.js'; @@ -249,6 +249,8 @@ export interface InternalEventTypes { unmute: { muterId: MiUser['id']; muteeId: MiUser['id']; }; userListMemberAdded: { userListId: MiUserList['id']; memberId: MiUser['id']; }; userListMemberRemoved: { userListId: MiUserList['id']; memberId: MiUser['id']; }; + noteMuteCreated: MiNoteMuting; + noteMuteDeleted: MiNoteMuting; } type EventTypesToEventPayload = EventUnionFromDictionary>>; diff --git a/packages/backend/src/core/QueryService.ts b/packages/backend/src/core/QueryService.ts index c4feeaf971..c56a3309a9 100644 --- a/packages/backend/src/core/QueryService.ts +++ b/packages/backend/src/core/QueryService.ts @@ -7,7 +7,7 @@ import { Inject, Injectable } from '@nestjs/common'; import { Brackets, ObjectLiteral } from 'typeorm'; import { DI } from '@/di-symbols.js'; import type { MiUser } from '@/models/User.js'; -import type { UserProfilesRepository, FollowingsRepository, ChannelFollowingsRepository, BlockingsRepository, NoteThreadMutingsRepository, MutingsRepository, RenoteMutingsRepository } from '@/models/_.js'; +import type { UserProfilesRepository, FollowingsRepository, ChannelFollowingsRepository, BlockingsRepository, NoteThreadMutingsRepository, MutingsRepository, RenoteMutingsRepository, NoteMutingsRepository } from '@/models/_.js'; import { bindThis } from '@/decorators.js'; import { IdService } from '@/core/IdService.js'; import type { SelectQueryBuilder } from 'typeorm'; @@ -21,12 +21,12 @@ export class QueryService { @Inject(DI.followingsRepository) private followingsRepository: FollowingsRepository, - @Inject(DI.channelFollowingsRepository) - private channelFollowingsRepository: ChannelFollowingsRepository, - @Inject(DI.blockingsRepository) private blockingsRepository: BlockingsRepository, + @Inject(DI.noteMutingsRepository) + private noteMutingsRepository: NoteMutingsRepository, + @Inject(DI.noteThreadMutingsRepository) private noteThreadMutingsRepository: NoteThreadMutingsRepository, @@ -110,6 +110,16 @@ export class QueryService { q.setParameters(blockedQuery.getParameters()); } + @bindThis + public generateMutedNoteQuery(q: SelectQueryBuilder, me: { id: MiUser['id'] }): void { + const query = this.noteMutingsRepository.createQueryBuilder('noteMuting') + .select('noteMuting.noteId') + .where('noteMuting.userId = :userId', { userId: me.id }); + + q.andWhere(`note.id NOT IN (${ query.getQuery() })`); + q.setParameters(query.getParameters()); + } + @bindThis public generateMutedNoteThreadQuery(q: SelectQueryBuilder, me: { id: MiUser['id'] }): void { const mutedQuery = this.noteThreadMutingsRepository.createQueryBuilder('threadMuted') diff --git a/packages/backend/src/core/SearchService.ts b/packages/backend/src/core/SearchService.ts index bc62559e46..3004324137 100644 --- a/packages/backend/src/core/SearchService.ts +++ b/packages/backend/src/core/SearchService.ts @@ -234,8 +234,11 @@ export class SearchService { } this.queryService.generateVisibilityQuery(query, me); - if (me) this.queryService.generateMutedUserQuery(query, me); - if (me) this.queryService.generateBlockedUserQuery(query, me); + if (me) { + this.queryService.generateMutedUserQuery(query, me); + this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); + } return query.limit(pagination.limit).getMany(); } diff --git a/packages/backend/src/core/note/NoteMutingService.ts b/packages/backend/src/core/note/NoteMutingService.ts new file mode 100644 index 0000000000..ed7211c799 --- /dev/null +++ b/packages/backend/src/core/note/NoteMutingService.ts @@ -0,0 +1,143 @@ +import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; +import * as Redis from 'ioredis'; +import { RedisKVCache } from '@/misc/cache.js'; +import { GlobalEvents, GlobalEventService } from '@/core/GlobalEventService.js'; +import { IdService } from '@/core/IdService.js'; +import { bindThis } from '@/decorators.js'; +import { DI } from '@/di-symbols.js'; +import type { MiNoteMuting, NoteMutingsRepository } from '@/models/_.js'; + +@Injectable() +export class NoteMutingService implements OnApplicationShutdown { + public static NoSuchItemError = class extends Error { + }; + + private cache: RedisKVCache>; + + constructor( + @Inject(DI.redis) + private redisClient: Redis.Redis, + @Inject(DI.redisForSub) + private redisForSub: Redis.Redis, + @Inject(DI.noteMutingsRepository) + private noteMutingsRepository: NoteMutingsRepository, + private idService: IdService, + private globalEventService: GlobalEventService, + ) { + this.redisForSub.on('message', this.onMessage); + this.cache = new RedisKVCache>(this.redisClient, 'noteMutings', { + lifetime: 1000 * 60 * 30, // 30m + memoryCacheLifetime: 1000 * 60, // 1m + fetcher: (userId) => this.listByUserId(userId).then(xs => new Set(xs.map(x => x.noteId))), + toRedisConverter: (value) => JSON.stringify(Array.from(value)), + fromRedisConverter: (value) => new Set(JSON.parse(value)), + }); + } + + @bindThis + private async onMessage(_: string, data: string): Promise { + const obj = JSON.parse(data); + if (obj.channel !== 'internal') { + return; + } + + const { type, body } = obj.message as GlobalEvents['internal']['payload']; + switch (type) { + case 'noteMuteCreated': { + const noteIds = await this.cache.get(body.userId); + if (noteIds) { + noteIds.add(body.noteId); + } + break; + } + case 'noteMuteDeleted': { + const noteIds = await this.cache.get(body.userId); + if (noteIds) { + noteIds.delete(body.noteId); + } + break; + } + } + } + + @bindThis + public async listByUserId( + userId: MiNoteMuting['userId'], + opts?: { + joinUser?: boolean; + joinNote?: boolean; + }, + ): Promise { + const q = this.noteMutingsRepository.createQueryBuilder('noteMuting'); + + q.where('noteMuting.userId = :userId', { userId }); + if (opts?.joinUser) { + q.leftJoinAndSelect('noteMuting.user', 'user'); + } + if (opts?.joinNote) { + q.leftJoinAndSelect('noteMuting.note', 'note'); + } + + return q.getMany(); + } + + @bindThis + public async getMutingNoteIdsSet(userId: MiNoteMuting['userId']): Promise> { + return this.cache.fetch(userId); + } + + @bindThis + public async get(id: MiNoteMuting['id']): Promise { + const result = await this.noteMutingsRepository.findOne({ where: { id } }); + if (!result) { + throw new NoteMutingService.NoSuchItemError(); + } + + return result; + } + + @bindThis + public async create( + params: Pick, + ): Promise { + const id = this.idService.gen(); + const result = await this.noteMutingsRepository.insertOne({ + id, + ...params, + }); + + this.globalEventService.publishInternalEvent('noteMuteCreated', result); + } + + @bindThis + public async update( + id: MiNoteMuting['id'], + params: Partial>, + ): Promise { + await this.noteMutingsRepository.update(id, params); + + // 現状、ミュート設定の有無しかキャッシュしていないので更新時はイベントを発行しない。 + // 他に細かい設定が登場した場合はキャッシュの型をSetからMapに変えつつ、イベントを発行するようにする。 + } + + @bindThis + public async delete(id: MiNoteMuting['id']): Promise { + const value = await this.noteMutingsRepository.findOne({ where: { id } }); + if (!value) { + return; + } + + await this.noteMutingsRepository.delete(id); + this.globalEventService.publishInternalEvent('noteMuteDeleted', value); + } + + @bindThis + public dispose(): void { + this.redisForSub.off('message', this.onMessage); + } + + @bindThis + public onApplicationShutdown(): void { + this.dispose(); + } +} diff --git a/packages/backend/src/di-symbols.ts b/packages/backend/src/di-symbols.ts index a306aac1a1..cdfb4a6fe2 100644 --- a/packages/backend/src/di-symbols.ts +++ b/packages/backend/src/di-symbols.ts @@ -22,6 +22,7 @@ export const DI = { appsRepository: Symbol('appsRepository'), avatarDecorationsRepository: Symbol('avatarDecorationsRepository'), noteFavoritesRepository: Symbol('noteFavoritesRepository'), + noteMutingsRepository: Symbol('noteMutingsRepository'), noteThreadMutingsRepository: Symbol('noteThreadMutingsRepository'), noteReactionsRepository: Symbol('noteReactionsRepository'), noteUnreadsRepository: Symbol('noteUnreadsRepository'), diff --git a/packages/backend/src/misc/is-muting-note-related.ts b/packages/backend/src/misc/is-muting-note-related.ts new file mode 100644 index 0000000000..eb72b5a393 --- /dev/null +++ b/packages/backend/src/misc/is-muting-note-related.ts @@ -0,0 +1,26 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +type NoteCompat = { + id: string; + reply?: NoteCompat | null; + renote?: NoteCompat | null; +} + +export function isMutingNoteRelated(note: NoteCompat, noteIds: Set) { + if (noteIds.has(note.id)) { + return true; + } + + if (note.reply != null && noteIds.has(note.reply.id)) { + return true; + } + + if (note.renote != null && noteIds.has(note.renote.id)) { + return true; + } + + return false; +} diff --git a/packages/backend/src/models/NoteMuting.ts b/packages/backend/src/models/NoteMuting.ts new file mode 100644 index 0000000000..b2c4cdc346 --- /dev/null +++ b/packages/backend/src/models/NoteMuting.ts @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm'; +import { id } from './util/id.js'; +import { MiUser } from './User.js'; +import { MiNote } from './Note.js'; + +@Entity('note_muting') +export class MiNoteMuting { + @PrimaryColumn(id()) + public id: string; + + @Index() + @Column({ + ...id(), + }) + public userId: MiUser['id']; + + @ManyToOne(type => MiUser, { + onDelete: 'CASCADE', + }) + @JoinColumn() + public user: MiUser | null; + + @Index() + @Column('varchar', { + ...id(), + }) + public noteId: string; + + @ManyToOne(type => MiNote, { + onDelete: 'CASCADE', + }) + @JoinColumn() + public note: MiNote | null; + + @Column('timestamp with time zone', { + nullable: true, + }) + public expiresAt: Date | null; +} diff --git a/packages/backend/src/models/RepositoryModule.ts b/packages/backend/src/models/RepositoryModule.ts index 04a9df6cfb..a89f14d5a2 100644 --- a/packages/backend/src/models/RepositoryModule.ts +++ b/packages/backend/src/models/RepositoryModule.ts @@ -40,6 +40,7 @@ import { MiMuting, MiNote, MiNoteFavorite, + MiNoteMuting, MiNoteReaction, MiNoteThreadMuting, MiNoteUnread, @@ -124,6 +125,12 @@ const $noteFavoritesRepository: Provider = { inject: [DI.db], }; +const $noteMutingsRepository: Provider = { + provide: DI.noteMutingsRepository, + useFactory: (db: DataSource) => db.getRepository(MiNoteMuting).extend(miRepository as MiRepository), + inject: [DI.db], +}; + const $noteThreadMutingsRepository: Provider = { provide: DI.noteThreadMutingsRepository, useFactory: (db: DataSource) => db.getRepository(MiNoteThreadMuting).extend(miRepository as MiRepository), @@ -512,6 +519,7 @@ const $reversiGamesRepository: Provider = { $appsRepository, $avatarDecorationsRepository, $noteFavoritesRepository, + $noteMutingsRepository, $noteThreadMutingsRepository, $noteReactionsRepository, $noteUnreadsRepository, @@ -584,6 +592,7 @@ const $reversiGamesRepository: Provider = { $appsRepository, $avatarDecorationsRepository, $noteFavoritesRepository, + $noteMutingsRepository, $noteThreadMutingsRepository, $noteReactionsRepository, $noteUnreadsRepository, diff --git a/packages/backend/src/models/_.ts b/packages/backend/src/models/_.ts index fa15760c00..474eccf530 100644 --- a/packages/backend/src/models/_.ts +++ b/packages/backend/src/models/_.ts @@ -80,6 +80,7 @@ import { MiFlashLike } from '@/models/FlashLike.js'; import { MiUserListFavorite } from '@/models/UserListFavorite.js'; import { MiBubbleGameRecord } from '@/models/BubbleGameRecord.js'; import { MiReversiGame } from '@/models/ReversiGame.js'; +import { MiNoteMuting } from './NoteMuting.js'; import type { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity.js'; export interface MiRepository { @@ -158,6 +159,7 @@ export { MiNote, MiNoteFavorite, MiNoteReaction, + MiNoteMuting, MiNoteThreadMuting, MiNoteUnread, MiPage, @@ -230,6 +232,7 @@ export type RenoteMutingsRepository = Repository & MiRepository< export type NotesRepository = Repository & MiRepository; export type NoteFavoritesRepository = Repository & MiRepository; export type NoteReactionsRepository = Repository & MiRepository; +export type NoteMutingsRepository = Repository & MiRepository; export type NoteThreadMutingsRepository = Repository & MiRepository; export type NoteUnreadsRepository = Repository & MiRepository; export type PagesRepository = Repository & MiRepository; diff --git a/packages/backend/src/server/api/endpoint-list.ts b/packages/backend/src/server/api/endpoint-list.ts index 560d3f6587..566bb7afb3 100644 --- a/packages/backend/src/server/api/endpoint-list.ts +++ b/packages/backend/src/server/api/endpoint-list.ts @@ -325,6 +325,10 @@ export * as 'notes/timeline' from './endpoints/notes/timeline.js'; export * as 'notes/translate' from './endpoints/notes/translate.js'; export * as 'notes/unrenote' from './endpoints/notes/unrenote.js'; export * as 'notes/user-list-timeline' from './endpoints/notes/user-list-timeline.js'; +export * as 'notes/muting/create' from './endpoints/notes/muting/create.js'; +export * as 'notes/muting/update' from './endpoints/notes/muting/update.js'; +export * as 'notes/muting/delete' from './endpoints/notes/muting/delete.js'; +export * as 'notes/muting/list' from './endpoints/notes/muting/list.js'; export * as 'notifications/create' from './endpoints/notifications/create.js'; export * as 'notifications/flush' from './endpoints/notifications/flush.js'; export * as 'notifications/mark-all-as-read' from './endpoints/notifications/mark-all-as-read.js'; diff --git a/packages/backend/src/server/api/endpoints/antennas/notes.ts b/packages/backend/src/server/api/endpoints/antennas/notes.ts index f4dfe1ecc4..87b063457a 100644 --- a/packages/backend/src/server/api/endpoints/antennas/notes.ts +++ b/packages/backend/src/server/api/endpoints/antennas/notes.ts @@ -116,6 +116,7 @@ export default class extends Endpoint { // eslint- this.queryService.generateVisibilityQuery(query, me); this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); const notes = await query.getMany(); if (sinceId != null && untilId == null) { diff --git a/packages/backend/src/server/api/endpoints/channels/timeline.ts b/packages/backend/src/server/api/endpoints/channels/timeline.ts index d4fd75e049..8b0ba5af79 100644 --- a/packages/backend/src/server/api/endpoints/channels/timeline.ts +++ b/packages/backend/src/server/api/endpoints/channels/timeline.ts @@ -124,6 +124,7 @@ export default class extends Endpoint { // eslint- if (me) { this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); } //#endregion diff --git a/packages/backend/src/server/api/endpoints/clips/notes.ts b/packages/backend/src/server/api/endpoints/clips/notes.ts index 943c31c894..b8723e4b69 100644 --- a/packages/backend/src/server/api/endpoints/clips/notes.ts +++ b/packages/backend/src/server/api/endpoints/clips/notes.ts @@ -89,6 +89,7 @@ export default class extends Endpoint { // eslint- this.queryService.generateVisibilityQuery(query, me); this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); } const notes = await query diff --git a/packages/backend/src/server/api/endpoints/notes/children.ts b/packages/backend/src/server/api/endpoints/notes/children.ts index 0c6533d336..ae2b57911c 100644 --- a/packages/backend/src/server/api/endpoints/notes/children.ts +++ b/packages/backend/src/server/api/endpoints/notes/children.ts @@ -73,6 +73,7 @@ export default class extends Endpoint { // eslint- if (me) { this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); } const notes = await query.limit(ps.limit).getMany(); diff --git a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts index 258a0bfb8f..771c1e8793 100644 --- a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts @@ -82,6 +82,7 @@ export default class extends Endpoint { // eslint- this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); this.queryService.generateMutedUserRenotesQueryForNotes(query, me); + this.queryService.generateMutedNoteQuery(query, me); } if (ps.withFiles) { diff --git a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts index aed9065bf9..f60fb65334 100644 --- a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts @@ -46,7 +46,7 @@ export const meta = { bothWithRepliesAndWithFiles: { message: 'Specifying both withReplies and withFiles is not supported', code: 'BOTH_WITH_REPLIES_AND_WITH_FILES', - id: 'dfaa3eb7-8002-4cb7-bcc4-1095df46656f' + id: 'dfaa3eb7-8002-4cb7-bcc4-1095df46656f', }, }, } as const; @@ -246,6 +246,7 @@ export default class extends Endpoint { // eslint- this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); this.queryService.generateMutedUserRenotesQueryForNotes(query, me); + this.queryService.generateMutedNoteQuery(query, me); if (ps.includeMyRenotes === false) { query.andWhere(new Brackets(qb => { diff --git a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts index 0b48f2c78b..a91f92b41d 100644 --- a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts @@ -156,9 +156,12 @@ export default class extends Endpoint { // eslint- .leftJoinAndSelect('renote.user', 'renoteUser'); this.queryService.generateVisibilityQuery(query, me); - if (me) this.queryService.generateMutedUserQuery(query, me); - if (me) this.queryService.generateBlockedUserQuery(query, me); - if (me) this.queryService.generateMutedUserRenotesQueryForNotes(query, me); + if (me) { + this.queryService.generateMutedUserQuery(query, me); + this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedUserRenotesQueryForNotes(query, me); + this.queryService.generateMutedNoteQuery(query, me); + } if (ps.withFiles) { query.andWhere('note.fileIds != \'{}\''); diff --git a/packages/backend/src/server/api/endpoints/notes/mentions.ts b/packages/backend/src/server/api/endpoints/notes/mentions.ts index 5558dd3a8b..9e9092bb8b 100644 --- a/packages/backend/src/server/api/endpoints/notes/mentions.ts +++ b/packages/backend/src/server/api/endpoints/notes/mentions.ts @@ -77,6 +77,7 @@ export default class extends Endpoint { // eslint- this.queryService.generateMutedUserQuery(query, me); this.queryService.generateMutedNoteThreadQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); if (ps.visibility) { query.andWhere('note.visibility = :visibility', { visibility: ps.visibility }); diff --git a/packages/backend/src/server/api/endpoints/notes/muting/create.ts b/packages/backend/src/server/api/endpoints/notes/muting/create.ts new file mode 100644 index 0000000000..468561fad9 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/notes/muting/create.ts @@ -0,0 +1,62 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Injectable } from '@nestjs/common'; +import ms from 'ms'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { GetterService } from '@/server/api/GetterService.js'; +import { ApiError } from '../../../error.js'; + +export const meta = { + tags: ['notes'], + + requireCredential: true, + + kind: 'write:account', + + limit: { + duration: ms('1hour'), + max: 10, + }, + + errors: { + noSuchNote: { + message: 'No such note.', + code: 'NO_SUCH_NOTE', + id: 'a58e7999-f6d3-1780-a688-f43661719662', + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + noteId: { type: 'string', format: 'misskey:id' }, + expiresAt: { type: 'integer', nullable: true }, + }, + required: ['noteId'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private readonly noteMutingService: NoteMutingService, + private readonly getterService: GetterService, + ) { + super(meta, paramDef, async (ps, me) => { + const note = await this.getterService.getNote(ps.noteId).catch(err => { + if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(meta.errors.noSuchNote); + throw err; + }); + + await this.noteMutingService.create({ + userId: me.id, + noteId: note.id, + expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null, + }); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/notes/muting/delete.ts b/packages/backend/src/server/api/endpoints/notes/muting/delete.ts new file mode 100644 index 0000000000..0a01e5f1de --- /dev/null +++ b/packages/backend/src/server/api/endpoints/notes/muting/delete.ts @@ -0,0 +1,55 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Injectable } from '@nestjs/common'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { ApiError } from '../../../error.js'; + +export const meta = { + tags: ['notes'], + + requireCredential: true, + + kind: 'write:account', + + errors: { + noSuchItem: { + message: 'No such item.', + code: 'NO_SUCH_ITEM', + id: '6ad3b6c9-f173-60f7-b558-5eea13896254', + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + id: { type: 'string', format: 'misskey:id' }, + }, + required: ['id'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private readonly noteMutingService: NoteMutingService, + ) { + super(meta, paramDef, async (ps) => { + try { + // Existence check + await this.noteMutingService.get(ps.id); + } catch (e) { + if (e instanceof NoteMutingService.NoSuchItemError) { + throw new ApiError(meta.errors.noSuchItem); + } + + throw e; + } + + await this.noteMutingService.delete(ps.id); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/notes/muting/list.ts b/packages/backend/src/server/api/endpoints/notes/muting/list.ts new file mode 100644 index 0000000000..1e0f1a0257 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/notes/muting/list.ts @@ -0,0 +1,63 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Injectable } from '@nestjs/common'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; + +export const meta = { + tags: ['notes'], + + requireCredential: true, + + kind: 'read:account', + + res: { + type: 'object', + properties: { + notes: { + type: 'array', + items: { + type: 'object', + properties: { + id: { type: 'string' }, + expiresAt: { type: 'string', format: 'date-time', nullable: true }, + note: { type: 'object', ref: 'Note' }, + }, + }, + }, + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: {}, + required: [], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private readonly noteMutingService: NoteMutingService, + private readonly noteEntityService: NoteEntityService, + ) { + super(meta, paramDef, async (ps, me) => { + const mutings = await this.noteMutingService.listByUserId(me.id, { joinNote: true }); + + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const packedNotes = await this.noteEntityService.packMany(mutings.map(m => m.note!)) + .then(res => new Map(res.map(it => [it.id, it]))); + + return mutings.map(m => ({ + id: m.id, + expiresAt: m.expiresAt, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + note: packedNotes.get(m.noteId)!, + })); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/notes/muting/update.ts b/packages/backend/src/server/api/endpoints/notes/muting/update.ts new file mode 100644 index 0000000000..1b0b3fc13b --- /dev/null +++ b/packages/backend/src/server/api/endpoints/notes/muting/update.ts @@ -0,0 +1,64 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Injectable } from '@nestjs/common'; +import ms from 'ms'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { ApiError } from '../../../error.js'; + +export const meta = { + tags: ['notes'], + + requireCredential: true, + + kind: 'write:account', + + limit: { + duration: ms('1hour'), + max: 10, + }, + + errors: { + noSuchItem: { + message: 'No such item.', + code: 'NO_SUCH_ITEM', + id: '502ce7a1-d8b0-7094-78e2-ff5b8190efc9', + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + id: { type: 'string', format: 'misskey:id' }, + expiresAt: { type: 'integer', nullable: true }, + }, + required: ['id'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + private readonly noteMutingService: NoteMutingService, + ) { + super(meta, paramDef, async (ps, me) => { + try { + // Existence check + await this.noteMutingService.get(ps.id); + } catch (e) { + if (e instanceof NoteMutingService.NoSuchItemError) { + throw new ApiError(meta.errors.noSuchItem); + } + + throw e; + } + + await this.noteMutingService.update(ps.id, { + expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null, + }); + }); + } +} diff --git a/packages/backend/src/server/api/endpoints/notes/renotes.ts b/packages/backend/src/server/api/endpoints/notes/renotes.ts index ffe1ee6eb8..a385d3dbfb 100644 --- a/packages/backend/src/server/api/endpoints/notes/renotes.ts +++ b/packages/backend/src/server/api/endpoints/notes/renotes.ts @@ -72,8 +72,11 @@ export default class extends Endpoint { // eslint- .leftJoinAndSelect('renote.user', 'renoteUser'); this.queryService.generateVisibilityQuery(query, me); - if (me) this.queryService.generateMutedUserQuery(query, me); - if (me) this.queryService.generateBlockedUserQuery(query, me); + if (me) { + this.queryService.generateMutedUserQuery(query, me); + this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); + } const renotes = await query.limit(ps.limit).getMany(); diff --git a/packages/backend/src/server/api/endpoints/notes/replies.ts b/packages/backend/src/server/api/endpoints/notes/replies.ts index 5f32332a6a..973794fb79 100644 --- a/packages/backend/src/server/api/endpoints/notes/replies.ts +++ b/packages/backend/src/server/api/endpoints/notes/replies.ts @@ -56,8 +56,11 @@ export default class extends Endpoint { // eslint- .leftJoinAndSelect('renote.user', 'renoteUser'); this.queryService.generateVisibilityQuery(query, me); - if (me) this.queryService.generateMutedUserQuery(query, me); - if (me) this.queryService.generateBlockedUserQuery(query, me); + if (me) { + this.queryService.generateMutedUserQuery(query, me); + this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); + } const timeline = await query.limit(ps.limit).getMany(); diff --git a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts index 626ff080c7..2d18d1bbf1 100644 --- a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts +++ b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts @@ -81,8 +81,11 @@ export default class extends Endpoint { // eslint- .leftJoinAndSelect('renote.user', 'renoteUser'); this.queryService.generateVisibilityQuery(query, me); - if (me) this.queryService.generateMutedUserQuery(query, me); - if (me) this.queryService.generateBlockedUserQuery(query, me); + if (me) { + this.queryService.generateMutedUserQuery(query, me); + this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); + } try { if (ps.tag) { diff --git a/packages/backend/src/server/api/endpoints/notes/timeline.ts b/packages/backend/src/server/api/endpoints/notes/timeline.ts index 7cb11cc1eb..a929b7dc04 100644 --- a/packages/backend/src/server/api/endpoints/notes/timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/timeline.ts @@ -202,6 +202,7 @@ export default class extends Endpoint { // eslint- this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); this.queryService.generateMutedUserRenotesQueryForNotes(query, me); + this.queryService.generateMutedNoteQuery(query, me); if (ps.includeMyRenotes === false) { query.andWhere(new Brackets(qb => { diff --git a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts index 87f9b322a6..cf0c236cb2 100644 --- a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts +++ b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts @@ -187,6 +187,7 @@ export default class extends Endpoint { // eslint- this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); this.queryService.generateMutedUserRenotesQueryForNotes(query, me); + this.queryService.generateMutedNoteQuery(query, me); if (ps.includeMyRenotes === false) { query.andWhere(new Brackets(qb => { diff --git a/packages/backend/src/server/api/endpoints/roles/notes.ts b/packages/backend/src/server/api/endpoints/roles/notes.ts index 71f2782a5d..a7c39e3368 100644 --- a/packages/backend/src/server/api/endpoints/roles/notes.ts +++ b/packages/backend/src/server/api/endpoints/roles/notes.ts @@ -104,6 +104,7 @@ export default class extends Endpoint { // eslint- this.queryService.generateVisibilityQuery(query, me); this.queryService.generateMutedUserQuery(query, me); this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); const notes = await query.getMany(); notes.sort((a, b) => a.id > b.id ? -1 : 1); diff --git a/packages/backend/src/server/api/endpoints/users/notes.ts b/packages/backend/src/server/api/endpoints/users/notes.ts index e9c334057e..ad474f50a0 100644 --- a/packages/backend/src/server/api/endpoints/users/notes.ts +++ b/packages/backend/src/server/api/endpoints/users/notes.ts @@ -187,6 +187,7 @@ export default class extends Endpoint { // eslint- if (me) { this.queryService.generateMutedUserQuery(query, me, { id: ps.userId }); this.queryService.generateBlockedUserQuery(query, me); + this.queryService.generateMutedNoteQuery(query, me); } if (ps.withFiles) { diff --git a/packages/backend/src/server/api/stream/Connection.ts b/packages/backend/src/server/api/stream/Connection.ts index 0fb5238c78..2be168d917 100644 --- a/packages/backend/src/server/api/stream/Connection.ts +++ b/packages/backend/src/server/api/stream/Connection.ts @@ -16,6 +16,7 @@ import type { StreamEventEmitter, GlobalEvents } from '@/core/GlobalEventService import { ChannelFollowingService } from '@/core/ChannelFollowingService.js'; import { isJsonObject } from '@/misc/json-value.js'; import type { JsonObject, JsonValue } from '@/misc/json-value.js'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; import type { ChannelsService } from './ChannelsService.js'; import type { EventEmitter } from 'events'; import type Channel from './channel.js'; @@ -41,6 +42,7 @@ export default class Connection { public userIdsWhoBlockingMe: Set = new Set(); public userIdsWhoMeMutingRenotes: Set = new Set(); public userMutedInstances: Set = new Set(); + public noteMuting: Set = new Set(); private fetchIntervalId: NodeJS.Timeout | null = null; constructor( @@ -49,6 +51,7 @@ export default class Connection { private notificationService: NotificationService, private cacheService: CacheService, private channelFollowingService: ChannelFollowingService, + private noteMutingService: NoteMutingService, user: MiUser | null | undefined, token: MiAccessToken | null | undefined, @@ -60,13 +63,14 @@ export default class Connection { @bindThis public async fetch() { if (this.user == null) return; - const [userProfile, following, followingChannels, userIdsWhoMeMuting, userIdsWhoBlockingMe, userIdsWhoMeMutingRenotes] = await Promise.all([ + const [userProfile, following, followingChannels, userIdsWhoMeMuting, userIdsWhoBlockingMe, userIdsWhoMeMutingRenotes, noteMuting] = await Promise.all([ this.cacheService.userProfileCache.fetch(this.user.id), this.cacheService.userFollowingsCache.fetch(this.user.id), this.channelFollowingService.userFollowingChannelsCache.fetch(this.user.id), this.cacheService.userMutingsCache.fetch(this.user.id), this.cacheService.userBlockedCache.fetch(this.user.id), this.cacheService.renoteMutingsCache.fetch(this.user.id), + this.noteMutingService.getMutingNoteIdsSet(this.user.id), ]); this.userProfile = userProfile; this.following = following; @@ -75,6 +79,7 @@ export default class Connection { this.userIdsWhoBlockingMe = userIdsWhoBlockingMe; this.userIdsWhoMeMutingRenotes = userIdsWhoMeMutingRenotes; this.userMutedInstances = new Set(userProfile.mutedInstances); + this.noteMuting = noteMuting; } @bindThis diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts index 686aea423c..4e26fabff4 100644 --- a/packages/backend/src/server/api/stream/channel.ts +++ b/packages/backend/src/server/api/stream/channel.ts @@ -5,6 +5,7 @@ import { bindThis } from '@/decorators.js'; import { isInstanceMuted } from '@/misc/is-instance-muted.js'; +import { isMutingNoteRelated } from '@/misc/is-muting-note-related.js'; import { isUserRelated } from '@/misc/is-user-related.js'; import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js'; import type { Packed } from '@/misc/json-schema.js'; @@ -51,6 +52,10 @@ export default abstract class Channel { return this.connection.userMutedInstances; } + protected get noteMuting() { + return this.connection.noteMuting; + } + protected get followingChannels() { return this.connection.followingChannels; } @@ -74,6 +79,9 @@ export default abstract class Channel { // 流れてきたNoteがリノートをミュートしてるユーザが行ったもの if (isRenotePacked(note) && !isQuotePacked(note) && this.userIdsWhoMeMutingRenotes.has(note.user.id)) return true; + // 流れてきたNoteがミュートしているNoteに関わる(ミュートしたノートがリノートされた or リプライがついた時) + if (isMutingNoteRelated(note, this.noteMuting)) return true; + return false; } diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 6060812b53..179011c0da 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -1690,6 +1690,10 @@ declare namespace entities { NotesLocalTimelineResponse, NotesMentionsRequest, NotesMentionsResponse, + NotesMutingCreateRequest, + NotesMutingDeleteRequest, + NotesMutingListResponse, + NotesMutingUpdateRequest, NotesPollsRecommendationRequest, NotesPollsRecommendationResponse, NotesPollsVoteRequest, @@ -2740,6 +2744,18 @@ type NotesMentionsRequest = operations['notes___mentions']['requestBody']['conte // @public (undocumented) type NotesMentionsResponse = operations['notes___mentions']['responses']['200']['content']['application/json']; +// @public (undocumented) +type NotesMutingCreateRequest = operations['notes___muting___create']['requestBody']['content']['application/json']; + +// @public (undocumented) +type NotesMutingDeleteRequest = operations['notes___muting___delete']['requestBody']['content']['application/json']; + +// @public (undocumented) +type NotesMutingListResponse = operations['notes___muting___list']['responses']['200']['content']['application/json']; + +// @public (undocumented) +type NotesMutingUpdateRequest = operations['notes___muting___update']['requestBody']['content']['application/json']; + // @public (undocumented) type NotesPollsRecommendationRequest = operations['notes___polls___recommendation']['requestBody']['content']['application/json']; diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index a1543952fc..8ba7836be1 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -2,1010 +2,1010 @@ import type { SwitchCaseResponseType } from '../api.js'; import type { Endpoints } from './endpoint.js'; declare module '../api.js' { - export interface APIClient { - /** + export interface APIClient { + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *read:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *read:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:abuse-user-reports* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:ad* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:ad* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:ad* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:ad* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:announcements* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:announcements* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:announcements* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:announcements* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:avatar-decorations* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:avatar-decorations* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:avatar-decorations* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:avatar-decorations* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:meta* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:meta* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:delete-account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:delete-all-files-of-a-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:resolve-abuse-user-report* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:index-stats* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:table-stats* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:user-ips* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:meta* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:promo* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:queue* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:queue* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:queue* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:queue* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:relays* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:relays* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:relays* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:reset-password* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:resolve-abuse-user-report* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* / **Permission**: *read:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:send-email* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:server-info* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:show-moderation-log* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:show-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:show-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:suspend-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *read:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:unset-user-avatar* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:unset-user-banner* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:unsuspend-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:resolve-abuse-user-report* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:meta* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:account* @@ -1021,3306 +1021,3350 @@ declare module '../api.js' { * * **Credential required**: *Yes* / **Permission**: *write:admin:user-note* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:blocks* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:blocks* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:blocks* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:clip-favorite* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:clip-favorite* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:clip-favorite* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Find the notes to which the given file is attached. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Check if a given file exists. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Upload a new drive file. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Delete an existing drive file. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Search for a drive file by the given parameters. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Search for a drive file by a hash of the contents. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show the properties of a drive file. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Update the properties of a drive file. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Request the server to download a new drive file from the specified URL. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:flash* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:flash-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:favorites* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:gallery-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:gallery* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:page-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:pages* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:favorites* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:favorites* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** + * No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + + /** + * No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** + * No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + + /** + * No description provided. + * + * **Credential required**: *Yes* / **Permission**: *read:account* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:votes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:reactions* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:reactions* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:pages* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:pages* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:page-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:page-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:pages* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Request a users password to be reset. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Only available when running with NODE_ENV=testing. Reset the database and flush Redis. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Complete the password reset that was previously requested. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Register to receive push notifications. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Check push notification registration exists. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Unregister from receiving push notifications. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Update push notification registration. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Endpoint for testing input validation. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all clips this user owns. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all flashs this user created. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show everyone that follows this user. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show everyone that this user is following. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all gallery posts by the given user. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Get a list of other users that the specified user frequently replies to. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Create a new list of users. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Delete an existing list of users. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all lists that the authenticated user has created. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Remove a user from a list. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Add a user to an existing list. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show the properties of a list. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Update the properties of a list. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all pages this user created. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all reactions this user made. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show users that the authenticated user might be interested to follow. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show the different kinds of relations between the authenticated user and the specified user(s). * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * File a report. * * **Credential required**: *Yes* / **Permission**: *write:report-abuse* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Search for users. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Search for a user by username and/or host. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show the properties of a user. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; - } + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + } } diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index 9bb8fb2225..a41a7b2406 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -449,6 +449,10 @@ import type { NotesLocalTimelineResponse, NotesMentionsRequest, NotesMentionsResponse, + NotesMutingCreateRequest, + NotesMutingDeleteRequest, + NotesMutingListResponse, + NotesMutingUpdateRequest, NotesPollsRecommendationRequest, NotesPollsRecommendationResponse, NotesPollsVoteRequest, @@ -886,6 +890,10 @@ export type Endpoints = { 'notes/hybrid-timeline': { req: NotesHybridTimelineRequest; res: NotesHybridTimelineResponse }; 'notes/local-timeline': { req: NotesLocalTimelineRequest; res: NotesLocalTimelineResponse }; 'notes/mentions': { req: NotesMentionsRequest; res: NotesMentionsResponse }; + 'notes/muting/create': { req: NotesMutingCreateRequest; res: EmptyResponse }; + 'notes/muting/delete': { req: NotesMutingDeleteRequest; res: EmptyResponse }; + 'notes/muting/list': { req: EmptyRequest; res: NotesMutingListResponse }; + 'notes/muting/update': { req: NotesMutingUpdateRequest; res: EmptyResponse }; 'notes/polls/recommendation': { req: NotesPollsRecommendationRequest; res: NotesPollsRecommendationResponse }; 'notes/polls/vote': { req: NotesPollsVoteRequest; res: EmptyResponse }; 'notes/reactions': { req: NotesReactionsRequest; res: NotesReactionsResponse }; diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts index f3d26efa69..034d4da120 100644 --- a/packages/misskey-js/src/autogen/entities.ts +++ b/packages/misskey-js/src/autogen/entities.ts @@ -452,6 +452,10 @@ export type NotesLocalTimelineRequest = operations['notes___local-timeline']['re export type NotesLocalTimelineResponse = operations['notes___local-timeline']['responses']['200']['content']['application/json']; export type NotesMentionsRequest = operations['notes___mentions']['requestBody']['content']['application/json']; export type NotesMentionsResponse = operations['notes___mentions']['responses']['200']['content']['application/json']; +export type NotesMutingCreateRequest = operations['notes___muting___create']['requestBody']['content']['application/json']; +export type NotesMutingDeleteRequest = operations['notes___muting___delete']['requestBody']['content']['application/json']; +export type NotesMutingListResponse = operations['notes___muting___list']['responses']['200']['content']['application/json']; +export type NotesMutingUpdateRequest = operations['notes___muting___update']['requestBody']['content']['application/json']; export type NotesPollsRecommendationRequest = operations['notes___polls___recommendation']['requestBody']['content']['application/json']; export type NotesPollsRecommendationResponse = operations['notes___polls___recommendation']['responses']['200']['content']['application/json']; export type NotesPollsVoteRequest = operations['notes___polls___vote']['requestBody']['content']['application/json']; From 9b71319fb2edc601712169035e5dfabd457183a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Thu, 20 Feb 2025 18:54:30 +0900 Subject: [PATCH 02/10] wip --- .../migration/1739882320354-noteMuting.js | 32 +++++++++++++ packages/backend/src/postgres.ts | 2 + .../pages/settings/mute-block.note-mute.vue | 48 +++++++++++++++++++ .../src/pages/settings/mute-block.vue | 13 +++++ 4 files changed, 95 insertions(+) create mode 100644 packages/backend/migration/1739882320354-noteMuting.js create mode 100644 packages/frontend/src/pages/settings/mute-block.note-mute.vue diff --git a/packages/backend/migration/1739882320354-noteMuting.js b/packages/backend/migration/1739882320354-noteMuting.js new file mode 100644 index 0000000000..4401028e97 --- /dev/null +++ b/packages/backend/migration/1739882320354-noteMuting.js @@ -0,0 +1,32 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class NoteMuting1739882320354 { + name = 'NoteMuting1739882320354' + + async up(queryRunner) { + await queryRunner.query(` + CREATE TABLE "note_muting" ( + "id" varchar(32) NOT NULL, + "userId" varchar(32) NOT NULL, + "noteId" varchar(32) NOT NULL, + "expiresAt" TIMESTAMP WITH TIME ZONE, + CONSTRAINT "PK_note_muting_id" PRIMARY KEY ("id"), + CONSTRAINT "FK_note_muting_userId" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_note_muting_noteId" FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION + ); + CREATE INDEX "IDX_note_muting_userId" ON "note_muting" ("userId"); + CREATE INDEX "IDX_note_muting_noteId" ON "note_muting" ("noteId"); + `); + } + + async down(queryRunner) { + await queryRunner.query(` + DROP INDEX "IDX_note_muting_noteId"; + DROP INDEX "IDX_note_muting_userId"; + DROP TABLE "note_muting"; + `); + } +} diff --git a/packages/backend/src/postgres.ts b/packages/backend/src/postgres.ts index 043332d4b5..d9edc277c3 100644 --- a/packages/backend/src/postgres.ts +++ b/packages/backend/src/postgres.ts @@ -7,6 +7,7 @@ import pg from 'pg'; import { DataSource, Logger } from 'typeorm'; import * as highlight from 'cli-highlight'; +import { MiNoteMuting } from '@/models/NoteMuting.js'; import { entities as charts } from '@/core/chart/entities.js'; import { MiAbuseUserReport } from '@/models/AbuseUserReport.js'; @@ -196,6 +197,7 @@ export const entities = [ MiNoteReaction, MiNoteThreadMuting, MiNoteUnread, + MiNoteMuting, MiPage, MiPageLike, MiGalleryPost, diff --git a/packages/frontend/src/pages/settings/mute-block.note-mute.vue b/packages/frontend/src/pages/settings/mute-block.note-mute.vue new file mode 100644 index 0000000000..5fb8435188 --- /dev/null +++ b/packages/frontend/src/pages/settings/mute-block.note-mute.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/packages/frontend/src/pages/settings/mute-block.vue b/packages/frontend/src/pages/settings/mute-block.vue index 7b8355d475..92344b504f 100644 --- a/packages/frontend/src/pages/settings/mute-block.vue +++ b/packages/frontend/src/pages/settings/mute-block.vue @@ -172,6 +172,18 @@ SPDX-License-Identifier: AGPL-3.0-only + + + + + + + + + @@ -181,6 +193,7 @@ SPDX-License-Identifier: AGPL-3.0-only import { ref, computed, watch } from 'vue'; import XInstanceMute from './mute-block.instance-mute.vue'; import XWordMute from './mute-block.word-mute.vue'; +import XNoteMute from './mute-block.note-mute.vue'; import MkPagination from '@/components/MkPagination.vue'; import { userPage } from '@/filters/user.js'; import { i18n } from '@/i18n.js'; From 776e90f28ab51426a0b4ba0083d6e1dfdef771bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Mon, 24 Feb 2025 20:01:45 +0900 Subject: [PATCH 03/10] ui impl --- locales/ja-JP.yml | 7 ++ .../migration/1739882320354-noteMuting.js | 4 + .../src/core/note/NoteMutingService.ts | 94 +++++++++++++------ .../CheckExpiredMutingsProcessorService.ts | 4 + .../backend/src/server/api/endpoint-list.ts | 1 - .../api/endpoints/notes/muting/create.ts | 24 ++--- .../api/endpoints/notes/muting/delete.ts | 26 +++-- .../server/api/endpoints/notes/muting/list.ts | 36 ++++--- .../api/endpoints/notes/muting/update.ts | 64 ------------- .../src/server/api/endpoints/notes/state.ts | 11 ++- .../pages/settings/mute-block.note-mute.vue | 84 +++++++++++++---- .../frontend/src/utility/get-note-menu.ts | 74 +++++++++++++++ packages/misskey-js/etc/misskey-js.api.md | 6 +- .../misskey-js/src/autogen/apiClientJSDoc.ts | 11 --- packages/misskey-js/src/autogen/endpoint.ts | 5 +- packages/misskey-js/src/autogen/entities.ts | 2 +- 16 files changed, 279 insertions(+), 174 deletions(-) delete mode 100644 packages/backend/src/server/api/endpoints/notes/muting/update.ts diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index d6af72ab57..382d9ee22d 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -3021,3 +3021,10 @@ _search: pleaseEnterServerHost: "サーバーのホストを入力してください" pleaseSelectUser: "ユーザーを選択してください" serverHostPlaceholder: "例: misskey.example.com" + +_noteMuting: + muteNote: "ノートをミュート" + unmuteNote: "ノートのミュートを解除" + notMutedNote: "このノートはミュートされていません" + labelSuffix: "のノート" + unmuteCaption: "ミュートを解除したノートを再表示するにはタイムラインの再読み込みが必要です。" diff --git a/packages/backend/migration/1739882320354-noteMuting.js b/packages/backend/migration/1739882320354-noteMuting.js index 4401028e97..1ba0216caf 100644 --- a/packages/backend/migration/1739882320354-noteMuting.js +++ b/packages/backend/migration/1739882320354-noteMuting.js @@ -19,11 +19,15 @@ export class NoteMuting1739882320354 { ); CREATE INDEX "IDX_note_muting_userId" ON "note_muting" ("userId"); CREATE INDEX "IDX_note_muting_noteId" ON "note_muting" ("noteId"); + CREATE INDEX "IDX_note_muting_expiresAt" ON "note_muting" ("expiresAt"); + CREATE UNIQUE INDEX "IDX_note_muting_userId_noteId_unique" ON note_muting ("userId", "noteId"); `); } async down(queryRunner) { await queryRunner.query(` + DROP INDEX "IDX_note_muting_userId_noteId_unique"; + DROP INDEX "IDX_note_muting_expiresAt"; DROP INDEX "IDX_note_muting_noteId"; DROP INDEX "IDX_note_muting_userId"; DROP TABLE "note_muting"; diff --git a/packages/backend/src/core/note/NoteMutingService.ts b/packages/backend/src/core/note/NoteMutingService.ts index ed7211c799..f63d2c4765 100644 --- a/packages/backend/src/core/note/NoteMutingService.ts +++ b/packages/backend/src/core/note/NoteMutingService.ts @@ -5,11 +5,14 @@ import { GlobalEvents, GlobalEventService } from '@/core/GlobalEventService.js'; import { IdService } from '@/core/IdService.js'; import { bindThis } from '@/decorators.js'; import { DI } from '@/di-symbols.js'; -import type { MiNoteMuting, NoteMutingsRepository } from '@/models/_.js'; +import type { MiNoteMuting, NoteMutingsRepository, NotesRepository } from '@/models/_.js'; +import { QueryService } from '@/core/QueryService.js'; @Injectable() export class NoteMutingService implements OnApplicationShutdown { - public static NoSuchItemError = class extends Error { + public static NoSuchNoteError = class extends Error { + }; + public static NotMutedError = class extends Error { }; private cache: RedisKVCache>; @@ -19,16 +22,27 @@ export class NoteMutingService implements OnApplicationShutdown { private redisClient: Redis.Redis, @Inject(DI.redisForSub) private redisForSub: Redis.Redis, + @Inject(DI.notesRepository) + private notesRepository: NotesRepository, @Inject(DI.noteMutingsRepository) private noteMutingsRepository: NoteMutingsRepository, private idService: IdService, private globalEventService: GlobalEventService, + private queryService: QueryService, ) { this.redisForSub.on('message', this.onMessage); - this.cache = new RedisKVCache>(this.redisClient, 'noteMutings', { - lifetime: 1000 * 60 * 30, // 30m - memoryCacheLifetime: 1000 * 60, // 1m - fetcher: (userId) => this.listByUserId(userId).then(xs => new Set(xs.map(x => x.noteId))), + this.cache = new RedisKVCache>(this.redisClient, 'noteMutings', { + // 使用頻度が高く使用される期間も長いためキャッシュの有効期限切れ→再取得が頻発すると思われる。 + // よって、有効期限を長めに設定して再取得の頻度を抑える(キャッシュの鮮度はRedisイベント経由で保たれているので問題ないはず) + lifetime: 1000 * 60 * 60 * 24, // 1d + memoryCacheLifetime: 1000 * 60 * 60 * 24, // 1d + fetcher: async (userId) => { + return this.noteMutingsRepository.createQueryBuilder('noteMuting') + .select('noteMuting.noteId') + .where('noteMuting.userId = :userId', { userId }) + .getRawMany<{ noteMuting_noteId: string }>() + .then((results) => new Set(results.map(x => x.noteMuting_noteId))); + }, toRedisConverter: (value) => JSON.stringify(Array.from(value)), fromRedisConverter: (value) => new Set(JSON.parse(value)), }); @@ -62,15 +76,21 @@ export class NoteMutingService implements OnApplicationShutdown { @bindThis public async listByUserId( - userId: MiNoteMuting['userId'], + params: { + userId: MiNoteMuting['userId'], + sinceId?: MiNoteMuting['id'] | null, + untilId?: MiNoteMuting['id'] | null, + }, opts?: { + limit?: number; + offset?: number; joinUser?: boolean; joinNote?: boolean; }, ): Promise { - const q = this.noteMutingsRepository.createQueryBuilder('noteMuting'); + const q = this.queryService.makePaginationQuery(this.noteMutingsRepository.createQueryBuilder('noteMuting'), params.sinceId, params.untilId); - q.where('noteMuting.userId = :userId', { userId }); + q.where('noteMuting.userId = :userId', { userId: params.userId }); if (opts?.joinUser) { q.leftJoinAndSelect('noteMuting.user', 'user'); } @@ -78,6 +98,15 @@ export class NoteMutingService implements OnApplicationShutdown { q.leftJoinAndSelect('noteMuting.note', 'note'); } + q.orderBy('noteMuting.id', 'DESC'); + + const limit = opts?.limit ?? 10; + q.limit(limit); + + if (opts?.offset) { + q.offset(opts.offset); + } + return q.getMany(); } @@ -87,19 +116,18 @@ export class NoteMutingService implements OnApplicationShutdown { } @bindThis - public async get(id: MiNoteMuting['id']): Promise { - const result = await this.noteMutingsRepository.findOne({ where: { id } }); - if (!result) { - throw new NoteMutingService.NoSuchItemError(); - } - - return result; + public async isMuting(userId: MiNoteMuting['userId'], noteId: MiNoteMuting['noteId']): Promise { + return this.cache.fetch(userId).then(noteIds => noteIds.has(noteId)); } @bindThis public async create( params: Pick, ): Promise { + if (!await this.notesRepository.existsBy({ id: params.noteId })) { + throw new NoteMutingService.NoSuchNoteError(); + } + const id = this.idService.gen(); const result = await this.noteMutingsRepository.insertOne({ id, @@ -110,25 +138,31 @@ export class NoteMutingService implements OnApplicationShutdown { } @bindThis - public async update( - id: MiNoteMuting['id'], - params: Partial>, - ): Promise { - await this.noteMutingsRepository.update(id, params); + public async delete(userId: MiNoteMuting['userId'], noteId: MiNoteMuting['noteId']): Promise { + const value = await this.noteMutingsRepository.findOne({ where: { userId, noteId } }); + if (!value) { + throw new NoteMutingService.NotMutedError(); + } - // 現状、ミュート設定の有無しかキャッシュしていないので更新時はイベントを発行しない。 - // 他に細かい設定が登場した場合はキャッシュの型をSetからMapに変えつつ、イベントを発行するようにする。 + await this.noteMutingsRepository.delete(value.id); + this.globalEventService.publishInternalEvent('noteMuteDeleted', value); } @bindThis - public async delete(id: MiNoteMuting['id']): Promise { - const value = await this.noteMutingsRepository.findOne({ where: { id } }); - if (!value) { - return; - } + public async cleanupExpiredMutes(): Promise { + const now = new Date(); + const noteMutings = await this.noteMutingsRepository.createQueryBuilder('noteMuting') + .select(['noteMuting.id', 'noteMuting.userId']) + .where('noteMuting.expiresAt < :now', { now }) + .andWhere('noteMuting.expiresAt IS NOT NULL') + .getRawMany<{ noteMuting_id: MiNoteMuting['id'], noteMuting_userId: MiNoteMuting['id'] }>(); - await this.noteMutingsRepository.delete(id); - this.globalEventService.publishInternalEvent('noteMuteDeleted', value); + await this.noteMutingsRepository.delete(noteMutings.map(x => x.noteMuting_id)); + + for (const id of [...new Set(noteMutings.map(x => x.noteMuting_userId))]) { + // 同時多発的なDBアクセスが発生することを避けるため1回ごとにawaitする + await this.cache.refresh(id); + } } @bindThis diff --git a/packages/backend/src/queue/processors/CheckExpiredMutingsProcessorService.ts b/packages/backend/src/queue/processors/CheckExpiredMutingsProcessorService.ts index 448fc9c763..5a823f865c 100644 --- a/packages/backend/src/queue/processors/CheckExpiredMutingsProcessorService.ts +++ b/packages/backend/src/queue/processors/CheckExpiredMutingsProcessorService.ts @@ -10,6 +10,7 @@ import type { MutingsRepository } from '@/models/_.js'; import type Logger from '@/logger.js'; import { bindThis } from '@/decorators.js'; import { UserMutingService } from '@/core/UserMutingService.js'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; import { QueueLoggerService } from '../QueueLoggerService.js'; import type * as Bull from 'bullmq'; @@ -22,6 +23,7 @@ export class CheckExpiredMutingsProcessorService { private mutingsRepository: MutingsRepository, private userMutingService: UserMutingService, + private noteMutingService: NoteMutingService, private queueLoggerService: QueueLoggerService, ) { this.logger = this.queueLoggerService.logger.createSubLogger('check-expired-mutings'); @@ -41,6 +43,8 @@ export class CheckExpiredMutingsProcessorService { await this.userMutingService.unmute(expired); } + await this.noteMutingService.cleanupExpiredMutes(); + this.logger.succ('All expired mutings checked.'); } } diff --git a/packages/backend/src/server/api/endpoint-list.ts b/packages/backend/src/server/api/endpoint-list.ts index 566bb7afb3..4f3696fc91 100644 --- a/packages/backend/src/server/api/endpoint-list.ts +++ b/packages/backend/src/server/api/endpoint-list.ts @@ -326,7 +326,6 @@ export * as 'notes/translate' from './endpoints/notes/translate.js'; export * as 'notes/unrenote' from './endpoints/notes/unrenote.js'; export * as 'notes/user-list-timeline' from './endpoints/notes/user-list-timeline.js'; export * as 'notes/muting/create' from './endpoints/notes/muting/create.js'; -export * as 'notes/muting/update' from './endpoints/notes/muting/update.js'; export * as 'notes/muting/delete' from './endpoints/notes/muting/delete.js'; export * as 'notes/muting/list' from './endpoints/notes/muting/list.js'; export * as 'notifications/create' from './endpoints/notifications/create.js'; diff --git a/packages/backend/src/server/api/endpoints/notes/muting/create.ts b/packages/backend/src/server/api/endpoints/notes/muting/create.ts index 468561fad9..7144814f34 100644 --- a/packages/backend/src/server/api/endpoints/notes/muting/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/muting/create.ts @@ -44,19 +44,21 @@ export const paramDef = { export default class extends Endpoint { // eslint-disable-line import/no-default-export constructor( private readonly noteMutingService: NoteMutingService, - private readonly getterService: GetterService, ) { super(meta, paramDef, async (ps, me) => { - const note = await this.getterService.getNote(ps.noteId).catch(err => { - if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(meta.errors.noSuchNote); - throw err; - }); - - await this.noteMutingService.create({ - userId: me.id, - noteId: note.id, - expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null, - }); + try { + await this.noteMutingService.create({ + userId: me.id, + noteId: ps.noteId, + expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null, + }); + } catch (e) { + if (e instanceof NoteMutingService.NoSuchNoteError) { + throw new ApiError(meta.errors.noSuchNote); + } else { + throw e; + } + } }); } } diff --git a/packages/backend/src/server/api/endpoints/notes/muting/delete.ts b/packages/backend/src/server/api/endpoints/notes/muting/delete.ts index 0a01e5f1de..1887bb95dc 100644 --- a/packages/backend/src/server/api/endpoints/notes/muting/delete.ts +++ b/packages/backend/src/server/api/endpoints/notes/muting/delete.ts @@ -16,10 +16,11 @@ export const meta = { kind: 'write:account', errors: { - noSuchItem: { - message: 'No such item.', - code: 'NO_SUCH_ITEM', + notMuted: { + message: 'Not muted.', + code: 'NOT_MUTED', id: '6ad3b6c9-f173-60f7-b558-5eea13896254', + httpStatusCode: 400, }, }, } as const; @@ -27,9 +28,9 @@ export const meta = { export const paramDef = { type: 'object', properties: { - id: { type: 'string', format: 'misskey:id' }, + noteId: { type: 'string', format: 'misskey:id' }, }, - required: ['id'], + required: ['noteId'], } as const; @Injectable() @@ -37,19 +38,16 @@ export default class extends Endpoint { // eslint- constructor( private readonly noteMutingService: NoteMutingService, ) { - super(meta, paramDef, async (ps) => { + super(meta, paramDef, async (ps, me) => { try { - // Existence check - await this.noteMutingService.get(ps.id); + await this.noteMutingService.delete(me.id, ps.noteId); } catch (e) { - if (e instanceof NoteMutingService.NoSuchItemError) { - throw new ApiError(meta.errors.noSuchItem); + if (e instanceof NoteMutingService.NotMutedError) { + throw new ApiError(meta.errors.notMuted); + } else { + throw e; } - - throw e; } - - await this.noteMutingService.delete(ps.id); }); } } diff --git a/packages/backend/src/server/api/endpoints/notes/muting/list.ts b/packages/backend/src/server/api/endpoints/notes/muting/list.ts index 1e0f1a0257..cef38f54af 100644 --- a/packages/backend/src/server/api/endpoints/notes/muting/list.ts +++ b/packages/backend/src/server/api/endpoints/notes/muting/list.ts @@ -16,18 +16,13 @@ export const meta = { kind: 'read:account', res: { - type: 'object', - properties: { - notes: { - type: 'array', - items: { - type: 'object', - properties: { - id: { type: 'string' }, - expiresAt: { type: 'string', format: 'date-time', nullable: true }, - note: { type: 'object', ref: 'Note' }, - }, - }, + type: 'array', + items: { + type: 'object', + properties: { + id: { type: 'string' }, + expiresAt: { type: 'string', format: 'date-time', nullable: true }, + note: { type: 'object', ref: 'Note' }, }, }, }, @@ -35,7 +30,12 @@ export const meta = { export const paramDef = { type: 'object', - properties: {}, + properties: { + sinceId: { type: 'string', format: 'misskey:id', nullable: true }, + untilId: { type: 'string', format: 'misskey:id', nullable: true }, + limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, + offset: { type: 'integer' }, + }, required: [], } as const; @@ -46,7 +46,13 @@ export default class extends Endpoint { // eslint- private readonly noteEntityService: NoteEntityService, ) { super(meta, paramDef, async (ps, me) => { - const mutings = await this.noteMutingService.listByUserId(me.id, { joinNote: true }); + const mutings = await this.noteMutingService.listByUserId( + { userId: me.id }, + { + joinNote: true, + limit: ps.limit, + offset: ps.offset, + }); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const packedNotes = await this.noteEntityService.packMany(mutings.map(m => m.note!)) @@ -54,7 +60,7 @@ export default class extends Endpoint { // eslint- return mutings.map(m => ({ id: m.id, - expiresAt: m.expiresAt, + expiresAt: m.expiresAt?.toISOString(), // eslint-disable-next-line @typescript-eslint/no-non-null-assertion note: packedNotes.get(m.noteId)!, })); diff --git a/packages/backend/src/server/api/endpoints/notes/muting/update.ts b/packages/backend/src/server/api/endpoints/notes/muting/update.ts deleted file mode 100644 index 1b0b3fc13b..0000000000 --- a/packages/backend/src/server/api/endpoints/notes/muting/update.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -import { Injectable } from '@nestjs/common'; -import ms from 'ms'; -import { NoteMutingService } from '@/core/note/NoteMutingService.js'; -import { Endpoint } from '@/server/api/endpoint-base.js'; -import { ApiError } from '../../../error.js'; - -export const meta = { - tags: ['notes'], - - requireCredential: true, - - kind: 'write:account', - - limit: { - duration: ms('1hour'), - max: 10, - }, - - errors: { - noSuchItem: { - message: 'No such item.', - code: 'NO_SUCH_ITEM', - id: '502ce7a1-d8b0-7094-78e2-ff5b8190efc9', - }, - }, -} as const; - -export const paramDef = { - type: 'object', - properties: { - id: { type: 'string', format: 'misskey:id' }, - expiresAt: { type: 'integer', nullable: true }, - }, - required: ['id'], -} as const; - -@Injectable() -export default class extends Endpoint { // eslint-disable-line import/no-default-export - constructor( - private readonly noteMutingService: NoteMutingService, - ) { - super(meta, paramDef, async (ps, me) => { - try { - // Existence check - await this.noteMutingService.get(ps.id); - } catch (e) { - if (e instanceof NoteMutingService.NoSuchItemError) { - throw new ApiError(meta.errors.noSuchItem); - } - - throw e; - } - - await this.noteMutingService.update(ps.id, { - expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null, - }); - }); - } -} diff --git a/packages/backend/src/server/api/endpoints/notes/state.ts b/packages/backend/src/server/api/endpoints/notes/state.ts index 4c1eb86542..8feb511a71 100644 --- a/packages/backend/src/server/api/endpoints/notes/state.ts +++ b/packages/backend/src/server/api/endpoints/notes/state.ts @@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common'; import type { NotesRepository, NoteThreadMutingsRepository, NoteFavoritesRepository } from '@/models/_.js'; import { Endpoint } from '@/server/api/endpoint-base.js'; import { DI } from '@/di-symbols.js'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; export const meta = { tags: ['notes'], @@ -26,6 +27,10 @@ export const meta = { type: 'boolean', optional: false, nullable: false, }, + isMutedNote: { + type: 'boolean', + optional: false, nullable: false, + }, }, }, } as const; @@ -49,11 +54,13 @@ export default class extends Endpoint { // eslint- @Inject(DI.noteFavoritesRepository) private noteFavoritesRepository: NoteFavoritesRepository, + + private noteMutingService: NoteMutingService, ) { super(meta, paramDef, async (ps, me) => { const note = await this.notesRepository.findOneByOrFail({ id: ps.noteId }); - const [favorite, threadMuting] = await Promise.all([ + const [favorite, threadMuting, isMutedNote] = await Promise.all([ this.noteFavoritesRepository.count({ where: { userId: me.id, @@ -68,11 +75,13 @@ export default class extends Endpoint { // eslint- }, take: 1, }), + this.noteMutingService.isMuting(me.id, note.id), ]); return { isFavorited: favorite !== 0, isMutedThread: threadMuting !== 0, + isMutedNote, }; }); } diff --git a/packages/frontend/src/pages/settings/mute-block.note-mute.vue b/packages/frontend/src/pages/settings/mute-block.note-mute.vue index 5fb8435188..639de8e148 100644 --- a/packages/frontend/src/pages/settings/mute-block.note-mute.vue +++ b/packages/frontend/src/pages/settings/mute-block.note-mute.vue @@ -4,7 +4,7 @@ SPDX-License-Identifier: AGPL-3.0-only --> + + diff --git a/packages/frontend/src/utility/get-note-menu.ts b/packages/frontend/src/utility/get-note-menu.ts index 9e1ae7e9ac..a0b089319d 100644 --- a/packages/frontend/src/utility/get-note-menu.ts +++ b/packages/frontend/src/utility/get-note-menu.ts @@ -234,6 +234,70 @@ export function getNoteMenu(props: { }); } + async function toggleNoteMute(mute: boolean) { + if (!mute) { + await os.apiWithDialog( + 'notes/muting/delete', + { + noteId: appearNote.id, + }, + undefined, + { + '6ad3b6c9-f173-60f7-b558-5eea13896254': { + title: i18n.ts.error, + text: i18n.ts._noteMuting.notMutedNote, + }, + }, + ); + } else { + const { canceled, result: period } = await os.select({ + title: i18n.ts.mutePeriod, + items: [{ + value: 'indefinitely', text: i18n.ts.indefinitely, + }, { + value: 'tenMinutes', text: i18n.ts.tenMinutes, + }, { + value: 'oneHour', text: i18n.ts.oneHour, + }, { + value: 'oneDay', text: i18n.ts.oneDay, + }, { + value: 'oneWeek', text: i18n.ts.oneWeek, + }], + default: 'indefinitely', + }); + if (canceled) return; + + const expiresAt = period === 'indefinitely' + ? null + : period === 'tenMinutes' + ? Date.now() + (1000 * 60 * 10) + : period === 'oneHour' + ? Date.now() + (1000 * 60 * 60) + : period === 'oneDay' + ? Date.now() + (1000 * 60 * 60 * 24) + : period === 'oneWeek' + ? Date.now() + (1000 * 60 * 60 * 24 * 7) + : null; + + await os.apiWithDialog( + 'notes/muting/create', + { + noteId: appearNote.id, + expiresAt, + }, + undefined, + { + 'a58e7999-f6d3-1780-a688-f43661719662': { + title: i18n.ts.error, + text: i18n.ts._noteMuting.noNotes, + }, + }, + ).then(() => { + props.isDeleted.value = true; + }); + } + } + function copyContent(): void { copyToClipboard(appearNote.text); } @@ -379,6 +443,16 @@ export function getNoteMenu(props: { action: () => toggleThreadMute(true), })); + menuItems.push(statePromise.then(state => state.isMutedNote ? { + icon: 'ti ti-message', + text: i18n.ts._noteMuting.unmuteNote, + action: () => toggleNoteMute(false), + } : { + icon: 'ti ti-message-off', + text: i18n.ts._noteMuting.muteNote, + action: () => toggleNoteMute(true), + })); + if (appearNote.userId === $i.id) { if (($i.pinnedNoteIds ?? []).includes(appearNote.id)) { menuItems.push({ diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 179011c0da..9583b8f0b7 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -1692,8 +1692,8 @@ declare namespace entities { NotesMentionsResponse, NotesMutingCreateRequest, NotesMutingDeleteRequest, + NotesMutingListRequest, NotesMutingListResponse, - NotesMutingUpdateRequest, NotesPollsRecommendationRequest, NotesPollsRecommendationResponse, NotesPollsVoteRequest, @@ -2751,10 +2751,10 @@ type NotesMutingCreateRequest = operations['notes___muting___create']['requestBo type NotesMutingDeleteRequest = operations['notes___muting___delete']['requestBody']['content']['application/json']; // @public (undocumented) -type NotesMutingListResponse = operations['notes___muting___list']['responses']['200']['content']['application/json']; +type NotesMutingListRequest = operations['notes___muting___list']['requestBody']['content']['application/json']; // @public (undocumented) -type NotesMutingUpdateRequest = operations['notes___muting___update']['requestBody']['content']['application/json']; +type NotesMutingListResponse = operations['notes___muting___list']['responses']['200']['content']['application/json']; // @public (undocumented) type NotesPollsRecommendationRequest = operations['notes___polls___recommendation']['requestBody']['content']['application/json']; diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index 8ba7836be1..83377b3db7 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -3365,17 +3365,6 @@ declare module '../api.js' { /** * No description provided. * - * **Credential required**: *Yes* / **Permission**: *write:account* - */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; - - /** - * No description provided. - * * **Credential required**: *Yes* / **Permission**: *read:account* */ request( diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index a41a7b2406..0edc15a0f4 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -451,8 +451,8 @@ import type { NotesMentionsResponse, NotesMutingCreateRequest, NotesMutingDeleteRequest, + NotesMutingListRequest, NotesMutingListResponse, - NotesMutingUpdateRequest, NotesPollsRecommendationRequest, NotesPollsRecommendationResponse, NotesPollsVoteRequest, @@ -892,8 +892,7 @@ export type Endpoints = { 'notes/mentions': { req: NotesMentionsRequest; res: NotesMentionsResponse }; 'notes/muting/create': { req: NotesMutingCreateRequest; res: EmptyResponse }; 'notes/muting/delete': { req: NotesMutingDeleteRequest; res: EmptyResponse }; - 'notes/muting/list': { req: EmptyRequest; res: NotesMutingListResponse }; - 'notes/muting/update': { req: NotesMutingUpdateRequest; res: EmptyResponse }; + 'notes/muting/list': { req: NotesMutingListRequest; res: NotesMutingListResponse }; 'notes/polls/recommendation': { req: NotesPollsRecommendationRequest; res: NotesPollsRecommendationResponse }; 'notes/polls/vote': { req: NotesPollsVoteRequest; res: EmptyResponse }; 'notes/reactions': { req: NotesReactionsRequest; res: NotesReactionsResponse }; diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts index 034d4da120..6d007f9d7f 100644 --- a/packages/misskey-js/src/autogen/entities.ts +++ b/packages/misskey-js/src/autogen/entities.ts @@ -454,8 +454,8 @@ export type NotesMentionsRequest = operations['notes___mentions']['requestBody'] export type NotesMentionsResponse = operations['notes___mentions']['responses']['200']['content']['application/json']; export type NotesMutingCreateRequest = operations['notes___muting___create']['requestBody']['content']['application/json']; export type NotesMutingDeleteRequest = operations['notes___muting___delete']['requestBody']['content']['application/json']; +export type NotesMutingListRequest = operations['notes___muting___list']['requestBody']['content']['application/json']; export type NotesMutingListResponse = operations['notes___muting___list']['responses']['200']['content']['application/json']; -export type NotesMutingUpdateRequest = operations['notes___muting___update']['requestBody']['content']['application/json']; export type NotesPollsRecommendationRequest = operations['notes___polls___recommendation']['requestBody']['content']['application/json']; export type NotesPollsRecommendationResponse = operations['notes___polls___recommendation']['responses']['200']['content']['application/json']; export type NotesPollsVoteRequest = operations['notes___polls___vote']['requestBody']['content']['application/json']; From f1248349b32722fc8ae97b83727da761bf9ae389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Thu, 20 Mar 2025 09:38:31 +0900 Subject: [PATCH 04/10] fix --- locales/index.d.ts | 26 + locales/ja-JP.yml | 1 + .../api/endpoints/notes/muting/create.ts | 1 - .../src/pages/settings/mute-block.vue | 2 +- .../utility/autogen/settings-search-index.ts | 5 + packages/misskey-js/generator/package.json | 3 +- .../misskey-js/src/autogen/apiClientJSDoc.ts | 4684 ++++++++--------- packages/misskey-js/src/autogen/types.ts | 203 + pnpm-lock.yaml | 3 + 9 files changed, 2583 insertions(+), 2345 deletions(-) diff --git a/locales/index.d.ts b/locales/index.d.ts index 0c6e73aac4..933f357d5f 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -11286,6 +11286,32 @@ export interface Locale extends ILocale { */ "serverHostPlaceholder": string; }; + "_noteMuting": { + /** + * ミュートしたノート + */ + "noteMuting": string; + /** + * ノートをミュート + */ + "muteNote": string; + /** + * ノートのミュートを解除 + */ + "unmuteNote": string; + /** + * このノートはミュートされていません + */ + "notMutedNote": string; + /** + * のノート + */ + "labelSuffix": string; + /** + * ミュートを解除したノートを再表示するにはタイムラインの再読み込みが必要です。 + */ + "unmuteCaption": string; + }; } declare const locales: { [lang: string]: Locale; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 382d9ee22d..3dc2042686 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -3023,6 +3023,7 @@ _search: serverHostPlaceholder: "例: misskey.example.com" _noteMuting: + noteMuting: "ミュートしたノート" muteNote: "ノートをミュート" unmuteNote: "ノートのミュートを解除" notMutedNote: "このノートはミュートされていません" diff --git a/packages/backend/src/server/api/endpoints/notes/muting/create.ts b/packages/backend/src/server/api/endpoints/notes/muting/create.ts index 7144814f34..549f1550ee 100644 --- a/packages/backend/src/server/api/endpoints/notes/muting/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/muting/create.ts @@ -7,7 +7,6 @@ import { Injectable } from '@nestjs/common'; import ms from 'ms'; import { NoteMutingService } from '@/core/note/NoteMutingService.js'; import { Endpoint } from '@/server/api/endpoint-base.js'; -import { GetterService } from '@/server/api/GetterService.js'; import { ApiError } from '../../../error.js'; export const meta = { diff --git a/packages/frontend/src/pages/settings/mute-block.vue b/packages/frontend/src/pages/settings/mute-block.vue index 92344b504f..1c0219323b 100644 --- a/packages/frontend/src/pages/settings/mute-block.vue +++ b/packages/frontend/src/pages/settings/mute-block.vue @@ -174,7 +174,7 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/utility/autogen/settings-search-index.ts b/packages/frontend/src/utility/autogen/settings-search-index.ts index fd92876880..0d1b0525a8 100644 --- a/packages/frontend/src/utility/autogen/settings-search-index.ts +++ b/packages/frontend/src/utility/autogen/settings-search-index.ts @@ -622,6 +622,11 @@ export const searchIndexes: SearchIndexItem[] = [ label: i18n.ts.blockedUsers, keywords: ['block', 'user'], }, + { + id: 'b92aHg3qp', + label: i18n.ts._noteMuting.noteMuting, + keywords: ['mute', 'note'], + }, ], label: i18n.ts.muteAndBlock, keywords: ['mute', 'block', i18n.ts._settings.muteAndBlockBanner], diff --git a/packages/misskey-js/generator/package.json b/packages/misskey-js/generator/package.json index f3c926bcdf..af4824e48f 100644 --- a/packages/misskey-js/generator/package.json +++ b/packages/misskey-js/generator/package.json @@ -15,7 +15,8 @@ "openapi-typescript": "6.7.6", "ts-case-convert": "2.1.0", "tsx": "4.19.3", - "typescript": "5.8.2" + "typescript": "5.8.2", + "eslint": "9.22.0" }, "files": [ "built" diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index 83377b3db7..67656863d2 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -2,1010 +2,1010 @@ import type { SwitchCaseResponseType } from '../api.js'; import type { Endpoints } from './endpoint.js'; declare module '../api.js' { - export interface APIClient { - /** + export interface APIClient { + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *read:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *read:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:abuse-report:notification-recipient* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:abuse-user-reports* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:ad* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:ad* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:ad* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:ad* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:announcements* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:announcements* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:announcements* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:announcements* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:avatar-decorations* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:avatar-decorations* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:avatar-decorations* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:avatar-decorations* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:meta* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:meta* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:delete-account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:delete-all-files-of-a-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:resolve-abuse-user-report* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:index-stats* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:table-stats* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:user-ips* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:meta* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:promo* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:queue* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:queue* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:queue* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:queue* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:relays* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:relays* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:relays* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:reset-password* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:resolve-abuse-user-report* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* / **Permission**: *read:admin:roles* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:send-email* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:server-info* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:show-moderation-log* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:show-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:show-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:suspend-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *read:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *write:admin:system-webhook* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:unset-user-avatar* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:unset-user-banner* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:unsuspend-user* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:resolve-abuse-user-report* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:meta* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:admin:account* @@ -1021,3339 +1021,3339 @@ declare module '../api.js' { * * **Credential required**: *Yes* / **Permission**: *write:admin:user-note* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:federation* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:blocks* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:blocks* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:blocks* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:channels* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:clip-favorite* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:clip-favorite* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:clip-favorite* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Find the notes to which the given file is attached. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Check if a given file exists. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Upload a new drive file. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Delete an existing drive file. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Search for a drive file by the given parameters. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Search for a drive file by a hash of the contents. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show the properties of a drive file. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Update the properties of a drive file. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Request the server to download a new drive file from the specified URL. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:drive* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:flash* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:flash-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:flash* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:following* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:gallery* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:favorites* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:gallery-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:gallery* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:page-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:pages* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:invite-codes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:favorites* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:favorites* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:votes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:reactions* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:reactions* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notifications* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:pages* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:pages* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:page-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:page-likes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:pages* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:mutes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Request a users password to be reset. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Only available when running with NODE_ENV=testing. Reset the database and flush Redis. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Complete the password reset that was previously requested. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Register to receive push notifications. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Check push notification registration exists. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Unregister from receiving push notifications. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Update push notification registration. * * **Internal Endpoint**: This endpoint is an API for the misskey mainframe and is not intended for use by third parties. * **Credential required**: *Yes* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Endpoint for testing input validation. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all clips this user owns. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all flashs this user created. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show everyone that follows this user. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show everyone that this user is following. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all gallery posts by the given user. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Get a list of other users that the specified user frequently replies to. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Create a new list of users. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Delete an existing list of users. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all lists that the authenticated user has created. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Remove a user from a list. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Add a user to an existing list. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show the properties of a list. * * **Credential required**: *No* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Update the properties of a list. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all pages this user created. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show all reactions this user made. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show users that the authenticated user might be interested to follow. * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show the different kinds of relations between the authenticated user and the specified user(s). * * **Credential required**: *Yes* / **Permission**: *read:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * File a report. * * **Credential required**: *Yes* / **Permission**: *write:report-abuse* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Search for users. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Search for a user by username and/or host. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * Show the properties of a user. * * **Credential required**: *No* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *write:account* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; - /** + /** * No description provided. * * **Credential required**: *Yes* / **Permission**: *read:admin:emoji* */ - request( - endpoint: E, - params: P, - credential?: string | null, - ): Promise>; - } + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + } } diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 743aaf1608..24b265ff0e 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -2889,6 +2889,33 @@ export type paths = { */ post: operations['notes___mentions']; }; + '/notes/muting/create': { + /** + * notes/muting/create + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + post: operations['notes___muting___create']; + }; + '/notes/muting/delete': { + /** + * notes/muting/delete + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + post: operations['notes___muting___delete']; + }; + '/notes/muting/list': { + /** + * notes/muting/list + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *read:account* + */ + post: operations['notes___muting___list']; + }; '/notes/polls/recommendation': { /** * notes/polls/recommendation @@ -23072,6 +23099,181 @@ export type operations = { }; }; }; + /** + * notes/muting/create + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + notes___muting___create: { + requestBody: { + content: { + 'application/json': { + /** Format: misskey:id */ + noteId: string; + expiresAt?: number | null; + }; + }; + }; + responses: { + /** @description OK (without any results) */ + 204: { + content: never; + }; + /** @description Client error */ + 400: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Authentication error */ + 401: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Forbidden error */ + 403: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description I'm Ai */ + 418: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Too many requests */ + 429: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Internal server error */ + 500: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + }; + }; + /** + * notes/muting/delete + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:account* + */ + notes___muting___delete: { + requestBody: { + content: { + 'application/json': { + /** Format: misskey:id */ + noteId: string; + }; + }; + }; + responses: { + /** @description OK (without any results) */ + 204: { + content: never; + }; + /** @description Client error */ + 400: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Authentication error */ + 401: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Forbidden error */ + 403: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description I'm Ai */ + 418: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Internal server error */ + 500: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + }; + }; + /** + * notes/muting/list + * @description No description provided. + * + * **Credential required**: *Yes* / **Permission**: *read:account* + */ + notes___muting___list: { + requestBody: { + content: { + 'application/json': { + /** Format: misskey:id */ + sinceId?: string | null; + /** Format: misskey:id */ + untilId?: string | null; + /** @default 10 */ + limit?: number; + offset?: number; + }; + }; + }; + responses: { + /** @description OK (with results) */ + 200: { + content: { + 'application/json': ({ + id: string; + /** Format: date-time */ + expiresAt: string | null; + note: components['schemas']['Note']; + })[]; + }; + }; + /** @description Client error */ + 400: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Authentication error */ + 401: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Forbidden error */ + 403: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description I'm Ai */ + 418: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Internal server error */ + 500: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + }; + }; /** * notes/polls/recommendation * @description No description provided. @@ -23696,6 +23898,7 @@ export type operations = { 'application/json': { isFavorited: boolean; isMutedThread: boolean; + isMutedNote: boolean; }; }; }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 40596d43ed..eb3657f939 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1374,6 +1374,9 @@ importers: '@typescript-eslint/parser': specifier: 8.26.0 version: 8.26.0(eslint@9.22.0)(typescript@5.8.2) + eslint: + specifier: 9.22.0 + version: 9.22.0 openapi-types: specifier: 12.1.3 version: 12.1.3 From 6032f70c08c7ba798488423c86da47348a742d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:42:40 +0900 Subject: [PATCH 05/10] regenerate --- pnpm-lock.yaml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 820d041852..5eb1b0be88 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1389,6 +1389,9 @@ importers: '@typescript-eslint/parser': specifier: 8.29.0 version: 8.29.0(eslint@9.22.0)(typescript@5.8.2) + eslint: + specifier: 9.22.0 + version: 9.22.0 openapi-types: specifier: 12.1.3 version: 12.1.3 @@ -4303,9 +4306,6 @@ packages: '@types/eslint@7.29.0': resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} @@ -10850,6 +10850,9 @@ packages: vue-component-type-helpers@2.0.16: resolution: {integrity: sha512-qisL/iAfdO++7w+SsfYQJVPj6QKvxp4i1MMxvsNO41z/8zu3KuAw9LkhKUfP/kcOWGDxESp+pQObWppXusejCA==} + vue-component-type-helpers@2.2.10: + resolution: {integrity: sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==} + vue-component-type-helpers@2.2.8: resolution: {integrity: sha512-4bjIsC284coDO9om4HPA62M7wfsTvcmZyzdfR0aUlFXqq4tXxM1APyXpNVxPC8QazKw9OhmZNHBVDA6ODaZsrA==} @@ -14445,7 +14448,7 @@ snapshots: ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.5.13(typescript@5.8.3) - vue-component-type-helpers: 2.2.8 + vue-component-type-helpers: 2.2.10 '@stylistic/eslint-plugin@2.13.0(eslint@9.22.0)(typescript@5.8.2)': dependencies: @@ -14775,8 +14778,6 @@ snapshots: '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 - '@types/estree@1.0.6': {} - '@types/estree@1.0.7': {} '@types/express-serve-static-core@4.17.33': @@ -17483,7 +17484,7 @@ snapshots: eslint@9.22.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.22.0) + '@eslint-community/eslint-utils': 4.6.1(eslint@9.22.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.2 '@eslint/config-helpers': 0.1.0 @@ -17494,7 +17495,7 @@ snapshots: '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 @@ -22699,6 +22700,8 @@ snapshots: vue-component-type-helpers@2.0.16: {} + vue-component-type-helpers@2.2.10: {} + vue-component-type-helpers@2.2.8: {} vue-demi@0.14.7(vue@3.5.13(typescript@5.8.3)): From 89461ab869cbacf73159015f9c6bebbc3a55048b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:44:13 +0900 Subject: [PATCH 06/10] add SPDX --- packages/backend/src/core/note/NoteMutingService.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/backend/src/core/note/NoteMutingService.ts b/packages/backend/src/core/note/NoteMutingService.ts index f63d2c4765..55d3cdcc25 100644 --- a/packages/backend/src/core/note/NoteMutingService.ts +++ b/packages/backend/src/core/note/NoteMutingService.ts @@ -1,3 +1,8 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; import * as Redis from 'ioredis'; import { RedisKVCache } from '@/misc/cache.js'; From 5392ea59c625a6b6ce326adbed75b23d17b3153b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:47:16 +0900 Subject: [PATCH 07/10] fix lint --- packages/backend/src/misc/is-muting-note-related.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/misc/is-muting-note-related.ts b/packages/backend/src/misc/is-muting-note-related.ts index eb72b5a393..b2f2866087 100644 --- a/packages/backend/src/misc/is-muting-note-related.ts +++ b/packages/backend/src/misc/is-muting-note-related.ts @@ -7,7 +7,7 @@ type NoteCompat = { id: string; reply?: NoteCompat | null; renote?: NoteCompat | null; -} +}; export function isMutingNoteRelated(note: NoteCompat, noteIds: Set) { if (noteIds.has(note.id)) { From 3613409eed9c014eb0d291fb792d53540922a2ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:48:46 +0900 Subject: [PATCH 08/10] fix missing parameter --- .../backend/src/server/api/StreamingApiServerService.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts index 2a4e1fc574..491e2c5d29 100644 --- a/packages/backend/src/server/api/StreamingApiServerService.ts +++ b/packages/backend/src/server/api/StreamingApiServerService.ts @@ -7,6 +7,7 @@ import { EventEmitter } from 'events'; import { Inject, Injectable } from '@nestjs/common'; import * as Redis from 'ioredis'; import * as WebSocket from 'ws'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; import { DI } from '@/di-symbols.js'; import type { UsersRepository, MiAccessToken } from '@/models/_.js'; import { NotificationService } from '@/core/NotificationService.js'; @@ -39,6 +40,7 @@ export class StreamingApiServerService { private notificationService: NotificationService, private usersService: UserService, private channelFollowingService: ChannelFollowingService, + private noteMutingService: NoteMutingService, ) { } @@ -97,7 +99,9 @@ export class StreamingApiServerService { this.notificationService, this.cacheService, this.channelFollowingService, - user, app, + this.noteMutingService, + user, + app, ); await stream.init(); From 86b92381e3ae40de8f62ba0c0d1a869d8588a86c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Sat, 26 Apr 2025 20:14:41 +0900 Subject: [PATCH 09/10] add unittest --- .../backend/test/unit/NoteMutingService.ts | 369 ++++++++++++++++++ 1 file changed, 369 insertions(+) create mode 100644 packages/backend/test/unit/NoteMutingService.ts diff --git a/packages/backend/test/unit/NoteMutingService.ts b/packages/backend/test/unit/NoteMutingService.ts new file mode 100644 index 0000000000..adfcaf9b16 --- /dev/null +++ b/packages/backend/test/unit/NoteMutingService.ts @@ -0,0 +1,369 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { describe, jest, expect, beforeAll, beforeEach, afterEach, afterAll, test } from '@jest/globals'; +import { Test, TestingModule } from '@nestjs/testing'; +import { randomString } from '../utils.js'; +import { NoteMutingService } from '@/core/note/NoteMutingService.js'; +import { + MiNoteMuting, + MiNote, + MiUser, + NoteMutingsRepository, + NotesRepository, + UsersRepository, +} from '@/models/_.js'; +import { DI } from '@/di-symbols.js'; +import { GlobalModule } from '@/GlobalModule.js'; +import { CoreModule } from '@/core/CoreModule.js'; +import { IdService } from '@/core/IdService.js'; +import { GlobalEventService } from '@/core/GlobalEventService.js'; +import { QueryService } from '@/core/QueryService.js'; + +process.env.NODE_ENV = 'test'; + +describe('NoteMutingService', () => { + let app: TestingModule; + let service: NoteMutingService; + + // -------------------------------------------------------------------------------------- + + let notesRepository: NotesRepository; + let noteMutingsRepository: NoteMutingsRepository; + let usersRepository: UsersRepository; + let idService: IdService; + let globalEventService: GlobalEventService; + let queryService: QueryService; + + // -------------------------------------------------------------------------------------- + + // Helper function to create a user + async function createUser(data: Partial = {}): Promise { + const user = { + id: idService.gen(), + username: randomString(), + usernameLower: randomString().toLowerCase(), + host: null, + ...data, + }; + + return await usersRepository.insert(user) + .then(x => usersRepository.findOneByOrFail(x.identifiers[0])); + } + + // Helper function to create a note + async function createNote(data: Partial = {}): Promise { + return await notesRepository.insert({ + id: idService.gen(), + userId: data.userId ?? (await createUser()).id, + text: randomString(), + visibility: 'public', + ...data, + }) + .then(x => notesRepository.findOneByOrFail(x.identifiers[0])); + } + + // Helper function to create a note muting + async function createNoteMuting(data: Partial = {}): Promise { + const id = idService.gen(); + const noteMuting = { + id, + userId: data.userId || (await createUser()).id, + noteId: data.noteId || (await createNote()).id, + expiresAt: null, + ...data, + }; + + return await noteMutingsRepository.insert(noteMuting) + .then(x => noteMutingsRepository.findOneByOrFail(x.identifiers[0])); + } + + // -------------------------------------------------------------------------------------- + + beforeAll(async () => { + app = await Test + .createTestingModule({ + imports: [ + GlobalModule, + CoreModule, + ], + }) + .compile(); + + service = app.get(NoteMutingService); + idService = app.get(IdService); + queryService = app.get(QueryService); + globalEventService = app.get(GlobalEventService); + notesRepository = app.get(DI.notesRepository); + noteMutingsRepository = app.get(DI.noteMutingsRepository); + usersRepository = app.get(DI.usersRepository); + + app.enableShutdownHooks(); + }); + + beforeEach(async () => { + // Clean database before each test + await noteMutingsRepository.delete({}); + await notesRepository.delete({}); + await usersRepository.delete({}); + }); + + afterEach(async () => { + // Clean database after each test + await noteMutingsRepository.delete({}); + await notesRepository.delete({}); + await usersRepository.delete({}); + }); + + afterAll(async () => { + await app.close(); + }); + + // -------------------------------------------------------------------------------------- + + describe('create', () => { + test('should create a note muting', async () => { + // Create a user and a note + const user = await createUser(); + const note = await createNote(); + + // Create a note muting + await service.create({ + userId: user.id, + noteId: note.id, + expiresAt: null, + }); + + // Verify the note muting was created + const noteMuting = await noteMutingsRepository.findOneBy({ + userId: user.id, + noteId: note.id, + }); + + expect(noteMuting).not.toBeNull(); + expect(noteMuting?.userId).toBe(user.id); + expect(noteMuting?.noteId).toBe(note.id); + }); + + test('should throw NoSuchNoteError if note does not exist', async () => { + // Create a user + const user = await createUser(); + const nonexistentNoteId = idService.gen(); + + // Attempt to create a note muting with a non-existent note + await expect(service.create({ + userId: user.id, + noteId: nonexistentNoteId, + expiresAt: null, + })).rejects.toThrow(NoteMutingService.NoSuchNoteError); + + // Verify no note muting was created + const noteMuting = await noteMutingsRepository.findOneBy({ + userId: user.id, + noteId: nonexistentNoteId, + }); + + expect(noteMuting).toBeNull(); + }); + }); + + describe('delete', () => { + test('should delete a note muting', async () => { + // Create a user, note, and note muting + const user = await createUser(); + const note = await createNote(); + const noteMuting = await createNoteMuting({ + userId: user.id, + noteId: note.id, + }); + + // Verify the note muting exists + const beforeDelete = await noteMutingsRepository.findOneBy({ + userId: user.id, + noteId: note.id, + }); + expect(beforeDelete).not.toBeNull(); + + // Delete the note muting + await service.delete(user.id, note.id); + + // Verify the note muting was deleted + const afterDelete = await noteMutingsRepository.findOneBy({ + userId: user.id, + noteId: note.id, + }); + expect(afterDelete).toBeNull(); + }); + + test('should throw NotMutedError if muting does not exist', async () => { + // Create a user and note + const user = await createUser(); + const note = await createNote(); + + // Attempt to delete a non-existent note muting + await expect(service.delete(user.id, note.id)).rejects.toThrow(NoteMutingService.NotMutedError); + }); + }); + + describe('isMuting', () => { + test('should return true if user is muting the note', async () => { + // Create a user, note, and note muting + const user = await createUser(); + const note = await createNote(); + await createNoteMuting({ + userId: user.id, + noteId: note.id, + }); + + // Check if the user is muting the note + const result = await service.isMuting(user.id, note.id); + + expect(result).toBe(true); + }); + + test('should return false if user is not muting the note', async () => { + // Create a user and note, but no muting + const user = await createUser(); + const note = await createNote(); + + // Check if the user is muting the note + const result = await service.isMuting(user.id, note.id); + + expect(result).toBe(false); + }); + }); + + describe('getMutingNoteIdsSet', () => { + test('should return a set of muted note IDs', async () => { + // Create a user and multiple notes + const user = await createUser(); + const note1 = await createNote(); + const note2 = await createNote(); + const note3 = await createNote(); + + // Create note mutings for two of the notes + await createNoteMuting({ + userId: user.id, + noteId: note1.id, + }); + await createNoteMuting({ + userId: user.id, + noteId: note2.id, + }); + + // Get the set of muted note IDs + const result = await service.getMutingNoteIdsSet(user.id); + + // Verify the result is a Set containing the muted note IDs + expect(result).toBeInstanceOf(Set); + expect(result.has(note1.id)).toBe(true); + expect(result.has(note2.id)).toBe(true); + expect(result.has(note3.id)).toBe(false); + }); + }); + + describe('listByUserId', () => { + test('should return a list of note mutings for a user', async () => { + // Create a user and multiple notes + const user = await createUser(); + const note1 = await createNote(); + const note2 = await createNote(); + + // Create note mutings + const muting1 = await createNoteMuting({ + userId: user.id, + noteId: note1.id, + }); + const muting2 = await createNoteMuting({ + userId: user.id, + noteId: note2.id, + }); + + // Get the list of note mutings + const result = await service.listByUserId({ userId: user.id }); + + // Verify the result contains the expected mutings + expect(result).toHaveLength(2); + expect(result.map(m => m.id).sort()).toEqual([muting1.id, muting2.id].sort()); + expect(result.map(m => m.noteId).sort()).toEqual([note1.id, note2.id].sort()); + }); + }); + + describe('cleanupExpiredMutes', () => { + test('should delete expired mutes', async () => { + // Create users and notes + const user1 = await createUser(); + const user2 = await createUser(); + const note1 = await createNote(); + const note2 = await createNote(); + const note3 = await createNote(); + + // Set the expiration date to 1 hour ago + const expiredDate = new Date(); + expiredDate.setHours(expiredDate.getHours() - 1); + + // Set the expiration date to 1 hour in the future + const futureDate = new Date(); + futureDate.setHours(futureDate.getHours() + 1); + + // Create expired note mutings + const expiredMuting1 = await createNoteMuting({ + userId: user1.id, + noteId: note1.id, + expiresAt: expiredDate, + }); + + const expiredMuting2 = await createNoteMuting({ + userId: user1.id, + noteId: note2.id, + expiresAt: expiredDate, + }); + + const expiredMuting3 = await createNoteMuting({ + userId: user2.id, + noteId: note3.id, + expiresAt: expiredDate, + }); + + // Create non-expired note muting + const activeMuting = await createNoteMuting({ + userId: user2.id, + noteId: note1.id, + expiresAt: futureDate, + }); + + // Create permanent note muting (no expiration) + const permanentMuting = await createNoteMuting({ + userId: user2.id, + noteId: note2.id, + expiresAt: null, + }); + + // Verify all mutings exist before cleanup + expect(await noteMutingsRepository.findOneBy({ id: expiredMuting1.id })).not.toBeNull(); + expect(await noteMutingsRepository.findOneBy({ id: expiredMuting2.id })).not.toBeNull(); + expect(await noteMutingsRepository.findOneBy({ id: expiredMuting3.id })).not.toBeNull(); + expect(await noteMutingsRepository.findOneBy({ id: activeMuting.id })).not.toBeNull(); + expect(await noteMutingsRepository.findOneBy({ id: permanentMuting.id })).not.toBeNull(); + + // Run cleanup + await service.cleanupExpiredMutes(); + + // Verify expired mutings are deleted and others remain + expect(await noteMutingsRepository.findOneBy({ id: expiredMuting1.id })).toBeNull(); + expect(await noteMutingsRepository.findOneBy({ id: expiredMuting2.id })).toBeNull(); + expect(await noteMutingsRepository.findOneBy({ id: expiredMuting3.id })).toBeNull(); + expect(await noteMutingsRepository.findOneBy({ id: activeMuting.id })).not.toBeNull(); + expect(await noteMutingsRepository.findOneBy({ id: permanentMuting.id })).not.toBeNull(); + + // Verify cache is updated by checking isMuting + expect(await service.isMuting(user1.id, note1.id)).toBe(false); + expect(await service.isMuting(user1.id, note2.id)).toBe(false); + expect(await service.isMuting(user2.id, note3.id)).toBe(false); + expect(await service.isMuting(user2.id, note1.id)).toBe(true); + expect(await service.isMuting(user2.id, note2.id)).toBe(true); + }); + }); +}); From 062b6391f6c20d6d6149b84b19a01a78ddfd0cdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Sat, 26 Apr 2025 20:54:27 +0900 Subject: [PATCH 10/10] add e2e --- packages/backend/test/e2e/timelines.ts | 113 ++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 4 deletions(-) diff --git a/packages/backend/test/e2e/timelines.ts b/packages/backend/test/e2e/timelines.ts index d6d2cb33f0..8429149524 100644 --- a/packages/backend/test/e2e/timelines.ts +++ b/packages/backend/test/e2e/timelines.ts @@ -512,6 +512,28 @@ describe('Timelines', () => { assert.strictEqual(res.body.some(note => note.id === bobNote.id), false); }); + test.concurrent('ノートミュートが機能する', async () => { + const [alice, bob] = await Promise.all([signup(), signup()]); + + await api('following/create', { userId: bob.id }, alice); + await setTimeout(1000); + const bobNote = await post(bob, { text: 'hi' }); + + await waitForPushToTl(); + + // ミュート前はノートが表示される + const res1 = await api('notes/timeline', { limit: 100 }, alice); + assert.strictEqual(res1.body.some(note => note.id === bobNote.id), true); + + // ノートをミュート + await api('notes/muting/create', { noteId: bobNote.id }, alice); + await setTimeout(1000); + + // ミュート後はノートが表示されない + const res2 = await api('notes/timeline', { limit: 100 }, alice); + assert.strictEqual(res2.body.some(note => note.id === bobNote.id), false); + }); + test.concurrent('FTT: ローカルユーザーの HTL にはプッシュされる', async () => { const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]); @@ -744,7 +766,27 @@ describe('Timelines', () => { assert.strictEqual(res.body.some(note => note.id === bobNote1.id), false); assert.strictEqual(res.body.some(note => note.id === bobNote2.id), true); - }, 1000 * 10); + }, 1000 * 30); + + test.concurrent('ノートミュートが機能する', async () => { + const [alice, bob] = await Promise.all([signup(), signup()]); + + const bobNote = await post(bob, { text: 'hi' }); + + await waitForPushToTl(); + + // ミュート前はノートが表示される + const res1 = await api('notes/local-timeline', { limit: 100 }, alice); + assert.strictEqual(res1.body.some(note => note.id === bobNote.id), true); + + // ノートをミュート + await api('notes/muting/create', { noteId: bobNote.id }, alice); + await setTimeout(1000); + + // ミュート後はノートが表示されない + const res2 = await api('notes/local-timeline', { limit: 100 }, alice); + assert.strictEqual(res2.body.some(note => note.id === bobNote.id), false); + }); }); describe('Social TL', () => { @@ -955,7 +997,27 @@ describe('Timelines', () => { assert.strictEqual(res.body.some(note => note.id === bobNote1.id), false); assert.strictEqual(res.body.some(note => note.id === bobNote2.id), true); - }, 1000 * 10); + }, 1000 * 30); + + test.concurrent('ノートミュートが機能する', async () => { + const [alice, bob] = await Promise.all([signup(), signup()]); + + const bobNote = await post(bob, { text: 'hi' }); + + await waitForPushToTl(); + + // ミュート前はノートが表示される + const res1 = await api('notes/hybrid-timeline', { limit: 100 }, alice); + assert.strictEqual(res1.body.some(note => note.id === bobNote.id), true); + + // ノートをミュート + await api('notes/muting/create', { noteId: bobNote.id }, alice); + await setTimeout(1000); + + // ミュート後はノートが表示されない + const res2 = await api('notes/hybrid-timeline', { limit: 100 }, alice); + assert.strictEqual(res2.body.some(note => note.id === bobNote.id), false); + }); }); describe('User List TL', () => { @@ -1168,7 +1230,7 @@ describe('Timelines', () => { assert.strictEqual(res.body.some(note => note.id === bobNote1.id), false); assert.strictEqual(res.body.some(note => note.id === bobNote2.id), true); - }, 1000 * 10); + }, 1000 * 30); test.concurrent('リスインしているユーザーの自身宛ての visibility: specified なノートが含まれる', async () => { const [alice, bob] = await Promise.all([signup(), signup()]); @@ -1201,6 +1263,29 @@ describe('Timelines', () => { assert.strictEqual(res.body.some(note => note.id === bobNote.id), false); }); + + test.concurrent('ノートミュートが機能する', async () => { + const [alice, bob] = await Promise.all([signup(), signup()]); + + const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body); + await api('users/lists/push', { listId: list.id, userId: bob.id }, alice); + await setTimeout(1000); + const bobNote = await post(bob, { text: 'hi' }); + + await waitForPushToTl(); + + // ミュート前はノートが表示される + const res1 = await api('notes/user-list-timeline', { listId: list.id }, alice); + assert.strictEqual(res1.body.some(note => note.id === bobNote.id), true); + + // ノートをミュート + await api('notes/muting/create', { noteId: bobNote.id }, alice); + await setTimeout(1000); + + // ミュート後はノートが表示されない + const res2 = await api('notes/user-list-timeline', { listId: list.id }, alice); + assert.strictEqual(res2.body.some(note => note.id === bobNote.id), false); + }); }); describe('User TL', () => { @@ -1327,7 +1412,7 @@ describe('Timelines', () => { assert.strictEqual(res.body.some(note => note.id === bobNote1.id), false); assert.strictEqual(res.body.some(note => note.id === bobNote2.id), true); - }, 1000 * 10); + }, 1000 * 30); test.concurrent('[withChannelNotes: true] チャンネル投稿が含まれる', async () => { const [alice, bob] = await Promise.all([signup(), signup()]); @@ -1451,6 +1536,26 @@ describe('Timelines', () => { const res = await api('users/notes', { userId: alice.id, sinceId: noteSince.id, untilId: noteUntil.id }); assert.deepStrictEqual(res.body, [note3, note2, note1]); }); + + test.concurrent('ノートミュートが機能する', async () => { + const [alice, bob] = await Promise.all([signup(), signup()]); + + const bobNote = await post(bob, { text: 'hi' }); + + await waitForPushToTl(); + + // ミュート前はノートが表示される + const res1 = await api('users/notes', { userId: bob.id }, alice); + assert.strictEqual(res1.body.some(note => note.id === bobNote.id), true); + + // ノートをミュート + await api('notes/muting/create', { noteId: bobNote.id }, alice); + await setTimeout(1000); + + // ミュート後はノートが表示されない + const res2 = await api('users/notes', { userId: bob.id }, alice); + assert.strictEqual(res2.body.some(note => note.id === bobNote.id), false); + }); }); // TODO: リノートミュート済みユーザーのテスト