diff --git a/.github/workflows/api-misskey-js.yml b/.github/workflows/api-misskey-js.yml new file mode 100644 index 0000000000..6411d63bd5 --- /dev/null +++ b/.github/workflows/api-misskey-js.yml @@ -0,0 +1,36 @@ +name: API report (misskey.js) + +on: [push, pull_request] + +jobs: + report: + + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3.3.0 + + - run: corepack enable + + - name: Setup Node.js + uses: actions/setup-node@v3.6.0 + with: + node-version: 18.x + cache: 'pnpm' + + - name: Install dependencies + run: pnpm i --frozen-lockfile + + - name: Build + run: pnpm --filter misskey-js build + + - name: Check files + run: ls packages/misskey-js/built + + - name: API report + run: pnpm --filter misskey-js api-prod + + - name: Show report + if: always() + run: cat packages/misskey-js/temp/misskey-js.api.md diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d65076ebb2..1c6615e17f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -36,6 +36,7 @@ jobs: - backend - frontend - sw + - misskey-js steps: - uses: actions/checkout@v3.3.0 with: @@ -61,6 +62,7 @@ jobs: matrix: workspace: - backend + - misskey-js steps: - uses: actions/checkout@v3.3.0 with: diff --git a/.github/workflows/test-misskey-js.yml b/.github/workflows/test-misskey-js.yml new file mode 100644 index 0000000000..b15e704c7f --- /dev/null +++ b/.github/workflows/test-misskey-js.yml @@ -0,0 +1,52 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Test (misskey.js) + +on: + push: + branches: [ develop ] + pull_request: + branches: [ develop ] + +jobs: + test: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - name: Checkout + uses: actions/checkout@v3.3.0 + + - run: corepack enable + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3.6.0 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + + - name: Install dependencies + run: pnpm i --frozen-lockfile + + - name: Check pnpm-lock.yaml + run: git diff --exit-code pnpm-lock.yaml + + - name: Build + run: pnpm --filter misskey-js build + + - name: Test + run: pnpm --filter misskey-js test + env: + CI: true + + - name: Upload Coverage + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./packages/misskey-js/coverage/coverage-final.json diff --git a/.gitignore b/.gitignore index c413cd4da9..29420311b8 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,7 @@ api-docs.json .DS_Store /files ormconfig.json +temp # blender backups *.blend1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c792b537b..be47a3db27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,25 @@ --> -## 13.10.3 (unreleased) +## 13.x.x (unreleased) + +### General +- + +### Client +- 検索ページでURLを入力した際に照会したときと同等の挙動をするように +- ノートのリアクションを大きく表示するオプションを追加 + +### Server +- + +## 13.10.3 + +### Changes +- オブジェクトストレージのリージョン指定が必須になりました + - リージョンの指定の無いサービスは us-east-1 を設定してください + - 値が空の場合は設定ファイルまたは環境変数の使用を試みます + - e.g. ~/aws/config, AWS_REGION ### General - コンディショナルロールの条件に「投稿数が~以下」「投稿数が~以上」を追加 diff --git a/Dockerfile b/Dockerfile index fd0b5e1c9f..8db7400c9f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,7 @@ COPY --link ["scripts", "./scripts"] COPY --link ["packages/backend/package.json", "./packages/backend/"] COPY --link ["packages/frontend/package.json", "./packages/frontend/"] COPY --link ["packages/sw/package.json", "./packages/sw/"] +COPY --link ["packages/misskey-js/package.json", "./packages/misskey-js/"] RUN --mount=type=cache,target=/root/.local/share/pnpm/store,sharing=locked \ pnpm i --frozen-lockfile --aggregate-output diff --git a/locales/de-DE.yml b/locales/de-DE.yml index f6c28fbded..aed515d2b0 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -460,7 +460,7 @@ aboutX: "Über {x}" emojiStyle: "Emoji-Stil" native: "Nativ" disableDrawer: "Keine ausfahrbaren Menüs verwenden" -showNoteActionsOnlyHover: "Aktionen für Notizen nur bei Mouseover anzeigen" +showNoteActionsOnlyHover: "Notizmenü nur bei Mouseover anzeigen" noHistory: "Kein Verlauf gefunden" signinHistory: "Anmeldungsverlauf" enableAdvancedMfm: "Erweitertes MFM aktivieren" @@ -980,6 +980,9 @@ drivecleaner: "Drive-Reiniger" retryAllQueuesNow: "Sofort Warteschlangen erneut ausführen" retryAllQueuesConfirmTitle: "Wirklich erneut versuchen?" retryAllQueuesConfirmText: "Dies wird zu einer temporären Erhöhung der Serverlast führen." +enableChartsForRemoteUser: "Diagramme für Nutzer fremder Instanzen erstellen" +enableChartsForFederatedInstances: "Diagramme für fremde Instanzen erstellen" +showClipButtonInNoteFooter: "\"Clip\" zum Notizmenu hinzufügen" _achievements: earnedAt: "Freigeschaltet am" _types: @@ -1877,6 +1880,17 @@ _drivecleaner: orderBySizeDesc: "Absteigende Dateigrößen" orderByCreatedAtAsc: "Aufsteigendes Erstelldatum" _webhookSettings: + createWebhook: "Webhook erstellen" name: "Name" + secret: "Secret" + events: "Webhook-Ereignisse" active: "Aktiviert" + _events: + follow: "Wenn du jemandem folgst" + followed: "Wenn dir jemand folgt" + note: "Wenn du eine Notiz schickst" + reply: "Wenn du eine Antwort erhältst" + renote: "Wenn du ein Renote erhältst" + reaction: "Wenn du eine Reaktion erhältst" + mention: "Wenn du erwähnt wirst" diff --git a/locales/en-US.yml b/locales/en-US.yml index ef4208d251..6489919e8a 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -980,6 +980,9 @@ drivecleaner: "Drive Cleaner" retryAllQueuesNow: "Retry running all queues" retryAllQueuesConfirmTitle: "Really retry all?" retryAllQueuesConfirmText: "This will temporarily increase the server load." +enableChartsForRemoteUser: "Generate remote user data charts" +enableChartsForFederatedInstances: "Generate remote instance data charts" +showClipButtonInNoteFooter: "Add \"Clip\" to note action menu" _achievements: earnedAt: "Unlocked at" _types: @@ -1877,6 +1880,17 @@ _drivecleaner: orderBySizeDesc: "Descending Filesizes" orderByCreatedAtAsc: "Ascending Dates" _webhookSettings: + createWebhook: "Create Webhook" name: "Name" + secret: "Secret" + events: "Webhook Events" active: "Enabled" + _events: + follow: "When following a user" + followed: "When being followed" + note: "When posting a note" + reply: "When receiving a reply" + renote: "When renoted" + reaction: "When receiving a reaction" + mention: "When being mentioned" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index cf4ede30b6..67f0634346 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -500,7 +500,7 @@ objectStoragePrefixDesc: "このprefixのディレクトリ下に格納されま objectStorageEndpoint: "Endpoint" objectStorageEndpointDesc: "S3の場合は空、それ以外の場合は各サービスのendpointを指定してください。''または':'のように指定します。" objectStorageRegion: "Region" -objectStorageRegionDesc: "'xx-east-1'のようなregionを指定してください。使用サービスにregionの概念がない場合は、空または'us-east-1'にしてください。" +objectStorageRegionDesc: "'xx-east-1'のようなregionを指定してください。使用サービスにregionの概念がない場合は'us-east-1'にしてください。AWS設定ファイルまたは環境変数を参照する場合は空にしてください。" objectStorageUseSSL: "SSLを使用する" objectStorageUseSSLDesc: "API接続にhttpsを使用しない場合はオフにしてください" objectStorageUseProxy: "Proxyを利用する" @@ -983,6 +983,7 @@ retryAllQueuesConfirmText: "一時的にサーバーの負荷が増大するこ enableChartsForRemoteUser: "リモートユーザーのチャートを生成" enableChartsForFederatedInstances: "リモートサーバーのチャートを生成" showClipButtonInNoteFooter: "ノートのアクションにクリップを追加" +largeNoteReactions: "ノートのリアクションを大きく表示" _achievements: earnedAt: "獲得日時" diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index c4c7c170ea..5b1b312b78 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -980,6 +980,9 @@ drivecleaner: "ドライブキレイキレイ" retryAllQueuesNow: "キューを全部もっかいやり直す" retryAllQueuesConfirmTitle: "もっかいやってみるか?" retryAllQueuesConfirmText: "一時的にサーバー重なるかもしれへんで。" +enableChartsForRemoteUser: "リモートユーザーのチャートを作る" +enableChartsForFederatedInstances: "リモートサーバーのチャートを作る" +showClipButtonInNoteFooter: "ノートのアクションにクリップを追加" _achievements: earnedAt: "貰った日ぃ" _types: @@ -1276,6 +1279,8 @@ _role: followersMoreThanOrEq: "フォロワー数が~以上" followingLessThanOrEq: "フォロー数が~以下" followingMoreThanOrEq: "フォロー数が~以上" + notesLessThanOrEq: "投稿数が~以下しかない" + notesMoreThanOrEq: "投稿を~以上しとる" and: "~かつ~" or: "~または~" not: "~ではない" @@ -1875,6 +1880,17 @@ _drivecleaner: orderBySizeDesc: "サイズのでかい順" orderByCreatedAtAsc: "追加日の古い順" _webhookSettings: + createWebhook: "Webhookをつくる" name: "名前" + secret: "シークレット" + events: "Webhookを投げるタイミング" active: "有効" + _events: + follow: "フォローしたとき~!" + followed: "フォローもらったとき~!" + note: "ノートを投稿したとき~!" + reply: "返信があるとき~!" + renote: "Renoteされるとき~!" + reaction: "リアクションがあるとき~!" + mention: "メンションがあるとき~!" diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index cc0bbb1fac..cc71e8777f 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -129,6 +129,7 @@ unblockConfirm: "Czy na pewno chcesz odblokować to konto?" suspendConfirm: "Czy na pewno chcesz zawiesić to konto?" unsuspendConfirm: "Czy na pewno chcesz cofnąć zawieszenie tego konta?" selectList: "Wybierz listę" +selectChannel: "Wybierz kanał" selectAntenna: "Wybierz Antennę" selectWidget: "Wybierz widżet" editWidgets: "Edytuj widżety" @@ -149,6 +150,7 @@ flagAsCatDescription: "Przełącz tę opcję, aby konto było oznaczone jako kot flagShowTimelineReplies: "Pokazuj odpowiedzi na osi czasu" autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, których obserwujesz" addAccount: "Dodaj konto" +reloadAccountsList: "Odśwież listę kont" loginFailed: "Nie udało się zalogować" showOnRemote: "Zobacz na zdalnej instancji" general: "Ogólne" @@ -159,6 +161,7 @@ searchWith: "Szukaj: {q}" youHaveNoLists: "Nie masz żadnej listy" followConfirm: "Czy na pewno chcesz zaobserwować {name}?" proxyAccount: "Konto proxy" +proxyAccountDescription: "Opis konta pełnomocniczego" host: "Host" selectUser: "Wybierz użytkownika" recipient: "Odbiorca" @@ -253,6 +256,7 @@ noMoreHistory: "Nie ma dalszej historii" startMessaging: "Rozpocznij czat" nUsersRead: "przeczytano przez {n}" agreeTo: "Wyrażam zgodę na {0}" +agreeBelow: "Zaakceptuj poniżej" tos: "Regulamin" start: "Rozpocznij" home: "Strona główna" @@ -385,13 +389,19 @@ about: "Informacje" aboutMisskey: "O Misskey" administrator: "Admin" token: "Token" +2fa: "Klucz 2FA " +totp: "Klucz aplikacji uwierzytelniającej (totp)" +totpDescription: "Opis klucza czasowego" moderator: "Moderator" moderation: "Moderacja" nUsersMentioned: "{n} wspomnianych użytkowników" +securityKeyAndPasskey: "Klucz bezpieczeństwa i klucze Passkey" securityKey: "Klucz bezpieczeństwa" lastUsed: "Ostatnio używane" +lastUsedAt: "Ostatnio używane w" unregister: "Cofnij rejestrację" passwordLessLogin: "Skonfiguruj logowanie bez użycia hasła" +passwordLessLoginDescription: "Opis logowania bez użycia hasła" resetPassword: "Zresetuj hasło" newPasswordIs: "Nowe hasło to „{password}”" reduceUiAnimation: "Ogranicz animacje w UI" @@ -518,11 +528,16 @@ disablePagesScript: "Wyłącz AiScript na Stronach" updateRemoteUser: "Aktualizuj zdalne dane o użytkowniku" deleteAllFiles: "Usuń wszystkie pliki" deleteAllFilesConfirm: "Czy na pewno chcesz usunąć wszystkie pliki?" +removeAllFollowing: "Przestań obserwować" removeAllFollowingDescription: "Przestań obserwować wszystkie konta z {host}. Wykonaj to, jeżeli instancja już nie istnieje." userSuspended: "To konto zostało zawieszone." userSilenced: "Ten użytkownik został wyciszony." yourAccountSuspendedTitle: "To konto jest zawieszone" yourAccountSuspendedDescription: "To konto zostało zawieszone z powodu złamania regulaminu serwera lub innych podobnych. Skontaktuj się z administratorem, jeśli chciałbyś poznać bardziej szczegółowy powód. Proszę nie zakładać nowego konta." +tokenRevoked: "Token odrzucony" +tokenRevokedDescription: "Opis odrzuconego tokena" +accountDeleted: "Konto usunięte" +accountDeletedDescription: "Opis konta usuniętego" menu: "Menu" divider: "Rozdzielacz" addItem: "Dodaj element" @@ -548,7 +563,9 @@ author: "Autor" leaveConfirm: "Są niezapisane zmiany. Czy chcesz je odrzucić?" manage: "Zarządzanie" plugins: "Wtyczki" +preferencesBackups: "Kopia zapasowa ustawień" deck: "Tablica" +undeck: "oddkouj" useBlurEffectForModal: "Używaj efektu rozmycia w modalach" useFullReactionPicker: "Używaj pełnowymiarowego wybornika reakcji" width: "Szerokość" @@ -815,6 +832,8 @@ tenMinutes: "10 minut" oneHour: "1 godzina" oneDay: "1 dzień" oneWeek: "1 tydzień" +oneMonth: "jeden miesiąc" +failedToFetchAccountInformation: "Nie udało się uzyskać informacji o koncie" file: "Pliki" recommended: "Zalecane" check: "Zweryfikuj" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index c687c47a17..244528cc21 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -980,6 +980,9 @@ drivecleaner: "网盘整理" retryAllQueuesNow: "立刻重试所有队列" retryAllQueuesConfirmTitle: "要再尝试一次吗?" retryAllQueuesConfirmText: "可能会使服务器负荷在一定时间内增加" +enableChartsForRemoteUser: "生成远程用户的图表" +enableChartsForFederatedInstances: "生成远程服务器的图表" +showClipButtonInNoteFooter: "在贴文下方显示便签按钮" _achievements: earnedAt: "达成时间" _types: @@ -1276,6 +1279,8 @@ _role: followersMoreThanOrEq: "关注者不少于" followingLessThanOrEq: "关注中不多于" followingMoreThanOrEq: "关注中不少于" + notesLessThanOrEq: "帖子数在~以下" + notesMoreThanOrEq: "帖子数在~以上" and: "符合以下全部条件" or: "符合以下任一条件" not: "不符合以下任何条件" @@ -1875,6 +1880,17 @@ _drivecleaner: orderBySizeDesc: "按大小降序排列" orderByCreatedAtAsc: "按添加日期降序排列" _webhookSettings: + createWebhook: "创建 Webhook" name: "名称" + secret: "密钥" + events: "何时运行Webhook" active: "已启用" + _events: + follow: "关注时" + followed: "被关注时" + note: "发布贴文时" + reply: "收到回复时" + renote: "被转发时" + reaction: "被回应时" + mention: "被提及时" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index e031a88f4b..c0dcda5831 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: "實例" @@ -99,9 +99,9 @@ followRequestPending: "追隨許可批准中" enterEmoji: "輸入表情符號" renote: "轉發" unrenote: "取消轉發" -renoted: "轉傳成功" +renoted: "轉發成功" cantRenote: "無法轉發此貼文。" -cantReRenote: "無法轉傳之前已經轉傳過的內容。" +cantReRenote: "無法轉發之前已經轉發過的內容。" quote: "引用" inChannelRenote: "在頻道內轉發" inChannelQuote: "在頻道內引用" @@ -980,6 +980,9 @@ drivecleaner: "雲端硬碟清掃器" retryAllQueuesNow: "立刻重試所有佇列" retryAllQueuesConfirmTitle: "要現在重試嗎?" retryAllQueuesConfirmText: "伺服器的負荷可能會暫時增加。" +enableChartsForRemoteUser: "生成遠端用戶的圖表" +enableChartsForFederatedInstances: "生成遠端伺服器的圖表" +showClipButtonInNoteFooter: "將摘錄添加至貼文" _achievements: earnedAt: "獲得日期" _types: @@ -1096,7 +1099,7 @@ _achievements: title: "有備而來" description: "設定了個人檔案" _markedAsCat: - title: "我是貓" + title: "吾輩乃貓是也" description: "已將帳戶設定為貓" flavor: "還沒有名字。" _following1: @@ -1276,6 +1279,8 @@ _role: followersMoreThanOrEq: "追隨者人數在~以上" followingLessThanOrEq: "追隨人數在~以下" followingMoreThanOrEq: "追隨人數在~以上" + notesLessThanOrEq: "發布數在~以下" + notesMoreThanOrEq: "發布數在~以上" and: "~和~" or: "~或~" not: "~否" @@ -1875,6 +1880,17 @@ _drivecleaner: orderBySizeDesc: "檔案由大到小" orderByCreatedAtAsc: "依照加入的日期順序" _webhookSettings: + createWebhook: "建立 Webhook" name: "名稱" + secret: "秘密" + events: "什麼時候運行Webhook" active: "已啟用" + _events: + follow: "當你追隨時" + followed: "當被追隨時" + note: "當發布貼文時" + reply: "當收到回覆時" + renote: "當被轉發時" + reaction: "當獲得反應時" + mention: "當被提到時" diff --git a/package.json b/package.json index e4cf9c85d2..8506d8aa29 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "type": "git", "url": "https://github.com/misskey-dev/misskey.git" }, - "packageManager": "pnpm@7.29.3", + "packageManager": "pnpm@8.1.0", "workspaces": [ "packages/frontend", "packages/backend", @@ -50,16 +50,16 @@ "gulp-replace": "1.1.4", "gulp-terser": "2.1.0", "js-yaml": "4.1.0", - "typescript": "4.9.5" + "typescript": "5.0.2" }, "devDependencies": { "@types/gulp": "4.0.10", "@types/gulp-rename": "2.0.1", - "@typescript-eslint/eslint-plugin": "5.54.1", - "@typescript-eslint/parser": "5.54.1", + "@typescript-eslint/eslint-plugin": "5.57.0", + "@typescript-eslint/parser": "5.57.0", "cross-env": "7.0.3", - "cypress": "12.7.0", - "eslint": "8.35.0", + "cypress": "12.9.0", + "eslint": "8.37.0", "start-server-and-test": "2.0.0" }, "optionalDependencies": { diff --git a/packages/backend/package.json b/packages/backend/package.json index 3f640c4a63..4666563dc1 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -23,41 +23,41 @@ }, "optionalDependencies": { "@swc/core-android-arm64": "^1.3.11", - "@swc/core-darwin-arm64": "^1.3.38", - "@swc/core-darwin-x64": "^1.3.38", - "@swc/core-linux-arm-gnueabihf": "^1.3.38", - "@swc/core-linux-arm64-gnu": "^1.3.38", - "@swc/core-linux-arm64-musl": "^1.3.38", - "@swc/core-linux-x64-gnu": "^1.3.38", - "@swc/core-linux-x64-musl": "^1.3.38", - "@swc/core-win32-arm64-msvc": "^1.3.38", - "@swc/core-win32-ia32-msvc": "^1.3.38", - "@swc/core-win32-x64-msvc": "^1.3.38", + "@swc/core-darwin-arm64": "^1.3.42", + "@swc/core-darwin-x64": "^1.3.42", + "@swc/core-linux-arm-gnueabihf": "^1.3.42", + "@swc/core-linux-arm64-gnu": "^1.3.42", + "@swc/core-linux-arm64-musl": "^1.3.42", + "@swc/core-linux-x64-gnu": "^1.3.42", + "@swc/core-linux-x64-musl": "^1.3.42", + "@swc/core-win32-arm64-msvc": "^1.3.42", + "@swc/core-win32-ia32-msvc": "^1.3.42", + "@swc/core-win32-x64-msvc": "^1.3.42", "@tensorflow/tfjs": "4.2.0", "@tensorflow/tfjs-node": "4.2.0" }, "dependencies": { - "@aws-sdk/client-s3": "^3.294.0", - "@aws-sdk/lib-storage": "^3.294.0", - "@aws-sdk/node-http-handler": "^3.292.0", + "@aws-sdk/client-s3": "3.301.0", + "@aws-sdk/lib-storage": "3.301.0", + "@aws-sdk/node-http-handler": "3.296.0", "@bull-board/api": "5.0.0", "@bull-board/fastify": "5.0.0", "@bull-board/ui": "5.0.0", - "@discordapp/twemoji": "14.0.2", + "@discordapp/twemoji": "14.1.2", "@fastify/accepts": "4.1.0", "@fastify/cookie": "8.3.0", - "@fastify/cors": "8.2.0", - "@fastify/http-proxy": "8.4.0", - "@fastify/multipart": "7.4.2", + "@fastify/cors": "8.2.1", + "@fastify/http-proxy": "9.0.0", + "@fastify/multipart": "7.5.0", "@fastify/static": "6.9.0", "@fastify/view": "7.4.1", - "@nestjs/common": "9.3.9", - "@nestjs/core": "9.3.9", - "@nestjs/testing": "9.3.9", + "@nestjs/common": "9.3.12", + "@nestjs/core": "9.3.12", + "@nestjs/testing": "9.3.12", "@peertube/http-signature": "1.7.0", "@sinonjs/fake-timers": "10.0.2", "@swc/cli": "0.1.62", - "@swc/core": "1.3.38", + "@swc/core": "1.3.42", "accepts": "1.3.8", "ajv": "8.12.0", "archiver": "5.3.1", @@ -76,7 +76,7 @@ "date-fns": "2.29.3", "deep-email-validator": "0.1.21", "escape-regexp": "0.0.1", - "fastify": "4.14.1", + "fastify": "4.15.0", "feed": "4.2.2", "file-type": "18.2.1", "fluent-ffmpeg": "2.1.2", @@ -88,21 +88,21 @@ "ip-cidr": "3.1.0", "is-svg": "4.3.2", "js-yaml": "4.1.0", - "jsdom": "21.1.0", + "jsdom": "21.1.1", "json5": "2.2.3", "jsonld": "8.1.1", - "jsrsasign": "10.6.1", + "jsrsasign": "10.7.0", "mfm-js": "0.23.3", "mime-types": "2.1.35", - "misskey-js": "0.0.15", + "misskey-js": "workspace:*", "ms": "3.0.0-canary.1", "nested-property": "4.0.0", - "node-fetch": "3.3.0", + "node-fetch": "3.3.1", "nodemailer": "6.9.1", "nsfwjs": "2.4.2", "oauth": "0.10.0", "os-utils": "0.0.14", - "otpauth": "^9.0.2", + "otpauth": "9.1.1", "parse5": "7.1.2", "pg": "8.10.0", "private-ip": "3.0.0", @@ -125,7 +125,7 @@ "sanitize-html": "2.10.0", "seedrandom": "3.0.5", "semver": "7.3.8", - "sharp": "0.31.3", + "sharp": "0.32.0", "sharp-read-bmp": "github:misskey-dev/sharp-read-bmp", "strict-event-emitter-types": "2.0.0", "stringz": "2.1.0", @@ -133,25 +133,25 @@ "systeminformation": "5.17.12", "tinycolor2": "1.6.0", "tmp": "0.2.1", - "tsc-alias": "1.8.3", - "tsconfig-paths": "4.1.2", + "tsc-alias": "1.8.5", + "tsconfig-paths": "4.2.0", "twemoji-parser": "14.0.0", "typeorm": "0.3.11", - "typescript": "4.9.5", + "typescript": "5.0.2", "ulid": "2.3.0", "unzipper": "0.10.11", "uuid": "9.0.0", "vary": "1.1.2", "web-push": "3.5.0", "websocket": "1.0.34", - "ws": "8.12.1", + "ws": "8.13.0", "xev": "3.0.2" }, "devDependencies": { "@jest/globals": "29.5.0", "@swc/jest": "0.2.24", "@types/accepts": "1.3.5", - "@types/archiver": "5.3.1", + "@types/archiver": "5.3.2", "@types/bcryptjs": "2.4.2", "@types/bull": "4.10.0", "@types/cbor": "6.0.0", @@ -160,13 +160,13 @@ "@types/escape-regexp": "0.0.1", "@types/fluent-ffmpeg": "2.1.21", "@types/ioredis": "4.28.10", - "@types/jest": "29.4.0", + "@types/jest": "29.5.0", "@types/js-yaml": "4.0.5", - "@types/jsdom": "21.1.0", + "@types/jsdom": "21.1.1", "@types/jsonld": "1.5.8", - "@types/jsrsasign": "10.5.5", + "@types/jsrsasign": "10.5.8", "@types/mime-types": "2.1.1", - "@types/node": "18.15.0", + "@types/node": "18.15.11", "@types/node-fetch": "3.0.3", "@types/nodemailer": "6.4.7", "@types/oauth": "0.9.1", @@ -178,7 +178,7 @@ "@types/ratelimiter": "3.4.4", "@types/redis": "4.0.11", "@types/rename": "1.0.4", - "@types/sanitize-html": "2.8.1", + "@types/sanitize-html": "2.9.0", "@types/semver": "7.3.13", "@types/sharp": "0.31.1", "@types/sinonjs__fake-timers": "8.1.2", @@ -190,11 +190,11 @@ "@types/web-push": "3.3.2", "@types/websocket": "1.0.5", "@types/ws": "8.5.4", - "@typescript-eslint/eslint-plugin": "5.54.1", - "@typescript-eslint/parser": "5.54.1", + "@typescript-eslint/eslint-plugin": "5.57.0", + "@typescript-eslint/parser": "5.57.0", "aws-sdk-client-mock": "^2.1.1", "cross-env": "7.0.3", - "eslint": "8.35.0", + "eslint": "8.37.0", "eslint-plugin-import": "2.27.5", "execa": "6.1.0", "jest": "29.5.0", diff --git a/packages/backend/src/core/S3Service.ts b/packages/backend/src/core/S3Service.ts index 629278d915..01ce12ffdd 100644 --- a/packages/backend/src/core/S3Service.ts +++ b/packages/backend/src/core/S3Service.ts @@ -42,7 +42,7 @@ export class S3Service { accessKeyId: meta.objectStorageAccessKey, secretAccessKey: meta.objectStorageSecretKey, } : undefined, - region: meta.objectStorageRegion ?? undefined, + region: meta.objectStorageRegion ? meta.objectStorageRegion : undefined, // 空文字列もundefinedにするため ?? は使わない tls: meta.objectStorageUseSSL, forcePathStyle: meta.objectStorageEndpoint ? meta.objectStorageS3ForcePathStyle : false, // AWS with endPoint omitted requestHandler: new NodeHttpHandler(handlerOption), diff --git a/packages/backend/src/server/api/endpoints/notes/state.ts b/packages/backend/src/server/api/endpoints/notes/state.ts index d0036f0fb7..93517ab10c 100644 --- a/packages/backend/src/server/api/endpoints/notes/state.ts +++ b/packages/backend/src/server/api/endpoints/notes/state.ts @@ -59,7 +59,7 @@ export default class extends Endpoint { this.noteThreadMutingsRepository.count({ where: { userId: me.id, - threadId: note.threadId || note.id, + threadId: note.threadId ?? note.id, }, take: 1, }), diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug index a9a0dfd4ee..d772ac3184 100644 --- a/packages/backend/src/server/web/views/base.pug +++ b/packages/backend/src/server/web/views/base.pug @@ -36,7 +36,7 @@ html link(rel='prefetch' href='https://xn--931a.moe/assets/not-found.jpg') link(rel='prefetch' href='https://xn--931a.moe/assets/error.jpg') //- https://github.com/misskey-dev/misskey/issues/9842 - link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.min.css?v2.10.0') + link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.min.css?v2.12.0') link(rel='modulepreload' href=`/vite/${clientEntry.file}`) if !config.clientManifestExists diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 4f112995a6..3d1a808538 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -11,13 +11,13 @@ "lint": "pnpm typecheck && pnpm eslint" }, "dependencies": { - "@discordapp/twemoji": "14.0.2", + "@discordapp/twemoji": "14.1.2", "@rollup/plugin-alias": "4.0.3", "@rollup/plugin-json": "6.0.0", "@rollup/pluginutils": "5.0.2", "@syuilo/aiscript": "0.13.1", - "@tabler/icons-webfont": "2.10.0", - "@vitejs/plugin-vue": "4.0.0", + "@tabler/icons-webfont": "2.12.0", + "@vitejs/plugin-vue": "4.1.0", "@vue/compiler-sfc": "3.2.47", "autobind-decorator": "2.4.0", "autosize": "5.0.2", @@ -29,29 +29,29 @@ "chartjs-adapter-date-fns": "3.0.0", "chartjs-chart-matrix": "2.0.1", "chartjs-plugin-gradient": "0.6.1", - "chartjs-plugin-zoom": "2.0.0", + "chartjs-plugin-zoom": "2.0.1", "compare-versions": "5.0.1", "cropperjs": "2.0.0-beta.2", "date-fns": "2.29.3", "escape-regexp": "0.0.1", "eventemitter3": "5.0.0", - "gsap": "3.11.4", + "gsap": "3.11.5", "idb-keyval": "6.2.0", "insert-text-at-cursor": "0.3.0", "is-file-animated": "1.0.2", "json5": "2.2.3", "matter-js": "0.19.0", "mfm-js": "0.23.3", - "misskey-js": "0.0.15", - "photoswipe": "5.3.6", + "misskey-js": "workspace:*", + "photoswipe": "5.3.7", "prismjs": "1.29.0", "punycode": "2.3.0", "querystring": "0.2.1", "rndstr": "1.0.0", - "rollup": "3.19.0", + "rollup": "3.20.2", "s-age": "1.1.2", "sanitize-html": "2.10.0", - "sass": "1.58.3", + "sass": "1.60.0", "seedrandom": "3.0.5", "strict-event-emitter-types": "2.0.0", "syuilo-password-strength": "0.0.1", @@ -59,13 +59,13 @@ "three": "0.150.1", "throttle-debounce": "5.0.0", "tinycolor2": "1.6.0", - "tsc-alias": "1.8.3", - "tsconfig-paths": "4.1.2", + "tsc-alias": "1.8.5", + "tsconfig-paths": "4.2.0", "twemoji-parser": "14.0.0", - "typescript": "4.9.5", + "typescript": "5.0.2", "uuid": "9.0.0", "vanilla-tilt": "1.8.0", - "vite": "4.1.4", + "vite": "4.2.1", "vue": "3.2.47", "vue-plyr": "7.0.0", "vue-prism-editor": "2.0.0-alpha.2", @@ -95,25 +95,25 @@ "@types/gulp": "4.0.10", "@types/gulp-rename": "2.0.1", "@types/matter-js": "0.18.2", - "@types/node": "18.15.0", + "@types/node": "18.15.11", "@types/punycode": "2.1.0", - "@types/sanitize-html": "2.8.1", + "@types/sanitize-html": "2.9.0", "@types/seedrandom": "3.0.5", "@types/throttle-debounce": "5.0.0", "@types/tinycolor2": "1.4.3", "@types/uuid": "9.0.1", "@types/websocket": "1.0.5", "@types/ws": "8.5.4", - "@typescript-eslint/eslint-plugin": "5.54.1", - "@typescript-eslint/parser": "5.54.1", - "@vitest/coverage-c8": "^0.29.2", + "@typescript-eslint/eslint-plugin": "5.57.0", + "@typescript-eslint/parser": "5.57.0", + "@vitest/coverage-c8": "^0.29.8", "@vue/runtime-core": "3.2.47", "astring": "^1.8.4", "cross-env": "7.0.3", - "cypress": "12.7.0", - "eslint": "8.35.0", + "cypress": "12.9.0", + "eslint": "8.37.0", "eslint-plugin-import": "2.27.5", - "eslint-plugin-vue": "9.9.0", + "eslint-plugin-vue": "9.10.0", "happy-dom": "8.9.0", "msw": "^1.1.0", "msw-storybook-addon": "^1.8.0", @@ -125,7 +125,7 @@ "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", "summaly": "github:misskey-dev/summaly", "vite-plugin-restart": "^0.3.1", - "vitest": "^0.29.2", + "vitest": "^0.29.8", "vitest-fetch-mock": "^0.2.2", "vue-eslint-parser": "9.1.0", "vue-tsc": "1.2.0" diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue index fd0f42e9fc..9480af5102 100644 --- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue +++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue @@ -3,7 +3,7 @@ ref="buttonEl" v-ripple="canToggle" class="_button" - :class="[$style.root, { [$style.reacted]: note.myReaction == reaction, [$style.canToggle]: canToggle }]" + :class="[$style.root, { [$style.reacted]: note.myReaction == reaction, [$style.canToggle]: canToggle, [$style.large]: defaultStore.state.largeNoteReactions }]" @click="toggleReaction()" > @@ -118,6 +118,17 @@ useTooltip(buttonEl, async (showing) => { cursor: default; } + &.large { + height: 42px; + font-size: 1.5em; + border-radius: 6px; + + > .count { + font-size: 0.7em; + line-height: 42px; + } + } + &.reacted { background: var(--accent); diff --git a/packages/frontend/src/pages/search.vue b/packages/frontend/src/pages/search.vue index cc6f8cc0cc..5523d5cf4d 100644 --- a/packages/frontend/src/pages/search.vue +++ b/packages/frontend/src/pages/search.vue @@ -56,6 +56,9 @@ import MkFoldableSection from '@/components/MkFoldableSection.vue'; import { $i } from '@/account'; import { instance } from '@/instance'; import MkInfo from '@/components/MkInfo.vue'; +import { useRouter } from '@/router'; + +const router = useRouter(); const props = defineProps<{ query: string; @@ -84,6 +87,24 @@ async function search() { if (query == null || query === '') return; + if (query.startsWith('https://')) { + const promise = os.api('ap/show', { + uri: query, + }); + + os.promiseDialog(promise, null, null, i18n.ts.fetchingAsApObject); + + const res = await promise; + + if (res.type === 'User') { + router.push(`/@${res.object.username}@${res.object.host}`); + } else if (res.type === 'Note') { + router.push(`/notes/${res.object.id}`); + } + + return; + } + if (tab === 'note') { notePagination = { endpoint: 'notes/search', diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue index dd62a32530..f88e934e1d 100644 --- a/packages/frontend/src/pages/settings/general.vue +++ b/packages/frontend/src/pages/settings/general.vue @@ -48,6 +48,7 @@
{{ i18n.ts.showNoteActionsOnlyHover }} {{ i18n.ts.showClipButtonInNoteFooter }} + {{ i18n.ts.largeNoteReactions }} {{ i18n.ts.collapseRenotes }} {{ i18n.ts.enableAdvancedMfm }} {{ i18n.ts.enableAnimatedMfm }} @@ -145,6 +146,7 @@ const overridedDeviceKind = computed(defaultStore.makeGetterSetter('overridedDev const serverDisconnectedBehavior = computed(defaultStore.makeGetterSetter('serverDisconnectedBehavior')); const showNoteActionsOnlyHover = computed(defaultStore.makeGetterSetter('showNoteActionsOnlyHover')); const showClipButtonInNoteFooter = computed(defaultStore.makeGetterSetter('showClipButtonInNoteFooter')); +const largeNoteReactions = computed(defaultStore.makeGetterSetter('largeNoteReactions')); const collapseRenotes = computed(defaultStore.makeGetterSetter('collapseRenotes')); const reduceAnimation = computed(defaultStore.makeGetterSetter('animation', v => !v, v => !v)); const useBlurEffectForModal = computed(defaultStore.makeGetterSetter('useBlurEffectForModal')); diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index c3cf48afc4..0be91bbcb4 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -294,6 +294,10 @@ export const defaultStore = markRaw(new Storage('base', { where: 'device', default: false, }, + largeNoteReactions: { + where: 'device', + default: false, + }, aiChanMode: { where: 'device', default: false, diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts index 846473ff67..425f3aa45d 100644 --- a/packages/frontend/vite.config.ts +++ b/packages/frontend/vite.config.ts @@ -85,6 +85,11 @@ export function getConfig(): UserConfig { __VUE_PROD_DEVTOOLS__: false, }, + // https://vitejs.dev/guide/dep-pre-bundling.html#monorepos-and-linked-dependencies + optimizeDeps: { + include: ['misskey-js'], + }, + build: { target: [ 'chrome108', @@ -109,6 +114,11 @@ export function getConfig(): UserConfig { emptyOutDir: false, sourcemap: process.env.NODE_ENV === 'development', reportCompressedSize: false, + + // https://vitejs.dev/guide/dep-pre-bundling.html#monorepos-and-linked-dependencies + commonjsOptions: { + include: [/misskey-js/, /node_modules/], + }, }, test: { diff --git a/packages/misskey-js/.eslintignore b/packages/misskey-js/.eslintignore new file mode 100644 index 0000000000..f22128f047 --- /dev/null +++ b/packages/misskey-js/.eslintignore @@ -0,0 +1,7 @@ +node_modules +/built +/coverage +/.eslintrc.js +/jest.config.ts +/test +/test-d diff --git a/packages/misskey-js/.eslintrc.js b/packages/misskey-js/.eslintrc.js new file mode 100644 index 0000000000..426894947b --- /dev/null +++ b/packages/misskey-js/.eslintrc.js @@ -0,0 +1,57 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + parserOptions: { + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + }, + plugins: [ + '@typescript-eslint', + ], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + ], + rules: { + 'indent': ['error', 'tab', { + 'SwitchCase': 1, + 'MemberExpression': 'off', + 'flatTernaryExpressions': true, + 'ArrayExpression': 'first', + 'ObjectExpression': 'first', + }], + 'eol-last': ['error', 'always'], + 'semi': ['error', 'always'], + 'quotes': ['error', 'single'], + 'comma-dangle': ['error', 'always-multiline'], + 'keyword-spacing': ['error', { + 'before': true, + 'after': true, + }], + 'key-spacing': ['error', { + 'beforeColon': false, + 'afterColon': true, + }], + 'space-infix-ops': ['error'], + 'space-before-blocks': ['error', 'always'], + 'object-curly-spacing': ['error', 'always'], + 'nonblock-statement-body-position': ['error', 'beside'], + 'eqeqeq': ['error', 'always', { 'null': 'ignore' }], + 'no-multiple-empty-lines': ['error', { 'max': 1 }], + 'no-multi-spaces': ['error'], + 'no-var': ['error'], + 'prefer-arrow-callback': ['error'], + 'no-throw-literal': ['error'], + 'no-param-reassign': ['warn'], + 'no-constant-condition': ['warn'], + 'no-empty-pattern': ['warn'], + '@typescript-eslint/no-unnecessary-condition': ['error'], + '@typescript-eslint/no-inferrable-types': ['warn'], + '@typescript-eslint/no-non-null-assertion': ['warn'], + '@typescript-eslint/explicit-function-return-type': ['warn'], + '@typescript-eslint/no-misused-promises': ['error', { + 'checksVoidReturn': false, + }], + '@typescript-eslint/consistent-type-imports': 'error', + }, +}; diff --git a/packages/misskey-js/.swcrc b/packages/misskey-js/.swcrc new file mode 100644 index 0000000000..0504a2d389 --- /dev/null +++ b/packages/misskey-js/.swcrc @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/swcrc", + "jsc": { + "parser": { + "syntax": "typescript", + "dynamicImport": true, + "decorators": true + }, + "transform": { + "legacyDecorator": true, + "decoratorMetadata": true + }, + "experimental": { + "keepImportAssertions": true + }, + "baseUrl": "src", + "paths": { + "@/*": ["*"] + }, + "target": "es2022" + }, + "minify": false +} diff --git a/packages/misskey-js/CONTRIBUTING.md b/packages/misskey-js/CONTRIBUTING.md new file mode 100644 index 0000000000..aa759345b0 --- /dev/null +++ b/packages/misskey-js/CONTRIBUTING.md @@ -0,0 +1,90 @@ +# Contribution guide +**[✨ English version available](/docs/CONTRIBUTING.en.md)** + +プロジェクトに興味を持っていただきありがとうございます! +このドキュメントでは、プロジェクトに貢献する際に必要な情報をまとめています。 + +## 実装をする前に +機能追加やバグ修正をしたいときは、まずIssueなどで設計、方針をレビューしてもらいましょう(無い場合は作ってください)。このステップがないと、せっかく実装してもPRがマージされない可能性が高くなります。 + +また、実装に取り掛かるときは当該Issueに自分をアサインしてください(自分でできない場合は他メンバーに自分をアサインしてもらうようお願いしてください)。 +自分が実装するという意思表示をすることで、作業がバッティングするのを防ぎます。 + +## Issues +Issueを作成する前に、以下をご確認ください: +- 重複を防ぐため、既に同様の内容のIssueが作成されていないか検索してから新しいIssueを作ってください。 +- Issueを質問に使わないでください。 + - Issueは、要望、提案、問題の報告にのみ使用してください。 + - 質問は、[Misskey Forum](https://forum.misskey.io/)や[Discord](https://discord.gg/Wp8gVStHW3)でお願いします。 + +## PRの作成 +PRを作成する前に、以下をご確認ください: +- 可能であればタイトルに、以下で示すようなPRの種類が分かるキーワードをプリフィクスしてください。 + - fix / refactor / feat / enhance / perf / chore 等 + - また、PRの粒度が適切であることを確認してください。ひとつのPRに複数の種類の変更や関心を含めることは避けてください。 +- このPRによって解決されるIssueがある場合は、そのIssueへの参照を本文内に含めてください。 +- [`CHANGELOG.md`](/CHANGELOG.md)に変更点を追記してください。リファクタリングなど、利用者に影響を与えない変更についてはこの限りではありません。 +- この変更により新たに作成、もしくは更新すべきドキュメントがないか確認してください。 +- 機能追加やバグ修正をした場合は、可能であればテストケースを追加してください。 +- テスト、Lintが通っていることを予め確認してください。 + - `npm run test`、`npm run lint`でぞれぞれ実施可能です +- `npm run api`を実行してAPIレポートを更新し、差分がある場合はコミットしてください。 + - APIレポートの詳細については[こちら](#api-extractor) + +ご協力ありがとうございます🤗 + +## Tools +### eslint +このプロジェクトではコードのフォーマットチェック/整形に[eslint](https://eslint.org/)を導入しています。 +CI上でも自動でチェックされ、ルールに則っていないコードがあるとエラーになります。 + +### Jest +このプロジェクトではテストフレームワークとして[Jest](https://jestjs.io/)を導入しています。 +テストは[`/test`ディレクトリ](/test)に置かれます。 + +テストはCIにより各コミット/各PRに対して自動で実施されます。 +ローカル環境でテストを実施するには、`npm run test`を実行してください。 + +### tsd +このプロジェクトでは型のテストを行うために[tsd](https://github.com/SamVerschueren/tsd)を導入しています。 +Jestによるテストでは「型が期待したものか」というのはチェックすることができません。tsdを使うことで、型が意図したものであることを担保することができます。 +tsdによる型テストは[`/test-d`ディレクトリ](/test-d)に置かれます。 + +テストはCIにより各コミット/各PRに対して自動で実施されます。 +ローカル環境でテストを実施するには、`npm run test`を実行してください。 + +### API Extractor +このプロジェクトでは[API Extractor](https://api-extractor.com/)を導入しています。API ExtractorはAPIレポートを生成する役割を持ちます。 +APIレポートはいわばAPIのスナップショットで、このライブラリが外部に公開(export)している各種関数や型の定義が含まれています。`npm run api`コマンドを実行すると、その時点でのレポートが[`/etc`ディレクトリ](/etc)に生成されるようになっています。 + +exportしているAPIに変更があると、当然生成されるレポートの内容も変わるので、例えばdevelopブランチで生成されたレポートとPRのブランチで生成されたレポートを比較することで、意図しない破壊的変更の検出や、破壊的変更の影響確認に用いることができます。 +また、各コミットや各PRで実行されるCI内部では、都度APIレポートを生成して既存のレポートと差分が無いかチェックしています。もし差分があるとエラーになります。 + +PRを作る際は、`npm run api`コマンドを実行してAPIレポートを生成し、差分がある場合はコミットしてください。 +レポートをコミットすることでその破壊的変更が意図したものであると示すことができるほか、上述したようにレポート間の差分が出ることで影響範囲をレビューしやすくなります。 + +### Codecov +このプロジェクトではカバレッジの計測に[Codecov](https://about.codecov.io/)を導入しています。カバレッジは、コードがどれくらいテストでカバーされているかを表すものです。 + +カバレッジ計測はCIで自動的に行われ、特に操作は必要ありません。カバレッジは[ここ](https://codecov.io/gh/misskey-dev/misskey.js)から見ることができます。 + +また、各PRに対してもそのブランチのカバレッジが自動的に計算され、マージ先のカバレッジとの差分を含んだレポートがCodecovのbotによりコメントされます。これにより、そのPRをマージすることでどれくらいカバレッジが増加するのか/減少するのかを確認することができます。 + +## レビュイーの心得 +[PRのセクション](#PRの作成)をご一読ください。 +また、後述の「レビュー観点」も意識してみてください。 + +## レビュワーの心得 +- 直して欲しい点だけでなく、良い点も積極的にコメントしましょう。 + - 貢献するモチベーションアップに繋がります。 + +### レビュー観点 +- セキュリティ + - このPRをマージすることで、脆弱性を生まないか? +- パフォーマンス + - このPRをマージすることで、予期せずパフォーマンスが悪化しないか? + - もっと効率的な方法は無いか? +- テスト + - 期待する振る舞いがテストで担保されているか? + - 抜けやモレは無いか? + - 異常系のチェックは出来ているか? diff --git a/packages/misskey-js/LICENSE b/packages/misskey-js/LICENSE new file mode 100644 index 0000000000..11c1f9ce22 --- /dev/null +++ b/packages/misskey-js/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021-2022 syuilo and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/misskey-js/README.md b/packages/misskey-js/README.md new file mode 100644 index 0000000000..63d4b36c56 --- /dev/null +++ b/packages/misskey-js/README.md @@ -0,0 +1,158 @@ +# misskey.js +**Strongly-typed official Misskey SDK for browsers/Node.js.** + +[![Test](https://github.com/misskey-dev/misskey.js/actions/workflows/test.yml/badge.svg)](https://github.com/misskey-dev/misskey.js/actions/workflows/test.yml) +[![codecov](https://codecov.io/gh/misskey-dev/misskey.js/branch/develop/graph/badge.svg?token=PbrTtk3nVD)](https://codecov.io/gh/misskey-dev/misskey.js) + +[![NPM](https://nodei.co/npm/misskey-js.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/misskey-js) + +JavaScript(TypeScript)用の公式MisskeySDKです。ブラウザ/Node.js上で動作します。 + +以下が提供されています: +- ユーザー認証 +- APIリクエスト +- ストリーミング +- ユーティリティ関数 +- Misskeyの各種型定義 + +対応するMisskeyのバージョンは12以上です。 + +## Install +``` +npm i misskey-js +``` + +# Usage +インポートは以下のようにまとめて行うと便利です。 + +``` ts +import * as Misskey from 'misskey-js'; +``` + +便宜上、以後のコード例は上記のように`* as Misskey`としてインポートしている前提のものになります。 + +ただし、このインポート方法だとTree-Shakingできなくなるので、コードサイズが重要なユースケースでは以下のような個別インポートをお勧めします。 + +``` ts +import { api as misskeyApi } from 'misskey-js'; +``` + +## Authenticate +todo + +## API request +APIを利用する際は、利用するサーバーの情報とアクセストークンを与えて`APIClient`クラスのインスタンスを初期化し、そのインスタンスの`request`メソッドを呼び出してリクエストを行います。 + +``` ts +const cli = new Misskey.api.APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN', +}); + +const meta = await cli.request('meta', { detail: true }); +``` + +`request`の第一引数には呼び出すエンドポイント名、第二引数にはパラメータオブジェクトを渡します。レスポンスはPromiseとして返ります。 + +## Streaming +misskey.jsのストリーミングでは、二つのクラスが提供されます。 +ひとつは、ストリーミングのコネクション自体を司る`Stream`クラスと、もうひとつはストリーミング上のチャンネルの概念を表す`Channel`クラスです。 +ストリーミングを利用する際は、まず`Stream`クラスのインスタンスを初期化し、その後で`Stream`インスタンスのメソッドを利用して`Channel`クラスのインスタンスを取得する形になります。 + +``` ts +const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); +const mainChannel = stream.useChannel('main'); +mainChannel.on('notification', notification => { + console.log('notification received', notification); +}); +``` + +コネクションが途切れても自動で再接続されます。 + +### チャンネルへの接続 +チャンネルへの接続は`Stream`クラスの`useChannel`メソッドを使用します。 + +パラメータなし +``` ts +const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); + +const mainChannel = stream.useChannel('main'); +``` + +パラメータあり +``` ts +const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); + +const messagingChannel = stream.useChannel('messaging', { + otherparty: 'xxxxxxxxxx', +}); +``` + +### チャンネルから切断 +`Channel`クラスの`dispose`メソッドを呼び出します。 + +``` ts +const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); + +const mainChannel = stream.useChannel('main'); + +mainChannel.dispose(); +``` + +### メッセージの受信 +`Channel`クラスはEventEmitterを継承しており、メッセージがサーバーから受信されると受け取ったイベント名でペイロードをemitします。 + +``` ts +const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); +const mainChannel = stream.useChannel('main'); +mainChannel.on('notification', notification => { + console.log('notification received', notification); +}); +``` + +### メッセージの送信 +`Channel`クラスの`send`メソッドを使用してメッセージをサーバーに送信することができます。 + +``` ts +const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); +const messagingChannel = stream.useChannel('messaging', { + otherparty: 'xxxxxxxxxx', +}); + +messagingChannel.send('read', { + id: 'xxxxxxxxxx' +}); +``` + +### コネクション確立イベント +`Stream`クラスの`_connected_`イベントが利用可能です。 + +``` ts +const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); +stream.on('_connected_', () => { + console.log('connected'); +}); +``` + +### コネクション切断イベント +`Stream`クラスの`_disconnected_`イベントが利用可能です。 + +``` ts +const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); +stream.on('_disconnected_', () => { + console.log('disconnected'); +}); +``` + +### コネクションの状態 +`Stream`クラスの`state`プロパティで確認できます。 + +- `initializing`: 接続確立前 +- `connected`: 接続完了 +- `reconnecting`: 再接続中 + +--- + +
+ +
diff --git a/packages/misskey-js/api-extractor.json b/packages/misskey-js/api-extractor.json new file mode 100644 index 0000000000..a95281a6d5 --- /dev/null +++ b/packages/misskey-js/api-extractor.json @@ -0,0 +1,364 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + + /** + * Optionally specifies another JSON config file that this file extends from. This provides a way for + * standard settings to be shared across multiple projects. + * + * If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains + * the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be + * resolved using NodeJS require(). + * + * SUPPORTED TOKENS: none + * DEFAULT VALUE: "" + */ + // "extends": "./shared/api-extractor-base.json" + // "extends": "my-package/include/api-extractor-base.json" + + /** + * Determines the "" token that can be used with other config file settings. The project folder + * typically contains the tsconfig.json and package.json config files, but the path is user-defined. + * + * The path is resolved relative to the folder of the config file that contains the setting. + * + * The default value for "projectFolder" is the token "", which means the folder is determined by traversing + * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder + * that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error + * will be reported. + * + * SUPPORTED TOKENS: + * DEFAULT VALUE: "" + */ + // "projectFolder": "..", + + /** + * (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor + * analyzes the symbols exported by this module. + * + * The file extension must be ".d.ts" and not ".ts". + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + */ + "mainEntryPointFilePath": "/built/index.d.ts", + + /** + * A list of NPM package names whose exports should be treated as part of this package. + * + * For example, suppose that Webpack is used to generate a distributed bundle for the project "library1", + * and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part + * of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly + * imports library2. To avoid this, we can specify: + * + * "bundledPackages": [ "library2" ], + * + * This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been + * local files for library1. + */ + "bundledPackages": [], + + /** + * Determines how the TypeScript compiler engine will be invoked by API Extractor. + */ + "compiler": { + /** + * Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * Note: This setting will be ignored if "overrideTsconfig" is used. + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/tsconfig.json" + */ + // "tsconfigFilePath": "/tsconfig.json", + /** + * Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk. + * The object must conform to the TypeScript tsconfig schema: + * + * http://json.schemastore.org/tsconfig + * + * If omitted, then the tsconfig.json file will be read from the "projectFolder". + * + * DEFAULT VALUE: no overrideTsconfig section + */ + // "overrideTsconfig": { + // . . . + // } + /** + * This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended + * and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when + * dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses + * for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck. + * + * DEFAULT VALUE: false + */ + // "skipLibCheck": true, + }, + + /** + * Configures how the API report file (*.api.md) will be generated. + */ + "apiReport": { + /** + * (REQUIRED) Whether to generate an API report. + */ + "enabled": true + + /** + * The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce + * a full file path. + * + * The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/". + * + * SUPPORTED TOKENS: , + * DEFAULT VALUE: ".api.md" + */ + // "reportFileName": ".api.md", + + /** + * Specifies the folder where the API report file is written. The file name portion is determined by + * the "reportFileName" setting. + * + * The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy, + * e.g. for an API review. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/etc/" + */ + // "reportFolder": "/etc/", + + /** + * Specifies the folder where the temporary report file is written. The file name portion is determined by + * the "reportFileName" setting. + * + * After the temporary file is written to disk, it is compared with the file in the "reportFolder". + * If they are different, a production build will fail. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/temp/" + */ + // "reportTempFolder": "/temp/" + }, + + /** + * Configures how the doc model file (*.api.json) will be generated. + */ + "docModel": { + /** + * (REQUIRED) Whether to generate a doc model file. + */ + "enabled": true + + /** + * The output path for the doc model file. The file extension should be ".api.json". + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/temp/.api.json" + */ + // "apiJsonFilePath": "/temp/.api.json" + }, + + /** + * Configures how the .d.ts rollup file will be generated. + */ + "dtsRollup": { + /** + * (REQUIRED) Whether to generate the .d.ts rollup file. + */ + "enabled": false + + /** + * Specifies the output path for a .d.ts rollup file to be generated without any trimming. + * This file will include all declarations that are exported by the main entry point. + * + * If the path is an empty string, then this file will not be written. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/dist/.d.ts" + */ + // "untrimmedFilePath": "/dist/.d.ts", + + /** + * Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release. + * This file will include only declarations that are marked as "@public" or "@beta". + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "" + */ + // "betaTrimmedFilePath": "/dist/-beta.d.ts", + + /** + * Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release. + * This file will include only declarations that are marked as "@public". + * + * If the path is an empty string, then this file will not be written. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "" + */ + // "publicTrimmedFilePath": "/dist/-public.d.ts", + + /** + * When a declaration is trimmed, by default it will be replaced by a code comment such as + * "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the + * declaration completely. + * + * DEFAULT VALUE: false + */ + // "omitTrimmingComments": true + }, + + /** + * Configures how the tsdoc-metadata.json file will be generated. + */ + "tsdocMetadata": { + /** + * Whether to generate the tsdoc-metadata.json file. + * + * DEFAULT VALUE: true + */ + // "enabled": true, + /** + * Specifies where the TSDoc metadata file should be written. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * The default value is "", which causes the path to be automatically inferred from the "tsdocMetadata", + * "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup + * falls back to "tsdoc-metadata.json" in the package folder. + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "" + */ + // "tsdocMetadataFilePath": "/dist/tsdoc-metadata.json" + }, + + /** + * Specifies what type of newlines API Extractor should use when writing output files. By default, the output files + * will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead. + * To use the OS's default newline kind, specify "os". + * + * DEFAULT VALUE: "crlf" + */ + // "newlineKind": "crlf", + + /** + * Configures how API Extractor reports error and warning messages produced during analysis. + * + * There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages. + */ + "messages": { + /** + * Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing + * the input .d.ts files. + * + * TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551" + * + * DEFAULT VALUE: A single "default" entry with logLevel=warning. + */ + "compilerMessageReporting": { + /** + * Configures the default routing for messages that don't match an explicit rule in this table. + */ + "default": { + /** + * Specifies whether the message should be written to the the tool's output log. Note that + * the "addToApiReportFile" property may supersede this option. + * + * Possible values: "error", "warning", "none" + * + * Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail + * and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes + * the "--local" option), the warning is displayed but the build will not fail. + * + * DEFAULT VALUE: "warning" + */ + "logLevel": "warning" + + /** + * When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md), + * then the message will be written inside that file; otherwise, the message is instead logged according to + * the "logLevel" option. + * + * DEFAULT VALUE: false + */ + // "addToApiReportFile": false + } + + // "TS2551": { + // "logLevel": "warning", + // "addToApiReportFile": true + // }, + // + // . . . + }, + + /** + * Configures handling of messages reported by API Extractor during its analysis. + * + * API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag" + * + * DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings + */ + "extractorMessageReporting": { + "default": { + "logLevel": "none" + // "addToApiReportFile": false + } + + // "ae-extra-release-tag": { + // "logLevel": "warning", + // "addToApiReportFile": true + // }, + // + // . . . + }, + + /** + * Configures handling of messages reported by the TSDoc parser when analyzing code comments. + * + * TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text" + * + * DEFAULT VALUE: A single "default" entry with logLevel=warning. + */ + "tsdocMessageReporting": { + "default": { + "logLevel": "warning" + // "addToApiReportFile": false + } + + // "tsdoc-link-tag-unescaped-text": { + // "logLevel": "warning", + // "addToApiReportFile": true + // }, + // + // . . . + } + } +} diff --git a/packages/misskey-js/docs/CONTRIBUTING.en.md b/packages/misskey-js/docs/CONTRIBUTING.en.md new file mode 100644 index 0000000000..1db282e356 --- /dev/null +++ b/packages/misskey-js/docs/CONTRIBUTING.en.md @@ -0,0 +1,30 @@ +# Contribution guide +:v: Thanks for your contributions :v: + +**ℹ️ Important:** This project uses Japanese as its major language, **but you do not need to translate and write the Issues/PRs in Japanese.** +Also, you might receive comments on your Issue/PR in Japanese, but you do not need to reply to them in Japanese as well.\ +The accuracy of translation into Japanese is not high, so it will be easier for us to understand if you write it in the original language. +It will also allow the reader to use the translation tool of their preference if necessary. + +## Issues +Before creating an issue, please check the following: +- To avoid duplication, please search for similar issues before creating a new issue. +- Do not use Issues as a question. + - Issues should only be used to feature requests, suggestions, and report problems. + - Please ask questions in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3). + +## Creating a PR +Thank you for your PR! Before creating a PR, please check the following: +- If possible, prefix the title with a keyword that identifies the type of this PR, as shown below. + - fix / refactor / feat / enhance / perf / chore etc. + - Also, make sure that the granularity of this PR is appropriate. Please do not include more than one type of change or interest in a single PR. +- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text. +- Please add the summary of the changes to [`CHANGELOG.md`](/CHANGELOG.md). However, this is not necessary for changes that do not affect the users, such as refactoring. +- Check if there are any documents that need to be created or updated due to this change. +- If you have added a feature or fixed a bug, please add a test case if possible. +- Please make sure that tests and Lint are passed in advance. + - You can run it with `npm run test` and `npm run lint`. +- Run `npm run api` to update the API report and commit it if there are any diffs. + +Thanks for your cooperation 🤗 + diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md new file mode 100644 index 0000000000..e57484be6b --- /dev/null +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -0,0 +1,2722 @@ +## API Report File for "misskey-js" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { EventEmitter } from 'eventemitter3'; + +// @public (undocumented) +export type Acct = { + username: string; + host: string | null; +}; + +// Warning: (ae-forgotten-export) The symbol "TODO_2" needs to be exported by the entry point index.d.ts +// +// @public (undocumented) +type Ad = TODO_2; + +// @public (undocumented) +type Announcement = { + id: ID; + createdAt: DateString; + updatedAt: DateString | null; + text: string; + title: string; + imageUrl: string | null; + isRead?: boolean; +}; + +// @public (undocumented) +type Antenna = { + id: ID; + createdAt: DateString; + name: string; + keywords: string[][]; + excludeKeywords: string[][]; + src: 'home' | 'all' | 'users' | 'list' | 'group'; + userListId: ID | null; + userGroupId: ID | null; + users: string[]; + caseSensitive: boolean; + notify: boolean; + withReplies: boolean; + withFile: boolean; + hasUnreadNote: boolean; +}; + +declare namespace api { + export { + isAPIError, + APIError, + FetchLike, + APIClient + } +} +export { api } + +// @public (undocumented) +class APIClient { + constructor(opts: { + origin: APIClient['origin']; + credential?: APIClient['credential']; + fetch?: APIClient['fetch'] | null | undefined; + }); + // (undocumented) + credential: string | null | undefined; + // (undocumented) + fetch: FetchLike; + // (undocumented) + origin: string; + // Warning: (ae-forgotten-export) The symbol "IsCaseMatched" needs to be exported by the entry point index.d.ts + // Warning: (ae-forgotten-export) The symbol "GetCaseResult" needs to be exported by the entry point index.d.ts + // + // (undocumented) + request(endpoint: E, params?: P, credential?: string | null | undefined): Promise extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : Endpoints[E]['res']['$switch']['$default'] : Endpoints[E]['res']>; +} + +// @public (undocumented) +type APIError = { + id: string; + code: string; + message: string; + kind: 'client' | 'server'; + info: Record; +}; + +// @public (undocumented) +type App = TODO_2; + +// @public (undocumented) +type AuthSession = { + id: ID; + app: App; + token: string; +}; + +// @public (undocumented) +type Blocking = { + id: ID; + createdAt: DateString; + blockeeId: User['id']; + blockee: UserDetailed; +}; + +// @public (undocumented) +type Channel = { + id: ID; +}; + +// Warning: (ae-forgotten-export) The symbol "AnyOf" needs to be exported by the entry point index.d.ts +// +// @public (undocumented) +export abstract class ChannelConnection = any> extends EventEmitter { + constructor(stream: Stream, channel: string, name?: string); + // (undocumented) + channel: string; + // (undocumented) + abstract dispose(): void; + // (undocumented) + abstract id: string; + // (undocumented) + inCount: number; + // (undocumented) + name?: string; + // (undocumented) + outCount: number; + // (undocumented) + send(type: T, body: Channel['receives'][T]): void; + // (undocumented) + protected stream: Stream; +} + +// @public (undocumented) +export type Channels = { + main: { + params: null; + events: { + notification: (payload: Notification_2) => void; + mention: (payload: Note) => void; + reply: (payload: Note) => void; + renote: (payload: Note) => void; + follow: (payload: User) => void; + followed: (payload: User) => void; + unfollow: (payload: User) => void; + meUpdated: (payload: MeDetailed) => void; + pageEvent: (payload: PageEvent) => void; + urlUploadFinished: (payload: { + marker: string; + file: DriveFile; + }) => void; + readAllNotifications: () => void; + unreadNotification: (payload: Notification_2) => void; + unreadMention: (payload: Note['id']) => void; + readAllUnreadMentions: () => void; + unreadSpecifiedNote: (payload: Note['id']) => void; + readAllUnreadSpecifiedNotes: () => void; + readAllMessagingMessages: () => void; + messagingMessage: (payload: MessagingMessage) => void; + unreadMessagingMessage: (payload: MessagingMessage) => void; + readAllAntennas: () => void; + unreadAntenna: (payload: Antenna) => void; + readAllAnnouncements: () => void; + readAllChannels: () => void; + unreadChannel: (payload: Note['id']) => void; + myTokenRegenerated: () => void; + reversiNoInvites: () => void; + reversiInvited: (payload: FIXME) => void; + signin: (payload: FIXME) => void; + registryUpdated: (payload: { + scope?: string[]; + key: string; + value: any | null; + }) => void; + driveFileCreated: (payload: DriveFile) => void; + readAntenna: (payload: Antenna) => void; + }; + receives: null; + }; + homeTimeline: { + params: null; + events: { + note: (payload: Note) => void; + }; + receives: null; + }; + localTimeline: { + params: null; + events: { + note: (payload: Note) => void; + }; + receives: null; + }; + hybridTimeline: { + params: null; + events: { + note: (payload: Note) => void; + }; + receives: null; + }; + globalTimeline: { + params: null; + events: { + note: (payload: Note) => void; + }; + receives: null; + }; + messaging: { + params: { + otherparty?: User['id'] | null; + group?: UserGroup['id'] | null; + }; + events: { + message: (payload: MessagingMessage) => void; + deleted: (payload: MessagingMessage['id']) => void; + read: (payload: MessagingMessage['id'][]) => void; + typers: (payload: User[]) => void; + }; + receives: { + read: { + id: MessagingMessage['id']; + }; + }; + }; + serverStats: { + params: null; + events: { + stats: (payload: FIXME) => void; + }; + receives: { + requestLog: { + id: string | number; + length: number; + }; + }; + }; + queueStats: { + params: null; + events: { + stats: (payload: FIXME) => void; + }; + receives: { + requestLog: { + id: string | number; + length: number; + }; + }; + }; +}; + +// @public (undocumented) +type Clip = TODO_2; + +// @public (undocumented) +type CustomEmoji = { + id: string; + name: string; + url: string; + category: string; + aliases: string[]; +}; + +// @public (undocumented) +type DateString = string; + +// @public (undocumented) +type DetailedInstanceMetadata = LiteInstanceMetadata & { + pinnedPages: string[]; + pinnedClipId: string | null; + cacheRemoteFiles: boolean; + requireSetup: boolean; + proxyAccountName: string | null; + features: Record; +}; + +// @public (undocumented) +type DriveFile = { + id: ID; + createdAt: DateString; + isSensitive: boolean; + name: string; + thumbnailUrl: string; + url: string; + type: string; + size: number; + md5: string; + blurhash: string; + comment: string | null; + properties: Record; +}; + +// @public (undocumented) +type DriveFolder = TODO_2; + +// @public (undocumented) +export type Endpoints = { + 'admin/abuse-user-reports': { + req: TODO; + res: TODO; + }; + 'admin/delete-all-files-of-a-user': { + req: { + userId: User['id']; + }; + res: null; + }; + 'admin/delete-logs': { + req: NoParams; + res: null; + }; + 'admin/get-index-stats': { + req: TODO; + res: TODO; + }; + 'admin/get-table-stats': { + req: TODO; + res: TODO; + }; + 'admin/invite': { + req: TODO; + res: TODO; + }; + 'admin/logs': { + req: TODO; + res: TODO; + }; + 'admin/reset-password': { + req: TODO; + res: TODO; + }; + 'admin/resolve-abuse-user-report': { + req: TODO; + res: TODO; + }; + 'admin/resync-chart': { + req: TODO; + res: TODO; + }; + 'admin/send-email': { + req: TODO; + res: TODO; + }; + 'admin/server-info': { + req: TODO; + res: TODO; + }; + 'admin/show-moderation-logs': { + req: TODO; + res: TODO; + }; + 'admin/show-user': { + req: TODO; + res: TODO; + }; + 'admin/show-users': { + req: TODO; + res: TODO; + }; + 'admin/silence-user': { + req: TODO; + res: TODO; + }; + 'admin/suspend-user': { + req: TODO; + res: TODO; + }; + 'admin/unsilence-user': { + req: TODO; + res: TODO; + }; + 'admin/unsuspend-user': { + req: TODO; + res: TODO; + }; + 'admin/update-meta': { + req: TODO; + res: TODO; + }; + 'admin/vacuum': { + req: TODO; + res: TODO; + }; + 'admin/accounts/create': { + req: TODO; + res: TODO; + }; + 'admin/ad/create': { + req: TODO; + res: TODO; + }; + 'admin/ad/delete': { + req: { + id: Ad['id']; + }; + res: null; + }; + 'admin/ad/list': { + req: TODO; + res: TODO; + }; + 'admin/ad/update': { + req: TODO; + res: TODO; + }; + 'admin/announcements/create': { + req: TODO; + res: TODO; + }; + 'admin/announcements/delete': { + req: { + id: Announcement['id']; + }; + res: null; + }; + 'admin/announcements/list': { + req: TODO; + res: TODO; + }; + 'admin/announcements/update': { + req: TODO; + res: TODO; + }; + 'admin/drive/clean-remote-files': { + req: TODO; + res: TODO; + }; + 'admin/drive/cleanup': { + req: TODO; + res: TODO; + }; + 'admin/drive/files': { + req: TODO; + res: TODO; + }; + 'admin/drive/show-file': { + req: TODO; + res: TODO; + }; + 'admin/emoji/add': { + req: TODO; + res: TODO; + }; + 'admin/emoji/copy': { + req: TODO; + res: TODO; + }; + 'admin/emoji/list-remote': { + req: TODO; + res: TODO; + }; + 'admin/emoji/list': { + req: TODO; + res: TODO; + }; + 'admin/emoji/remove': { + req: TODO; + res: TODO; + }; + 'admin/emoji/update': { + req: TODO; + res: TODO; + }; + 'admin/federation/delete-all-files': { + req: { + host: string; + }; + res: null; + }; + 'admin/federation/refresh-remote-instance-metadata': { + req: TODO; + res: TODO; + }; + 'admin/federation/remove-all-following': { + req: TODO; + res: TODO; + }; + 'admin/federation/update-instance': { + req: TODO; + res: TODO; + }; + 'admin/moderators/add': { + req: TODO; + res: TODO; + }; + 'admin/moderators/remove': { + req: TODO; + res: TODO; + }; + 'admin/promo/create': { + req: TODO; + res: TODO; + }; + 'admin/queue/clear': { + req: TODO; + res: TODO; + }; + 'admin/queue/deliver-delayed': { + req: TODO; + res: TODO; + }; + 'admin/queue/inbox-delayed': { + req: TODO; + res: TODO; + }; + 'admin/queue/jobs': { + req: TODO; + res: TODO; + }; + 'admin/queue/stats': { + req: TODO; + res: TODO; + }; + 'admin/relays/add': { + req: TODO; + res: TODO; + }; + 'admin/relays/list': { + req: TODO; + res: TODO; + }; + 'admin/relays/remove': { + req: TODO; + res: TODO; + }; + 'announcements': { + req: { + limit?: number; + withUnreads?: boolean; + sinceId?: Announcement['id']; + untilId?: Announcement['id']; + }; + res: Announcement[]; + }; + 'antennas/create': { + req: TODO; + res: Antenna; + }; + 'antennas/delete': { + req: { + antennaId: Antenna['id']; + }; + res: null; + }; + 'antennas/list': { + req: NoParams; + res: Antenna[]; + }; + 'antennas/notes': { + req: { + antennaId: Antenna['id']; + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + }; + res: Note[]; + }; + 'antennas/show': { + req: { + antennaId: Antenna['id']; + }; + res: Antenna; + }; + 'antennas/update': { + req: TODO; + res: Antenna; + }; + 'ap/get': { + req: { + uri: string; + }; + res: Record; + }; + 'ap/show': { + req: { + uri: string; + }; + res: { + type: 'Note'; + object: Note; + } | { + type: 'User'; + object: UserDetailed; + }; + }; + 'app/create': { + req: TODO; + res: App; + }; + 'app/show': { + req: { + appId: App['id']; + }; + res: App; + }; + 'auth/accept': { + req: { + token: string; + }; + res: null; + }; + 'auth/session/generate': { + req: { + appSecret: string; + }; + res: { + token: string; + url: string; + }; + }; + 'auth/session/show': { + req: { + token: string; + }; + res: AuthSession; + }; + 'auth/session/userkey': { + req: { + appSecret: string; + token: string; + }; + res: { + accessToken: string; + user: User; + }; + }; + 'blocking/create': { + req: { + userId: User['id']; + }; + res: UserDetailed; + }; + 'blocking/delete': { + req: { + userId: User['id']; + }; + res: UserDetailed; + }; + 'blocking/list': { + req: { + limit?: number; + sinceId?: Blocking['id']; + untilId?: Blocking['id']; + }; + res: Blocking[]; + }; + 'channels/create': { + req: TODO; + res: TODO; + }; + 'channels/featured': { + req: TODO; + res: TODO; + }; + 'channels/follow': { + req: TODO; + res: TODO; + }; + 'channels/followed': { + req: TODO; + res: TODO; + }; + 'channels/owned': { + req: TODO; + res: TODO; + }; + 'channels/pin-note': { + req: TODO; + res: TODO; + }; + 'channels/show': { + req: TODO; + res: TODO; + }; + 'channels/timeline': { + req: TODO; + res: TODO; + }; + 'channels/unfollow': { + req: TODO; + res: TODO; + }; + 'channels/update': { + req: TODO; + res: TODO; + }; + 'charts/active-users': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + }; + res: { + local: { + users: number[]; + }; + remote: { + users: number[]; + }; + }; + }; + 'charts/drive': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + }; + res: { + local: { + decCount: number[]; + decSize: number[]; + incCount: number[]; + incSize: number[]; + totalCount: number[]; + totalSize: number[]; + }; + remote: { + decCount: number[]; + decSize: number[]; + incCount: number[]; + incSize: number[]; + totalCount: number[]; + totalSize: number[]; + }; + }; + }; + 'charts/federation': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + }; + res: { + instance: { + dec: number[]; + inc: number[]; + total: number[]; + }; + }; + }; + 'charts/hashtag': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + }; + res: TODO; + }; + 'charts/instance': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + host: string; + }; + res: { + drive: { + decFiles: number[]; + decUsage: number[]; + incFiles: number[]; + incUsage: number[]; + totalFiles: number[]; + totalUsage: number[]; + }; + followers: { + dec: number[]; + inc: number[]; + total: number[]; + }; + following: { + dec: number[]; + inc: number[]; + total: number[]; + }; + notes: { + dec: number[]; + inc: number[]; + total: number[]; + diffs: { + normal: number[]; + renote: number[]; + reply: number[]; + }; + }; + requests: { + failed: number[]; + received: number[]; + succeeded: number[]; + }; + users: { + dec: number[]; + inc: number[]; + total: number[]; + }; + }; + }; + 'charts/network': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + }; + res: TODO; + }; + 'charts/notes': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + }; + res: { + local: { + dec: number[]; + inc: number[]; + total: number[]; + diffs: { + normal: number[]; + renote: number[]; + reply: number[]; + }; + }; + remote: { + dec: number[]; + inc: number[]; + total: number[]; + diffs: { + normal: number[]; + renote: number[]; + reply: number[]; + }; + }; + }; + }; + 'charts/user/drive': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + userId: User['id']; + }; + res: { + decCount: number[]; + decSize: number[]; + incCount: number[]; + incSize: number[]; + totalCount: number[]; + totalSize: number[]; + }; + }; + 'charts/user/following': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + userId: User['id']; + }; + res: TODO; + }; + 'charts/user/notes': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + userId: User['id']; + }; + res: { + dec: number[]; + inc: number[]; + total: number[]; + diffs: { + normal: number[]; + renote: number[]; + reply: number[]; + }; + }; + }; + 'charts/user/reactions': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + userId: User['id']; + }; + res: TODO; + }; + 'charts/users': { + req: { + span: 'day' | 'hour'; + limit?: number; + offset?: number | null; + }; + res: { + local: { + dec: number[]; + inc: number[]; + total: number[]; + }; + remote: { + dec: number[]; + inc: number[]; + total: number[]; + }; + }; + }; + 'clips/add-note': { + req: TODO; + res: TODO; + }; + 'clips/create': { + req: TODO; + res: TODO; + }; + 'clips/delete': { + req: { + clipId: Clip['id']; + }; + res: null; + }; + 'clips/list': { + req: TODO; + res: TODO; + }; + 'clips/notes': { + req: TODO; + res: TODO; + }; + 'clips/show': { + req: TODO; + res: TODO; + }; + 'clips/update': { + req: TODO; + res: TODO; + }; + 'drive': { + req: NoParams; + res: { + capacity: number; + usage: number; + }; + }; + 'drive/files': { + req: { + folderId?: DriveFolder['id'] | null; + type?: DriveFile['type'] | null; + limit?: number; + sinceId?: DriveFile['id']; + untilId?: DriveFile['id']; + }; + res: DriveFile[]; + }; + 'drive/files/attached-notes': { + req: TODO; + res: TODO; + }; + 'drive/files/check-existence': { + req: TODO; + res: TODO; + }; + 'drive/files/create': { + req: TODO; + res: TODO; + }; + 'drive/files/delete': { + req: { + fileId: DriveFile['id']; + }; + res: null; + }; + 'drive/files/find-by-hash': { + req: TODO; + res: TODO; + }; + 'drive/files/find': { + req: { + name: string; + folderId?: DriveFolder['id'] | null; + }; + res: DriveFile[]; + }; + 'drive/files/show': { + req: { + fileId?: DriveFile['id']; + url?: string; + }; + res: DriveFile; + }; + 'drive/files/update': { + req: { + fileId: DriveFile['id']; + folderId?: DriveFolder['id'] | null; + name?: string; + isSensitive?: boolean; + comment?: string | null; + }; + res: DriveFile; + }; + 'drive/files/upload-from-url': { + req: { + url: string; + folderId?: DriveFolder['id'] | null; + isSensitive?: boolean; + comment?: string | null; + marker?: string | null; + force?: boolean; + }; + res: null; + }; + 'drive/folders': { + req: { + folderId?: DriveFolder['id'] | null; + limit?: number; + sinceId?: DriveFile['id']; + untilId?: DriveFile['id']; + }; + res: DriveFolder[]; + }; + 'drive/folders/create': { + req: { + name?: string; + parentId?: DriveFolder['id'] | null; + }; + res: DriveFolder; + }; + 'drive/folders/delete': { + req: { + folderId: DriveFolder['id']; + }; + res: null; + }; + 'drive/folders/find': { + req: { + name: string; + parentId?: DriveFolder['id'] | null; + }; + res: DriveFolder[]; + }; + 'drive/folders/show': { + req: { + folderId: DriveFolder['id']; + }; + res: DriveFolder; + }; + 'drive/folders/update': { + req: { + folderId: DriveFolder['id']; + name?: string; + parentId?: DriveFolder['id'] | null; + }; + res: DriveFolder; + }; + 'drive/stream': { + req: { + type?: DriveFile['type'] | null; + limit?: number; + sinceId?: DriveFile['id']; + untilId?: DriveFile['id']; + }; + res: DriveFile[]; + }; + 'endpoint': { + req: { + endpoint: string; + }; + res: { + params: { + name: string; + type: string; + }[]; + }; + }; + 'endpoints': { + req: NoParams; + res: string[]; + }; + 'federation/dns': { + req: { + host: string; + }; + res: { + a: string[]; + aaaa: string[]; + cname: string[]; + txt: string[]; + }; + }; + 'federation/followers': { + req: { + host: string; + limit?: number; + sinceId?: Following['id']; + untilId?: Following['id']; + }; + res: FollowingFolloweePopulated[]; + }; + 'federation/following': { + req: { + host: string; + limit?: number; + sinceId?: Following['id']; + untilId?: Following['id']; + }; + res: FollowingFolloweePopulated[]; + }; + 'federation/instances': { + req: { + host?: string | null; + blocked?: boolean | null; + notResponding?: boolean | null; + suspended?: boolean | null; + federating?: boolean | null; + subscribing?: boolean | null; + publishing?: boolean | null; + limit?: number; + offset?: number; + sort?: '+pubSub' | '-pubSub' | '+notes' | '-notes' | '+users' | '-users' | '+following' | '-following' | '+followers' | '-followers' | '+caughtAt' | '-caughtAt' | '+lastCommunicatedAt' | '-lastCommunicatedAt' | '+driveUsage' | '-driveUsage' | '+driveFiles' | '-driveFiles'; + }; + res: Instance[]; + }; + 'federation/show-instance': { + req: { + host: string; + }; + res: Instance; + }; + 'federation/update-remote-user': { + req: { + userId: User['id']; + }; + res: null; + }; + 'federation/users': { + req: { + host: string; + limit?: number; + sinceId?: User['id']; + untilId?: User['id']; + }; + res: UserDetailed[]; + }; + 'following/create': { + req: { + userId: User['id']; + }; + res: User; + }; + 'following/delete': { + req: { + userId: User['id']; + }; + res: User; + }; + 'following/requests/accept': { + req: { + userId: User['id']; + }; + res: null; + }; + 'following/requests/cancel': { + req: { + userId: User['id']; + }; + res: User; + }; + 'following/requests/list': { + req: NoParams; + res: FollowRequest[]; + }; + 'following/requests/reject': { + req: { + userId: User['id']; + }; + res: null; + }; + 'gallery/featured': { + req: null; + res: GalleryPost[]; + }; + 'gallery/popular': { + req: null; + res: GalleryPost[]; + }; + 'gallery/posts': { + req: { + limit?: number; + sinceId?: GalleryPost['id']; + untilId?: GalleryPost['id']; + }; + res: GalleryPost[]; + }; + 'gallery/posts/create': { + req: { + title: GalleryPost['title']; + description?: GalleryPost['description']; + fileIds: GalleryPost['fileIds']; + isSensitive?: GalleryPost['isSensitive']; + }; + res: GalleryPost; + }; + 'gallery/posts/delete': { + req: { + postId: GalleryPost['id']; + }; + res: null; + }; + 'gallery/posts/like': { + req: { + postId: GalleryPost['id']; + }; + res: null; + }; + 'gallery/posts/show': { + req: { + postId: GalleryPost['id']; + }; + res: GalleryPost; + }; + 'gallery/posts/unlike': { + req: { + postId: GalleryPost['id']; + }; + res: null; + }; + 'gallery/posts/update': { + req: { + postId: GalleryPost['id']; + title: GalleryPost['title']; + description?: GalleryPost['description']; + fileIds: GalleryPost['fileIds']; + isSensitive?: GalleryPost['isSensitive']; + }; + res: GalleryPost; + }; + 'games/reversi/games': { + req: TODO; + res: TODO; + }; + 'games/reversi/games/show': { + req: TODO; + res: TODO; + }; + 'games/reversi/games/surrender': { + req: TODO; + res: TODO; + }; + 'games/reversi/invitations': { + req: TODO; + res: TODO; + }; + 'games/reversi/match': { + req: TODO; + res: TODO; + }; + 'games/reversi/match/cancel': { + req: TODO; + res: TODO; + }; + 'get-online-users-count': { + req: NoParams; + res: { + count: number; + }; + }; + 'hashtags/list': { + req: TODO; + res: TODO; + }; + 'hashtags/search': { + req: TODO; + res: TODO; + }; + 'hashtags/show': { + req: TODO; + res: TODO; + }; + 'hashtags/trend': { + req: TODO; + res: TODO; + }; + 'hashtags/users': { + req: TODO; + res: TODO; + }; + 'i': { + req: NoParams; + res: User; + }; + 'i/apps': { + req: TODO; + res: TODO; + }; + 'i/authorized-apps': { + req: TODO; + res: TODO; + }; + 'i/change-password': { + req: TODO; + res: TODO; + }; + 'i/delete-account': { + req: { + password: string; + }; + res: null; + }; + 'i/export-blocking': { + req: TODO; + res: TODO; + }; + 'i/export-following': { + req: TODO; + res: TODO; + }; + 'i/export-mute': { + req: TODO; + res: TODO; + }; + 'i/export-notes': { + req: TODO; + res: TODO; + }; + 'i/export-user-lists': { + req: TODO; + res: TODO; + }; + 'i/favorites': { + req: { + limit?: number; + sinceId?: NoteFavorite['id']; + untilId?: NoteFavorite['id']; + }; + res: NoteFavorite[]; + }; + 'i/gallery/likes': { + req: TODO; + res: TODO; + }; + 'i/gallery/posts': { + req: TODO; + res: TODO; + }; + 'i/get-word-muted-notes-count': { + req: TODO; + res: TODO; + }; + 'i/import-following': { + req: TODO; + res: TODO; + }; + 'i/import-user-lists': { + req: TODO; + res: TODO; + }; + 'i/notifications': { + req: { + limit?: number; + sinceId?: Notification_2['id']; + untilId?: Notification_2['id']; + following?: boolean; + markAsRead?: boolean; + includeTypes?: Notification_2['type'][]; + excludeTypes?: Notification_2['type'][]; + }; + res: Notification_2[]; + }; + 'i/page-likes': { + req: TODO; + res: TODO; + }; + 'i/pages': { + req: TODO; + res: TODO; + }; + 'i/pin': { + req: { + noteId: Note['id']; + }; + res: MeDetailed; + }; + 'i/read-all-messaging-messages': { + req: TODO; + res: TODO; + }; + 'i/read-all-unread-notes': { + req: TODO; + res: TODO; + }; + 'i/read-announcement': { + req: TODO; + res: TODO; + }; + 'i/regenerate-token': { + req: { + password: string; + }; + res: null; + }; + 'i/registry/get-all': { + req: { + scope?: string[]; + }; + res: Record; + }; + 'i/registry/get-detail': { + req: { + key: string; + scope?: string[]; + }; + res: { + updatedAt: DateString; + value: any; + }; + }; + 'i/registry/get': { + req: { + key: string; + scope?: string[]; + }; + res: any; + }; + 'i/registry/keys-with-type': { + req: { + scope?: string[]; + }; + res: Record; + }; + 'i/registry/keys': { + req: { + scope?: string[]; + }; + res: string[]; + }; + 'i/registry/remove': { + req: { + key: string; + scope?: string[]; + }; + res: null; + }; + 'i/registry/scopes': { + req: NoParams; + res: string[][]; + }; + 'i/registry/set': { + req: { + key: string; + value: any; + scope?: string[]; + }; + res: null; + }; + 'i/revoke-token': { + req: TODO; + res: TODO; + }; + 'i/signin-history': { + req: { + limit?: number; + sinceId?: Signin['id']; + untilId?: Signin['id']; + }; + res: Signin[]; + }; + 'i/unpin': { + req: { + noteId: Note['id']; + }; + res: MeDetailed; + }; + 'i/update-email': { + req: { + password: string; + email?: string | null; + }; + res: MeDetailed; + }; + 'i/update': { + req: { + name?: string | null; + description?: string | null; + lang?: string | null; + location?: string | null; + birthday?: string | null; + avatarId?: DriveFile['id'] | null; + bannerId?: DriveFile['id'] | null; + fields?: { + name: string; + value: string; + }[]; + isLocked?: boolean; + isExplorable?: boolean; + hideOnlineStatus?: boolean; + carefulBot?: boolean; + autoAcceptFollowed?: boolean; + noCrawle?: boolean; + isBot?: boolean; + isCat?: boolean; + injectFeaturedNote?: boolean; + receiveAnnouncementEmail?: boolean; + alwaysMarkNsfw?: boolean; + mutedWords?: string[][]; + mutingNotificationTypes?: Notification_2['type'][]; + emailNotificationTypes?: string[]; + }; + res: MeDetailed; + }; + 'i/user-group-invites': { + req: TODO; + res: TODO; + }; + 'i/2fa/done': { + req: TODO; + res: TODO; + }; + 'i/2fa/key-done': { + req: TODO; + res: TODO; + }; + 'i/2fa/password-less': { + req: TODO; + res: TODO; + }; + 'i/2fa/register-key': { + req: TODO; + res: TODO; + }; + 'i/2fa/register': { + req: TODO; + res: TODO; + }; + 'i/2fa/remove-key': { + req: TODO; + res: TODO; + }; + 'i/2fa/unregister': { + req: TODO; + res: TODO; + }; + 'messaging/history': { + req: { + limit?: number; + group?: boolean; + }; + res: MessagingMessage[]; + }; + 'messaging/messages': { + req: { + userId?: User['id']; + groupId?: UserGroup['id']; + limit?: number; + sinceId?: MessagingMessage['id']; + untilId?: MessagingMessage['id']; + markAsRead?: boolean; + }; + res: MessagingMessage[]; + }; + 'messaging/messages/create': { + req: { + userId?: User['id']; + groupId?: UserGroup['id']; + text?: string; + fileId?: DriveFile['id']; + }; + res: MessagingMessage; + }; + 'messaging/messages/delete': { + req: { + messageId: MessagingMessage['id']; + }; + res: null; + }; + 'messaging/messages/read': { + req: { + messageId: MessagingMessage['id']; + }; + res: null; + }; + 'meta': { + req: { + detail?: boolean; + }; + res: { + $switch: { + $cases: [ + [ + { + detail: true; + }, + DetailedInstanceMetadata + ], + [ + { + detail: false; + }, + LiteInstanceMetadata + ], + [ + { + detail: boolean; + }, + LiteInstanceMetadata | DetailedInstanceMetadata + ] + ]; + $default: LiteInstanceMetadata; + }; + }; + }; + 'miauth/gen-token': { + req: TODO; + res: TODO; + }; + 'mute/create': { + req: TODO; + res: TODO; + }; + 'mute/delete': { + req: { + userId: User['id']; + }; + res: null; + }; + 'mute/list': { + req: TODO; + res: TODO; + }; + 'my/apps': { + req: TODO; + res: TODO; + }; + 'notes': { + req: { + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + }; + res: Note[]; + }; + 'notes/children': { + req: { + noteId: Note['id']; + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + }; + res: Note[]; + }; + 'notes/clips': { + req: TODO; + res: TODO; + }; + 'notes/conversation': { + req: TODO; + res: TODO; + }; + 'notes/create': { + req: { + visibility?: 'public' | 'home' | 'followers' | 'specified'; + visibleUserIds?: User['id'][]; + text?: null | string; + cw?: null | string; + viaMobile?: boolean; + localOnly?: boolean; + fileIds?: DriveFile['id'][]; + replyId?: null | Note['id']; + renoteId?: null | Note['id']; + channelId?: null | Channel['id']; + poll?: null | { + choices: string[]; + multiple?: boolean; + expiresAt?: null | number; + expiredAfter?: null | number; + }; + }; + res: { + createdNote: Note; + }; + }; + 'notes/delete': { + req: { + noteId: Note['id']; + }; + res: null; + }; + 'notes/favorites/create': { + req: { + noteId: Note['id']; + }; + res: null; + }; + 'notes/favorites/delete': { + req: { + noteId: Note['id']; + }; + res: null; + }; + 'notes/featured': { + req: TODO; + res: Note[]; + }; + 'notes/global-timeline': { + req: { + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + sinceDate?: number; + untilDate?: number; + }; + res: Note[]; + }; + 'notes/hybrid-timeline': { + req: { + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + sinceDate?: number; + untilDate?: number; + }; + res: Note[]; + }; + 'notes/local-timeline': { + req: { + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + sinceDate?: number; + untilDate?: number; + }; + res: Note[]; + }; + 'notes/mentions': { + req: { + following?: boolean; + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + }; + res: Note[]; + }; + 'notes/polls/recommendation': { + req: TODO; + res: TODO; + }; + 'notes/polls/vote': { + req: { + noteId: Note['id']; + choice: number; + }; + res: null; + }; + 'notes/reactions': { + req: { + noteId: Note['id']; + type?: string | null; + limit?: number; + }; + res: NoteReaction[]; + }; + 'notes/reactions/create': { + req: { + noteId: Note['id']; + reaction: string; + }; + res: null; + }; + 'notes/reactions/delete': { + req: { + noteId: Note['id']; + }; + res: null; + }; + 'notes/renotes': { + req: { + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + noteId: Note['id']; + }; + res: Note[]; + }; + 'notes/replies': { + req: { + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + noteId: Note['id']; + }; + res: Note[]; + }; + 'notes/search-by-tag': { + req: TODO; + res: TODO; + }; + 'notes/search': { + req: TODO; + res: TODO; + }; + 'notes/show': { + req: { + noteId: Note['id']; + }; + res: Note; + }; + 'notes/state': { + req: TODO; + res: TODO; + }; + 'notes/timeline': { + req: { + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + sinceDate?: number; + untilDate?: number; + }; + res: Note[]; + }; + 'notes/unrenote': { + req: { + noteId: Note['id']; + }; + res: null; + }; + 'notes/user-list-timeline': { + req: { + listId: UserList['id']; + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + sinceDate?: number; + untilDate?: number; + }; + res: Note[]; + }; + 'notes/watching/create': { + req: TODO; + res: TODO; + }; + 'notes/watching/delete': { + req: { + noteId: Note['id']; + }; + res: null; + }; + 'notifications/create': { + req: { + body: string; + header?: string | null; + icon?: string | null; + }; + res: null; + }; + 'notifications/mark-all-as-read': { + req: NoParams; + res: null; + }; + 'notifications/read': { + req: { + notificationId: Notification_2['id']; + }; + res: null; + }; + 'page-push': { + req: { + pageId: Page['id']; + event: string; + var?: any; + }; + res: null; + }; + 'pages/create': { + req: TODO; + res: Page; + }; + 'pages/delete': { + req: { + pageId: Page['id']; + }; + res: null; + }; + 'pages/featured': { + req: NoParams; + res: Page[]; + }; + 'pages/like': { + req: { + pageId: Page['id']; + }; + res: null; + }; + 'pages/show': { + req: { + pageId?: Page['id']; + name?: string; + username?: string; + }; + res: Page; + }; + 'pages/unlike': { + req: { + pageId: Page['id']; + }; + res: null; + }; + 'pages/update': { + req: TODO; + res: null; + }; + 'ping': { + req: NoParams; + res: { + pong: number; + }; + }; + 'pinned-users': { + req: TODO; + res: TODO; + }; + 'promo/read': { + req: TODO; + res: TODO; + }; + 'request-reset-password': { + req: { + username: string; + email: string; + }; + res: null; + }; + 'reset-password': { + req: { + token: string; + password: string; + }; + res: null; + }; + 'room/show': { + req: TODO; + res: TODO; + }; + 'room/update': { + req: TODO; + res: TODO; + }; + 'stats': { + req: NoParams; + res: Stats; + }; + 'server-info': { + req: NoParams; + res: ServerInfo; + }; + 'sw/register': { + req: TODO; + res: TODO; + }; + 'username/available': { + req: { + username: string; + }; + res: { + available: boolean; + }; + }; + 'users': { + req: { + limit?: number; + offset?: number; + sort?: UserSorting; + origin?: OriginType; + }; + res: User[]; + }; + 'users/clips': { + req: TODO; + res: TODO; + }; + 'users/followers': { + req: { + userId?: User['id']; + username?: User['username']; + host?: User['host'] | null; + limit?: number; + sinceId?: Following['id']; + untilId?: Following['id']; + }; + res: FollowingFollowerPopulated[]; + }; + 'users/following': { + req: { + userId?: User['id']; + username?: User['username']; + host?: User['host'] | null; + limit?: number; + sinceId?: Following['id']; + untilId?: Following['id']; + }; + res: FollowingFolloweePopulated[]; + }; + 'users/gallery/posts': { + req: TODO; + res: TODO; + }; + 'users/get-frequently-replied-users': { + req: TODO; + res: TODO; + }; + 'users/groups/create': { + req: TODO; + res: TODO; + }; + 'users/groups/delete': { + req: { + groupId: UserGroup['id']; + }; + res: null; + }; + 'users/groups/invitations/accept': { + req: TODO; + res: TODO; + }; + 'users/groups/invitations/reject': { + req: TODO; + res: TODO; + }; + 'users/groups/invite': { + req: TODO; + res: TODO; + }; + 'users/groups/joined': { + req: TODO; + res: TODO; + }; + 'users/groups/owned': { + req: TODO; + res: TODO; + }; + 'users/groups/pull': { + req: TODO; + res: TODO; + }; + 'users/groups/show': { + req: TODO; + res: TODO; + }; + 'users/groups/transfer': { + req: TODO; + res: TODO; + }; + 'users/groups/update': { + req: TODO; + res: TODO; + }; + 'users/lists/create': { + req: { + name: string; + }; + res: UserList; + }; + 'users/lists/delete': { + req: { + listId: UserList['id']; + }; + res: null; + }; + 'users/lists/list': { + req: NoParams; + res: UserList[]; + }; + 'users/lists/pull': { + req: { + listId: UserList['id']; + userId: User['id']; + }; + res: null; + }; + 'users/lists/push': { + req: { + listId: UserList['id']; + userId: User['id']; + }; + res: null; + }; + 'users/lists/show': { + req: { + listId: UserList['id']; + }; + res: UserList; + }; + 'users/lists/update': { + req: { + listId: UserList['id']; + name: string; + }; + res: UserList; + }; + 'users/notes': { + req: { + userId: User['id']; + limit?: number; + sinceId?: Note['id']; + untilId?: Note['id']; + sinceDate?: number; + untilDate?: number; + }; + res: Note[]; + }; + 'users/pages': { + req: TODO; + res: TODO; + }; + 'users/recommendation': { + req: TODO; + res: TODO; + }; + 'users/relation': { + req: TODO; + res: TODO; + }; + 'users/report-abuse': { + req: TODO; + res: TODO; + }; + 'users/search-by-username-and-host': { + req: TODO; + res: TODO; + }; + 'users/search': { + req: TODO; + res: TODO; + }; + 'users/show': { + req: ShowUserReq | { + userIds: User['id'][]; + }; + res: { + $switch: { + $cases: [ + [ + { + userIds: User['id'][]; + }, + UserDetailed[] + ] + ]; + $default: UserDetailed; + }; + }; + }; + 'users/stats': { + req: TODO; + res: TODO; + }; +}; + +declare namespace entities { + export { + ID, + DateString, + User, + UserLite, + UserDetailed, + UserGroup, + UserList, + MeDetailed, + DriveFile, + DriveFolder, + GalleryPost, + Note, + NoteReaction, + Notification_2 as Notification, + MessagingMessage, + CustomEmoji, + LiteInstanceMetadata, + DetailedInstanceMetadata, + InstanceMetadata, + ServerInfo, + Stats, + Page, + PageEvent, + Announcement, + Antenna, + App, + AuthSession, + Ad, + Clip, + NoteFavorite, + FollowRequest, + Channel, + Following, + FollowingFolloweePopulated, + FollowingFollowerPopulated, + Blocking, + Instance, + Signin, + UserSorting, + OriginType + } +} +export { entities } + +// @public (undocumented) +type FetchLike = (input: string, init?: { + method?: string; + body?: string; + credentials?: RequestCredentials; + cache?: RequestCache; + headers: { + [key in string]: string; + }; +}) => Promise<{ + status: number; + json(): Promise; +}>; + +// @public (undocumented) +export const ffVisibility: readonly ["public", "followers", "private"]; + +// @public (undocumented) +type Following = { + id: ID; + createdAt: DateString; + followerId: User['id']; + followeeId: User['id']; +}; + +// @public (undocumented) +type FollowingFolloweePopulated = Following & { + followee: UserDetailed; +}; + +// @public (undocumented) +type FollowingFollowerPopulated = Following & { + follower: UserDetailed; +}; + +// @public (undocumented) +type FollowRequest = { + id: ID; + follower: User; + followee: User; +}; + +// @public (undocumented) +type GalleryPost = { + id: ID; + createdAt: DateString; + updatedAt: DateString; + userId: User['id']; + user: User; + title: string; + description: string | null; + fileIds: DriveFile['id'][]; + files: DriveFile[]; + isSensitive: boolean; + likedCount: number; + isLiked?: boolean; +}; + +// @public (undocumented) +type ID = string; + +// @public (undocumented) +type Instance = { + id: ID; + caughtAt: DateString; + host: string; + usersCount: number; + notesCount: number; + followingCount: number; + followersCount: number; + driveUsage: number; + driveFiles: number; + latestRequestSentAt: DateString | null; + latestStatus: number | null; + latestRequestReceivedAt: DateString | null; + lastCommunicatedAt: DateString; + isNotResponding: boolean; + isSuspended: boolean; + softwareName: string | null; + softwareVersion: string | null; + openRegistrations: boolean | null; + name: string | null; + description: string | null; + maintainerName: string | null; + maintainerEmail: string | null; + iconUrl: string | null; + faviconUrl: string | null; + themeColor: string | null; + infoUpdatedAt: DateString | null; +}; + +// @public (undocumented) +type InstanceMetadata = LiteInstanceMetadata | DetailedInstanceMetadata; + +// @public (undocumented) +function isAPIError(reason: any): reason is APIError; + +// @public (undocumented) +type LiteInstanceMetadata = { + maintainerName: string | null; + maintainerEmail: string | null; + version: string; + name: string | null; + uri: string; + description: string | null; + langs: string[]; + tosUrl: string | null; + repositoryUrl: string; + feedbackUrl: string; + disableRegistration: boolean; + disableLocalTimeline: boolean; + disableGlobalTimeline: boolean; + driveCapacityPerLocalUserMb: number; + driveCapacityPerRemoteUserMb: number; + emailRequiredForSignup: boolean; + enableHcaptcha: boolean; + hcaptchaSiteKey: string | null; + enableRecaptcha: boolean; + recaptchaSiteKey: string | null; + enableTurnstile: boolean; + turnstileSiteKey: string | null; + swPublickey: string | null; + themeColor: string | null; + mascotImageUrl: string | null; + bannerUrl: string | null; + errorImageUrl: string | null; + iconUrl: string | null; + backgroundImageUrl: string | null; + logoImageUrl: string | null; + maxNoteTextLength: number; + enableEmail: boolean; + enableTwitterIntegration: boolean; + enableGithubIntegration: boolean; + enableDiscordIntegration: boolean; + enableServiceWorker: boolean; + emojis: CustomEmoji[]; + defaultDarkTheme: string | null; + defaultLightTheme: string | null; + ads: { + id: ID; + ratio: number; + place: string; + url: string; + imageUrl: string; + }[]; + translatorAvailable: boolean; +}; + +// @public (undocumented) +type MeDetailed = UserDetailed & { + avatarId: DriveFile['id']; + bannerId: DriveFile['id']; + autoAcceptFollowed: boolean; + alwaysMarkNsfw: boolean; + carefulBot: boolean; + emailNotificationTypes: string[]; + hasPendingReceivedFollowRequest: boolean; + hasUnreadAnnouncement: boolean; + hasUnreadAntenna: boolean; + hasUnreadChannel: boolean; + hasUnreadMentions: boolean; + hasUnreadMessagingMessage: boolean; + hasUnreadNotification: boolean; + hasUnreadSpecifiedNotes: boolean; + hideOnlineStatus: boolean; + injectFeaturedNote: boolean; + integrations: Record; + isDeleted: boolean; + isExplorable: boolean; + mutedWords: string[][]; + mutingNotificationTypes: string[]; + noCrawle: boolean; + receiveAnnouncementEmail: boolean; + usePasswordLessLogin: boolean; + [other: string]: any; +}; + +// @public (undocumented) +type MessagingMessage = { + id: ID; + createdAt: DateString; + file: DriveFile | null; + fileId: DriveFile['id'] | null; + isRead: boolean; + reads: User['id'][]; + text: string | null; + user: User; + userId: User['id']; + recipient?: User | null; + recipientId: User['id'] | null; + group?: UserGroup | null; + groupId: UserGroup['id'] | null; +}; + +// @public (undocumented) +export const mutedNoteReasons: readonly ["word", "manual", "spam", "other"]; + +// @public (undocumented) +type Note = { + id: ID; + createdAt: DateString; + text: string | null; + cw: string | null; + user: User; + userId: User['id']; + reply?: Note; + replyId: Note['id']; + renote?: Note; + renoteId: Note['id']; + files: DriveFile[]; + fileIds: DriveFile['id'][]; + visibility: 'public' | 'home' | 'followers' | 'specified'; + visibleUserIds?: User['id'][]; + localOnly?: boolean; + myReaction?: string; + reactions: Record; + renoteCount: number; + repliesCount: number; + poll?: { + expiresAt: DateString | null; + multiple: boolean; + choices: { + isVoted: boolean; + text: string; + votes: number; + }[]; + }; + emojis: { + name: string; + url: string; + }[]; + uri?: string; + url?: string; + isHidden?: boolean; +}; + +// @public (undocumented) +type NoteFavorite = { + id: ID; + createdAt: DateString; + noteId: Note['id']; + note: Note; +}; + +// @public (undocumented) +type NoteReaction = { + id: ID; + createdAt: DateString; + user: UserLite; + type: string; +}; + +// @public (undocumented) +export const noteVisibilities: readonly ["public", "home", "followers", "specified"]; + +// @public (undocumented) +type Notification_2 = { + id: ID; + createdAt: DateString; + isRead: boolean; +} & ({ + type: 'reaction'; + reaction: string; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'reply'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'renote'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'quote'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'mention'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'pollVote'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'follow'; + user: User; + userId: User['id']; +} | { + type: 'followRequestAccepted'; + user: User; + userId: User['id']; +} | { + type: 'receiveFollowRequest'; + user: User; + userId: User['id']; +} | { + type: 'groupInvited'; + invitation: UserGroup; + user: User; + userId: User['id']; +} | { + type: 'app'; + header?: string | null; + body: string; + icon?: string | null; +}); + +// @public (undocumented) +export const notificationTypes: readonly ["follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "pollEnded", "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app"]; + +// @public (undocumented) +type OriginType = 'combined' | 'local' | 'remote'; + +// @public (undocumented) +type Page = { + id: ID; + createdAt: DateString; + updatedAt: DateString; + userId: User['id']; + user: User; + content: Record[]; + variables: Record[]; + title: string; + name: string; + summary: string | null; + hideTitleWhenPinned: boolean; + alignCenter: boolean; + font: string; + script: string; + eyeCatchingImageId: DriveFile['id'] | null; + eyeCatchingImage: DriveFile | null; + attachedFiles: any; + likedCount: number; + isLiked?: boolean; +}; + +// @public (undocumented) +type PageEvent = { + pageId: Page['id']; + event: string; + var: any; + userId: User['id']; + user: User; +}; + +// @public (undocumented) +export const permissions: string[]; + +// @public (undocumented) +type ServerInfo = { + machine: string; + cpu: { + model: string; + cores: number; + }; + mem: { + total: number; + }; + fs: { + total: number; + used: number; + }; +}; + +// @public (undocumented) +type Signin = { + id: ID; + createdAt: DateString; + ip: string; + headers: Record; + success: boolean; +}; + +// @public (undocumented) +type Stats = { + notesCount: number; + originalNotesCount: number; + usersCount: number; + originalUsersCount: number; + instances: number; + driveUsageLocal: number; + driveUsageRemote: number; +}; + +// Warning: (ae-forgotten-export) The symbol "StreamEvents" needs to be exported by the entry point index.d.ts +// +// @public (undocumented) +export class Stream extends EventEmitter { + constructor(origin: string, user: { + token: string; + } | null, options?: { + WebSocket?: any; + }); + // (undocumented) + close(): void; + // Warning: (ae-forgotten-export) The symbol "NonSharedConnection" needs to be exported by the entry point index.d.ts + // + // (undocumented) + disconnectToChannel(connection: NonSharedConnection): void; + // Warning: (ae-forgotten-export) The symbol "SharedConnection" needs to be exported by the entry point index.d.ts + // + // (undocumented) + removeSharedConnection(connection: SharedConnection): void; + // Warning: (ae-forgotten-export) The symbol "Pool" needs to be exported by the entry point index.d.ts + // + // (undocumented) + removeSharedConnectionPool(pool: Pool): void; + // (undocumented) + send(typeOrPayload: any, payload?: any): void; + // (undocumented) + state: 'initializing' | 'reconnecting' | 'connected'; + // (undocumented) + useChannel(channel: C, params?: Channels[C]['params'], name?: string): ChannelConnection; +} + +// @public (undocumented) +type User = UserLite | UserDetailed; + +// @public (undocumented) +type UserDetailed = UserLite & { + bannerBlurhash: string | null; + bannerColor: string | null; + bannerUrl: string | null; + birthday: string | null; + createdAt: DateString; + description: string | null; + ffVisibility: 'public' | 'followers' | 'private'; + fields: { + name: string; + value: string; + }[]; + followersCount: number; + followingCount: number; + hasPendingFollowRequestFromYou: boolean; + hasPendingFollowRequestToYou: boolean; + isAdmin: boolean; + isBlocked: boolean; + isBlocking: boolean; + isBot: boolean; + isCat: boolean; + isFollowed: boolean; + isFollowing: boolean; + isLocked: boolean; + isModerator: boolean; + isMuted: boolean; + isSilenced: boolean; + isSuspended: boolean; + lang: string | null; + lastFetchedAt?: DateString; + location: string | null; + notesCount: number; + pinnedNoteIds: ID[]; + pinnedNotes: Note[]; + pinnedPage: Page | null; + pinnedPageId: string | null; + publicReactions: boolean; + securityKeys: boolean; + twoFactorEnabled: boolean; + updatedAt: DateString | null; + uri: string | null; + url: string | null; +}; + +// @public (undocumented) +type UserGroup = TODO_2; + +// @public (undocumented) +type UserList = { + id: ID; + createdAt: DateString; + name: string; + userIds: User['id'][]; +}; + +// @public (undocumented) +type UserLite = { + id: ID; + username: string; + host: string | null; + name: string; + onlineStatus: 'online' | 'active' | 'offline' | 'unknown'; + avatarUrl: string; + avatarBlurhash: string; + emojis: { + name: string; + url: string; + }[]; + instance?: { + name: Instance['name']; + softwareName: Instance['softwareName']; + softwareVersion: Instance['softwareVersion']; + iconUrl: Instance['iconUrl']; + faviconUrl: Instance['faviconUrl']; + themeColor: Instance['themeColor']; + }; +}; + +// @public (undocumented) +type UserSorting = '+follower' | '-follower' | '+createdAt' | '-createdAt' | '+updatedAt' | '-updatedAt'; + +// Warnings were encountered during analysis: +// +// src/api.types.ts:16:32 - (ae-forgotten-export) The symbol "TODO" needs to be exported by the entry point index.d.ts +// src/api.types.ts:18:25 - (ae-forgotten-export) The symbol "NoParams" needs to be exported by the entry point index.d.ts +// src/api.types.ts:595:18 - (ae-forgotten-export) The symbol "ShowUserReq" needs to be exported by the entry point index.d.ts +// src/streaming.types.ts:35:4 - (ae-forgotten-export) The symbol "FIXME" needs to be exported by the entry point index.d.ts + +// (No @packageDocumentation comment for this package) + +``` diff --git a/packages/misskey-js/jest.config.cjs b/packages/misskey-js/jest.config.cjs new file mode 100644 index 0000000000..e5a74170ea --- /dev/null +++ b/packages/misskey-js/jest.config.cjs @@ -0,0 +1,197 @@ +/* +* For a detailed explanation regarding each configuration property and type check, visit: +* https://jestjs.io/docs/en/configuration.html +*/ + +module.exports = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "C:\\Users\\ai\\AppData\\Local\\Temp\\jest", + + // Automatically clear mock calls and instances between every test + // clearMocks: false, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: undefined, + + // The directory where Jest should output its coverage files + coverageDirectory: "coverage", + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "\\\\node_modules\\\\" + // ], + + // Indicates which provider should be used to instrument code for coverage + coverageProvider: "v8", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: undefined, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "json", + // "jsx", + // "ts", + // "tsx", + // "node" + // ], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + // moduleNameMapper: {}, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + // preset: undefined, + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state between every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state between every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: undefined, + + // A list of paths to directories that Jest should use to search for files in + roots: [ + "" + ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: "node", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + testMatch: [ + "**/__tests__/**/*.[jt]s?(x)", + "**/?(*.)+(spec|test).[tj]s?(x)", + "/test/**/*" + ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "\\\\node_modules\\\\" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jasmine2", + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: "http://localhost", + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: "real", + + // A map from regular expressions to paths to transformers + transform: { + "^.+\\.(t|j)sx?$": ["@swc/jest"], + }, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "\\\\node_modules\\\\", + // "\\.pnp\\.[^\\\\]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json new file mode 100644 index 0000000000..2ca56478c3 --- /dev/null +++ b/packages/misskey-js/package.json @@ -0,0 +1,47 @@ +{ + "name": "misskey-js", + "version": "0.0.15", + "description": "Misskey SDK for JavaScript", + "main": "./built/index.js", + "types": "./built/index.d.ts", + "scripts": { + "build": "tsc", + "tsd": "tsd", + "api": "pnpm api-extractor run --local --verbose", + "api-prod": "pnpm api-extractor run --verbose", + "eslint": "eslint . --ext .js,.jsx,.ts,.tsx", + "typecheck": "tsc --noEmit", + "lint": "pnpm typecheck && pnpm eslint", + "jest": "jest --coverage --detectOpenHandles", + "test": "pnpm jest && pnpm tsd" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/misskey-dev/misskey.js.git" + }, + "devDependencies": { + "@microsoft/api-extractor": "7.34.4", + "@types/jest": "29.5.0", + "@types/node": "18.15.11", + "@typescript-eslint/eslint-plugin": "5.57.0", + "@typescript-eslint/parser": "5.57.0", + "@swc/jest": "0.2.24", + "eslint": "8.37.0", + "jest": "^29.5.0", + "jest-fetch-mock": "^3.0.3", + "jest-websocket-mock": "2.4.0", + "mock-socket": "9.2.1", + "tsd": "0.28.1", + "typescript": "5.0.2" + }, + "files": [ + "built" + ], + "dependencies": { + "@swc/cli": "0.1.62", + "@swc/core": "1.3.42", + "autobind-decorator": "^2.4.0", + "eventemitter3": "5.0.0", + "reconnecting-websocket": "^4.4.0" + } +} diff --git a/packages/misskey-js/src/acct.ts b/packages/misskey-js/src/acct.ts new file mode 100644 index 0000000000..c32cee86c9 --- /dev/null +++ b/packages/misskey-js/src/acct.ts @@ -0,0 +1,14 @@ +export type Acct = { + username: string; + host: string | null; +}; + +export function parse(acct: string): Acct { + if (acct.startsWith('@')) acct = acct.substr(1); + const split = acct.split('@', 2); + return { username: split[0], host: split[1] || null }; +} + +export function toString(acct: Acct): string { + return acct.host == null ? acct.username : `${acct.username}@${acct.host}`; +} diff --git a/packages/misskey-js/src/api.ts b/packages/misskey-js/src/api.ts new file mode 100644 index 0000000000..17de317d19 --- /dev/null +++ b/packages/misskey-js/src/api.ts @@ -0,0 +1,102 @@ +import type { Endpoints } from './api.types.js'; + +const MK_API_ERROR = Symbol(); + +export type APIError = { + id: string; + code: string; + message: string; + kind: 'client' | 'server'; + info: Record; +}; + +export function isAPIError(reason: any): reason is APIError { + return reason[MK_API_ERROR] === true; +} + +export type FetchLike = (input: string, init?: { + method?: string; + body?: string; + credentials?: RequestCredentials; + cache?: RequestCache; + headers: {[key in string]: string} + }) => Promise<{ + status: number; + json(): Promise; + }>; + +type IsNeverType = [T] extends [never] ? true : false; + +type StrictExtract = Cond extends Union ? Union : never; + +type IsCaseMatched = + IsNeverType> extends false ? true : false; + +type GetCaseResult = + StrictExtract[1]; + +export class APIClient { + public origin: string; + public credential: string | null | undefined; + public fetch: FetchLike; + + constructor(opts: { + origin: APIClient['origin']; + credential?: APIClient['credential']; + fetch?: APIClient['fetch'] | null | undefined; + }) { + this.origin = opts.origin; + this.credential = opts.credential; + // ネイティブ関数をそのまま変数に代入して使おうとするとChromiumではIllegal invocationエラーが発生するため、 + // 環境で実装されているfetchを使う場合は無名関数でラップして使用する + this.fetch = opts.fetch || ((...args) => fetch(...args)); + } + + public request( + endpoint: E, params: P = {} as P, credential?: string | null | undefined, + ): Promise extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + IsCaseMatched extends true ? GetCaseResult : + Endpoints[E]['res']['$switch']['$default'] + : Endpoints[E]['res']> + { + const promise = new Promise((resolve, reject) => { + this.fetch(`${this.origin}/api/${endpoint}`, { + method: 'POST', + body: JSON.stringify({ + ...params, + i: credential !== undefined ? credential : this.credential, + }), + headers: { + 'Content-Type': 'application/json', + }, + credentials: 'omit', + cache: 'no-cache', + }).then(async (res) => { + const body = res.status === 204 ? null : await res.json(); + + if (res.status === 200) { + resolve(body); + } else if (res.status === 204) { + resolve(null); + } else { + reject({ + [MK_API_ERROR]: true, + ...body.error, + }); + } + }).catch(reject); + }); + + return promise as any; + } +} diff --git a/packages/misskey-js/src/api.types.ts b/packages/misskey-js/src/api.types.ts new file mode 100644 index 0000000000..8659261949 --- /dev/null +++ b/packages/misskey-js/src/api.types.ts @@ -0,0 +1,605 @@ +import type { + Ad, Announcement, Antenna, App, AuthSession, Blocking, Channel, Clip, DateString, DetailedInstanceMetadata, DriveFile, DriveFolder, Following, FollowingFolloweePopulated, FollowingFollowerPopulated, FollowRequest, GalleryPost, Instance, + LiteInstanceMetadata, + MeDetailed, + Note, NoteFavorite, OriginType, Page, ServerInfo, Stats, User, UserDetailed, UserGroup, UserList, UserSorting, Notification, NoteReaction, Signin, MessagingMessage, +} from './entities.js'; + +type TODO = Record | null; + +type NoParams = Record; + +type ShowUserReq = { username: string; host?: string; } | { userId: User['id']; }; + +export type Endpoints = { + // admin + 'admin/abuse-user-reports': { req: TODO; res: TODO; }; + 'admin/delete-all-files-of-a-user': { req: { userId: User['id']; }; res: null; }; + 'admin/delete-logs': { req: NoParams; res: null; }; + 'admin/get-index-stats': { req: TODO; res: TODO; }; + 'admin/get-table-stats': { req: TODO; res: TODO; }; + 'admin/invite': { req: TODO; res: TODO; }; + 'admin/logs': { req: TODO; res: TODO; }; + 'admin/reset-password': { req: TODO; res: TODO; }; + 'admin/resolve-abuse-user-report': { req: TODO; res: TODO; }; + 'admin/resync-chart': { req: TODO; res: TODO; }; + 'admin/send-email': { req: TODO; res: TODO; }; + 'admin/server-info': { req: TODO; res: TODO; }; + 'admin/show-moderation-logs': { req: TODO; res: TODO; }; + 'admin/show-user': { req: TODO; res: TODO; }; + 'admin/show-users': { req: TODO; res: TODO; }; + 'admin/silence-user': { req: TODO; res: TODO; }; + 'admin/suspend-user': { req: TODO; res: TODO; }; + 'admin/unsilence-user': { req: TODO; res: TODO; }; + 'admin/unsuspend-user': { req: TODO; res: TODO; }; + 'admin/update-meta': { req: TODO; res: TODO; }; + 'admin/vacuum': { req: TODO; res: TODO; }; + 'admin/accounts/create': { req: TODO; res: TODO; }; + 'admin/ad/create': { req: TODO; res: TODO; }; + 'admin/ad/delete': { req: { id: Ad['id']; }; res: null; }; + 'admin/ad/list': { req: TODO; res: TODO; }; + 'admin/ad/update': { req: TODO; res: TODO; }; + 'admin/announcements/create': { req: TODO; res: TODO; }; + 'admin/announcements/delete': { req: { id: Announcement['id'] }; res: null; }; + 'admin/announcements/list': { req: TODO; res: TODO; }; + 'admin/announcements/update': { req: TODO; res: TODO; }; + 'admin/drive/clean-remote-files': { req: TODO; res: TODO; }; + 'admin/drive/cleanup': { req: TODO; res: TODO; }; + 'admin/drive/files': { req: TODO; res: TODO; }; + 'admin/drive/show-file': { req: TODO; res: TODO; }; + 'admin/emoji/add': { req: TODO; res: TODO; }; + 'admin/emoji/copy': { req: TODO; res: TODO; }; + 'admin/emoji/list-remote': { req: TODO; res: TODO; }; + 'admin/emoji/list': { req: TODO; res: TODO; }; + 'admin/emoji/remove': { req: TODO; res: TODO; }; + 'admin/emoji/update': { req: TODO; res: TODO; }; + 'admin/federation/delete-all-files': { req: { host: string; }; res: null; }; + 'admin/federation/refresh-remote-instance-metadata': { req: TODO; res: TODO; }; + 'admin/federation/remove-all-following': { req: TODO; res: TODO; }; + 'admin/federation/update-instance': { req: TODO; res: TODO; }; + 'admin/moderators/add': { req: TODO; res: TODO; }; + 'admin/moderators/remove': { req: TODO; res: TODO; }; + 'admin/promo/create': { req: TODO; res: TODO; }; + 'admin/queue/clear': { req: TODO; res: TODO; }; + 'admin/queue/deliver-delayed': { req: TODO; res: TODO; }; + 'admin/queue/inbox-delayed': { req: TODO; res: TODO; }; + 'admin/queue/jobs': { req: TODO; res: TODO; }; + 'admin/queue/stats': { req: TODO; res: TODO; }; + 'admin/relays/add': { req: TODO; res: TODO; }; + 'admin/relays/list': { req: TODO; res: TODO; }; + 'admin/relays/remove': { req: TODO; res: TODO; }; + + // announcements + 'announcements': { req: { limit?: number; withUnreads?: boolean; sinceId?: Announcement['id']; untilId?: Announcement['id']; }; res: Announcement[]; }; + + // antennas + 'antennas/create': { req: TODO; res: Antenna; }; + 'antennas/delete': { req: { antennaId: Antenna['id']; }; res: null; }; + 'antennas/list': { req: NoParams; res: Antenna[]; }; + 'antennas/notes': { req: { antennaId: Antenna['id']; limit?: number; sinceId?: Note['id']; untilId?: Note['id']; }; res: Note[]; }; + 'antennas/show': { req: { antennaId: Antenna['id']; }; res: Antenna; }; + 'antennas/update': { req: TODO; res: Antenna; }; + + // ap + 'ap/get': { req: { uri: string; }; res: Record; }; + 'ap/show': { req: { uri: string; }; res: { + type: 'Note'; + object: Note; + } | { + type: 'User'; + object: UserDetailed; + }; }; + + // app + 'app/create': { req: TODO; res: App; }; + 'app/show': { req: { appId: App['id']; }; res: App; }; + + // auth + 'auth/accept': { req: { token: string; }; res: null; }; + 'auth/session/generate': { req: { appSecret: string; }; res: { token: string; url: string; }; }; + 'auth/session/show': { req: { token: string; }; res: AuthSession; }; + 'auth/session/userkey': { req: { appSecret: string; token: string; }; res: { accessToken: string; user: User }; }; + + // blocking + 'blocking/create': { req: { userId: User['id'] }; res: UserDetailed; }; + 'blocking/delete': { req: { userId: User['id'] }; res: UserDetailed; }; + 'blocking/list': { req: { limit?: number; sinceId?: Blocking['id']; untilId?: Blocking['id']; }; res: Blocking[]; }; + + // channels + 'channels/create': { req: TODO; res: TODO; }; + 'channels/featured': { req: TODO; res: TODO; }; + 'channels/follow': { req: TODO; res: TODO; }; + 'channels/followed': { req: TODO; res: TODO; }; + 'channels/owned': { req: TODO; res: TODO; }; + 'channels/pin-note': { req: TODO; res: TODO; }; + 'channels/show': { req: TODO; res: TODO; }; + 'channels/timeline': { req: TODO; res: TODO; }; + 'channels/unfollow': { req: TODO; res: TODO; }; + 'channels/update': { req: TODO; res: TODO; }; + + // charts + 'charts/active-users': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; }; res: { + local: { + users: number[]; + }; + remote: { + users: number[]; + }; + }; }; + 'charts/drive': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; }; res: { + local: { + decCount: number[]; + decSize: number[]; + incCount: number[]; + incSize: number[]; + totalCount: number[]; + totalSize: number[]; + }; + remote: { + decCount: number[]; + decSize: number[]; + incCount: number[]; + incSize: number[]; + totalCount: number[]; + totalSize: number[]; + }; + }; }; + 'charts/federation': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; }; res: { + instance: { + dec: number[]; + inc: number[]; + total: number[]; + }; + }; }; + 'charts/hashtag': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; }; res: TODO; }; + 'charts/instance': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; host: string; }; res: { + drive: { + decFiles: number[]; + decUsage: number[]; + incFiles: number[]; + incUsage: number[]; + totalFiles: number[]; + totalUsage: number[]; + }; + followers: { + dec: number[]; + inc: number[]; + total: number[]; + }; + following: { + dec: number[]; + inc: number[]; + total: number[]; + }; + notes: { + dec: number[]; + inc: number[]; + total: number[]; + diffs: { + normal: number[]; + renote: number[]; + reply: number[]; + }; + }; + requests: { + failed: number[]; + received: number[]; + succeeded: number[]; + }; + users: { + dec: number[]; + inc: number[]; + total: number[]; + }; + }; }; + 'charts/network': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; }; res: TODO; }; + 'charts/notes': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; }; res: { + local: { + dec: number[]; + inc: number[]; + total: number[]; + diffs: { + normal: number[]; + renote: number[]; + reply: number[]; + }; + }; + remote: { + dec: number[]; + inc: number[]; + total: number[]; + diffs: { + normal: number[]; + renote: number[]; + reply: number[]; + }; + }; + }; }; + 'charts/user/drive': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; userId: User['id']; }; res: { + decCount: number[]; + decSize: number[]; + incCount: number[]; + incSize: number[]; + totalCount: number[]; + totalSize: number[]; + }; }; + 'charts/user/following': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; userId: User['id']; }; res: TODO; }; + 'charts/user/notes': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; userId: User['id']; }; res: { + dec: number[]; + inc: number[]; + total: number[]; + diffs: { + normal: number[]; + renote: number[]; + reply: number[]; + }; + }; }; + 'charts/user/reactions': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; userId: User['id']; }; res: TODO; }; + 'charts/users': { req: { span: 'day' | 'hour'; limit?: number; offset?: number | null; }; res: { + local: { + dec: number[]; + inc: number[]; + total: number[]; + }; + remote: { + dec: number[]; + inc: number[]; + total: number[]; + }; + }; }; + + // clips + 'clips/add-note': { req: TODO; res: TODO; }; + 'clips/create': { req: TODO; res: TODO; }; + 'clips/delete': { req: { clipId: Clip['id']; }; res: null; }; + 'clips/list': { req: TODO; res: TODO; }; + 'clips/notes': { req: TODO; res: TODO; }; + 'clips/show': { req: TODO; res: TODO; }; + 'clips/update': { req: TODO; res: TODO; }; + + // drive + 'drive': { req: NoParams; res: { capacity: number; usage: number; }; }; + 'drive/files': { req: { folderId?: DriveFolder['id'] | null; type?: DriveFile['type'] | null; limit?: number; sinceId?: DriveFile['id']; untilId?: DriveFile['id']; }; res: DriveFile[]; }; + 'drive/files/attached-notes': { req: TODO; res: TODO; }; + 'drive/files/check-existence': { req: TODO; res: TODO; }; + 'drive/files/create': { req: TODO; res: TODO; }; + 'drive/files/delete': { req: { fileId: DriveFile['id']; }; res: null; }; + 'drive/files/find-by-hash': { req: TODO; res: TODO; }; + 'drive/files/find': { req: { name: string; folderId?: DriveFolder['id'] | null; }; res: DriveFile[]; }; + 'drive/files/show': { req: { fileId?: DriveFile['id']; url?: string; }; res: DriveFile; }; + 'drive/files/update': { req: { fileId: DriveFile['id']; folderId?: DriveFolder['id'] | null; name?: string; isSensitive?: boolean; comment?: string | null; }; res: DriveFile; }; + 'drive/files/upload-from-url': { req: { url: string; folderId?: DriveFolder['id'] | null; isSensitive?: boolean; comment?: string | null; marker?: string | null; force?: boolean; }; res: null; }; + 'drive/folders': { req: { folderId?: DriveFolder['id'] | null; limit?: number; sinceId?: DriveFile['id']; untilId?: DriveFile['id']; }; res: DriveFolder[]; }; + 'drive/folders/create': { req: { name?: string; parentId?: DriveFolder['id'] | null; }; res: DriveFolder; }; + 'drive/folders/delete': { req: { folderId: DriveFolder['id']; }; res: null; }; + 'drive/folders/find': { req: { name: string; parentId?: DriveFolder['id'] | null; }; res: DriveFolder[]; }; + 'drive/folders/show': { req: { folderId: DriveFolder['id']; }; res: DriveFolder; }; + 'drive/folders/update': { req: { folderId: DriveFolder['id']; name?: string; parentId?: DriveFolder['id'] | null; }; res: DriveFolder; }; + 'drive/stream': { req: { type?: DriveFile['type'] | null; limit?: number; sinceId?: DriveFile['id']; untilId?: DriveFile['id']; }; res: DriveFile[]; }; + + // endpoint + 'endpoint': { req: { endpoint: string; }; res: { params: { name: string; type: string; }[]; }; }; + + // endpoints + 'endpoints': { req: NoParams; res: string[]; }; + + // federation + 'federation/dns': { req: { host: string; }; res: { + a: string[]; + aaaa: string[]; + cname: string[]; + txt: string[]; + }; }; + 'federation/followers': { req: { host: string; limit?: number; sinceId?: Following['id']; untilId?: Following['id']; }; res: FollowingFolloweePopulated[]; }; + 'federation/following': { req: { host: string; limit?: number; sinceId?: Following['id']; untilId?: Following['id']; }; res: FollowingFolloweePopulated[]; }; + 'federation/instances': { req: { + host?: string | null; + blocked?: boolean | null; + notResponding?: boolean | null; + suspended?: boolean | null; + federating?: boolean | null; + subscribing?: boolean | null; + publishing?: boolean | null; + limit?: number; + offset?: number; + sort?: '+pubSub' | '-pubSub' | '+notes' | '-notes' | '+users' | '-users' | '+following' | '-following' | '+followers' | '-followers' | '+caughtAt' | '-caughtAt' | '+lastCommunicatedAt' | '-lastCommunicatedAt' | '+driveUsage' | '-driveUsage' | '+driveFiles' | '-driveFiles'; + }; res: Instance[]; }; + 'federation/show-instance': { req: { host: string; }; res: Instance; }; + 'federation/update-remote-user': { req: { userId: User['id']; }; res: null; }; + 'federation/users': { req: { host: string; limit?: number; sinceId?: User['id']; untilId?: User['id']; }; res: UserDetailed[]; }; + + // following + 'following/create': { req: { userId: User['id'] }; res: User; }; + 'following/delete': { req: { userId: User['id'] }; res: User; }; + 'following/requests/accept': { req: { userId: User['id'] }; res: null; }; + 'following/requests/cancel': { req: { userId: User['id'] }; res: User; }; + 'following/requests/list': { req: NoParams; res: FollowRequest[]; }; + 'following/requests/reject': { req: { userId: User['id'] }; res: null; }; + + // gallery + 'gallery/featured': { req: null; res: GalleryPost[]; }; + 'gallery/popular': { req: null; res: GalleryPost[]; }; + 'gallery/posts': { req: { limit?: number; sinceId?: GalleryPost['id']; untilId?: GalleryPost['id']; }; res: GalleryPost[]; }; + 'gallery/posts/create': { req: { title: GalleryPost['title']; description?: GalleryPost['description']; fileIds: GalleryPost['fileIds']; isSensitive?: GalleryPost['isSensitive'] }; res: GalleryPost; }; + 'gallery/posts/delete': { req: { postId: GalleryPost['id'] }; res: null; }; + 'gallery/posts/like': { req: { postId: GalleryPost['id'] }; res: null; }; + 'gallery/posts/show': { req: { postId: GalleryPost['id'] }; res: GalleryPost; }; + 'gallery/posts/unlike': { req: { postId: GalleryPost['id'] }; res: null; }; + 'gallery/posts/update': { req: { postId: GalleryPost['id']; title: GalleryPost['title']; description?: GalleryPost['description']; fileIds: GalleryPost['fileIds']; isSensitive?: GalleryPost['isSensitive'] }; res: GalleryPost; }; + + // games + 'games/reversi/games': { req: TODO; res: TODO; }; + 'games/reversi/games/show': { req: TODO; res: TODO; }; + 'games/reversi/games/surrender': { req: TODO; res: TODO; }; + 'games/reversi/invitations': { req: TODO; res: TODO; }; + 'games/reversi/match': { req: TODO; res: TODO; }; + 'games/reversi/match/cancel': { req: TODO; res: TODO; }; + + // get-online-users-count + 'get-online-users-count': { req: NoParams; res: { count: number; }; }; + + // hashtags + 'hashtags/list': { req: TODO; res: TODO; }; + 'hashtags/search': { req: TODO; res: TODO; }; + 'hashtags/show': { req: TODO; res: TODO; }; + 'hashtags/trend': { req: TODO; res: TODO; }; + 'hashtags/users': { req: TODO; res: TODO; }; + + // i + 'i': { req: NoParams; res: User; }; + 'i/apps': { req: TODO; res: TODO; }; + 'i/authorized-apps': { req: TODO; res: TODO; }; + 'i/change-password': { req: TODO; res: TODO; }; + 'i/delete-account': { req: { password: string; }; res: null; }; + 'i/export-blocking': { req: TODO; res: TODO; }; + 'i/export-following': { req: TODO; res: TODO; }; + 'i/export-mute': { req: TODO; res: TODO; }; + 'i/export-notes': { req: TODO; res: TODO; }; + 'i/export-user-lists': { req: TODO; res: TODO; }; + 'i/favorites': { req: { limit?: number; sinceId?: NoteFavorite['id']; untilId?: NoteFavorite['id']; }; res: NoteFavorite[]; }; + 'i/gallery/likes': { req: TODO; res: TODO; }; + 'i/gallery/posts': { req: TODO; res: TODO; }; + 'i/get-word-muted-notes-count': { req: TODO; res: TODO; }; + 'i/import-following': { req: TODO; res: TODO; }; + 'i/import-user-lists': { req: TODO; res: TODO; }; + 'i/notifications': { req: { + limit?: number; + sinceId?: Notification['id']; + untilId?: Notification['id']; + following?: boolean; + markAsRead?: boolean; + includeTypes?: Notification['type'][]; + excludeTypes?: Notification['type'][]; + }; res: Notification[]; }; + 'i/page-likes': { req: TODO; res: TODO; }; + 'i/pages': { req: TODO; res: TODO; }; + 'i/pin': { req: { noteId: Note['id']; }; res: MeDetailed; }; + 'i/read-all-messaging-messages': { req: TODO; res: TODO; }; + 'i/read-all-unread-notes': { req: TODO; res: TODO; }; + 'i/read-announcement': { req: TODO; res: TODO; }; + 'i/regenerate-token': { req: { password: string; }; res: null; }; + 'i/registry/get-all': { req: { scope?: string[]; }; res: Record; }; + 'i/registry/get-detail': { req: { key: string; scope?: string[]; }; res: { updatedAt: DateString; value: any; }; }; + 'i/registry/get': { req: { key: string; scope?: string[]; }; res: any; }; + 'i/registry/keys-with-type': { req: { scope?: string[]; }; res: Record; }; + 'i/registry/keys': { req: { scope?: string[]; }; res: string[]; }; + 'i/registry/remove': { req: { key: string; scope?: string[]; }; res: null; }; + 'i/registry/scopes': { req: NoParams; res: string[][]; }; + 'i/registry/set': { req: { key: string; value: any; scope?: string[]; }; res: null; }; + 'i/revoke-token': { req: TODO; res: TODO; }; + 'i/signin-history': { req: { limit?: number; sinceId?: Signin['id']; untilId?: Signin['id']; }; res: Signin[]; }; + 'i/unpin': { req: { noteId: Note['id']; }; res: MeDetailed; }; + 'i/update-email': { req: { + password: string; + email?: string | null; + }; res: MeDetailed; }; + 'i/update': { req: { + name?: string | null; + description?: string | null; + lang?: string | null; + location?: string | null; + birthday?: string | null; + avatarId?: DriveFile['id'] | null; + bannerId?: DriveFile['id'] | null; + fields?: { + name: string; + value: string; + }[]; + isLocked?: boolean; + isExplorable?: boolean; + hideOnlineStatus?: boolean; + carefulBot?: boolean; + autoAcceptFollowed?: boolean; + noCrawle?: boolean; + isBot?: boolean; + isCat?: boolean; + injectFeaturedNote?: boolean; + receiveAnnouncementEmail?: boolean; + alwaysMarkNsfw?: boolean; + mutedWords?: string[][]; + mutingNotificationTypes?: Notification['type'][]; + emailNotificationTypes?: string[]; + }; res: MeDetailed; }; + 'i/user-group-invites': { req: TODO; res: TODO; }; + 'i/2fa/done': { req: TODO; res: TODO; }; + 'i/2fa/key-done': { req: TODO; res: TODO; }; + 'i/2fa/password-less': { req: TODO; res: TODO; }; + 'i/2fa/register-key': { req: TODO; res: TODO; }; + 'i/2fa/register': { req: TODO; res: TODO; }; + 'i/2fa/remove-key': { req: TODO; res: TODO; }; + 'i/2fa/unregister': { req: TODO; res: TODO; }; + + // messaging + 'messaging/history': { req: { limit?: number; group?: boolean; }; res: MessagingMessage[]; }; + 'messaging/messages': { req: { userId?: User['id']; groupId?: UserGroup['id']; limit?: number; sinceId?: MessagingMessage['id']; untilId?: MessagingMessage['id']; markAsRead?: boolean; }; res: MessagingMessage[]; }; + 'messaging/messages/create': { req: { userId?: User['id']; groupId?: UserGroup['id']; text?: string; fileId?: DriveFile['id']; }; res: MessagingMessage; }; + 'messaging/messages/delete': { req: { messageId: MessagingMessage['id']; }; res: null; }; + 'messaging/messages/read': { req: { messageId: MessagingMessage['id']; }; res: null; }; + + // meta + 'meta': { req: { detail?: boolean; }; res: { + $switch: { + $cases: [[ + { detail: true; }, + DetailedInstanceMetadata, + ], [ + { detail: false; }, + LiteInstanceMetadata, + ], [ + { detail: boolean; }, + LiteInstanceMetadata | DetailedInstanceMetadata, + ]]; + $default: LiteInstanceMetadata; + }; + }; }; + + // miauth + 'miauth/gen-token': { req: TODO; res: TODO; }; + + // mute + 'mute/create': { req: TODO; res: TODO; }; + 'mute/delete': { req: { userId: User['id'] }; res: null; }; + 'mute/list': { req: TODO; res: TODO; }; + + // my + 'my/apps': { req: TODO; res: TODO; }; + + // notes + 'notes': { req: { limit?: number; sinceId?: Note['id']; untilId?: Note['id']; }; res: Note[]; }; + 'notes/children': { req: { noteId: Note['id']; limit?: number; sinceId?: Note['id']; untilId?: Note['id']; }; res: Note[]; }; + 'notes/clips': { req: TODO; res: TODO; }; + 'notes/conversation': { req: TODO; res: TODO; }; + 'notes/create': { req: { + visibility?: 'public' | 'home' | 'followers' | 'specified', + visibleUserIds?: User['id'][]; + text?: null | string; + cw?: null | string; + viaMobile?: boolean; + localOnly?: boolean; + fileIds?: DriveFile['id'][]; + replyId?: null | Note['id']; + renoteId?: null | Note['id']; + channelId?: null | Channel['id']; + poll?: null | { + choices: string[]; + multiple?: boolean; + expiresAt?: null | number; + expiredAfter?: null | number; + }; + }; res: { createdNote: Note }; }; + 'notes/delete': { req: { noteId: Note['id']; }; res: null; }; + 'notes/favorites/create': { req: { noteId: Note['id']; }; res: null; }; + 'notes/favorites/delete': { req: { noteId: Note['id']; }; res: null; }; + 'notes/featured': { req: TODO; res: Note[]; }; + 'notes/global-timeline': { req: { limit?: number; sinceId?: Note['id']; untilId?: Note['id']; sinceDate?: number; untilDate?: number; }; res: Note[]; }; + 'notes/hybrid-timeline': { req: { limit?: number; sinceId?: Note['id']; untilId?: Note['id']; sinceDate?: number; untilDate?: number; }; res: Note[]; }; + 'notes/local-timeline': { req: { limit?: number; sinceId?: Note['id']; untilId?: Note['id']; sinceDate?: number; untilDate?: number; }; res: Note[]; }; + 'notes/mentions': { req: { following?: boolean; limit?: number; sinceId?: Note['id']; untilId?: Note['id']; }; res: Note[]; }; + 'notes/polls/recommendation': { req: TODO; res: TODO; }; + 'notes/polls/vote': { req: { noteId: Note['id']; choice: number; }; res: null; }; + 'notes/reactions': { req: { noteId: Note['id']; type?: string | null; limit?: number; }; res: NoteReaction[]; }; + 'notes/reactions/create': { req: { noteId: Note['id']; reaction: string; }; res: null; }; + 'notes/reactions/delete': { req: { noteId: Note['id']; }; res: null; }; + 'notes/renotes': { req: { limit?: number; sinceId?: Note['id']; untilId?: Note['id']; noteId: Note['id']; }; res: Note[]; }; + 'notes/replies': { req: { limit?: number; sinceId?: Note['id']; untilId?: Note['id']; noteId: Note['id']; }; res: Note[]; }; + 'notes/search-by-tag': { req: TODO; res: TODO; }; + 'notes/search': { req: TODO; res: TODO; }; + 'notes/show': { req: { noteId: Note['id']; }; res: Note; }; + 'notes/state': { req: TODO; res: TODO; }; + 'notes/timeline': { req: { limit?: number; sinceId?: Note['id']; untilId?: Note['id']; sinceDate?: number; untilDate?: number; }; res: Note[]; }; + 'notes/unrenote': { req: { noteId: Note['id']; }; res: null; }; + 'notes/user-list-timeline': { req: { listId: UserList['id']; limit?: number; sinceId?: Note['id']; untilId?: Note['id']; sinceDate?: number; untilDate?: number; }; res: Note[]; }; + 'notes/watching/create': { req: TODO; res: TODO; }; + 'notes/watching/delete': { req: { noteId: Note['id']; }; res: null; }; + + // notifications + 'notifications/create': { req: { body: string; header?: string | null; icon?: string | null; }; res: null; }; + 'notifications/mark-all-as-read': { req: NoParams; res: null; }; + 'notifications/read': { req: { notificationId: Notification['id']; }; res: null; }; + + // page-push + 'page-push': { req: { pageId: Page['id']; event: string; var?: any; }; res: null; }; + + // pages + 'pages/create': { req: TODO; res: Page; }; + 'pages/delete': { req: { pageId: Page['id']; }; res: null; }; + 'pages/featured': { req: NoParams; res: Page[]; }; + 'pages/like': { req: { pageId: Page['id']; }; res: null; }; + 'pages/show': { req: { pageId?: Page['id']; name?: string; username?: string; }; res: Page; }; + 'pages/unlike': { req: { pageId: Page['id']; }; res: null; }; + 'pages/update': { req: TODO; res: null; }; + + // ping + 'ping': { req: NoParams; res: { pong: number; }; }; + + // pinned-users + 'pinned-users': { req: TODO; res: TODO; }; + + // promo + 'promo/read': { req: TODO; res: TODO; }; + + // request-reset-password + 'request-reset-password': { req: { username: string; email: string; }; res: null; }; + + // reset-password + 'reset-password': { req: { token: string; password: string; }; res: null; }; + + // room + 'room/show': { req: TODO; res: TODO; }; + 'room/update': { req: TODO; res: TODO; }; + + // stats + 'stats': { req: NoParams; res: Stats; }; + + // server-info + 'server-info': { req: NoParams; res: ServerInfo; }; + + // sw + 'sw/register': { req: TODO; res: TODO; }; + + // username + 'username/available': { req: { username: string; }; res: { available: boolean; }; }; + + // users + 'users': { req: { limit?: number; offset?: number; sort?: UserSorting; origin?: OriginType; }; res: User[]; }; + 'users/clips': { req: TODO; res: TODO; }; + 'users/followers': { req: { userId?: User['id']; username?: User['username']; host?: User['host'] | null; limit?: number; sinceId?: Following['id']; untilId?: Following['id']; }; res: FollowingFollowerPopulated[]; }; + 'users/following': { req: { userId?: User['id']; username?: User['username']; host?: User['host'] | null; limit?: number; sinceId?: Following['id']; untilId?: Following['id']; }; res: FollowingFolloweePopulated[]; }; + 'users/gallery/posts': { req: TODO; res: TODO; }; + 'users/get-frequently-replied-users': { req: TODO; res: TODO; }; + 'users/groups/create': { req: TODO; res: TODO; }; + 'users/groups/delete': { req: { groupId: UserGroup['id'] }; res: null; }; + 'users/groups/invitations/accept': { req: TODO; res: TODO; }; + 'users/groups/invitations/reject': { req: TODO; res: TODO; }; + 'users/groups/invite': { req: TODO; res: TODO; }; + 'users/groups/joined': { req: TODO; res: TODO; }; + 'users/groups/owned': { req: TODO; res: TODO; }; + 'users/groups/pull': { req: TODO; res: TODO; }; + 'users/groups/show': { req: TODO; res: TODO; }; + 'users/groups/transfer': { req: TODO; res: TODO; }; + 'users/groups/update': { req: TODO; res: TODO; }; + 'users/lists/create': { req: { name: string; }; res: UserList; }; + 'users/lists/delete': { req: { listId: UserList['id']; }; res: null; }; + 'users/lists/list': { req: NoParams; res: UserList[]; }; + 'users/lists/pull': { req: { listId: UserList['id']; userId: User['id']; }; res: null; }; + 'users/lists/push': { req: { listId: UserList['id']; userId: User['id']; }; res: null; }; + 'users/lists/show': { req: { listId: UserList['id']; }; res: UserList; }; + 'users/lists/update': { req: { listId: UserList['id']; name: string; }; res: UserList; }; + 'users/notes': { req: { userId: User['id']; limit?: number; sinceId?: Note['id']; untilId?: Note['id']; sinceDate?: number; untilDate?: number; }; res: Note[]; }; + 'users/pages': { req: TODO; res: TODO; }; + 'users/recommendation': { req: TODO; res: TODO; }; + 'users/relation': { req: TODO; res: TODO; }; + 'users/report-abuse': { req: TODO; res: TODO; }; + 'users/search-by-username-and-host': { req: TODO; res: TODO; }; + 'users/search': { req: TODO; res: TODO; }; + 'users/show': { req: ShowUserReq | { userIds: User['id'][]; }; res: { + $switch: { + $cases: [[ + { userIds: User['id'][]; }, + UserDetailed[], + ]]; + $default: UserDetailed; + }; + }; }; + 'users/stats': { req: TODO; res: TODO; }; +}; diff --git a/packages/misskey-js/src/consts.ts b/packages/misskey-js/src/consts.ts new file mode 100644 index 0000000000..261ecd33f4 --- /dev/null +++ b/packages/misskey-js/src/consts.ts @@ -0,0 +1,42 @@ +export const notificationTypes = ['follow', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote', 'pollEnded', 'receiveFollowRequest', 'followRequestAccepted', 'groupInvited', 'app'] as const; + +export const noteVisibilities = ['public', 'home', 'followers', 'specified'] as const; + +export const mutedNoteReasons = ['word', 'manual', 'spam', 'other'] as const; + +export const ffVisibility = ['public', 'followers', 'private'] as const; + +export const permissions = [ + 'read:account', + 'write:account', + 'read:blocks', + 'write:blocks', + 'read:drive', + 'write:drive', + 'read:favorites', + 'write:favorites', + 'read:following', + 'write:following', + 'read:messaging', + 'write:messaging', + 'read:mutes', + 'write:mutes', + 'write:notes', + 'read:notifications', + 'write:notifications', + 'read:reactions', + 'write:reactions', + 'write:votes', + 'read:pages', + 'write:pages', + 'write:page-likes', + 'read:page-likes', + 'read:user-groups', + 'write:user-groups', + 'read:channels', + 'write:channels', + 'read:gallery', + 'write:gallery', + 'read:gallery-likes', + 'write:gallery-likes', +]; diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts new file mode 100644 index 0000000000..37a8bc6184 --- /dev/null +++ b/packages/misskey-js/src/entities.ts @@ -0,0 +1,508 @@ +export type ID = string; +export type DateString = string; + +type TODO = Record; + +// NOTE: 極力この型を使うのは避け、UserLite か UserDetailed か明示するように +export type User = UserLite | UserDetailed; + +export type UserLite = { + id: ID; + username: string; + host: string | null; + name: string; + onlineStatus: 'online' | 'active' | 'offline' | 'unknown'; + avatarUrl: string; + avatarBlurhash: string; + emojis: { + name: string; + url: string; + }[]; + instance?: { + name: Instance['name']; + softwareName: Instance['softwareName']; + softwareVersion: Instance['softwareVersion']; + iconUrl: Instance['iconUrl']; + faviconUrl: Instance['faviconUrl']; + themeColor: Instance['themeColor']; + }; +}; + +export type UserDetailed = UserLite & { + bannerBlurhash: string | null; + bannerColor: string | null; + bannerUrl: string | null; + birthday: string | null; + createdAt: DateString; + description: string | null; + ffVisibility: 'public' | 'followers' | 'private'; + fields: {name: string; value: string}[]; + followersCount: number; + followingCount: number; + hasPendingFollowRequestFromYou: boolean; + hasPendingFollowRequestToYou: boolean; + isAdmin: boolean; + isBlocked: boolean; + isBlocking: boolean; + isBot: boolean; + isCat: boolean; + isFollowed: boolean; + isFollowing: boolean; + isLocked: boolean; + isModerator: boolean; + isMuted: boolean; + isSilenced: boolean; + isSuspended: boolean; + lang: string | null; + lastFetchedAt?: DateString; + location: string | null; + notesCount: number; + pinnedNoteIds: ID[]; + pinnedNotes: Note[]; + pinnedPage: Page | null; + pinnedPageId: string | null; + publicReactions: boolean; + securityKeys: boolean; + twoFactorEnabled: boolean; + updatedAt: DateString | null; + uri: string | null; + url: string | null; +}; + +export type UserGroup = TODO; + +export type UserList = { + id: ID; + createdAt: DateString; + name: string; + userIds: User['id'][]; +}; + +export type MeDetailed = UserDetailed & { + avatarId: DriveFile['id']; + bannerId: DriveFile['id']; + autoAcceptFollowed: boolean; + alwaysMarkNsfw: boolean; + carefulBot: boolean; + emailNotificationTypes: string[]; + hasPendingReceivedFollowRequest: boolean; + hasUnreadAnnouncement: boolean; + hasUnreadAntenna: boolean; + hasUnreadChannel: boolean; + hasUnreadMentions: boolean; + hasUnreadMessagingMessage: boolean; + hasUnreadNotification: boolean; + hasUnreadSpecifiedNotes: boolean; + hideOnlineStatus: boolean; + injectFeaturedNote: boolean; + integrations: Record; + isDeleted: boolean; + isExplorable: boolean; + mutedWords: string[][]; + mutingNotificationTypes: string[]; + noCrawle: boolean; + receiveAnnouncementEmail: boolean; + usePasswordLessLogin: boolean; + [other: string]: any; +}; + +export type DriveFile = { + id: ID; + createdAt: DateString; + isSensitive: boolean; + name: string; + thumbnailUrl: string; + url: string; + type: string; + size: number; + md5: string; + blurhash: string; + comment: string | null; + properties: Record; +}; + +export type DriveFolder = TODO; + +export type GalleryPost = { + id: ID; + createdAt: DateString; + updatedAt: DateString; + userId: User['id']; + user: User; + title: string; + description: string | null; + fileIds: DriveFile['id'][]; + files: DriveFile[]; + isSensitive: boolean; + likedCount: number; + isLiked?: boolean; +}; + +export type Note = { + id: ID; + createdAt: DateString; + text: string | null; + cw: string | null; + user: User; + userId: User['id']; + reply?: Note; + replyId: Note['id']; + renote?: Note; + renoteId: Note['id']; + files: DriveFile[]; + fileIds: DriveFile['id'][]; + visibility: 'public' | 'home' | 'followers' | 'specified'; + visibleUserIds?: User['id'][]; + localOnly?: boolean; + myReaction?: string; + reactions: Record; + renoteCount: number; + repliesCount: number; + poll?: { + expiresAt: DateString | null; + multiple: boolean; + choices: { + isVoted: boolean; + text: string; + votes: number; + }[]; + }; + emojis: { + name: string; + url: string; + }[]; + uri?: string; + url?: string; + isHidden?: boolean; +}; + +export type NoteReaction = { + id: ID; + createdAt: DateString; + user: UserLite; + type: string; +}; + +export type Notification = { + id: ID; + createdAt: DateString; + isRead: boolean; +} & ({ + type: 'reaction'; + reaction: string; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'reply'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'renote'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'quote'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'mention'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'pollVote'; + user: User; + userId: User['id']; + note: Note; +} | { + type: 'follow'; + user: User; + userId: User['id']; +} | { + type: 'followRequestAccepted'; + user: User; + userId: User['id']; +} | { + type: 'receiveFollowRequest'; + user: User; + userId: User['id']; +} | { + type: 'groupInvited'; + invitation: UserGroup; + user: User; + userId: User['id']; +} | { + type: 'app'; + header?: string | null; + body: string; + icon?: string | null; +}); + +export type MessagingMessage = { + id: ID; + createdAt: DateString; + file: DriveFile | null; + fileId: DriveFile['id'] | null; + isRead: boolean; + reads: User['id'][]; + text: string | null; + user: User; + userId: User['id']; + recipient?: User | null; + recipientId: User['id'] | null; + group?: UserGroup | null; + groupId: UserGroup['id'] | null; +}; + +export type CustomEmoji = { + id: string; + name: string; + url: string; + category: string; + aliases: string[]; +}; + +export type LiteInstanceMetadata = { + maintainerName: string | null; + maintainerEmail: string | null; + version: string; + name: string | null; + uri: string; + description: string | null; + langs: string[]; + tosUrl: string | null; + repositoryUrl: string; + feedbackUrl: string; + disableRegistration: boolean; + disableLocalTimeline: boolean; + disableGlobalTimeline: boolean; + driveCapacityPerLocalUserMb: number; + driveCapacityPerRemoteUserMb: number; + emailRequiredForSignup: boolean; + enableHcaptcha: boolean; + hcaptchaSiteKey: string | null; + enableRecaptcha: boolean; + recaptchaSiteKey: string | null; + enableTurnstile: boolean; + turnstileSiteKey: string | null; + swPublickey: string | null; + themeColor: string | null; + mascotImageUrl: string | null; + bannerUrl: string | null; + errorImageUrl: string | null; + iconUrl: string | null; + backgroundImageUrl: string | null; + logoImageUrl: string | null; + maxNoteTextLength: number; + enableEmail: boolean; + enableTwitterIntegration: boolean; + enableGithubIntegration: boolean; + enableDiscordIntegration: boolean; + enableServiceWorker: boolean; + emojis: CustomEmoji[]; + defaultDarkTheme: string | null; + defaultLightTheme: string | null; + ads: { + id: ID; + ratio: number; + place: string; + url: string; + imageUrl: string; + }[]; + translatorAvailable: boolean; +}; + +export type DetailedInstanceMetadata = LiteInstanceMetadata & { + pinnedPages: string[]; + pinnedClipId: string | null; + cacheRemoteFiles: boolean; + requireSetup: boolean; + proxyAccountName: string | null; + features: Record; +}; + +export type InstanceMetadata = LiteInstanceMetadata | DetailedInstanceMetadata; + +export type ServerInfo = { + machine: string; + cpu: { + model: string; + cores: number; + }; + mem: { + total: number; + }; + fs: { + total: number; + used: number; + }; +}; + +export type Stats = { + notesCount: number; + originalNotesCount: number; + usersCount: number; + originalUsersCount: number; + instances: number; + driveUsageLocal: number; + driveUsageRemote: number; +}; + +export type Page = { + id: ID; + createdAt: DateString; + updatedAt: DateString; + userId: User['id']; + user: User; + content: Record[]; + variables: Record[]; + title: string; + name: string; + summary: string | null; + hideTitleWhenPinned: boolean; + alignCenter: boolean; + font: string; + script: string; + eyeCatchingImageId: DriveFile['id'] | null; + eyeCatchingImage: DriveFile | null; + attachedFiles: any; + likedCount: number; + isLiked?: boolean; +}; + +export type PageEvent = { + pageId: Page['id']; + event: string; + var: any; + userId: User['id']; + user: User; +}; + +export type Announcement = { + id: ID; + createdAt: DateString; + updatedAt: DateString | null; + text: string; + title: string; + imageUrl: string | null; + isRead?: boolean; +}; + +export type Antenna = { + id: ID; + createdAt: DateString; + name: string; + keywords: string[][]; // TODO + excludeKeywords: string[][]; // TODO + src: 'home' | 'all' | 'users' | 'list' | 'group'; + userListId: ID | null; // TODO + userGroupId: ID | null; // TODO + users: string[]; // TODO + caseSensitive: boolean; + notify: boolean; + withReplies: boolean; + withFile: boolean; + hasUnreadNote: boolean; +}; + +export type App = TODO; + +export type AuthSession = { + id: ID; + app: App; + token: string; +}; + +export type Ad = TODO; + +export type Clip = TODO; + +export type NoteFavorite = { + id: ID; + createdAt: DateString; + noteId: Note['id']; + note: Note; +}; + +export type FollowRequest = { + id: ID; + follower: User; + followee: User; +}; + +export type Channel = { + id: ID; + // TODO +}; + +export type Following = { + id: ID; + createdAt: DateString; + followerId: User['id']; + followeeId: User['id']; +}; + +export type FollowingFolloweePopulated = Following & { + followee: UserDetailed; +}; + +export type FollowingFollowerPopulated = Following & { + follower: UserDetailed; +}; + +export type Blocking = { + id: ID; + createdAt: DateString; + blockeeId: User['id']; + blockee: UserDetailed; +}; + +export type Instance = { + id: ID; + caughtAt: DateString; + host: string; + usersCount: number; + notesCount: number; + followingCount: number; + followersCount: number; + driveUsage: number; + driveFiles: number; + latestRequestSentAt: DateString | null; + latestStatus: number | null; + latestRequestReceivedAt: DateString | null; + lastCommunicatedAt: DateString; + isNotResponding: boolean; + isSuspended: boolean; + softwareName: string | null; + softwareVersion: string | null; + openRegistrations: boolean | null; + name: string | null; + description: string | null; + maintainerName: string | null; + maintainerEmail: string | null; + iconUrl: string | null; + faviconUrl: string | null; + themeColor: string | null; + infoUpdatedAt: DateString | null; +}; + +export type Signin = { + id: ID; + createdAt: DateString; + ip: string; + headers: Record; + success: boolean; +}; + +export type UserSorting = + | '+follower' + | '-follower' + | '+createdAt' + | '-createdAt' + | '+updatedAt' + | '-updatedAt'; +export type OriginType = 'combined' | 'local' | 'remote'; diff --git a/packages/misskey-js/src/index.ts b/packages/misskey-js/src/index.ts new file mode 100644 index 0000000000..bdd0d04455 --- /dev/null +++ b/packages/misskey-js/src/index.ts @@ -0,0 +1,26 @@ +import { Endpoints } from './api.types.js'; +import Stream, { Connection } from './streaming.js'; +import { Channels } from './streaming.types.js'; +import { Acct } from './acct.js'; +import * as consts from './consts.js'; + +export { + Endpoints, + Stream, + Connection as ChannelConnection, + Channels, + Acct, +}; + +export const permissions = consts.permissions; +export const notificationTypes = consts.notificationTypes; +export const noteVisibilities = consts.noteVisibilities; +export const mutedNoteReasons = consts.mutedNoteReasons; +export const ffVisibility = consts.ffVisibility; + +// api extractor not supported yet +//export * as api from './api.js'; +//export * as entities from './entities.js'; +import * as api from './api.js'; +import * as entities from './entities.js'; +export { api, entities }; diff --git a/packages/misskey-js/src/streaming.ts b/packages/misskey-js/src/streaming.ts new file mode 100644 index 0000000000..9dd764952e --- /dev/null +++ b/packages/misskey-js/src/streaming.ts @@ -0,0 +1,340 @@ +import autobind from 'autobind-decorator'; +import { EventEmitter } from 'eventemitter3'; +import ReconnectingWebsocket from 'reconnecting-websocket'; +import type { BroadcastEvents, Channels } from './streaming.types.js'; + +export function urlQuery(obj: Record): string { + const params = Object.entries(obj) + .filter(([, v]) => Array.isArray(v) ? v.length : v !== undefined) + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + .reduce((a, [k, v]) => (a[k] = v!, a), {} as Record); + + return Object.entries(params) + .map((e) => `${e[0]}=${encodeURIComponent(e[1])}`) + .join('&'); +} + +type AnyOf> = T[keyof T]; + +type StreamEvents = { + _connected_: void; + _disconnected_: void; +} & BroadcastEvents; + +/** + * Misskey stream connection + */ +export default class Stream extends EventEmitter { + private stream: ReconnectingWebsocket; + public state: 'initializing' | 'reconnecting' | 'connected' = 'initializing'; + private sharedConnectionPools: Pool[] = []; + private sharedConnections: SharedConnection[] = []; + private nonSharedConnections: NonSharedConnection[] = []; + private idCounter = 0; + + constructor(origin: string, user: { token: string; } | null, options?: { + WebSocket?: any; + }) { + super(); + options = options || { }; + + const query = urlQuery({ + i: user?.token, + + // To prevent cache of an HTML such as error screen + _t: Date.now(), + }); + + const wsOrigin = origin.replace('http://', 'ws://').replace('https://', 'wss://'); + + this.stream = new ReconnectingWebsocket(`${wsOrigin}/streaming?${query}`, '', { + minReconnectionDelay: 1, // https://github.com/pladaria/reconnecting-websocket/issues/91 + WebSocket: options.WebSocket, + }); + this.stream.addEventListener('open', this.onOpen); + this.stream.addEventListener('close', this.onClose); + this.stream.addEventListener('message', this.onMessage); + } + + @autobind + private genId(): string { + return (++this.idCounter).toString(); + } + + @autobind + public useChannel(channel: C, params?: Channels[C]['params'], name?: string): Connection { + if (params) { + return this.connectToChannel(channel, params); + } else { + return this.useSharedConnection(channel, name); + } + } + + @autobind + private useSharedConnection(channel: C, name?: string): SharedConnection { + let pool = this.sharedConnectionPools.find(p => p.channel === channel); + + if (pool == null) { + pool = new Pool(this, channel, this.genId()); + this.sharedConnectionPools.push(pool); + } + + const connection = new SharedConnection(this, channel, pool, name); + this.sharedConnections.push(connection); + return connection; + } + + @autobind + public removeSharedConnection(connection: SharedConnection): void { + this.sharedConnections = this.sharedConnections.filter(c => c !== connection); + } + + @autobind + public removeSharedConnectionPool(pool: Pool): void { + this.sharedConnectionPools = this.sharedConnectionPools.filter(p => p !== pool); + } + + @autobind + private connectToChannel(channel: C, params: Channels[C]['params']): NonSharedConnection { + const connection = new NonSharedConnection(this, channel, this.genId(), params); + this.nonSharedConnections.push(connection); + return connection; + } + + @autobind + public disconnectToChannel(connection: NonSharedConnection): void { + this.nonSharedConnections = this.nonSharedConnections.filter(c => c !== connection); + } + + /** + * Callback of when open connection + */ + @autobind + private onOpen(): void { + const isReconnect = this.state === 'reconnecting'; + + this.state = 'connected'; + this.emit('_connected_'); + + // チャンネル再接続 + if (isReconnect) { + for (const p of this.sharedConnectionPools) p.connect(); + for (const c of this.nonSharedConnections) c.connect(); + } + } + + /** + * Callback of when close connection + */ + @autobind + private onClose(): void { + if (this.state === 'connected') { + this.state = 'reconnecting'; + this.emit('_disconnected_'); + } + } + + /** + * Callback of when received a message from connection + */ + @autobind + private onMessage(message: { data: string; }): void { + const { type, body } = JSON.parse(message.data); + + if (type === 'channel') { + const id = body.id; + + let connections: Connection[]; + + connections = this.sharedConnections.filter(c => c.id === id); + + if (connections.length === 0) { + const found = this.nonSharedConnections.find(c => c.id === id); + if (found) { + connections = [found]; + } + } + + for (const c of connections) { + c.emit(body.type, body.body); + c.inCount++; + } + } else { + this.emit(type, body); + } + } + + /** + * Send a message to connection + */ + @autobind + public send(typeOrPayload: any, payload?: any): void { + const data = payload === undefined ? typeOrPayload : { + type: typeOrPayload, + body: payload, + }; + + this.stream.send(JSON.stringify(data)); + } + + /** + * Close this connection + */ + @autobind + public close(): void { + this.stream.close(); + } +} + +// TODO: これらのクラスを Stream クラスの内部クラスにすれば余計なメンバをpublicにしないで済むかも? +// もしくは @internal を使う? https://www.typescriptlang.org/tsconfig#stripInternal +class Pool { + public channel: string; + public id: string; + protected stream: Stream; + public users = 0; + private disposeTimerId: any; + private isConnected = false; + + constructor(stream: Stream, channel: string, id: string) { + this.channel = channel; + this.stream = stream; + this.id = id; + + this.stream.on('_disconnected_', this.onStreamDisconnected); + } + + @autobind + private onStreamDisconnected(): void { + this.isConnected = false; + } + + @autobind + public inc(): void { + if (this.users === 0 && !this.isConnected) { + this.connect(); + } + + this.users++; + + // タイマー解除 + if (this.disposeTimerId) { + clearTimeout(this.disposeTimerId); + this.disposeTimerId = null; + } + } + + @autobind + public dec(): void { + this.users--; + + // そのコネクションの利用者が誰もいなくなったら + if (this.users === 0) { + // また直ぐに再利用される可能性があるので、一定時間待ち、 + // 新たな利用者が現れなければコネクションを切断する + this.disposeTimerId = setTimeout(() => { + this.disconnect(); + }, 3000); + } + } + + @autobind + public connect(): void { + if (this.isConnected) return; + this.isConnected = true; + this.stream.send('connect', { + channel: this.channel, + id: this.id, + }); + } + + @autobind + private disconnect(): void { + this.stream.off('_disconnected_', this.onStreamDisconnected); + this.stream.send('disconnect', { id: this.id }); + this.stream.removeSharedConnectionPool(this); + } +} + +export abstract class Connection = any> extends EventEmitter { + public channel: string; + protected stream: Stream; + public abstract id: string; + + public name?: string; // for debug + public inCount = 0; // for debug + public outCount = 0; // for debug + + constructor(stream: Stream, channel: string, name?: string) { + super(); + + this.stream = stream; + this.channel = channel; + this.name = name; + } + + @autobind + public send(type: T, body: Channel['receives'][T]): void { + this.stream.send('ch', { + id: this.id, + type: type, + body: body, + }); + + this.outCount++; + } + + public abstract dispose(): void; +} + +class SharedConnection = any> extends Connection { + private pool: Pool; + + public get id(): string { + return this.pool.id; + } + + constructor(stream: Stream, channel: string, pool: Pool, name?: string) { + super(stream, channel, name); + + this.pool = pool; + this.pool.inc(); + } + + @autobind + public dispose(): void { + this.pool.dec(); + this.removeAllListeners(); + this.stream.removeSharedConnection(this); + } +} + +class NonSharedConnection = any> extends Connection { + public id: string; + protected params: Channel['params']; + + constructor(stream: Stream, channel: string, id: string, params: Channel['params']) { + super(stream, channel); + + this.params = params; + this.id = id; + + this.connect(); + } + + @autobind + public connect(): void { + this.stream.send('connect', { + channel: this.channel, + id: this.id, + params: this.params, + }); + } + + @autobind + public dispose(): void { + this.removeAllListeners(); + this.stream.send('disconnect', { id: this.id }); + this.stream.disconnectToChannel(this); + } +} diff --git a/packages/misskey-js/src/streaming.types.ts b/packages/misskey-js/src/streaming.types.ts new file mode 100644 index 0000000000..a64545f8e2 --- /dev/null +++ b/packages/misskey-js/src/streaming.types.ts @@ -0,0 +1,152 @@ +import type { Antenna, CustomEmoji, DriveFile, MeDetailed, MessagingMessage, Note, Notification, PageEvent, User, UserGroup } from './entities.js'; + +type FIXME = any; + +export type Channels = { + main: { + params: null; + events: { + notification: (payload: Notification) => void; + mention: (payload: Note) => void; + reply: (payload: Note) => void; + renote: (payload: Note) => void; + follow: (payload: User) => void; // 自分が他人をフォローしたとき + followed: (payload: User) => void; // 他人が自分をフォローしたとき + unfollow: (payload: User) => void; // 自分が他人をフォロー解除したとき + meUpdated: (payload: MeDetailed) => void; + pageEvent: (payload: PageEvent) => void; + urlUploadFinished: (payload: { marker: string; file: DriveFile; }) => void; + readAllNotifications: () => void; + unreadNotification: (payload: Notification) => void; + unreadMention: (payload: Note['id']) => void; + readAllUnreadMentions: () => void; + unreadSpecifiedNote: (payload: Note['id']) => void; + readAllUnreadSpecifiedNotes: () => void; + readAllMessagingMessages: () => void; + messagingMessage: (payload: MessagingMessage) => void; + unreadMessagingMessage: (payload: MessagingMessage) => void; + readAllAntennas: () => void; + unreadAntenna: (payload: Antenna) => void; + readAllAnnouncements: () => void; + readAllChannels: () => void; + unreadChannel: (payload: Note['id']) => void; + myTokenRegenerated: () => void; + reversiNoInvites: () => void; + reversiInvited: (payload: FIXME) => void; + signin: (payload: FIXME) => void; + registryUpdated: (payload: { + scope?: string[]; + key: string; + value: any | null; + }) => void; + driveFileCreated: (payload: DriveFile) => void; + readAntenna: (payload: Antenna) => void; + }; + receives: null; + }; + homeTimeline: { + params: null; + events: { + note: (payload: Note) => void; + }; + receives: null; + }; + localTimeline: { + params: null; + events: { + note: (payload: Note) => void; + }; + receives: null; + }; + hybridTimeline: { + params: null; + events: { + note: (payload: Note) => void; + }; + receives: null; + }; + globalTimeline: { + params: null; + events: { + note: (payload: Note) => void; + }; + receives: null; + }; + messaging: { + params: { + otherparty?: User['id'] | null; + group?: UserGroup['id'] | null; + }; + events: { + message: (payload: MessagingMessage) => void; + deleted: (payload: MessagingMessage['id']) => void; + read: (payload: MessagingMessage['id'][]) => void; + typers: (payload: User[]) => void; + }; + receives: { + read: { + id: MessagingMessage['id']; + }; + }; + }; + serverStats: { + params: null; + events: { + stats: (payload: FIXME) => void; + }; + receives: { + requestLog: { + id: string | number; + length: number; + }; + }; + }; + queueStats: { + params: null; + events: { + stats: (payload: FIXME) => void; + }; + receives: { + requestLog: { + id: string | number; + length: number; + }; + }; + }; +}; + +export type NoteUpdatedEvent = { + id: Note['id']; + type: 'reacted'; + body: { + reaction: string; + userId: User['id']; + }; +} | { + id: Note['id']; + type: 'unreacted'; + body: { + reaction: string; + userId: User['id']; + }; +} | { + id: Note['id']; + type: 'deleted'; + body: { + deletedAt: string; + }; +} | { + id: Note['id']; + type: 'pollVoted'; + body: { + choice: number; + userId: User['id']; + }; +}; + +export type BroadcastEvents = { + noteUpdated: (payload: NoteUpdatedEvent) => void; + emojiAdded: (payload: { + emoji: CustomEmoji; + }) => void; +}; diff --git a/packages/misskey-js/test-d/api.ts b/packages/misskey-js/test-d/api.ts new file mode 100644 index 0000000000..ce793f6fd1 --- /dev/null +++ b/packages/misskey-js/test-d/api.ts @@ -0,0 +1,45 @@ +import { expectType } from 'tsd'; +import * as Misskey from '../src'; + +describe('API', () => { + test('success', async () => { + const cli = new Misskey.api.APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN' + }); + const res = await cli.request('meta', { detail: true }); + expectType(res); + }); + + test('conditional respose type (meta)', async () => { + const cli = new Misskey.api.APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN' + }); + + const res = await cli.request('meta', { detail: true }); + expectType(res); + + const res2 = await cli.request('meta', { detail: false }); + expectType(res2); + + const res3 = await cli.request('meta', { }); + expectType(res3); + + const res4 = await cli.request('meta', { detail: true as boolean }); + expectType(res4); + }); + + test('conditional respose type (users/show)', async () => { + const cli = new Misskey.api.APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN' + }); + + const res = await cli.request('users/show', { userId: 'xxxxxxxx' }); + expectType(res); + + const res2 = await cli.request('users/show', { userIds: ['xxxxxxxx'] }); + expectType(res2); + }); +}); diff --git a/packages/misskey-js/test-d/streaming.ts b/packages/misskey-js/test-d/streaming.ts new file mode 100644 index 0000000000..7ff7f95999 --- /dev/null +++ b/packages/misskey-js/test-d/streaming.ts @@ -0,0 +1,26 @@ +import { expectType } from 'tsd'; +import * as Misskey from '../src'; + +describe('Streaming', () => { + test('emit type', async () => { + const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); + const mainChannel = stream.useChannel('main'); + mainChannel.on('notification', notification => { + expectType(notification); + }); + }); + + test('params type', async () => { + const stream = new Misskey.Stream('https://misskey.test', { token: 'TOKEN' }); + // TODO: 「stream.useChannel の第二引数として受け入れる型が + // { + // otherparty?: User['id'] | null; + // group?: UserGroup['id'] | null; + // } + // になっている」というテストを行いたいけどtsdでの書き方がわからない + const messagingChannel = stream.useChannel('messaging', { otherparty: 'aaa' }); + messagingChannel.on('message', message => { + expectType(message); + }); + }); +}); diff --git a/packages/misskey-js/test/api.ts b/packages/misskey-js/test/api.ts new file mode 100644 index 0000000000..84b1fc0933 --- /dev/null +++ b/packages/misskey-js/test/api.ts @@ -0,0 +1,212 @@ +import { enableFetchMocks } from 'jest-fetch-mock'; +import { APIClient, isAPIError } from '../src/api'; + +enableFetchMocks(); + +function getFetchCall(call: any[]) { + const { body, method } = call[1]; + if (body != null && typeof body != 'string') { + throw new Error('invalid body'); + } + return { + url: call[0], + method: method, + body: JSON.parse(body as any) + }; +} + +describe('API', () => { + test('success', async () => { + fetchMock.resetMocks(); + fetchMock.mockResponse(async (req) => { + const body = await req.json(); + if (req.method == 'POST' && req.url == 'https://misskey.test/api/i') { + if (body.i === 'TOKEN') { + return JSON.stringify({ id: 'foo' }); + } else { + return { status: 400 }; + } + } else { + return { status: 404 }; + } + }); + + const cli = new APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN', + }); + + const res = await cli.request('i'); + + expect(res).toEqual({ + id: 'foo' + }); + + expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({ + url: 'https://misskey.test/api/i', + method: 'POST', + body: { i: 'TOKEN' } + }); + }); + + test('with params', async () => { + fetchMock.resetMocks(); + fetchMock.mockResponse(async (req) => { + const body = await req.json(); + if (req.method == 'POST' && req.url == 'https://misskey.test/api/notes/show') { + if (body.i === 'TOKEN' && body.noteId === 'aaaaa') { + return JSON.stringify({ id: 'foo' }); + } else { + return { status: 400 }; + } + } else { + return { status: 404 }; + } + }); + + const cli = new APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN', + }); + + const res = await cli.request('notes/show', { noteId: 'aaaaa' }); + + expect(res).toEqual({ + id: 'foo' + }); + + expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({ + url: 'https://misskey.test/api/notes/show', + method: 'POST', + body: { i: 'TOKEN', noteId: 'aaaaa' } + }); + }); + + test('204 No Content で null が返る', async () => { + fetchMock.resetMocks(); + fetchMock.mockResponse(async (req) => { + if (req.method == 'POST' && req.url == 'https://misskey.test/api/reset-password') { + return { status: 204 }; + } else { + return { status: 404 }; + } + }); + + const cli = new APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN', + }); + + const res = await cli.request('reset-password', { token: 'aaa', password: 'aaa' }); + + expect(res).toEqual(null); + + expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({ + url: 'https://misskey.test/api/reset-password', + method: 'POST', + body: { i: 'TOKEN', token: 'aaa', password: 'aaa' } + }); + }); + + test('インスタンスの credential が指定されていても引数で credential が null ならば null としてリクエストされる', async () => { + fetchMock.resetMocks(); + fetchMock.mockResponse(async (req) => { + const body = await req.json(); + if (req.method == 'POST' && req.url == 'https://misskey.test/api/i') { + if (typeof body.i === 'string') { + return JSON.stringify({ id: 'foo' }); + } else { + return { + status: 401, + body: JSON.stringify({ + error: { + message: 'Credential required.', + code: 'CREDENTIAL_REQUIRED', + id: '1384574d-a912-4b81-8601-c7b1c4085df1', + } + }) + }; + } + } else { + return { status: 404 }; + } + }); + + try { + const cli = new APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN', + }); + + await cli.request('i', {}, null); + } catch (e) { + expect(isAPIError(e)).toEqual(true); + } + }); + + test('api error', async () => { + fetchMock.resetMocks(); + fetchMock.mockResponse(async (req) => { + return { + status: 500, + body: JSON.stringify({ + error: { + message: 'Internal error occurred. Please contact us if the error persists.', + code: 'INTERNAL_ERROR', + id: '5d37dbcb-891e-41ca-a3d6-e690c97775ac', + kind: 'server', + }, + }) + }; + }); + + try { + const cli = new APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN', + }); + + await cli.request('i'); + } catch (e: any) { + expect(isAPIError(e)).toEqual(true); + expect(e.id).toEqual('5d37dbcb-891e-41ca-a3d6-e690c97775ac'); + } + }); + + test('network error', async () => { + fetchMock.resetMocks(); + fetchMock.mockAbort(); + + try { + const cli = new APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN', + }); + + await cli.request('i'); + } catch (e) { + expect(isAPIError(e)).toEqual(false); + } + }); + + test('json parse error', async () => { + fetchMock.resetMocks(); + fetchMock.mockResponse(async (req) => { + return { + status: 500, + body: 'I AM NOT JSON' + }; + }); + + try { + const cli = new APIClient({ + origin: 'https://misskey.test', + credential: 'TOKEN', + }); + + await cli.request('i'); + } catch (e) { + expect(isAPIError(e)).toEqual(false); + } + }); +}); diff --git a/packages/misskey-js/test/streaming.ts b/packages/misskey-js/test/streaming.ts new file mode 100644 index 0000000000..913db8b287 --- /dev/null +++ b/packages/misskey-js/test/streaming.ts @@ -0,0 +1,165 @@ +import WS from 'jest-websocket-mock'; +import Stream from '../src/streaming'; + +describe('Streaming', () => { + test('useChannel', async () => { + const server = new WS('wss://misskey.test/streaming'); + const stream = new Stream('https://misskey.test', { token: 'TOKEN' }); + const mainChannelReceived: any[] = []; + const main = stream.useChannel('main'); + main.on('meUpdated', payload => { + mainChannelReceived.push(payload); + }); + + const ws = await server.connected; + expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN'); + + const msg = JSON.parse(await server.nextMessage as string); + const mainChannelId = msg.body.id; + expect(msg.type).toEqual('connect'); + expect(msg.body.channel).toEqual('main'); + expect(mainChannelId != null).toEqual(true); + + server.send(JSON.stringify({ + type: 'channel', + body: { + id: mainChannelId, + type: 'meUpdated', + body: { + id: 'foo' + } + } + })); + + expect(mainChannelReceived[0]).toEqual({ + id: 'foo' + }); + + stream.close(); + server.close(); + }); + + test('useChannel with parameters', async () => { + const server = new WS('wss://misskey.test/streaming'); + const stream = new Stream('https://misskey.test', { token: 'TOKEN' }); + const messagingChannelReceived: any[] = []; + const messaging = stream.useChannel('messaging', { otherparty: 'aaa' }); + messaging.on('message', payload => { + messagingChannelReceived.push(payload); + }); + + const ws = await server.connected; + expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN'); + + const msg = JSON.parse(await server.nextMessage as string); + const messagingChannelId = msg.body.id; + expect(msg.type).toEqual('connect'); + expect(msg.body.channel).toEqual('messaging'); + expect(msg.body.params).toEqual({ otherparty: 'aaa' }); + expect(messagingChannelId != null).toEqual(true); + + server.send(JSON.stringify({ + type: 'channel', + body: { + id: messagingChannelId, + type: 'message', + body: { + id: 'foo' + } + } + })); + + expect(messagingChannelReceived[0]).toEqual({ + id: 'foo' + }); + + stream.close(); + server.close(); + }); + + test('ちゃんとチャンネルごとにidが異なる', async () => { + const server = new WS('wss://misskey.test/streaming'); + const stream = new Stream('https://misskey.test', { token: 'TOKEN' }); + + stream.useChannel('messaging', { otherparty: 'aaa' }); + stream.useChannel('messaging', { otherparty: 'bbb' }); + + const ws = await server.connected; + expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN'); + + const msg = JSON.parse(await server.nextMessage as string); + const messagingChannelId = msg.body.id; + const msg2 = JSON.parse(await server.nextMessage as string); + const messagingChannelId2 = msg2.body.id; + + expect(messagingChannelId != null).toEqual(true); + expect(messagingChannelId2 != null).toEqual(true); + expect(messagingChannelId).not.toEqual(messagingChannelId2); + + stream.close(); + server.close(); + }); + + test('Connection#send', async () => { + const server = new WS('wss://misskey.test/streaming'); + const stream = new Stream('https://misskey.test', { token: 'TOKEN' }); + + const messaging = stream.useChannel('messaging', { otherparty: 'aaa' }); + messaging.send('read', { id: 'aaa' }); + + const ws = await server.connected; + expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN'); + + const connectMsg = JSON.parse(await server.nextMessage as string); + const channelId = connectMsg.body.id; + const msg = JSON.parse(await server.nextMessage as string); + + expect(msg.type).toEqual('ch'); + expect(msg.body.id).toEqual(channelId); + expect(msg.body.type).toEqual('read'); + expect(msg.body.body).toEqual({ id: 'aaa' }); + + stream.close(); + server.close(); + }); + + test('Connection#dispose', async () => { + const server = new WS('wss://misskey.test/streaming'); + const stream = new Stream('https://misskey.test', { token: 'TOKEN' }); + const mainChannelReceived: any[] = []; + const main = stream.useChannel('main'); + main.on('meUpdated', payload => { + mainChannelReceived.push(payload); + }); + + const ws = await server.connected; + expect(new URLSearchParams(new URL(ws.url).search).get('i')).toEqual('TOKEN'); + + const msg = JSON.parse(await server.nextMessage as string); + const mainChannelId = msg.body.id; + expect(msg.type).toEqual('connect'); + expect(msg.body.channel).toEqual('main'); + expect(mainChannelId != null).toEqual(true); + main.dispose(); + + server.send(JSON.stringify({ + type: 'channel', + body: { + id: mainChannelId, + type: 'meUpdated', + body: { + id: 'foo' + } + } + })); + + expect(mainChannelReceived.length).toEqual(0); + + stream.close(); + server.close(); + }); + + // TODO: SharedConnection#dispose して一定時間経ったら disconnect メッセージがサーバーに送られてくるかのテスト + + // TODO: チャンネル接続が使いまわされるかのテスト +}); diff --git a/packages/misskey-js/tsconfig.json b/packages/misskey-js/tsconfig.json new file mode 100644 index 0000000000..c679347fea --- /dev/null +++ b/packages/misskey-js/tsconfig.json @@ -0,0 +1,33 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + "compilerOptions": { + "target": "es2022", + "module": "ES2020", + "moduleResolution": "node", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./built/", + "removeComments": true, + "strict": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "experimentalDecorators": true, + "noImplicitReturns": true, + "esModuleInterop": true, + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "esnext", + "dom" + ] + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + "test/**/*" + ] +} diff --git a/packages/sw/package.json b/packages/sw/package.json index 7fab90a243..03d14dd256 100644 --- a/packages/sw/package.json +++ b/packages/sw/package.json @@ -11,13 +11,13 @@ "dependencies": { "esbuild": "0.14.42", "idb-keyval": "6.2.0", - "misskey-js": "0.0.15" + "misskey-js": "workspace:*" }, "devDependencies": { - "@typescript-eslint/parser": "5.52.0", - "@typescript/lib-webworker": "npm:@types/serviceworker@0.0.62", - "eslint": "8.34.0", + "@typescript-eslint/parser": "5.57.0", + "@typescript/lib-webworker": "npm:@types/serviceworker@0.0.67", + "eslint": "8.37.0", "eslint-plugin-import": "2.27.5", - "typescript": "4.9.5" + "typescript": "5.0.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 293a1675d9..6899bb0e13 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: 4.1.0 version: 4.1.0 typescript: - specifier: 4.9.5 - version: 4.9.5 + specifier: 5.0.2 + version: 5.0.2 optionalDependencies: '@tensorflow/tfjs-core': specifier: 4.2.0 @@ -44,20 +44,20 @@ importers: specifier: 2.0.1 version: 2.0.1 '@typescript-eslint/eslint-plugin': - specifier: 5.54.1 - version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) + specifier: 5.57.0 + version: 5.57.0(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(typescript@5.0.2) '@typescript-eslint/parser': - specifier: 5.54.1 - version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) + specifier: 5.57.0 + version: 5.57.0(eslint@8.37.0)(typescript@5.0.2) cross-env: specifier: 7.0.3 version: 7.0.3 cypress: - specifier: 12.7.0 - version: 12.7.0 + specifier: 12.9.0 + version: 12.9.0 eslint: - specifier: 8.35.0 - version: 8.35.0 + specifier: 8.37.0 + version: 8.37.0 start-server-and-test: specifier: 2.0.0 version: 2.0.0 @@ -65,14 +65,14 @@ importers: packages/backend: dependencies: '@aws-sdk/client-s3': - specifier: ^3.294.0 - version: 3.294.0 + specifier: 3.301.0 + version: 3.301.0 '@aws-sdk/lib-storage': - specifier: ^3.294.0 - version: 3.294.0(@aws-sdk/abort-controller@3.292.0)(@aws-sdk/client-s3@3.294.0) + specifier: 3.301.0 + version: 3.301.0(@aws-sdk/abort-controller@3.296.0)(@aws-sdk/client-s3@3.301.0) '@aws-sdk/node-http-handler': - specifier: ^3.292.0 - version: 3.292.0 + specifier: 3.296.0 + version: 3.296.0 '@bull-board/api': specifier: 5.0.0 version: 5.0.0 @@ -83,8 +83,8 @@ importers: specifier: 5.0.0 version: 5.0.0 '@discordapp/twemoji': - specifier: 14.0.2 - version: 14.0.2 + specifier: 14.1.2 + version: 14.1.2 '@fastify/accepts': specifier: 4.1.0 version: 4.1.0 @@ -92,14 +92,14 @@ importers: specifier: 8.3.0 version: 8.3.0 '@fastify/cors': - specifier: 8.2.0 - version: 8.2.0 + specifier: 8.2.1 + version: 8.2.1 '@fastify/http-proxy': - specifier: 8.4.0 - version: 8.4.0 + specifier: 9.0.0 + version: 9.0.0 '@fastify/multipart': - specifier: 7.4.2 - version: 7.4.2 + specifier: 7.5.0 + version: 7.5.0 '@fastify/static': specifier: 6.9.0 version: 6.9.0 @@ -107,14 +107,14 @@ importers: specifier: 7.4.1 version: 7.4.1 '@nestjs/common': - specifier: 9.3.9 - version: 9.3.9(reflect-metadata@0.1.13)(rxjs@7.8.0) + specifier: 9.3.12 + version: 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': - specifier: 9.3.9 - version: 9.3.9(@nestjs/common@9.3.9)(reflect-metadata@0.1.13)(rxjs@7.8.0) + specifier: 9.3.12 + version: 9.3.12(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/testing': - specifier: 9.3.9 - version: 9.3.9(@nestjs/common@9.3.9)(@nestjs/core@9.3.9) + specifier: 9.3.12 + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) '@peertube/http-signature': specifier: 1.7.0 version: 1.7.0 @@ -123,10 +123,10 @@ importers: version: 10.0.2 '@swc/cli': specifier: 0.1.62 - version: 0.1.62(@swc/core@1.3.38)(chokidar@3.5.3) + version: 0.1.62(@swc/core@1.3.42)(chokidar@3.5.3) '@swc/core': - specifier: 1.3.38 - version: 1.3.38 + specifier: 1.3.42 + version: 1.3.42 accepts: specifier: 1.3.8 version: 1.3.8 @@ -182,8 +182,8 @@ importers: specifier: 0.0.1 version: 0.0.1 fastify: - specifier: 4.14.1 - version: 4.14.1 + specifier: 4.15.0 + version: 4.15.0 feed: specifier: 4.2.2 version: 4.2.2 @@ -218,8 +218,8 @@ importers: specifier: 4.1.0 version: 4.1.0 jsdom: - specifier: 21.1.0 - version: 21.1.0 + specifier: 21.1.1 + version: 21.1.1 json5: specifier: 2.2.3 version: 2.2.3 @@ -227,8 +227,8 @@ importers: specifier: 8.1.1 version: 8.1.1 jsrsasign: - specifier: 10.6.1 - version: 10.6.1 + specifier: 10.7.0 + version: 10.7.0 mfm-js: specifier: 0.23.3 version: 0.23.3 @@ -236,8 +236,8 @@ importers: specifier: 2.1.35 version: 2.1.35 misskey-js: - specifier: 0.0.15 - version: 0.0.15 + specifier: workspace:* + version: link:../misskey-js ms: specifier: 3.0.0-canary.1 version: 3.0.0-canary.1 @@ -245,8 +245,8 @@ importers: specifier: 4.0.0 version: 4.0.0 node-fetch: - specifier: 3.3.0 - version: 3.3.0 + specifier: 3.3.1 + version: 3.3.1 nodemailer: specifier: 6.9.1 version: 6.9.1 @@ -260,8 +260,8 @@ importers: specifier: 0.0.14 version: 0.0.14 otpauth: - specifier: ^9.0.2 - version: 9.0.2 + specifier: 9.1.1 + version: 9.1.1 parse5: specifier: 7.1.2 version: 7.1.2 @@ -329,8 +329,8 @@ importers: specifier: 7.3.8 version: 7.3.8 sharp: - specifier: 0.31.3 - version: 0.31.3 + specifier: 0.32.0 + version: 0.32.0 sharp-read-bmp: specifier: github:misskey-dev/sharp-read-bmp version: github.com/misskey-dev/sharp-read-bmp/02d9dc189fa7df0c4bea09330be26741772dac01 @@ -353,11 +353,11 @@ importers: specifier: 0.2.1 version: 0.2.1 tsc-alias: - specifier: 1.8.3 - version: 1.8.3 + specifier: 1.8.5 + version: 1.8.5 tsconfig-paths: - specifier: 4.1.2 - version: 4.1.2 + specifier: 4.2.0 + version: 4.2.0 twemoji-parser: specifier: 14.0.0 version: 14.0.0 @@ -365,8 +365,8 @@ importers: specifier: 0.3.11 version: 0.3.11(ioredis@4.28.5)(pg@8.10.0) typescript: - specifier: 4.9.5 - version: 4.9.5 + specifier: 5.0.2 + version: 5.0.2 ulid: specifier: 2.3.0 version: 2.3.0 @@ -386,8 +386,8 @@ importers: specifier: 1.0.34 version: 1.0.34 ws: - specifier: 8.12.1 - version: 8.12.1 + specifier: 8.13.0 + version: 8.13.0 xev: specifier: 3.0.2 version: 3.0.2 @@ -396,35 +396,35 @@ importers: specifier: ^1.3.11 version: 1.3.11 '@swc/core-darwin-arm64': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-darwin-x64': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-linux-arm-gnueabihf': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-linux-arm64-gnu': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-linux-arm64-musl': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-linux-x64-gnu': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-linux-x64-musl': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-win32-arm64-msvc': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-win32-ia32-msvc': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@swc/core-win32-x64-msvc': - specifier: ^1.3.38 - version: 1.3.38 + specifier: ^1.3.42 + version: 1.3.42 '@tensorflow/tfjs': specifier: 4.2.0 version: 4.2.0(seedrandom@3.0.5) @@ -437,13 +437,13 @@ importers: version: 29.5.0 '@swc/jest': specifier: 0.2.24 - version: 0.2.24(@swc/core@1.3.38) + version: 0.2.24(@swc/core@1.3.42) '@types/accepts': specifier: 1.3.5 version: 1.3.5 '@types/archiver': - specifier: 5.3.1 - version: 5.3.1 + specifier: 5.3.2 + version: 5.3.2 '@types/bcryptjs': specifier: 2.4.2 version: 2.4.2 @@ -469,26 +469,26 @@ importers: specifier: 4.28.10 version: 4.28.10 '@types/jest': - specifier: 29.4.0 - version: 29.4.0 + specifier: 29.5.0 + version: 29.5.0 '@types/js-yaml': specifier: 4.0.5 version: 4.0.5 '@types/jsdom': - specifier: 21.1.0 - version: 21.1.0 + specifier: 21.1.1 + version: 21.1.1 '@types/jsonld': specifier: 1.5.8 version: 1.5.8 '@types/jsrsasign': - specifier: 10.5.5 - version: 10.5.5 + specifier: 10.5.8 + version: 10.5.8 '@types/mime-types': specifier: 2.1.1 version: 2.1.1 '@types/node': - specifier: 18.15.0 - version: 18.15.0 + specifier: 18.15.11 + version: 18.15.11 '@types/node-fetch': specifier: 3.0.3 version: 3.0.3 @@ -523,8 +523,8 @@ importers: specifier: 1.0.4 version: 1.0.4 '@types/sanitize-html': - specifier: 2.8.1 - version: 2.8.1 + specifier: 2.9.0 + version: 2.9.0 '@types/semver': specifier: 7.3.13 version: 7.3.13 @@ -559,11 +559,11 @@ importers: specifier: 8.5.4 version: 8.5.4 '@typescript-eslint/eslint-plugin': - specifier: 5.54.1 - version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) + specifier: 5.57.0 + version: 5.57.0(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(typescript@5.0.2) '@typescript-eslint/parser': - specifier: 5.54.1 - version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) + specifier: 5.57.0 + version: 5.57.0(eslint@8.37.0)(typescript@5.0.2) aws-sdk-client-mock: specifier: ^2.1.1 version: 2.1.1 @@ -571,17 +571,17 @@ importers: specifier: 7.0.3 version: 7.0.3 eslint: - specifier: 8.35.0 - version: 8.35.0 + specifier: 8.37.0 + version: 8.37.0 eslint-plugin-import: specifier: 2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint@8.35.0) + version: 2.27.5(@typescript-eslint/parser@5.57.0)(eslint@8.37.0) execa: specifier: 6.1.0 version: 6.1.0 jest: specifier: 29.5.0 - version: 29.5.0(@types/node@18.15.0) + version: 29.5.0(@types/node@18.15.11) jest-mock: specifier: 29.5.0 version: 29.5.0 @@ -589,26 +589,26 @@ importers: packages/frontend: dependencies: '@discordapp/twemoji': - specifier: 14.0.2 - version: 14.0.2 + specifier: 14.1.2 + version: 14.1.2 '@rollup/plugin-alias': specifier: 4.0.3 - version: 4.0.3(rollup@3.19.0) + version: 4.0.3(rollup@3.20.2) '@rollup/plugin-json': specifier: 6.0.0 - version: 6.0.0(rollup@3.19.0) + version: 6.0.0(rollup@3.20.2) '@rollup/pluginutils': specifier: 5.0.2 - version: 5.0.2(rollup@3.19.0) + version: 5.0.2(rollup@3.20.2) '@syuilo/aiscript': specifier: 0.13.1 version: 0.13.1 '@tabler/icons-webfont': - specifier: 2.10.0 - version: 2.10.0 + specifier: 2.12.0 + version: 2.12.0 '@vitejs/plugin-vue': - specifier: 4.0.0 - version: 4.0.0(vite@4.1.4)(vue@3.2.47) + specifier: 4.1.0 + version: 4.1.0(vite@4.2.1)(vue@3.2.47) '@vue/compiler-sfc': specifier: 3.2.47 version: 3.2.47 @@ -643,8 +643,8 @@ importers: specifier: 0.6.1 version: 0.6.1(chart.js@4.2.1) chartjs-plugin-zoom: - specifier: 2.0.0 - version: 2.0.0(chart.js@4.2.1) + specifier: 2.0.1 + version: 2.0.1(chart.js@4.2.1) compare-versions: specifier: 5.0.1 version: 5.0.1 @@ -661,8 +661,8 @@ importers: specifier: 5.0.0 version: 5.0.0 gsap: - specifier: 3.11.4 - version: 3.11.4 + specifier: 3.11.5 + version: 3.11.5 idb-keyval: specifier: 6.2.0 version: 6.2.0 @@ -682,11 +682,11 @@ importers: specifier: 0.23.3 version: 0.23.3 misskey-js: - specifier: 0.0.15 - version: 0.0.15 + specifier: workspace:* + version: link:../misskey-js photoswipe: - specifier: 5.3.6 - version: 5.3.6 + specifier: 5.3.7 + version: 5.3.7 prismjs: specifier: 1.29.0 version: 1.29.0 @@ -700,8 +700,8 @@ importers: specifier: 1.0.0 version: 1.0.0 rollup: - specifier: 3.19.0 - version: 3.19.0 + specifier: 3.20.2 + version: 3.20.2 s-age: specifier: 1.1.2 version: 1.1.2 @@ -709,8 +709,8 @@ importers: specifier: 2.10.0 version: 2.10.0 sass: - specifier: 1.58.3 - version: 1.58.3 + specifier: 1.60.0 + version: 1.60.0 seedrandom: specifier: 3.0.5 version: 3.0.5 @@ -733,17 +733,17 @@ importers: specifier: 1.6.0 version: 1.6.0 tsc-alias: - specifier: 1.8.3 - version: 1.8.3 + specifier: 1.8.5 + version: 1.8.5 tsconfig-paths: - specifier: 4.1.2 - version: 4.1.2 + specifier: 4.2.0 + version: 4.2.0 twemoji-parser: specifier: 14.0.0 version: 14.0.0 typescript: - specifier: 4.9.5 - version: 4.9.5 + specifier: 5.0.2 + version: 5.0.2 uuid: specifier: 9.0.0 version: 9.0.0 @@ -751,8 +751,8 @@ importers: specifier: 1.8.0 version: 1.8.0 vite: - specifier: 4.1.4 - version: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + specifier: 4.2.1 + version: 4.2.1(@types/node@18.15.11)(sass@1.60.0) vue: specifier: 3.2.47 version: 3.2.47 @@ -798,10 +798,10 @@ importers: version: 7.0.0-rc.10 '@storybook/react': specifier: 7.0.0-rc.10 - version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) + version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2) '@storybook/react-vite': specifier: 7.0.0-rc.10 - version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.4) + version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1) '@storybook/testing-library': specifier: 0.0.14-next.1 version: 0.0.14-next.1 @@ -816,7 +816,7 @@ importers: version: 7.0.0-rc.10(vue@3.2.47) '@storybook/vue3-vite': specifier: 7.0.0-rc.10 - version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.4)(vue@3.2.47) + version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47) '@testing-library/vue': specifier: ^6.6.1 version: 6.6.1(@vue/compiler-sfc@3.2.47)(vue@3.2.47) @@ -836,14 +836,14 @@ importers: specifier: 0.18.2 version: 0.18.2 '@types/node': - specifier: 18.15.0 - version: 18.15.0 + specifier: 18.15.11 + version: 18.15.11 '@types/punycode': specifier: 2.1.0 version: 2.1.0 '@types/sanitize-html': - specifier: 2.8.1 - version: 2.8.1 + specifier: 2.9.0 + version: 2.9.0 '@types/seedrandom': specifier: 3.0.5 version: 3.0.5 @@ -863,14 +863,14 @@ importers: specifier: 8.5.4 version: 8.5.4 '@typescript-eslint/eslint-plugin': - specifier: 5.54.1 - version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) + specifier: 5.57.0 + version: 5.57.0(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(typescript@5.0.2) '@typescript-eslint/parser': - specifier: 5.54.1 - version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) + specifier: 5.57.0 + version: 5.57.0(eslint@8.37.0)(typescript@5.0.2) '@vitest/coverage-c8': - specifier: ^0.29.2 - version: 0.29.2(vitest@0.29.2) + specifier: ^0.29.8 + version: 0.29.8(vitest@0.29.8) '@vue/runtime-core': specifier: 3.2.47 version: 3.2.47 @@ -881,23 +881,23 @@ importers: specifier: 7.0.3 version: 7.0.3 cypress: - specifier: 12.7.0 - version: 12.7.0 + specifier: 12.9.0 + version: 12.9.0 eslint: - specifier: 8.35.0 - version: 8.35.0 + specifier: 8.37.0 + version: 8.37.0 eslint-plugin-import: specifier: 2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint@8.35.0) + version: 2.27.5(@typescript-eslint/parser@5.57.0)(eslint@8.37.0) eslint-plugin-vue: - specifier: 9.9.0 - version: 9.9.0(eslint@8.35.0) + specifier: 9.10.0 + version: 9.10.0(eslint@8.37.0) happy-dom: specifier: 8.9.0 version: 8.9.0 msw: specifier: ^1.1.0 - version: 1.1.0(typescript@4.9.5) + version: 1.1.0(typescript@5.0.2) msw-storybook-addon: specifier: ^1.8.0 version: 1.8.0(msw@1.1.0) @@ -924,19 +924,77 @@ importers: version: github.com/misskey-dev/summaly/1bab7afee616429b8bbf7a7cbcbb8ebcef66d992 vite-plugin-restart: specifier: ^0.3.1 - version: 0.3.1(vite@4.1.4) + version: 0.3.1(vite@4.2.1) vitest: - specifier: ^0.29.2 - version: 0.29.2(happy-dom@8.9.0)(sass@1.58.3) + specifier: ^0.29.8 + version: 0.29.8(happy-dom@8.9.0)(sass@1.60.0) vitest-fetch-mock: specifier: ^0.2.2 - version: 0.2.2(vitest@0.29.2) + version: 0.2.2(vitest@0.29.8) vue-eslint-parser: specifier: 9.1.0 - version: 9.1.0(eslint@8.35.0) + version: 9.1.0(eslint@8.37.0) vue-tsc: specifier: 1.2.0 - version: 1.2.0(typescript@4.9.5) + version: 1.2.0(typescript@5.0.2) + + packages/misskey-js: + dependencies: + '@swc/cli': + specifier: 0.1.62 + version: 0.1.62(@swc/core@1.3.42)(chokidar@3.5.3) + '@swc/core': + specifier: 1.3.42 + version: 1.3.42 + autobind-decorator: + specifier: ^2.4.0 + version: 2.4.0 + eventemitter3: + specifier: 5.0.0 + version: 5.0.0 + reconnecting-websocket: + specifier: ^4.4.0 + version: 4.4.0 + devDependencies: + '@microsoft/api-extractor': + specifier: 7.34.4 + version: 7.34.4(@types/node@18.15.11) + '@swc/jest': + specifier: 0.2.24 + version: 0.2.24(@swc/core@1.3.42) + '@types/jest': + specifier: 29.5.0 + version: 29.5.0 + '@types/node': + specifier: 18.15.11 + version: 18.15.11 + '@typescript-eslint/eslint-plugin': + specifier: 5.57.0 + version: 5.57.0(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(typescript@5.0.2) + '@typescript-eslint/parser': + specifier: 5.57.0 + version: 5.57.0(eslint@8.37.0)(typescript@5.0.2) + eslint: + specifier: 8.37.0 + version: 8.37.0 + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@18.15.11) + jest-fetch-mock: + specifier: ^3.0.3 + version: 3.0.3 + jest-websocket-mock: + specifier: 2.4.0 + version: 2.4.0 + mock-socket: + specifier: 9.2.1 + version: 9.2.1 + tsd: + specifier: 0.28.1 + version: 0.28.1 + typescript: + specifier: 5.0.2 + version: 5.0.2 packages/sw: dependencies: @@ -947,24 +1005,24 @@ importers: specifier: 6.2.0 version: 6.2.0 misskey-js: - specifier: 0.0.15 - version: 0.0.15 + specifier: workspace:* + version: link:../misskey-js devDependencies: '@typescript-eslint/parser': - specifier: 5.52.0 - version: 5.52.0(eslint@8.34.0)(typescript@4.9.5) + specifier: 5.57.0 + version: 5.57.0(eslint@8.37.0)(typescript@5.0.2) '@typescript/lib-webworker': - specifier: npm:@types/serviceworker@0.0.62 - version: /@types/serviceworker@0.0.62 + specifier: npm:@types/serviceworker@0.0.67 + version: /@types/serviceworker@0.0.67 eslint: - specifier: 8.34.0 - version: 8.34.0 + specifier: 8.37.0 + version: 8.37.0 eslint-plugin-import: specifier: 2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.52.0)(eslint@8.34.0) + version: 2.27.5(@typescript-eslint/parser@5.57.0)(eslint@8.37.0) typescript: - specifier: 4.9.5 - version: 4.9.5 + specifier: 5.0.2 + version: 5.0.2 packages: @@ -991,7 +1049,7 @@ packages: resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 1.14.1 dev: false @@ -999,7 +1057,7 @@ packages: resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 1.14.1 dev: false @@ -1015,7 +1073,7 @@ packages: '@aws-crypto/ie11-detection': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 '@aws-sdk/util-locate-window': 3.208.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -1028,7 +1086,7 @@ packages: '@aws-crypto/sha256-js': 3.0.0 '@aws-crypto/supports-web-crypto': 3.0.0 '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 '@aws-sdk/util-locate-window': 3.208.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 @@ -1038,7 +1096,7 @@ packages: resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} dependencies: '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 1.14.1 dev: false @@ -1051,88 +1109,81 @@ packages: /@aws-crypto/util@3.0.0: resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 dev: false - /@aws-sdk/abort-controller@3.292.0: - resolution: {integrity: sha512-lf+OPptL01kvryIJy7+dvFux5KbJ6OTwLPPEekVKZ2AfEvwcVtOZWFUhyw3PJCBTVncjKB1Kjl3V/eTS3YuPXQ==} + /@aws-sdk/abort-controller@3.296.0: + resolution: {integrity: sha512-gNUFBlBw6+sEMfDjPVa83iscpQwXBS4uoiZXnfeQ6s6tnaxqQpJDrBBmNvYqDEXNdaAJX4FhayEwkSvtir/f3A==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/chunked-blob-reader-native@3.292.0: - resolution: {integrity: sha512-A34sBrnggm9mXPZeeEie4jDv9zHRMS0LSm85VkfrBLuYYsfsw9DxmW59wJkuo6DIm/RK04oH5+lRMt34koBgrw==} - dependencies: - '@aws-sdk/util-base64': 3.292.0 - tslib: 2.5.0 - dev: false - - /@aws-sdk/chunked-blob-reader@3.292.0: - resolution: {integrity: sha512-ccFPnzBjLbDCmFjTXwhsfD58vtEiAjbor3A9tvnou+3Dj6RrMEGPaTu5tcw3mwWb2zh1K3HFJg6Bmb0no49TRw==} + /@aws-sdk/chunked-blob-reader@3.295.0: + resolution: {integrity: sha512-oWWcEKyrx4sNFxfvOgkMai1jJtOuERmND8fAp8vRA6i38HBU80q8jjkoAitFGPHUz57EhI2ewYYNnf7vkGteOQ==} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/client-s3@3.294.0: - resolution: {integrity: sha512-J0rTBpZlmeNWgpYaGM7w55Hdmh8LWfYFmb09Fr0Oee/VGFgi28p3vCCnP+ploo1TlFRdsPlGZJ7zod+m/iPeBg==} + /@aws-sdk/client-s3@3.301.0: + resolution: {integrity: sha512-ZOc6pCyPVpTFUtvLvs8hpDz51Ylu3GfhjYH5XqKlo2RJJcXgwUM+isVKyi9ZfWPC31bQw+WxtCZN7Vap6ltelQ==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.294.0 - '@aws-sdk/config-resolver': 3.292.0 - '@aws-sdk/credential-provider-node': 3.294.0 - '@aws-sdk/eventstream-serde-browser': 3.292.0 - '@aws-sdk/eventstream-serde-config-resolver': 3.292.0 - '@aws-sdk/eventstream-serde-node': 3.292.0 - '@aws-sdk/fetch-http-handler': 3.292.0 - '@aws-sdk/hash-blob-browser': 3.292.0 - '@aws-sdk/hash-node': 3.292.0 - '@aws-sdk/hash-stream-node': 3.292.0 - '@aws-sdk/invalid-dependency': 3.292.0 - '@aws-sdk/md5-js': 3.292.0 - '@aws-sdk/middleware-bucket-endpoint': 3.292.0 - '@aws-sdk/middleware-content-length': 3.292.0 - '@aws-sdk/middleware-endpoint': 3.292.0 - '@aws-sdk/middleware-expect-continue': 3.292.0 - '@aws-sdk/middleware-flexible-checksums': 3.292.0 - '@aws-sdk/middleware-host-header': 3.292.0 - '@aws-sdk/middleware-location-constraint': 3.292.0 - '@aws-sdk/middleware-logger': 3.292.0 - '@aws-sdk/middleware-recursion-detection': 3.292.0 - '@aws-sdk/middleware-retry': 3.293.0 - '@aws-sdk/middleware-sdk-s3': 3.292.0 - '@aws-sdk/middleware-serde': 3.292.0 - '@aws-sdk/middleware-signing': 3.292.0 - '@aws-sdk/middleware-ssec': 3.292.0 - '@aws-sdk/middleware-stack': 3.292.0 - '@aws-sdk/middleware-user-agent': 3.293.0 - '@aws-sdk/node-config-provider': 3.292.0 - '@aws-sdk/node-http-handler': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/signature-v4-multi-region': 3.292.0 - '@aws-sdk/smithy-client': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/url-parser': 3.292.0 - '@aws-sdk/util-base64': 3.292.0 - '@aws-sdk/util-body-length-browser': 3.292.0 - '@aws-sdk/util-body-length-node': 3.292.0 - '@aws-sdk/util-defaults-mode-browser': 3.292.0 - '@aws-sdk/util-defaults-mode-node': 3.292.0 - '@aws-sdk/util-endpoints': 3.293.0 - '@aws-sdk/util-retry': 3.292.0 - '@aws-sdk/util-stream-browser': 3.292.0 - '@aws-sdk/util-stream-node': 3.292.0 - '@aws-sdk/util-user-agent-browser': 3.292.0 - '@aws-sdk/util-user-agent-node': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 - '@aws-sdk/util-waiter': 3.292.0 - '@aws-sdk/xml-builder': 3.292.0 + '@aws-sdk/client-sts': 3.301.0 + '@aws-sdk/config-resolver': 3.300.0 + '@aws-sdk/credential-provider-node': 3.301.0 + '@aws-sdk/eventstream-serde-browser': 3.296.0 + '@aws-sdk/eventstream-serde-config-resolver': 3.296.0 + '@aws-sdk/eventstream-serde-node': 3.299.0 + '@aws-sdk/fetch-http-handler': 3.296.0 + '@aws-sdk/hash-blob-browser': 3.299.0 + '@aws-sdk/hash-node': 3.296.0 + '@aws-sdk/hash-stream-node': 3.296.0 + '@aws-sdk/invalid-dependency': 3.296.0 + '@aws-sdk/md5-js': 3.296.0 + '@aws-sdk/middleware-bucket-endpoint': 3.300.0 + '@aws-sdk/middleware-content-length': 3.296.0 + '@aws-sdk/middleware-endpoint': 3.299.0 + '@aws-sdk/middleware-expect-continue': 3.296.0 + '@aws-sdk/middleware-flexible-checksums': 3.296.0 + '@aws-sdk/middleware-host-header': 3.296.0 + '@aws-sdk/middleware-location-constraint': 3.296.0 + '@aws-sdk/middleware-logger': 3.296.0 + '@aws-sdk/middleware-recursion-detection': 3.296.0 + '@aws-sdk/middleware-retry': 3.300.0 + '@aws-sdk/middleware-sdk-s3': 3.296.0 + '@aws-sdk/middleware-serde': 3.296.0 + '@aws-sdk/middleware-signing': 3.299.0 + '@aws-sdk/middleware-ssec': 3.296.0 + '@aws-sdk/middleware-stack': 3.296.0 + '@aws-sdk/middleware-user-agent': 3.299.0 + '@aws-sdk/node-config-provider': 3.300.0 + '@aws-sdk/node-http-handler': 3.296.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/signature-v4-multi-region': 3.299.0 + '@aws-sdk/smithy-client': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/url-parser': 3.296.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.296.0 + '@aws-sdk/util-defaults-mode-node': 3.300.0 + '@aws-sdk/util-endpoints': 3.296.0 + '@aws-sdk/util-retry': 3.296.0 + '@aws-sdk/util-stream-browser': 3.296.0 + '@aws-sdk/util-stream-node': 3.296.0 + '@aws-sdk/util-user-agent-browser': 3.299.0 + '@aws-sdk/util-user-agent-node': 3.300.0 + '@aws-sdk/util-utf8': 3.295.0 + '@aws-sdk/util-waiter': 3.296.0 + '@aws-sdk/xml-builder': 3.295.0 fast-xml-parser: 4.1.2 tslib: 2.5.0 transitivePeerDependencies: @@ -1140,589 +1191,581 @@ packages: - aws-crt dev: false - /@aws-sdk/client-sso-oidc@3.294.0: - resolution: {integrity: sha512-/ZfDud76MdSPJ/TxjV2xLE30XbBQDZwKQ32axwoK1eziPvrAIUBYVgpBwj+m0quhoiQhBKkg3aFl6j39AF2thw==} + /@aws-sdk/client-sso-oidc@3.301.0: + resolution: {integrity: sha512-bCBA70/7gkrk1s1iGWt3st4p9yNIkQ3e+KV8Kx3uzRvjD0f7KltGqSNA28453tsa7ko+H/V4c7fzrJnWaQomCg==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/config-resolver': 3.292.0 - '@aws-sdk/fetch-http-handler': 3.292.0 - '@aws-sdk/hash-node': 3.292.0 - '@aws-sdk/invalid-dependency': 3.292.0 - '@aws-sdk/middleware-content-length': 3.292.0 - '@aws-sdk/middleware-endpoint': 3.292.0 - '@aws-sdk/middleware-host-header': 3.292.0 - '@aws-sdk/middleware-logger': 3.292.0 - '@aws-sdk/middleware-recursion-detection': 3.292.0 - '@aws-sdk/middleware-retry': 3.293.0 - '@aws-sdk/middleware-serde': 3.292.0 - '@aws-sdk/middleware-stack': 3.292.0 - '@aws-sdk/middleware-user-agent': 3.293.0 - '@aws-sdk/node-config-provider': 3.292.0 - '@aws-sdk/node-http-handler': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/smithy-client': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/url-parser': 3.292.0 - '@aws-sdk/util-base64': 3.292.0 - '@aws-sdk/util-body-length-browser': 3.292.0 - '@aws-sdk/util-body-length-node': 3.292.0 - '@aws-sdk/util-defaults-mode-browser': 3.292.0 - '@aws-sdk/util-defaults-mode-node': 3.292.0 - '@aws-sdk/util-endpoints': 3.293.0 - '@aws-sdk/util-retry': 3.292.0 - '@aws-sdk/util-user-agent-browser': 3.292.0 - '@aws-sdk/util-user-agent-node': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/config-resolver': 3.300.0 + '@aws-sdk/fetch-http-handler': 3.296.0 + '@aws-sdk/hash-node': 3.296.0 + '@aws-sdk/invalid-dependency': 3.296.0 + '@aws-sdk/middleware-content-length': 3.296.0 + '@aws-sdk/middleware-endpoint': 3.299.0 + '@aws-sdk/middleware-host-header': 3.296.0 + '@aws-sdk/middleware-logger': 3.296.0 + '@aws-sdk/middleware-recursion-detection': 3.296.0 + '@aws-sdk/middleware-retry': 3.300.0 + '@aws-sdk/middleware-serde': 3.296.0 + '@aws-sdk/middleware-stack': 3.296.0 + '@aws-sdk/middleware-user-agent': 3.299.0 + '@aws-sdk/node-config-provider': 3.300.0 + '@aws-sdk/node-http-handler': 3.296.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/smithy-client': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/url-parser': 3.296.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.296.0 + '@aws-sdk/util-defaults-mode-node': 3.300.0 + '@aws-sdk/util-endpoints': 3.296.0 + '@aws-sdk/util-retry': 3.296.0 + '@aws-sdk/util-user-agent-browser': 3.299.0 + '@aws-sdk/util-user-agent-node': 3.300.0 + '@aws-sdk/util-utf8': 3.295.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/client-sso@3.294.0: - resolution: {integrity: sha512-+FuxQTi5WvnaXM5JbNLkBIzQ3An4gA0ox61N1u+3xled+nywKb1yQ7WmRpyMG5bLbkmnj3aqoo5/uskFc4c4EA==} + /@aws-sdk/client-sso@3.301.0: + resolution: {integrity: sha512-nABoNn0O79PL72jg2oy9gR/MLmM4opZ6nQefXvXUb6RzlITZCCZ6uKkGcH2LMxOcRu6qQlY+uauX+9p0GJexlg==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/config-resolver': 3.292.0 - '@aws-sdk/fetch-http-handler': 3.292.0 - '@aws-sdk/hash-node': 3.292.0 - '@aws-sdk/invalid-dependency': 3.292.0 - '@aws-sdk/middleware-content-length': 3.292.0 - '@aws-sdk/middleware-endpoint': 3.292.0 - '@aws-sdk/middleware-host-header': 3.292.0 - '@aws-sdk/middleware-logger': 3.292.0 - '@aws-sdk/middleware-recursion-detection': 3.292.0 - '@aws-sdk/middleware-retry': 3.293.0 - '@aws-sdk/middleware-serde': 3.292.0 - '@aws-sdk/middleware-stack': 3.292.0 - '@aws-sdk/middleware-user-agent': 3.293.0 - '@aws-sdk/node-config-provider': 3.292.0 - '@aws-sdk/node-http-handler': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/smithy-client': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/url-parser': 3.292.0 - '@aws-sdk/util-base64': 3.292.0 - '@aws-sdk/util-body-length-browser': 3.292.0 - '@aws-sdk/util-body-length-node': 3.292.0 - '@aws-sdk/util-defaults-mode-browser': 3.292.0 - '@aws-sdk/util-defaults-mode-node': 3.292.0 - '@aws-sdk/util-endpoints': 3.293.0 - '@aws-sdk/util-retry': 3.292.0 - '@aws-sdk/util-user-agent-browser': 3.292.0 - '@aws-sdk/util-user-agent-node': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/config-resolver': 3.300.0 + '@aws-sdk/fetch-http-handler': 3.296.0 + '@aws-sdk/hash-node': 3.296.0 + '@aws-sdk/invalid-dependency': 3.296.0 + '@aws-sdk/middleware-content-length': 3.296.0 + '@aws-sdk/middleware-endpoint': 3.299.0 + '@aws-sdk/middleware-host-header': 3.296.0 + '@aws-sdk/middleware-logger': 3.296.0 + '@aws-sdk/middleware-recursion-detection': 3.296.0 + '@aws-sdk/middleware-retry': 3.300.0 + '@aws-sdk/middleware-serde': 3.296.0 + '@aws-sdk/middleware-stack': 3.296.0 + '@aws-sdk/middleware-user-agent': 3.299.0 + '@aws-sdk/node-config-provider': 3.300.0 + '@aws-sdk/node-http-handler': 3.296.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/smithy-client': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/url-parser': 3.296.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.296.0 + '@aws-sdk/util-defaults-mode-node': 3.300.0 + '@aws-sdk/util-endpoints': 3.296.0 + '@aws-sdk/util-retry': 3.296.0 + '@aws-sdk/util-user-agent-browser': 3.299.0 + '@aws-sdk/util-user-agent-node': 3.300.0 + '@aws-sdk/util-utf8': 3.295.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/client-sts@3.294.0: - resolution: {integrity: sha512-AefqwhFjTDzelZuSYhriJbiI+GQwf2yKiKAnCt0gRj6rswewStM63Gtlhfb01sFPp+ZiqPcyQ47LqUaHp1mz/g==} + /@aws-sdk/client-sts@3.301.0: + resolution: {integrity: sha512-OS8wE21Lxd8aT8PMj/dusCUZKXmXaxnSI4RIO3M8w/ZPRMKkBHtzB+JXbzUcpGGxvt9mse8l6w9iLIE6XuHmig==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/config-resolver': 3.292.0 - '@aws-sdk/credential-provider-node': 3.294.0 - '@aws-sdk/fetch-http-handler': 3.292.0 - '@aws-sdk/hash-node': 3.292.0 - '@aws-sdk/invalid-dependency': 3.292.0 - '@aws-sdk/middleware-content-length': 3.292.0 - '@aws-sdk/middleware-endpoint': 3.292.0 - '@aws-sdk/middleware-host-header': 3.292.0 - '@aws-sdk/middleware-logger': 3.292.0 - '@aws-sdk/middleware-recursion-detection': 3.292.0 - '@aws-sdk/middleware-retry': 3.293.0 - '@aws-sdk/middleware-sdk-sts': 3.292.0 - '@aws-sdk/middleware-serde': 3.292.0 - '@aws-sdk/middleware-signing': 3.292.0 - '@aws-sdk/middleware-stack': 3.292.0 - '@aws-sdk/middleware-user-agent': 3.293.0 - '@aws-sdk/node-config-provider': 3.292.0 - '@aws-sdk/node-http-handler': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/smithy-client': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/url-parser': 3.292.0 - '@aws-sdk/util-base64': 3.292.0 - '@aws-sdk/util-body-length-browser': 3.292.0 - '@aws-sdk/util-body-length-node': 3.292.0 - '@aws-sdk/util-defaults-mode-browser': 3.292.0 - '@aws-sdk/util-defaults-mode-node': 3.292.0 - '@aws-sdk/util-endpoints': 3.293.0 - '@aws-sdk/util-retry': 3.292.0 - '@aws-sdk/util-user-agent-browser': 3.292.0 - '@aws-sdk/util-user-agent-node': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/config-resolver': 3.300.0 + '@aws-sdk/credential-provider-node': 3.301.0 + '@aws-sdk/fetch-http-handler': 3.296.0 + '@aws-sdk/hash-node': 3.296.0 + '@aws-sdk/invalid-dependency': 3.296.0 + '@aws-sdk/middleware-content-length': 3.296.0 + '@aws-sdk/middleware-endpoint': 3.299.0 + '@aws-sdk/middleware-host-header': 3.296.0 + '@aws-sdk/middleware-logger': 3.296.0 + '@aws-sdk/middleware-recursion-detection': 3.296.0 + '@aws-sdk/middleware-retry': 3.300.0 + '@aws-sdk/middleware-sdk-sts': 3.299.0 + '@aws-sdk/middleware-serde': 3.296.0 + '@aws-sdk/middleware-signing': 3.299.0 + '@aws-sdk/middleware-stack': 3.296.0 + '@aws-sdk/middleware-user-agent': 3.299.0 + '@aws-sdk/node-config-provider': 3.300.0 + '@aws-sdk/node-http-handler': 3.296.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/smithy-client': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/url-parser': 3.296.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-body-length-browser': 3.295.0 + '@aws-sdk/util-body-length-node': 3.295.0 + '@aws-sdk/util-defaults-mode-browser': 3.296.0 + '@aws-sdk/util-defaults-mode-node': 3.300.0 + '@aws-sdk/util-endpoints': 3.296.0 + '@aws-sdk/util-retry': 3.296.0 + '@aws-sdk/util-user-agent-browser': 3.299.0 + '@aws-sdk/util-user-agent-node': 3.300.0 + '@aws-sdk/util-utf8': 3.295.0 fast-xml-parser: 4.1.2 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/config-resolver@3.292.0: - resolution: {integrity: sha512-cB3twnNR7vYvlt2jvw8VlA1+iv/tVzl+/S39MKqw2tepU+AbJAM0EHwb/dkf1OKSmlrnANXhshx80MHF9zL4mA==} + /@aws-sdk/config-resolver@3.300.0: + resolution: {integrity: sha512-u3YS+XWjoHmH9wh07Lv+HueYZek/wTO8tlGvVzrlACpaS1JrALuCw8UsJUHNDack63xh9v4oMf+7c0kjuqbmtA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/signature-v4': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-config-provider': 3.292.0 - '@aws-sdk/util-middleware': 3.292.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-config-provider': 3.295.0 + '@aws-sdk/util-middleware': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/credential-provider-env@3.292.0: - resolution: {integrity: sha512-YbafSG0ZEKE2969CJWVtUhh3hfOeLPecFVoXOtegCyAJgY5Ghtu4TsVhL4DgiGAgOC30ojAmUVQEXzd7xJF5xA==} + /@aws-sdk/credential-provider-env@3.296.0: + resolution: {integrity: sha512-eDWSU3p04gytkkVXnYn05YzrP5SEaj/DQiafd4y+iBl8IFfF3zM6982rs6qFhvpwrHeSbLqHNfKR1HDWVwfG5g==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/credential-provider-imds@3.292.0: - resolution: {integrity: sha512-W/peOgDSRYulgzFpUhvgi1pCm6piBz6xrVN17N4QOy+3NHBXRVMVzYk6ct2qpLPgJUSEZkcpP+Gds+bBm8ed1A==} + /@aws-sdk/credential-provider-imds@3.300.0: + resolution: {integrity: sha512-l7ZFGlr4TjhS0FIt3XwuAJYNAbQ4eDsovMMUVYLDPti1NxlbQDH85xAyaDWF9dU1Gulrpfzz9Ei7q4GYFFPHnQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/node-config-provider': 3.292.0 - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/url-parser': 3.292.0 + '@aws-sdk/node-config-provider': 3.300.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/url-parser': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/credential-provider-ini@3.294.0: - resolution: {integrity: sha512-pdTPbaAb5bWA+DnuKoL2TpXeNDp6Ejpv/OYt+bw2gdzl9w5r/ZCtUTTbW+Vvejr4WL5s3c1bY96kwdqCn7iLqA==} + /@aws-sdk/credential-provider-ini@3.301.0: + resolution: {integrity: sha512-tAsNH6vQZ7U459FzjStIXoi3HZAsl6y8CMf6364dyisZ0xiCiVHLxziTmSxntcR0560NFFSOY1WS5MrbIIneGQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/credential-provider-env': 3.292.0 - '@aws-sdk/credential-provider-imds': 3.292.0 - '@aws-sdk/credential-provider-process': 3.292.0 - '@aws-sdk/credential-provider-sso': 3.294.0 - '@aws-sdk/credential-provider-web-identity': 3.292.0 - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/shared-ini-file-loader': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/credential-provider-env': 3.296.0 + '@aws-sdk/credential-provider-imds': 3.300.0 + '@aws-sdk/credential-provider-process': 3.300.0 + '@aws-sdk/credential-provider-sso': 3.301.0 + '@aws-sdk/credential-provider-web-identity': 3.296.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/shared-ini-file-loader': 3.300.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/credential-provider-node@3.294.0: - resolution: {integrity: sha512-zUL1Qhb4BsQIZCs/TPpG4oIYH/9YsGiS+Se1tasSGjTOLfBy7jhOZ0QIdpEeyAx/EP8blOBredM9xWfEXgiHVA==} + /@aws-sdk/credential-provider-node@3.301.0: + resolution: {integrity: sha512-WNz7+HoGEkAHaOL1d4D2c/LxYS3zBdqzLs7uYgekoqTSMQhTaIMyJIJgChcklAmV/yM1+2c3lS1NEtCCz3/Vxw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/credential-provider-env': 3.292.0 - '@aws-sdk/credential-provider-imds': 3.292.0 - '@aws-sdk/credential-provider-ini': 3.294.0 - '@aws-sdk/credential-provider-process': 3.292.0 - '@aws-sdk/credential-provider-sso': 3.294.0 - '@aws-sdk/credential-provider-web-identity': 3.292.0 - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/shared-ini-file-loader': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/credential-provider-env': 3.296.0 + '@aws-sdk/credential-provider-imds': 3.300.0 + '@aws-sdk/credential-provider-ini': 3.301.0 + '@aws-sdk/credential-provider-process': 3.300.0 + '@aws-sdk/credential-provider-sso': 3.301.0 + '@aws-sdk/credential-provider-web-identity': 3.296.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/shared-ini-file-loader': 3.300.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/credential-provider-process@3.292.0: - resolution: {integrity: sha512-CFVXuMuUvg/a4tknzRikEDwZBnKlHs1LZCpTXIGjBdUTdosoi4WNzDLzGp93ZRTtcgFz+4wirz2f7P3lC0NrQw==} + /@aws-sdk/credential-provider-process@3.300.0: + resolution: {integrity: sha512-HGBLXupPU2XTvHmlcbSgH/zLyhQ1joLIBAvKvyxyjQTIeFSDOufDqRBY4CzNzPv0yJlvSi3gAfL36CR9dh2R4w==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/shared-ini-file-loader': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/shared-ini-file-loader': 3.300.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/credential-provider-sso@3.294.0: - resolution: {integrity: sha512-UxrcAA/0l7j9+3tolYcG5M61D/IE1Bjd/9H87H1i2A2BrwUUBhW1Dp/vvROEDrrywlMDG3CDF3T/7ADtTak+sg==} + /@aws-sdk/credential-provider-sso@3.301.0: + resolution: {integrity: sha512-5mGoBX5WmZRuL3RIWgdhMbnKYHSmM54qEFjbtRiFXZQ1QSItom1ICBCyIEoNMZQ20+iRxyTgf/fGCJrXhDlIqQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/client-sso': 3.294.0 - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/shared-ini-file-loader': 3.292.0 - '@aws-sdk/token-providers': 3.294.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/client-sso': 3.301.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/shared-ini-file-loader': 3.300.0 + '@aws-sdk/token-providers': 3.301.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/credential-provider-web-identity@3.292.0: - resolution: {integrity: sha512-4DbtIEM9gGVfqYlMdYXg3XY+vBhemjB1zXIequottW8loLYM8Vuz4/uGxxKNze6evVVzowsA0wKrYclE1aj/Rg==} + /@aws-sdk/credential-provider-web-identity@3.296.0: + resolution: {integrity: sha512-Rl6Ohoekxe+pccA55XXQDW5wApbg3rGWr6FkmPRcg7Ld6Vfe+HL8OtfsFf83/0eoFerevbif+00BdknXWT05LA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/eventstream-codec@3.292.0: - resolution: {integrity: sha512-P0np4vhCKf/JH6I39Id8DxZR+UZzG+Br+vOrTinerMfOhzTa2229XmL8pwlMpOoxnJLMPmEDtD1KQqLslBEXtw==} + /@aws-sdk/eventstream-codec@3.296.0: + resolution: {integrity: sha512-BtmUc1f4vmYykfpYwbez+SV9CnnnUlzjsvoBu88dOYJwYh+47+84bY+t8yDOGtPR5+CGeTsXLITVxAAQB+MD8Q==} dependencies: '@aws-crypto/crc32': 3.0.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-hex-encoding': 3.292.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-hex-encoding': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/eventstream-serde-browser@3.292.0: - resolution: {integrity: sha512-VzRbJqqE444GOuoNTxTJ1dC1IhNhA6jfHjgsI8iDRHraaEukGqsPx1vkc+byxrDEjgxKN5IqOwZ4yJWMIAozBA==} + /@aws-sdk/eventstream-serde-browser@3.296.0: + resolution: {integrity: sha512-/8+CK0xlrCPwNj+Y+dOS51n+TJYS9GqWbZbA14tkRJvjEpRWhke69UsON9TA0aW2LsO+Lz+5P9Gjv+1hNqCKGg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/eventstream-serde-universal': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/eventstream-serde-universal': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/eventstream-serde-config-resolver@3.292.0: - resolution: {integrity: sha512-Ndx+qJyWmBCW9FSm68AGLoO4AZ0AaL/wjpJEgFF2sZBWjYe9O9PB9IGR/yuqCBTElf3YtSiFMsloikQaz2ft6g==} + /@aws-sdk/eventstream-serde-config-resolver@3.296.0: + resolution: {integrity: sha512-wJXfJg6z05WcHYWyWtzDKQL8mRYQu8ZCZogLGGu7SZuVBqSVTCLwyPt4JpKkQ6Aw7CqP7LHR77EGCpRHLs2xDQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/eventstream-serde-node@3.292.0: - resolution: {integrity: sha512-NFCEiNCetNye7jQfRd5y/7J9dLg9+uL57698wYeXeadlwJ8Cd/Nhsz+t7RIbP05VqshU+anXARMB1avl9oAijQ==} + /@aws-sdk/eventstream-serde-node@3.299.0: + resolution: {integrity: sha512-xBF1hpxxbsjojrJQLbeqliTNiELvfqQFem13RjvfYMmVN0DzVNzMNg3Ni73NEdiddfYBX3KNWDhiiLD7imkurA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/eventstream-serde-universal': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/eventstream-serde-universal': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/eventstream-serde-universal@3.292.0: - resolution: {integrity: sha512-1gqZNx+S1EUpl3Tq6uIesiDx8gnkpXqPsFfCZT7lSWWXBpnHmnUZAh3jbiO9UlQbYuB9SfT0EBKb1iOY9z4j1Q==} + /@aws-sdk/eventstream-serde-universal@3.296.0: + resolution: {integrity: sha512-TbHDJN79UORGVUKBPfEVMOJHj8yQyb9ru41dw3aFy7KxeGQxWH4OL07cEJyjTTq8mgQXPIdPjav7PTvOIuE59g==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/eventstream-codec': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/eventstream-codec': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/fetch-http-handler@3.292.0: - resolution: {integrity: sha512-zh3bhUJbL8RSa39ZKDcy+AghtUkIP8LwcNlwRIoxMQh3Row4D1s4fCq0KZCx98NJBEXoiTLyTQlZxxI//BOb1Q==} + /@aws-sdk/fetch-http-handler@3.296.0: + resolution: {integrity: sha512-wHuKQ+PGKQkYGVuIGscbcbbASl8yIVOSC+QTrZQ4PNsMDvQd9ey2npsmxZk1Z2ULaxY+qYtZCmByyGc8k51TtQ==} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/querystring-builder': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-base64': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/querystring-builder': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-base64': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/hash-blob-browser@3.292.0: - resolution: {integrity: sha512-4+Fm4IOkxGqgx8dU0EbExCq6xx30y369ZSXz89h9YDQYdJ2Muw7iNCHAg/4VM+gfp0vo9J8zPOTsSju8LNS5Jg==} + /@aws-sdk/hash-blob-browser@3.299.0: + resolution: {integrity: sha512-/Ehpbu40SI964QByz5xjacpQVKGsYO1rz8vVveq9gdtiwMCFnYrVE8G9LMB5oRgOXxP8cvcqHYNjvxWWIeNBnA==} dependencies: - '@aws-sdk/chunked-blob-reader': 3.292.0 - '@aws-sdk/chunked-blob-reader-native': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/chunked-blob-reader': 3.295.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/hash-node@3.292.0: - resolution: {integrity: sha512-1yLxmIsvE+eK36JXEgEIouTITdykQLVhsA5Oai//Lar6Ddgu1sFpLDbdkMtKbrh4I0jLN9RacNCkeVQjZPTCCQ==} + /@aws-sdk/hash-node@3.296.0: + resolution: {integrity: sha512-01Sgxm0NE3rtEznLY8vx1bfNsIeM5Sk5SjY9RXqnvCf9EyaKH9x5FMS/DX/SgDdIYi3aXbTwiwScNVCNBzOIQA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-buffer-from': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-buffer-from': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/hash-stream-node@3.292.0: - resolution: {integrity: sha512-p2nj9A5lZKQU45Q4Od3iZDvpziEpojAyuyAI0HPzpIuJIfzFQ0/7pMBKde1li6wq93rpyFLwNufV6FEZnKCYRg==} + /@aws-sdk/hash-stream-node@3.296.0: + resolution: {integrity: sha512-EO3nNQiTq5/AQj55E9T10RC7QRnExCIYsvTiKzQPfJEdKiTy8Xga6oQEAGttRABBlP0wTjG4HVnHEEFZ6HbcoQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-utf8': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/invalid-dependency@3.292.0: - resolution: {integrity: sha512-39OUV78CD3TmEbjhpt+V+Fk4wAGWhixqHxDSN8+4WL0uB4Fl7k5m3Z9hNY78AttHQSl2twR7WtLztnXPAFsriw==} + /@aws-sdk/invalid-dependency@3.296.0: + resolution: {integrity: sha512-dmy4fUds0woHGjxwziaSYCLtb/SOfoEeQjW0GFvHj+YGFyY5hJzna4C759Tt8X5obh1evUXlQcH+FL7TS+7tRQ==} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/is-array-buffer@3.292.0: - resolution: {integrity: sha512-kW/G5T/fzI0sJH5foZG6XJiNCevXqKLxV50qIT4B1pMuw7regd4ALIy0HwSqj1nnn9mSbRWBfmby0jWCJsMcwg==} + /@aws-sdk/is-array-buffer@3.295.0: + resolution: {integrity: sha512-SCIt10cr5dud7hvwveU4wkLjvkGssJ3GrcbHCds2NwI+JHmpcaaNYLAqi305JAuT29T36U5ssTFDSmrrEOcfag==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/lib-storage@3.294.0(@aws-sdk/abort-controller@3.292.0)(@aws-sdk/client-s3@3.294.0): - resolution: {integrity: sha512-5H/1EgGDIt8Ls/YOepfkyyBwkyQ9d668/gmnWGWRvytar+cVMHu/D5G88831luPrlzyZ+jR+Te7Nc2oqYqamTw==} + /@aws-sdk/lib-storage@3.301.0(@aws-sdk/abort-controller@3.296.0)(@aws-sdk/client-s3@3.301.0): + resolution: {integrity: sha512-pIms1o+cBY5BUu5XVI/hhoP5+uzYKzYAi7tP96+Erfn9HsNSYXpnyGG2EcempbDNCX72DMzCQx/oPaYVNbzASQ==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/abort-controller': ^3.0.0 '@aws-sdk/client-s3': ^3.0.0 dependencies: - '@aws-sdk/abort-controller': 3.292.0 - '@aws-sdk/client-s3': 3.294.0 - '@aws-sdk/middleware-endpoint': 3.292.0 - '@aws-sdk/smithy-client': 3.292.0 + '@aws-sdk/abort-controller': 3.296.0 + '@aws-sdk/client-s3': 3.301.0 + '@aws-sdk/middleware-endpoint': 3.299.0 + '@aws-sdk/smithy-client': 3.296.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: 2.5.0 dev: false - /@aws-sdk/md5-js@3.292.0: - resolution: {integrity: sha512-ngfsKLgQenXW3EbsDf47PVNys1SecTbsq6k88h7+Aa8BU49+9ZOIz4VDpWuPiNyYpeV7jJdl1dfD+ujOYvvgNw==} + /@aws-sdk/md5-js@3.296.0: + resolution: {integrity: sha512-TvDafbHFcplnf0QqRlkjZ/Dz+dLWBmzBEclRk+h34r4XaIWxvmQ9EtQRo6+6sfAVRtAj2l+i1fm9EjwPMVkb9A==} dependencies: - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-utf8': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-bucket-endpoint@3.292.0: - resolution: {integrity: sha512-XRy9RSUIRcbxYfH504ywhQllgfdf3wVhk2k0mMPYnUbeEhAFe1/eUog2v/bi07/q5TQ4Hppi+W3nHCVualQEow==} + /@aws-sdk/middleware-bucket-endpoint@3.300.0: + resolution: {integrity: sha512-i4CM71ajZIeTaZ2Oo2Y7ah8XjSOiEU/SB3X5psp/Ig4YZPkQpFyTjuIy5PdIlKr7pXn/sd2cud9Uezlcx+J5Cw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-arn-parser': 3.292.0 - '@aws-sdk/util-config-provider': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-arn-parser': 3.295.0 + '@aws-sdk/util-config-provider': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-content-length@3.292.0: - resolution: {integrity: sha512-2gMWzQus5mj14menolpPDbYBeaOYcj7KNFZOjTjjI3iQ0KqyetG6XasirNrcJ/8QX1BRmpTol8Xjp2Ue3Gbzwg==} + /@aws-sdk/middleware-content-length@3.296.0: + resolution: {integrity: sha512-e7lJm3kkC2pWZdIw23gpMUk1GrpRTBRqhdFfVwyduXw6Wo4nBYv8Z5MOYy3/SlpjE1BDCaPBoZ3O19cO3arHxg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-endpoint@3.292.0: - resolution: {integrity: sha512-cPMkiSxpZGG6tYlW4OS+ucS6r43f9ddX9kcUoemJCY10MOuogdPjulCAjE0HTs2PLKSOrrG4CTP4Q4wWDrH4Bw==} + /@aws-sdk/middleware-endpoint@3.299.0: + resolution: {integrity: sha512-37BGxHem6yKjSC6zG2xPjvjE7APIDIvwkxL+/K1Jz9+T6AZITcs7tx5y6mIfvaHsdPuCKjrl7Wzg/9jgUKuLkw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/middleware-serde': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/signature-v4': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/url-parser': 3.292.0 - '@aws-sdk/util-config-provider': 3.292.0 - '@aws-sdk/util-middleware': 3.292.0 + '@aws-sdk/middleware-serde': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/url-parser': 3.296.0 + '@aws-sdk/util-middleware': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-expect-continue@3.292.0: - resolution: {integrity: sha512-bZ2bsBud3E6BebZWGxVcWxBSg09bP0KyX8PT0jI66JM0yTbZSJhoGhlKAqfNG46R9h4K5tCYB2uYgV/3oU/ZpQ==} + /@aws-sdk/middleware-expect-continue@3.296.0: + resolution: {integrity: sha512-aVCv9CdAVWt9AlZKQZRweIywkAszRrZUCo8K5bBUJNdD4061DoDqLK/6jmqXmObas0j1wQr/eNzjYbv99MZBCg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-flexible-checksums@3.292.0: - resolution: {integrity: sha512-AxU/Gb+TRdl/0jHmbreYh3QnB0jR25zgjPZ4/JbGBJ2SQI9jm3LCNK9XOrPUmZp/vu9wsvyxtmKQidpQ5+FX5w==} + /@aws-sdk/middleware-flexible-checksums@3.296.0: + resolution: {integrity: sha512-F5wVMhLIgA86PKsK/Az7LGIiNVDdZjoSn0+boe6fYW/AIAmgJhPf//500Md0GsKsLOCcPcxiQC43a0hVT2zbew==} engines: {node: '>=14.0.0'} dependencies: '@aws-crypto/crc32': 3.0.0 '@aws-crypto/crc32c': 3.0.0 - '@aws-sdk/is-array-buffer': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/is-array-buffer': 3.295.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-utf8': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-host-header@3.292.0: - resolution: {integrity: sha512-mHuCWe3Yg2S5YZ7mB7sKU6C97XspfqrimWjMW9pfV2usAvLA3R0HrB03jpR5vpZ3P4q7HB6wK3S6CjYMGGRNag==} + /@aws-sdk/middleware-host-header@3.296.0: + resolution: {integrity: sha512-V47dFtfkX5lXWv9GDp71gZVCRws4fEdQ9QF9BQ/2UMSNrYjQLg6mFe7NibH+IJoNOid2FIwWIl94Eos636VGYQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-location-constraint@3.292.0: - resolution: {integrity: sha512-WTbMyoCckdkmq7Yok0gI4226gTmxP/zM1fbFiC+liZXBJ+H5EvIFmu30tWbX+4m41LL/XQVm65olXJFwhoExGQ==} + /@aws-sdk/middleware-location-constraint@3.296.0: + resolution: {integrity: sha512-KHkWaIrZOtJmV1/WO9KOf7kSK41ngfqts3YIun956NYglKTDKyrBIOPCgmXTT/03odnYsKVT/UfbEIh/v4RxGA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-logger@3.292.0: - resolution: {integrity: sha512-yZNY1XYmG3NG+uonET7jzKXNiwu61xm/ZZ6i/l51SusuaYN+qQtTAhOFsieQqTehF9kP4FzbsWgPDwD8ZZX9lw==} + /@aws-sdk/middleware-logger@3.296.0: + resolution: {integrity: sha512-LzfEEFyBR9LXdWwLdtBrmi1vLdzgdJNntEgzqktVF8LwaCyY+9xIE6TGu/2V+9fJHAwECxjOC1eQbNQdAZ0Tmw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-recursion-detection@3.292.0: - resolution: {integrity: sha512-kA3VZpPko0Zqd7CYPTKAxhjEv0HJqFu2054L04dde1JLr43ro+2MTdX7vsHzeAFUVRphqatFFofCumvXmU6Mig==} + /@aws-sdk/middleware-recursion-detection@3.296.0: + resolution: {integrity: sha512-UG7TLDPz9ImQG0uVklHTxE9Us7rTImwN+6el6qZCpoTBuGeXgOkfb0/p8izJyFgY/hMUR4cZqs7IdCDUkxQF3w==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-retry@3.293.0: - resolution: {integrity: sha512-7tiaz2GzRecNHaZ6YnF+Nrtk3au8qF6oiipf11R7MJiqJ0fkMLnz/iRrlakDziS9qF/a9v+3yxb4W4NHK3f4Tw==} + /@aws-sdk/middleware-retry@3.300.0: + resolution: {integrity: sha512-c3tj0Uc64mqnsosAjRBQbit0EUOd0OKrqC5eDB3YCJyLWQSlYRBk4ZBBbN2qTfo3ZCDP+tHgWxRduQlV6Knezg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/service-error-classification': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-middleware': 3.292.0 - '@aws-sdk/util-retry': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/service-error-classification': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-middleware': 3.296.0 + '@aws-sdk/util-retry': 3.296.0 tslib: 2.5.0 uuid: 8.3.2 dev: false - /@aws-sdk/middleware-sdk-s3@3.292.0: - resolution: {integrity: sha512-kEUmh3ZM34H+2bEQfpZhVotJCNYpSbq9Q4YxlWVbnjiO/VS+S9BFEM3Fcj5+EzEgI02tNNi6/qTXj3iS8tT6hA==} + /@aws-sdk/middleware-sdk-s3@3.296.0: + resolution: {integrity: sha512-zH4uZKEqumo01wn+dTwrYnvOui9GjDiuBHdECnSjnA0Mkxo/tfMPYzYD7mE8kUlBz7HfQcXeXlyaApj9fPkxvg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-arn-parser': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-arn-parser': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-sdk-sts@3.292.0: - resolution: {integrity: sha512-GN5ZHEqXZqDi+HkVbaXRX9HaW/vA5rikYpWKYsmxTUZ7fB7ijvEO3co3lleJv2C+iGYRtUIHC4wYNB5xgoTCxg==} + /@aws-sdk/middleware-sdk-sts@3.299.0: + resolution: {integrity: sha512-yE7IiMQpF1FYqLSYOei4AYM9z62ayFfMMyhKE9IFs+TVaag97uz8NaRlr88HDTcBCZ0CMl6UwNJlZytPD4NjCw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/middleware-signing': 3.292.0 - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/signature-v4': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/middleware-signing': 3.299.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-serde@3.292.0: - resolution: {integrity: sha512-6hN9mTQwSvV8EcGvtXbS/MpK7WMCokUku5Wu7X24UwCNMVkoRHLIkYcxHcvBTwttuOU0d8hph1/lIX4dkLwkQw==} + /@aws-sdk/middleware-serde@3.296.0: + resolution: {integrity: sha512-xk2PpWAAX758oUTGkGBAncpOr7ddIXisjD2Y2r9DDXuE4JMho2x6zcrVSiYsGIQ6MHZ9XNJKBVDiK9PA4iQWGQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-signing@3.292.0: - resolution: {integrity: sha512-GVfoSjDjEQ4TaO6x9MffyP3uRV+2KcS5FtexLCYOM9pJcnE9tqq9FJOrZ1xl1g+YjUVKxo4x8lu3tpEtIb17qg==} + /@aws-sdk/middleware-signing@3.299.0: + resolution: {integrity: sha512-anhrjeNuo0470QodEmzteFMnqABNebL900yhfODySXCMiaoeTBpo8Qd8t4q4O8PizA7FeLYA3l/5tb/udp7qew==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/signature-v4': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-middleware': 3.292.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/signature-v4': 3.299.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-middleware': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-ssec@3.292.0: - resolution: {integrity: sha512-VfwrTEs9nYU6sCnt/cffhnJ2djGkMyMbBEysMZm2HEbFMloGKBd0Wtvk9y+SWPa6+DDRe2CqqX8jMzrO4JT4Eg==} + /@aws-sdk/middleware-ssec@3.296.0: + resolution: {integrity: sha512-vcSyXxEXAC9rWzUd7rq2/JxPdt87DKiA+wfiBrpGvFV+bacocIV0TFcpJncgZqMOoP8b6Osd+mW4BjlkwBamtA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/middleware-stack@3.292.0: - resolution: {integrity: sha512-WdQpRkuMysrEwrkByCM1qCn2PPpFGGQ2iXqaFha5RzCdZDlxJni9cVNb6HzWUcgjLEYVTXCmOR9Wxm3CNW44Qg==} + /@aws-sdk/middleware-stack@3.296.0: + resolution: {integrity: sha512-Rgo7/mdk9tt4qa9+pzG3AoGNhuj7NmnF5H+3DoPm75h58BYP8hKbKobdPGgI2rZLPtO3PGgmyw/4K4tQJPIZ8g==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/middleware-user-agent@3.293.0: - resolution: {integrity: sha512-gZ7/e6XwpKk9mvgA78q4Ffc796jTn02TUKx2qMDnkLVbeJXBNN2jnvYEKq8v70+o7fd/ALRudg8gBDmkkhM/Hw==} + /@aws-sdk/middleware-user-agent@3.299.0: + resolution: {integrity: sha512-Brm5UcbRhuVVmmbpDN8/WSJPCHogV64jGXL5upfL+iJ0c5eZ57LXOZ8kz++t3BU1rEkSIXHJanneEmn7Wbd5sA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-endpoints': 3.293.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-endpoints': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/node-config-provider@3.292.0: - resolution: {integrity: sha512-S3NnC9dQ5GIbJYSDIldZb4zdpCOEua1tM7bjYL3VS5uqCEM93kIi/o/UkIUveMp/eqTS2LJa5HjNIz5Te6je0A==} + /@aws-sdk/node-config-provider@3.300.0: + resolution: {integrity: sha512-60XJV+eW1FyyRNT75kAGdqDHLpWWqnZeCrEyufqQ3BXhhbD1l6oHy5W573DccEO84/0gQYlNbKL8hd8+iB59vA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/shared-ini-file-loader': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/shared-ini-file-loader': 3.300.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/node-http-handler@3.292.0: - resolution: {integrity: sha512-L/E3UDSwXLXjt1XWWh0RBD55F+aZI1AEdPwdES9i1PjnZLyuxuDhEDptVibNN56+I9/4Q3SbmuVRVlOD0uzBag==} + /@aws-sdk/node-http-handler@3.296.0: + resolution: {integrity: sha512-D15jjPqYSNhEq58BwkmIpD3VwqG4bL5acAaNu5wWAI4S4236JlG+nmpi3gEeE25z1KCwtBl7G30fVRgXYJ2CWA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/abort-controller': 3.292.0 - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/querystring-builder': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/abort-controller': 3.296.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/querystring-builder': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/property-provider@3.292.0: - resolution: {integrity: sha512-dHArSvsiqhno/g55N815gXmAMrmN8DP7OeFNqJ4wJG42xsF2PFN3DAsjIuHuXMwu+7A3R1LHqIpvv0hA9KeoJQ==} + /@aws-sdk/property-provider@3.296.0: + resolution: {integrity: sha512-kjczxE9Od5LoAKQOmxVWISJ9oPG3aCsB+2+NdI+k9EJFDXUUdMcVV3Skei5uHGgKLMsI6CZy8ezZx6YxOSLSew==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/protocol-http@3.292.0: - resolution: {integrity: sha512-NLi4fq3k41aXIh1I97yX0JTy+3p6aW1NdwFwdMa674z86QNfb4SfRQRZBQe9wEnAZ/eWHVnlKIuII+U1URk/Kg==} + /@aws-sdk/protocol-http@3.296.0: + resolution: {integrity: sha512-0U1Z/+tpwdRiSToWo1bpdkbTzjbLugTnd02ATjvK4B7zi363SUGlKfoWgV+v7FU/22CIUI1ZIe7XzXvq5rJfjA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/querystring-builder@3.292.0: - resolution: {integrity: sha512-XElIFJaReIm24eEvBtV2dOtZvcm3gXsGu/ftG8MLJKbKXFKpAP1q+K6En0Bs7/T88voKghKdKpKT+eZUWgTqlg==} + /@aws-sdk/querystring-builder@3.296.0: + resolution: {integrity: sha512-+ZrZdTRaVI1R1xKQNrTwuiRoPateUaJ/DNw/myJpTPt+ZRg0H7LKBGaJYwL4pl5l/z1UM/E1fOttSfSW7GHxfw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-uri-escape': 3.292.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-uri-escape': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/querystring-parser@3.292.0: - resolution: {integrity: sha512-iTYpYo7a8X9RxiPbjjewIpm6XQPx2EOcF1dWCPRII9EFlmZ4bwnX+PDI36fIo9oVs8TIKXmwNGODU9nsg7CSAw==} + /@aws-sdk/querystring-parser@3.296.0: + resolution: {integrity: sha512-nLNZKVQfK42euv7101cE5qfg17YCtGcfccx3B5XSAzvyTROR46kwYqbEvYSsWisbZoRhbQc905gB/5E0U5HDIw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/service-error-classification@3.292.0: - resolution: {integrity: sha512-X1k3sixCeC45XSNHBe+kRBQBwPDyTFtFITb8O5Qw4dS9XWGhrUJT4CX0qE5aj8qP3F9U5nRizs9c2mBVVP0Caw==} + /@aws-sdk/service-error-classification@3.296.0: + resolution: {integrity: sha512-YIsWSQ38e1+FqXz3CMrkKS0JD8OLlHf6I72PJhbfegePpQQFqi9R8OREjP5V7UR9Z972yruv4i96ROH6SCtmoA==} engines: {node: '>=14.0.0'} dev: false - /@aws-sdk/shared-ini-file-loader@3.292.0: - resolution: {integrity: sha512-Av2TTYg1Jig2kbkD56ybiqZJB6vVrYjv1W5UQwY/q3nA/T2mcrgQ20ByCOt5Bv9VvY7FSgC+znj+L4a7RLGmBg==} + /@aws-sdk/shared-ini-file-loader@3.300.0: + resolution: {integrity: sha512-xA+V08AMsb1EcNJ2UF896T4I3f6Q/H56Z3gTwcXyFXsCY3lYkEB2MEdST+x4+20emELkYjtu5SNsGgUCBehR7g==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/signature-v4-multi-region@3.292.0: - resolution: {integrity: sha512-MjWEIjbAr7n9vsFeLpoRzNSYFgWOROf1mLj6Db8TfRowaortUBO7PbleLV4n3SPujSnxhaVBzlmnCY2AjatH9g==} + /@aws-sdk/signature-v4-multi-region@3.299.0: + resolution: {integrity: sha512-AiS1JAVzfvaB6xqke/6dFU+jchk98tZ0RDGn4IoWw1iGf19uEEWj2hMfJeFjdtYSwLRDQmB0CO5bdZ2mzZBQtw==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/signature-v4-crt': ^3.118.0 @@ -1730,138 +1773,137 @@ packages: '@aws-sdk/signature-v4-crt': optional: true dependencies: - '@aws-sdk/protocol-http': 3.292.0 - '@aws-sdk/signature-v4': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-arn-parser': 3.292.0 + '@aws-sdk/protocol-http': 3.296.0 + '@aws-sdk/signature-v4': 3.299.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/signature-v4@3.292.0: - resolution: {integrity: sha512-+rw47VY5mvBecn13tDQTl1ipGWg5tE63faWgmZe68HoBL87ZiDzsd7bUKOvjfW21iMgWlwAppkaNNQayYRb2zg==} + /@aws-sdk/signature-v4@3.299.0: + resolution: {integrity: sha512-3TtP+S3Tu0Q2/EwJLnN+IEok9nRyez79f6vprqXbC9Lex623cqh/OOYSy2oUjFlIgsIOLPum87/1bfcznYW+yQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/is-array-buffer': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-hex-encoding': 3.292.0 - '@aws-sdk/util-middleware': 3.292.0 - '@aws-sdk/util-uri-escape': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/is-array-buffer': 3.295.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-hex-encoding': 3.295.0 + '@aws-sdk/util-middleware': 3.296.0 + '@aws-sdk/util-uri-escape': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/smithy-client@3.292.0: - resolution: {integrity: sha512-S8PKzjPkZ6SXYZuZiU787dMsvQ0d/LFEhw2OI4Oe2An9Fc2IwJ2FYukyHoQJOV2tV0DiuMebPo7eMyQyjKElvA==} + /@aws-sdk/smithy-client@3.296.0: + resolution: {integrity: sha512-HEpsLNozGe9XOWouq5A1TFw5KhFodi8tZqYVNEbSpLoRR+EQKf6OCRvKIRkOn7FnnaOasOR1n7S0D51UG6/irw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/middleware-stack': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/middleware-stack': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/token-providers@3.294.0: - resolution: {integrity: sha512-6nwO04LtC5f4AsUvGZXyjaswuEK4Rr2VsuANpMKrPCgunRfI58a8YXLniudOSXN6e7CFJ6M3uo/h5YXqtnzGug==} + /@aws-sdk/token-providers@3.301.0: + resolution: {integrity: sha512-TgchzkIOLGMhL3dFKGHyztZ4/HOM/WvJC0bRxvrWTs+iDHRaaKNpzW1RzCVCtbH8F/B9h5qPdRFJ6jTHtCKf4A==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/client-sso-oidc': 3.294.0 - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/shared-ini-file-loader': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/client-sso-oidc': 3.301.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/shared-ini-file-loader': 3.300.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 transitivePeerDependencies: - aws-crt dev: false - /@aws-sdk/types@3.292.0: - resolution: {integrity: sha512-1teYAY2M73UXZxMAxqZxVS2qwXjQh0OWtt7qyLfha0TtIk/fZ1hRwFgxbDCHUFcdNBSOSbKH/ESor90KROXLCQ==} + /@aws-sdk/types@3.296.0: + resolution: {integrity: sha512-s0wIac64rrMEo2ioUxP9IarGiiCGmelCspNcoNTPSjGl25QqjhyfQqTeGgS58qJ4fHoQb07qra39930xp1IzJg==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/url-parser@3.292.0: - resolution: {integrity: sha512-NZeAuZCk1x6TIiWuRfbOU6wHPBhf0ly2qOHzWut4BCH+b4RrDmFF8EmXcH1auEfGhE7yRyR6XqIN0t3S+hYACA==} + /@aws-sdk/url-parser@3.296.0: + resolution: {integrity: sha512-nBgeGF+ziuDSLz+y8UAl6zL2tXxDwh3wqeXFe9ZcR4YW71BWuh+vEqEsaEMutOrfnJacCrYKTs9TkIOW41cEGg==} dependencies: - '@aws-sdk/querystring-parser': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/querystring-parser': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-arn-parser@3.292.0: - resolution: {integrity: sha512-xfE4U94TfjMC2WNNDte/kDByf16GrQKaS0BKsm+Fk/PaeHUofEp8suOEz/EVdEoa3Ayy2Uc5QdhrGnlqf8MxeA==} + /@aws-sdk/util-arn-parser@3.295.0: + resolution: {integrity: sha512-kSSVymcbjyQQHvCZaTt1teKKW4MSSMPRdPNxSNO1aLsVwxrWdnAggDrpHwFjvPCRUcKtpThepATOz75PfUm9Bg==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/util-base64@3.292.0: - resolution: {integrity: sha512-zjNCwNdy617yFvEjZorepNWXB2sQCVfsShCwFy/kIQ5iW5tT2jQKaqc0K77diU9atkooxw9p1W9m9sOgrkOFNw==} + /@aws-sdk/util-base64@3.295.0: + resolution: {integrity: sha512-z1r40BsBiOTALnzASvLb4qutGwPpL+jH2UKTCV5WJLXZFMzRnpZaRfeZGE8lMJ/i0+jv9H9G1FmVzE8UgB4rhw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/util-buffer-from': 3.292.0 + '@aws-sdk/util-buffer-from': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-body-length-browser@3.292.0: - resolution: {integrity: sha512-Wd/BM+JsMiKvKs/bN3z6TredVEHh2pKudGfg3CSjTRpqFpOG903KDfyHBD42yg5PuCHoHoewJvTPKwgn7/vhaw==} + /@aws-sdk/util-body-length-browser@3.295.0: + resolution: {integrity: sha512-NbG4/RSHV1VueStPRclSo5zRjNUmcDlNAs29sniZF+YaN0+Ad7hEdu/YgJw39shBfUaurz2Wv0pufU3cxE5Tng==} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/util-body-length-node@3.292.0: - resolution: {integrity: sha512-BBgipZ2P6RhogWE/qj0oqpdlyd3iSBYmb+aD/TBXwB2lA/X8A99GxweBd/kp06AmcJRoMS9WIXgbWkiiBlRlSA==} + /@aws-sdk/util-body-length-node@3.295.0: + resolution: {integrity: sha512-dvGf8VBmrT66lM0n6P/h7wnlHS4Atafyivyl8f4TUCMvRdpqryvvrtnX6yYcq3T7VKQmas/2SOlgDvcrhGXaiw==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/util-buffer-from@3.292.0: - resolution: {integrity: sha512-RxNZjLoXNxHconH9TYsk5RaEBjSgTtozHeyIdacaHPj5vlQKi4hgL2hIfKeeNiAfQEVjaUFF29lv81xpNMzVMQ==} + /@aws-sdk/util-buffer-from@3.295.0: + resolution: {integrity: sha512-5ezVEITQnrQKn+CU9qfZHgRp2nrrbX0Clmlm9aiNjAEQEPHY33tWl0t6n8h8yU+IpGiNRMWBVC4aSJaE5NA1mA==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/is-array-buffer': 3.292.0 + '@aws-sdk/is-array-buffer': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-config-provider@3.292.0: - resolution: {integrity: sha512-t3noYll6bPRSxeeNNEkC5czVjAiTPcsq00OwfJ2xyUqmquhLEfLwoJKmrT1uP7DjIEXdUtfoIQ2jWiIVm/oO5A==} + /@aws-sdk/util-config-provider@3.295.0: + resolution: {integrity: sha512-/5Dl1aV2yI8YQjqwmg4RTnl/E9NmNsx7HIwBZt+dTcOrM0LMUwczQBFFcLyqCj/qv5y+VsvLoAAA/OiBT7hb3w==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/util-defaults-mode-browser@3.292.0: - resolution: {integrity: sha512-7+zVUlMGfa8/KT++9humHo6IDxTnxMCmWUj5jVNlkpk6h7Ecmppf7aXotviyVIA43lhtz0p2AErs0N0ekEUK+w==} + /@aws-sdk/util-defaults-mode-browser@3.296.0: + resolution: {integrity: sha512-R+nzc0PuTMaOG3LV4FoS5W7oMAqqr8G1IyI+A4Q5iem6YDMF157qV5h6wpIt3A8n9YfjyssLsAT/WPfyv/M79w==} engines: {node: '>= 10.0.0'} dependencies: - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/types': 3.296.0 bowser: 2.11.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-defaults-mode-node@3.292.0: - resolution: {integrity: sha512-SSIw85eF4BVs0fOJRyshT+R3b/UmBPhiVKCUZm2rq6+lIGkDPiSwQU3d/80AhXtiL5SFT/IzAKKgQd8qMa7q3A==} + /@aws-sdk/util-defaults-mode-node@3.300.0: + resolution: {integrity: sha512-a8tZsgkMBhnBlADyhDXMglFh6vkX6zXcJ4pnE9D3JrLDL0Fl50/Zk8FbePilEF2Dv7XRIOe4K70OZnNeeELJcg==} engines: {node: '>= 10.0.0'} dependencies: - '@aws-sdk/config-resolver': 3.292.0 - '@aws-sdk/credential-provider-imds': 3.292.0 - '@aws-sdk/node-config-provider': 3.292.0 - '@aws-sdk/property-provider': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/config-resolver': 3.300.0 + '@aws-sdk/credential-provider-imds': 3.300.0 + '@aws-sdk/node-config-provider': 3.300.0 + '@aws-sdk/property-provider': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-endpoints@3.293.0: - resolution: {integrity: sha512-R/99aNV49Refpv5guiUjEUrZYlvnfaNBniB+/ZtMO3ixxUopapssCrUivuJrmhccmrYaTCZw7dRzIWjU1jJhKg==} + /@aws-sdk/util-endpoints@3.296.0: + resolution: {integrity: sha512-YraGGLJepXM6HCTaqEGTFf8RFRBdJ0C6uG5k0kVhiXmYxBkeupn8J07CVp9jfWqcPYWElAnMGVEZKU1OjRo4HQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-hex-encoding@3.292.0: - resolution: {integrity: sha512-qBd5KFIUywQ3qSSbj814S2srk0vfv8A6QMI+Obs1y2LHZFdQN5zViptI4UhXhKOHe+NnrHWxSuLC/LMH6q3SmA==} + /@aws-sdk/util-hex-encoding@3.295.0: + resolution: {integrity: sha512-XJcoVo41kHzhe28PBm/rqt5mdCp8R6abwiW9ug1dA6FOoPUO8kBUxDv6xaOmA2hfRvd2ocFfBXaUCBqUowkGcQ==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 @@ -1874,59 +1916,59 @@ packages: tslib: 2.5.0 dev: false - /@aws-sdk/util-middleware@3.292.0: - resolution: {integrity: sha512-KjhS7flfoBKDxbiBZjLjMvEizXgjfQb7GQEItgzGoI9rfGCmZtvqCcqQQoIlxb8bIzGRggAUHtBGWnlLbpb+GQ==} + /@aws-sdk/util-middleware@3.296.0: + resolution: {integrity: sha512-MNWU+doVuX+mIehEManP6OP+f08T33qQpHoBqKIeKpn3TjZjMHG7ujACTkJiEOHUrnwTov7h0Sm+3OZwk3kh9w==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/util-retry@3.292.0: - resolution: {integrity: sha512-JEHyF7MpVeRF5uR4LDYgpOKcFpOPiAj8TqN46SVOQQcL1K+V7cSr7O7N7J6MwJaN9XOzAcBadeIupMm7/BFbgw==} + /@aws-sdk/util-retry@3.296.0: + resolution: {integrity: sha512-0mh7SqOMjuJ4vE423SzA/AfCLM68jykbfpEBkTmfqkpjkeQSW+UXHAUdXsMmfzIneiq7go5Z548F868C3cZnwQ==} engines: {node: '>= 14.0.0'} dependencies: - '@aws-sdk/service-error-classification': 3.292.0 + '@aws-sdk/service-error-classification': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-stream-browser@3.292.0: - resolution: {integrity: sha512-yzwpjq18oefyp/Sv+Z0VWh7ziRPp+qM0pDUrTfuAnXg+mrlxaPDXJOhp5LoY8AVHcDPOEdIbzz0b00G48FabIg==} + /@aws-sdk/util-stream-browser@3.296.0: + resolution: {integrity: sha512-6L72tvxIImTDtZ0ckUfpPA2cGE2XhawNsjdngWySkwYev5Unqm/ywmfZm1wa52/4bmJwX35hcGPFQ8qgrPVeNQ==} dependencies: - '@aws-sdk/fetch-http-handler': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-base64': 3.292.0 - '@aws-sdk/util-hex-encoding': 3.292.0 - '@aws-sdk/util-utf8': 3.292.0 + '@aws-sdk/fetch-http-handler': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-base64': 3.295.0 + '@aws-sdk/util-hex-encoding': 3.295.0 + '@aws-sdk/util-utf8': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-stream-node@3.292.0: - resolution: {integrity: sha512-p3DHXvWo4Zdka75HwewUnWjpFp/gOT4SYYEOAsv3BwuZGxfmnojK9OVCkUBJ7s6LeHMKTgGqQPwAnVFu7iIZNg==} + /@aws-sdk/util-stream-node@3.296.0: + resolution: {integrity: sha512-Gva28bJVlkR10Wy1IGB9ZaQo6wCP8tDacrxwSWP/cPBegFf8yUX53LUqIWxI6Fo4GcSI/+Blri51Sni7oldYhg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/node-http-handler': 3.292.0 - '@aws-sdk/types': 3.292.0 - '@aws-sdk/util-buffer-from': 3.292.0 + '@aws-sdk/node-http-handler': 3.296.0 + '@aws-sdk/types': 3.296.0 + '@aws-sdk/util-buffer-from': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-uri-escape@3.292.0: - resolution: {integrity: sha512-hOQtUMQ4VcQ9iwKz50AoCp1XBD5gJ9nly/gJZccAM7zSA5mOO8RRKkbdonqquVHxrO0CnYgiFeCh3V35GFecUw==} + /@aws-sdk/util-uri-escape@3.295.0: + resolution: {integrity: sha512-1H5DcyIoXF8XcPBWf7wzHt0l+TW2EoR8Oq4gsVrPTQkHMTVclC2Yn8EF3gc4arwVBzwLulI9LMBE2L8fexGfTQ==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 dev: false - /@aws-sdk/util-user-agent-browser@3.292.0: - resolution: {integrity: sha512-dld+lpC3QdmTQHdBWJ0WFDkXDSrJgfz03q6mQ8+7H+BC12ZhT0I0g9iuvUjolqy7QR00OxOy47Y9FVhq8EC0Gg==} + /@aws-sdk/util-user-agent-browser@3.299.0: + resolution: {integrity: sha512-TRPAemTDzqxCxbpVkXV+Sp9JbEo0JdT/W8qzP/uuOdglZlNXM+SadkOuNFmqr2KG83bJE6lvomGJcJb9vMN4XQ==} dependencies: - '@aws-sdk/types': 3.292.0 + '@aws-sdk/types': 3.296.0 bowser: 2.11.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-user-agent-node@3.292.0: - resolution: {integrity: sha512-f+NfIMal5E61MDc5WGhUEoicr7b1eNNhA+GgVdSB/Hg5fYhEZvFK9RZizH5rrtsLjjgcr9nPYSR7/nDKCJLumw==} + /@aws-sdk/util-user-agent-node@3.300.0: + resolution: {integrity: sha512-lBx4HxyTxxQiqGcmvOK4p09XC2YxmH6ANQXdXdiT28qM3OJjf5WLyl4FfdH7grDSryTFdF06FRFtJDFSuSWYrw==} engines: {node: '>=14.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1934,8 +1976,8 @@ packages: aws-crt: optional: true dependencies: - '@aws-sdk/node-config-provider': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/node-config-provider': 3.300.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false @@ -1945,25 +1987,25 @@ packages: tslib: 2.5.0 dev: false - /@aws-sdk/util-utf8@3.292.0: - resolution: {integrity: sha512-FPkj+Z59/DQWvoVu2wFaRncc3KVwe/pgK3MfVb0Lx+Ibey5KUx+sNpJmYcVYHUAe/Nv/JeIpOtYuC96IXOnI6w==} + /@aws-sdk/util-utf8@3.295.0: + resolution: {integrity: sha512-ITN8v3F63ZkA4sdmCtSbS/mhav4F0MEAiXDAUXtMJLNqVtaVcyQST4i9vNmPpIVthAPAtP0QjyF2tq/Di8bxtQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/util-buffer-from': 3.292.0 + '@aws-sdk/util-buffer-from': 3.295.0 tslib: 2.5.0 dev: false - /@aws-sdk/util-waiter@3.292.0: - resolution: {integrity: sha512-+7j+mcWUY4GwU8nTK4MvLWpOzS34SJZL85qLxQ04pysoCSHkInyS51D1ejBVNlJdbUSFvIcU0WHU0y6MDDeJzg==} + /@aws-sdk/util-waiter@3.296.0: + resolution: {integrity: sha512-L57uIC74VyTjAdCH0wQqtvJtwK4+gIT/51K/BJHEqVg6C1pOwgrdT6dHC3q8b+gdOrZ6Ff/vTEfh7FZmVcPPjg==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/abort-controller': 3.292.0 - '@aws-sdk/types': 3.292.0 + '@aws-sdk/abort-controller': 3.296.0 + '@aws-sdk/types': 3.296.0 tslib: 2.5.0 dev: false - /@aws-sdk/xml-builder@3.292.0: - resolution: {integrity: sha512-0zgnhdwUy30q/1NPXi5ekdzHQqCs3ZJaUeGbvYMO54osi4K5hygAyTsyWtv6oaJggRqZrB0LAZ9xN6hG+sA8/g==} + /@aws-sdk/xml-builder@3.295.0: + resolution: {integrity: sha512-7VX3Due7Ip73yfYErFDHZvhgBohC4IyMTfW49DI4C/LFKFCcAoB888MdevUkB87GoiNaRLeT3ZMZ86IWlSEaow==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.0 @@ -3442,8 +3484,8 @@ packages: - web-streams-polyfill dev: false - /@discordapp/twemoji@14.0.2: - resolution: {integrity: sha512-eYJpFsjViDTYwq3f6v+tRu8iRc+yLAeGrlh6kmNRvvC6rroUE2bMlBfEQ/WNh+2Q1FtSEFXpxzuQPOHzRzbAyA==} + /@discordapp/twemoji@14.1.2: + resolution: {integrity: sha512-Rkuu30/biwy8Zss0r5qfFvQzoQGPTHXzA7Y/MPMkCQqFd0WskoYvjfJRTz0iuZwUpMfrgbM8eakSsptCxmOqog==} dependencies: fs-extra: 8.1.0 jsonfile: 5.0.0 @@ -3464,29 +3506,12 @@ packages: react: 18.2.0 dev: true - /@esbuild/android-arm64@0.16.17: - resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - optional: true - /@esbuild/android-arm64@0.17.14: resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.16.17: - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true optional: true /@esbuild/android-arm@0.17.14: @@ -3495,15 +3520,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.16.17: - resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true optional: true /@esbuild/android-x64@0.17.14: @@ -3512,15 +3528,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.16.17: - resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true optional: true /@esbuild/darwin-arm64@0.17.14: @@ -3529,15 +3536,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.16.17: - resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true optional: true /@esbuild/darwin-x64@0.17.14: @@ -3546,15 +3544,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.16.17: - resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true optional: true /@esbuild/freebsd-arm64@0.17.14: @@ -3563,15 +3552,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.16.17: - resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true optional: true /@esbuild/freebsd-x64@0.17.14: @@ -3580,15 +3560,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.16.17: - resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-arm64@0.17.14: @@ -3597,15 +3568,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.16.17: - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-arm@0.17.14: @@ -3614,15 +3576,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.16.17: - resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-ia32@0.17.14: @@ -3631,15 +3584,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.16.17: - resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-loong64@0.17.14: @@ -3648,15 +3592,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.16.17: - resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-mips64el@0.17.14: @@ -3665,15 +3600,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.16.17: - resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-ppc64@0.17.14: @@ -3682,15 +3608,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.16.17: - resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-riscv64@0.17.14: @@ -3699,15 +3616,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.16.17: - resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-s390x@0.17.14: @@ -3716,15 +3624,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.16.17: - resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true optional: true /@esbuild/linux-x64@0.17.14: @@ -3733,15 +3632,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.16.17: - resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true optional: true /@esbuild/netbsd-x64@0.17.14: @@ -3750,15 +3640,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.16.17: - resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true optional: true /@esbuild/openbsd-x64@0.17.14: @@ -3767,15 +3648,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.16.17: - resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true optional: true /@esbuild/sunos-x64@0.17.14: @@ -3784,15 +3656,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.16.17: - resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true optional: true /@esbuild/win32-arm64@0.17.14: @@ -3801,15 +3664,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.16.17: - resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true optional: true /@esbuild/win32-ia32@0.17.14: @@ -3818,15 +3672,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.16.17: - resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true optional: true /@esbuild/win32-x64@0.17.14: @@ -3835,16 +3680,30 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true - /@eslint/eslintrc@1.4.1: - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + /@eslint-community/eslint-utils@4.4.0(eslint@8.37.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.37.0 + eslint-visitor-keys: 3.4.0 + dev: true + + /@eslint-community/regexpp@4.5.0: + resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.0.2: + resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.4.1 + espree: 9.5.1 globals: 13.19.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -3855,25 +3714,8 @@ packages: - supports-color dev: true - /@eslint/eslintrc@2.0.0: - resolution: {integrity: sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) - espree: 9.4.1 - globals: 13.19.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.35.0: - resolution: {integrity: sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==} + /@eslint/js@8.37.0: + resolution: {integrity: sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -3915,8 +3757,8 @@ packages: fastify-plugin: 4.5.0 dev: false - /@fastify/cors@8.2.0: - resolution: {integrity: sha512-qDgwpmg6C4D0D3nh8MTMuRXWyEwPnDZDBODaJv90FP2o9ukbahJByW4FtrM5Bpod5KbTf1oIExBmpItbUTQmHg==} + /@fastify/cors@8.2.1: + resolution: {integrity: sha512-2H2MrDD3ea7g707g1CNNLWb9/tYbmw7HS+MK2SDcgjxwzbOFR93JortelTIO8DBFsZqFtEpKNxiZfSyrGgYcbw==} dependencies: fastify-plugin: 4.5.0 mnemonist: 0.39.5 @@ -3936,18 +3778,19 @@ packages: fast-json-stringify: 5.5.0 dev: false - /@fastify/http-proxy@8.4.0: - resolution: {integrity: sha512-H8nwsmawFtKKRE6uhh1BtF1gQi/l147SmLsDGxB0HdYTHzjXz6uSQO3lEVmY7unKMzbArRjdoJQkEGpScszdSw==} + /@fastify/http-proxy@9.0.0: + resolution: {integrity: sha512-VbP7rccoX9rn56bvK5Sm/GsQ+UwjlQOJa0QiTX69dcjFWSV0I423vgH0KYPczAJ8ZpoM2HU7DP51ir1KKHBtTg==} dependencies: - '@fastify/reply-from': 8.3.1 - ws: 8.12.1 + '@fastify/reply-from': 9.0.1 + fastify-plugin: 4.5.0 + ws: 8.13.0 transitivePeerDependencies: - bufferutil - utf-8-validate dev: false - /@fastify/multipart@7.4.2: - resolution: {integrity: sha512-jrPoQ8I2Mpd92vVR/XE1DKBa+h7EiXaLL5TvHIUTtHiF7/0FChjP7spBQ9ROItpNrNKdKGB8uSJHmPIjRK/24A==} + /@fastify/multipart@7.5.0: + resolution: {integrity: sha512-cAQzz+vVRaNomTppActeqA3xZstF18WK9gjwCMAkoU6xKFljsnKewdGw2RkcYAaiWgFzGBQUD8owSKPFgzhJAA==} dependencies: '@fastify/busboy': 1.1.0 '@fastify/deepmerge': 1.3.0 @@ -3959,8 +3802,8 @@ packages: stream-wormhole: 1.1.0 dev: false - /@fastify/reply-from@8.3.1: - resolution: {integrity: sha512-fRByAvTMXuBuYIimcinukOB3YdmqtYPeoybXIBNY0aPVgetHkmCVffBo/M4pEOib9Pes8wuoYL4VawI65aHl4w==} + /@fastify/reply-from@9.0.1: + resolution: {integrity: sha512-q9vFNUiXZTY1x8omDPe59os2MYq+3y7KgO/kZoXpZlnud+45Nd8Ot/svEvrUATzjkizIggfS4K8LR9zXDyZZKg==} dependencies: '@fastify/error': 3.2.0 end-of-stream: 1.4.4 @@ -3968,7 +3811,7 @@ packages: fastify-plugin: 4.5.0 pump: 3.0.0 tiny-lru: 10.0.1 - undici: 5.16.0 + undici: 5.21.0 dev: false /@fastify/send@2.0.1: @@ -4058,7 +3901,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -4079,14 +3922,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.1 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.15.0) + jest-config: 29.5.0(@types/node@18.15.11) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -4120,7 +3963,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-mock: 29.5.0 dev: true @@ -4147,7 +3990,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -4180,7 +4023,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -4202,6 +4045,13 @@ packages: - supports-color dev: true + /@jest/schemas@28.1.3: + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@sinclair/typebox': 0.24.51 + dev: true + /@jest/schemas@29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4267,7 +4117,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -4279,12 +4129,12 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/yargs': 17.0.19 chalk: 4.1.2 dev: true - /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@4.9.5)(vite@4.1.4): + /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.0.2)(vite@4.2.1): resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==} peerDependencies: typescript: '>= 4.3.x' @@ -4296,9 +4146,9 @@ packages: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@4.9.5) - typescript: 4.9.5 - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + react-docgen-typescript: 2.2.2(typescript@5.0.2) + typescript: 5.0.2 + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) dev: true /@jridgewell/gen-mapping@0.1.1: @@ -4387,6 +4237,49 @@ packages: react: 18.2.0 dev: true + /@microsoft/api-extractor-model@7.26.4(@types/node@18.15.11): + resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/api-extractor@7.34.4(@types/node@18.15.11): + resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} + hasBin: true + dependencies: + '@microsoft/api-extractor-model': 7.26.4(@types/node@18.15.11) + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) + '@rushstack/rig-package': 0.3.18 + '@rushstack/ts-command-line': 4.13.2 + colors: 1.2.5 + lodash: 4.17.21 + resolve: 1.22.1 + semver: 7.3.8 + source-map: 0.6.1 + typescript: 4.8.4 + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true + + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true + /@mole-inc/bin-wrapper@8.0.1: resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4475,8 +4368,8 @@ packages: tar-fs: 2.1.1 dev: true - /@nestjs/common@9.3.9(reflect-metadata@0.1.13)(rxjs@7.8.0): - resolution: {integrity: sha512-GshTD9Xz+wD2em6NyzU4NXw5IXMUmapgDgD+iuj6XL0258hvDwODmNk37mBBnZvTZlqER+krvIUKnS34etqF/A==} + /@nestjs/common@9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0): + resolution: {integrity: sha512-NtrUG2VgCbhmZEO1yRt/Utq16uFRV+xeHAOtdYIsfHGG0ssAV2lVLlvFFAQYh0SQ+KuYY1Gsxd3GK2JFoJCNqQ==} peerDependencies: cache-manager: <=5 class-transformer: '*' @@ -4498,8 +4391,8 @@ packages: uid: 2.0.1 dev: false - /@nestjs/core@9.3.9(@nestjs/common@9.3.9)(reflect-metadata@0.1.13)(rxjs@7.8.0): - resolution: {integrity: sha512-9g1A1G9eirLXEpH21rc6dKb08zHc2+adhCRz8NW39hbejcsxxD72FApJzt4QBQAKvu862ixt/tdpStnFT7lOSw==} + /@nestjs/core@9.3.12(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0): + resolution: {integrity: sha512-Qe0ZjJo7bOlfudn7KHLppYrt5i4k1nR1+9d5ppYat2bb5knCIT4kIqblj666n+22/2zvsHRiTo015cLyLKsLRQ==} requiresBuild: true peerDependencies: '@nestjs/common': ^9.0.0 @@ -4516,7 +4409,7 @@ packages: '@nestjs/websockets': optional: true dependencies: - '@nestjs/common': 9.3.9(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nuxtjs/opencollective': 0.3.2 fast-safe-stringify: 2.1.1 iterare: 1.2.1 @@ -4529,8 +4422,8 @@ packages: - encoding dev: false - /@nestjs/testing@9.3.9(@nestjs/common@9.3.9)(@nestjs/core@9.3.9): - resolution: {integrity: sha512-+mPvSVvSC2SAkYgZZv1mOI2xsdGc1pmq7/sem7iin/JDoFtlvoGSK+pfZHD3IV3EpYtq1v/8/5gi+UFH9yZnDg==} + /@nestjs/testing@9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12): + resolution: {integrity: sha512-nH274IXEqU4hr4bcb71POe58hYLONt9RcfKKM5ZvOS7wYMnybMpKKR8DkC1WcfE1P2k2GQmQoHeSH5emPtYrBA==} peerDependencies: '@nestjs/common': ^9.0.0 '@nestjs/core': ^9.0.0 @@ -4542,8 +4435,8 @@ packages: '@nestjs/platform-express': optional: true dependencies: - '@nestjs/common': 9.3.9(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.3.9(@nestjs/common@9.3.9)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) tslib: 2.5.0 dev: false @@ -4602,6 +4495,7 @@ packages: /@nuxtjs/opencollective@0.3.2: resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true dependencies: chalk: 4.1.2 consola: 2.15.3 @@ -4672,7 +4566,7 @@ packages: '@redis/client': 1.4.2 dev: true - /@rollup/plugin-alias@4.0.3(rollup@3.19.0): + /@rollup/plugin-alias@4.0.3(rollup@3.20.2): resolution: {integrity: sha512-ZuDWE1q4PQDhvm/zc5Prun8sBpLJy41DMptYrS6MhAy9s9kL/doN1613BWfEchGVfKxzliJ3BjbOPizXX38DbQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4681,11 +4575,11 @@ packages: rollup: optional: true dependencies: - rollup: 3.19.0 + rollup: 3.20.2 slash: 4.0.0 dev: false - /@rollup/plugin-json@6.0.0(rollup@3.19.0): + /@rollup/plugin-json@6.0.0(rollup@3.20.2): resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4694,8 +4588,8 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.19.0) - rollup: 3.19.0 + '@rollup/pluginutils': 5.0.2(rollup@3.20.2) + rollup: 3.20.2 dev: false /@rollup/pluginutils@4.2.1: @@ -4706,7 +4600,7 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/pluginutils@5.0.2(rollup@3.19.0): + /@rollup/pluginutils@5.0.2(rollup@3.20.2): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4718,9 +4612,43 @@ packages: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.19.0 + rollup: 3.20.2 dev: false + /@rushstack/node-core-library@3.55.2(@types/node@18.15.11): + resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 18.15.11 + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.1 + semver: 7.3.8 + z-schema: 5.0.5 + dev: true + + /@rushstack/rig-package@0.3.18: + resolution: {integrity: sha512-SGEwNTwNq9bI3pkdd01yCaH+gAsHqs0uxfGvtw9b0LJXH52qooWXnrFTRRLG1aL9pf+M2CARdrA9HLHJys3jiQ==} + dependencies: + resolve: 1.22.1 + strip-json-comments: 3.1.1 + dev: true + + /@rushstack/ts-command-line@4.13.2: + resolution: {integrity: sha512-bCU8qoL9HyWiciltfzg7GqdfODUeda/JpI0602kbN5YH22rzTxyqYvv7aRLENCM7XCQ1VRs7nMkEqgJUOU8Sag==} + dependencies: + '@types/argparse': 1.0.38 + argparse: 1.0.10 + colors: 1.2.5 + string-argv: 0.3.1 + dev: true + /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -4735,6 +4663,10 @@ packages: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: true + /@sinclair/typebox@0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + dev: true + /@sinclair/typebox@0.25.21: resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==} dev: true @@ -5229,7 +5161,7 @@ packages: - supports-color dev: true - /@storybook/builder-vite@7.0.0-rc.10(typescript@4.9.5)(vite@4.1.4): + /@storybook/builder-vite@7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1): resolution: {integrity: sha512-sMPNSj2z+Zf3h+ZOG+ZAH8uVA++rqFu+Ehq6bX0asgMuOJoEbpi372p3l9ru9YyySNBlgQkgD2uZLCpIrFZNeQ==} peerDependencies: '@preact/preset-vite': '*' @@ -5266,9 +5198,9 @@ packages: magic-string: 0.27.0 remark-external-links: 9.0.1 remark-slug: 7.0.1 - rollup: 3.19.0 - typescript: 4.9.5 - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + rollup: 3.20.2 + typescript: 5.0.2 + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) transitivePeerDependencies: - supports-color dev: true @@ -5517,7 +5449,7 @@ packages: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.4.0 - ws: 8.12.1 + ws: 8.13.0 transitivePeerDependencies: - bufferutil - encoding @@ -5583,7 +5515,7 @@ packages: /@storybook/expect@27.5.2-0: resolution: {integrity: sha512-cP99mhWN/JeCp7VSIiymvj5tmuMY050iFohvp8Zq+kewKsBSZ6/qpTJAGCCZk6pneTcp4S0Fm5BSqyxzbyJ3gw==} dependencies: - '@types/jest': 29.4.0 + '@types/jest': 29.5.0 dev: true /@storybook/global@5.0.0: @@ -5751,7 +5683,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.4): + /@storybook/react-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1): resolution: {integrity: sha512-UqPAu/9FC7m3jcTcw6MgXzi9BTkAxKpr+t0lNgccyczvMRdWf5UNXPm9rdCEb7wmQx22DzwVmGPe+PFgVOIMsg==} engines: {node: '>=16'} peerDependencies: @@ -5759,17 +5691,17 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 vite: ^3.0.0 || ^4.0.0 dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@4.9.5)(vite@4.1.4) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.0.2)(vite@4.2.1) '@rollup/pluginutils': 4.2.1 - '@storybook/builder-vite': 7.0.0-rc.10(typescript@4.9.5)(vite@4.1.4) - '@storybook/react': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) - '@vitejs/plugin-react': 3.1.0(vite@4.1.4) + '@storybook/builder-vite': 7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1) + '@storybook/react': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2) + '@vitejs/plugin-react': 3.1.0(vite@4.2.1) ast-types: 0.14.2 magic-string: 0.27.0 react: 18.2.0 react-docgen: 6.0.0-alpha.3 react-dom: 18.2.0(react@18.2.0) - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) transitivePeerDependencies: - '@preact/preset-vite' - '@storybook/mdx1-csf' @@ -5778,7 +5710,7 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/react@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5): + /@storybook/react@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2): resolution: {integrity: sha512-AFN4Jzyp27jhe5qnbtG45yAHq/e3bkdL9p0di2t+AdHXyse8naud2pTzD/j3bbaU23R1iDVwVPQ+X7kAktu0EA==} engines: {node: '>=16.0.0'} peerDependencies: @@ -5811,7 +5743,7 @@ packages: react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0) ts-dedent: 2.2.0 type-fest: 2.19.0 - typescript: 4.9.5 + typescript: 5.0.2 util-deprecate: 1.0.2 transitivePeerDependencies: - supports-color @@ -5969,7 +5901,7 @@ packages: file-system-cache: 2.0.2 dev: true - /@storybook/vue3-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.4)(vue@3.2.47): + /@storybook/vue3-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.2)(vite@4.2.1)(vue@3.2.47): resolution: {integrity: sha512-gNUlREXPv9C61VqmLW9MmlAFAgki9o60+CKwMDLp3Ey/WxEwH+JGOmhc5ne6H4du9FZLnDbBa3zphkS0Ve7qWw==} engines: {node: ^14.18 || >=16} peerDependencies: @@ -5977,14 +5909,14 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 vite: ^3.0.0 || ^4.0.0 dependencies: - '@storybook/builder-vite': 7.0.0-rc.10(typescript@4.9.5)(vite@4.1.4) + '@storybook/builder-vite': 7.0.0-rc.10(typescript@5.0.2)(vite@4.2.1) '@storybook/core-server': 7.0.0-rc.10 '@storybook/vue3': 7.0.0-rc.10(vue@3.2.47) - '@vitejs/plugin-vue': 4.0.0(vite@4.1.4)(vue@3.2.47) + '@vitejs/plugin-vue': 4.1.0(vite@4.2.1)(vue@3.2.47) magic-string: 0.27.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) vue-docgen-api: 4.64.1(vue@3.2.47) transitivePeerDependencies: - '@preact/preset-vite' @@ -6016,7 +5948,7 @@ packages: - supports-color dev: true - /@swc/cli@0.1.62(@swc/core@1.3.38)(chokidar@3.5.3): + /@swc/cli@0.1.62(@swc/core@1.3.42)(chokidar@3.5.3): resolution: {integrity: sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==} engines: {node: '>= 12.13'} hasBin: true @@ -6028,7 +5960,7 @@ packages: optional: true dependencies: '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.3.38 + '@swc/core': 1.3.42 chokidar: 3.5.3 commander: 7.2.0 fast-glob: 3.2.12 @@ -6048,110 +5980,110 @@ packages: dev: false optional: true - /@swc/core-darwin-arm64@1.3.38: - resolution: {integrity: sha512-4ZTJJ/cR0EsXW5UxFCifZoGfzQ07a8s4ayt1nLvLQ5QoB1GTAf9zsACpvWG8e7cmCR0L76R5xt8uJuyr+noIXA==} + /@swc/core-darwin-arm64@1.3.42: + resolution: {integrity: sha512-hM6RrZFyoCM9mX3cj/zM5oXwhAqjUdOCLXJx7KTQps7NIkv/Qjvobgvyf2gAb89j3ARNo9NdIoLjTjJ6oALtiA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.3.38: - resolution: {integrity: sha512-Kim727rNo4Dl8kk0CR8aJQe4zFFtsT1TZGlNrNMUgN1WC3CRX7dLZ6ZJi/VVcTG1cbHp5Fp3mUzwHsMxEh87Mg==} + /@swc/core-darwin-x64@1.3.42: + resolution: {integrity: sha512-bjsWtHMb6wJK1+RGlBs2USvgZ0txlMk11y0qBLKo32gLKTqzUwRw0Fmfzuf6Ue2a/w//7eqMlPFEre4LvJajGw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.38: - resolution: {integrity: sha512-yaRdnPNU2enlJDRcIMvYVSyodY+Amhf5QuXdUbAj6rkDD6wUs/s9C6yPYrFDmoTltrG+nBv72mUZj+R46wVfSw==} + /@swc/core-linux-arm-gnueabihf@1.3.42: + resolution: {integrity: sha512-Oe0ggMz3MyqXNfeVmY+bBTL0hFSNY3bx8dhcqsh4vXk/ZVGse94QoC4dd92LuPHmKT0x6nsUzB86x2jU9QHW5g==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.3.38: - resolution: {integrity: sha512-iNY1HqKo/wBSu3QOGBUlZaLdBP/EHcwNjBAqIzpb8J64q2jEN02RizqVW0mDxyXktJ3lxr3g7VW9uqklMeXbjQ==} + /@swc/core-linux-arm64-gnu@1.3.42: + resolution: {integrity: sha512-ZJsa8NIW1RLmmHGTJCbM7OPSbBZ9rOMrLqDtUOGrT0uoJXZnnQqolflamB5wviW0X6h3Z3/PSTNGNDCJ3u3Lqg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.3.38: - resolution: {integrity: sha512-LJCFgLZoPRkPCPmux+Q5ctgXRp6AsWhvWuY61bh5bIPBDlaG9pZk94DeHyvtiwT0syhTtXb2LieBOx6NqN3zeA==} + /@swc/core-linux-arm64-musl@1.3.42: + resolution: {integrity: sha512-YpZwlFAfOp5vkm/uVUJX1O7N3yJDO1fDQRWqsOPPNyIJkI2ydlRQtgN6ZylC159Qv+TimfXnGTlNr7o3iBAqjg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.3.38: - resolution: {integrity: sha512-hRQGRIWHmv2PvKQM/mMV45mVXckM2+xLB8TYLLgUG66mmtyGTUJPyxjnJkbI86WNGqo18k+lAuMG2mn6QmzYwQ==} + /@swc/core-linux-x64-gnu@1.3.42: + resolution: {integrity: sha512-0ccpKnsZbyHBzaQFdP8U9i29nvOfKitm6oJfdJzlqsY/jCqwvD8kv2CAKSK8WhJz//ExI2LqNrDI0yazx5j7+A==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.3.38: - resolution: {integrity: sha512-PTYSqtsIfPHLKDDNbueI5e0sc130vyHRiFOeeC6qqzA2FAiVvIxuvXHLr0soPvKAR1WyhtYmFB9QarcctemL2w==} + /@swc/core-linux-x64-musl@1.3.42: + resolution: {integrity: sha512-7eckRRuTZ6+3K21uyfXXgc2ZCg0mSWRRNwNT3wap2bYkKPeqTgb8pm8xYSZNEiMuDonHEat6XCCV36lFY6kOdQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.3.38: - resolution: {integrity: sha512-9lHfs5TPNs+QdkyZFhZledSmzBEbqml/J1rqPSb9Fy8zB6QlspixE6OLZ3nTlUOdoGWkcTTdrOn77Sd7YGf1AA==} + /@swc/core-win32-arm64-msvc@1.3.42: + resolution: {integrity: sha512-t27dJkdw0GWANdN4TV0lY/V5vTYSx5SRjyzzZolep358ueCGuN1XFf1R0JcCbd1ojosnkQg2L7A7991UjXingg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.3.38: - resolution: {integrity: sha512-SbL6pfA2lqvDKnwTHwOfKWvfHAdcbAwJS4dBkFidr7BiPTgI5Uk8wAPcRb8mBECpmIa9yFo+N0cAFRvMnf+cNw==} + /@swc/core-win32-ia32-msvc@1.3.42: + resolution: {integrity: sha512-xfpc/Zt/aMILX4IX0e3loZaFyrae37u3MJCv1gJxgqrpeLi7efIQr3AmERkTK3mxTO6R5urSliWw2W3FyZ7D3Q==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.3.38: - resolution: {integrity: sha512-UFveLrL6eGvViOD8OVqUQa6QoQwdqwRvLtL5elF304OT8eCPZa8BhuXnWk25X8UcOyns8gFcb8Fhp3oaLi/Rlw==} + /@swc/core-win32-x64-msvc@1.3.42: + resolution: {integrity: sha512-ra2K4Tu++EJLPhzZ6L8hWUsk94TdK/2UKhL9dzCBhtzKUixsGCEqhtqH1zISXNvW8qaVLFIMUP37ULe80/IJaA==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.3.38: - resolution: {integrity: sha512-AiEVehRFws//AiiLx9DPDp1WDXt+yAoGD1kMYewhoF6QLdTz8AtYu6i8j/yAxk26L8xnegy0CDwcNnub9qenyQ==} + /@swc/core@1.3.42: + resolution: {integrity: sha512-nVFUd5+7tGniM2cT3LXaqnu3735Cu4az8A9gAKK+8sdpASI52SWuqfDBmjFCK9xG90MiVDVp2PTZr0BWqCIzpw==} engines: {node: '>=10'} requiresBuild: true optionalDependencies: - '@swc/core-darwin-arm64': 1.3.38 - '@swc/core-darwin-x64': 1.3.38 - '@swc/core-linux-arm-gnueabihf': 1.3.38 - '@swc/core-linux-arm64-gnu': 1.3.38 - '@swc/core-linux-arm64-musl': 1.3.38 - '@swc/core-linux-x64-gnu': 1.3.38 - '@swc/core-linux-x64-musl': 1.3.38 - '@swc/core-win32-arm64-msvc': 1.3.38 - '@swc/core-win32-ia32-msvc': 1.3.38 - '@swc/core-win32-x64-msvc': 1.3.38 + '@swc/core-darwin-arm64': 1.3.42 + '@swc/core-darwin-x64': 1.3.42 + '@swc/core-linux-arm-gnueabihf': 1.3.42 + '@swc/core-linux-arm64-gnu': 1.3.42 + '@swc/core-linux-arm64-musl': 1.3.42 + '@swc/core-linux-x64-gnu': 1.3.42 + '@swc/core-linux-x64-musl': 1.3.42 + '@swc/core-win32-arm64-msvc': 1.3.42 + '@swc/core-win32-ia32-msvc': 1.3.42 + '@swc/core-win32-x64-msvc': 1.3.42 - /@swc/jest@0.2.24(@swc/core@1.3.38): + /@swc/jest@0.2.24(@swc/core@1.3.42): resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 27.5.1 - '@swc/core': 1.3.38 + '@swc/core': 1.3.42 jsonc-parser: 3.2.0 dev: true @@ -6183,14 +6115,14 @@ packages: dependencies: defer-to-connect: 2.0.1 - /@tabler/icons-webfont@2.10.0: - resolution: {integrity: sha512-5WvGhztlM3la7NWf8Y6ktT+KD7zb/Hz/zdMeFjExXvEFupGvuANEnbGo1wXI4ADdSWUaRDtnQHcSGIjZ+gZ+OQ==} + /@tabler/icons-webfont@2.12.0: + resolution: {integrity: sha512-5I4jub4zwBo4WdnZhRRmfjPutY7JL/ZbdGjH6MJ56x9RuYeJu62geJIAr8eHDdOSTWguUzZI3lQMygXoz63grw==} dependencies: - '@tabler/icons': 2.10.0 + '@tabler/icons': 2.12.0 dev: false - /@tabler/icons@2.10.0: - resolution: {integrity: sha512-rj9xrHTSw7bPpylx8g9xhhUgO9NYKX1wGnGrMaFS5CQ9KS+jhwhKFqbZaQKhXNhpvI0cLEEW6GaRXdrC3iBs1A==} + /@tabler/icons@2.12.0: + resolution: {integrity: sha512-PiYD2zUOewNAtfJKU9tBZfyv3NeFlTlUe5LSGTTplvBcM0iuHrNVnd30+HIcUGJQhi3Uf0Ng9FRi/kPqm/q6ZA==} dev: false /@tensorflow/tfjs-backend-cpu@4.2.0(@tensorflow/tfjs-core@4.2.0): @@ -6367,16 +6299,24 @@ packages: engines: {node: '>= 10'} dev: false + /@tsd/typescript@5.0.2: + resolution: {integrity: sha512-UgFiSalbDaWrkMBQv8rHetnlwj3HVZtJo6i2aGLe50I6XdlPZFdGRfM2GOaP+i3Tm6p+YcyEql3yoi3ZPs/6Pw==} + dev: true + /@types/accepts@1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true - /@types/archiver@5.3.1: - resolution: {integrity: sha512-wKYZaSXaDvTZuInAWjCeGG7BEAgTWG2zZW0/f7IYFcoHB2X2d9lkVFnrOlXl3W6NrvO6Ml3FLLu8Uksyymcpnw==} + /@types/archiver@5.3.2: + resolution: {integrity: sha512-IctHreBuWE5dvBDz/0WeKtyVKVRs4h75IblxOACL92wU66v+HGAfEYAOyXkOFphvRJMhuXdI9huDXpX0FC6lCw==} dependencies: - '@types/glob': 8.0.0 + '@types/readdir-glob': 1.1.1 + dev: true + + /@types/argparse@1.0.38: + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} dev: true /@types/aria-query@5.0.1: @@ -6420,7 +6360,7 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/bull@4.10.0: @@ -6436,7 +6376,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/responselike': 1.0.0 dev: false @@ -6469,7 +6409,7 @@ packages: /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/content-disposition@0.5.5: @@ -6510,6 +6450,13 @@ packages: resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} dev: true + /@types/eslint@7.29.0: + resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} + dependencies: + '@types/estree': 1.0.0 + '@types/json-schema': 7.0.11 + dev: true + /@types/estree@0.0.51: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true @@ -6523,7 +6470,7 @@ packages: /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -6544,41 +6491,34 @@ packages: /@types/fluent-ffmpeg@2.1.21: resolution: {integrity: sha512-+n3dy/Tegt6n+YwGZUiGq6i8Jrnt8+MoyPiW1L6J5EWUl7GSt18a/VyReecfCsvTTNBXNMIKOMHDstiQM8nJLA==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/glob-stream@6.1.1: resolution: {integrity: sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==} dependencies: '@types/glob': 8.0.1 - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.0 - dev: true - - /@types/glob@8.0.0: - resolution: {integrity: sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==} - dependencies: - '@types/minimatch': 5.1.2 - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/glob@8.0.1: resolution: {integrity: sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/gulp-rename@2.0.1: @@ -6608,7 +6548,7 @@ packages: /@types/ioredis@4.28.10: resolution: {integrity: sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/is-function@1.0.1: @@ -6631,8 +6571,8 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@29.4.0: - resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} + /@types/jest@29.5.0: + resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} dependencies: expect: 29.5.0 pretty-format: 29.5.0 @@ -6646,10 +6586,10 @@ packages: resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} dev: true - /@types/jsdom@21.1.0: - resolution: {integrity: sha512-leWreJOdnuIxq9Y70tBVm/bvTuh31DSlF/r4l7Cfi4uhVQqLHD0Q4v301GMisEMwwbMgF7ZKxuZ+Jbd4NcdmRw==} + /@types/jsdom@21.1.1: + resolution: {integrity: sha512-cZFuoVLtzKP3gmq9eNosUL1R50U+USkbLtUQ1bYVgl/lKp0FZM7Cq4aIHAL8oIvQ17uSHi7jXPtfDOdjPwBE7A==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -6666,14 +6606,14 @@ packages: resolution: {integrity: sha512-4l5t/jDnJpqZ+i7CLTTgPcT5BYXnAnwJupb07aAokPufCV0SjDHcwctUkSTuhIuSU9yHok+WOOngIGCtpL96gw==} dev: true - /@types/jsrsasign@10.5.5: - resolution: {integrity: sha512-M2Et4hgTigFoArTu6ylK3hYFEH+UuXfgFXRXZ+flpCfux8j7fQ2D+0zEwiu6ehx0h5otaauhLSFzMzEtNA784A==} + /@types/jsrsasign@10.5.8: + resolution: {integrity: sha512-1oZ3TbarAhKtKUpyrCIqXpbx3ZAfoSulleJs6/UzzyYty0ut+kjRX7zHLAaHwVIuw8CBjIymwW4J2LK944HoHQ==} dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: false /@types/lodash@4.14.191: @@ -6710,6 +6650,10 @@ packages: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true + /@types/minimist@1.2.2: + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + dev: true + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true @@ -6717,13 +6661,13 @@ packages: /@types/node-fetch@2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 form-data: 3.0.1 /@types/node-fetch@3.0.3: resolution: {integrity: sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==} dependencies: - node-fetch: 3.3.0 + node-fetch: 3.3.1 dev: true /@types/node@14.18.36: @@ -6737,13 +6681,13 @@ packages: /@types/node@18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} - /@types/node@18.15.0: - resolution: {integrity: sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==} + /@types/node@18.15.11: + resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} /@types/nodemailer@6.4.7: resolution: {integrity: sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/normalize-package-data@2.4.1: @@ -6757,7 +6701,7 @@ packages: /@types/oauth@0.9.1: resolution: {integrity: sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/offscreencanvas@2019.3.0: @@ -6771,7 +6715,7 @@ packages: /@types/pg@8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 pg-protocol: 1.5.0 pg-types: 2.2.0 dev: true @@ -6799,7 +6743,7 @@ packages: /@types/qrcode@1.5.0: resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/qs@6.9.7: @@ -6826,6 +6770,12 @@ packages: csstype: 3.1.1 dev: true + /@types/readdir-glob@1.1.1: + resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} + dependencies: + '@types/node': 18.15.11 + dev: true + /@types/redis@4.0.11: resolution: {integrity: sha512-bI+gth8La8Wg/QCR1+V1fhrL9+LZUSWfcqpOj2Kc80ZQ4ffbdL173vQd5wovmoV9i071FU9oP2g6etLuEwb6Rg==} dependencies: @@ -6839,11 +6789,11 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: false - /@types/sanitize-html@2.8.1: - resolution: {integrity: sha512-Q6kMAbBBaXA5IagoipeSr4Y/zuGyh4BZ5lewgb3cYe3OYqy0k/d67iMsC4O895eks676bVAe9G+0y1i0k2ZlnA==} + /@types/sanitize-html@2.9.0: + resolution: {integrity: sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg==} dependencies: htmlparser2: 8.0.1 dev: true @@ -6868,23 +6818,23 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true - /@types/serviceworker@0.0.62: - resolution: {integrity: sha512-DVoelQjcHaPshqyg0duirwuuaZ/teG4E3QGiQXbzso8akd12VRtgGYCao8viRFXHVLJOlo/Elh1nfbMsRQJXVA==} + /@types/serviceworker@0.0.67: + resolution: {integrity: sha512-7TCH7iNsCSNb+aUD9M/36TekrWFSLCjNK8zw/3n5kOtRjbLtDfGYMXTrDnGhSfqXNwpqmt9Vd90w5C/ad1tX6Q==} dev: true /@types/set-cookie-parser@2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/sharp@0.31.1: resolution: {integrity: sha512-5nWwamN9ZFHXaYEincMSuza8nNfOof8nmO+mcI+Agx1uMUk4/pQnNIcix+9rLPXzKrm1pS34+6WRDbDV0Jn7ag==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/sinon@10.0.13: @@ -6912,7 +6862,7 @@ packages: /@types/testing-library__jest-dom@5.14.5: resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} dependencies: - '@types/jest': 29.4.0 + '@types/jest': 29.5.0 dev: true /@types/throttle-debounce@5.0.0: @@ -6938,7 +6888,7 @@ packages: /@types/undertaker@1.2.8: resolution: {integrity: sha512-gW3PRqCHYpo45XFQHJBhch7L6hytPsIe0QeLujlnFsjHPnXLhJcPdN6a9368d7aIQgH2I/dUTPFBlGeSNA3qOg==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/undertaker-registry': 1.0.1 async-done: 1.3.2 dev: true @@ -6950,7 +6900,7 @@ packages: /@types/unzipper@0.10.5: resolution: {integrity: sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/uuid@9.0.1: @@ -6960,14 +6910,14 @@ packages: /@types/vary@1.1.0: resolution: {integrity: sha512-LQWqrIa0dvEOOH37lGksMEXbypRLUFqu6Gx0pmX7zIUisD2I/qaVgEX/vJ/PSVSW0Hk6yz1BNkFpqg6dZm3Wug==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/vinyl-fs@2.4.12: resolution: {integrity: sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==} dependencies: '@types/glob-stream': 6.1.1 - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/vinyl': 2.0.7 dev: true @@ -6975,12 +6925,12 @@ packages: resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==} dependencies: '@types/expect': 1.20.4 - '@types/node': 18.15.0 + '@types/node': 18.15.11 /@types/web-push@3.3.2: resolution: {integrity: sha512-JxWGVL/m7mWTIg4mRYO+A6s0jPmBkr4iJr39DqJpRJAc+jrPiEe1/asmkwerzRon8ZZDxaZJpsxpv0Z18Wo9gw==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/webgl-ext@0.0.30: @@ -6994,13 +6944,13 @@ packages: /@types/websocket@1.0.5: resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/yargs-parser@21.0.0: @@ -7023,12 +6973,12 @@ packages: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true optional: true - /@typescript-eslint/eslint-plugin@5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5): - resolution: {integrity: sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==} + /@typescript-eslint/eslint-plugin@5.57.0(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(typescript@5.0.2): + resolution: {integrity: sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -7038,25 +6988,25 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.54.1 - '@typescript-eslint/type-utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.57.0(eslint@8.37.0)(typescript@5.0.2) + '@typescript-eslint/scope-manager': 5.57.0 + '@typescript-eslint/type-utils': 5.57.0(eslint@8.37.0)(typescript@5.0.2) + '@typescript-eslint/utils': 5.57.0(eslint@8.37.0)(typescript@5.0.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.35.0 + eslint: 8.37.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - regexpp: 3.2.0 semver: 7.3.8 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.52.0(eslint@8.34.0)(typescript@4.9.5): - resolution: {integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==} + /@typescript-eslint/parser@5.57.0(eslint@8.37.0)(typescript@5.0.2): + resolution: {integrity: sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -7065,54 +7015,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.52.0 - '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/typescript-estree': 5.52.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.57.0 + '@typescript-eslint/types': 5.57.0 + '@typescript-eslint/typescript-estree': 5.57.0(typescript@5.0.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.34.0 - typescript: 4.9.5 + eslint: 8.37.0 + typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.54.1(eslint@8.35.0)(typescript@4.9.5): - resolution: {integrity: sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.54.1 - '@typescript-eslint/types': 5.54.1 - '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.35.0 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@5.52.0: - resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==} + /@typescript-eslint/scope-manager@5.57.0: + resolution: {integrity: sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/visitor-keys': 5.52.0 + '@typescript-eslint/types': 5.57.0 + '@typescript-eslint/visitor-keys': 5.57.0 dev: true - /@typescript-eslint/scope-manager@5.54.1: - resolution: {integrity: sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.54.1 - '@typescript-eslint/visitor-keys': 5.54.1 - dev: true - - /@typescript-eslint/type-utils@5.54.1(eslint@8.35.0)(typescript@4.9.5): - resolution: {integrity: sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==} + /@typescript-eslint/type-utils@5.57.0(eslint@8.37.0)(typescript@5.0.2): + resolution: {integrity: sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -7121,28 +7043,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) - '@typescript-eslint/utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.57.0(typescript@5.0.2) + '@typescript-eslint/utils': 5.57.0(eslint@8.37.0)(typescript@5.0.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.35.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + eslint: 8.37.0 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.52.0: - resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==} + /@typescript-eslint/types@5.57.0: + resolution: {integrity: sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@5.54.1: - resolution: {integrity: sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/typescript-estree@5.52.0(typescript@4.9.5): - resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==} + /@typescript-eslint/typescript-estree@5.57.0(typescript@5.0.2): + resolution: {integrity: sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -7150,76 +7067,47 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.52.0 - '@typescript-eslint/visitor-keys': 5.52.0 + '@typescript-eslint/types': 5.57.0 + '@typescript-eslint/visitor-keys': 5.57.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.54.1(typescript@4.9.5): - resolution: {integrity: sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.54.1 - '@typescript-eslint/visitor-keys': 5.54.1 - debug: 4.3.4(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.54.1(eslint@8.35.0)(typescript@4.9.5): - resolution: {integrity: sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==} + /@typescript-eslint/utils@5.57.0(eslint@8.37.0)(typescript@5.0.2): + resolution: {integrity: sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.54.1 - '@typescript-eslint/types': 5.54.1 - '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) - eslint: 8.35.0 + '@typescript-eslint/scope-manager': 5.57.0 + '@typescript-eslint/types': 5.57.0 + '@typescript-eslint/typescript-estree': 5.57.0(typescript@5.0.2) + eslint: 8.37.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.35.0) semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.52.0: - resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==} + /@typescript-eslint/visitor-keys@5.57.0: + resolution: {integrity: sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.52.0 - eslint-visitor-keys: 3.3.0 + '@typescript-eslint/types': 5.57.0 + eslint-visitor-keys: 3.4.0 dev: true - /@typescript-eslint/visitor-keys@5.54.1: - resolution: {integrity: sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.54.1 - eslint-visitor-keys: 3.3.0 - dev: true - - /@vitejs/plugin-react@3.1.0(vite@4.1.4): + /@vitejs/plugin-react@3.1.0(vite@4.2.1): resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -7230,61 +7118,60 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.3) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) transitivePeerDependencies: - supports-color dev: true - /@vitejs/plugin-vue@4.0.0(vite@4.1.4)(vue@3.2.47): - resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==} + /@vitejs/plugin-vue@4.1.0(vite@4.2.1)(vue@3.2.47): + resolution: {integrity: sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) vue: 3.2.47 - /@vitest/coverage-c8@0.29.2(vitest@0.29.2): - resolution: {integrity: sha512-NmD3WirQCeQjjKfHu4iEq18DVOBFbLn9TKVdMpyi5YW2EtnS+K22/WE+9/wRrepOhyeTxuEFgxUVkCAE1GhbnQ==} + /@vitest/coverage-c8@0.29.8(vitest@0.29.8): + resolution: {integrity: sha512-y+sEMQMctWokjnSqm3FCQEYFkjLrYaznsxEZHxcx8z2aftpYg3A5tvI1S5himfdEFo7o+OeHzh40bPSWZHW4oQ==} peerDependencies: vitest: '>=0.29.0 <1' dependencies: c8: 7.13.0 picocolors: 1.0.0 std-env: 3.3.2 - vitest: 0.29.2(happy-dom@8.9.0)(sass@1.58.3) + vitest: 0.29.8(happy-dom@8.9.0)(sass@1.60.0) dev: true - /@vitest/expect@0.29.2: - resolution: {integrity: sha512-wjrdHB2ANTch3XKRhjWZN0UueFocH0cQbi2tR5Jtq60Nb3YOSmakjdAvUa2JFBu/o8Vjhj5cYbcMXkZxn1NzmA==} + /@vitest/expect@0.29.8: + resolution: {integrity: sha512-xlcVXn5I5oTq6NiZSY3ykyWixBxr5mG8HYtjvpgg6KaqHm0mvhX18xuwl5YGxIRNt/A5jidd7CWcNHrSvgaQqQ==} dependencies: - '@vitest/spy': 0.29.2 - '@vitest/utils': 0.29.2 + '@vitest/spy': 0.29.8 + '@vitest/utils': 0.29.8 chai: 4.3.7 dev: true - /@vitest/runner@0.29.2: - resolution: {integrity: sha512-A1P65f5+6ru36AyHWORhuQBJrOOcmDuhzl5RsaMNFe2jEkoj0faEszQS4CtPU/LxUYVIazlUtZTY0OEZmyZBnA==} + /@vitest/runner@0.29.8: + resolution: {integrity: sha512-FzdhnRDwEr/A3Oo1jtIk/B952BBvP32n1ObMEb23oEJNO+qO5cBet6M2XWIDQmA7BDKGKvmhUf2naXyp/2JEwQ==} dependencies: - '@vitest/utils': 0.29.2 + '@vitest/utils': 0.29.8 p-limit: 4.0.0 pathe: 1.1.0 dev: true - /@vitest/spy@0.29.2: - resolution: {integrity: sha512-Hc44ft5kaAytlGL2PyFwdAsufjbdOvHklwjNy/gy/saRbg9Kfkxfh+PklLm1H2Ib/p586RkQeNFKYuJInUssyw==} + /@vitest/spy@0.29.8: + resolution: {integrity: sha512-VdjBe9w34vOMl5I5mYEzNX8inTxrZ+tYUVk9jxaZJmHFwmDFC/GV3KBFTA/JKswr3XHvZL+FE/yq5EVhb6pSAw==} dependencies: tinyspy: 1.1.1 dev: true - /@vitest/utils@0.29.2: - resolution: {integrity: sha512-F14/Uc+vCdclStS2KEoXJlOLAEyqRhnw0gM27iXw9bMTcyKRPJrQ+rlC6XZ125GIPvvKYMPpVxNhiou6PsEeYQ==} + /@vitest/utils@0.29.8: + resolution: {integrity: sha512-qGzuf3vrTbnoY+RjjVVIBYfuWMjn3UMUqyQtdGNZ6ZIIyte7B37exj6LaVkrZiUTvzSadVvO/tJm8AEgbGCBPg==} dependencies: cli-truncate: 3.1.0 diff: 5.1.0 loupe: 2.3.6 - picocolors: 1.0.0 pretty-format: 27.5.1 dev: true @@ -7507,12 +7394,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -7894,6 +7775,11 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -8671,6 +8557,15 @@ packages: engines: {node: '>=6'} dev: true + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + /camelcase@3.0.0: resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==} engines: {node: '>=0.10.0'} @@ -8851,8 +8746,8 @@ packages: chart.js: 4.2.1 dev: false - /chartjs-plugin-zoom@2.0.0(chart.js@4.2.1): - resolution: {integrity: sha512-bqpi7DGy9a5hX7ThKl/xQaLzXvneSwhS0w/lNimZ8AJaoRVMKz5JfUoqwciJYV5ixKXJbgyvwC9HcJnyVsYmjg==} + /chartjs-plugin-zoom@2.0.1(chart.js@4.2.1): + resolution: {integrity: sha512-ogOmLu6e+Q7E1XWOCOz9YwybMslz9qNfGV2a+qjfmqJYpsw5ZMoRHZBUyW+NGhkpQ5PwwPA/+rikHpBZb7PZuA==} peerDependencies: chart.js: '>=3.2.0' dependencies: @@ -9187,6 +9082,11 @@ packages: engines: {node: '>=0.1.90'} dev: false + /colors@1.2.5: + resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} + engines: {node: '>=0.1.90'} + dev: true + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -9218,7 +9118,6 @@ packages: /commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} - dev: false /common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} @@ -9450,6 +9349,7 @@ packages: /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} + hasBin: true dev: true /cssnano@3.10.0: @@ -9497,19 +9397,11 @@ packages: source-map: 0.5.7 dev: false - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: false - - /cssom@0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - dev: false - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} + /cssstyle@3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} dependencies: - cssom: 0.3.8 + rrweb-cssom: 0.6.0 dev: false /csstype@2.6.21: @@ -9528,8 +9420,8 @@ packages: uniq: 1.0.1 dev: false - /cypress@12.7.0: - resolution: {integrity: sha512-7rq+nmhzz0u6yabCFyPtADU2OOrYt6pvUau9qV7xyifJ/hnsaw/vkr0tnLlcuuQKUAOC1v1M1e4Z0zG7S0IAvA==} + /cypress@12.9.0: + resolution: {integrity: sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} hasBin: true requiresBuild: true @@ -9599,13 +9491,13 @@ packages: resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} engines: {node: '>= 12'} - /data-urls@3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} + /data-urls@4.0.0: + resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} + engines: {node: '>=14'} dependencies: abab: 2.0.6 whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 + whatwg-url: 12.0.1 dev: false /date-fns@2.29.3: @@ -9657,13 +9549,20 @@ packages: /debuglog@1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - dev: false - /decimal.js@10.4.2: - resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: false /decode-bmp@0.2.1: @@ -9908,6 +9807,11 @@ packages: - supports-color dev: true + /diff-sequences@28.1.1: + resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + /diff-sequences@29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -10465,35 +10369,6 @@ packages: esbuild-windows-arm64: 0.14.42 dev: false - /esbuild@0.16.17: - resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.16.17 - '@esbuild/android-arm64': 0.16.17 - '@esbuild/android-x64': 0.16.17 - '@esbuild/darwin-arm64': 0.16.17 - '@esbuild/darwin-x64': 0.16.17 - '@esbuild/freebsd-arm64': 0.16.17 - '@esbuild/freebsd-x64': 0.16.17 - '@esbuild/linux-arm': 0.16.17 - '@esbuild/linux-arm64': 0.16.17 - '@esbuild/linux-ia32': 0.16.17 - '@esbuild/linux-loong64': 0.16.17 - '@esbuild/linux-mips64el': 0.16.17 - '@esbuild/linux-ppc64': 0.16.17 - '@esbuild/linux-riscv64': 0.16.17 - '@esbuild/linux-s390x': 0.16.17 - '@esbuild/linux-x64': 0.16.17 - '@esbuild/netbsd-x64': 0.16.17 - '@esbuild/openbsd-x64': 0.16.17 - '@esbuild/sunos-x64': 0.16.17 - '@esbuild/win32-arm64': 0.16.17 - '@esbuild/win32-ia32': 0.16.17 - '@esbuild/win32-x64': 0.16.17 - /esbuild@0.17.14: resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==} engines: {node: '>=12'} @@ -10522,7 +10397,6 @@ packages: '@esbuild/win32-arm64': 0.17.14 '@esbuild/win32-ia32': 0.17.14 '@esbuild/win32-x64': 0.17.14 - dev: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -10564,6 +10438,20 @@ packages: optionalDependencies: source-map: 0.6.1 + /eslint-formatter-pretty@4.1.0: + resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==} + engines: {node: '>=10'} + dependencies: + '@types/eslint': 7.29.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + eslint-rule-docs: 1.1.235 + log-symbols: 4.1.0 + plur: 4.0.0 + string-width: 4.2.3 + supports-hyperlinks: 2.3.0 + dev: true + /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: @@ -10574,7 +10462,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.52.0)(eslint-import-resolver-node@0.3.7)(eslint@8.34.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.57.0)(eslint-import-resolver-node@0.3.7)(eslint@8.37.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -10595,44 +10483,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.52.0(eslint@8.34.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.57.0(eslint@8.37.0)(typescript@5.0.2) debug: 3.2.7(supports-color@8.1.1) - eslint: 8.34.0 + eslint: 8.37.0 eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-node@0.3.7)(eslint@8.35.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5) - debug: 3.2.7(supports-color@8.1.1) - eslint: 8.35.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.52.0)(eslint@8.34.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.57.0)(eslint@8.37.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -10642,15 +10501,15 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.52.0(eslint@8.34.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.57.0(eslint@8.37.0)(typescript@5.0.2) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.34.0 + eslint: 8.37.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.52.0)(eslint-import-resolver-node@0.3.7)(eslint@8.34.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.57.0)(eslint-import-resolver-node@0.3.7)(eslint@8.37.0) has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -10665,57 +10524,28 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.54.1)(eslint@8.35.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7(supports-color@8.1.1) - doctrine: 2.1.0 - eslint: 8.35.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-node@0.3.7)(eslint@8.35.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-vue@9.9.0(eslint@8.35.0): - resolution: {integrity: sha512-YbubS7eK0J7DCf0U2LxvVP7LMfs6rC6UltihIgval3azO3gyDwEGVgsCMe1TmDiEkl6GdMKfRpaME6QxIYtzDQ==} + /eslint-plugin-vue@9.10.0(eslint@8.37.0): + resolution: {integrity: sha512-2MgP31OBf8YilUvtakdVMc8xVbcMp7z7/iQj8LHVpXrSXHPXSJRUIGSPFI6b6pyCx/buKaFJ45ycqfHvQRiW2g==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.35.0 - eslint-utils: 3.0.0(eslint@8.35.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) + eslint: 8.37.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.11 semver: 7.3.8 - vue-eslint-parser: 9.1.0(eslint@8.35.0) + vue-eslint-parser: 9.1.0(eslint@8.37.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color dev: true + /eslint-rule-docs@1.1.235: + resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==} + dev: true + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -10732,90 +10562,25 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.34.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.34.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-utils@3.0.0(eslint@8.35.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.35.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - /eslint-visitor-keys@3.3.0: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.34.0: - resolution: {integrity: sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==} + /eslint-visitor-keys@3.4.0: + resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.11.8 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.34.0) - eslint-visitor-keys: 3.3.0 - espree: 9.4.1 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.19.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.2.0 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color dev: true - /eslint@8.35.0: - resolution: {integrity: sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==} + /eslint@8.37.0: + resolution: {integrity: sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 2.0.0 - '@eslint/js': 8.35.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) + '@eslint-community/regexpp': 4.5.0 + '@eslint/eslintrc': 2.0.2 + '@eslint/js': 8.37.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -10826,9 +10591,8 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.35.0) - eslint-visitor-keys: 3.3.0 - espree: 9.4.1 + eslint-visitor-keys: 3.4.0 + espree: 9.5.1 esquery: 1.4.2 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -10850,7 +10614,6 @@ packages: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 - regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -10864,7 +10627,16 @@ packages: dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.3.0 + eslint-visitor-keys: 3.4.0 + dev: true + + /espree@9.5.1: + resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.2 + acorn-jsx: 5.3.2(acorn@8.8.2) + eslint-visitor-keys: 3.4.0 dev: true /esprima@2.7.3: @@ -11291,8 +11063,8 @@ packages: resolution: {integrity: sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg==} dev: false - /fastify@4.14.1: - resolution: {integrity: sha512-yjrDeXe77j9gRlSV2UJry8mcFWbD0NQ5JYjnPi4tkFjHZVaG3/BD5wxOmRzGnHPC0YvaBJ0XWrIfFPl2IHRa1w==} + /fastify@4.15.0: + resolution: {integrity: sha512-m/CaRN8nf5uyYdrDe2qqq+0z3oGyE+A++qlKQoLJTI4WI0nWK9D6R3FxXQ3MVwt/md977GMR4F43pE9oqrS2zw==} dependencies: '@fastify/ajv-compiler': 3.5.0 '@fastify/error': 3.2.0 @@ -11300,7 +11072,7 @@ packages: abstract-logging: 2.0.1 avvio: 8.2.0 fast-content-type-parse: 1.0.0 - find-my-way: 7.4.0 + find-my-way: 7.6.0 light-my-request: 5.8.0 pino: 8.8.0 process-warning: 2.1.0 @@ -11461,8 +11233,8 @@ packages: pkg-dir: 4.2.0 dev: true - /find-my-way@7.4.0: - resolution: {integrity: sha512-JFT7eURLU5FumlZ3VBGnveId82cZz7UR7OUu+THQJOwdQXxmS/g8v0KLoFhv97HreycOrmAbqjXD/4VG2j0uMQ==} + /find-my-way@7.6.0: + resolution: {integrity: sha512-H7berWdHJ+5CNVr4ilLWPai4ml7Y2qAsxjw3pfeBxPigZmaDTzF0wjJLj90xRCmGcWYcyt050yN+34OZDJm1eQ==} engines: {node: '>=14'} dependencies: fast-deep-equal: 3.1.3 @@ -11694,11 +11466,20 @@ packages: universalify: 2.0.0 dev: true + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 dev: false @@ -12145,8 +11926,8 @@ packages: engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: true - /gsap@3.11.4: - resolution: {integrity: sha512-McHhEguHyExMMnjqKA8G+7TvxmlKQGMbjgwAilnFe1e4id7V/tFveRQ2YMZhTYu0oxHGWvbPltdVYQOu3z1SCA==} + /gsap@3.11.5: + resolution: {integrity: sha512-Q89nKCLgoX5xUjznh9LcaIUkz54k1voNucT1Rpf9SJNFIQznBwFqt5qUUQbeVInFyN/n18OUJkpeI6CNEDt74w==} dev: false /gulp-cli@2.3.0: @@ -12286,6 +12067,11 @@ packages: har-schema: 2.0.0 dev: false + /hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + /has-ansi@2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} @@ -12414,6 +12200,13 @@ packages: /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + /hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: true + /hpagent@1.2.0: resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} engines: {node: '>=14'} @@ -12600,6 +12393,11 @@ packages: resolve-from: 4.0.0 dev: true + /import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: true + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -12764,6 +12562,11 @@ packages: resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} engines: {node: '>= 10'} + /irregular-plurals@3.5.0: + resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} + engines: {node: '>=8'} + dev: true + /is-absolute-url@2.1.0: resolution: {integrity: sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==} engines: {node: '>=0.10.0'} @@ -13099,7 +12902,6 @@ packages: /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - dev: false /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} @@ -13379,7 +13181,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -13399,7 +13201,7 @@ packages: - supports-color dev: true - /jest-cli@29.5.0(@types/node@18.15.0): + /jest-cli@29.5.0(@types/node@18.15.11): resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -13416,7 +13218,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@18.15.0) + jest-config: 29.5.0(@types/node@18.15.11) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -13427,7 +13229,7 @@ packages: - ts-node dev: true - /jest-config@29.5.0(@types/node@18.15.0): + /jest-config@29.5.0(@types/node@18.15.11): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -13442,7 +13244,7 @@ packages: '@babel/core': 7.21.3 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 babel-jest: 29.5.0(@babel/core@7.21.3) chalk: 4.1.2 ci-info: 3.7.1 @@ -13466,6 +13268,16 @@ packages: - supports-color dev: true + /jest-diff@28.1.3: + resolution: {integrity: sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 28.1.1 + jest-get-type: 28.0.2 + pretty-format: 28.1.3 + dev: true + /jest-diff@29.5.0: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13501,11 +13313,25 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-mock: 29.5.0 jest-util: 29.5.0 dev: true + /jest-fetch-mock@3.0.3: + resolution: {integrity: sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==} + dependencies: + cross-fetch: 3.1.5 + promise-polyfill: 8.3.0 + transitivePeerDependencies: + - encoding + dev: true + + /jest-get-type@28.0.2: + resolution: {integrity: sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + /jest-get-type@29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13517,7 +13343,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.0 + '@types/node': 18.15.11 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -13568,7 +13394,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /jest-mock@29.5.0: @@ -13576,7 +13402,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-util: 29.5.0 dev: true @@ -13631,7 +13457,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -13662,7 +13488,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -13717,7 +13543,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.11 @@ -13742,7 +13568,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -13750,17 +13576,24 @@ packages: string-length: 4.0.2 dev: true + /jest-websocket-mock@2.4.0: + resolution: {integrity: sha512-AOwyuRw6fgROXHxMOiTDl1/T4dh3fV4jDquha5N0csS/PNp742HeTZWPAuKppVRSQ8s3fUGgJHoyZT9JDO0hMA==} + dependencies: + jest-diff: 28.1.3 + mock-socket: 9.2.1 + dev: true + /jest-worker@29.5.0: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.5.0(@types/node@18.15.0): + /jest@29.5.0(@types/node@18.15.11): resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -13773,13 +13606,17 @@ packages: '@jest/core': 29.5.0 '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0(@types/node@18.15.0) + jest-cli: 29.5.0(@types/node@18.15.11) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true + /joi@17.7.0: resolution: {integrity: sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==} dependencies: @@ -13891,8 +13728,8 @@ packages: - supports-color dev: true - /jsdom@21.1.0: - resolution: {integrity: sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg==} + /jsdom@21.1.1: + resolution: {integrity: sha512-Jjgdmw48RKcdAIQyUD1UdBh2ecH7VqwaXPN3ehoZN6MqgVbMn+lRm1aAT1AsdJRAJpwfa4IpwgzySn61h2qu3w==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -13901,12 +13738,11 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.1 + acorn: 8.8.2 acorn-globals: 7.0.1 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.2 - decimal.js: 10.4.2 + cssstyle: 3.0.0 + data-urls: 4.0.0 + decimal.js: 10.4.3 domexception: 4.0.0 escodegen: 2.0.0 form-data: 4.0.0 @@ -13916,6 +13752,7 @@ packages: is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.2 parse5: 7.1.2 + rrweb-cssom: 0.6.0 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.2 @@ -13923,8 +13760,8 @@ packages: webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - ws: 8.12.1 + whatwg-url: 12.0.1 + ws: 8.13.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -13985,7 +13822,6 @@ packages: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 - dev: false /jsonfile@5.0.0: resolution: {integrity: sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==} @@ -14035,8 +13871,8 @@ packages: verror: 1.10.0 dev: true - /jsrsasign@10.6.1: - resolution: {integrity: sha512-emiQ05haY9CRj1Ho/LiuCqr/+8RgJuWdiHYNglIg2Qjfz0n+pnUq9I2QHplXuOMO2EnAW1oCGC1++aU5VoWSlw==} + /jsrsasign@10.7.0: + resolution: {integrity: sha512-D5V2gGpYGtwbAtQHoglTVrpYf7QJuNoPEhaLOsTFONS2jXUl3qyR1hnYrNpASAybqQeiDYA3zGthR0ubgPRoQA==} dev: false /jssha@3.3.0: @@ -14117,7 +13953,7 @@ packages: dependencies: abort-controller: 3.0.0 ky: 0.30.0 - node-fetch: 3.3.0 + node-fetch: 3.3.1 dev: false /ky@0.30.0: @@ -14303,6 +14139,10 @@ packages: /lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: false @@ -14490,6 +14330,16 @@ packages: engines: {node: '>=0.10.0'} dev: false + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + /map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} dev: true @@ -14569,6 +14419,24 @@ packages: map-or-similar: 1.5.0 dev: true + /meow@9.0.0: + resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} + engines: {node: '>=10'} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 6.2.2 + decamelize: 1.2.0 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 + dev: true + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true @@ -14701,6 +14569,15 @@ packages: brace-expansion: 2.0.1 dev: true + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + /minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} @@ -14777,14 +14654,6 @@ packages: minipass: 3.3.6 yallist: 4.0.0 - /misskey-js@0.0.15: - resolution: {integrity: sha512-sCfQcPooD5Tfe/5pDr5JojAthhGot+hlidw67tj+7+AtZO5He3kBhsjJydY0vru6w3RFM5mzYR6SYISSBR/1WQ==} - dependencies: - autobind-decorator: 2.4.0 - eventemitter3: 4.0.7 - reconnecting-websocket: 4.4.0 - dev: false - /mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} @@ -14822,6 +14691,11 @@ packages: obliterator: 2.0.4 dev: false + /mock-socket@9.2.1: + resolution: {integrity: sha512-aw9F9T9G2zpGipLLhSNh6ZpgUyUl4frcVmRN08uE1NWPWg43Wx6+sGPDbQ7E5iFZZDJW5b5bypMeAEHqTbIFag==} + engines: {node: '>= 8'} + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -14870,10 +14744,10 @@ packages: msw: '>=0.35.0 <2.0.0' dependencies: is-node-process: 1.0.1 - msw: 1.1.0(typescript@4.9.5) + msw: 1.1.0(typescript@5.0.2) dev: true - /msw@1.1.0(typescript@4.9.5): + /msw@1.1.0(typescript@5.0.2): resolution: {integrity: sha512-oqMvUXm1bMbwvGpoXAQVz8vXXQyQyx52HBDg3EDOK+dFXkQHssgkXEG4LfMwwZyr2Qt18I/w04XPaY4BkFTkzA==} engines: {node: '>=14'} hasBin: true @@ -14902,7 +14776,7 @@ packages: path-to-regexp: 6.2.1 strict-event-emitter: 0.4.6 type-fest: 2.19.0 - typescript: 4.9.5 + typescript: 5.0.2 yargs: 17.6.2 transitivePeerDependencies: - encoding @@ -15058,6 +14932,10 @@ packages: resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==} dev: false + /node-addon-api@6.0.0: + resolution: {integrity: sha512-GyHvgPvUXBvAkXa0YvYnhilSB1A+FRYMpIVggKzPZqdaZfevZOuzfWzyvgzOwRLHBeo/MMswmJFsrNF4Nw1pmA==} + dev: false + /node-bitmap@0.0.1: resolution: {integrity: sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==} engines: {node: '>=v0.6.5'} @@ -15089,8 +14967,8 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-fetch@3.3.0: - resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} + /node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: data-uri-to-buffer: 4.0.0 @@ -15164,6 +15042,16 @@ packages: semver: 5.7.1 validate-npm-package-license: 3.0.4 + /normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.11.0 + semver: 7.3.8 + validate-npm-package-license: 3.0.4 + dev: true + /normalize-path@2.1.1: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} @@ -15508,8 +15396,8 @@ packages: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} dev: true - /otpauth@9.0.2: - resolution: {integrity: sha512-0TzpkJYg24VvIK3/K91HKpTtMlwm73UoThhcGY8fZsXcwHDrqf008rfdOjj3NnQuyuT11+vHyyO//qRzi6OZ9A==} + /otpauth@9.1.1: + resolution: {integrity: sha512-XhimxmkREwf6GJvV4svS9OVMFJ/qRGz+QBEGwtW5OMf9jZlx9yw25RZMXdrO6r7DHgfIaETJb1lucZXZtn3jgw==} dependencies: jssha: 3.3.0 dev: false @@ -15884,8 +15772,8 @@ packages: split2: 4.1.0 dev: false - /photoswipe@5.3.6: - resolution: {integrity: sha512-v7e8iMfaPUujTACYsK5HBCCtFoW9n2dMZmjIlbvFS2oSpTQmPrfc3PrWnGx8OGY3jNOKho8JC8L277+m+9ag9Q==} + /photoswipe@5.3.7: + resolution: {integrity: sha512-zsyLsTTLFrj0XR1m4/hO7qNooboFKUrDy+Zt5i2d6qjFPAtBjzaj/Xtydso4uxzcXpcqbTmyxDibb3BcSISseg==} engines: {node: '>= 0.12.0'} dev: false @@ -15995,6 +15883,13 @@ packages: extend-shallow: 3.0.2 dev: false + /plur@4.0.0: + resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==} + engines: {node: '>=10'} + dependencies: + irregular-plurals: 3.5.0 + dev: true + /pngjs-nozlib@1.0.0: resolution: {integrity: sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA==} engines: {iojs: '>= 1.0.0', node: '>=0.10.0'} @@ -16270,6 +16165,7 @@ packages: /prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} engines: {node: '>=10'} + hasBin: true dependencies: detect-libc: 2.0.1 expand-template: 2.0.3 @@ -16319,6 +16215,16 @@ packages: react-is: 17.0.2 dev: true + /pretty-format@28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /pretty-format@29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16397,6 +16303,10 @@ packages: resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} dev: false + /promise-polyfill@8.3.0: + resolution: {integrity: sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==} + dev: true + /promise-retry@2.0.1: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} @@ -16665,6 +16575,11 @@ packages: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: false + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -16709,6 +16624,7 @@ packages: /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 @@ -16745,12 +16661,12 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /react-docgen-typescript@2.2.2(typescript@4.9.5): + /react-docgen-typescript@2.2.2(typescript@5.0.2): resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: typescript: '>= 4.3.x' dependencies: - typescript: 4.9.5 + typescript: 5.0.2 dev: true /react-docgen@6.0.0-alpha.3: @@ -17091,11 +17007,6 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} @@ -17315,6 +17226,13 @@ packages: engines: {node: '>=10'} dev: true + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + dev: true + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true @@ -17391,13 +17309,17 @@ packages: seedrandom: 2.4.2 dev: false - /rollup@3.19.0: - resolution: {integrity: sha512-xZzJZlH9Ca6cosfdNGPwl2z7Pby8dTi9TrYLPeg6/j7aUoDOhBd706tCUFvbiBj45h/cS7z/a4gS8xd5Yg0jBw==} + /rollup@3.20.2: + resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 + /rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + dev: false + /rss-parser@3.12.0: resolution: {integrity: sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A==} dependencies: @@ -17477,9 +17399,10 @@ packages: postcss: 8.4.21 dev: false - /sass@1.58.3: - resolution: {integrity: sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==} + /sass@1.60.0: + resolution: {integrity: sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ==} engines: {node: '>=12.0.0'} + hasBin: true dependencies: chokidar: 3.5.3 immutable: 4.2.2 @@ -17649,6 +17572,21 @@ packages: tunnel-agent: 0.6.0 dev: false + /sharp@0.32.0: + resolution: {integrity: sha512-yLAypVcqj1toSAqRSwbs86nEzfyZVDYqjuUX8grhFpeij0DDNagKJXELS/auegDBRDg1XBtELdOGfo2X1cCpeA==} + engines: {node: '>=14.15.0'} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.1 + node-addon-api: 6.0.0 + prebuild-install: 7.1.1 + semver: 7.3.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -18110,6 +18048,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /string-argv@0.3.1: + resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + engines: {node: '>=0.6.19'} + dev: true + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -18301,6 +18244,14 @@ packages: dependencies: has-flag: 4.0.0 + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -18541,8 +18492,8 @@ packages: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} dev: false - /tinypool@0.3.1: - resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} + /tinypool@0.4.0: + resolution: {integrity: sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==} engines: {node: '>=14.0.0'} dev: true @@ -18657,9 +18608,9 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} + /tr46@4.1.1: + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} + engines: {node: '>=14'} dependencies: punycode: 2.3.0 dev: false @@ -18671,6 +18622,11 @@ packages: resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} dev: false + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + /trim-repeated@2.0.0: resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} engines: {node: '>=12'} @@ -18691,8 +18647,8 @@ packages: resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==} dev: true - /tsc-alias@1.8.3: - resolution: {integrity: sha512-/9JARcmXBrEqSuLjdSOqxY7/xI/AnvmBi4CU9/Ba2oX6Oq8vnd0OGSQTk+PIwqWJ5ZxskV0X/x15yzxCNTHU+g==} + /tsc-alias@1.8.5: + resolution: {integrity: sha512-Y3ka0olwSRdbHPyX5kXhYY2aoBKuT53DFdeY+PpQUR4hg5M/b8eIRmC8dL4FBdd0wT366iWc6iDUUGe6QwI7mg==} hasBin: true dependencies: chokidar: 3.5.3 @@ -18712,8 +18668,8 @@ packages: strip-bom: 3.0.0 dev: true - /tsconfig-paths@4.1.2: - resolution: {integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==} + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} dependencies: json5: 2.2.3 @@ -18721,20 +18677,34 @@ packages: strip-bom: 3.0.0 dev: false + /tsd@0.28.1: + resolution: {integrity: sha512-FeYrfJ05QgEMW/qOukNCr4fAJHww4SaKnivAXRv4g5kj4FeLpNV7zH4dorzB9zAfVX4wmA7zWu/wQf7kkcvfbw==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + '@tsd/typescript': 5.0.2 + eslint-formatter-pretty: 4.1.0 + globby: 11.1.0 + jest-diff: 29.5.0 + meow: 9.0.0 + path-exists: 4.0.0 + read-pkg-up: 7.0.1 + dev: true + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsutils@3.21.0(typescript@4.9.5): + /tsutils@3.21.0(typescript@5.0.2): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 5.0.2 dev: true /tunnel-agent@0.6.0: @@ -18771,6 +18741,11 @@ packages: engines: {node: '>=10'} dev: true + /type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -18902,9 +18877,16 @@ packages: - supports-color dev: false - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + /typescript@4.8.4: + resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /typescript@5.0.2: + resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} + engines: {node: '>=12.20'} + hasBin: true /ufo@1.1.1: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} @@ -18971,6 +18953,13 @@ packages: busboy: 1.6.0 dev: false + /undici@5.21.0: + resolution: {integrity: sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==} + engines: {node: '>=12.18'} + dependencies: + busboy: 1.6.0 + dev: false + /unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: true @@ -19105,7 +19094,6 @@ packages: /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - dev: false /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} @@ -19280,6 +19268,11 @@ packages: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 + /validator@13.9.0: + resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} + engines: {node: '>= 0.10'} + dev: true + /value-or-function@3.0.0: resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==} engines: {node: '>= 0.10'} @@ -19375,8 +19368,8 @@ packages: replace-ext: 1.0.1 dev: false - /vite-node@0.29.2(@types/node@18.15.0)(sass@1.58.3): - resolution: {integrity: sha512-5oe1z6wzI3gkvc4yOBbDBbgpiWiApvuN4P55E8OI131JGrSuo4X3SOZrNmZYo4R8Zkze/dhi572blX0zc+6SdA==} + /vite-node@0.29.8(@types/node@18.15.11)(sass@1.60.0): + resolution: {integrity: sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==} engines: {node: '>=v14.16.0'} hasBin: true dependencies: @@ -19385,7 +19378,7 @@ packages: mlly: 1.1.1 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) transitivePeerDependencies: - '@types/node' - less @@ -19396,17 +19389,17 @@ packages: - terser dev: true - /vite-plugin-restart@0.3.1(vite@4.1.4): + /vite-plugin-restart@0.3.1(vite@4.2.1): resolution: {integrity: sha512-LVe74MLUwaOzXVUgRGiphYbAYNgdGF6mP5vxj5BKcKkdmzvuuw79qcNgn9kHKKaIlCCjmOUiY3qlJ8jBSBUCoA==} peerDependencies: vite: ^2.9.0 || ^3.0.0 || ^4.0.0 dependencies: micromatch: 4.0.5 - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) dev: true - /vite@4.1.4(@types/node@18.15.0)(sass@1.58.3): - resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==} + /vite@4.2.1(@types/node@18.15.11)(sass@1.60.0): + resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -19430,29 +19423,29 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.0 - esbuild: 0.16.17 + '@types/node': 18.15.11 + esbuild: 0.17.14 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.19.0 - sass: 1.58.3 + rollup: 3.20.2 + sass: 1.60.0 optionalDependencies: fsevents: 2.3.2 - /vitest-fetch-mock@0.2.2(vitest@0.29.2): + /vitest-fetch-mock@0.2.2(vitest@0.29.8): resolution: {integrity: sha512-XmH6QgTSjCWrqXoPREIdbj40T7i1xnGmAsTAgfckoO75W1IEHKR8hcPCQ7SO16RsdW1t85oUm6pcQRLeBgjVYQ==} engines: {node: '>=14.14.0'} peerDependencies: vitest: '>=0.16.0' dependencies: cross-fetch: 3.1.5 - vitest: 0.29.2(happy-dom@8.9.0)(sass@1.58.3) + vitest: 0.29.8(happy-dom@8.9.0)(sass@1.60.0) transitivePeerDependencies: - encoding dev: true - /vitest@0.29.2(happy-dom@8.9.0)(sass@1.58.3): - resolution: {integrity: sha512-ydK9IGbAvoY8wkg29DQ4ivcVviCaUi3ivuPKfZEVddMTenFHUfB8EEDXQV8+RasEk1ACFLgMUqAaDuQ/Nk+mQA==} + /vitest@0.29.8(happy-dom@8.9.0)(sass@1.60.0): + resolution: {integrity: sha512-JIAVi2GK5cvA6awGpH0HvH/gEG9PZ0a/WoxdiV3PmqK+3CjQMf8c+J/Vhv4mdZ2nRyXFw66sAg6qz7VNkaHfDQ==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: @@ -19461,6 +19454,9 @@ packages: '@vitest/ui': '*' happy-dom: '*' jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -19472,14 +19468,20 @@ packages: optional: true jsdom: optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.0 - '@vitest/expect': 0.29.2 - '@vitest/runner': 0.29.2 - '@vitest/spy': 0.29.2 - '@vitest/utils': 0.29.2 + '@types/node': 18.15.11 + '@vitest/expect': 0.29.8 + '@vitest/runner': 0.29.8 + '@vitest/spy': 0.29.8 + '@vitest/utils': 0.29.8 acorn: 8.8.2 acorn-walk: 8.2.0 cac: 6.7.14 @@ -19493,10 +19495,10 @@ packages: std-env: 3.3.2 strip-literal: 1.0.1 tinybench: 2.4.0 - tinypool: 0.3.1 + tinypool: 0.4.0 tinyspy: 1.1.1 - vite: 4.1.4(@types/node@18.15.0)(sass@1.58.3) - vite-node: 0.29.2(@types/node@18.15.0)(sass@1.58.3) + vite: 4.2.1(@types/node@18.15.11)(sass@1.60.0) + vite-node: 0.29.8(@types/node@18.15.11)(sass@1.60.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -19529,14 +19531,14 @@ packages: - vue dev: true - /vue-eslint-parser@9.1.0(eslint@8.35.0): + /vue-eslint-parser@9.1.0(eslint@8.37.0): resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4(supports-color@8.1.1) - eslint: 8.35.0 + eslint: 8.37.0 eslint-scope: 7.1.1 eslint-visitor-keys: 3.3.0 espree: 9.4.1 @@ -19578,7 +19580,7 @@ packages: he: 1.2.0 dev: true - /vue-tsc@1.2.0(typescript@4.9.5): + /vue-tsc@1.2.0(typescript@5.0.2): resolution: {integrity: sha512-rIlzqdrhyPYyLG9zxsVRa+JEseeS9s8F2BbVVVWRRsTZvJO2BbhLEb2HW3MY+DFma0378tnIqs+vfTzbcQtRFw==} hasBin: true peerDependencies: @@ -19586,7 +19588,7 @@ packages: dependencies: '@volar/vue-language-core': 1.2.0 '@volar/vue-typescript': 1.2.0 - typescript: 4.9.5 + typescript: 5.0.2 dev: true /vue@2.7.14: @@ -19721,11 +19723,11 @@ packages: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - /whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} - engines: {node: '>=12'} + /whatwg-url@12.0.1: + resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==} + engines: {node: '>=14'} dependencies: - tr46: 3.0.0 + tr46: 4.1.1 webidl-conversions: 7.0.0 dev: false @@ -19888,8 +19890,8 @@ packages: async-limiter: 1.0.1 dev: true - /ws@8.12.1: - resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==} + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -20059,6 +20061,18 @@ packages: engines: {node: '>=12.20'} dev: true + /z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.9.0 + optionalDependencies: + commander: 9.5.0 + dev: true + /zip-stream@4.1.0: resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==} engines: {node: '>= 10'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 334ff382e5..ead1764a56 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,3 +2,4 @@ packages: - 'packages/backend' - 'packages/frontend' - 'packages/sw' + - 'packages/misskey-js'