Merge remote-tracking branch 'misskey-dev/develop' into prismisskey

# Conflicts:
#	package.json
This commit is contained in:
mattyatea 2023-09-24 11:15:32 +09:00
commit 4e9aa25394
54 changed files with 582 additions and 241 deletions

View File

@ -14,6 +14,9 @@
## 2023.9.0 (unreleased)
### Note
- meilisearchを使用する場合、v1.2以上が必要です
### General
- Feat: OAuth 2.0のサポート
- Feat: お知らせ機能の強化

View File

@ -1556,3 +1556,6 @@ _webhookSettings:
active: "مُفعّل"
_events:
reaction: "عند التفاعل"
_moderationLogTypes:
suspend: "علِق"
resetPassword: "أعد تعيين كلمتك السرية"

View File

@ -1333,3 +1333,6 @@ _deck:
_webhookSettings:
name: "নাম"
active: "চালু"
_moderationLogTypes:
suspend: "স্থগিত করা"
resetPassword: "পাসওয়ার্ড রিসেট করুন"

View File

@ -479,3 +479,6 @@ _deck:
list: "Llistes"
mentions: "Mencions"
direct: "Publicacions directes"
_moderationLogTypes:
suspend: "Suspèn"
resetPassword: "Restableix la contrasenya"

View File

@ -2036,3 +2036,6 @@ _webhookSettings:
renote: "Při renotaci poznámky"
reaction: "Při obdržení reakce"
mention: "Při zmínce"
_moderationLogTypes:
suspend: "Zmrazit"
resetPassword: "Resetovat heslo"

View File

@ -2,7 +2,7 @@
_lang_: "Deutsch"
headlineMisskey: "Ein durch Notizen verbundenes Netzwerk"
introMisskey: "Willkommen! Misskey ist eine dezentralisierte Open-Source Microblogging-Platform.\nVerfasse „Notizen“ um mitzuteilen, was gerade passiert oder um Ereignisse mit anderen zu teilen. 📡\nMit „Reaktionen“ kannst du außerdem schnell deine Gefühle über Notizen anderer Benutzer zum Ausdruck bringen. 👍\nEine neue Welt wartet auf dich! 🚀"
poweredByMisskeyDescription: "{name} ist einer der durch die Open-Source-Plattform <b>Misskey</b> betriebenen Dienste (meist als \"Misskey-Instanz\" bezeichnet)."
poweredByMisskeyDescription: "{name} ist einer der durch die Open-Source-Plattform <b>Misskey</b> betriebenen Dienste."
monthAndDay: "{day}.{month}."
search: "Suchen"
notifications: "Benachrichtigungen"
@ -75,7 +75,7 @@ import: "Import"
export: "Export"
files: "Dateien"
download: "Herunterladen"
driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Sie wird in allen Inhalten, die sie verwenden, auch verschwinden."
driveFileDeleteConfirm: "Möchtest du die Datei „{name}“ wirklich löschen? Einige Inhalte, die diese Datei verwenden, werden auch verschwinden."
unfollowConfirm: "Möchtest du {name} wirklich nicht mehr folgen?"
exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch nehmen. Sobald der Export abgeschlossen ist, wird er deiner Drive hinzugefügt."
importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch nehmen."
@ -418,6 +418,7 @@ moderator: "Moderator"
moderation: "Moderation"
moderationNote: "Moderationsnotiz"
addModerationNote: "Moderationsnotiz hinzufügen"
moderationLogs: "Moderationsprotokolle"
nUsersMentioned: "Von {n} Benutzern erwähnt"
securityKeyAndPasskey: "Hardware-Sicherheitsschlüssel und Passkeys"
securityKey: "Hardware-Sicherheitsschlüssel"
@ -639,7 +640,7 @@ display: "Anzeigeart"
copy: "Kopieren"
metrics: "Metriken"
overview: "Übersicht"
logs: "Logs"
logs: "Protokolle"
delayed: "Verzögert"
database: "Datenbank"
channel: "Kanäle"
@ -1049,7 +1050,7 @@ vertical: "Vertikal"
horizontal: "Horizontal"
position: "Position"
serverRules: "Serverregeln"
pleaseConfirmBelowBeforeSignup: "Lies bitte Untenstehendes vor der Registration."
pleaseConfirmBelowBeforeSignup: "Lies bitte diese Informationen und stimme ihnen vor der Registration zu."
pleaseAgreeAllToContinue: "Zum Fortfahren muss allen obigen Feldern zugestimmt werden."
continue: "Fortfahren"
preservedUsernames: "Reservierte Benutzernamen"
@ -1727,7 +1728,7 @@ _2fa:
step2Click: "Durch Klicken dieses QR-Codes kannst du Verifikation mit deinem Security-Token oder einer App registrieren."
step2Uri: "Nutzt du ein Desktopprogramm, gib folgende URI eingeben"
step3Title: "Authentifizierungsscode eingeben"
step3: "Gib zum Abschluss den Token ein, der von deiner App angezeigt wird."
step3: "Gib zum Abschluss den Code (Token) ein, der von deiner App angezeigt wird."
setupCompleted: "Einrichtung abgeschlossen"
step4: "Alle folgenden Anmeldeversuche werden ab sofort die Eingabe eines solchen Tokens benötigen."
securityKeyNotSupported: "Dein Browser unterstützt keine Hardware-Sicherheitsschlüssel."
@ -2099,3 +2100,19 @@ _webhookSettings:
renote: "Wenn du ein Renote erhältst"
reaction: "Wenn du eine Reaktion erhältst"
mention: "Wenn du erwähnt wirst"
_moderationLogTypes:
assignRole: "Zu Rolle zugewiesen"
unassignRole: "Aus Rolle entfernt"
updateRole: "Rolle aktualisiert"
suspend: "Gesperrt"
unsuspend: "Entsperrt"
addCustomEmoji: "Benutzerdefiniertes Emoji hinzugefügt"
updateServerSettings: "Servereinstellungen aktualisiert"
updateUserNote: "Moderationsnotiz aktualisiert"
deleteDriveFile: "Datei gelöscht"
deleteNote: "Notiz gelöscht"
createGlobalAnnouncement: "Globale Ankündigung erstellt"
createUserAnnouncement: "Benutzerankündigung erstellt"
resetPassword: "Passwort zurückgesetzt"
suspendRemoteInstance: "Fremde Instanz gesperrt"
unsuspendRemoteInstance: "Fremde Instanz entsperrt"

View File

@ -397,3 +397,5 @@ _deck:
mentions: "Επισημάνσεις"
_webhookSettings:
name: "Όνομα"
_moderationLogTypes:
suspend: "Αποβολή"

View File

@ -422,6 +422,7 @@ moderator: "Moderator"
moderation: "Moderation"
moderationNote: "Moderation note"
addModerationNote: "Add moderation note"
moderationLogs: "Moderation logs"
nUsersMentioned: "Mentioned by {n} users"
securityKeyAndPasskey: "Security- and passkeys"
securityKey: "Security key"
@ -2109,3 +2110,19 @@ _webhookSettings:
renote: "When renoted"
reaction: "When receiving a reaction"
mention: "When being mentioned"
_moderationLogTypes:
assignRole: "Assigned to role"
unassignRole: "Removed from role"
updateRole: "Role updated"
suspend: "Suspended"
unsuspend: "Unsuspended"
addCustomEmoji: "Custom emoji added"
updateServerSettings: "Server settings updated"
updateUserNote: "Moderation note updated"
deleteDriveFile: "File deleted"
deleteNote: "Note deleted"
createGlobalAnnouncement: "Global announcement created"
createUserAnnouncement: "User announcement created"
resetPassword: "Password reset"
suspendRemoteInstance: "Remote instance suspended"
unsuspendRemoteInstance: "Remote instance unsuspended"

View File

@ -2079,3 +2079,6 @@ _webhookSettings:
renote: "Cuando reciba un \"re-note\""
reaction: "Cuando se recibe una reacción"
mention: "Cuando hay una mención"
_moderationLogTypes:
suspend: "Suspender"
resetPassword: "Resetear contraseña"

View File

@ -1691,3 +1691,6 @@ _deck:
_webhookSettings:
name: "Nom"
active: "Activé"
_moderationLogTypes:
suspend: "Suspendre"
resetPassword: "Réinitialiser le mot de passe"

View File

@ -2041,3 +2041,6 @@ _webhookSettings:
renote: "Ketika direnote"
reaction: "Ketika menerima reaksi"
mention: "Ketika sedang disebut"
_moderationLogTypes:
suspend: "Tangguhkan"
resetPassword: "Atur ulang kata sandi"

9
locales/index.d.ts vendored
View File

