diff --git a/CHANGELOG.md b/CHANGELOG.md index 68db7f41c5..e6c66f0859 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ - Feat: プロフィールでのリンク検証 - Feat: 通知をテストできるようになりました - Feat: PWAのアイコンが設定できるようになりました +- Enhance: アンテナの受信ソースに指定したユーザを除外するものを追加 - Enhance: 二要素認証設定時のセキュリティを強化 - パスワード入力が必要な操作を行う際、二要素認証が有効であれば確認コードの入力も必要になりました - Enhance: manifest.jsonをオーバーライド可能に @@ -91,6 +92,7 @@ - Fix: muteがapiからのuser list timeline取得で機能しない問題を修正 - Fix: ジョブキュー管理画面の認証を回避できる問題を修正 - Fix: 一部のサーバー内部エラーがスタックトレースを返さないように修正 +- Fix: 一部のリモートユーザーをフォローすることができない問題を修正 ## 13.14.2 diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index 18e7f02e69..9a751abc78 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -1679,7 +1679,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "Již jste zaregistrovali dvoufaktorové ověřovací zařízení." registerTOTP: "Registrovat aplikaci autentizátoru" - passwordToTOTP: "Zadejte své heslo" step1: "Nejprve si do zařízení nainstalujte aplikaci pro ověřování (například {a} nebo {b})." step2: "Poté naskenujte QR kód zobrazený na této obrazovce." step2Click: "Kliknutím na tento QR kód můžete zaregistrovat 2FA do bezpečnostního klíče nebo aplikace autentizace telefonu." diff --git a/locales/de-DE.yml b/locales/de-DE.yml index 16f210202b..596a6e5fd8 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -1112,6 +1112,10 @@ renotes: "Renotes" loadReplies: "Antworten anzeigen" loadConversation: "Unterhaltung anzeigen" pinnedList: "Angeheftete Liste" +keepScreenOn: "Bildschirm angeschaltet lassen" +verifiedLink: "Link-Besitz wurde verifiziert" +notifyNotes: "Über neue Notizen benachrichtigen" +unnotifyNotes: "Nicht über neue Notizen benachrichtigen" _announcement: forExistingUsers: "Nur für existierende Nutzer" forExistingUsersDescription: "Ist diese Option aktiviert, wird diese Ankündigung nur Nutzern angezeigt, die zum Zeitpunkt der Ankündigung bereits registriert sind. Ist sie deaktiviert, wird sie auch Nutzern, die sich nach dessen Veröffentlichung registrieren, angezeigt." @@ -1712,7 +1716,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert." registerTOTP: "Authentifizierungs-App registrieren" - passwordToTOTP: "Bitte Passwort eingeben" step1: "Installiere zuerst eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem Gerät." step2: "Dann, scanne den angezeigten QR-Code mit deinem Gerät." step2Click: "Durch Klicken dieses QR-Codes kannst du Verifikation mit deinem Security-Token oder einer App registrieren." @@ -1890,6 +1893,7 @@ _profile: metadataContent: "Inhalt" changeAvatar: "Profilbild ändern" changeBanner: "Banner ändern" + verifiedLinkDescription: "Gibst du hier eine URL ein, die einen Link zu deinem Profile enthält, wird neben diesem Feld ein Icon zur Besitzbestätigung angezeigt." _exportOrImport: allNotes: "Alle Notizen" favoritedNotes: "Als Favorit markierte Notizen" @@ -2008,6 +2012,7 @@ _notification: youReceivedFollowRequest: "Du hast eine Follow-Anfrage erhalten" yourFollowRequestAccepted: "Deine Follow-Anfrage wurde akzeptiert" pollEnded: "Umfrageergebnisse sind verfügbar" + newNote: "Neue Notiz" unreadAntennaNote: "Antenne {name}" emptyPushNotificationMessage: "Push-Benachrichtigungen wurden aktualisiert" achievementEarned: "Errungenschaft freigeschaltet" diff --git a/locales/en-US.yml b/locales/en-US.yml index 2d13e777d0..527c68d839 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1112,6 +1112,10 @@ renotes: "Renotes" loadReplies: "Show replies" loadConversation: "Show conversation" pinnedList: "Pinned list" +keepScreenOn: "Keep screen on" +verifiedLink: "Link ownership has been verified" +notifyNotes: "Notify about new notes" +unnotifyNotes: "Stop notifying about new notes" _announcement: forExistingUsers: "Existing users only" forExistingUsersDescription: "This announcement will only be shown to users existing at the point of publishment if enabled. If disabled, those newly signing up after it has been posted will also see it." @@ -1712,7 +1716,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "You have already registered a 2-factor authentication device." registerTOTP: "Register authenticator app" - passwordToTOTP: "Enter your password" step1: "First, install an authentication app (such as {a} or {b}) on your device." step2: "Then, scan the QR code displayed on this screen." step2Click: "Clicking on this QR code will allow you to register 2FA to your security key or phone authenticator app." @@ -1890,6 +1893,7 @@ _profile: metadataContent: "Content" changeAvatar: "Change avatar" changeBanner: "Change banner" + verifiedLinkDescription: "By entering an URL that contains a link to your profile here, an ownership verification icon can be displayed next to the field." _exportOrImport: allNotes: "All notes" favoritedNotes: "Favorite notes" @@ -2008,6 +2012,7 @@ _notification: youReceivedFollowRequest: "You've received a follow request" yourFollowRequestAccepted: "Your follow request was accepted" pollEnded: "Poll results have become available" + newNote: "New note" unreadAntennaNote: "Antenna {name}" emptyPushNotificationMessage: "Push notifications have been updated" achievementEarned: "Achievement unlocked" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index bd638af9c2..bfa779d78a 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -1705,7 +1705,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "Ya has completado la configuración." registerTOTP: "Registrar aplicación autenticadora" - passwordToTOTP: "Ingresa tu contraseña" step1: "Primero, instale en su dispositivo la aplicación de autenticación {a} o {b} u otra." step2: "Luego, escanee con la aplicación el código QR mostrado en pantalla." step2Click: "Clicking on this QR code will allow you to register 2FA to your security key or phone authenticator app.\nTocar este código QR te permitirá registrar la autenticación 2FA a tu llave de seguridad o aplicación autenticadora." diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 3d9de3ef32..64a59522f2 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -480,6 +480,7 @@ createAccount: "Créer un compte" existingAccount: "Compte existant" regenerate: "Générer à nouveau" fontSize: "Taille de la police" +limitTo: "Limiter à {x}" noFollowRequests: "Vous n’avez aucune demande d’abonnement en attente" openImageInNewTab: "Ouvrir les images dans un nouvel onglet" dashboard: "Tableau de bord" diff --git a/locales/id-ID.yml b/locales/id-ID.yml index c817850fe2..e39b49774d 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -1683,7 +1683,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "Kamu telah mendaftarkan perangkat otentikasi dua faktor." registerTOTP: "Daftarkan aplikasi autentikator" - passwordToTOTP: "Masukkan kata sandimu" step1: "Pertama, pasang aplikasi otentikasi (seperti {a} atau {b}) di perangkat kamu." step2: "Lalu, pindai kode QR yang ada di layar." step2Click: "Mengeklik kode QR ini akan membolehkanmu untuk mendaftarkan 2FA ke security-key atau aplikasi autentikator ponsel." diff --git a/locales/index.d.ts b/locales/index.d.ts index 3009c99185..f6b6daae89 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1917,6 +1917,7 @@ export interface Locale { "homeTimeline": string; "users": string; "userList": string; + "userBlacklist": string; }; "_weekday": { "sunday": string; diff --git a/locales/it-IT.yml b/locales/it-IT.yml index d8455c3d81..9810e6015a 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -134,7 +134,7 @@ renoteMute: "Silenzia i Rinota" renoteUnmute: "Non silenziare i Rinota" block: "Blocca" unblock: "Sblocca" -suspend: "Sospendi" +suspend: "Sospensione" unsuspend: "Revoca la sospensione" blockConfirm: "Vuoi davvero bloccare il profilo?" unblockConfirm: "Vuoi davvero sbloccare il profilo?" @@ -180,7 +180,7 @@ youHaveNoLists: "Non hai ancora creato nessuna lista" followConfirm: "Vuoi seguire {name}?" proxyAccount: "Profilo proxy" proxyAccountDescription: "Un profilo proxy funziona come follower per i profili remoti, sotto certe condizioni. Ad esempio, quando un profilo locale ne inserisce uno remoto in una lista (senza seguirlo), se nessun altro segue quel profilo remoto, le attività non possono essere distribuite. Dunque, il profilo proxy le seguirà per tutti." -host: "Server remoto" +host: "Host" selectUser: "Seleziona profilo" recipient: "Destinatario" annotation: "Annotazione preventiva" @@ -287,7 +287,7 @@ images: "Immagini" image: "Immagini" birthday: "Compleanno" yearsOld: "{age} anni" -registeredDate: "Iscrizione a.." +registeredDate: "Data iscrizione" location: "Posizione" theme: "Tema" themeForLightMode: "Tema da utilizzare per il modo chiaro" @@ -496,7 +496,7 @@ noFollowRequests: "Non hai alcuna richiesta di follow" openImageInNewTab: "Apri le immagini in un nuovo tab" dashboard: "Pannello di controllo" local: "Locale" -remote: "Remoto" +remote: "Remota" total: "Totale" weekOverWeekChanges: "Settimanale" dayOverDayChanges: "Giornaliero" @@ -551,8 +551,8 @@ installedDate: "Data installazione" lastUsedDate: "Data di ultimo uso" state: "Stato" sort: "Ordina per" -ascendingOrder: "Ascendente" -descendingOrder: "Discendente" +ascendingOrder: "Aumenta" +descendingOrder: "Diminuisce" scratchpad: "ScratchPad" scratchpadDescription: "Lo Scratchpad offre un ambiente per esperimenti di AiScript. È possibile scrivere, eseguire e confermare i risultati dell'interazione del codice con Misskey." output: "Uscita" @@ -621,7 +621,7 @@ emailConfigInfo: "Utilizzato per verificare il tuo indirizzo di posta elettronic email: "Email" emailAddress: "Indirizzo di posta elettronica" smtpConfig: "Impostazioni del server SMTP" -smtpHost: "Server remoto" +smtpHost: "Host SMTP" smtpPort: "Porta" smtpUser: "Nome utente" smtpPass: "Password" @@ -1112,6 +1112,10 @@ renotes: "Rinota" loadReplies: "Leggi le risposte" loadConversation: "Leggi la conversazione" pinnedList: "Elenco in primo piano" +keepScreenOn: "Mantieni lo schermo acceso" +verifiedLink: "Abbiamo confermato la validità di questo collegamento" +notifyNotes: "Notifica nuove Note" +unnotifyNotes: "Interrompi le notifiche di nuove Note" _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." @@ -1462,10 +1466,10 @@ _role: _condition: isLocal: "Profilo locale" isRemote: "Profilo remoto" - createdLessThan: "Creato meno di" - createdMoreThan: "Creato più di" - followersLessThanOrEq: "Ha meno di N follower" - followersMoreThanOrEq: "Ha più di N follower" + createdLessThan: "Profilo creato da meno di N" + createdMoreThan: "Profilo creato da più di N" + followersLessThanOrEq: "Profilo con N follower o meno" + followersMoreThanOrEq: "Profilo con N follower o più" followingLessThanOrEq: "Segue N profili o meno" followingMoreThanOrEq: "Segue N profili o più" notesLessThanOrEq: "Conteggio Note inferiore o uguale a" @@ -1712,7 +1716,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "La configurazione è stata già completata." registerTOTP: "Registra un'app di autenticazione" - passwordToTOTP: "Inserire la password" step1: "Innanzitutto, installare sul dispositivo un'applicazione di autenticazione come {a} o {b}." step2: "Quindi, scansionare il codice QR visualizzato con l'app." step2Click: "Cliccando sul codice QR, puoi registrarlo con l'app di autenticazione o il portachiavi installato sul tuo dispositivo." @@ -1890,6 +1893,7 @@ _profile: metadataContent: "Contenuto" changeAvatar: "Modifica immagine profilo" changeBanner: "Cambia intestazione" + verifiedLinkDescription: "Puoi verificare il tuo profilo mostrando una icona. Devi inserire la URL alla pagina che contiene un link al tuo profilo." _exportOrImport: allNotes: "Tutte le note" favoritedNotes: "Note preferite" @@ -2008,6 +2012,7 @@ _notification: youReceivedFollowRequest: "Hai ricevuto una richiesta di follow" yourFollowRequestAccepted: "La tua richiesta di follow è stata accettata" pollEnded: "Risultati del sondaggio." + newNote: "Nuove Note" unreadAntennaNote: "Antenna {name}" emptyPushNotificationMessage: "Le notifiche push sono state aggiornate." achievementEarned: "Obiettivo raggiunto" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index b30fd5333d..82ced0aa3b 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1834,6 +1834,7 @@ _antennaSources: homeTimeline: "フォローしているユーザーのノート" users: "指定した一人または複数のユーザーのノート" userList: "指定したリストのユーザーのノート" + userBlacklist: "指定した一人または複数のユーザーを除いた全てのノート" _weekday: sunday: "日曜日" diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 936f6ebb7b..d5d414ea77 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -1697,7 +1697,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "もう設定終わっとるわ。" registerTOTP: "認証アプリの設定はじめる" - passwordToTOTP: "パスワードを入れてーや" step1: "ほんなら、{a}や{b}とかの認証アプリを使っとるデバイスにインストールしてな。" step2: "次に、ここにあるQRコードをアプリでスキャンしてな~。" step2Click: "QRコードをクリックすると、今使とる端末に入っとる認証アプリとかキーリングに登録できるで。" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 23996cbe95..9e405396ba 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -1699,7 +1699,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "이미 설정이 완료되었습니다." registerTOTP: "인증 앱 설정 시작" - passwordToTOTP: "비밀번호를 입력하세요." step1: "먼저, {a}나 {b}등의 인증 앱을 사용 중인 디바이스에 설치합니다." step2: "그 후, 표시되어 있는 QR코드를 앱으로 스캔합니다." step2Click: "QR 코드를 클릭하면 기기에 설치된 인증 앱에 등록할 수 있습니다." diff --git a/locales/pt-PT.yml b/locales/pt-PT.yml index 826f0b45a1..737bab9adc 100644 --- a/locales/pt-PT.yml +++ b/locales/pt-PT.yml @@ -411,6 +411,7 @@ aboutMisskey: "Sobre Misskey" administrator: "Administrador" token: "Símbolo" 2fa: "Autenticação de dois fatores" +setupOf2fa: "Configuração de autenticação de dois fatores" totp: "Aplicativo Autenticador" totpDescription: "Digite a senha de uso único informado pelo aplicativo autenticador" moderator: "Moderador" @@ -918,6 +919,7 @@ pleaseSelect: "Por favor, selecione." reverse: "Inversão" colored: "Colorido" refreshInterval: "Intervalo de atualização" +label: "Etiqueta" type: "Tipo" speed: "Velocidade" slow: "Lento" @@ -1008,6 +1010,7 @@ waitingForMailAuth: "Verificação de e-mail pendente " icon: "Avatar" replies: "Responder" renotes: "Repostar" +keepScreenOn: "Manter a tela do dispositivo sempre ligada" _initialAccountSetting: followUsers: "Siga usuários que lhe interessam para criar a sua linha do tempo." _serverSettings: diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 597b5f5791..edf531dfcc 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -1608,7 +1608,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "Двухфакторная аутентификация уже настроена." registerTOTP: "Начните настраивать приложение-аутентификатор" - passwordToTOTP: "Пожалуйста, введите свой пароль" step1: "Прежде всего, установите на устройство приложение для аутентификации, например, {a} или {b}." step2: "Далее отсканируйте отображаемый QR-код при помощи приложения." step2Click: "Нажав на QR-код, вы можете зарегистрироваться с помощью приложения для аутентификации или брелка для ключей, установленного на вашем устройстве." diff --git a/locales/sv-SE.yml b/locales/sv-SE.yml index 0c47ef6890..507492d52c 100644 --- a/locales/sv-SE.yml +++ b/locales/sv-SE.yml @@ -510,7 +510,6 @@ _sfx: chat: "Chatt" antenna: "Antenner" _2fa: - passwordToTOTP: "Skriv in ditt lösenord" renewTOTPCancel: "Nej tack" _antennaSources: all: "Alla noter" diff --git a/locales/th-TH.yml b/locales/th-TH.yml index 852e341648..f9262fea7e 100644 --- a/locales/th-TH.yml +++ b/locales/th-TH.yml @@ -1696,7 +1696,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "คุณได้ลงทะเบียนอุปกรณ์ยืนยันตัวตนแบบ 2 ชั้นแล้ว" registerTOTP: "ลงทะเบียนแอพตัวตรวจสอบสิทธิ์" - passwordToTOTP: "กรอกรหัสผ่าน" step1: "ขั้นตอนแรก ติดตั้งแอปยืนยันตัวตน (เช่น {a} หรือ {b}) บนอุปกรณ์ของคุณ" step2: "จากนั้นสแกนรหัส QR ที่แสดงบนหน้าจอนี้" step2Click: "การคลิกที่รหัส QR นี้จะช่วยให้คุณนั้นสามารถลงทะเบียน 2FA กับคีย์ความปลอดภัยหรือแอปตรวจสอบความถูกต้องของโทรศัพท์ได้" diff --git a/locales/vi-VN.yml b/locales/vi-VN.yml index 7b74e9714f..dec9e7f888 100644 --- a/locales/vi-VN.yml +++ b/locales/vi-VN.yml @@ -1006,9 +1006,9 @@ enableChartsForRemoteUser: "Tạo biểu đồ người dùng từ xa" video: "Video" videos: "Các video" dataSaver: "Tiết kiệm dung lượng" -accountMigration: "Gộp chung tài khoản" +accountMigration: "Chuyển tài khoản" accountMoved: "Người dùng này đã chuyển sang một tài khoản mới:" -accountMovedShort: "Tài khoản này đã được gộp" +accountMovedShort: "Tài khoản này đã được chuyển" operationForbidden: "Thao tác này không thể thực hiện" forceShowAds: "Luôn hiện quảng cáo" notificationDisplay: "Thông báo" @@ -1046,9 +1046,12 @@ renotes: "Đăng lại" loadReplies: "Hiển thị các trả lời" pinnedList: "Các mục đã được ghim" keepScreenOn: "Giữ màn hình luôn bật" +verifiedLink: "Chúng tôi đã xác nhận bạn là chủ sở hữu của đường dẫn này" _announcement: forExistingUsers: "Chỉ những người dùng đã tồn tại" + forExistingUsersDescription: "Nếu được bật, thông báo này sẽ chỉ hiển thị với những người dùng đã tồn tại vào lúc thông báo được tạo. Nếu tắt đi, những tài khoản mới đăng ký sau khi thông báo được đăng lên cũng sẽ thấy nó." end: "Lưu trữ thông báo" + tooManyActiveAnnouncementDescription: "Có quá nhiều thông báo sẽ làm trải nghiệm của người dùng tệ đi. Vui lòng lưu trữ những thông báo đã hết hiệu lực." readConfirmTitle: "Đánh dấu là đã đọc?" readConfirmText: "Điều này sẽ đánh dấu nội dung của \"{title}\" là đã đọc." _initialAccountSetting: @@ -1056,7 +1059,28 @@ _initialAccountSetting: letsStartAccountSetup: "Để bắt đầu, hãy cùng thiết lập tài khoản nhé." letsFillYourProfile: "Đầu tiên, hãy thiết lập hồ sơ của bạn." profileSetting: "Thiết lập hồ sơ" + privacySetting: "Cài đặt quyền riêng tư" + theseSettingsCanEditLater: "Bạn vẫn có thể thay đổi những cài đặt này." + youCanEditMoreSettingsInSettingsPageLater: "Còn rất nhiều những cài đặt khác bạn có thể thay đổi ở trang \"Cài đặt\". Hãy nhớ ghé thăm trong lần sau nhé." + followUsers: "Thử theo dõi một vài người mà bạn có thể thích để xây dựng dòng thời gian của mình." + pushNotificationDescription: "Bật thông báo đẩy sẽ cho phép bạn nhận thông báo từ {name} trực tiếp từ thiết bị của bạn." + initialAccountSettingCompleted: "Thiết lập tài khoản thành công!" + haveFun: "Hãy tận hưởng {name} nhé!" + ifYouNeedLearnMore: "Nếu bạn muốn tìm hiểu thêm về cách sử dụng {name} (Misskey), hãy vào {link}." + skipAreYouSure: "Bạn thực sự muốn bỏ qua mục thiết lập tài khoản?" + laterAreYouSure: "Bạn thực sự muốn thiết lập tài khoản vào lúc khác?" +_serverSettings: + iconUrl: "Biểu tượng URL" + appIconResolutionMustBe: "Độ phân giải tối thiểu là {resolution}." + manifestJsonOverride: "Ghi đè manifest.json" _accountMigration: + moveFrom: "Chuyển một tài khoản khác vào tài khoản này" + moveFromLabel: "Tài khoản gốc #{n}" + moveTo: "Chuyển tài khoản này vào một tài khoản khác" + moveCannotBeUndone: "Việc chuyển tài khoản không thể huỷ." + moveAccountDescription: "Điều này sẽ chuyển tài khoản này sang một tài khoản khác.\n ・Những người theo dõi sẽ tự động được chuyển sang tài khoản mới\n ・Tài khoản này sẽ tự bỏ theo dõi những người mà bạn đã theo dõi trước đây\n ・Bạn sẽ không thể đăng tút mới, v.v trên tài khoản này\n\nDù việc chuyển người theo dõi được diễn ra tự động, bạn vẫn phải tự chuẩn bị một vài bước để chuyển danh sách những người dùng bạn đang theo dõi. Để làm vậy, vui lòng thực hiện việc xuất dữ liệu những người dùng đã theo dõi mà sau này bạn sẽ dùng để nhập vào tài khoản mới ở menu Cài đặt. Hành động tương tự áp dụng với danh sách những người dùng bị chặn hoặc tắt tiếng.\n\n(Điều này áp dụng cho phiên bản Misskey v13.12.0 và sau này. Các phần mềm ActivityPub khác , ví dụ như Mastodon, sẽ có thể hoạt động khác đi.)" + startMigration: "Chuyển" + movedAndCannotBeUndone: "\nTài khoản này đã được chuyển đi.\nViệc di chuyển tài khoản không thể bị huỷ bỏ." movedTo: "Tài khoản mới:" _achievements: earnedAt: "Ngày thu nhận" @@ -1096,6 +1120,8 @@ _achievements: title: "Hàng tinh đăng bài" description: "Đã đăng bài 50,000 lần rồi" _notes100000: + title: "ALL YOUR NOTE ARE BELONG TO US" + description: "Đăng 100,000 tút" flavor: "Liệu viết bài gì tầm này vậy? " _login3: title: "Sơ cấp I" @@ -1127,6 +1153,15 @@ _achievements: _login400: title: "Khách hàng thường xuyên cấp III" description: "Tổng số ngày đăng nhập đạt 400 ngày" + _login1000: + flavor: "Cảm ơn bạn đã sử dụng Misskey!" + _noteFavorited1: + title: "Nhà thiên văn học" + _myNoteFavorited1: + title: "Đi tìm những ngôi sao" + _profileFilled: + title: "Luôn sẵn sàng" + description: "Thiết lập tài khoản của bạn" _markedAsCat: title: "Tôi là một con mèo" description: "Bật chế độ mèo" @@ -1152,8 +1187,18 @@ _achievements: _followers10: title: "FOLLOW ME!!" description: "Người theo dõi bạn vượt lên 10 người" + _followers50: + title: "Từng chút một" + description: "Đạt được 50 lượt theo dõi" + _followers100: + title: "Người nổi tiếng" + description: "Đạt được 100 lượt theo dõi" + _followers300: + title: "Vui lòng xếp thành hàng nào" + description: "Đạt được 300 lượt theo dõi" _followers500: title: "Trạm phát sóng" + description: "Đạt được 500 lượt theo dõi" _followers1000: title: "Người có tầm ảnh hưởng" description: "Người theo dõi bạn vượt lên 1000 người" @@ -1172,11 +1217,15 @@ _achievements: description: "Tìm thấy được những kho báu cất giấu" _client30min: title: "Giải lao xỉu" + description: "Giữ Misskey mở trong ít nhất 30 phút" + _client60min: + description: "Giữ Misskey mở trong ít nhất 60 phút" _noteDeletedWithin1min: title: "Xem như không có gì đâu nha" _postedAtLateNight: title: "Loài ăn đêm" description: "Đăng bài trong đêm khuya " + flavor: "Đến giờ đi ngủ rồi." _postedAt0min0sec: title: "Tín hiệu báo giờ" description: "Đăng bài vào 0 phút 0 giây" @@ -1207,6 +1256,8 @@ _achievements: _setNameToSyuilo: title: "Ngưỡng mộ với vị thần" description: "Đạt tên là syuilo" + _passedSinceAccountCreated1: + title: "Kỷ niệm một năm" _loggedInOnBirthday: title: "Sinh nhật vủi vẻ" description: "Đăng nhập vào ngày sinh" @@ -1466,7 +1517,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "Bạn đã đăng ký thiết bị xác minh 2 bước." registerTOTP: "Đăng ký ứng dụng xác thực" - passwordToTOTP: "Nhắn mật mã" step1: "Trước tiên, hãy cài đặt một ứng dụng xác minh (chẳng hạn như {a} hoặc {b}) trên thiết bị của bạn." step2: "Sau đó, quét mã QR hiển thị trên màn hình này." step2Click: "Quét mã QR trên ứng dụng xác thực (Authy, Google authenticator, v.v.)" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index ef32d1aa23..3026682890 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -1113,6 +1113,9 @@ loadReplies: "查看回复" loadConversation: "查看对话" pinnedList: "已置顶的列表" keepScreenOn: "保持设备屏幕开启" +verifiedLink: "已验证的链接" +notifyNotes: "打开发帖通知" +unnotifyNotes: "关闭发帖通知" _announcement: forExistingUsers: "仅限现有用户" forExistingUsersDescription: "若启用,该公告将仅对创建此公告时存在的用户可见。 如果禁用,则在创建此公告后注册的用户也可以看到该公告。" @@ -1713,7 +1716,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "此设备已被注册" registerTOTP: "开始设置认证应用" - passwordToTOTP: "请输入您的密码" step1: "首先,在您的设备上安装验证应用,例如 {a} 或 {b}。" step2: "然后,扫描屏幕上显示的二维码。" step2Click: "通过点击二维码,您可以使用设备上安装的身份验证器应用程序或密钥环进行注册" @@ -1891,6 +1893,7 @@ _profile: metadataContent: "内容" changeAvatar: "修改头像" changeBanner: "修改横幅" + verifiedLinkDescription: "如果将内容设置为 URL,当链接所指向的网页内包含自己的个人资料链接时,可以显示一个已验证图标。" _exportOrImport: allNotes: "所有帖子" favoritedNotes: "收藏的帖子" @@ -2009,6 +2012,7 @@ _notification: youReceivedFollowRequest: "您有新的关注请求" yourFollowRequestAccepted: "您的关注请求已通过" pollEnded: "问卷调查结果已生成。" + newNote: "新的帖子" unreadAntennaNote: "天线 {name}" emptyPushNotificationMessage: "推送通知已更新" achievementEarned: "获得成就" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 39f2f2ff29..a61e3b242b 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -15,7 +15,7 @@ gotIt: "知道了" cancel: "取消" noThankYou: "現在不要" enterUsername: "輸入使用者名稱" -renotedBy: "{user} 轉傳了" +renotedBy: "{user} 轉發" noNotes: "無貼文" noNotifications: "沒有通知" instance: "伺服器" @@ -106,10 +106,10 @@ unfollow: "取消追隨" followRequestPending: "追隨許可待批准" enterEmoji: "輸入表情符號" renote: "轉發" -unrenote: "取消轉傳" -renoted: "轉傳成功" -cantRenote: "無法轉傳此貼文。" -cantReRenote: "無法轉傳之前已經轉傳過的內容。" +unrenote: "取消轉發" +renoted: "轉發成功" +cantRenote: "無法轉發此貼文。" +cantReRenote: "無法轉發之前已經轉發過的內容。" quote: "引用" inChannelRenote: "在頻道內轉發" inChannelQuote: "在頻道內引用" @@ -546,7 +546,7 @@ recentUsed: "最近使用" install: "安裝" uninstall: "解除安裝" installedApps: "已授權的應用程式" -nothing: "無" +nothing: "查無項目" installedDate: "安裝時間" lastUsedDate: "最後上線日期" state: "狀態" @@ -657,7 +657,7 @@ behavior: "行為" sample: "範例" abuseReports: "檢舉" reportAbuse: "檢舉" -reportAbuseRenote: "檢舉轉貼" +reportAbuseRenote: "檢舉轉發貼文" reportAbuseOf: "檢舉{name}" fillAbuseReportDescription: "請填寫檢舉的詳細理由。如有需要,請附上相關 URL。" abuseReported: "檢舉完成。感謝您的報告。" @@ -1112,6 +1112,10 @@ renotes: "轉發" loadReplies: "閱覽回覆" loadConversation: "閱覽對話" pinnedList: "已置頂的清單" +keepScreenOn: "保持設備螢幕開啟" +verifiedLink: "已驗證連結" +notifyNotes: "開啟貼文通知" +unnotifyNotes: "關閉貼文通知" _announcement: forExistingUsers: "僅限既有的使用者" forExistingUsersDescription: "啟用代表僅向現存使用者顯示;停用代表張貼後註冊的新使用者也會看到。" @@ -1687,7 +1691,7 @@ _ago: future: "未來" justNow: "剛剛" secondsAgo: "{n} 秒前" - minutesAgo: "{n}分鐘前 " + minutesAgo: "{n} 分鐘前 " hoursAgo: "{n} 小時前" daysAgo: "{n} 天前" weeksAgo: "{n} 週前" @@ -1712,7 +1716,6 @@ _timelineTutorial: _2fa: alreadyRegistered: "此裝置已被註冊過了" registerTOTP: "開始設定驗證應用程式" - passwordToTOTP: "請輸入密碼" step1: "首先,在您的裝置上安裝驗證程式,例如 {a} 或 {b}。" step2: "然後,掃描螢幕上的 QR 碼。" step2Click: "您可以點擊 QR 碼,以使用裝置上的驗證應用程式或金鑰環註冊。" @@ -1890,6 +1893,7 @@ _profile: metadataContent: "内容" changeAvatar: "更換大頭貼" changeBanner: "變更橫幅圖像" + verifiedLinkDescription: "如果輸入包含您個人資料的網站 URL,欄位旁邊將出現驗證圖示。" _exportOrImport: allNotes: "所有貼文" favoritedNotes: "「我的最愛」貼文" @@ -2008,6 +2012,7 @@ _notification: youReceivedFollowRequest: "您有新的追隨請求" yourFollowRequestAccepted: "您的追隨請求已通過" pollEnded: "問卷調查已產生結果" + newNote: "新的貼文" unreadAntennaNote: "天線 {name}" emptyPushNotificationMessage: "推送通知已更新" achievementEarned: "獲得成就" diff --git a/package.json b/package.json index 8b5f574947..be3e7762e6 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "cross-env": "7.0.3", "cypress": "13.2.0", "eslint": "8.49.0", - "start-server-and-test": "2.0.0" + "start-server-and-test": "2.0.1" }, "optionalDependencies": { "@tensorflow/tfjs-core": "4.4.0" diff --git a/packages/backend/migration/1689325027964-UserBlacklistAnntena.js b/packages/backend/migration/1689325027964-UserBlacklistAnntena.js new file mode 100644 index 0000000000..ce246b20f8 --- /dev/null +++ b/packages/backend/migration/1689325027964-UserBlacklistAnntena.js @@ -0,0 +1,10 @@ +export class UserBlacklistAnntena1689325027964 { + name = 'UserBlacklistAnntena1689325027964' + + async up(queryRunner) { + await queryRunner.query(`ALTER TYPE "antenna_src_enum" ADD VALUE 'users_blacklist' AFTER 'list'`); + } + + async down(queryRunner) { + } +} diff --git a/packages/backend/package.json b/packages/backend/package.json index 466416393c..27747e3cd4 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -78,7 +78,7 @@ "@simplewebauthn/server": "8.1.1", "@sinonjs/fake-timers": "11.1.0", "@swc/cli": "0.1.62", - "@swc/core": "1.3.86", + "@swc/core": "1.3.87", "accepts": "1.3.8", "ajv": "8.12.0", "archiver": "6.0.1", @@ -86,7 +86,7 @@ "bcryptjs": "2.4.3", "blurhash": "2.0.5", "body-parser": "1.20.2", - "bullmq": "4.11.2", + "bullmq": "4.11.3", "cacheable-lookup": "7.0.0", "cbor": "9.0.1", "chalk": "5.3.0", diff --git a/packages/backend/src/core/AntennaService.ts b/packages/backend/src/core/AntennaService.ts index a7e74eeef0..841ce4b84a 100644 --- a/packages/backend/src/core/AntennaService.ts +++ b/packages/backend/src/core/AntennaService.ts @@ -119,6 +119,12 @@ export class AntennaService implements OnApplicationShutdown { return this.utilityService.getFullApAccount(username, host).toLowerCase(); }); if (!accts.includes(this.utilityService.getFullApAccount(noteUser.username, noteUser.host).toLowerCase())) return false; + } else if (antenna.src === 'users_blacklist') { + const accts = antenna.users.map(x => { + const { username, host } = Acct.parse(x); + return this.utilityService.getFullApAccount(username, host).toLowerCase(); + }); + if (accts.includes(this.utilityService.getFullApAccount(noteUser.username, noteUser.host).toLowerCase())) return false; } const keywords = antenna.keywords diff --git a/packages/backend/src/core/activitypub/ApResolverService.ts b/packages/backend/src/core/activitypub/ApResolverService.ts index 058869ca77..9ca63c9ec5 100644 --- a/packages/backend/src/core/activitypub/ApResolverService.ts +++ b/packages/backend/src/core/activitypub/ApResolverService.ts @@ -4,9 +4,10 @@ */ import { Inject, Injectable } from '@nestjs/common'; +import { IsNull, Not } from 'typeorm'; import type { MiLocalUser, MiRemoteUser } from '@/models/User.js'; import { InstanceActorService } from '@/core/InstanceActorService.js'; -import type { NotesRepository, PollsRepository, NoteReactionsRepository, UsersRepository } from '@/models/_.js'; +import type { NotesRepository, PollsRepository, NoteReactionsRepository, UsersRepository, FollowRequestsRepository } from '@/models/_.js'; import type { Config } from '@/config.js'; import { MetaService } from '@/core/MetaService.js'; import { HttpRequestService } from '@/core/HttpRequestService.js'; @@ -32,6 +33,7 @@ export class Resolver { private notesRepository: NotesRepository, private pollsRepository: PollsRepository, private noteReactionsRepository: NoteReactionsRepository, + private followRequestsRepository: FollowRequestsRepository, private utilityService: UtilityService, private instanceActorService: InstanceActorService, private metaService: MetaService, @@ -146,13 +148,24 @@ export class Resolver { return this.noteReactionsRepository.findOneByOrFail({ id: parsed.id }).then(async reaction => this.apRendererService.addContext(await this.apRendererService.renderLike(reaction, { uri: null }))); case 'follows': - // rest should be - if (parsed.rest == null || !/^\w+$/.test(parsed.rest)) throw new Error('resolveLocal: invalid follow URI'); - - return Promise.all( - [parsed.id, parsed.rest].map(id => this.usersRepository.findOneByOrFail({ id })), - ) - .then(([follower, followee]) => this.apRendererService.addContext(this.apRendererService.renderFollow(follower as MiLocalUser | MiRemoteUser, followee as MiLocalUser | MiRemoteUser, url))); + return this.followRequestsRepository.findOneBy({ id: parsed.id }) + .then(async followRequest => { + if (followRequest == null) throw new Error('resolveLocal: invalid follow request ID'); + const [follower, followee] = await Promise.all([ + this.usersRepository.findOneBy({ + id: followRequest.followerId, + host: IsNull(), + }), + this.usersRepository.findOneBy({ + id: followRequest.followeeId, + host: Not(IsNull()), + }), + ]); + if (follower == null || followee == null) { + throw new Error('resolveLocal: follower or followee does not exist'); + } + return this.apRendererService.addContext(this.apRendererService.renderFollow(follower as MiLocalUser | MiRemoteUser, followee as MiLocalUser | MiRemoteUser, url)); + }); default: throw new Error(`resolveLocal: type ${parsed.type} unhandled`); } @@ -177,6 +190,9 @@ export class ApResolverService { @Inject(DI.noteReactionsRepository) private noteReactionsRepository: NoteReactionsRepository, + @Inject(DI.followRequestsRepository) + private followRequestsRepository: FollowRequestsRepository, + private utilityService: UtilityService, private instanceActorService: InstanceActorService, private metaService: MetaService, @@ -196,6 +212,7 @@ export class ApResolverService { this.notesRepository, this.pollsRepository, this.noteReactionsRepository, + this.followRequestsRepository, this.utilityService, this.instanceActorService, this.metaService, diff --git a/packages/backend/src/models/Antenna.ts b/packages/backend/src/models/Antenna.ts index 7c1d80cc46..dc398b6dd2 100644 --- a/packages/backend/src/models/Antenna.ts +++ b/packages/backend/src/models/Antenna.ts @@ -41,8 +41,8 @@ export class MiAntenna { }) public name: string; - @Column('enum', { enum: ['home', 'all', 'users', 'list'] }) - public src: 'home' | 'all' | 'users' | 'list'; + @Column('enum', { enum: ['home', 'all', 'users', 'list', 'users_blacklist'] }) + public src: 'home' | 'all' | 'users' | 'list' | 'users_blacklist'; @Column({ ...id(), diff --git a/packages/backend/src/models/json-schema/antenna.ts b/packages/backend/src/models/json-schema/antenna.ts index 3f58cbee6c..7b6475919c 100644 --- a/packages/backend/src/models/json-schema/antenna.ts +++ b/packages/backend/src/models/json-schema/antenna.ts @@ -47,7 +47,7 @@ export const packedAntennaSchema = { src: { type: 'string', optional: false, nullable: false, - enum: ['home', 'all', 'users', 'list'], + enum: ['home', 'all', 'users', 'list', 'users_blacklist'], }, userListId: { type: 'string', diff --git a/packages/backend/src/server/api/endpoints/antennas/create.ts b/packages/backend/src/server/api/endpoints/antennas/create.ts index 54361fd0c5..206b614e52 100644 --- a/packages/backend/src/server/api/endpoints/antennas/create.ts +++ b/packages/backend/src/server/api/endpoints/antennas/create.ts @@ -47,7 +47,7 @@ export const paramDef = { type: 'object', properties: { name: { type: 'string', minLength: 1, maxLength: 100 }, - src: { type: 'string', enum: ['home', 'all', 'users', 'list'] }, + src: { type: 'string', enum: ['home', 'all', 'users', 'list', 'users_blacklist'] }, userListId: { type: 'string', format: 'misskey:id', nullable: true }, keywords: { type: 'array', items: { type: 'array', items: { diff --git a/packages/backend/src/server/api/endpoints/antennas/update.ts b/packages/backend/src/server/api/endpoints/antennas/update.ts index 62c3db883f..d8f42dd768 100644 --- a/packages/backend/src/server/api/endpoints/antennas/update.ts +++ b/packages/backend/src/server/api/endpoints/antennas/update.ts @@ -46,7 +46,7 @@ export const paramDef = { properties: { antennaId: { type: 'string', format: 'misskey:id' }, name: { type: 'string', minLength: 1, maxLength: 100 }, - src: { type: 'string', enum: ['home', 'all', 'users', 'list'] }, + src: { type: 'string', enum: ['home', 'all', 'users', 'list', 'users_blacklist'] }, userListId: { type: 'string', format: 'misskey:id', nullable: true }, keywords: { type: 'array', items: { type: 'array', items: { diff --git a/packages/backend/test/misc/mock-resolver.ts b/packages/backend/test/misc/mock-resolver.ts index 07abe515c3..7cba7a2aa8 100644 --- a/packages/backend/test/misc/mock-resolver.ts +++ b/packages/backend/test/misc/mock-resolver.ts @@ -15,7 +15,7 @@ import type { LoggerService } from '@/core/LoggerService.js'; import type { MetaService } from '@/core/MetaService.js'; import type { UtilityService } from '@/core/UtilityService.js'; import { bindThis } from '@/decorators.js'; -import type { NoteReactionsRepository, NotesRepository, PollsRepository, UsersRepository } from '@/models/_.js'; +import type { NoteReactionsRepository, NotesRepository, PollsRepository, UsersRepository, FollowRequestsRepository } from '@/models/_.js'; type MockResponse = { type: string; @@ -33,6 +33,7 @@ export class MockResolver extends Resolver { {} as NotesRepository, {} as PollsRepository, {} as NoteReactionsRepository, + {} as FollowRequestsRepository, {} as UtilityService, {} as InstanceActorService, {} as MetaService, diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 8c3b49f18b..6285c1bc33 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -110,7 +110,7 @@ "@types/ws": "8.5.5", "@typescript-eslint/eslint-plugin": "6.7.2", "@typescript-eslint/parser": "6.7.2", - "@vitest/coverage-v8": "0.34.4", + "@vitest/coverage-v8": "0.34.5", "@vue/runtime-core": "3.3.4", "acorn": "8.10.0", "cross-env": "7.0.3", @@ -127,14 +127,14 @@ "prettier": "3.0.3", "react": "18.2.0", "react-dom": "18.2.0", - "start-server-and-test": "2.0.0", - "storybook": "7.4.2", + "start-server-and-test": "2.0.1", + "storybook": "7.4.3", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", "summaly": "github:misskey-dev/summaly", "vite-plugin-turbosnap": "1.0.3", - "vitest": "0.34.4", + "vitest": "0.34.5", "vitest-fetch-mock": "0.2.2", "vue-eslint-parser": "9.3.1", - "vue-tsc": "1.8.11" + "vue-tsc": "1.8.13" } } diff --git a/packages/frontend/src/pages/my-antennas/editor.vue b/packages/frontend/src/pages/my-antennas/editor.vue index cd920b75e6..4add66c396 100644 --- a/packages/frontend/src/pages/my-antennas/editor.vue +++ b/packages/frontend/src/pages/my-antennas/editor.vue @@ -16,12 +16,13 @@ SPDX-License-Identifier: AGPL-3.0-only + - + diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index 444d1c39e3..c1238f1a17 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -39,7 +39,7 @@ ], "dependencies": { "@swc/cli": "0.1.62", - "@swc/core": "1.3.86", + "@swc/core": "1.3.87", "eventemitter3": "5.0.1", "reconnecting-websocket": "4.4.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8649cd581f..e857d7a78d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,8 +51,8 @@ importers: specifier: 8.49.0 version: 8.49.0 start-server-and-test: - specifier: 2.0.0 - version: 2.0.0 + specifier: 2.0.1 + version: 2.0.1 packages/backend: dependencies: @@ -121,10 +121,10 @@ importers: version: 2.1.5 '@swc/cli': specifier: 0.1.62 - version: 0.1.62(@swc/core@1.3.86)(chokidar@3.5.3) + version: 0.1.62(@swc/core@1.3.87)(chokidar@3.5.3) '@swc/core': - specifier: 1.3.86 - version: 1.3.86 + specifier: 1.3.87 + version: 1.3.87 accepts: specifier: 1.3.8 version: 1.3.8 @@ -147,8 +147,8 @@ importers: specifier: 1.20.2 version: 1.20.2 bullmq: - specifier: 4.11.2 - version: 4.11.2 + specifier: 4.11.3 + version: 4.11.3 cacheable-lookup: specifier: 7.0.0 version: 7.0.0 @@ -489,7 +489,7 @@ importers: version: 8.0.0 '@swc/jest': specifier: 0.2.29 - version: 0.2.29(@swc/core@1.3.86) + version: 0.2.29(@swc/core@1.3.87) '@types/accepts': specifier: 1.3.5 version: 1.3.5 @@ -844,7 +844,7 @@ importers: version: 7.4.3 '@storybook/jest': specifier: 0.2.2 - version: 0.2.2(vitest@0.34.4) + version: 0.2.2(vitest@0.34.5) '@storybook/manager-api': specifier: 7.4.3 version: 7.4.3(react-dom@18.2.0)(react@18.2.0) @@ -918,8 +918,8 @@ importers: specifier: 6.7.2 version: 6.7.2(eslint@8.49.0)(typescript@5.2.2) '@vitest/coverage-v8': - specifier: 0.34.4 - version: 0.34.4(vitest@0.34.4) + specifier: 0.34.5 + version: 0.34.5(vitest@0.34.5) '@vue/runtime-core': specifier: 3.3.4 version: 3.3.4 @@ -969,11 +969,11 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) start-server-and-test: - specifier: 2.0.0 - version: 2.0.0 + specifier: 2.0.1 + version: 2.0.1 storybook: - specifier: 7.4.2 - version: 7.4.2 + specifier: 7.4.3 + version: 7.4.3 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.3)(@storybook/components@7.4.3)(@storybook/core-events@7.4.3)(@storybook/manager-api@7.4.3)(@storybook/preview-api@7.4.3)(@storybook/theming@7.4.3)(@storybook/types@7.4.3)(react-dom@18.2.0)(react@18.2.0) @@ -984,26 +984,26 @@ importers: specifier: 1.0.3 version: 1.0.3 vitest: - specifier: 0.34.4 - version: 0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) + specifier: 0.34.5 + version: 0.34.5(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) vitest-fetch-mock: specifier: 0.2.2 - version: 0.2.2(vitest@0.34.4) + version: 0.2.2(vitest@0.34.5) vue-eslint-parser: specifier: 9.3.1 version: 9.3.1(eslint@8.49.0) vue-tsc: - specifier: 1.8.11 - version: 1.8.11(typescript@5.2.2) + specifier: 1.8.13 + version: 1.8.13(typescript@5.2.2) packages/misskey-js: dependencies: '@swc/cli': specifier: 0.1.62 - version: 0.1.62(@swc/core@1.3.86)(chokidar@3.5.3) + version: 0.1.62(@swc/core@1.3.87)(chokidar@3.5.3) '@swc/core': - specifier: 1.3.86 - version: 1.3.86 + specifier: 1.3.87 + version: 1.3.87 eventemitter3: specifier: 5.0.1 version: 5.0.1 @@ -1016,7 +1016,7 @@ importers: version: 7.37.0(@types/node@20.6.3) '@swc/jest': specifier: 0.2.29 - version: 0.2.29(@swc/core@1.3.86) + version: 0.2.29(@swc/core@1.3.87) '@types/jest': specifier: 29.5.5 version: 29.5.5 @@ -6217,30 +6217,6 @@ packages: - supports-color dev: true - /@storybook/builder-manager@7.4.2: - resolution: {integrity: sha512-MgdXr9QJ2sNk0fUshQ7hk4Ec9IkbPWR6alrmDByIOEU9bThx0j4OxU9uTLBy8r5uZsSL6nNtRyCvSP8YSKaQHQ==} - dependencies: - '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 7.4.2 - '@storybook/manager': 7.4.2 - '@storybook/node-logger': 7.4.2 - '@types/ejs': 3.1.2 - '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.17) - browser-assert: 1.2.1 - ejs: 3.1.8 - esbuild: 0.18.17 - esbuild-plugin-alias: 0.2.1 - express: 4.18.2 - find-cache-dir: 3.3.2 - fs-extra: 11.1.1 - process: 0.11.10 - util: 0.12.5 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - /@storybook/builder-manager@7.4.3: resolution: {integrity: sha512-6jzxZ2J1jFaZXn7ZucEgV6XyUe+FJ9uuoMRZcZefoCKeXK/BOPCefijYWP3DPgqqVh3/JLUglIpz0MH9k8cBaw==} dependencies: @@ -6306,17 +6282,6 @@ packages: - supports-color dev: true - /@storybook/channels@7.4.2: - resolution: {integrity: sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw==} - dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/core-events': 7.4.2 - '@storybook/global': 5.0.0 - qs: 6.11.1 - telejson: 7.2.0 - tiny-invariant: 1.3.1 - dev: true - /@storybook/channels@7.4.3: resolution: {integrity: sha512-lIoRX3EV0wKPX8ojIrJUtsOv4+Gv8r9pfJpam/NdyYd+rs0AjDK13ieINRfBMnJkfjsWa3vmZtGMBEVvDKwTMw==} dependencies: @@ -6328,22 +6293,22 @@ packages: tiny-invariant: 1.3.1 dev: true - /@storybook/cli@7.4.2: - resolution: {integrity: sha512-WleObtC7OU2lT+pI2vTdXZPFMKDGbg3bkUJ+PG8+yqGg53ea5ZkwKWg9qHpXuiMkYDztqhbA8kYrny1GqFuVdg==} + /@storybook/cli@7.4.3: + resolution: {integrity: sha512-/lGtXbzNropsCF4srEGxiHzCU7b2wlV13LrSj3H3zOnHEAJlFcNpyNzO+4jKHfNTjjqEtcRGJ1OxrSYuGZTVjg==} hasBin: true dependencies: '@babel/core': 7.22.11 '@babel/preset-env': 7.22.9(@babel/core@7.22.11) '@babel/types': 7.22.17 '@ndelangen/get-tarball': 3.0.7 - '@storybook/codemod': 7.4.2 - '@storybook/core-common': 7.4.2 - '@storybook/core-events': 7.4.2 - '@storybook/core-server': 7.4.2 - '@storybook/csf-tools': 7.4.2 - '@storybook/node-logger': 7.4.2 - '@storybook/telemetry': 7.4.2 - '@storybook/types': 7.4.2 + '@storybook/codemod': 7.4.3 + '@storybook/core-common': 7.4.3 + '@storybook/core-events': 7.4.3 + '@storybook/core-server': 7.4.3 + '@storybook/csf-tools': 7.4.3 + '@storybook/node-logger': 7.4.3 + '@storybook/telemetry': 7.4.3 + '@storybook/types': 7.4.3 '@types/semver': 7.5.2 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -6380,28 +6345,22 @@ packages: - utf-8-validate dev: true - /@storybook/client-logger@7.4.2: - resolution: {integrity: sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - /@storybook/client-logger@7.4.3: resolution: {integrity: sha512-Nhngo9X4HjN00aRhgIVGWbwkWPe0Fz8PySuxnd8nAxSsz7KpdLFyYo2TbZZ3TX51FG5Fxcb0G5OHuunItP7EWQ==} dependencies: '@storybook/global': 5.0.0 dev: true - /@storybook/codemod@7.4.2: - resolution: {integrity: sha512-wU+SLHG/PpLptI0aWEhPxwFPcX7uYe+Id21DKNPg/HvYaLG3N+/DPDef+lm3Vaov9w4OD74iuQ3knT67SSkvmw==} + /@storybook/codemod@7.4.3: + resolution: {integrity: sha512-UwnsyVeUa+wLIeE/zO0slV3mwsPgS3DstZAWbjWUfFlJKZjgg1++Zkv0GmxkEyirsnf/g4r6Aq+KhIdIHmdzag==} dependencies: '@babel/core': 7.22.11 '@babel/preset-env': 7.22.9(@babel/core@7.22.11) '@babel/types': 7.22.17 '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.4.2 - '@storybook/node-logger': 7.4.2 - '@storybook/types': 7.4.2 + '@storybook/csf-tools': 7.4.3 + '@storybook/node-logger': 7.4.3 + '@storybook/types': 7.4.3 '@types/cross-spawn': 6.0.2 cross-spawn: 7.0.3 globby: 11.1.0 @@ -6443,37 +6402,6 @@ packages: '@storybook/preview-api': 7.4.3 dev: true - /@storybook/core-common@7.4.2: - resolution: {integrity: sha512-Qj9S97TYO+jSNdC2+LrMFtZRvTnELeFnRtn/MDWhkM6mpZgRglxlZuXi5enJjqTh0dISAUxPpTtXNAJDfX99JA==} - dependencies: - '@storybook/core-events': 7.4.2 - '@storybook/node-logger': 7.4.2 - '@storybook/types': 7.4.2 - '@types/find-cache-dir': 3.2.1 - '@types/node': 16.18.46 - '@types/node-fetch': 2.6.4 - '@types/pretty-hrtime': 1.0.1 - chalk: 4.1.2 - esbuild: 0.18.17 - esbuild-register: 3.4.2(esbuild@0.18.17) - file-system-cache: 2.3.0 - find-cache-dir: 3.3.2 - find-up: 5.0.0 - fs-extra: 11.1.1 - glob: 10.3.0 - handlebars: 4.7.7 - lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - /@storybook/core-common@7.4.3: resolution: {integrity: sha512-jwIBUnWitZzw0VfKC77yN8DvTyePLVnAjbA2lPMbMIdO9ZY2lfD4AQ4QpuWsxJyAllFC4slOFDNgCDHx2AlYWw==} dependencies: @@ -6505,70 +6433,12 @@ packages: - supports-color dev: true - /@storybook/core-events@7.4.2: - resolution: {integrity: sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw==} - dependencies: - ts-dedent: 2.2.0 - dev: true - /@storybook/core-events@7.4.3: resolution: {integrity: sha512-FRfipCijMnVbGxL1ZjOLM836lyd/TGQcUFeVjTQWW/+pIGHELqDHiYeq68hqoGTKl0G0np59CJPWYTUZA4Dl9Q==} dependencies: ts-dedent: 2.2.0 dev: true - /@storybook/core-server@7.4.2: - resolution: {integrity: sha512-4aaFQTjb8jsbzJeCs+VTo3gdyK3r3VhQN2sxn6k/lcKjQFeO84+iqGgGmb+oWUVz2TJL+JrNh7SUXkVsMZBXVQ==} - dependencies: - '@aw-web-design/x-default-browser': 1.4.126 - '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 7.4.2 - '@storybook/channels': 7.4.2 - '@storybook/core-common': 7.4.2 - '@storybook/core-events': 7.4.2 - '@storybook/csf': 0.1.0 - '@storybook/csf-tools': 7.4.2 - '@storybook/docs-mdx': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/manager': 7.4.2 - '@storybook/node-logger': 7.4.2 - '@storybook/preview-api': 7.4.2 - '@storybook/telemetry': 7.4.2 - '@storybook/types': 7.4.2 - '@types/detect-port': 1.3.2 - '@types/node': 16.18.46 - '@types/pretty-hrtime': 1.0.1 - '@types/semver': 7.5.2 - better-opn: 3.0.2 - chalk: 4.1.2 - cli-table3: 0.6.3 - compression: 1.7.4 - detect-port: 1.5.1 - express: 4.18.2 - fs-extra: 11.1.1 - globby: 11.1.0 - ip: 2.0.0 - lodash: 4.17.21 - open: 8.4.2 - pretty-hrtime: 1.0.3 - prompts: 2.4.2 - read-pkg-up: 7.0.1 - semver: 7.5.4 - serve-favicon: 2.5.0 - telejson: 7.2.0 - tiny-invariant: 1.3.1 - ts-dedent: 2.2.0 - util: 0.12.5 - util-deprecate: 1.0.2 - watchpack: 2.4.0 - ws: 8.14.2(bufferutil@4.0.7)(utf-8-validate@6.0.3) - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - /@storybook/core-server@7.4.3: resolution: {integrity: sha512-yl9HaVwk/xJV9zq76n/oR1cE39wAFmNmKVPOJAtr3+c7wS0tnBkw7T+GqZ2Seyv+xkcZUWS8KRH74HqwPwG0Bw==} dependencies: @@ -6630,22 +6500,6 @@ packages: - supports-color dev: true - /@storybook/csf-tools@7.4.2: - resolution: {integrity: sha512-5AvF2YRcYHIqQqskb3R8JvsmSWnNwkP0CGmP8Zq7zIfK/C+npKb/onv5YQlbSgh+2UrVxVdIDLc9AepBeXC3uQ==} - dependencies: - '@babel/generator': 7.22.10 - '@babel/parser': 7.22.16 - '@babel/traverse': 7.22.11 - '@babel/types': 7.22.17 - '@storybook/csf': 0.1.0 - '@storybook/types': 7.4.2 - fs-extra: 11.1.1 - recast: 0.23.1 - ts-dedent: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /@storybook/csf-tools@7.4.3: resolution: {integrity: sha512-nkVakGx2kzou91lGcxnyFNiSEdnpx1a53lQTl/DLm0QpDbqQuu3ZbZWXZCpXV97t/6YPeCCnGLXodnI7PZyZBA==} dependencies: @@ -6706,11 +6560,11 @@ packages: '@storybook/preview-api': 7.4.3 dev: true - /@storybook/jest@0.2.2(vitest@0.34.4): + /@storybook/jest@0.2.2(vitest@0.34.5): resolution: {integrity: sha512-PUfp9WoqUA8NdAmiz3UahUsyAMr+g1Dv3BB0fqJZsE2IuE5o1Mgsv4iLGzFm+ohcQLIDQvwvvbQIpxe8eY7TNw==} dependencies: '@storybook/expect': 28.1.3-5 - '@testing-library/jest-dom': 6.1.2(@types/jest@28.1.3)(vitest@0.34.4) + '@testing-library/jest-dom': 6.1.2(@types/jest@28.1.3)(vitest@0.34.5) '@types/jest': 28.1.3 jest-mock: 27.5.1 transitivePeerDependencies: @@ -6744,10 +6598,6 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/manager@7.4.2: - resolution: {integrity: sha512-MtjmbAaf4hUObAa2ETQkm0+SzESoPeNm+TyzwZU5qq3Ouj4IOj2Ugd8EJPO3isdHxYt26A255tW/G9mb9v20fQ==} - dev: true - /@storybook/manager@7.4.3: resolution: {integrity: sha512-7U92tYwjt0DIKX7vCKNSZefuEavdnJYa5/zSjdlo0LtfBmGRBak1eq/sVLGfzrZ+wKIlCXgNh3f8OLy8RMnOOw==} dev: true @@ -6756,10 +6606,6 @@ packages: resolution: {integrity: sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==} dev: true - /@storybook/node-logger@7.4.2: - resolution: {integrity: sha512-iSBjhnMpWY9Hs5KGnf/xfHjGtGl740LUg4Gce874DuL773Mdc4hdppSKr4X/Pp1/AD67mNuifSXYx3V7d6XzTQ==} - dev: true - /@storybook/node-logger@7.4.3: resolution: {integrity: sha512-pL13PPMUttflTWKVeDIKxPIJtBRl50Fzck12/7uiNROtBIrSV9DZSgOjInAazjo4tl+7fDj9lgkGeMEz00E8aQ==} dev: true @@ -6768,25 +6614,6 @@ packages: resolution: {integrity: sha512-6NMaAvL4a26jR50UPz+Q6VATY3lHZWw1ru/weFgiV0rat632RFdiFyrMMrjbUWu9HDJE4fbCzrIZU0jGVs1wlQ==} dev: true - /@storybook/preview-api@7.4.2: - resolution: {integrity: sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg==} - dependencies: - '@storybook/channels': 7.4.2 - '@storybook/client-logger': 7.4.2 - '@storybook/core-events': 7.4.2 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/types': 7.4.2 - '@types/qs': 6.9.7 - dequal: 2.0.3 - lodash: 4.17.21 - memoizerific: 1.11.3 - qs: 6.11.1 - synchronous-promise: 2.0.17 - ts-dedent: 2.2.0 - util-deprecate: 1.0.2 - dev: true - /@storybook/preview-api@7.4.3: resolution: {integrity: sha512-qKwfH2+qN1Zpz2UX6dQLiTU5x2JH3o/+jOY4GYF6c3atTm5WAu1OvCYAJVb6MdXfAhZNuPwDKnJR8VmzWplWBg==} dependencies: @@ -6916,22 +6743,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/telemetry@7.4.2: - resolution: {integrity: sha512-ZAh1Bjk9JVpL5j0Aj3PHr3XEDZcOrFeugVyRuuul2gAyu6SbpPhl8Dd2Wr9YJS0ZDWs3u0CgKRCeFPPAi3QosA==} - dependencies: - '@storybook/client-logger': 7.4.2 - '@storybook/core-common': 7.4.2 - '@storybook/csf-tools': 7.4.2 - chalk: 4.1.2 - detect-package-manager: 2.0.1 - fetch-retry: 5.0.4 - fs-extra: 11.1.1 - read-pkg-up: 7.0.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - /@storybook/telemetry@7.4.3: resolution: {integrity: sha512-gA7QfQSdDocNKP0KfrmIhD8ZgW5G4zZD/NL0OsATlkL3H/DehH3Ugjfffh7Ao2JZRXogHp8p9EQCVfPW7iKgBQ==} dependencies: @@ -6970,15 +6781,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/types@7.4.2: - resolution: {integrity: sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ==} - dependencies: - '@storybook/channels': 7.4.2 - '@types/babel__core': 7.20.0 - '@types/express': 4.17.17 - file-system-cache: 2.3.0 - dev: true - /@storybook/types@7.4.3: resolution: {integrity: sha512-DrHC1hIiw9TqDILLokDnvbUPNxGz5iJaYFEv30uvYE0s9MvgEUPblCChEUjaHOps7zQTznMPf8ULfoXlgqxk2A==} dependencies: @@ -7040,7 +6842,7 @@ packages: - supports-color dev: true - /@swc/cli@0.1.62(@swc/core@1.3.86)(chokidar@3.5.3): + /@swc/cli@0.1.62(@swc/core@1.3.87)(chokidar@3.5.3): resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==} engines: {node: '>= 12.13'} hasBin: true @@ -7052,7 +6854,7 @@ packages: optional: true dependencies: '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.3.86 + '@swc/core': 1.3.87 chokidar: 3.5.3 commander: 7.2.0 fast-glob: 3.3.1 @@ -7081,8 +6883,8 @@ packages: dev: false optional: true - /@swc/core-darwin-arm64@1.3.86: - resolution: {integrity: sha512-hMvSDms0sJJHNtRa3Vhmr9StWN1vmikbf5VE0IZUYGnF1/JZTkXU1h6CdNUY4Hr6i7uCZjH6BEhxFHX1JtKV4w==} + /@swc/core-darwin-arm64@1.3.87: + resolution: {integrity: sha512-/LxLjPat1LA9CXS7Cn2M4MIqwNOoDF4KjcikPkO08H54rd6WubhaJnr0sLDjms3adRr+pmcCL0yfsUBTX//85A==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -7098,8 +6900,8 @@ packages: dev: false optional: true - /@swc/core-darwin-x64@1.3.86: - resolution: {integrity: sha512-Jro6HVH4uSOBM7tTDaQNKLNc8BJV7n+SO+Ft2HAZINyeKJS/8MfEYneG7Vmqg18gv00c6dz9AOCcyz+BR7BFkQ==} + /@swc/core-darwin-x64@1.3.87: + resolution: {integrity: sha512-hjSQNcW9BN8gEz3UQZ7Ye80ymbkFHLkUDeEek4lorRyq6S+uxvbL1f1mJAZnFPBpove7AXusykIalWMPvyOR2A==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -7126,8 +6928,8 @@ packages: dev: false optional: true - /@swc/core-linux-arm-gnueabihf@1.3.86: - resolution: {integrity: sha512-wYB9m0pzXJVSzedXSl4JwS3gKtvcPinpe9MbkddezpqL7OjyDP6pHHW9qIucsfgCrtMtbPC2nqulXLPtAAyIjw==} + /@swc/core-linux-arm-gnueabihf@1.3.87: + resolution: {integrity: sha512-JVyNIO3tGLPSQ59rJXeKaykTpPhRNozB+7PtYMvMcxpUbYGpEzWxTPkFAX2KKPvl0ejBdA0GW5OXeuPMvTwE0w==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -7143,8 +6945,8 @@ packages: dev: false optional: true - /@swc/core-linux-arm64-gnu@1.3.86: - resolution: {integrity: sha512-fR44IyK5cdCaO8cC++IEH0Jn03tWnunJnjzA99LxlE5TRInSIOvFm+g5OSUQZDAvEXmQ38sd31LO2HOoDS1Edw==} + /@swc/core-linux-arm64-gnu@1.3.87: + resolution: {integrity: sha512-gLdZKIoql5vjrNjrwwsiS7d3vOAIzYUWqN97iGCSscQOg0MgYbfUnSTO4UEvH4BYlwRNlHepfTZ7ALoG8areUQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -7160,8 +6962,8 @@ packages: dev: false optional: true - /@swc/core-linux-arm64-musl@1.3.86: - resolution: {integrity: sha512-EUPfdbK4dUk/nkX3Vmv/47XH+DqHOa9JI0CTthvJ8/ZXei1MKDUsUc+tI1zMQX2uCuSkSWsEIEpCmA0tMwFhtw==} + /@swc/core-linux-arm64-musl@1.3.87: + resolution: {integrity: sha512-WQ5tirVBiU8lUODQ25dt8JRCZHyRDInBe4fkGuxzImMa017zYPWa2WxrKK8LdDF7DzrAITlGl9VeoeE/l0WJbw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -7177,8 +6979,8 @@ packages: dev: false optional: true - /@swc/core-linux-x64-gnu@1.3.86: - resolution: {integrity: sha512-snVZZWv8XgNVaKrTxtO3rUN+BbbB6I8Fqwe8zM/DWGJ096J13r89doQ48x5ZyO+bW4D48eZIWP5pdfSW7oBE3w==} + /@swc/core-linux-x64-gnu@1.3.87: + resolution: {integrity: sha512-/vQSH7ZKOuT1It9GzpJ9UFnsOP/dQr1VLUrKQFBlHp9owIWNb2oUrZdNla+KhljCIIahh0JfQ08sycKeycCNzQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -7194,8 +6996,8 @@ packages: dev: false optional: true - /@swc/core-linux-x64-musl@1.3.86: - resolution: {integrity: sha512-PnnksUJymEJkdnbV2orOSOSB441UqsxYbJge9zbr5UTRXUfWO3eFRV0iTBegjTlOQGbW6yN+YRSDkenTbmCI6g==} + /@swc/core-linux-x64-musl@1.3.87: + resolution: {integrity: sha512-C1NUeISJDyMlIk4919bjcpHvjyjzbkjW7v53gUdN41Y4BPlEk7UKcLez7UHMjdMGA/o9721SLqYVp4/NrQErUw==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -7211,8 +7013,8 @@ packages: dev: false optional: true - /@swc/core-win32-arm64-msvc@1.3.86: - resolution: {integrity: sha512-XlGEGyHwLndm08VvgeAPGj40L+Hx575MQC+2fsyB1uSNUN+uf7fvke+wc7k50a92CaQe/8foLyIR5faayozEJA==} + /@swc/core-win32-arm64-msvc@1.3.87: + resolution: {integrity: sha512-AE7JKDJ0OsV9LsYGFfYKMTkGNfsy1au4RT5jT1rxr5MTOsmMD7P2mgiRF8drgc1WX3uOJbTHQfgdVTYroAGfdA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -7228,8 +7030,8 @@ packages: dev: false optional: true - /@swc/core-win32-ia32-msvc@1.3.86: - resolution: {integrity: sha512-U1BhZa1x9yn+wZGTQmt1cYR79a0FzW/wL6Jas1Pn0bykKLxdRU4mCeZt2P+T3buLm8jr8LpPWiCrbvr658PzwA==} + /@swc/core-win32-ia32-msvc@1.3.87: + resolution: {integrity: sha512-2V+5uvisaTPXd5lvTujNLNlEC2LPo07gEUQVGdKGsbhtLAYAggVXBnHjxU1TkuyA6NlciMS59tPKW+L2u2KpTw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -7245,16 +7047,16 @@ packages: dev: false optional: true - /@swc/core-win32-x64-msvc@1.3.86: - resolution: {integrity: sha512-wRoQUajqpE3wITHhZVj/6BPu/QwHriFHLHuJA+9y6PeGtUtTmntL42aBKXIFhfL767dYFtohyNg1uZ9eqbGyGQ==} + /@swc/core-win32-x64-msvc@1.3.87: + resolution: {integrity: sha512-2Xak7TidlRuNQamLZC3fEOdUCmMiBzD2BW8+Dnn29f4odzamgAFfeYJ/PnqN7jdTWOINLn95tex4JBm3Pm11HQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.3.86: - resolution: {integrity: sha512-bEXUtm37bcmJ3q+geG7Zy4rJNUzpxalXQUrrqX1ZoGj3HRtzdeVZ0L/um3fG2j16qe61t8TX/OIZ2G6j6dkG/w==} + /@swc/core@1.3.87: + resolution: {integrity: sha512-u33Mi/EBvb+g/xpYKyxODB5XvKYqISmy81J+lhFS/Oahja0PbJWZdKEGwSQEFvBecp6E+PfaTOLPOoF1EWcRrw==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -7265,25 +7067,25 @@ packages: dependencies: '@swc/types': 0.1.4 optionalDependencies: - '@swc/core-darwin-arm64': 1.3.86 - '@swc/core-darwin-x64': 1.3.86 - '@swc/core-linux-arm-gnueabihf': 1.3.86 - '@swc/core-linux-arm64-gnu': 1.3.86 - '@swc/core-linux-arm64-musl': 1.3.86 - '@swc/core-linux-x64-gnu': 1.3.86 - '@swc/core-linux-x64-musl': 1.3.86 - '@swc/core-win32-arm64-msvc': 1.3.86 - '@swc/core-win32-ia32-msvc': 1.3.86 - '@swc/core-win32-x64-msvc': 1.3.86 + '@swc/core-darwin-arm64': 1.3.87 + '@swc/core-darwin-x64': 1.3.87 + '@swc/core-linux-arm-gnueabihf': 1.3.87 + '@swc/core-linux-arm64-gnu': 1.3.87 + '@swc/core-linux-arm64-musl': 1.3.87 + '@swc/core-linux-x64-gnu': 1.3.87 + '@swc/core-linux-x64-musl': 1.3.87 + '@swc/core-win32-arm64-msvc': 1.3.87 + '@swc/core-win32-ia32-msvc': 1.3.87 + '@swc/core-win32-x64-msvc': 1.3.87 - /@swc/jest@0.2.29(@swc/core@1.3.86): + /@swc/jest@0.2.29(@swc/core@1.3.87): resolution: {integrity: sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 27.5.1 - '@swc/core': 1.3.86 + '@swc/core': 1.3.87 jsonc-parser: 3.2.0 dev: true @@ -7460,7 +7262,7 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/jest-dom@6.1.2(@types/jest@28.1.3)(vitest@0.34.4): + /@testing-library/jest-dom@6.1.2(@types/jest@28.1.3)(vitest@0.34.5): resolution: {integrity: sha512-NP9jl1Q2qDDtx+cqogowtQtmgD2OVs37iMSIsTv5eN5ETRkf26Kj6ugVwA93/gZzzFWQAsgkKkcftDe91BJCkQ==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} peerDependencies: @@ -7487,7 +7289,7 @@ packages: dom-accessibility-api: 0.5.16 lodash: 4.17.21 redent: 3.0.0 - vitest: 0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) + vitest: 0.34.5(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) dev: true /@testing-library/user-event@14.4.3(@testing-library/dom@9.2.0): @@ -8300,8 +8102,8 @@ packages: vite: 4.4.9(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0) vue: 3.3.4 - /@vitest/coverage-v8@0.34.4(vitest@0.34.4): - resolution: {integrity: sha512-TZ5ghzhmg3COQqfBShL+zRQEInHmV9TSwghTdfkHpCTyTOr+rxo6x41vCNcVfWysWULtqtBVpY6YFNovxnESfA==} + /@vitest/coverage-v8@0.34.5(vitest@0.34.5): + resolution: {integrity: sha512-97xjhRTSdmeeHCm2nNHhT3hLsMYkAhHXm/rwj6SZ3voka8xiCJrwgtfIjoZIFEL4OO0KezGmVuHWQXcMunULIA==} peerDependencies: vitest: '>=0.32.0 <1' dependencies: @@ -8316,43 +8118,43 @@ packages: std-env: 3.3.3 test-exclude: 6.0.0 v8-to-istanbul: 9.1.0 - vitest: 0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) + vitest: 0.34.5(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@0.34.4: - resolution: {integrity: sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA==} + /@vitest/expect@0.34.5: + resolution: {integrity: sha512-/3RBIV9XEH+nRpRMqDJBufKIOQaYUH2X6bt0rKSCW0MfKhXFLYsR5ivHifeajRSTsln0FwJbitxLKHSQz/Xwkw==} dependencies: - '@vitest/spy': 0.34.4 - '@vitest/utils': 0.34.4 + '@vitest/spy': 0.34.5 + '@vitest/utils': 0.34.5 chai: 4.3.7 dev: true - /@vitest/runner@0.34.4: - resolution: {integrity: sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w==} + /@vitest/runner@0.34.5: + resolution: {integrity: sha512-RDEE3ViVvl7jFSCbnBRyYuu23XxmvRTSZWW6W4M7eC5dOsK75d5LIf6uhE5Fqf809DQ1+9ICZZNxhIolWHU4og==} dependencies: - '@vitest/utils': 0.34.4 + '@vitest/utils': 0.34.5 p-limit: 4.0.0 pathe: 1.1.1 dev: true - /@vitest/snapshot@0.34.4: - resolution: {integrity: sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw==} + /@vitest/snapshot@0.34.5: + resolution: {integrity: sha512-+ikwSbhu6z2yOdtKmk/aeoDZ9QPm2g/ZO5rXT58RR9Vmu/kB2MamyDSx77dctqdZfP3Diqv4mbc/yw2kPT8rmA==} dependencies: magic-string: 0.30.3 pathe: 1.1.1 pretty-format: 29.7.0 dev: true - /@vitest/spy@0.34.4: - resolution: {integrity: sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g==} + /@vitest/spy@0.34.5: + resolution: {integrity: sha512-epsicsfhvBjRjCMOC/3k00mP/TBGQy8/P0DxOFiWyLt55gnZ99dqCfCiAsKO17BWVjn4eZRIjKvcqNmSz8gvmg==} dependencies: tinyspy: 2.1.1 dev: true - /@vitest/utils@0.34.4: - resolution: {integrity: sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg==} + /@vitest/utils@0.34.5: + resolution: {integrity: sha512-ur6CmmYQoeHMwmGb0v+qwkwN3yopZuZyf4xt1DBBSGBed8Hf9Gmbm/5dEWqgpLPdRx6Av6jcWXrjcKfkTzg/pw==} dependencies: diff-sequences: 29.6.3 loupe: 2.3.6 @@ -8448,8 +8250,8 @@ packages: '@vue/compiler-dom': 3.3.4 '@vue/shared': 3.3.4 - /@vue/language-core@1.8.11(typescript@5.2.2): - resolution: {integrity: sha512-+MZOBGqGwfld6hpo0DB47x8eNM0dNqk15ZdfOhj19CpvuYuOWCeVdOEGZunKDyo3QLkTn3kLOSysJzg7FDOQBA==} + /@vue/language-core@1.8.13(typescript@5.2.2): + resolution: {integrity: sha512-nata2fYBZAkl4QJrU+IcArJCMTHt1VP8ePL/Z7eUPC2AF+Cm7Qgo9ksNCPBzZRh1LYjCaSaqV7njqNogwpsMVg==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -8518,11 +8320,11 @@ packages: '@vue/server-renderer': 3.3.4(vue@3.3.4) dev: true - /@vue/typescript@1.8.11(typescript@5.2.2): - resolution: {integrity: sha512-skUmMDiPUUtu1flPmf2YybF+PX8IzBtMioQOaNn6Ck/RhdrPJGj1AX/7s3Buf9G6ln+/KHR1XQuti/FFxw5XVA==} + /@vue/typescript@1.8.13(typescript@5.2.2): + resolution: {integrity: sha512-ALJjHFqQ3dgZVCI/ogAS/dZ7JEhIi1N0Em5I7uwabY1p9RDRK3odLsycMHyxZRjm5dLI15c07eeBloHiD2Otlg==} dependencies: '@volar/typescript': 1.10.0 - '@vue/language-core': 1.8.11(typescript@5.2.2) + '@vue/language-core': 1.8.13(typescript@5.2.2) transitivePeerDependencies: - typescript dev: true @@ -9448,8 +9250,8 @@ packages: dependencies: node-gyp-build: 4.6.0 - /bullmq@4.11.2: - resolution: {integrity: sha512-ffDw8B2+N8x+HVRTb9/nEngb3ubEYb8vdKKTJfUiUoPWPUcHzCkylSVWWf7dcr6KjzKElaCWEjVsKzHjmyhmnw==} + /bullmq@4.11.3: + resolution: {integrity: sha512-Z5zmgK2gJ+FIFhPBHpB5zRGGD2/89MMm/qIM3SMrt1fgP7RCy7y4qGrQVj7OmuNr43y8UG0UtQlYVADpSZAVTA==} dependencies: cron-parser: 4.8.1 glob: 8.1.0 @@ -10851,14 +10653,6 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /ejs@3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.5 - dev: true - /ejs@3.1.9: resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} @@ -17941,9 +17735,9 @@ packages: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} dev: false - /start-server-and-test@2.0.0: - resolution: {integrity: sha512-UqKLw0mJbfrsG1jcRLTUlvuRi9sjNuUiDOLI42r7R5fA9dsFoywAy9DoLXNYys9B886E4RCKb+qM1Gzu96h7DQ==} - engines: {node: '>=6'} + /start-server-and-test@2.0.1: + resolution: {integrity: sha512-8PFo4DLLLCDMuS51/BEEtE1m9CAXw1LNVtZSS1PzkYQh6Qf9JUwM4huYeSoUumaaoAyuwYBwCa9OsrcpMqcOdQ==} + engines: {node: '>=16'} hasBin: true dependencies: arg: 5.0.2 @@ -17977,11 +17771,11 @@ packages: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} dev: true - /storybook@7.4.2: - resolution: {integrity: sha512-UuYmdxEWEQAepfjgQFbbHTq47Xxpw16naAvJ9n/nsjMnOhYupm1ZIdWYaeNjz4LOfz+1WzgU7us0IvaBrxzl4g==} + /storybook@7.4.3: + resolution: {integrity: sha512-afp7trR23jKt8ruGMPjkNAk3A/4CaLo20iPWAODznlF7u+XWnqGm1S+ZUiJFf13Jzj8jmJf/d7/xDHxY3qVMUA==} hasBin: true dependencies: - '@storybook/cli': 7.4.2 + '@storybook/cli': 7.4.3 transitivePeerDependencies: - bufferutil - encoding @@ -19134,8 +18928,8 @@ packages: core-util-is: 1.0.2 extsprintf: 1.3.0 - /vite-node@0.34.4(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0): - resolution: {integrity: sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ==} + /vite-node@0.34.5(@types/node@20.6.3)(sass@1.68.0)(terser@5.20.0): + resolution: {integrity: sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==} engines: {node: '>=v14.18.0'} hasBin: true dependencies: @@ -19197,20 +18991,20 @@ packages: optionalDependencies: fsevents: 2.3.2 - /vitest-fetch-mock@0.2.2(vitest@0.34.4): + /vitest-fetch-mock@0.2.2(vitest@0.34.5): resolution: {integrity: sha512-XmH6QgTSjCWrqXoPREIdbj40T7i1xnGmAsTAgfckoO75W1IEHKR8hcPCQ7SO16RsdW1t85oUm6pcQRLeBgjVYQ==} engines: {node: '>=14.14.0'} peerDependencies: vitest: '>=0.16.0' dependencies: cross-fetch: 3.1.5 - vitest: 0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) + vitest: 0.34.5(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0) transitivePeerDependencies: - encoding dev: true - /vitest@0.34.4(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0): - resolution: {integrity: sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw==} + /vitest@0.34.5(happy-dom@10.0.3)(sass@1.68.0)(terser@5.20.0): + resolution: {integrity: sha512-CPI68mmnr2DThSB3frSuE5RLm9wo5wU4fbDrDwWQQB1CWgq9jQVoQwnQSzYAjdoBOPoH2UtXpOgHVge/uScfZg==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -19243,11 +19037,11 @@ packages: '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 '@types/node': 20.6.3 - '@vitest/expect': 0.34.4 - '@vitest/runner': 0.34.4 - '@vitest/snapshot': 0.34.4 - '@vitest/spy': 0.34.4 - '@vitest/utils': 0.34.4 + '@vitest/expect': 0.34.5 + '@vitest/runner': 0.34.5 + '@vitest/snapshot': 0.34.5 + '@vitest/spy': 0.34.5 + '@vitest/utils': 0.34.5 acorn: 8.10.0 acorn-walk: 8.2.0 cac: 6.7.14 @@ -19263,7 +19057,7 @@ packages: 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.4(@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) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -19343,14 +19137,14 @@ packages: he: 1.2.0 dev: true - /vue-tsc@1.8.11(typescript@5.2.2): - resolution: {integrity: sha512-BzfiMdPqDHBlysx4g26NkfVHSQwGD/lTRausmxN9sFyjXz34OWfsbkh0YsVkX84Hu65In1fFlxHiG39Tr4Vojg==} + /vue-tsc@1.8.13(typescript@5.2.2): + resolution: {integrity: sha512-Hl8zUXPVK2KzPtbXeMCN0CSFkwvD96YOtYt9KvJPG9W8QGcNpGk9KHwPuGMxA8blWXSIli7gtsoC+clICEVdVg==} hasBin: true peerDependencies: typescript: '*' dependencies: - '@vue/language-core': 1.8.11(typescript@5.2.2) - '@vue/typescript': 1.8.11(typescript@5.2.2) + '@vue/language-core': 1.8.13(typescript@5.2.2) + '@vue/typescript': 1.8.13(typescript@5.2.2) semver: 7.5.4 typescript: 5.2.2 dev: true