@ -2266,12 +2266,21 @@ export interface Locale {
"suspend": string;
"unsuspend": string;
"addCustomEmoji": string;
"updateCustomEmoji": string;
"deleteCustomEmoji": string;
"updateServerSettings": string;
"updateUserNote": string;
"deleteDriveFile": string;
"deleteNote": string;
"createGlobalAnnouncement": string;
"createUserAnnouncement": string;
"updateGlobalAnnouncement": string;
"updateUserAnnouncement": string;
"deleteGlobalAnnouncement": string;
"deleteUserAnnouncement": string;
"resetPassword": string;
"suspendRemoteInstance": string;
"unsuspendRemoteInstance": string;
};
}
declare const locales: {

View File

@ -117,7 +117,7 @@ pinnedNote: "Nota fissata"
pinned: "Fissa sul profilo"
you: "Tu"
clickToShow: "Clicca per visualizzare"
sensitive: "Contenuto sensibile"
sensitive: "Esplicito"
add: "Aggiungi"
reaction: "Reazioni"
reactions: "Reazioni"
@ -125,8 +125,8 @@ reactionSetting: "Reazioni visualizzate sul pannello"
reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa il pulsante \"+\" per aggiungere."
rememberNoteVisibility: "Ricordare le impostazioni di visibilità delle note"
attachCancel: "Rimuovi allegato"
markAsSensitive: "Segna come sensibile"
unmarkAsSensitive: "Segna come non sensibile"
markAsSensitive: "Segna come esplicito"
unmarkAsSensitive: "Non segnare come esplicito "
enterFileName: "Nome del file"
mute: "Silenzia"
unmute: "Riattiva l'audio"
@ -148,7 +148,7 @@ editAntenna: "Modifica Antenna"
selectWidget: "Seleziona il riquadro"
editWidgets: "Modifica i riquadri"
editWidgetsExit: "Conferma le modifiche"
customEmojis: "Emoji personalizzati"
customEmojis: "Emoji personalizzate"
emoji: "Emoji"
emojis: "Emoji"
emojiName: "Nome dell'emoji"
@ -158,8 +158,8 @@ settingGuide: "Configurazione suggerita"
cacheRemoteFiles: "Memorizza i file remoti nella cache"
cacheRemoteFilesDescription: "Disabilitando questa opzione, i file remoti verranno linkati direttamente senza essere memorizzati nella cache. Sarà possibile risparmiare spazio di archiviazione sul server, ma il traffico aumenterà in quanto non verranno generate anteprime."
youCanCleanRemoteFilesCache: "Puoi svuotare tutta la cache cliccando il bottone 🗑️ nella gestione file"
cacheRemoteSensitiveFiles: "Memorizza nella cache i file sensibili remoti"
cacheRemoteSensitiveFilesDescription: "Disattivando questa opzione, i file sensibili verranno caricati direttamente dall'istanza remota senza essere salvati dal server."
cacheRemoteSensitiveFiles: "Copia nella cache locale i file espliciti remoti"
cacheRemoteSensitiveFilesDescription: "Disattivando questa opzione, i file espliciti verranno richiesti direttamente all'istanza remota senza essere salvati nel server locale."
flagAsBot: "Io sono un robot"
flagAsBotDescription: "Attiva questo campo se il profilo esegue principalmente operazioni automatiche. L'attivazione segnala agli altri sviluppatori come comportarsi per evitare catene dinterazione infinite con altri bot. I sistemi interni di Misskey si adegueranno al fine di trattare questo profilo come bot."
flagAsCat: "Sono un gatto"
@ -321,7 +321,7 @@ copyUrl: "Copia URL"
rename: "Modifica nome"
avatar: "Foto del profilo"
banner: "Intestazione"
displayOfSensitiveMedia: "Visibilità dei media sensibili"
displayOfSensitiveMedia: "Visibilità dei media espliciti"
whenServerDisconnected: "Quando la connessione col server è persa"
disconnectedFromServer: "Il server si è disconnesso"
reload: "Ricarica"
@ -418,6 +418,7 @@ moderator: "Moderatore"
moderation: "moderazione"
moderationNote: "Promemoria di moderazione"
addModerationNote: "Aggiungi promemoria di moderazione"
moderationLogs: "Cronologia di moderazione"
nUsersMentioned: "{n} profili menzionati"
securityKeyAndPasskey: "Chiave di sicurezza e accesso"
securityKey: "Chiave di sicurezza"
@ -707,9 +708,10 @@ driveUsage: "Utilizzazione del Drive"
noCrawle: "Rifiuta l'indicizzazione dai robot."
noCrawleDescription: "Richiedi che i motori di ricerca non indicizzino la tua pagina di profilo, le tue note, pagine, ecc."
lockedAccountInfo: "A meno che non imposti la visibilità delle tue note su \"Solo ai follower\", le tue note sono visibili da tutti, anche se hai configurato l'account per confermare manualmente le richieste di follow."
alwaysMarkSensitive: "Segnare i media come sensibili per impostazione predefinita"
alwaysMarkSensitive: "Segnare gli allegati come espliciti come opzione predefinita"
loadRawImages: "Visualizza le intere immagini allegate invece delle miniature."
disableShowingAnimatedImages: "Disabilita le immagini animate"
highlightSensitiveMedia: "Evidenzia i media espliciti"
verificationEmailSent: "Una mail di verifica è stata inviata. Si prega di accedere al collegamento per compiere la verifica."
notSet: "Non impostato"
emailVerified: "Il tuo indirizzo email è stato verificato"
@ -926,7 +928,7 @@ type: "Tipo"
speed: "Velocità"
slow: "Lento"
fast: "Veloce"
sensitiveMediaDetection: "Rilevamento dei contenuti sensibili."
sensitiveMediaDetection: "Rilevamento dei contenuti espliciti"
localOnly: "Soltanto locale"
remoteOnly: "Solo remoto"
failedToUpload: "errore di caricamento"
@ -1006,11 +1008,11 @@ cannotBeChangedLater: "Non sarà più modificabile"
reactionAcceptance: "Reazioni consentite"
likeOnly: "Solo i Like"
likeOnlyForRemote: "Solo Like remoti"
nonSensitiveOnly: "Solamente non sensibili"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "Solamente non sensibili (solo Mi piace remoti)"
nonSensitiveOnly: "Soltanto non espliciti"
nonSensitiveOnlyForLocalLikeOnlyForRemote: "Soltanto non espliciti (reazioni remote)"
rolesAssignedToMe: "I miei ruoli"
resetPasswordConfirm: "Vuoi davvero ripristinare la password?"
sensitiveWords: "Parole sensibili"
sensitiveWords: "Parole esplicite"
sensitiveWordsDescription: "Imposta automaticamente \"Home\" alla visibilità delle Note che contengono una qualsiasi parola tra queste configurate. Puoi separarle per riga."
sensitiveWordsDescription2: "Gli spazi creano la relazione \"E\" tra parole (questo E quello). Racchiudere una parola nelle slash \"/\" la trasforma in Espressione Regolare."
notesSearchNotAvailable: "Non è possibile cercare tra le Note."
@ -1116,6 +1118,8 @@ keepScreenOn: "Mantieni lo schermo acceso"
verifiedLink: "Abbiamo confermato la validità di questo collegamento"
notifyNotes: "Notifica nuove Note"
unnotifyNotes: "Interrompi le notifiche di nuove Note"
authentication: "Autenticazione"
authenticationRequiredToContinue: "Per procedere, è richiesta l'autenticazione"
_announcement:
forExistingUsers: "Solo ai profili attuali"
forExistingUsersDescription: "L'annuncio sarà visibile solo ai profili esistenti in questo momento. Se disabilitato, sarà visibile anche ai profili che verranno creati dopo la pubblicazione di questo annuncio."
@ -1149,6 +1153,8 @@ _serverSettings:
appIconStyleRecommendation: "Poiché l'icona potrebbe essere ritagliata in un quadrato o in un cerchio, si raccomanda che abbia un margine colorato."
appIconResolutionMustBe: "La risoluzione minima è {resolution}"
manifestJsonOverride: "Sostituire il file manifest.json"
shortName: "Abbreviazione"
shortNameDescription: "Un'abbreviazione o un nome comune che può essere visualizzato al posto del nome ufficiale lungo del server."
_accountMigration:
moveFrom: "Migra un altro profilo dentro a questo"
moveFromSub: "Crea un alias verso un altro profilo remoto"
@ -1478,9 +1484,9 @@ _role:
or: "O"
not: "NON"
_sensitiveMediaDetection:
description: "L'apprendimento automatico può essere utilizzato per individuare automaticamente i media sensibili da moderare. Il carico del server aumenta leggermente."
sensitivity: "Sensibilità di rilevamento"
sensitivityDescription: "Una minore sensibilità riduce i falsi positivi (false positività). Una maggiore sensibilità riduce le omissioni (falsi negativi)."
description: "Utilizzare l'apprendimento automatico (machine learning) per riconoscere media espliciti e sottoporli alla moderazione. Aumenterà lievemente il carico del server."
sensitivity: "Sensibilità del rilevamento"
sensitivityDescription: "Abbassando la sensibilità si riducono i falsi positivi (rilevazioni errate). Aumentando la sensibilità si riduce il numero di rilevazioni mancate. (rilevazioni ignorate)."
setSensitiveFlagAutomatically: "Impostare il flag NSFW."
setSensitiveFlagAutomaticallyDescription: "Anche se questa impostazione è disattivata, il risultato della decisione viene conservato internamente."
analyzeVideos: "Abilitazione dell'analisi video."
@ -1564,8 +1570,8 @@ _aboutMisskey:
morePatrons: "Apprezziamo sinceramente il supporto di tante altre persone. Grazie mille! 🥰"
patrons: "Sostenitori"
_displayOfSensitiveMedia:
respect: "Nascondere i media sensibili"
ignore: "Non nascondere i media sensibili"
respect: "Nascondere i media espliciti"
ignore: "Non nascondere i media espliciti"
force: "Nascondi tutti i media"
_instanceTicker:
none: "Nascondi"
@ -1795,6 +1801,7 @@ _antennaSources:
homeTimeline: "Note dagli utenti che segui"
users: "Note dagli utenti selezionati"
userList: "Note dagli utenti della lista selezionata"
userBlacklist: "Tutte le Note tranne quelle di uno o più profili specificati"
_weekday:
sunday: "Domenica"
monday: "Lunedì"
@ -2023,6 +2030,7 @@ _notification:
notificationWillBeDisplayedLikeThis: "La notifica apparirà così"
_types:
all: "Tutto"
note: "Nuove Note"
follow: "Novità follower"
mention: "Menzioni"
reply: "Risposte"
@ -2092,3 +2100,19 @@ _webhookSettings:
renote: "Quando la Nota è Rinotata"
reaction: "Quando ricevo una reazione"
mention: "Quando mi menzionano"
_moderationLogTypes:
assignRole: "Assegna un ruolo"
unassignRole: "Disassegna un ruolo"
updateRole: "Aggiorna un ruolo"
suspend: "Sospensione"
unsuspend: "Toglie la sospensione"
addCustomEmoji: "Aggiunge una emoji personalizzata"
updateServerSettings: "Aggiorna le impostazioni del server"
updateUserNote: "Aggiorna il promemoria di moderazione"
deleteDriveFile: "Elimina file da Drive"
deleteNote: "Elimina la Nota"
createGlobalAnnouncement: "Crea un annuncio globale"
createUserAnnouncement: "Crea un annuncio ai profili iscritti"
resetPassword: "Ripristina la password"
suspendRemoteInstance: "Sospendi istanza remota"
unsuspendRemoteInstance: "Riattiva istanza remota"

View File

@ -2179,12 +2179,18 @@ _moderationLogTypes:
suspend: "凍結"
unsuspend: "凍結解除"
addCustomEmoji: "カスタム絵文字追加"
updateCustomEmoji: "カスタム絵文字更新"
deleteCustomEmoji: "カスタム絵文字削除"
updateServerSettings: "サーバー設定更新"
updateUserNote: "モデレーションノート更新"
deleteDriveFile: "ファイルを削除"
deleteNote: "ノートを削除"
createGlobalAnnouncement: "全体のお知らせを作成"
createUserAnnouncement: "ユーザーへお知らせを作成"
updateGlobalAnnouncement: "全体のお知らせを更新"
updateUserAnnouncement: "ユーザーのお知らせを更新"
deleteGlobalAnnouncement: "全体のお知らせを削除"
deleteUserAnnouncement: "ユーザーのお知らせを削除"
resetPassword: "パスワードをリセット"
suspendRemoteInstance: "リモートサーバーを停止"
unsuspendRemoteInstance: "リモートサーバーを再開"

View File

@ -2058,3 +2058,6 @@ _webhookSettings:
renote: "Renoteされるとき"
reaction: "ツッコミがあるとき~!"
mention: "メンションがあるとき~!"
_moderationLogTypes:
suspend: "凍結"
resetPassword: "パスワードをリセット"

View File

@ -2073,3 +2073,6 @@ _webhookSettings:
renote: "누군가 내 글을 Renote했을 때"
reaction: "누군가 내 노트에 리액션했을 때"
mention: "누군가 나를 멘션했을 때"
_moderationLogTypes:
suspend: "정지"
resetPassword: "비밀번호 재설정"

View File

@ -463,3 +463,5 @@ _deck:
mentions: "ກ່າວເຖິງ"
_webhookSettings:
name: "ຊື່"
_moderationLogTypes:
suspend: "ລະງັບ"

View File

@ -494,3 +494,6 @@ _deck:
mentions: "Vermeldingen"
_webhookSettings:
name: "Naam"
_moderationLogTypes:
suspend: "Opschorten"
resetPassword: "Wachtwoord terugzetten"

View File

@ -725,3 +725,5 @@ _deck:
direct: "Direkte"
_webhookSettings:
name: "Navn"
_moderationLogTypes:
suspend: "Suspender"

View File

@ -1402,3 +1402,6 @@ _webhookSettings:
renote: "Po udostępnieniu wpisu"
reaction: "Po otrzymaniu reakcji"
mention: "Po zostaniu wspomnianym"
_moderationLogTypes:
suspend: "Zawieś"
resetPassword: "Zresetuj hasło"

View File

@ -1497,3 +1497,6 @@ _webhookSettings:
follow: "Quando seguindo um usuário"
followed: "Quando sendo seguido"
renote: "Quando repostado"
_moderationLogTypes:
suspend: "Suspender"
resetPassword: "Redefinir senha"

View File

@ -704,3 +704,6 @@ _deck:
mentions: "Mențiuni"
_webhookSettings:
name: "Nume"
_moderationLogTypes:
suspend: "Suspendă"
resetPassword: "Resetează parola"

View File

@ -1951,3 +1951,6 @@ _webhookSettings:
createWebhook: "Создать вебхук"
name: "Название"
active: "Вкл."
_moderationLogTypes:
suspend: "Заморозить"
resetPassword: "Сброс пароля:"

View File

@ -1451,3 +1451,6 @@ _deck:
_webhookSettings:
name: "Názov"
active: "Zapnuté"
_moderationLogTypes:
suspend: "Zmraziť"
resetPassword: "Resetovať heslo"

View File

@ -573,3 +573,6 @@ _deck:
_webhookSettings:
name: "Namn"
active: "Aktiverad"
_moderationLogTypes:
suspend: "Suspendera"
resetPassword: "Återställ Lösenord"

View File

@ -2065,3 +2065,6 @@ _webhookSettings:
renote: "รีโน้ตแล้วเมื่อ"
reaction: "เมื่อได้รับรีแอคชั่น"
mention: "เมื่อกำลังถูกกล่าวถึง"
_moderationLogTypes:
suspend: "ถูกระงับ"
resetPassword: "รีเซ็ตรหัสผ่าน"

View File

@ -448,3 +448,6 @@ _deck:
tl: "Zaman çizelgesi"
list: "Listeler"
mentions: "Bahsetmeler"
_moderationLogTypes:
suspend: "askıya al"
resetPassword: "Şifre sıfırlama"

View File

@ -1620,3 +1620,6 @@ _deck:
_webhookSettings:
name: "Ім'я"
active: "Увімкнено"
_moderationLogTypes:
suspend: "Призупинити"
resetPassword: "Скинути пароль"

View File

@ -1084,3 +1084,6 @@ _webhookSettings:
_events:
renote: "Qayta qayd qilinganda"
mention: "Eslanganda"
_moderationLogTypes:
suspend: "To'xtatish"
resetPassword: "Parolni tiklash"

View File

@ -1860,3 +1860,6 @@ _webhookSettings:
_events:
reaction: "Khi nhận được sự kiện"
mention: "Khi có người nhắc tới bạn"
_moderationLogTypes:
suspend: "Vô hiệu hóa"
resetPassword: "Đặt lại mật khẩu"

View File

@ -418,6 +418,7 @@ moderator: "监察员"
moderation: "管理"
moderationNote: "管理笔记"
addModerationNote: "添加管理笔记"
moderationLogs: "管理日志"
nUsersMentioned: "{n} 被提到"
securityKeyAndPasskey: "安全密钥或 Passkey"
securityKey: "安全密钥"
@ -1152,6 +1153,8 @@ _serverSettings:
appIconStyleRecommendation: "因为有可能会被裁切为圆形或者圆角矩形,建议使用边缘带有留白背景的图标。"
appIconResolutionMustBe: "分辨率必须为 {resolution}。"
manifestJsonOverride: "覆盖 mainfest.json"
shortName: "简称"
shortNameDescription: "如果服务器的正式名称很长,可以用简称或者別名来替代。"
_accountMigration:
moveFrom: "从别的账号迁移到此账户"
moveFromSub: "为另一个账户建立别名"
@ -2027,6 +2030,7 @@ _notification:
notificationWillBeDisplayedLikeThis: "通知将会这样表示"
_types:
all: "全部"
note: "用户的新帖子"
follow: "关注中"
mention: "提及"
reply: "回复"
@ -2096,3 +2100,17 @@ _webhookSettings:
renote: "被转发时"
reaction: "被回应时"
mention: "被提及时"
_moderationLogTypes:
assignRole: "分配角色"
unassignRole: "取消分配角色"
updateRole: "更新角色"
suspend: "冻结"
unsuspend: "解除冻结"
addCustomEmoji: "添加自定义表情符号"
updateServerSettings: "更新服务器设置"
updateUserNote: "更新管理笔记"
deleteDriveFile: "删除文件"
deleteNote: "删除帖子"
createGlobalAnnouncement: "创建全体通知"
createUserAnnouncement: "创建用户通知"
resetPassword: "重置密码"

View File

@ -418,7 +418,8 @@ moderator: "審查員"
moderation: "審查"
moderationNote: "管理筆記"
addModerationNote: "新增管理筆記"
nUsersMentioned: "被提及到 {n} 次"
moderationLogs: "管理日誌"
nUsersMentioned: "被 {n} 個人提及"
securityKeyAndPasskey: "安全金鑰、Passkey"
securityKey: "安全金鑰"
lastUsed: "上次使用"
@ -2099,3 +2100,19 @@ _webhookSettings:
renote: "當被轉發時"
reaction: "當獲得反應時"
mention: "當被提到時"
_moderationLogTypes:
assignRole: "指派角色"
unassignRole: "撤銷角色"
updateRole: "更新角色設定"
suspend: "凍結"
unsuspend: "解除凍結"
addCustomEmoji: "新增自訂表情符號"
updateServerSettings: "更新伺服器設定"
updateUserNote: "更新管理筆記"
deleteDriveFile: "刪除檔案"
deleteNote: "刪除貼文"
createGlobalAnnouncement: "建立全網通知"
createUserAnnouncement: "建立使用者通知"
resetPassword: "重設密碼"
suspendRemoteInstance: "封鎖遠端伺服器"
unsuspendRemoteInstance: "解除封鎖遠端伺服器"

View File

@ -1,6 +1,6 @@
{
"name": "misskey",
"version": "2023.9.0-rc.2-prismisskey.1",
"version": "2023.9.0-rc.3-prismisskey.1",
"codename": "nasubi",
"repository": {
"type": "git",

View File

@ -189,9 +189,9 @@
"@types/jsrsasign": "10.5.9",
"@types/mime-types": "2.1.1",
"@types/ms": "0.7.31",
"@types/node": "20.6.3",
"@types/node": "20.6.4",
"@types/node-fetch": "3.0.3",
"@types/nodemailer": "6.4.10",
"@types/nodemailer": "6.4.11",
"@types/oauth": "0.9.2",
"@types/oauth2orize": "1.11.1",
"@types/oauth2orize-pkce": "0.1.0",

View File

@ -60,7 +60,7 @@ export class AnnouncementService {
}
@bindThis
public async create(values: Partial<MiAnnouncement>, moderator: MiUser): Promise<{ raw: MiAnnouncement; packed: Packed<'Announcement'> }> {
public async create(values: Partial<MiAnnouncement>, moderator?: MiUser): Promise<{ raw: MiAnnouncement; packed: Packed<'Announcement'> }> {
const announcement = await this.announcementsRepository.insert({
id: this.idService.genId(),
createdAt: new Date(),
@ -82,21 +82,25 @@ export class AnnouncementService {
announcement: packed,
});
if (moderator) {
this.moderationLogService.log(moderator, 'createUserAnnouncement', {
announcementId: announcement.id,
announcement: announcement,
userId: values.userId,
});
}
} else {
this.globalEventService.publishBroadcastStream('announcementCreated', {
announcement: packed,
});
if (moderator) {
this.moderationLogService.log(moderator, 'createGlobalAnnouncement', {
announcementId: announcement.id,
announcement: announcement,
});
}
}
return {
raw: announcement,
@ -104,6 +108,59 @@ export class AnnouncementService {
};
}
@bindThis
public async update(announcement: MiAnnouncement, values: Partial<MiAnnouncement>, moderator?: MiUser): Promise<void> {
await this.announcementsRepository.update(announcement.id, {
updatedAt: new Date(),
title: values.title,
text: values.text,
/* eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- 空の文字列の場合、nullを渡すようにするため */
imageUrl: values.imageUrl || null,
display: values.display,
icon: values.icon,
forExistingUsers: values.forExistingUsers,
needConfirmationToRead: values.needConfirmationToRead,
isActive: values.isActive,
});
const after = await this.announcementsRepository.findOneByOrFail({ id: announcement.id });
if (moderator) {
if (announcement.userId) {
this.moderationLogService.log(moderator, 'updateUserAnnouncement', {
announcementId: announcement.id,
before: announcement,
after: after,
});
} else {
this.moderationLogService.log(moderator, 'updateGlobalAnnouncement', {
announcementId: announcement.id,
before: announcement,
after: after,
});
}
}
}
@bindThis
public async delete(announcement: MiAnnouncement, moderator?: MiUser): Promise<void> {
await this.announcementsRepository.delete(announcement.id);
if (moderator) {
if (announcement.userId) {
this.moderationLogService.log(moderator, 'deleteUserAnnouncement', {
announcementId: announcement.id,
announcement: announcement,
});
} else {
this.moderationLogService.log(moderator, 'deleteGlobalAnnouncement', {
announcementId: announcement.id,
announcement: announcement,
});
}
}
}
@bindThis
public async read(user: MiUser, announcementId: MiAnnouncement['id']): Promise<void> {
try {

View File

@ -12,12 +12,13 @@ import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import type { MiDriveFile } from '@/models/DriveFile.js';
import type { MiEmoji } from '@/models/Emoji.js';
import type { EmojisRepository, MiRole } from '@/models/_.js';
import type { EmojisRepository, MiRole, MiUser } from '@/models/_.js';
import { bindThis } from '@/decorators.js';
import { MemoryKVCache, RedisSingleCache } from '@/misc/cache.js';
import { UtilityService } from '@/core/UtilityService.js';
import { query } from '@/misc/prelude/url.js';
import type { Serialized } from '@/server/api/stream/types.js';
import { ModerationLogService } from '@/core/ModerationLogService.js';
const parseEmojiStrRegexp = /^(\w+)(?:@([\w.-]+))?$/;
@ -36,6 +37,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
private utilityService: UtilityService,
private idService: IdService,
private emojiEntityService: EmojiEntityService,
private moderationLogService: ModerationLogService,
private globalEventService: GlobalEventService,
) {
this.cache = new MemoryKVCache<MiEmoji | null>(1000 * 60 * 60 * 12);
@ -66,7 +68,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
isSensitive: boolean;
localOnly: boolean;
roleIdsThatCanBeUsedThisEmojiAsReaction: MiRole['id'][];
}): Promise<MiEmoji> {
}, moderator?: MiUser): Promise<MiEmoji> {
const emoji = await this.emojisRepository.insert({
id: this.idService.genId(),
updatedAt: new Date(),
@ -89,6 +91,13 @@ export class CustomEmojiService implements OnApplicationShutdown {
this.globalEventService.publishBroadcastStream('emojiAdded', {
emoji: await this.emojiEntityService.packDetailed(emoji.id),
});
if (moderator) {
this.moderationLogService.log(moderator, 'addCustomEmoji', {
emojiId: emoji.id,
emoji: emoji,
});
}
}
return emoji;
@ -104,7 +113,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
isSensitive?: boolean;
localOnly?: boolean;
roleIdsThatCanBeUsedThisEmojiAsReaction?: MiRole['id'][];
}): Promise<void> {
}, moderator?: MiUser): Promise<void> {
const emoji = await this.emojisRepository.findOneByOrFail({ id: id });
const sameNameEmoji = await this.emojisRepository.findOneBy({ name: data.name, host: IsNull() });
if (sameNameEmoji != null && sameNameEmoji.id !== id) throw new Error('name already exists');
@ -140,6 +149,14 @@ export class CustomEmojiService implements OnApplicationShutdown {
emoji: updated,
});
}
if (moderator) {
this.moderationLogService.log(moderator, 'updateCustomEmoji', {
emojiId: emoji.id,
before: emoji,
after: updated,
});
}
}
@bindThis
@ -231,7 +248,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
}
@bindThis
public async delete(id: MiEmoji['id']) {
public async delete(id: MiEmoji['id'], moderator?: MiUser) {
const emoji = await this.emojisRepository.findOneByOrFail({ id: id });
await this.emojisRepository.delete(emoji.id);
@ -241,16 +258,30 @@ export class CustomEmojiService implements OnApplicationShutdown {
this.globalEventService.publishBroadcastStream('emojiDeleted', {
emojis: [await this.emojiEntityService.packDetailed(emoji)],
});
if (moderator) {
this.moderationLogService.log(moderator, 'deleteCustomEmoji', {
emojiId: emoji.id,
emoji: emoji,
});
}
}
@bindThis
public async deleteBulk(ids: MiEmoji['id'][]) {
public async deleteBulk(ids: MiEmoji['id'][], moderator?: MiUser) {
const emojis = await this.emojisRepository.findBy({
id: In(ids),
});
for (const emoji of emojis) {
await this.emojisRepository.delete(emoji.id);
if (moderator) {
this.moderationLogService.log(moderator, 'deleteCustomEmoji', {
emojiId: emoji.id,
emoji: emoji,
});
}
}
this.localEmojisCache.refresh();

View File

@ -493,6 +493,19 @@ export class RoleService implements OnApplicationShutdown {
}
}
@bindThis
public async delete(role: MiRole, moderator?: MiUser): Promise<void> {
await this.rolesRepository.delete({ id: role.id });
this.globalEventService.publishInternalEvent('roleDeleted', role);
if (moderator) {
this.moderationLogService.log(moderator, 'deleteRole', {
roleId: role.id,
role: role,
});
}
}
@bindThis
public dispose(): void {
this.redisForSub.off('message', this.onMessage);

View File

@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { AnnouncementsRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import { AnnouncementService } from '@/core/AnnouncementService.js';
import { ApiError } from '../../../error.js';
export const meta = {
@ -37,13 +38,15 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
constructor(
@Inject(DI.announcementsRepository)
private announcementsRepository: AnnouncementsRepository,
private announcementService: AnnouncementService,
) {
super(meta, paramDef, async (ps, me) => {
const announcement = await this.announcementsRepository.findOneBy({ id: ps.id });
if (announcement == null) throw new ApiError(meta.errors.noSuchAnnouncement);
await this.announcementsRepository.delete(announcement.id);
await this.announcementService.delete(announcement, me);
});
}
}

View File

@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { AnnouncementsRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import { AnnouncementService } from '@/core/AnnouncementService.js';
import { ApiError } from '../../../error.js';
export const meta = {
@ -45,13 +46,15 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
constructor(
@Inject(DI.announcementsRepository)
private announcementsRepository: AnnouncementsRepository,
private announcementService: AnnouncementService,
) {
super(meta, paramDef, async (ps, me) => {
const announcement = await this.announcementsRepository.findOneBy({ id: ps.id });
if (announcement == null) throw new ApiError(meta.errors.noSuchAnnouncement);
await this.announcementsRepository.update(announcement.id, {
await this.announcementService.update(announcement, {
updatedAt: new Date(),
title: ps.title,
text: ps.text,
@ -62,7 +65,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
forExistingUsers: ps.forExistingUsers,
needConfirmationToRead: ps.needConfirmationToRead,
isActive: ps.isActive,
});
}, me);
});
}
}

View File

@ -8,7 +8,6 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
import type { DriveFilesRepository, EmojisRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import { CustomEmojiService } from '@/core/CustomEmojiService.js';
import { ModerationLogService } from '@/core/ModerationLogService.js';
import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js';
import { ApiError } from '../../../error.js';
@ -67,7 +66,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private customEmojiService: CustomEmojiService,
private emojiEntityService: EmojiEntityService,
private moderationLogService: ModerationLogService,
) {
super(meta, paramDef, async (ps, me) => {
const driveFile = await this.driveFilesRepository.findOneBy({ id: ps.fileId });
@ -97,11 +95,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
isSensitive: ps.isSensitive ?? false,
localOnly: ps.localOnly ?? false,
roleIdsThatCanBeUsedThisEmojiAsReaction: ps.roleIdsThatCanBeUsedThisEmojiAsReaction ?? [],
});
this.moderationLogService.log(me, 'addCustomEmoji', {
emojiId: emoji.id,
});
}, me);
return this.emojiEntityService.packDetailed(emoji);
});

View File

@ -30,7 +30,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private customEmojiService: CustomEmojiService,
) {
super(meta, paramDef, async (ps, me) => {
await this.customEmojiService.deleteBulk(ps.ids);
await this.customEmojiService.deleteBulk(ps.ids, me);
});
}
}

View File

@ -36,7 +36,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private customEmojiService: CustomEmojiService,
) {
super(meta, paramDef, async (ps, me) => {
await this.customEmojiService.delete(ps.id);
await this.customEmojiService.delete(ps.id, me);
});
}
}

View File

@ -88,7 +88,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
isSensitive: ps.isSensitive,
localOnly: ps.localOnly,
roleIdsThatCanBeUsedThisEmojiAsReaction: ps.roleIdsThatCanBeUsedThisEmojiAsReaction,
});
}, me);
});
}
}

View File

@ -6,9 +6,9 @@
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { RolesRepository } from '@/models/_.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { DI } from '@/di-symbols.js';
import { ApiError } from '@/server/api/error.js';
import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin', 'role'],
@ -41,17 +41,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.rolesRepository)
private rolesRepository: RolesRepository,
private globalEventService: GlobalEventService,
private roleService: RoleService,
) {
super(meta, paramDef, async (ps) => {
super(meta, paramDef, async (ps, me) => {
const role = await this.rolesRepository.findOneBy({ id: ps.roleId });
if (role == null) {
throw new ApiError(meta.errors.noSuchRole);
}
await this.rolesRepository.delete({
id: ps.roleId,
});
this.globalEventService.publishInternalEvent('roleDeleted', role);
await this.roleService.delete(role, me);
});
}
}

View File

@ -33,6 +33,8 @@ export const moderationLogTypes = [
'unsuspend',
'updateUserNote',
'addCustomEmoji',
'updateCustomEmoji',
'deleteCustomEmoji',
'assignRole',
'unassignRole',
'updateRole',
@ -43,6 +45,10 @@ export const moderationLogTypes = [
'deleteNote',
'createGlobalAnnouncement',
'createUserAnnouncement',
'updateGlobalAnnouncement',
'updateUserAnnouncement',
'deleteGlobalAnnouncement',
'deleteUserAnnouncement',
'resetPassword',
'suspendRemoteInstance',
'unsuspendRemoteInstance',
@ -66,6 +72,16 @@ export type ModerationLogPayloads = {
};
addCustomEmoji: {
emojiId: string;
emoji: any;
};
updateCustomEmoji: {
emojiId: string;
before: any;
after: any;
};
deleteCustomEmoji: {
emojiId: string;
emoji: any;
};
assignRole: {
userId: string;
@ -85,7 +101,7 @@ export type ModerationLogPayloads = {
};
deleteRole: {
roleId: string;
roleName: string;
role: any;
};
clearQueue: Record<string, never>;
promoteQueue: Record<string, never>;
@ -107,6 +123,24 @@ export type ModerationLogPayloads = {
announcement: any;
userId: string;
};
updateGlobalAnnouncement: {
announcementId: string;
before: any;
after: any;
};
updateUserAnnouncement: {
announcementId: string;
before: any;
after: any;
};
deleteGlobalAnnouncement: {
announcementId: string;
announcement: any;
};
deleteUserAnnouncement: {
announcementId: string;
announcement: any;
};
resetPassword: {
targetId: string;
};

View File

@ -97,10 +97,10 @@
"@storybook/vue3-vite": "7.4.4",
"@testing-library/vue": "7.0.0",
"@types/escape-regexp": "0.0.1",
"@types/estree": "1.0.1",
"@types/estree": "1.0.2",
"@types/matter-js": "0.19.0",
"@types/micromatch": "4.0.2",
"@types/node": "20.6.3",
"@types/node": "20.6.4",
"@types/punycode": "2.1.0",
"@types/sanitize-html": "2.9.0",
"@types/throttle-debounce": "5.0.0",

View File

@ -145,9 +145,11 @@ SPDX-License-Identifier: AGPL-3.0-only
<div v-else-if="tab === 'renotes'" :class="$style.tab_renotes">
<MkPagination :pagination="renotesPagination" :disableAutoLoad="true">
<template #default="{ items }">
<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(270px, 1fr)); grid-gap: 12px;">
<MkA v-for="item in items" :key="item.id" :to="userPage(item.user)">
<MkUserCardMini :user="item.user" :withChart="false"/>
</MkA>
</div>
</template>
</MkPagination>
</div>

View File

@ -48,7 +48,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div :class="$style.tail">
<header :class="$style.header">
<span v-if="notification.type === 'pollEnded'">{{ i18n.ts._notification.pollEnded }}</span>
<span v-else-if="notification.type === 'note'">{{ i18n.ts._notification.newNote }}: {{ notification.note.user.name ?? notification.note.user.username }}</span>
<span v-else-if="notification.type === 'note'">{{ i18n.ts._notification.newNote }}: <MkUserName :user="notification.note.user"/></span>
<span v-else-if="notification.type === 'achievementEarned'">{{ i18n.ts._notification.achievementEarned }}</span>
<span v-else-if="notification.type === 'test'">{{ i18n.ts._notification.testNotification }}</span>
<MkA v-else-if="notification.user" v-user-preview="notification.user.id" :class="$style.headerName" :to="userPage(notification.user)"><MkUserName :user="notification.user"/></MkA>

View File

@ -32,7 +32,9 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkButton inline @click="disableAll">{{ i18n.ts.disableAll }}</MkButton>
<MkButton inline @click="enableAll">{{ i18n.ts.enableAll }}</MkButton>
</div>
<MkSwitch v-for="kind in (initialPermissions || kinds)" :key="kind" v-model="permissions[kind]">{{ i18n.t(`_permissions.${kind}`) }}</MkSwitch>
<div class="_gaps_s">
<MkSwitch v-for="kind in (initialPermissions || Misskey.permissions)" :key="kind" v-model="permissions[kind]">{{ i18n.t(`_permissions.${kind}`) }}</MkSwitch>
</div>
</div>
</MkSpacer>
</MkModalWindow>

View File

@ -2538,6 +2538,12 @@ type ModerationLog = {
} | {
type: 'addCustomEmoji';
info: ModerationLogPayloads['addCustomEmoji'];
} | {
type: 'updateCustomEmoji';
info: ModerationLogPayloads['updateCustomEmoji'];
} | {
type: 'deleteCustomEmoji';
info: ModerationLogPayloads['deleteCustomEmoji'];
} | {
type: 'assignRole';
info: ModerationLogPayloads['assignRole'];
@ -2556,6 +2562,30 @@ type ModerationLog = {
} | {
type: 'promoteQueue';
info: ModerationLogPayloads['promoteQueue'];
} | {
type: 'deleteDriveFile';
info: ModerationLogPayloads['deleteDriveFile'];
} | {
type: 'deleteNote';
info: ModerationLogPayloads['deleteNote'];
} | {
type: 'createGlobalAnnouncement';
info: ModerationLogPayloads['createGlobalAnnouncement'];
} | {
type: 'createUserAnnouncement';
info: ModerationLogPayloads['createUserAnnouncement'];
} | {
type: 'updateGlobalAnnouncement';
info: ModerationLogPayloads['updateGlobalAnnouncement'];
} | {
type: 'updateUserAnnouncement';
info: ModerationLogPayloads['updateUserAnnouncement'];
} | {
type: 'deleteGlobalAnnouncement';
info: ModerationLogPayloads['deleteGlobalAnnouncement'];
} | {
type: 'deleteUserAnnouncement';
info: ModerationLogPayloads['deleteUserAnnouncement'];
} | {
type: 'resetPassword';
info: ModerationLogPayloads['resetPassword'];
@ -2568,7 +2598,7 @@ type ModerationLog = {
});
// @public (undocumented)
export const moderationLogTypes: readonly ["updateServerSettings", "suspend", "unsuspend", "updateUserNote", "addCustomEmoji", "assignRole", "unassignRole", "updateRole", "deleteRole", "clearQueue", "promoteQueue", "deleteDriveFile", "deleteNote", "createGlobalAnnouncement", "createUserAnnouncement", "resetPassword", "suspendRemoteInstance", "unsuspendRemoteInstance"];
export const moderationLogTypes: readonly ["updateServerSettings", "suspend", "unsuspend", "updateUserNote", "addCustomEmoji", "updateCustomEmoji", "deleteCustomEmoji", "assignRole", "unassignRole", "updateRole", "deleteRole", "clearQueue", "promoteQueue", "deleteDriveFile", "deleteNote", "createGlobalAnnouncement", "createUserAnnouncement", "updateGlobalAnnouncement", "updateUserAnnouncement", "deleteGlobalAnnouncement", "deleteUserAnnouncement", "resetPassword", "suspendRemoteInstance", "unsuspendRemoteInstance"];
// @public (undocumented)
export const mutedNoteReasons: readonly ["word", "manual", "spam", "other"];

View File

@ -23,7 +23,7 @@
"@microsoft/api-extractor": "7.37.0",
"@swc/jest": "0.2.29",
"@types/jest": "29.5.5",
"@types/node": "20.6.3",
"@types/node": "20.6.4",
"@typescript-eslint/eslint-plugin": "6.7.2",
"@typescript-eslint/parser": "6.7.2",
"eslint": "8.50.0",

View File

@ -51,6 +51,8 @@ export const moderationLogTypes = [
'unsuspend',
'updateUserNote',
'addCustomEmoji',
'updateCustomEmoji',
'deleteCustomEmoji',
'assignRole',
'unassignRole',
'updateRole',
@ -61,6 +63,10 @@ export const moderationLogTypes = [
'deleteNote',
'createGlobalAnnouncement',
'createUserAnnouncement',
'updateGlobalAnnouncement',
'updateUserAnnouncement',
'deleteGlobalAnnouncement',
'deleteUserAnnouncement',
'resetPassword',
'suspendRemoteInstance',
'unsuspendRemoteInstance',
@ -84,6 +90,16 @@ export type ModerationLogPayloads = {
};
addCustomEmoji: {
emojiId: string;
emoji: any;
};
updateCustomEmoji: {
emojiId: string;
before: any;
after: any;
};
deleteCustomEmoji: {
emojiId: string;
emoji: any;
};
assignRole: {
userId: string;
@ -103,7 +119,7 @@ export type ModerationLogPayloads = {
};
deleteRole: {
roleId: string;
roleName: string;
role: any;
};
clearQueue: Record<string, never>;
promoteQueue: Record<string, never>;
@ -125,6 +141,24 @@ export type ModerationLogPayloads = {
announcement: any;
userId: string;
};
updateGlobalAnnouncement: {
announcementId: string;
before: any;
after: any;
};
updateUserAnnouncement: {
announcementId: string;
before: any;
after: any;
};
deleteGlobalAnnouncement: {
announcementId: string;
announcement: any;
};
deleteUserAnnouncement: {
announcementId: string;
announcement: any;
};
resetPassword: {
targetId: string;
};

View File

@ -589,6 +589,12 @@ export type ModerationLog = {
} | {
type: 'addCustomEmoji';
info: ModerationLogPayloads['addCustomEmoji'];
} | {
type: 'updateCustomEmoji';
info: ModerationLogPayloads['updateCustomEmoji'];
} | {
type: 'deleteCustomEmoji';
info: ModerationLogPayloads['deleteCustomEmoji'];
} | {
type: 'assignRole';
info: ModerationLogPayloads['assignRole'];
@ -607,6 +613,30 @@ export type ModerationLog = {
} | {
type: 'promoteQueue';
info: ModerationLogPayloads['promoteQueue'];
} | {
type: 'deleteDriveFile';
info: ModerationLogPayloads['deleteDriveFile'];
} | {
type: 'deleteNote';
info: ModerationLogPayloads['deleteNote'];
} | {
type: 'createGlobalAnnouncement';
info: ModerationLogPayloads['createGlobalAnnouncement'];
} | {
type: 'createUserAnnouncement';
info: ModerationLogPayloads['createUserAnnouncement'];
} | {
type: 'updateGlobalAnnouncement';
info: ModerationLogPayloads['updateGlobalAnnouncement'];
} | {
type: 'updateUserAnnouncement';
info: ModerationLogPayloads['updateUserAnnouncement'];
} | {
type: 'deleteGlobalAnnouncement';
info: ModerationLogPayloads['deleteGlobalAnnouncement'];
} | {
type: 'deleteUserAnnouncement';
info: ModerationLogPayloads['deleteUserAnnouncement'];
} | {
type: 'resetPassword';
info: ModerationLogPayloads['resetPassword'];

View File

@ -539,14 +539,14 @@ importers:
specifier: 0.7.31
version: 0.7.31
'@types/node':
specifier: 20.6.3
version: 20.6.3
specifier: 20.6.4
version: 20.6.4
'@types/node-fetch':
specifier: 3.0.3
version: 3.0.3
'@types/nodemailer':
specifier: 6.4.10
version: 6.4.10
specifier: 6.4.11
version: 6.4.11
'@types/oauth':
specifier: 0.9.2
version: 0.9.2
@ -630,7 +630,7 @@ importers:
version: 8.0.1
jest:
specifier: 29.7.0
version: 29.7.0(@types/node@20.6.3)
version: 29.7.0(@types/node@20.6.4)
jest-mock:
specifier: 29.7.0
version: 29.7.0
@ -808,7 +808,7 @@ importers:
version: 1.8.1
vite:
specifier: 4.4.9
version: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
version: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
vue:
specifier: 3.3.4
version: 3.3.4
@ -880,8 +880,8 @@ importers:
specifier: 0.0.1
version: 0.0.1
'@types/estree':
specifier: 1.0.1
version: 1.0.1
specifier: 1.0.2
version: 1.0.2
'@types/matter-js':
specifier: 0.19.0
version: 0.19.0
@ -889,8 +889,8 @@ importers:
specifier: 4.0.2
version: 4.0.2
'@types/node':
specifier: 20.6.3
version: 20.6.3
specifier: 20.6.4
version: 20.6.4
'@types/punycode':
specifier: 2.1.0
version: 2.1.0
@ -977,7 +977,7 @@ importers:
version: 7.4.4
storybook-addon-misskey-theme:
specifier: github:misskey-dev/storybook-addon-misskey-theme
version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.4)(@storybook/components@7.4.3)(@storybook/core-events@7.4.4)(@storybook/manager-api@7.4.4)(@storybook/preview-api@7.4.4)(@storybook/theming@7.4.4)(@storybook/types@7.4.4)(react-dom@18.2.0)(react@18.2.0)
version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.4)(@storybook/components@7.4.4)(@storybook/core-events@7.4.4)(@storybook/manager-api@7.4.4)(@storybook/preview-api@7.4.4)(@storybook/theming@7.4.4)(@storybook/types@7.4.4)(react-dom@18.2.0)(react@18.2.0)
summaly:
specifier: github:misskey-dev/summaly
version: github.com/misskey-dev/summaly/d2d8db49943ccb201c1b1b283e9d0a630519fac7
@ -1014,7 +1014,7 @@ importers:
devDependencies:
'@microsoft/api-extractor':
specifier: 7.37.0
version: 7.37.0(@types/node@20.6.3)
version: 7.37.0(@types/node@20.6.4)
'@swc/jest':
specifier: 0.2.29
version: 0.2.29(@swc/core@1.3.87)
@ -1022,8 +1022,8 @@ importers:
specifier: 29.5.5
version: 29.5.5
'@types/node':
specifier: 20.6.3
version: 20.6.3
specifier: 20.6.4
version: 20.6.4
'@typescript-eslint/eslint-plugin':
specifier: 6.7.2
version: 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2)
@ -1035,7 +1035,7 @@ importers:
version: 8.50.0
jest:
specifier: 29.7.0
version: 29.7.0(@types/node@20.6.3)
version: 29.7.0(@types/node@20.6.4)
jest-fetch-mock:
specifier: 3.0.3
version: 3.0.3
@ -4015,7 +4015,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
chalk: 4.1.2
jest-message-util: 29.7.0
jest-util: 29.7.0
@ -4036,14 +4036,14 @@ packages:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
ansi-escapes: 4.3.2
chalk: 4.1.2
ci-info: 3.7.1
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.7.0
jest-config: 29.7.0(@types/node@20.6.3)
jest-config: 29.7.0(@types/node@20.6.4)
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@ -4078,7 +4078,7 @@ packages:
dependencies:
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
jest-mock: 29.7.0
dev: true
@ -4105,7 +4105,7 @@ packages:
dependencies:
'@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0
'@types/node': 20.6.3
'@types/node': 20.6.4
jest-message-util: 29.7.0
jest-mock: 29.7.0
jest-util: 29.7.0
@ -4138,7 +4138,7 @@ packages:
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.18
'@types/node': 20.6.3
'@types/node': 20.6.4
chalk: 4.1.2
collect-v8-coverage: 1.0.1
exit: 0.1.2
@ -4232,7 +4232,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
'@types/node': 20.6.3
'@types/node': 20.6.4
'@types/yargs': 16.0.5
chalk: 4.1.2
dev: true
@ -4244,7 +4244,7 @@ packages:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
'@types/node': 20.6.3
'@types/node': 20.6.4
'@types/yargs': 17.0.19
chalk: 4.1.2
dev: true
@ -4263,7 +4263,7 @@ packages:
magic-string: 0.27.0
react-docgen-typescript: 2.2.2(typescript@5.2.2)
typescript: 5.2.2
vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
dev: true
/@jridgewell/gen-mapping@0.3.2:
@ -4348,24 +4348,24 @@ packages:
react: 18.2.0
dev: true
/@microsoft/api-extractor-model@7.28.0(@types/node@20.6.3):
/@microsoft/api-extractor-model@7.28.0(@types/node@20.6.4):
resolution: {integrity: sha512-QIMtUVm1tqiKG+M6ciFgRShcDoovyltaeg+CbyOnyr7SMrp6gg0ojK5/nToMqR9kAvsTS4QVgW4Twl50EoAjcw==}
dependencies:
'@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2
'@rushstack/node-core-library': 3.60.0(@types/node@20.6.3)
'@rushstack/node-core-library': 3.60.0(@types/node@20.6.4)
transitivePeerDependencies:
- '@types/node'
dev: true
/@microsoft/api-extractor@7.37.0(@types/node@20.6.3):
/@microsoft/api-extractor@7.37.0(@types/node@20.6.4):
resolution: {integrity: sha512-df/wffWpDhYRw7kzdxeHGsCpim+dC8aFiZlsJb4uFvVPWhBZpDzOhQxSUTFx3Df1ORY+/JjuPR3fDE9Hq+PHzQ==}
hasBin: true
dependencies:
'@microsoft/api-extractor-model': 7.28.0(@types/node@20.6.3)
'@microsoft/api-extractor-model': 7.28.0(@types/node@20.6.4)
'@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2
'@rushstack/node-core-library': 3.60.0(@types/node@20.6.3)
'@rushstack/node-core-library': 3.60.0(@types/node@20.6.4)
'@rushstack/rig-package': 0.5.0
'@rushstack/ts-command-line': 4.16.0
colors: 1.2.5
@ -5245,12 +5245,12 @@ packages:
rollup:
optional: true
dependencies:
'@types/estree': 1.0.1
'@types/estree': 1.0.2
estree-walker: 2.0.2
picomatch: 2.3.1
rollup: 3.29.2
/@rushstack/node-core-library@3.60.0(@types/node@20.6.3):
/@rushstack/node-core-library@3.60.0(@types/node@20.6.4):
resolution: {integrity: sha512-PcyrqhILvzU+65wMFybQ2VeGNnU5JzhDq2OvUi3j6jPUxyllM7b2hrRUwCuVaYboewYzIbpzXFzgxe2K7ii1nw==}
peerDependencies:
'@types/node': '*'
@ -5258,7 +5258,7 @@ packages:
'@types/node':
optional: true
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
colors: 1.2.5
fs-extra: 7.0.1
import-lazy: 4.0.0
@ -6277,23 +6277,12 @@ packages:
remark-slug: 6.1.0
rollup: 3.29.2
typescript: 5.2.2
vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
transitivePeerDependencies:
- encoding
- supports-color
dev: true
/@storybook/channels@7.4.3:
resolution: {integrity: sha512-lIoRX3EV0wKPX8ojIrJUtsOv4+Gv8r9pfJpam/NdyYd+rs0AjDK13ieINRfBMnJkfjsWa3vmZtGMBEVvDKwTMw==}
dependencies:
'@storybook/client-logger': 7.4.3
'@storybook/core-events': 7.4.3
'@storybook/global': 5.0.0
qs: 6.11.1
telejson: 7.2.0
tiny-invariant: 1.3.1
dev: true
/@storybook/channels@7.4.4:
resolution: {integrity: sha512-YA2T3hClL95nFBBelm8wMOyWFDzfxKvyHAPQi+8YeYpZcPivwg/P9YnRhTTMbiZNkfoWKq4ZRuc79UP1iNLi3g==}
dependencies:
@ -6357,12 +6346,6 @@ packages:
- utf-8-validate
dev: true
/@storybook/client-logger@7.4.3:
resolution: {integrity: sha512-Nhngo9X4HjN00aRhgIVGWbwkWPe0Fz8PySuxnd8nAxSsz7KpdLFyYo2TbZZ3TX51FG5Fxcb0G5OHuunItP7EWQ==}
dependencies:
'@storybook/global': 5.0.0
dev: true
/@storybook/client-logger@7.4.4:
resolution: {integrity: sha512-rC/GcCy3DLtTI+oOHLBc6rq/c3oGF/mvdeWrhMM+berQplHJrOCI2pcldjVw8Fc25gLPK0LUlaOp1dfgt2Ri3Q==}
dependencies:
@ -6390,29 +6373,6 @@ packages:
- supports-color
dev: true
/@storybook/components@7.4.3(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-qwRW8wGUuM+H6oKUXXoIDrZECXh/lzowrWXFAzZiocovYEhPtZfl/yvJLWHjOwtka3n7lA7J7EtcjWe8/tueJQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
'@radix-ui/react-select': 1.2.2(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-toolbar': 1.0.4(react-dom@18.2.0)(react@18.2.0)
'@storybook/client-logger': 7.4.3
'@storybook/csf': 0.1.0
'@storybook/global': 5.0.0
'@storybook/theming': 7.4.3(react-dom@18.2.0)(react@18.2.0)
'@storybook/types': 7.4.3
memoizerific: 1.11.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0)
util-deprecate: 1.0.2
transitivePeerDependencies:
- '@types/react'
- '@types/react-dom'
dev: true
/@storybook/components@7.4.4(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-tFOSu3IoAab/0aY2TY66Go0Nba7AB/+ZB9GFet+dxWypIKGLcPjyX2POIumJU4swzK+4IA8GxgDQ2itS6EOISQ==}
peerDependencies:
@ -6474,12 +6434,6 @@ packages:
- supports-color
dev: true
/@storybook/core-events@7.4.3:
resolution: {integrity: sha512-FRfipCijMnVbGxL1ZjOLM836lyd/TGQcUFeVjTQWW/+pIGHELqDHiYeq68hqoGTKl0G0np59CJPWYTUZA4Dl9Q==}
dependencies:
ts-dedent: 2.2.0
dev: true
/@storybook/core-events@7.4.4:
resolution: {integrity: sha512-kOf4I/a1XC9CaGFwJG5WR2KnkwrOkWX68TLh7OlelKxdl/WjxA4zfzaFPC/8zyCSLdGFLPKNqr1w+ezkb+9Irw==}
dependencies:
@ -6712,7 +6666,7 @@ packages:
react: 18.2.0
react-docgen: 6.0.0-alpha.3
react-dom: 18.2.0(react@18.2.0)
vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
transitivePeerDependencies:
- '@preact/preset-vite'
- encoding
@ -6814,20 +6768,6 @@ packages:
ts-dedent: 2.2.0
dev: true
/@storybook/theming@7.4.3(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-u5wLwWmhGcTmkcs6f2wDGv+w8wzwbNJat0WaIIbwdJfX7arH6nO5HkBhNxvl6FUFxX0tovp/e9ULzxVPc356jw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
'@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0)
'@storybook/client-logger': 7.4.3
'@storybook/global': 5.0.0
memoizerific: 1.11.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: true
/@storybook/theming@7.4.4(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-ABIwLRUj2IZKMGxKq+fCCFcY7w52P1a+q8j7qrlELaTe4M74K6rwTgRF0/AFgWeiGRkNuA7z8DjQ73xQLoLqUg==}
peerDependencies:
@ -6842,15 +6782,6 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
/@storybook/types@7.4.3:
resolution: {integrity: sha512-DrHC1hIiw9TqDILLokDnvbUPNxGz5iJaYFEv30uvYE0s9MvgEUPblCChEUjaHOps7zQTznMPf8ULfoXlgqxk2A==}
dependencies:
'@storybook/channels': 7.4.3
'@types/babel__core': 7.20.0
'@types/express': 4.17.17
file-system-cache: 2.3.0
dev: true
/@storybook/types@7.4.4:
resolution: {integrity: sha512-B0VdgGb1XGEb9g3UuEd9xANCIhR3anvA3w0uYSG+7uMOflnEawwZksTSxvvoGM2hx9vC4pNT4Fci9sEC903UkA==}
dependencies:
@ -6875,7 +6806,7 @@ packages:
magic-string: 0.30.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
vue-docgen-api: 4.64.1(vue@3.3.4)
transitivePeerDependencies:
- '@preact/preset-vite'
@ -7407,7 +7338,7 @@ packages:
/@types/accepts@1.3.5:
resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/archiver@5.3.3:
@ -7461,7 +7392,7 @@ packages:
resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==}
dependencies:
'@types/connect': 3.4.35
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/braces@3.0.1:
@ -7473,7 +7404,7 @@ packages:
dependencies:
'@types/http-cache-semantics': 4.0.1
'@types/keyv': 3.1.4
'@types/node': 20.6.3
'@types/node': 20.6.4
'@types/responselike': 1.0.0
dev: false
@ -7506,7 +7437,7 @@ packages:
/@types/connect@3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/content-disposition@0.5.6:
@ -7520,7 +7451,7 @@ packages:
/@types/cross-spawn@6.0.2:
resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/debug@4.1.7:
@ -7560,7 +7491,7 @@ packages:
/@types/eslint@7.29.0:
resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==}
dependencies:
'@types/estree': 1.0.1
'@types/estree': 1.0.2
'@types/json-schema': 7.0.12
dev: true
@ -7568,13 +7499,13 @@ packages:
resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==}
dev: true
/@types/estree@1.0.1:
resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
/@types/estree@1.0.2:
resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==}
/@types/express-serve-static-core@4.17.33:
resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
dev: true
@ -7595,20 +7526,20 @@ packages:
/@types/fluent-ffmpeg@2.1.22:
resolution: {integrity: sha512-ZZPDDrDOb2Ahp5fxZzuw64f0rCcviv+SDuCyJ1PIF/UFn9wNHtb/bY8Dj/2nrbQ7SNsGI7gaO2wJVkkU2HBcMg==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/glob@7.2.0:
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/graceful-fs@4.1.6:
resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/hast@2.3.4:
@ -7623,7 +7554,7 @@ packages:
/@types/http-link-header@1.0.3:
resolution: {integrity: sha512-y8HkoD/vyid+5MrJ3aas0FvU3/BVBGcyG9kgxL0Zn4JwstA8CglFPnrR0RuzOjRCXwqzL5uxWC2IO7Ub0rMU2A==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/istanbul-lib-coverage@2.0.4:
@ -7667,7 +7598,7 @@ packages:
/@types/jsdom@21.1.3:
resolution: {integrity: sha512-1zzqSP+iHJYV4lB3lZhNBa012pubABkj9yG/GuXuf6LZH1cSPIJBqFDrm5JX65HHt6VOnNYdTui/0ySerRbMgA==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
'@types/tough-cookie': 4.0.2
parse5: 7.1.2
dev: true
@ -7691,7 +7622,7 @@ packages:
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: false
/@types/lodash@4.14.191:
@ -7740,7 +7671,7 @@ packages:
/@types/node-fetch@2.6.4:
resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
form-data: 3.0.1
/@types/node-fetch@3.0.3:
@ -7757,13 +7688,13 @@ packages:
resolution: {integrity: sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==}
dev: true
/@types/node@20.6.3:
resolution: {integrity: sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==}
/@types/node@20.6.4:
resolution: {integrity: sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==}
/@types/nodemailer@6.4.10:
resolution: {integrity: sha512-oPW/IdhkU3FyZc1dzeqmS+MBjrjZNiiINnrEOrWALzccJlP5xTlbkNr2YnTnnyj9Eqm5ofjRoASEbrCYpA7BrA==}
/@types/nodemailer@6.4.11:
resolution: {integrity: sha512-Ld2c0frwpGT4VseuoeboCXQ7UJIkK3X7Lx/4YsZEiUHtHsthWAOCYtf6PAiLhMtfwV0cWJRabLBS3+LD8x6Nrw==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/normalize-package-data@2.4.1:
@ -7780,13 +7711,13 @@ packages:
resolution: {integrity: sha512-U3L0c4eQA6lTSZRgW4LYfhKlR084Aw19akmYHrMdYzaqg9mQDfc2b/1iyqm9+1FJDEnVS5ONi5fxdDrB4/7CpQ==}
dependencies:
'@types/express': 4.17.17
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/oauth@0.9.2:
resolution: {integrity: sha512-Nu3/abQ6yR9VlsCdX3aiGsWFkj6OJvJqDvg/36t8Gwf2mFXdBZXPDN3K+2yfeA6Lo2m1Q12F8Qil9TZ48nWhOQ==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/offscreencanvas@2019.3.0:
@ -7802,7 +7733,7 @@ packages:
/@types/pg@8.10.2:
resolution: {integrity: sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
pg-protocol: 1.6.0
pg-types: 4.0.1
dev: true
@ -7826,7 +7757,7 @@ packages:
/@types/qrcode@1.5.2:
resolution: {integrity: sha512-W4KDz75m7rJjFbyCctzCtRzZUj+PrUHV+YjqDp50sSRezTbrtEAIq2iTzC6lISARl3qw+8IlcCyljdcVJE0Wug==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/qs@6.9.7:
@ -7856,7 +7787,7 @@ packages:
/@types/readdir-glob@1.1.1:
resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/rename@1.0.4:
@ -7866,7 +7797,7 @@ packages:
/@types/responselike@1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: false
/@types/sanitize-html@2.9.0:
@ -7892,7 +7823,7 @@ packages:
resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==}
dependencies:
'@types/mime': 3.0.1
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/serviceworker@0.0.67:
@ -7902,7 +7833,7 @@ packages:
/@types/set-cookie-parser@2.4.3:
resolution: {integrity: sha512-7QhnH7bi+6KAhBB+Auejz1uV9DHiopZqu7LfR/5gZZTkejJV5nYeZZpgfFoE0N8aDsXuiYpfKyfyMatCwQhyTQ==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/sharp@0.32.0:
@ -7965,13 +7896,13 @@ packages:
/@types/vary@1.1.0:
resolution: {integrity: sha512-LQWqrIa0dvEOOH37lGksMEXbypRLUFqu6Gx0pmX7zIUisD2I/qaVgEX/vJ/PSVSW0Hk6yz1BNkFpqg6dZm3Wug==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/web-push@3.6.0:
resolution: {integrity: sha512-Kk23yDmYheAcQ0ALS9YE7MY7lqwaIfVQ67zVEFeqbLw+/g8jlYTg9o/zYJOk5YhebWrq2Cr/Lbh4RoYfzrn0ww==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/webgl-ext@0.0.30:
@ -7982,13 +7913,13 @@ packages:
/@types/websocket@1.0.6:
resolution: {integrity: sha512-JXkliwz93B2cMWOI1ukElQBPN88vMg3CruvW4KVSKpflt3NyNCJImnhIuB/f97rG7kakqRJGFiwkA895Kn02Dg==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/ws@8.5.5:
resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/@types/yargs-parser@21.0.0:
@ -8011,7 +7942,7 @@ packages:
resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
requiresBuild: true
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
optional: true
@ -8157,7 +8088,7 @@ packages:
'@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.11)
magic-string: 0.27.0
react-refresh: 0.14.0
vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
transitivePeerDependencies:
- supports-color
dev: true
@ -8169,7 +8100,7 @@ packages:
vite: ^4.0.0
vue: ^3.2.25
dependencies:
vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
vue: 3.3.4
/@vitest/coverage-v8@0.34.5(vitest@0.34.5):
@ -10024,7 +9955,7 @@ packages:
readable-stream: 3.6.0
dev: false
/create-jest@29.7.0(@types/node@20.6.3):
/create-jest@29.7.0(@types/node@20.6.4):
resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
@ -10033,7 +9964,7 @@ packages:
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
jest-config: 29.7.0(@types/node@20.6.3)
jest-config: 29.7.0(@types/node@20.6.4)
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@ -11263,7 +11194,7 @@ packages:
/estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
dependencies:
'@types/estree': 1.0.1
'@types/estree': 1.0.2
dev: false
/esutils@2.0.3:
@ -13245,7 +13176,7 @@ packages:
'@jest/expect': 29.7.0
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
chalk: 4.1.2
co: 4.6.0
dedent: 1.3.0
@ -13266,7 +13197,7 @@ packages:
- supports-color
dev: true
/jest-cli@29.7.0(@types/node@20.6.3):
/jest-cli@29.7.0(@types/node@20.6.4):
resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
@ -13280,10 +13211,10 @@ packages:
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
create-jest: 29.7.0(@types/node@20.6.3)
create-jest: 29.7.0(@types/node@20.6.4)
exit: 0.1.2
import-local: 3.1.0
jest-config: 29.7.0(@types/node@20.6.3)
jest-config: 29.7.0(@types/node@20.6.4)
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.6.2
@ -13294,7 +13225,7 @@ packages:
- ts-node
dev: true
/jest-config@29.7.0(@types/node@20.6.3):
/jest-config@29.7.0(@types/node@20.6.4):
resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
@ -13309,7 +13240,7 @@ packages:
'@babel/core': 7.22.11
'@jest/test-sequencer': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
babel-jest: 29.7.0(@babel/core@7.22.11)
chalk: 4.1.2
ci-info: 3.7.1
@ -13389,7 +13320,7 @@ packages:
'@jest/environment': 29.7.0
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
jest-mock: 29.7.0
jest-util: 29.7.0
dev: true
@ -13419,7 +13350,7 @@ packages:
dependencies:
'@jest/types': 29.6.3
'@types/graceful-fs': 4.1.6
'@types/node': 20.6.3
'@types/node': 20.6.4
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
@ -13480,7 +13411,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
'@types/node': 20.6.3
'@types/node': 20.6.4
dev: true
/jest-mock@29.7.0:
@ -13488,7 +13419,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
jest-util: 29.7.0
dev: true
@ -13543,7 +13474,7 @@ packages:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
chalk: 4.1.2
emittery: 0.13.1
graceful-fs: 4.2.11
@ -13574,7 +13505,7 @@ packages:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
chalk: 4.1.2
cjs-module-lexer: 1.2.2
collect-v8-coverage: 1.0.1
@ -13626,7 +13557,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
chalk: 4.1.2
ci-info: 3.7.1
graceful-fs: 4.2.11
@ -13651,7 +13582,7 @@ packages:
dependencies:
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.6.3
'@types/node': 20.6.4
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
@ -13670,13 +13601,13 @@ packages:
resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
/jest@29.7.0(@types/node@20.6.3):
/jest@29.7.0(@types/node@20.6.4):
resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
@ -13689,7 +13620,7 @@ packages:
'@jest/core': 29.7.0
'@jest/types': 29.6.3
import-local: 3.1.0
jest-cli: 29.7.0(@types/node@20.6.3)
jest-cli: 29.7.0(@types/node@20.6.4)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@ -18998,7 +18929,7 @@ packages:
core-util-is: 1.0.2
extsprintf: 1.3.0
/vite-node@0.34.5(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0):
/vite-node@0.34.5(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0):
resolution: {integrity: sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==}
engines: {node: '>=v14.18.0'}
hasBin: true
@ -19008,7 +18939,7 @@ packages:
mlly: 1.4.0
pathe: 1.1.1
picocolors: 1.0.0
vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -19024,7 +18955,7 @@ packages:
resolution: {integrity: sha512-p4D8CFVhZS412SyQX125qxyzOgIFouwOcvjZWk6bQbNPR1wtaEzFT6jZxAjf1dejlGqa6fqHcuCvQea6EWUkUA==}
dev: true
/vite@4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0):
/vite@4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0):
resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@ -19052,7 +18983,7 @@ packages:
terser:
optional: true
dependencies:
'@types/node': 20.6.3
'@types/node': 20.6.4
esbuild: 0.18.17
postcss: 8.4.30
rollup: 3.29.2
@ -19106,7 +19037,7 @@ packages:
dependencies:
'@types/chai': 4.3.5
'@types/chai-subset': 1.3.3
'@types/node': 20.6.3
'@types/node': 20.6.4
'@vitest/expect': 0.34.5
'@vitest/runner': 0.34.5
'@vitest/snapshot': 0.34.5
@ -19126,8 +19057,8 @@ packages:
strip-literal: 1.0.1
tinybench: 2.5.0
tinypool: 0.7.0
vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite-node: 0.34.5(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0)
vite: 4.4.9(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
vite-node: 0.34.5(@types/node@20.6.4)(sass@1.68.0)(terser@5.20.0)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less
@ -19670,7 +19601,7 @@ packages:
sharp: 0.31.3
dev: false
github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.4)(@storybook/components@7.4.3)(@storybook/core-events@7.4.4)(@storybook/manager-api@7.4.4)(@storybook/preview-api@7.4.4)(@storybook/theming@7.4.4)(@storybook/types@7.4.4)(react-dom@18.2.0)(react@18.2.0):
github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.4.4)(@storybook/components@7.4.4)(@storybook/core-events@7.4.4)(@storybook/manager-api@7.4.4)(@storybook/preview-api@7.4.4)(@storybook/theming@7.4.4)(@storybook/types@7.4.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640}
id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640
name: storybook-addon-misskey-theme
@ -19692,7 +19623,7 @@ packages:
optional: true
dependencies:
'@storybook/blocks': 7.4.4(react-dom@18.2.0)(react@18.2.0)
'@storybook/components': 7.4.3(react-dom@18.2.0)(react@18.2.0)
'@storybook/components': 7.4.4(react-dom@18.2.0)(react@18.2.0)
'@storybook/core-events': 7.4.4
'@storybook/manager-api': 7.4.4(react-dom@18.2.0)(react@18.2.0)
'@storybook/preview-api': 7.4.4