diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 89392011..0600ec79 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,6 @@ name: Build on: pull_request -env: - AWS_REGION: us-east-1 - jobs: build: strategy: @@ -22,16 +19,6 @@ jobs: with: node-version: 20.18.0 - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 - with: - aws-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} - aws-region: ${{ env.AWS_REGION }} - - - name: Push build to R2 - run: aws s3 sync ./docs s3://${{ vars.BUILDS_BUCKET_NAME }} - - name: Install dependencies run: yarn @@ -58,7 +45,9 @@ jobs: MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_STAGING_CHECKOUT_URL }} MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }} RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }} + RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.RENDERER_VITE_EXTERNAL_RESOURCES_URL }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.MAIN_VITE_EXTERNAL_RESOURCES_URL }} - name: Build Windows if: matrix.os == 'windows-latest' @@ -69,7 +58,21 @@ jobs: MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_STAGING_CHECKOUT_URL }} MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }} RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }} + RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.RENDERER_VITE_EXTERNAL_RESOURCES_URL }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.MAIN_VITE_EXTERNAL_RESOURCES_URL }} + + - name: Test Upload build + env: + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }} + S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }} + S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }} + S3_BUILDS_BUCKET_NAME: ${{ secrets.S3_BUILDS_BUCKET_NAME }} + BUILDS_URL: ${{ secrets.BUILDS_URL }} + BUILD_WEBHOOK_URL: ${{ secrets.BUILD_WEBHOOK_URL }} + GITHUB_ACTOR: ${{ github.actor }} + run: node scripts/upload-build.cjs - name: Create artifact uses: actions/upload-artifact@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ff97c937..2f1d3188 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -47,7 +47,9 @@ jobs: MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_CHECKOUT_URL }} MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }} RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }} + RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.RENDERER_VITE_EXTERNAL_RESOURCES_URL }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.MAIN_VITE_EXTERNAL_RESOURCES_URL }} - name: Build Windows if: matrix.os == 'windows-latest' run: yarn build:win @@ -57,7 +59,9 @@ jobs: MAIN_VITE_CHECKOUT_URL: ${{ vars.MAIN_VITE_CHECKOUT_URL }} MAIN_VITE_ANALYTICS_API_URL: ${{ vars.MAIN_VITE_ANALYTICS_API_URL }} RENDERER_VITE_INTERCOM_APP_ID: ${{ vars.RENDERER_VITE_INTERCOM_APP_ID }} + RENDERER_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.RENDERER_VITE_EXTERNAL_RESOURCES_URL }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAIN_VITE_EXTERNAL_RESOURCES_URL: ${{ vars.MAIN_VITE_EXTERNAL_RESOURCES_URL }} - name: Create artifact uses: actions/upload-artifact@v4 with: diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..94329086 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.9.20 diff --git a/README.md b/README.md index cf014c63..f873a671 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

@@ -125,6 +125,10 @@ cd hydra yarn ``` +### Install OpenSSL 1.1 + +[OpenSSL 1.1](https://slproweb.com/download/Win64OpenSSL-1_1_1w.exe) is required by libtorrent in Windows environments. + ### Install Python 3.9 Ensure you have Python 3.9 installed on your machine. You can download and install it from [python.org](https://www.python.org/downloads/release/python-3913/). diff --git a/docs/README.be.md b/docs/README.be.md index 2bdde26d..51d9552e 100644 --- a/docs/README.be.md +++ b/docs/README.be.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.cs.md b/docs/README.cs.md index 30bb39b7..ce45e990 100644 --- a/docs/README.cs.md +++ b/docs/README.cs.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.da.md b/docs/README.da.md index 79513fe3..979d03f7 100644 --- a/docs/README.da.md +++ b/docs/README.da.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.de.md b/docs/README.de.md index 45ef0fec..f9b27a62 100644 --- a/docs/README.de.md +++ b/docs/README.de.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.es.md b/docs/README.es.md index 4209e94f..d47cf134 100644 --- a/docs/README.es.md +++ b/docs/README.es.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.et.md b/docs/README.et.md index c54c5b71..50df3536 100644 --- a/docs/README.et.md +++ b/docs/README.et.md @@ -1,6 +1,6 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.fr.md b/docs/README.fr.md index 0c35e059..65604a0a 100644 --- a/docs/README.fr.md +++ b/docs/README.fr.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.it.md b/docs/README.it.md index e87cf28e..dea63eb2 100644 --- a/docs/README.it.md +++ b/docs/README.it.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.nb.md b/docs/README.nb.md index 1ec4744b..b821799e 100644 --- a/docs/README.nb.md +++ b/docs/README.nb.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.pl.md b/docs/README.pl.md index 2fb31a6d..59ef046b 100644 --- a/docs/README.pl.md +++ b/docs/README.pl.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.pt-BR.md b/docs/README.pt-BR.md index 7a2971c8..f9ba9d66 100644 --- a/docs/README.pt-BR.md +++ b/docs/README.pt-BR.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

@@ -14,7 +14,7 @@ [![release](https://img.shields.io/github/package-json/v/hydralauncher/hydra)](https://github.com/hydralauncher/hydra/releases) [![pt-BR](https://img.shields.io/badge/lang-pt--BR-green.svg)](README.pt-BR.md) -[![en](https://img.shields.io/badge/lang-en-red.svg)](README.md) +[![en](https://img.shields.io/badge/lang-en-red.svg)](../README.md) [![ru](https://img.shields.io/badge/lang-ru-yellow.svg)](README.ru.md) [![uk-UA](https://img.shields.io/badge/lang-uk--UA-blue)](README.uk-UA.md) [![be](https://img.shields.io/badge/lang-be-orange)](README.be.md) diff --git a/docs/README.ru.md b/docs/README.ru.md index 1ce831f7..57a75cde 100644 --- a/docs/README.ru.md +++ b/docs/README.ru.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/docs/README.uk-UA.md b/docs/README.uk-UA.md index 8fec8508..e6189126 100644 --- a/docs/README.uk-UA.md +++ b/docs/README.uk-UA.md @@ -2,7 +2,7 @@
-[](https://hydralauncher.site) +[](https://help.hydralauncher.gg)

Hydra Launcher

diff --git a/package.json b/package.json index d3a2bab9..848eac78 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hydralauncher", - "version": "3.0.5", + "version": "3.0.8", "description": "Hydra", "main": "./out/main/index.js", "author": "Los Broxas", @@ -23,7 +23,7 @@ "start": "electron-vite preview", "dev": "electron-vite dev", "build": "npm run typecheck && electron-vite build", - "postinstall": "electron-builder install-app-deps && node ./postinstall.cjs", + "postinstall": "electron-builder install-app-deps && node ./scripts/postinstall.cjs", "build:unpack": "npm run build && electron-builder --dir", "build:win": "electron-vite build && electron-builder --win", "build:mac": "electron-vite build && electron-builder --mac", @@ -34,26 +34,25 @@ "dependencies": { "@electron-toolkit/preload": "^3.0.0", "@electron-toolkit/utils": "^3.0.0", - "@fontsource/noto-sans": "^5.0.22", - "@hookform/resolvers": "^3.9.0", - "@intercom/messenger-js-sdk": "^0.0.14", + "@fontsource/noto-sans": "^5.1.0", + "@hookform/resolvers": "^3.9.1", "@primer/octicons-react": "^19.9.0", "@radix-ui/react-dropdown-menu": "^2.1.2", "@reduxjs/toolkit": "^2.2.3", "@vanilla-extract/css": "^1.14.2", - "@vanilla-extract/dynamic": "^2.1.1", + "@vanilla-extract/dynamic": "^2.1.2", "@vanilla-extract/recipes": "^0.5.2", "auto-launch": "^5.0.6", - "axios": "^1.7.7", - "better-sqlite3": "^11.3.0", + "axios": "^1.7.9", + "better-sqlite3": "^11.7.0", "check-disk-space": "^3.4.0", "classnames": "^2.5.1", "color": "^4.2.3", "color.js": "^1.2.0", "create-desktop-shortcuts": "^1.11.0", "date-fns": "^3.6.0", - "dexie": "^4.0.9", - "electron-log": "^5.2.0", + "dexie": "^4.0.10", + "electron-log": "^5.2.4", "electron-updater": "^6.3.9", "file-type": "^19.6.0", "flexsearch": "^0.7.43", @@ -74,14 +73,15 @@ "sudo-prompt": "^9.2.1", "tar": "^7.4.3", "typeorm": "^0.3.20", - "user-agents": "^1.1.193", - "yaml": "^2.4.1", - "yup": "^1.4.0", - "zod": "^3.23.8" + "user-agents": "^1.1.387", + "yaml": "^2.6.1", + "yup": "^1.5.0", + "zod": "^3.24.1" }, "devDependencies": { - "@commitlint/cli": "^19.5.0", - "@commitlint/config-conventional": "^19.5.0", + "@aws-sdk/client-s3": "^3.705.0", + "@commitlint/cli": "^19.6.0", + "@commitlint/config-conventional": "^19.6.0", "@electron-toolkit/eslint-config-prettier": "^2.0.0", "@electron-toolkit/eslint-config-ts": "^2.0.0", "@electron-toolkit/tsconfig": "^1.0.1", @@ -89,8 +89,8 @@ "@types/auto-launch": "^5.0.5", "@types/color": "^3.0.6", "@types/folder-hash": "^4.0.4", - "@types/jsdom": "^21.1.6", - "@types/jsonwebtoken": "^9.0.6", + "@types/jsdom": "^21.1.7", + "@types/jsonwebtoken": "^9.0.7", "@types/lodash-es": "^4.17.12", "@types/node": "^20.12.7", "@types/parse-torrent": "^5.8.7", @@ -100,15 +100,15 @@ "@types/user-agents": "^1.0.4", "@vanilla-extract/vite-plugin": "^4.0.7", "@vitejs/plugin-react": "^4.2.1", - "electron": "^30.3.0", + "electron": "^31.7.6", "electron-builder": "^25.1.8", "electron-vite": "^2.0.0", "eslint": "^8.56.0", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^4.6.0", - "husky": "^9.0.11", - "prettier": "^3.2.4", + "husky": "^9.1.7", + "prettier": "^3.4.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass-embedded": "^1.80.6", diff --git a/postinstall.cjs b/scripts/postinstall.cjs similarity index 100% rename from postinstall.cjs rename to scripts/postinstall.cjs diff --git a/scripts/upload-build.cjs b/scripts/upload-build.cjs new file mode 100644 index 00000000..9f19ca89 --- /dev/null +++ b/scripts/upload-build.cjs @@ -0,0 +1,64 @@ +const fs = require("node:fs"); +const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3"); +const path = require("node:path"); +const packageJson = require("../package.json"); + +if (!process.env.BUILD_WEBHOOK_URL) { + console.log("No BUILD_WEBHOOK_URL provided, skipping upload"); + process.exit(0); +} + +const s3 = new S3Client({ + region: "auto", + endpoint: process.env.S3_ENDPOINT, + forcePathStyle: true, + credentials: { + accessKeyId: process.env.S3_ACCESS_KEY_ID, + secretAccessKey: process.env.S3_SECRET_ACCESS_KEY, + }, +}); + +const dist = path.resolve(__dirname, "..", "dist"); + +const extensionsToUpload = [".deb", ".exe"]; + +fs.readdir(dist, async (err, files) => { + if (err) throw err; + + const uploads = await Promise.all( + files + .filter((file) => extensionsToUpload.includes(path.extname(file))) + .map(async (file) => { + console.log(`⌛️ Uploading ${file}...`); + const fileName = `${new Date().getTime()}-${file}`; + + const command = new PutObjectCommand({ + Bucket: process.env.S3_BUILDS_BUCKET_NAME, + Key: fileName, + Body: fs.createReadStream(path.resolve(dist, file)), + }); + + await s3.send(command); + + return { + url: `${process.env.BUILDS_URL}/${fileName}`, + name: fileName, + }; + }) + ); + + if (uploads.length > 0) { + await fetch(process.env.BUILD_WEBHOOK_URL, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + uploads, + branchName: process.env.BRANCH_NAME, + version: packageJson.version, + githubActor: process.env.GITHUB_ACTOR, + }), + }); + } +}); diff --git a/src/locales/ar/translation.json b/src/locales/ar/translation.json index 67628f95..156c3da4 100644 --- a/src/locales/ar/translation.json +++ b/src/locales/ar/translation.json @@ -1,33 +1,49 @@ { "language_name": "اَلْعَرَبِيَّةُ", + "app": { + "successfully_signed_in": "تم تسجيل الدخول بنجاح" + }, "home": { "featured": "مميّز", "surprise_me": "فاجئني", - "no_results": "لم يتم العثور على نتائج" + "no_results": "لم يتم العثور على نتائج", + "start_typing": "بدء الكتابة للبحث...", + "hot": "الأكثر رواجا الآن", + "weekly": "📅 أفضل ألعاب الأسبوع", + "achievements": "🏆 ألعاب للتغلب عليها" }, "sidebar": { "catalogue": "قائمة الألعاب", - "downloads": "التحميلات", + "downloads": "التنزيلات", "settings": "إعدادات", "my_library": "مكتبتي", "downloading_metadata": "{{title}} (جارٍ تنزيل البيانات الوصفية...)", - "paused": "{{title}} (متوقف)", - "downloading": "{{title}} ({{percentage}} - جارٍ التنزيل...)", + "paused": "{{title}} (متوقف مؤقتًا)", + "downloading": "{{title}} ({{percentage}} - جاري التنزيل...)", "filter": "بحث في المكتبة", - "home": "الرئيسية" + "home": "الرئيسية", + "queued": "{{title}} (في قائمة الانتظار)", + "game_has_no_executable": "لم يتم تحديد اللعبة القابلة للتنفيذ", + "sign_in": "تسجيل الدخول", + "friends": "أصدقاء", + "need_help": "بحاجة الى مساعدة؟" }, "header": { "search": "ابحث عن الألعاب", "home": "الرئيسية", "catalogue": "قائمة الألعاب", - "downloads": "التحميلات", + "downloads": "التنزيلات", "search_results": "نتائج البحث", - "settings": "إعدادات" + "settings": "إعدادات", + "version_available_install": "إصدار {{version}} متاح. ", + "version_available_download": "إصدار {{version}} متاح. " }, "bottom_panel": { - "no_downloads_in_progress": "لا يوجد تنزيلات جارية", - "downloading_metadata": "جارٍ تنزيل بيانات وصف {{title}}", - "downloading": "جارٍ تنزيل {{title}}… ({{percentage}} مكتملة) - الانتهاء {{eta}} - {{speed}}" + "no_downloads_in_progress": "لا توجد تنزيلات قيد التقدم", + "downloading_metadata": "جارٍ التنزيل {{title}} البيانات الوصفية...", + "downloading": "جارٍ التنزيل {{title}}… ({{percentage}} مكتملة) - الانتهاء {{eta}} - {{speed}}", + "calculating_eta": "جارٍ التنزيل {{title}}… ({{percentage}} مكتمل) - حساب الوقت المتبقي...", + "checking_files": "التحقق {{title}} ملفات…({{percentage}} مكتمل)" }, "catalogue": { "next_page": "الصفحة التالية", @@ -35,101 +51,242 @@ }, "game_details": { "open_download_options": "افتح خيارات التنزيل", - "download_options_zero": "لا يوجد خيار تنزيل", - "download_options_one": "{{count}} خيار تنزيل", - "download_options_other": "{{count}} خيار تنزيل", + "download_options_zero": "{{count}} خيارات التنزيل", "updated_at": "تم التحديث {{updated_at}}", - "install": "تثبيت", + "install": "ثَبَّتَ", "resume": "استئناف", "pause": "إيقاف", "cancel": "إلغاء", "remove": "إزالة", "space_left_on_disk": "{{space}} متبقية على القرص", "eta": "الوقت المتبقي {{eta}}", - "downloading_metadata": "جاري تنزيل البيانات الوصفية...", - "filter": "تصفية حزم إعادة التجميع", + "calculating_eta": "جارٍ حساب الوقت المتبقي…", + "downloading_metadata": "جارٍ تنزيل البيانات الوصفية…", + "filter": "إعادة حزم التصفية", "requirements": "متطلبات النظام", "minimum": "الحد الأدنى", - "recommended": "موصى به", - "release_date": "تم الإصدار في {{date}}", - "publisher": "نشر بواسطة {{publisher}}", + "recommended": "مُستَحسَن", + "paused": "متوقف مؤقتًا", + "release_date": "صدر بتاريخ {{date}}", + "publisher": "نشرت من قبل {{publisher}}", "hours": "ساعات", "minutes": "دقائق", "amount_hours": "{{amount}} ساعات", "amount_minutes": "{{amount}} دقائق", - "accuracy": "دقة {{accuracy}}%", - "add_to_library": "إضافة إلى المكتبة", + "accuracy": "{{accuracy}}٪ دقة", + "add_to_library": "أضف إلى المكتبة", "remove_from_library": "إزالة من المكتبة", - "no_downloads": "لا توجد تنزيلات متاحة", + "no_downloads": "لا التنزيلات المتاحة", "play_time": "تم اللعب لمدة {{amount}}", - "last_time_played": "آخر مرة لعبت {{period}}", - "not_played_yet": "لم تلعب {{title}} بعد", + "last_time_played": "لعبت آخر مرة {{period}}", + "not_played_yet": "أنت لم تلعب {{title}} حتى الآن", "next_suggestion": "الاقتراح التالي", "play": "لعب", - "deleting": "جاري حذف المثبت...", + "deleting": "جارٍ حذف المثبت…", "close": "إغلاق", - "playing_now": "قيد التشغيل الآن", + "playing_now": "قيداللعب الآن", "change": "تغيير", "repacks_modal_description": "اختر الحزمة التي تريد تنزيلها", - "select_folder_hint": "لتغيير المجلد الافتراضي، انتقل إلى الإعدادات", - "download_now": "تنزيل الآن", - "no_shop_details": "لم يتم استرداد تفاصيل المتجر.", + "select_folder_hint": "لتغيير المجلد الافتراضي، انتقل إلى <0>إعدادات", + "download_now": "قم بالتنزيل الآن", + "no_shop_details": "لا يمكن استرداد تفاصيل المتجر.", "download_options": "خيارات التنزيل", - "download_path": "مسار التنزيل", + "download_path": "مسار التحميل", "previous_screenshot": "لقطة الشاشة السابقة", "next_screenshot": "لقطة الشاشة التالية", - "screenshot": "لقطة شاشة {{number}}", - "open_screenshot": "افتح لقطة الشاشة {{number}}" + "screenshot": "لقطة الشاشة {{number}}", + "open_screenshot": "فتح لقطة الشاشة {{number}}", + "download_settings": "تحميل الإعدادات", + "downloader": "أداة التنزيل", + "select_executable": "يختار", + "no_executable_selected": "لم يتم تحديد أي ملف قابل للتنفيذ", + "open_folder": "افتح المجلد", + "open_download_location": "انظر الملفات التي تم تنزيلها", + "create_shortcut": "إنشاء اختصار سطح المكتب", + "clear": "واضح", + "remove_files": "إزالة الملفات", + "remove_from_library_title": "هل أنت متأكد؟", + "remove_from_library_description": "سيتم إزالة هذا {{game}} من مكتبتك", + "options": "خيارات", + "executable_section_title": "قابل للتنفيذ", + "executable_section_description": "مسار الملف الذي سيتم تنفيذه عند النقر فوق \"تشغيل\".", + "downloads_secion_title": "التنزيلات", + "downloads_section_description": "تحقق من التحديثات أو الإصدارات الأخرى من هذه اللعبة", + "danger_zone_section_title": "منطقة الخطر", + "danger_zone_section_description": "قم بإزالة هذه اللعبة من مكتبتك أو الملفات التي تم تنزيلها بواسطة Hydra", + "download_in_progress": "التنزيل قيد التقدم", + "download_paused": "تم إيقاف التنزيل مؤقتًا", + "last_downloaded_option": "آخر خيار تم تنزيله", + "create_shortcut_success": "تم إنشاء الاختصار بنجاح", + "create_shortcut_error": "حدث خطأ أثناء إنشاء الاختصار", + "nsfw_content_title": "تحتوي هذه اللعبة على محتوى غير مناسب", + "nsfw_content_description": "{{title}} يحتوي على محتوى قد لا يكون مناسبًا لجميع الأعمار. ", + "allow_nsfw_content": "اسمح", + "refuse_nsfw_content": "عُد", + "stats": "احصائيات", + "download_count": "التنزيلات", + "player_count": "اللاعبين النشطين", + "download_error": "خيار التنزيل هذا غير متوفر", + "download": "تحميل", + "executable_path_in_use": "قابل للتنفيذ قيد الاستخدام بالفعل بواسطة \"{{game}}\"", + "warning": "تحذير:", + "hydra_needs_to_remain_open": "لإجراء هذا التنزيل، يجب أن يظل Hydra مفتوحًا حتى اكتماله. ", + "achievements": "الإنجازات", + "achievements_count": "الإنجازات {{unlockedCount}}/{{achievementsCount}}", + "cloud_save": "حفظ السحابة", + "cloud_save_description": "احفظ تقدمك في السحابة واستمر في اللعب على أي جهاز", + "backups": "النسخ الاحتياطية", + "install_backup": "ثَبَّتَ", + "delete_backup": "يمسح", + "create_backup": "نسخة احتياطية جديدة", + "last_backup_date": "آخر نسخة احتياطية قيد التشغيل {{date}}", + "no_backup_preview": "لم يتم العثور على ألعاب محفوظة لهذا العنوان", + "restoring_backup": "استعادة النسخة الاحتياطية ({{progress}} مكتمل)…", + "uploading_backup": "جارٍ تحميل النسخة الاحتياطية…", + "no_backups": "لم تقم بإنشاء أي نسخ احتياطية لهذه اللعبة حتى الآن", + "backup_uploaded": "تم تحميل النسخة الاحتياطية", + "backup_deleted": "تم حذف النسخة الاحتياطية", + "backup_restored": "تمت استعادة النسخة الاحتياطية", + "see_all_achievements": "شاهد جميع الإنجازات", + "sign_in_to_see_achievements": "قم بتسجيل الدخول لرؤية الإنجازات", + "mapping_method_automatic": "تلقائي", + "mapping_method_manual": "يدوي", + "mapping_method_label": "طريقة رسم الخرائط", + "files_automatically_mapped": "تم تعيين الملفات تلقائيًا", + "no_backups_created": "لم يتم إنشاء نسخ احتياطية لهذه اللعبة", + "manage_files": "إدارة الملفات", + "loading_save_preview": "جارٍ البحث عن حفظ الألعاب...", + "wine_prefix": "بادئة النبيذ", + "wine_prefix_description": "بادئة Wine المستخدمة لتشغيل هذه اللعبة", + "no_download_option_info": "لا توجد معلومات متاحة", + "backup_deletion_failed": "فشل في حذف النسخة الاحتياطية", + "max_number_of_artifacts_reached": "تم الوصول إلى الحد الأقصى لعدد النسخ الاحتياطية لهذه اللعبة", + "achievements_not_sync": "لا تتم مزامنة إنجازاتك", + "manage_files_description": "إدارة الملفات التي سيتم نسخها احتياطيًا واستعادتها", + "select_folder": "حدد المجلد", + "backup_from": "نسخة احتياطية من {{date}}", + "custom_backup_location_set": "تعيين موقع النسخ الاحتياطي المخصص", + "no_directory_selected": "لم يتم تحديد أي دليل", + "download_options_one": "{{count}} خيار التنزيل", + "download_options_two": "{{count}} خيارات التنزيل", + "download_options_few": "{{count}} خيارات التنزيل", + "download_options_many": "{{count}} خيارات التنزيل", + "download_options_other": "{{count}} خيارات التنزيل" }, "activation": { - "title": "تفعيل هايدرا", + "title": "تفعيل Hydra", "installation_id": "معرف التثبيت:", "enter_activation_code": "أدخل رمز التفعيل الخاص بك", - "message": "إذا كنت لا تعرف أين تسأل عن هذا ، فلا يجب أن يكون لديك هذا.", - "activate": "تفعيل", - "loading": "جار التحميل…" + "message": "إذا كنت لا تعرف أين تطلب هذا، فلا ينبغي أن يكون لديك هذا.", + "activate": "فعل", + "loading": "تحميل…" }, "downloads": { "resume": "استئناف", "pause": "إيقاف مؤقت", "eta": "الوقت المتبقي {{eta}}", - "paused": "متوقفة مؤقتًا", - "verifying": "جار التحقق…", - "completed": "اكتمل", + "paused": "متوقف مؤقتًا", + "verifying": "جارٍ التحقق…", + "completed": "مكتمل", + "removed": "لم يتم تحميلها", "cancel": "إلغاء", "filter": "تصفية الألعاب التي تم تنزيلها", "remove": "إزالة", - "downloading_metadata": "جار تنزيل البيانات الوصفية…", - "deleting": "جار حذف المثبت…", + "downloading_metadata": "جارٍ تنزيل البيانات الوصفية…", + "deleting": "جارٍ حذف المثبت…", "delete": "إزالة المثبت", "delete_modal_title": "هل أنت متأكد؟", - "delete_modal_description": "سيؤدي هذا إلى إزالة جميع ملفات التثبيت من جهاز الكمبيوتر الخاص بك", - "install": "تثبيت" + "delete_modal_description": "سيؤدي هذا إلى إزالة كافة ملفات التثبيت من جهاز الكمبيوتر الخاص بك", + "install": "ثَبَّتَ", + "download_in_progress": "في تَقَدم", + "queued_downloads": "التنزيلات في قائمة الانتظار", + "downloads_completed": "مكتمل", + "queued": "في قائمة الانتظار", + "no_downloads_title": "هذا فارغ", + "no_downloads_description": "لم تقم بتنزيل أي شيء باستخدام Hydra بعد، ولكن لم يفت الأوان بعد للبدء.", + "checking_files": "جارٍ فحص الملفات…" }, "settings": { "downloads_path": "مسار التنزيلات", "change": "تحديث", - "notifications": "الإشعارات", + "notifications": "إشعارات", "enable_download_notifications": "عند اكتمال التنزيل", "enable_repack_list_notifications": "عند إضافة حزمة جديدة", - "real_debrid_api_token_label": "رمز واجهة برمجة التطبيقات (API) لـReal-Debrid ", - "quit_app_instead_hiding": "إنهاء هايدرا بدلاً من التصغير الى شريط الحالة", - "launch_with_system": "تشغيل هايدرا عند بدء تشغيل النظام", + "real_debrid_api_token_label": "رمز Real-Debrid API", + "quit_app_instead_hiding": "لا تخفي Hydra عند الإغلاق", + "launch_with_system": "قم بتشغيل Hydra عند بدء تشغيل النظام", "general": "عام", - "behavior": "السلوك", - "enable_real_debrid": "تفعيل Real-Debrid ", - "real_debrid_api_token_hint": "يمكنك الحصول على مفتاح API الخاص بك هنا", - "save_changes": "حفظ التغييرات" + "behavior": "سلوك", + "download_sources": "تحميل المصادر", + "language": "لغة", + "real_debrid_api_token": "رمز API", + "enable_real_debrid": "تمكين ريال ديبريد", + "real_debrid_description": "Real-Debrid هو برنامج تنزيل غير مقيد يسمح لك بتنزيل الملفات بسرعة، ولا يقتصر ذلك إلا على سرعة الإنترنت لديك.", + "real_debrid_invalid_token": "رمز API غير صالح", + "real_debrid_api_token_hint": "يمكنك الحصول على رمز API الخاص بك <0>هنا", + "real_debrid_free_account_error": "الحساب \"{{username}}\" هو حساب مجاني. يرجى الاشتراك في Real-Debrid", + "real_debrid_linked_message": "حساب \"{{username}}\"مرتبط", + "save_changes": "حفظ التغييرات", + "changes_saved": "تم حفظ التغييرات بنجاح", + "download_sources_description": "ستقوم Hydra بجلب روابط التنزيل من هذه المصادر. ", + "validate_download_source": "التحقق من صحة", + "remove_download_source": "إزالة", + "add_download_source": "أضف المصدر", + "download_count_zero": "{{countFormatted}} خيارات التنزيل", + "download_source_url": "تنزيل عنوان URL المصدر", + "add_download_source_description": "أدخل عنوان URL لملف .json", + "download_source_up_to_date": "محدث", + "download_source_errored": "خطأ", + "sync_download_sources": "مصادر المزامنة", + "removed_download_source": "تمت إزالة مصدر التنزيل", + "added_download_source": "تمت إضافة مصدر التنزيل", + "download_sources_synced": "تتم مزامنة جميع مصادر التنزيل", + "insert_valid_json_url": "أدخل عنوان URL صالحًا لـ JSON", + "found_download_option_zero": "وجد {{countFormatted}} خيارات التنزيل", + "import": "يستورد", + "public": "عام", + "private": "خاص", + "friends_only": "الأصدقاء فقط", + "privacy": "خصوصية", + "profile_visibility": "رؤية الملف الشخصي", + "profile_visibility_description": "اختر من يمكنه رؤية ملفك الشخصي ومكتبتك", + "required_field": "هذه الخانة مطلوبه", + "source_already_exists": "تمت إضافة هذا المصدر بالفعل", + "must_be_valid_url": "يجب أن يكون المصدر عنوان URL صالحًا", + "blocked_users": "المستخدمين المحظورين", + "user_unblocked": "تم إلغاء حظر المستخدم", + "enable_achievement_notifications": "عندما يتم فتح الإنجاز", + "launch_minimized": "تم تصغير إطلاق Hydra", + "disable_nsfw_alert": "تعطيل تنبيه NSFW", + "show_hidden_achievement_description": "إظهار وصف الإنجازات المخفية قبل فتحها", + "download_count_one": "{{countFormatted}} خيار التنزيل", + "download_count_two": "{{countFormatted}} خيارات التنزيل", + "download_count_few": "{{countFormatted}} خيارات التنزيل", + "download_count_many": "{{countFormatted}} خيارات التنزيل", + "download_count_other": "{{countFormatted}} خيارات التنزيل", + "found_download_option_one": "وجد {{countFormatted}} خيار التنزيل", + "found_download_option_two": "وجد {{countFormatted}} خيارات التنزيل", + "found_download_option_few": "وجد {{countFormatted}} خيارات التنزيل", + "found_download_option_many": "وجد {{countFormatted}} خيارات التنزيل", + "found_download_option_other": "وجد {{countFormatted}} خيارات التنزيل" }, "notifications": { - "download_complete": "تم التحميل", - "game_ready_to_install": "{{title}} جاهزة للتثبيت", - "repack_list_updated": "قائمة التجميعات المحدثة", - "repack_count_one": "{{count}} حزمة مضافة", - "repack_count_other": "{{count}} حزم مُضافة" + "download_complete": "اكتمل التنزيل", + "game_ready_to_install": "{{title}} جاهز للتثبيت", + "repack_list_updated": "تم تحديث قائمة إعادة التعبئة", + "new_update_available": "إصدار {{version}} متاح", + "restart_to_install_update": "أعد تشغيل Hydra لتثبيت التحديث", + "notification_achievement_unlocked_title": "تم فتح الإنجاز لـ {{game}}", + "notification_achievement_unlocked_body": "{{achievement}} وغيرها {{count}} تم فتحها", + "repack_count_zero": "{{count}} تمت إضافة العبوات", + "repack_count_one": "{{count}} تمت إضافة أعد حزم", + "repack_count_two": "{{count}} تمت إضافة العبوات", + "repack_count_few": "{{count}} تمت إضافة العبوات", + "repack_count_many": "{{count}} تمت إضافة العبوات", + "repack_count_other": "{{count}} تمت إضافة العبوات" }, "system_tray": { - "open": "فتح هايدرا", + "open": "افتح Hydra", "quit": "خروج" }, "game_card": { @@ -137,10 +294,109 @@ }, "binary_not_found_modal": { "title": "البرامج غير مثبتة", - "description": "لم يتم العثور على ملفات Wine أو Lutris التنفيذية على نظامك", - "instructions": "تحقق من الطريقة الصحيحة لتثبيت أي منها على توزيعة Linux الخاصة بك حتى تعمل اللعبة بشكل طبيعي" + "description": "لم يتم العثور على الملفات التنفيذية الخاصة بـ Wine أو Lutris على نظامك", + "instructions": "تحقق من الطريقة الصحيحة لتثبيت أي منها على توزيعة Linux لديك حتى تعمل اللعبة بشكل طبيعي" }, "modal": { - "close": "زر إغلاق" + "close": "زر الإغلاق" + }, + "forms": { + "toggle_password_visibility": "تبديل رؤية كلمة المرور" + }, + "user_profile": { + "amount_hours": "{{amount}} ساعات", + "amount_minutes": "{{amount}} دقائق", + "last_time_played": "لعبت آخر مرة {{period}}", + "activity": "النشاط الأخير", + "library": "مكتبة", + "total_play_time": "إجمالي وقت اللعب: {{amount}}", + "no_recent_activity_title": "هممم... لا شيء هنا", + "no_recent_activity_description": "لم تلعب أي مباراة مؤخرًا. ", + "display_name": "اسم العرض", + "saving": "توفير", + "save": "يحفظ", + "edit_profile": "تحرير الملف الشخصي", + "saved_successfully": "تم الحفظ بنجاح", + "try_again": "من فضلك، حاول مرة أخرى", + "sign_out_modal_title": "هل أنت متأكد؟", + "cancel": "إلغاء", + "successfully_signed_out": "تم تسجيل الخروج بنجاح", + "sign_out": "تسجيل الخروج", + "playing_for": "اللعب من أجل {{amount}}", + "sign_out_modal_text": "مكتبتك مرتبطة بحسابك الحالي. ", + "add_friends": "أضف أصدقاء", + "add": "يضيف", + "friend_code": "رمز الصديق", + "see_profile": "انظر الملف الشخصي", + "sending": "إرسال", + "friend_request_sent": "تم إرسال طلب الصداقة", + "friends": "أصدقاء", + "friends_list": "قائمة الأصدقاء", + "user_not_found": "لم يتم العثور على المستخدم", + "block_user": "حظر المستخدم", + "add_friend": "إضافة صديق", + "request_sent": "تم إرسال الطلب", + "request_received": "تم استلام الطلب", + "accept_request": "قبول الطلب", + "ignore_request": "تجاهل الطلب", + "cancel_request": "إلغاء الطلب", + "undo_friendship": "التراجع عن الصداقة", + "request_accepted": "تم قبول الطلب", + "user_blocked_successfully": "تم حظر المستخدم بنجاح", + "user_block_modal_text": "هذا سوف يمنع {{displayName}}", + "blocked_users": "المستخدمين المحظورين", + "unblock": "إلغاء الحظر", + "no_friends_added": "ليس لديك أي أصدقاء مضافين", + "pending": "قيد الانتظار", + "no_pending_invites": "ليس لديك أي دعوات معلقة", + "no_blocked_users": "ليس لديك أي مستخدمين محظورين", + "friend_code_copied": "تم نسخ رمز الصديق", + "undo_friendship_modal_text": "سيؤدي هذا إلى التراجع عن صداقتك معه {{displayName}}", + "privacy_hint": "لضبط من يمكنه رؤية هذا، انتقل إلى <0>إعدادات", + "locked_profile": "هذا الملف الشخصي خاص", + "image_process_failure": "فشل أثناء معالجة الصورة", + "required_field": "هذه الخانة مطلوبه", + "displayname_min_length": "يجب أن يتكون اسم العرض من 3 أحرف على الأقل", + "displayname_max_length": "يجب ألا يزيد طول اسم العرض عن 50 حرفًا", + "report_profile": "الإبلاغ عن هذا الملف الشخصي", + "report_reason": "لماذا تقوم بالإبلاغ عن هذا الملف الشخصي؟", + "report_description": "معلومات إضافية", + "report_description_placeholder": "معلومات إضافية", + "report": "تقرير", + "report_reason_hate": "خطاب الكراهية", + "report_reason_sexual_content": "المحتوى الجنسي", + "report_reason_violence": "عنف", + "report_reason_spam": "رسائل إلكترونية مزعجة", + "profile_reported": "تم الإبلاغ عن الملف الشخصي", + "your_friend_code": "رمز صديقك:", + "upload_banner": "تحميل لافتة", + "uploading_banner": "جارٍ تحميل البانر…", + "background_image_updated": "تم تحديث صورة الخلفية", + "report_reason_zero": "آخر", + "report_reason_one": "لماذا تقوم بالإبلاغ عن هذا الملف الشخصي؟", + "report_reason_two": "آخر", + "report_reason_few": "آخر", + "report_reason_many": "آخر", + "report_reason_other": "آخر" + }, + "achievement": { + "achievement_unlocked": "تم فتح الإنجاز", + "user_achievements": "{{displayName}}إنجازات", + "your_achievements": "إنجازاتك", + "unlocked_at": "مقفلة في:", + "subscription_needed": "مطلوب اشتراك Hydra Cloud لرؤية هذا المحتوى", + "new_achievements_unlocked": "مفتوح {{achievementCount}} انجازات جديدة من {{gameCount}} ألعاب", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} الإنجازات", + "achievements_unlocked_for_game": "مفتوح {{achievementCount}} انجازات جديدة ل {{gameTitle}}" + }, + "tour": { + "subscription_tour_title": "اشتراك Hydra كلاود", + "subscribe_now": "اشترك الآن", + "cloud_saving": "الحفظ السحابي", + "cloud_achievements": "احفظ إنجازاتك على السحابة", + "animated_profile_picture": "صور شخصية متحركة", + "premium_support": "دعم متميز", + "show_and_compare_achievements": "عرض ومقارنة إنجازاتك مع المستخدمين الآخرين", + "animated_profile_banner": "لافتة الملف الشخصي المتحركة" } } diff --git a/src/locales/bg/translation.json b/src/locales/bg/translation.json index f9999582..a1a5306f 100644 --- a/src/locales/bg/translation.json +++ b/src/locales/bg/translation.json @@ -29,7 +29,7 @@ "need_help": "Имате нужда от помощ??" }, "header": { - "search": "Търси игри", + "search": "Търсене", "home": "Начало", "catalogue": "Каталог", "downloads": "Изтегляния", @@ -65,7 +65,7 @@ "calculating_eta": "Калкулиране на оставащо време…", "downloading_metadata": "Изтегляне на метадата…", "filter": "Филтрирай repacks", - "requirements": "Състемни изисквания", + "requirements": "Системни изисквания", "minimum": "Минимални", "recommended": "Препоръчителни", "paused": "Паузирано", @@ -79,8 +79,8 @@ "add_to_library": "Добави в библиотеката", "remove_from_library": "Премахни от библиотеката", "no_downloads": "Няма налични изтегляния", - "play_time": "Играно {{amount}}", - "last_time_played": "Последно играно {{period}}", + "play_time": "Игрално време {{amount}}", + "last_time_played": "Последно пускане {{period}}", "not_played_yet": "Не сте играли {{title}} все още", "next_suggestion": "Следващо предложение", "play": "Пускане", @@ -110,7 +110,7 @@ "remove_from_library_description": "Това ще премахне {{game}} от Библиотеката", "options": "Опции", "executable_section_title": "Стартиращ файл", - "executable_section_description": "Пътят на файла, който ще се изпълни, когато се щракне върху \"Играй\"", + "executable_section_description": "Пътят на файла, който ще се изпълни, когато се щракне върху \"Пускане\"", "downloads_secion_title": "Свалени", "downloads_section_description": "Вижте актуализации или други версии на тази игра", "danger_zone_section_title": "Опасна зона", @@ -162,7 +162,7 @@ "no_download_option_info": "Няма налични данни", "backup_deletion_failed": "Неуспешно изтриване на резервно копие", "max_number_of_artifacts_reached": "Достигнат максимален брой резервни копия за тази игра", - "achievements_not_sync": "Постиженията ви не са синхронизирани", + "achievements_not_sync": "Постиженията не са синхронизирани", "manage_files_description": "Управлявайте кои файлове ще бъдат архивирани и възстановени", "select_folder": "Избери папка", "backup_from": "Резервно копие от {{date}}", @@ -198,7 +198,7 @@ "downloads_completed": "Приключени", "queued": "В опашка", "no_downloads_title": "Толкова е празно", - "no_downloads_description": "Все още не сте изтеглили нищо с Hydra, но никога не е късно да започнете..", + "no_downloads_description": "Все още не сте изтеглили нищо с Hydra, но никога не е късно да започнете...", "checking_files": "Проверка на файлове…" }, "settings": { @@ -331,7 +331,7 @@ "blocked_users": "Блокирани потребители", "unblock": "Отблокирай", "no_friends_added": "Не сте добавили приятели", - "pending": "Чакащо", + "pending": "Чакащи", "no_pending_invites": "Нямате чакащи покани", "no_blocked_users": "Нямате блокирани потребители", "friend_code_copied": "Приятелския код е копиран", diff --git a/src/locales/cs/translation.json b/src/locales/cs/translation.json index b5b602c5..d839fa46 100644 --- a/src/locales/cs/translation.json +++ b/src/locales/cs/translation.json @@ -6,7 +6,11 @@ "home": { "featured": "Doporučené", "surprise_me": "Překvap mě", - "no_results": "Výsledek nenalezen" + "no_results": "Výsledek nenalezen", + "start_typing": "Začni psát pro vyhledávání...", + "hot": "Teď populární", + "weekly": "📅 Nejlepší hry týdne", + "achievements": "🏆 Hry k překonání" }, "sidebar": { "catalogue": "Katalog", @@ -20,7 +24,9 @@ "home": "Domov", "queued": "{{title}} (V řadě)", "game_has_no_executable": "Hra nemá zvolen žádný spustitelný soubor", - "sign_in": "Přihlásit se" + "sign_in": "Přihlásit se", + "friends": "Přátelé", + "need_help": "Potřebujete pomoc?" }, "header": { "search": "Vyhledat hry", @@ -113,7 +119,54 @@ "download_paused": "Stahování pozastaveno", "last_downloaded_option": "Poslední stažená možnost", "create_shortcut_success": "Zástupce vytvořen úspěšně", - "create_shortcut_error": "Chyba při pokusu vytvořit zástupce" + "create_shortcut_error": "Chyba při pokusu vytvořit zástupce", + "nsfw_content_title": "Tahle hra obsahuje nevhodný obsah", + "nsfw_content_description": "{{title}} obsahuje obsah, který by nemusel být vhodný pro všechny věkové skupiny. Jste si jisti, že chcete pokračovat?", + "allow_nsfw_content": "Pokračovat", + "refuse_nsfw_content": "Jít zpět", + "stats": "Statistiky", + "download_count": "Stažení", + "player_count": "Aktivní hráči", + "download_error": "Tahle možnost stažení není dostupná", + "download": "Stáhnout", + "executable_path_in_use": "Spustitelný soubor již používá \"{{game}}\"", + "warning": "Varování", + "hydra_needs_to_remain_open": "Pro tohle stažení, musí Hydra zůstat otevřená až do konce stahování. Pokud Hydru zavřete dříve, postup stahování bude ztracen.", + "achievements": "Achievementy", + "achievements_count": "Achievementy {{unlockedCount}}/{{achievementsCount}}", + "cloud_save": "Uložení v cloudu", + "cloud_save_description": "Uložte si svůj postup v cloud a pokračujte v hraní na jakémkoliv zářízení", + "backups": "Zálohy", + "install_backup": "Nainstalovat", + "delete_backup": "Smazat", + "create_backup": "Vytvořit zálohu", + "last_backup_date": "Poslední záloha vytvořena {{date}}", + "no_backup_preview": "Žádné zálohy nebyly nalezeny pro tuhle hru", + "restoring_backup": "Obnovuji zálohu ({{progress}} hotovo)...", + "uploading_backup": "Nahrávání zálohy...", + "no_backups": "Nemáte zatím vytvořeny žádné zálohy pro tuto hru", + "backup_uploaded": "Záloha nahrána", + "backup_deleted": "Záloha odstraněna", + "backup_restored": "Záloha obnovena", + "see_all_achievements": "Zobrazit všechny achievementy", + "sign_in_to_see_achievements": "Musíte se přihlásit pro zobrazení achievementů", + "mapping_method_automatic": "Automaticky", + "mapping_method_manual": "Manuálně", + "mapping_method_label": "Metoda mapování", + "files_automatically_mapped": "Soubory automaticky zmapovány", + "no_backups_created": "Žádné zálohy nebyly vytvořeny pro tuto hru", + "manage_files": "Spravovat soubory", + "loading_save_preview": "Hledání uložených her...", + "wine_prefix": "Wine Prefix", + "wine_prefix_description": "Wine Prefix použit pro spuštění této hry", + "no_download_option_info": "Žádné informace nejsou dostupny", + "backup_deletion_failed": "Nepovedlo se odstranit zálohu", + "max_number_of_artifacts_reached": "Dosáhli jste maximálního počtu záloh pro tuto hru", + "achievements_not_sync": "Vaše achievementy nejsou synchronizovány", + "manage_files_description": "Spravovat, které soubory budou zálohovány a obnoveny", + "select_folder": "Vybrat složku", + "backup_from": "Zálohy z {{date}}", + "custom_backup_location_set": "Vlastní umístění záloh nastaveno" }, "activation": { "title": "Aktivovat hydru", @@ -189,7 +242,21 @@ "found_download_option_zero": "Nenalezena žádná možnost stahování", "found_download_option_one": "Nalezena {{countFormatted}} možnost stahování", "found_download_option_other": "Nalezeny {{countFormatted}} možnosti stahování", - "import": "Importovat" + "import": "Importovat", + "public": "Veřejné", + "private": "Soukromé", + "friends_only": "Pouze přátelé", + "privacy": "Soukromí", + "profile_visibility": "Viditelnost profilu", + "profile_visibility_description": "Vyberte si, kdo může vidět váš profil a knihovnu", + "required_field": "Toto pole je povinné", + "source_already_exists": "Tento zdroj byl již přidán", + "must_be_valid_url": "Zdroj musí být platký odkaz URL", + "blocked_users": "Zablokovaní uživatelé", + "user_unblocked": "Uživatel byl odblokován", + "enable_achievement_notifications": "Když je odemknut achievement", + "launch_minimized": "Spustit v minimalizovaném režimu", + "disable_nsfw_alert": "Deaktivovat upozornění na nevhodný obsah" }, "notifications": { "download_complete": "Stahování dokončeno", @@ -198,7 +265,9 @@ "repack_count_one": "{{count}} repack přidán", "repack_count_other": "{{count}} repacky přidány", "new_update_available": "Version {{version}} je dostupná", - "restart_to_install_update": "Restartuj Hydru pro aktualizaci" + "restart_to_install_update": "Restartuj Hydru pro aktualizaci", + "notification_achievement_unlocked_title": "Achievement pro {{game}} byl odemknut", + "notification_achievement_unlocked_body": "{{achievement}} a dalších {{count}} byly odemknuty" }, "system_tray": { "open": "Otevřít Hydru", @@ -266,6 +335,47 @@ "no_pending_invites": "Nemáte žádné příchozí žádosti", "no_blocked_users": "Nemáte nikoho zablokovaného", "friend_code_copied": "Kód přítele zkopírován", - "undo_friendship_modal_text": "Tímto zrušíte své přátelství s {{displayName}}" + "undo_friendship_modal_text": "Tímto zrušíte své přátelství s {{displayName}}", + "privacy_hint": "Pro změnu toho, kdo tohle může vidět, jděte do <0>Nastavení", + "locked_profile": "Tento profil je soukromý", + "image_process_failure": "Nastala chyba při zpracování obrázku", + "required_field": "Toto pole je povinné", + "displayname_min_length": "Uživatelské jméno musí být minimálně 3 znaky dlouhé", + "displayname_max_length": "Uživatelské jméno musí být maximálně 50 znaků dlouhé", + "report_profile": "Nahlásit profil", + "report_reason": "Proč nahlašujete tento profil?", + "report_description": "Přídavné informace", + "report_description_placeholder": "Přídavné informace", + "report": "Nahlásit", + "report_reason_hate": "Nenávistné projevy", + "report_reason_sexual_content": "Sexuální obsah", + "report_reason_violence": "Násilí", + "report_reason_spam": "Spam", + "report_reason_other": "Ostatní", + "profile_reported": "Profil nahlášen", + "your_friend_code": "Tvůj kód přítele:", + "upload_banner": "Nahrát banner profilu", + "uploading_banner": "Nahrávání banneru", + "background_image_updated": "Obrázek pozadí byl změněn" + }, + "achievement": { + "achievement_unlocked": "Achievement odemčen", + "user_achievements": "Achievementy uživatele {{displayName}}", + "your_achievements": "Vaše achievementy", + "unlocked_at": "Odemčeno:", + "subscription_needed": "Je vyžadováno předplatné Hydra Cloud pro zobrazení tohoto obsahu", + "new_achievements_unlocked": "Odemčeno {{achievementCount}} nových achievementů z {{gameCount}} her", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} achievementů", + "achievements_unlocked_for_game": "Odemčeno {{achievementCount}} nových achievementů pro {{gameTitle}}" + }, + "tour": { + "subscription_tour_title": "Předplatné Hydra Cloud", + "subscribe_now": "Připojit se", + "cloud_saving": "Ukládání v cloudu", + "cloud_achievements": "Ukládejte vaše achievementy do cloudu", + "animated_profile_picture": "Animované profilové obrázky", + "premium_support": "Prémiová podpora", + "show_and_compare_achievements": "Zobraz a porovnej achievementy s ostatními uživateli", + "animated_profile_banner": "Animovaný banner na profilu" } } diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 1b9cd254..f74cd8e3 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -105,6 +105,7 @@ "open_folder": "Open folder", "open_download_location": "See downloaded files", "create_shortcut": "Create desktop shortcut", + "clear": "Clear", "remove_files": "Remove files", "remove_from_library_title": "Are you sure?", "remove_from_library_description": "This will remove {{game}} from your library", @@ -166,7 +167,8 @@ "manage_files_description": "Manage which files will be backed up and restored", "select_folder": "Select folder", "backup_from": "Backup from {{date}}", - "custom_backup_location_set": "Custom backup location set" + "custom_backup_location_set": "Custom backup location set", + "no_directory_selected": "No directory selected" }, "activation": { "title": "Activate Hydra", @@ -261,7 +263,8 @@ "enable_achievement_notifications": "When an achievement is unlocked", "launch_minimized": "Launch Hydra minimized", "disable_nsfw_alert": "Disable NSFW alert", - "seed_after_download_complete": "Seed after download complete" + "seed_after_download_complete": "Seed after download complete", + "show_hidden_achievement_description": "Show hidden achievements description before unlocking them" }, "notifications": { "download_complete": "Download complete", diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index 2830eb0c..a766be1c 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -79,7 +79,7 @@ "add_to_library": "Agregar a la biblioteca", "remove_from_library": "Eliminar de la biblioteca", "no_downloads": "No hay descargas disponibles", - "play_time": "Jugado por {{amount}}", + "play_time": "Has jugado {{amount}}", "last_time_played": "Jugado por última vez: {{period}}", "not_played_yet": "Aún no has jugado a {{title}}", "next_suggestion": "Siguiente sugerencia", @@ -100,7 +100,7 @@ "open_screenshot": "Abrir captura {{number}}", "download_settings": "Ajustes de descarga", "downloader": "Método de descarga", - "select_executable": "Seleccionar ejecutable", + "select_executable": "Seleccionar", "no_executable_selected": "No se seleccionó un ejecutable", "open_folder": "Abrir carpeta", "open_download_location": "Ver archivos descargados", @@ -166,7 +166,9 @@ "manage_files_description": "Gestiona los archivos que serán respaldados y restaurados", "select_folder": "Seleccionar carpeta", "backup_from": "Copia de seguridad de {{date}}", - "custom_backup_location_set": "Se configuró la carpeta de copia de seguridad" + "custom_backup_location_set": "Se configuró la carpeta de copia de seguridad", + "clear": "Limpiar", + "no_directory_selected": "No se seleccionó un directório" }, "activation": { "title": "Activar Hydra", @@ -254,7 +256,9 @@ "must_be_valid_url": "La fuente debe ser una URL válida.", "blocked_users": "Usuarios bloqueados", "user_unblocked": "El usuario ha sido desbloqueado", - "enable_achievement_notifications": "Cuando un logro se desbloquea" + "enable_achievement_notifications": "Cuando un logro se desbloquea", + "launch_minimized": "Iniciar Hydra minimizado", + "disable_nsfw_alert": "Desactivar alerta NSFW" }, "notifications": { "download_complete": "Descarga completada", @@ -304,7 +308,7 @@ "cancel": "Cancelar", "successfully_signed_out": "Sesión cerrada exitosamente", "sign_out": "Cerrar sesión", - "playing_for": "Jugando por {{amount}}", + "playing_for": "Llevas jugando {{amount}}", "sign_out_modal_text": "Tu biblioteca se ha vinculado con tu cuenta. Cuando cierres sesión, tú biblioteca ya no será visible y cualquier progreso no se guardará. ¿Continuar con el cierre de sesión?", "add_friends": "Añadir amigos", "add": "Añadir", @@ -361,8 +365,10 @@ "user_achievements": "Logros de {{displayName}}", "your_achievements": "Tus Logros", "unlocked_at": "Desbloqueado el:", - "subscription_needed": "Se necesita una suscripción a Hydra Cloud se necesita para ver este contenido", - "new_achievements_unlocked": "Desbloqueados {{achievementCount}} nuevos logros de {{gameCount}} juegos" + "subscription_needed": "Se necesita una suscripción a Hydra Cloud necesita para ver este contenido", + "new_achievements_unlocked": "Desbloqueados {{achievementCount}} nuevos logros de {{gameCount}} juegos", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} logros", + "achievements_unlocked_for_game": "Se han desbloqueado {{achievementCount}} nuevos logros de {{gameTitle}}" }, "tour": { "subscription_tour_title": "Suscripción Hydra Cloud", diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json index 865083ef..92fe94ea 100644 --- a/src/locales/pt-BR/translation.json +++ b/src/locales/pt-BR/translation.json @@ -162,7 +162,9 @@ "backup_from": "Backup de {{date}}", "custom_backup_location_set": "Localização customizada selecionada", "select_folder": "Selecione a pasta", - "manage_files_description": "Gerencie quais arquivos serão feitos backup" + "manage_files_description": "Gerencie quais arquivos serão feitos backup", + "clear": "Limpar", + "no_directory_selected": "Nenhum diretório selecionado" }, "activation": { "title": "Ativação", @@ -257,7 +259,8 @@ "enable_achievement_notifications": "Quando uma conquista é desbloqueada", "launch_minimized": "Iniciar o Hydra minimizado", "disable_nsfw_alert": "Desativar alerta de conteúdo inapropriado", - "seed_after_download_complete": "Semear após a conclusão do download" + "seed_after_download_complete": "Semear após a conclusão do download", + "show_hidden_achievement_description": "Mostrar descrição de conquistas ocultas antes de debloqueá-las" }, "notifications": { "download_complete": "Download concluído", diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json index d1282951..8bf97eb7 100644 --- a/src/locales/ru/translation.json +++ b/src/locales/ru/translation.json @@ -4,12 +4,13 @@ "successfully_signed_in": "Успешный вход" }, "home": { - "featured": "Рекомендованное", + "featured": "Рекомендации", "surprise_me": "Удиви меня", "no_results": "Ничего не найдено", "hot": "Сейчас в топе", "start_typing": "Начинаю вводить текст для поиска...", - "weekly": "📅 Лучшие игры недели" + "weekly": "📅 Лучшие игры недели", + "achievements": "🏆 Игры, в которых нужно победить" }, "sidebar": { "catalogue": "Каталог", @@ -19,7 +20,7 @@ "downloading_metadata": "{{title}} (Загрузка метаданных…)", "paused": "{{title}} (Приостановлено)", "downloading": "{{title}} ({{percentage}} - Загрузка…)", - "filter": "Фильтр библиотеки", + "filter": "Поиск", "home": "Главная", "queued": "{{title}} (В очереди)", "game_has_no_executable": "Файл запуска игры не выбран", @@ -49,10 +50,10 @@ "previous_page": "Предыдущая страница" }, "game_details": { - "open_download_options": "Открыть варианты загрузки", - "download_options_zero": "Нет вариантов загрузки", - "download_options_one": "{{count}} вариант загрузки", - "download_options_other": "{{count}} вариантов загрузки", + "open_download_options": "Открыть источники", + "download_options_zero": "Нет источников", + "download_options_one": "{{count}} источник", + "download_options_other": "{{count}} источников", "updated_at": "Обновлено {{updated_at}}", "install": "Установить", "resume": "Возобновить", @@ -63,7 +64,7 @@ "eta": "Окончание {{eta}}", "calculating_eta": "Подсчёт оставшегося времени…", "downloading_metadata": "Загрузка метаданных…", - "filter": "Фильтр репаков", + "filter": "Поиск репаков", "requirements": "Системные требования", "minimum": "Минимальные", "recommended": "Рекомендуемые", @@ -77,7 +78,7 @@ "accuracy": "точность {{accuracy}}%", "add_to_library": "Добавить в библиотеку", "remove_from_library": "Удалить из библиотеки", - "no_downloads": "Нет доступных загрузок", + "no_downloads": "Нет доступных источников", "play_time": "Сыграно {{amount}}", "last_time_played": "Последний запуск {{period}}", "not_played_yet": "Вы ещё не играли в {{title}}", @@ -91,7 +92,7 @@ "select_folder_hint": "Чтобы изменить папку загрузок по умолчанию, откройте <0>Настройки", "download_now": "Загрузить сейчас", "no_shop_details": "Не удалось получить описание", - "download_options": "Вариантов загрузки", + "download_options": "Источники", "download_path": "Путь для загрузок", "previous_screenshot": "Предыдущий скриншот", "next_screenshot": "Следующий скриншот", @@ -119,16 +120,53 @@ "last_downloaded_option": "Последний вариант загрузки", "create_shortcut_success": "Ярлык создан", "create_shortcut_error": "Не удалось создать ярлык", - "allow_nsfw_content": "Продолжать", + "allow_nsfw_content": "Продолжить", "download": "Скачать", "download_count": "Загрузки", "download_error": "Этот вариант загрузки недоступен", "executable_path_in_use": "Исполняемый файл уже используется \"{{game}}\"", "nsfw_content_description": "{{title}} содержит контент, который может не подходить для всех возрастов. \nВы уверены, что хотите продолжить?", "nsfw_content_title": "Эта игра содержит неприемлемый контент", + "refuse_nsfw_content": "Назад", + "stats": "Статистика", "player_count": "Активные игроки", - "refuse_nsfw_content": "Возвращаться", - "stats": "Статистика" + "warning": "Внимание:", + "hydra_needs_to_remain_open": "Для этой загрузки Hydra должна оставаться открытой до завершения. Если Hydra закроется до завершения, вы потеряете прогресс.", + "achievements": "Достижения", + "achievements_count": "Достижения {{unlockedCount}}/{{achievementsCount}}", + "cloud_save": "Облачное сохранение", + "cloud_save_description": "Сохраняйте ваш прогресс в облаке и продолжайте играть на любом устройстве", + "backups": "Резервные копии", + "install_backup": "Установить", + "delete_backup": "Удалить", + "create_backup": "Создать новую резервную копию", + "last_backup_date": "Последняя резервная копия от {{date}}", + "no_backup_preview": "Сохранения для этого заголовка не найдены", + "restoring_backup": "Восстановление резервной копии ({{progress}} завершено)…", + "uploading_backup": "Загрузка резервной копии…", + "no_backups": "Вы еще не создали резервных копий для этой игры", + "backup_uploaded": "Резервная копия загружена", + "backup_deleted": "Резервная копия удалена", + "backup_restored": "Резервная копия восстановлена", + "see_all_achievements": "Просмотреть все достижения", + "sign_in_to_see_achievements": "Войдите, чтобы увидеть достижения", + "mapping_method_automatic": "Автоматическая", + "mapping_method_manual": "Ручная", + "mapping_method_label": "Метод сопоставления", + "files_automatically_mapped": "Файлы автоматически сопоставлены", + "no_backups_created": "Для этой игры не создано резервных копий", + "manage_files": "Управление файлами", + "loading_save_preview": "Поиск сохранений…", + "wine_prefix": "Префикс Wine", + "wine_prefix_description": "Префикс Wine, используемый для запуска этой игры", + "no_download_option_info": "Информация недоступна", + "backup_deletion_failed": "Не удалось удалить резервную копию", + "max_number_of_artifacts_reached": "Достигнуто максимальное количество резервных копий для этой игры", + "achievements_not_sync": "Ваши достижения не синхронизированы", + "manage_files_description": "Управляйте файлами, которые будут сохраняться и восстанавливаться", + "select_folder": "Выбрать папку", + "backup_from": "Резервная копия от {{date}}", + "custom_backup_location_set": "Установлено настраиваемое местоположение резервной копии" }, "activation": { "title": "Активировать Hydra", @@ -147,7 +185,7 @@ "completed": "Завершено", "removed": "Не скачано", "cancel": "Отмена", - "filter": "Фильтр загруженных игр", + "filter": "Поиск загруженных игр", "remove": "Удалить", "downloading_metadata": "Загрузка метаданных…", "deleting": "Удаление установщика…", @@ -168,10 +206,13 @@ "change": "Изменить", "notifications": "Уведомления", "enable_download_notifications": "По завершении загрузки", + "enable_achievement_notifications": "Когда достижение разблокировано", "enable_repack_list_notifications": "При добавлении нового репака", "real_debrid_api_token_label": "Real-Debrid API-токен", "quit_app_instead_hiding": "Закрывать приложение вместо сворачивания в трей", "launch_with_system": "Запускать Hydra вместе с системой", + "launch_minimized": "Запустить Hydra в свернутом виде", + "disable_nsfw_alert": "Отключить предупреждение о непристойном контенте", "general": "Основные", "behavior": "Поведение", "download_sources": "Источники загрузки", @@ -196,7 +237,7 @@ "add_download_source_description": "Вставьте ссылку на .json-файл", "download_source_up_to_date": "Обновлён", "download_source_errored": "Ошибка", - "sync_download_sources": "Синхронизировать источники", + "sync_download_sources": "Обновить источники", "removed_download_source": "Источник загрузок удален", "added_download_source": "Источник загрузок добавлен", "download_sources_synced": "Все источники загрузок синхронизированы", @@ -206,16 +247,17 @@ "found_download_option_other": "Найдено {{countFormatted}} вариантов загрузки", "import": "Импортировать", "blocked_users": "Заблокированные пользователи", - "friends_only": "Только друзья", + "friends_only": "Только для друзей", "must_be_valid_url": "Источник должен быть действительным URL-адресом.", "privacy": "Конфиденциальность", "private": "Частный", "profile_visibility": "Видимость профиля", "profile_visibility_description": "Выберите, кто может видеть ваш профиль и библиотеку", - "public": "Общественный", + "public": "Публичный", "required_field": "Это поле обязательно к заполнению", "source_already_exists": "Этот источник уже добавлен", - "user_unblocked": "Пользователь разблокирован" + "user_unblocked": "Пользователь разблокирован", + "show_hidden_achievement_description": "Показывать описание скрытых достижений перед их получением" }, "notifications": { "download_complete": "Загрузка завершена", @@ -223,15 +265,17 @@ "repack_list_updated": "Список репаков обновлен", "repack_count_one": "{{count}} репак добавлен", "repack_count_other": "{{count}} репаков добавлено", - "new_update_available": "Доступна версия {{version}}", - "restart_to_install_update": "Перезапустите Hydra для установки обновления" + "new_update_available": "Доступна новая версия {{version}}", + "restart_to_install_update": "Перезапустите Hydra для установки обновления", + "notification_achievement_unlocked_title": "Достижение разблокировано для {{game}}", + "notification_achievement_unlocked_body": "были разблокированы {{achievement}} и другие {{count}}" }, "system_tray": { "open": "Открыть Hydra", "quit": "Выйти" }, "game_card": { - "no_downloads": "Нет доступных загрузок" + "no_downloads": "Нет доступных источников" }, "binary_not_found_modal": { "title": "Программы не установлены", @@ -310,5 +354,25 @@ "report_reason_violence": "Насилие", "required_field": "Это поле обязательно к заполнению", "undo_friendship_modal_text": "Это отменит вашу дружбу с {{displayName}}." + }, + "achievement": { + "achievement_unlocked": "Достижение разблокировано", + "user_achievements": "Достижения {{displayName}}", + "your_achievements": "Ваши достижения", + "unlocked_at": "Разблокировано:", + "subscription_needed": "Для просмотра этого содержимого необходима подписка на Hydra Cloud", + "new_achievements_unlocked": "Разблокировано {{achievementCount}} новых достижений из {{gameCount}} игр", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} достижений", + "achievements_unlocked_for_game": "Разблокировано {{achievementCount}} новых достижений для {{gameTitle}}" + }, + "tour": { + "subscription_tour_title": "Подписка Hydra Cloud", + "subscribe_now": "Подпишитесь прямо сейчас", + "cloud_saving": "Сохранение в облаке", + "cloud_achievements": "Сохраняйте свои достижения в облаке", + "animated_profile_picture": "Анимированные фотографии профиля", + "premium_support": "Премиальная поддержка", + "show_and_compare_achievements": "Показывайте и сравнивайте свои достижения с достижениями других пользователей", + "animated_profile_banner": "Анимированный баннер профиля" } } diff --git a/src/main/entity/user-preferences.entity.ts b/src/main/entity/user-preferences.entity.ts index 24cfcc8f..a850b42f 100644 --- a/src/main/entity/user-preferences.entity.ts +++ b/src/main/entity/user-preferences.entity.ts @@ -44,6 +44,9 @@ export class UserPreferences { @Column("boolean", { default: true }) seedAfterDownloadComplete: boolean; + @Column("boolean", { default: false }) + showHiddenAchievementsDescription: boolean; + @CreateDateColumn() createdAt: Date; diff --git a/src/main/events/catalogue/get-how-long-to-beat.ts b/src/main/events/catalogue/get-how-long-to-beat.ts index 08b8fbf2..2a1492ef 100644 --- a/src/main/events/catalogue/get-how-long-to-beat.ts +++ b/src/main/events/catalogue/get-how-long-to-beat.ts @@ -1,16 +1,16 @@ import type { GameShop, HowLongToBeatCategory } from "@types"; -import { HydraApi } from "@main/services"; import { registerEvent } from "../register-event"; +import { HydraApi } from "@main/services"; const getHowLongToBeat = async ( _event: Electron.IpcMainInvokeEvent, - shop: GameShop, - objectId: string + objectId: string, + shop: GameShop ): Promise => { const params = new URLSearchParams({ + objectId, shop, - objectId: objectId.toString(), }); return HydraApi.get(`/games/how-long-to-beat?${params.toString()}`, null, { diff --git a/src/main/events/index.ts b/src/main/events/index.ts index 4a5175e3..fd89ba30 100644 --- a/src/main/events/index.ts +++ b/src/main/events/index.ts @@ -1,4 +1,4 @@ -import { appVersion, defaultDownloadsPath } from "@main/constants"; +import { appVersion, defaultDownloadsPath, isStaging } from "@main/constants"; import { ipcMain } from "electron"; import "./catalogue/get-catalogue"; @@ -74,5 +74,6 @@ import "./misc/show-item-in-folder"; ipcMain.handle("ping", () => "pong"); ipcMain.handle("getVersion", () => appVersion); +ipcMain.handle("isStaging", () => isStaging); ipcMain.handle("isPortableVersion", () => isPortableVersion()); ipcMain.handle("getDefaultDownloadsPath", () => defaultDownloadsPath); diff --git a/src/main/events/library/close-game.ts b/src/main/events/library/close-game.ts index 62f932cd..a7546e01 100644 --- a/src/main/events/library/close-game.ts +++ b/src/main/events/library/close-game.ts @@ -25,7 +25,11 @@ const closeGame = async ( if (!game) return; const gameProcess = processes.find((runningProcess) => { - return runningProcess.exe === game.executablePath; + if (process.platform === "linux") { + return runningProcess.name === game.executablePath?.split("/").at(-1); + } else { + return runningProcess.exe === game.executablePath; + } }); if (gameProcess) { diff --git a/src/main/events/library/select-game-wine-prefix.ts b/src/main/events/library/select-game-wine-prefix.ts index a75a3cb0..d9f01c08 100644 --- a/src/main/events/library/select-game-wine-prefix.ts +++ b/src/main/events/library/select-game-wine-prefix.ts @@ -5,9 +5,9 @@ import { registerEvent } from "../register-event"; const selectGameWinePrefix = async ( _event: Electron.IpcMainInvokeEvent, id: number, - winePrefixPath: string + winePrefixPath: string | null ) => { - return gameRepository.update({ id }, { winePrefixPath }); + return gameRepository.update({ id }, { winePrefixPath: winePrefixPath }); }; registerEvent("selectGameWinePrefix", selectGameWinePrefix); diff --git a/src/main/events/library/update-executable-path.ts b/src/main/events/library/update-executable-path.ts index 9be36ab1..aee80771 100644 --- a/src/main/events/library/update-executable-path.ts +++ b/src/main/events/library/update-executable-path.ts @@ -6,14 +6,18 @@ import { parseExecutablePath } from "../helpers/parse-executable-path"; const updateExecutablePath = async ( _event: Electron.IpcMainInvokeEvent, id: number, - executablePath: string + executablePath: string | null ) => { + const parsedPath = executablePath + ? parseExecutablePath(executablePath) + : null; + return gameRepository.update( { id, }, { - executablePath: parseExecutablePath(executablePath), + executablePath: parsedPath, } ); }; diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts index ce16e97b..de10b07d 100644 --- a/src/main/events/torrenting/start-game-download.ts +++ b/src/main/events/torrenting/start-game-download.ts @@ -1,6 +1,6 @@ import { registerEvent } from "../register-event"; import type { StartGameDownloadPayload } from "@types"; -import { DownloadManager, HydraApi, logger } from "@main/services"; +import { DownloadManager, HydraApi } from "@main/services"; import { Not } from "typeorm"; import { steamGamesWorker } from "@main/workers"; @@ -76,24 +76,23 @@ const startGameDownload = async ( }, }); - createGame(updatedGame!).catch(() => {}); - - HydraApi.post( - "/games/download", - { - objectId: updatedGame!.objectID, - shop: updatedGame!.shop, - }, - { needsAuth: false } - ).catch((err) => { - logger.error("Failed to create game download", err); - }); - await DownloadManager.cancelDownload(updatedGame!.id); await DownloadManager.startDownload(updatedGame!); await downloadQueueRepository.delete({ game: { id: updatedGame!.id } }); await downloadQueueRepository.insert({ game: { id: updatedGame!.id } }); + + await Promise.all([ + createGame(updatedGame!).catch(() => {}), + HydraApi.post( + "/games/download", + { + objectId: updatedGame!.objectID, + shop: updatedGame!.shop, + }, + { needsAuth: false } + ).catch(() => {}), + ]); }); }; diff --git a/src/main/events/user/get-unlocked-achievements.ts b/src/main/events/user/get-unlocked-achievements.ts index a831bc50..ffa25399 100644 --- a/src/main/events/user/get-unlocked-achievements.ts +++ b/src/main/events/user/get-unlocked-achievements.ts @@ -1,6 +1,9 @@ import type { GameShop, UnlockedAchievement, UserAchievement } from "@types"; import { registerEvent } from "../register-event"; -import { gameAchievementRepository } from "@main/repository"; +import { + gameAchievementRepository, + userPreferencesRepository, +} from "@main/repository"; import { getGameAchievementData } from "@main/services/achievements/get-game-achievement-data"; export const getUnlockedAchievements = async ( @@ -12,10 +15,17 @@ export const getUnlockedAchievements = async ( where: { objectId, shop }, }); + const userPreferences = await userPreferencesRepository.findOne({ + where: { id: 1 }, + }); + + const showHiddenAchievementsDescription = + userPreferences?.showHiddenAchievementsDescription || false; + const achievementsData = await getGameAchievementData( objectId, shop, - useCachedData + useCachedData ? cachedAchievements : null ); const unlockedAchievements = JSON.parse( @@ -50,6 +60,10 @@ export const getUnlockedAchievements = async ( unlocked: false, unlockTime: null, icongray: icongray, + description: + !achievementData.hidden || showHiddenAchievementsDescription + ? achievementData.description + : undefined, } as UserAchievement; }) .sort((a, b) => { diff --git a/src/main/knex-client.ts b/src/main/knex-client.ts index 188fa2a5..2c09a7b0 100644 --- a/src/main/knex-client.ts +++ b/src/main/knex-client.ts @@ -15,6 +15,8 @@ import { AddStartMinimizedColumn } from "./migrations/20241030171454_add_start_m import { AddDisableNsfwAlertColumn } from "./migrations/20241106053733_add_disable_nsfw_alert_column"; import { AddShouldSeedColumn } from "./migrations/20241108200154_add_should_seed_colum"; import { AddSeedAfterDownloadColumn } from "./migrations/20241108201806_add_seed_after_download"; +import { AddHiddenAchievementDescriptionColumn } from "./migrations/20241216140633_add_hidden_achievement_description_column "; + export type HydraMigration = Knex.Migration & { name: string }; class MigrationSource implements Knex.MigrationSource { @@ -34,6 +36,7 @@ class MigrationSource implements Knex.MigrationSource { AddDisableNsfwAlertColumn, AddShouldSeedColumn, AddSeedAfterDownloadColumn, + AddHiddenAchievementDescriptionColumn, ]); } getMigrationName(migration: HydraMigration): string { diff --git a/src/main/migrations/20241216140633_add_hidden_achievement_description_column .ts b/src/main/migrations/20241216140633_add_hidden_achievement_description_column .ts new file mode 100644 index 00000000..36771c43 --- /dev/null +++ b/src/main/migrations/20241216140633_add_hidden_achievement_description_column .ts @@ -0,0 +1,20 @@ +import type { HydraMigration } from "@main/knex-client"; +import type { Knex } from "knex"; + +export const AddHiddenAchievementDescriptionColumn: HydraMigration = { + name: "AddHiddenAchievementDescriptionColumn", + up: (knex: Knex) => { + return knex.schema.alterTable("user_preferences", (table) => { + return table + .boolean("showHiddenAchievementsDescription") + .notNullable() + .defaultTo(0); + }); + }, + + down: async (knex: Knex) => { + return knex.schema.alterTable("user_preferences", (table) => { + return table.dropColumn("showHiddenAchievementsDescription"); + }); + }, +}; diff --git a/src/main/scripts/get-games-icon-hash.ts b/src/main/scripts/get-games-icon-hash.ts deleted file mode 100644 index 36ecd35e..00000000 --- a/src/main/scripts/get-games-icon-hash.ts +++ /dev/null @@ -1,40 +0,0 @@ -import path from "node:path"; -import fs from "node:fs"; - -import { getSteamGameClientIcon, logger } from "@main/services"; -import { chunk } from "lodash-es"; -import { seedsPath } from "@main/constants"; - -import type { SteamGame } from "@types"; - -const steamGamesPath = path.join(seedsPath, "steam-games.json"); - -const steamGames = JSON.parse( - fs.readFileSync(steamGamesPath, "utf-8") -) as SteamGame[]; - -const chunks = chunk(steamGames, 1500); - -for (const chunk of chunks) { - await Promise.all( - chunk.map(async (steamGame) => { - if (steamGame.clientIcon) return; - - const index = steamGames.findIndex((game) => game.id === steamGame.id); - - try { - const clientIcon = await getSteamGameClientIcon(String(steamGame.id)); - - steamGames[index].clientIcon = clientIcon; - - logger.log("info", `Set ${steamGame.name} client icon`); - } catch (err) { - steamGames[index].clientIcon = null; - logger.log("info", `Could not set icon for ${steamGame.name}`); - } - }) - ); - - fs.writeFileSync(steamGamesPath, JSON.stringify(steamGames)); - logger.log("info", "Updated steam games"); -} diff --git a/src/main/services/achievements/achievement-watcher-manager.ts b/src/main/services/achievements/achievement-watcher-manager.ts index b7c71f86..6a1eb11c 100644 --- a/src/main/services/achievements/achievement-watcher-manager.ts +++ b/src/main/services/achievements/achievement-watcher-manager.ts @@ -236,24 +236,28 @@ export class AchievementWatcherManager { }; public static preSearchAchievements = async () => { - const newAchievementsCount = - process.platform === "win32" - ? await this.preSearchAchievementsWindows() - : await this.preSearchAchievementsWithWine(); + try { + const newAchievementsCount = + process.platform === "win32" + ? await this.preSearchAchievementsWindows() + : await this.preSearchAchievementsWithWine(); - const totalNewGamesWithAchievements = newAchievementsCount.filter( - (achievements) => achievements - ).length; - const totalNewAchievements = newAchievementsCount.reduce( - (acc, val) => acc + val, - 0 - ); - - if (totalNewAchievements > 0) { - publishCombinedNewAchievementNotification( - totalNewAchievements, - totalNewGamesWithAchievements + const totalNewGamesWithAchievements = newAchievementsCount.filter( + (achievements) => achievements + ).length; + const totalNewAchievements = newAchievementsCount.reduce( + (acc, val) => acc + val, + 0 ); + + if (totalNewAchievements > 0) { + publishCombinedNewAchievementNotification( + totalNewAchievements, + totalNewGamesWithAchievements + ); + } + } catch (err) { + achievementsLogger.error("Error on preSearchAchievements", err); } this.hasFinishedMergingWithRemote = true; diff --git a/src/main/services/achievements/get-game-achievement-data.ts b/src/main/services/achievements/get-game-achievement-data.ts index 02019dab..daac7e11 100644 --- a/src/main/services/achievements/get-game-achievement-data.ts +++ b/src/main/services/achievements/get-game-achievement-data.ts @@ -6,20 +6,15 @@ import { HydraApi } from "../hydra-api"; import type { AchievementData, GameShop } from "@types"; import { UserNotLoggedInError } from "@shared"; import { logger } from "../logger"; +import { GameAchievement } from "@main/entity"; export const getGameAchievementData = async ( objectId: string, shop: GameShop, - useCachedData: boolean + cachedAchievements: GameAchievement | null ) => { - if (useCachedData) { - const cachedAchievements = await gameAchievementRepository.findOne({ - where: { objectId, shop }, - }); - - if (cachedAchievements && cachedAchievements.achievements) { - return JSON.parse(cachedAchievements.achievements) as AchievementData[]; - } + if (cachedAchievements && cachedAchievements.achievements) { + return JSON.parse(cachedAchievements.achievements) as AchievementData[]; } const userPreferences = await userPreferencesRepository.findOne({ diff --git a/src/main/services/achievements/parse-achievement-file.ts b/src/main/services/achievements/parse-achievement-file.ts index 3aecadd6..18f0c25b 100644 --- a/src/main/services/achievements/parse-achievement-file.ts +++ b/src/main/services/achievements/parse-achievement-file.ts @@ -9,144 +9,134 @@ export const parseAchievementFile = ( ): UnlockedAchievement[] => { if (!existsSync(filePath)) return []; - if (type == Cracker.codex) { - const parsed = iniParse(filePath); - return processDefault(parsed); + try { + if (type == Cracker.codex) { + const parsed = iniParse(filePath); + return processDefault(parsed); + } + + if (type == Cracker.rune) { + const parsed = iniParse(filePath); + return processDefault(parsed); + } + + if (type === Cracker.onlineFix) { + const parsed = iniParse(filePath); + return processOnlineFix(parsed); + } + + if (type === Cracker.goldberg) { + const parsed = jsonParse(filePath); + return processGoldberg(parsed); + } + + if (type == Cracker.userstats) { + const parsed = iniParse(filePath); + return processUserStats(parsed); + } + + if (type == Cracker.rld) { + const parsed = iniParse(filePath); + return processRld(parsed); + } + + if (type === Cracker.skidrow) { + const parsed = iniParse(filePath); + return processSkidrow(parsed); + } + + if (type === Cracker._3dm) { + const parsed = iniParse(filePath); + return process3DM(parsed); + } + + if (type === Cracker.flt) { + const achievements = readdirSync(filePath); + + return achievements.map((achievement) => { + return { + name: achievement, + unlockTime: Date.now(), + }; + }); + } + + if (type === Cracker.creamAPI) { + const parsed = iniParse(filePath); + return processCreamAPI(parsed); + } + + if (type === Cracker.empress) { + const parsed = jsonParse(filePath); + return processGoldberg(parsed); + } + + if (type === Cracker.razor1911) { + return processRazor1911(filePath); + } + + achievementsLogger.log( + `Unprocessed ${type} achievements found on ${filePath}` + ); + return []; + } catch (err) { + achievementsLogger.error(`Error parsing ${type} - ${filePath}`, err); + return []; } - - if (type == Cracker.rune) { - const parsed = iniParse(filePath); - return processDefault(parsed); - } - - if (type === Cracker.onlineFix) { - const parsed = iniParse(filePath); - return processOnlineFix(parsed); - } - - if (type === Cracker.goldberg) { - const parsed = jsonParse(filePath); - return processGoldberg(parsed); - } - - if (type == Cracker.userstats) { - const parsed = iniParse(filePath); - return processUserStats(parsed); - } - - if (type == Cracker.rld) { - const parsed = iniParse(filePath); - return processRld(parsed); - } - - if (type === Cracker.skidrow) { - const parsed = iniParse(filePath); - return processSkidrow(parsed); - } - - if (type === Cracker._3dm) { - const parsed = iniParse(filePath); - return process3DM(parsed); - } - - if (type === Cracker.flt) { - const achievements = readdirSync(filePath); - - return achievements.map((achievement) => { - return { - name: achievement, - unlockTime: Date.now(), - }; - }); - } - - if (type === Cracker.creamAPI) { - const parsed = iniParse(filePath); - return processCreamAPI(parsed); - } - - if (type === Cracker.empress) { - const parsed = jsonParse(filePath); - return processGoldberg(parsed); - } - - if (type === Cracker.razor1911) { - return processRazor1911(filePath); - } - - achievementsLogger.log( - `Unprocessed ${type} achievements found on ${filePath}` - ); - return []; }; const iniParse = (filePath: string) => { - try { - const fileContent = readFileSync(filePath, "utf-8"); + const fileContent = readFileSync(filePath, "utf-8"); - const lines = - fileContent.charCodeAt(0) === 0xfeff - ? fileContent.slice(1).split(/[\r\n]+/) - : fileContent.split(/[\r\n]+/); + const lines = + fileContent.charCodeAt(0) === 0xfeff + ? fileContent.slice(1).split(/[\r\n]+/) + : fileContent.split(/[\r\n]+/); - let objectName = ""; - const object: Record> = {}; + let objectName = ""; + const object: Record> = {}; - for (const line of lines) { - if (line.startsWith("###") || !line.length) continue; + for (const line of lines) { + if (line.startsWith("###") || !line.length) continue; - if (line.startsWith("[") && line.endsWith("]")) { - objectName = line.slice(1, -1); - object[objectName] = {}; - } else { - const [name, ...value] = line.split("="); - object[objectName][name.trim()] = value.join("=").trim(); - } + if (line.startsWith("[") && line.endsWith("]")) { + objectName = line.slice(1, -1); + object[objectName] = {}; + } else { + const [name, ...value] = line.split("="); + object[objectName][name.trim()] = value.join("=").trim(); } - - return object; - } catch (err) { - achievementsLogger.error(`Error parsing ${filePath}`, err); - return {}; } + + return object; }; const jsonParse = (filePath: string) => { - try { - return JSON.parse(readFileSync(filePath, "utf-8")); - } catch (err) { - achievementsLogger.error(`Error parsing ${filePath}`, err); - return {}; - } + return JSON.parse(readFileSync(filePath, "utf-8")); }; const processRazor1911 = (filePath: string): UnlockedAchievement[] => { - try { - const fileContent = readFileSync(filePath, "utf-8"); + const fileContent = readFileSync(filePath, "utf-8"); - const lines = - fileContent.charCodeAt(0) === 0xfeff - ? fileContent.slice(1).split(/[\r\n]+/) - : fileContent.split(/[\r\n]+/); + const lines = + fileContent.charCodeAt(0) === 0xfeff + ? fileContent.slice(1).split(/[\r\n]+/) + : fileContent.split(/[\r\n]+/); - const achievements: UnlockedAchievement[] = []; - for (const line of lines) { - if (!line.length) continue; + const achievements: UnlockedAchievement[] = []; + for (const line of lines) { + if (!line.length) continue; - const [name, unlocked, unlockTime] = line.split(" "); - if (unlocked === "1") { - achievements.push({ - name, - unlockTime: Number(unlockTime) * 1000, - }); - } + const [name, unlocked, unlockTime] = line.split(" "); + if (unlocked === "1") { + achievements.push({ + name, + unlockTime: Number(unlockTime) * 1000, + }); } - - return achievements; - } catch (err) { - achievementsLogger.error(`Error processing ${filePath}`, err); - return []; } + + return achievements; }; const processOnlineFix = (unlockedAchievements: any): UnlockedAchievement[] => { diff --git a/src/main/services/download/types.ts b/src/main/services/download/types.ts index 65beb72f..b5a5d2cd 100644 --- a/src/main/services/download/types.ts +++ b/src/main/services/download/types.ts @@ -30,6 +30,7 @@ export interface LibtorrentPayload { export interface ProcessPayload { exe: string; pid: number; + name: string; } export interface PauseSeedingPayload { diff --git a/src/main/services/hydra-api.ts b/src/main/services/hydra-api.ts index 93ccc74e..22c2c950 100644 --- a/src/main/services/hydra-api.ts +++ b/src/main/services/hydra-api.ts @@ -153,21 +153,26 @@ export class HydraApi { (error) => { logger.error(" ---- RESPONSE ERROR -----"); const { config } = error; + const data = JSON.parse(config.data); + logger.error( config.method, config.baseURL, config.url, - config.headers, - config.data + omit(config.headers, ["accessToken", "refreshToken"]), + Array.isArray(data) + ? data + : omit(data, ["accessToken", "refreshToken"]) ); if (error.response) { logger.error( - "Response", + "Response error:", error.response.status, error.response.data ); } else if (error.request) { - logger.error("Request", error.request); + const errorData = error.toJSON(); + logger.error("Request error:", errorData.message); } else { logger.error("Error", error.message); } diff --git a/src/main/services/process-watcher.ts b/src/main/services/process-watcher.ts index 770a688c..369c8898 100644 --- a/src/main/services/process-watcher.ts +++ b/src/main/services/process-watcher.ts @@ -1,20 +1,216 @@ -import { IsNull, Not } from "typeorm"; import { gameRepository } from "@main/repository"; import { WindowManager } from "./window-manager"; import { createGame, updateGamePlaytime } from "./library-sync"; import type { GameRunning } from "@types"; // import { PythonInstance } from "./download"; import { Game } from "@main/entity"; +import axios from "axios"; +import { exec } from "child_process"; + +const commands = { + findWineDir: `lsof -c wine 2>/dev/null | grep '/drive_c/windows$' | head -n 1 | awk '{for(i=9;i<=NF;i++) printf "%s ", $i; print ""}'`, + findWineExecutables: `lsof -c wine 2>/dev/null | grep '\\.exe$' | awk '{for(i=9;i<=NF;i++) printf "%s ", $i; print ""}'`, +}; export const gamesPlaytime = new Map< number, { lastTick: number; firstTick: number; lastSyncTick: number } >(); +interface ExecutableInfo { + name: string; + os: string; +} + +interface GameExecutables { + [key: string]: ExecutableInfo[]; +} + const TICKS_TO_UPDATE_API = 120; let currentTick = 1; -const onGameTick = (game: Game) => { +const gameExecutables = ( + await axios + .get( + import.meta.env.MAIN_VITE_EXTERNAL_RESOURCES_URL + + "/game-executables.json" + ) + .catch(() => { + return { data: {} }; + }) +).data as GameExecutables; + +const findGamePathByProcess = ( + processMap: Map>, + gameId: string +) => { + const executables = gameExecutables[gameId].filter((info) => { + if (process.platform === "linux" && info.os === "linux") return true; + return info.os === "win32"; + }); + + for (const executable of executables) { + const exe = executable.name.slice(executable.name.lastIndexOf("/") + 1); + + if (!exe) continue; + + const pathSet = processMap.get(exe); + + if (pathSet) { + const executableName = + process.platform === "win32" + ? executable.name.replace(/\//g, "\\") + : executable.name; + + pathSet.forEach((path) => { + if (path.toLowerCase().endsWith(executableName)) { + gameRepository.update( + { objectID: gameId, shop: "steam" }, + { executablePath: path } + ); + + if (process.platform === "linux") { + exec(commands.findWineDir, (err, out) => { + if (err) return; + + gameRepository.update( + { objectID: gameId, shop: "steam" }, + { + winePrefixPath: out.trim().replace("/drive_c/windows", ""), + } + ); + }); + } + } + }); + } + } +}; + +const getSystemProcessMap = async () => { + const processes = await PythonInstance.getProcessList(); + + const map = new Map>(); + + processes.forEach((process) => { + const key = process.name.toLowerCase(); + const value = process.exe; + + if (!key || !value) return; + + const currentSet = map.get(key) ?? new Set(); + map.set(key, currentSet.add(value)); + }); + + if (process.platform === "linux") { + await new Promise((res) => { + exec(commands.findWineExecutables, (err, out) => { + if (err) { + res(null); + return; + } + + const pathSet = new Set( + out + .trim() + .split("\n") + .map((path) => path.trim()) + ); + + pathSet.forEach((path) => { + if (path.startsWith("/usr")) return; + + const key = path.slice(path.lastIndexOf("/") + 1).toLowerCase(); + + if (!key || !path) return; + + const currentSet = map.get(key) ?? new Set(); + map.set(key, currentSet.add(path)); + }); + + res(null); + }); + }); + } + + return map; +}; + +export const watchProcesses = async () => { + const games = await gameRepository.find({ + where: { + isDeleted: false, + }, + }); + + if (!games.length) return; + + const processMap = await getSystemProcessMap(); + + for (const game of games) { + const executablePath = game.executablePath; + + if (!executablePath) { + if (gameExecutables[game.objectID]) { + findGamePathByProcess(processMap, game.objectID); + } + continue; + } + + const executable = executablePath + .slice( + executablePath.lastIndexOf(process.platform === "win32" ? "\\" : "/") + + 1 + ) + .toLowerCase(); + + const hasProcess = processMap.get(executable)?.has(executablePath); + + if (hasProcess) { + if (gamesPlaytime.has(game.id)) { + onTickGame(game); + } else { + onOpenGame(game); + } + } else if (gamesPlaytime.has(game.id)) { + onCloseGame(game); + } + } + + currentTick++; + + if (WindowManager.mainWindow) { + const gamesRunning = Array.from(gamesPlaytime.entries()).map((entry) => { + return { + id: entry[0], + sessionDurationInMillis: performance.now() - entry[1].firstTick, + }; + }); + + WindowManager.mainWindow.webContents.send( + "on-games-running", + gamesRunning as Pick[] + ); + } +}; + +function onOpenGame(game: Game) { + const now = performance.now(); + + gamesPlaytime.set(game.id, { + lastTick: now, + firstTick: now, + lastSyncTick: now, + }); + + if (game.remoteId) { + updateGamePlaytime(game, 0, new Date()).catch(() => {}); + } else { + createGame({ ...game, lastTimePlayed: new Date() }).catch(() => {}); + } +} + +function onTickGame(game: Game) { const now = performance.now(); const gamePlaytime = gamesPlaytime.get(game.id)!; diff --git a/src/main/services/user/get-user-data.ts b/src/main/services/user/get-user-data.ts index fd4e5e1d..ff012881 100644 --- a/src/main/services/user/get-user-data.ts +++ b/src/main/services/user/get-user-data.ts @@ -44,7 +44,7 @@ export const getUserData = () => { if (err instanceof UserNotLoggedInError) { return null; } - logger.error("Failed to get logged user", err); + logger.error("Failed to get logged user"); const loggedUser = await userAuthRepository.findOne({ where: { id: 1 }, relations: { subscription: true }, diff --git a/src/main/services/window-manager.ts b/src/main/services/window-manager.ts index 4f65ef2a..426d7afe 100644 --- a/src/main/services/window-manager.ts +++ b/src/main/services/window-manager.ts @@ -85,7 +85,11 @@ export class WindowManager { return callback(details); } - if (details.url.includes("intercom.io")) { + if (details.url.includes("featurebase")) { + return callback(details); + } + + if (details.url.includes("chatwoot")) { return callback(details); } @@ -191,7 +195,7 @@ export class WindowManager { this.mainWindow?.focus(); } - public static createSystemTray(language: string) { + public static async createSystemTray(language: string) { let tray: Tray; if (process.platform === "darwin") { @@ -259,6 +263,7 @@ export class WindowManager { }, ]); + tray.setContextMenu(contextMenu); return contextMenu; }; @@ -270,6 +275,8 @@ export class WindowManager { tray.setToolTip("Hydra"); if (process.platform !== "darwin") { + await updateSystemTray(); + tray.addListener("click", () => { if (this.mainWindow) { if ( diff --git a/src/main/vite-env.d.ts b/src/main/vite-env.d.ts index 141cc94a..e6a7d8cd 100644 --- a/src/main/vite-env.d.ts +++ b/src/main/vite-env.d.ts @@ -5,6 +5,7 @@ interface ImportMetaEnv { readonly MAIN_VITE_ANALYTICS_API_URL: string; readonly MAIN_VITE_AUTH_URL: string; readonly MAIN_VITE_CHECKOUT_URL: string; + readonly MAIN_VITE_EXTERNAL_RESOURCES_URL: string; } interface ImportMeta { diff --git a/src/preload/index.ts b/src/preload/index.ts index 4f4984c0..07c8c598 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -12,10 +12,10 @@ import type { FriendRequestAction, UpdateProfileRequest, SeedingStatus, + GameAchievement, } from "@types"; import type { CatalogueCategory } from "@shared"; import type { AxiosProgressEvent } from "axios"; -import { GameAchievement } from "@main/entity"; contextBridge.exposeInMainWorld("electron", { /* Torrenting */ @@ -60,8 +60,8 @@ contextBridge.exposeInMainWorld("electron", { getGameShopDetails: (objectId: string, shop: GameShop, language: string) => ipcRenderer.invoke("getGameShopDetails", objectId, shop, language), getRandomGame: () => ipcRenderer.invoke("getRandomGame"), - getHowLongToBeat: (shop: GameShop, objectId: string) => - ipcRenderer.invoke("getHowLongToBeat", shop, objectId), + getHowLongToBeat: (objectId: string, shop: GameShop) => + ipcRenderer.invoke("getHowLongToBeat", objectId, shop), getGames: (take?: number, skip?: number) => ipcRenderer.invoke("getGames", take, skip), searchGameRepacks: (query: string) => @@ -105,9 +105,9 @@ contextBridge.exposeInMainWorld("electron", { ipcRenderer.invoke("addGameToLibrary", objectId, title, shop), createGameShortcut: (id: number) => ipcRenderer.invoke("createGameShortcut", id), - updateExecutablePath: (id: number, executablePath: string) => + updateExecutablePath: (id: number, executablePath: string | null) => ipcRenderer.invoke("updateExecutablePath", id, executablePath), - selectGameWinePrefix: (id: number, winePrefixPath: string) => + selectGameWinePrefix: (id: number, winePrefixPath: string | null) => ipcRenderer.invoke("selectGameWinePrefix", id, winePrefixPath), verifyExecutablePathInUse: (executablePath: string) => ipcRenderer.invoke("verifyExecutablePathInUse", executablePath), @@ -216,6 +216,7 @@ contextBridge.exposeInMainWorld("electron", { ping: () => ipcRenderer.invoke("ping"), getVersion: () => ipcRenderer.invoke("getVersion"), getDefaultDownloadsPath: () => ipcRenderer.invoke("getDefaultDownloadsPath"), + isStaging: () => ipcRenderer.invoke("isStaging"), isPortableVersion: () => ipcRenderer.invoke("isPortableVersion"), openExternal: (src: string) => ipcRenderer.invoke("openExternal", src), openCheckout: () => ipcRenderer.invoke("openCheckout"), diff --git a/src/renderer/index.html b/src/renderer/index.html index bfc3a206..5d62f4c5 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -6,7 +6,7 @@ Hydra diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 992e8714..6bd0acef 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -2,8 +2,6 @@ import { useCallback, useContext, useEffect, useRef } from "react"; import { Sidebar, BottomPanel, Header, Toast } from "@renderer/components"; -import Intercom from "@intercom/messenger-js-sdk"; - import { useAppDispatch, useAppSelector, @@ -36,10 +34,6 @@ export interface AppProps { children: React.ReactNode; } -Intercom({ - app_id: import.meta.env.RENDERER_VITE_INTERCOM_APP_ID, -}); - export function App() { const contentRef = useRef(null); const { updateLibrary, library } = useLibrary(); @@ -128,12 +122,21 @@ export function App() { dispatch(setProfileBackground(profileBackground)); } - fetchUserDetails().then((response) => { - if (response) { - updateUserDetails(response); - syncFriendRequests(); - } - }); + fetchUserDetails() + .then((response) => { + if (response) { + updateUserDetails(response); + syncFriendRequests(); + } + }) + .finally(() => { + if (document.getElementById("external-resources")) return; + + const $script = document.createElement("script"); + $script.id = "external-resources"; + $script.src = `${import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL}/bundle.js?t=${Date.now()}`; + document.head.appendChild($script); + }); }, [fetchUserDetails, syncFriendRequests, updateUserDetails, dispatch]); const onSignIn = useCallback(() => { @@ -223,9 +226,7 @@ export function App() { useEffect(() => { new MutationObserver(() => { - const modal = document.body.querySelector( - "[role=dialog]:not([data-intercom-frame='true'])" - ); + const modal = document.body.querySelector("[data-hydra-dialog]"); dispatch(toggleDraggingDisabled(Boolean(modal))); }).observe(document.body, { diff --git a/src/renderer/src/components/modal/modal.tsx b/src/renderer/src/components/modal/modal.tsx index eb2894de..af15feb5 100644 --- a/src/renderer/src/components/modal/modal.tsx +++ b/src/renderer/src/components/modal/modal.tsx @@ -107,6 +107,7 @@ export function Modal({ aria-labelledby={title} aria-describedby={description} ref={modalContentRef} + data-hydra-dialog >
diff --git a/src/renderer/src/components/sidebar/sidebar.tsx b/src/renderer/src/components/sidebar/sidebar.tsx index 75bd1b78..f487681c 100644 --- a/src/renderer/src/components/sidebar/sidebar.tsx +++ b/src/renderer/src/components/sidebar/sidebar.tsx @@ -22,8 +22,6 @@ import { SidebarProfile } from "./sidebar-profile"; import { sortBy } from "lodash-es"; import { CommentDiscussionIcon } from "@primer/octicons-react"; -import { show, update } from "@intercom/messenger-js-sdk"; - const SIDEBAR_MIN_WIDTH = 200; const SIDEBAR_INITIAL_WIDTH = 250; const SIDEBAR_MAX_WIDTH = 450; @@ -50,20 +48,7 @@ export function Sidebar() { return sortBy(library, (game) => game.title); }, [library]); - const { userDetails, hasActiveSubscription } = useUserDetails(); - - useEffect(() => { - if (userDetails) { - update({ - name: userDetails.displayName, - Username: userDetails.username, - email: userDetails.email ?? undefined, - Email: userDetails.email, - "Subscription expiration date": userDetails?.subscription?.expiresAt, - "Payment status": userDetails?.subscription?.status, - }); - } - }, [userDetails, hasActiveSubscription]); + const { hasActiveSubscription } = useUserDetails(); const { lastPacket, progress } = useDownload(); @@ -266,7 +251,11 @@ export function Sidebar() {
{hasActiveSubscription && ( - + <> + + {game.executablePath && ( + + )} + } /> @@ -186,14 +203,24 @@ export function GameOptionsModal({ disabled placeholder={t("no_directory_selected")} rightContent={ - + <> + + {game.winePrefixPath && ( + + )} + } />
diff --git a/src/renderer/src/pages/game-details/sidebar/sidebar.tsx b/src/renderer/src/pages/game-details/sidebar/sidebar.tsx index ea958c1a..86f24f5a 100644 --- a/src/renderer/src/pages/game-details/sidebar/sidebar.tsx +++ b/src/renderer/src/pages/game-details/sidebar/sidebar.tsx @@ -98,8 +98,8 @@ export function Sidebar() { } else { try { const howLongToBeat = await window.electron.getHowLongToBeat( - shop, - objectId + objectId, + shop ); if (howLongToBeat) { diff --git a/src/renderer/src/pages/settings/settings-behavior.tsx b/src/renderer/src/pages/settings/settings-behavior.tsx index c42f68f8..28c50256 100644 --- a/src/renderer/src/pages/settings/settings-behavior.tsx +++ b/src/renderer/src/pages/settings/settings-behavior.tsx @@ -20,6 +20,7 @@ export function SettingsBehavior() { startMinimized: false, disableNsfwAlert: false, seedAfterDownloadComplete: false, + showHiddenAchievementsDescription: false, }); const { t } = useTranslation("settings"); @@ -32,6 +33,8 @@ export function SettingsBehavior() { startMinimized: userPreferences.startMinimized, disableNsfwAlert: userPreferences.disableNsfwAlert, seedAfterDownloadComplete: userPreferences.seedAfterDownloadComplete, + showHiddenAchievementsDescription: + userPreferences.showHiddenAchievementsDescription, }); } }, [userPreferences]); @@ -108,6 +111,17 @@ export function SettingsBehavior() { }) } /> + + + handleChange({ + showHiddenAchievementsDescription: + !form.showHiddenAchievementsDescription, + }) + } + /> ); } diff --git a/src/renderer/src/vite-env.d.ts b/src/renderer/src/vite-env.d.ts index 304dde0f..41b3f064 100644 --- a/src/renderer/src/vite-env.d.ts +++ b/src/renderer/src/vite-env.d.ts @@ -2,7 +2,7 @@ /// interface ImportMetaEnv { - readonly RENDERER_VITE_INTERCOM_APP_ID: string; + readonly RENDERER_VITE_EXTERNAL_RESOURCES_URL: string; } interface ImportMeta { diff --git a/src/shared/index.ts b/src/shared/index.ts index 173867df..699cc4d8 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -46,7 +46,7 @@ export const removeSymbolsFromName = (name: string) => export const removeSpecialEditionFromName = (name: string) => name.replace( - /(The |Digital )?(GOTY|Deluxe|Standard|Ultimate|Definitive|Enhanced|Collector's|Premium|Digital|Limited|Game of the Year|Reloaded|[0-9]{4}) Edition/g, + /(The |Digital )?(GOTY|Deluxe|Standard|Ultimate|Definitive|Enhanced|Collector's|Premium|Digital|Limited|Game of the Year|Reloaded|[0-9]{4}) Edition/gi, "" ); @@ -73,7 +73,8 @@ export const formatName = pipe( replaceUnderscoreWithSpace, replaceDotsWithSpace, replaceNbspWithSpace, - (str) => str.replace(/DIRECTOR'S CUT/g, ""), + (str) => str.replace(/DIRECTOR'S CUT/gi, ""), + (str) => str.replace(/Friend's Pass/gi, ""), removeSymbolsFromName, removeDuplicateSpaces, (str) => str.trim() diff --git a/src/types/index.ts b/src/types/index.ts index 022d8ec2..4b09e17e 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -171,6 +171,7 @@ export interface UserPreferences { startMinimized: boolean; disableNsfwAlert: boolean; seedAfterDownloadComplete: boolean; + showHiddenAchievementsDescription: boolean; } export interface Steam250Game { @@ -250,6 +251,7 @@ export interface Subscription { status: SubscriptionStatus; plan: { id: string; name: string }; expiresAt: string | null; + paymentMethod: "pix" | "paypal"; } export interface UserDetails { diff --git a/yarn.lock b/yarn.lock index add1310b..fb6bcfe8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,608 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/crc32c@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e" + integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/sha1-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz#b0ee2d2821d3861f017e965ef3b4cb38e3b6a0f4" + integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== + dependencies: + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + +"@aws-crypto/util@5.2.0", "@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-s3@^3.705.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.714.0.tgz#74d056a57525a1289c7934015f2ce3f3714e7464" + integrity sha512-DqzfbecKrhUEpsYTsYRIm4cKKlIvAl4I/A2NpzDPDSiA2EmCWLy0T5fK1ivUA4XL+09+4pHJGNVTpMyDs7n6vg== + dependencies: + "@aws-crypto/sha1-browser" "5.2.0" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.714.0" + "@aws-sdk/client-sts" "3.714.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/credential-provider-node" "3.714.0" + "@aws-sdk/middleware-bucket-endpoint" "3.714.0" + "@aws-sdk/middleware-expect-continue" "3.714.0" + "@aws-sdk/middleware-flexible-checksums" "3.714.0" + "@aws-sdk/middleware-host-header" "3.714.0" + "@aws-sdk/middleware-location-constraint" "3.714.0" + "@aws-sdk/middleware-logger" "3.714.0" + "@aws-sdk/middleware-recursion-detection" "3.714.0" + "@aws-sdk/middleware-sdk-s3" "3.714.0" + "@aws-sdk/middleware-ssec" "3.714.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/region-config-resolver" "3.714.0" + "@aws-sdk/signature-v4-multi-region" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@aws-sdk/util-user-agent-browser" "3.714.0" + "@aws-sdk/util-user-agent-node" "3.714.0" + "@aws-sdk/xml-builder" "3.709.0" + "@smithy/config-resolver" "^3.0.13" + "@smithy/core" "^2.5.5" + "@smithy/eventstream-serde-browser" "^3.0.14" + "@smithy/eventstream-serde-config-resolver" "^3.0.11" + "@smithy/eventstream-serde-node" "^3.0.13" + "@smithy/fetch-http-handler" "^4.1.2" + "@smithy/hash-blob-browser" "^3.1.10" + "@smithy/hash-node" "^3.0.11" + "@smithy/hash-stream-node" "^3.1.10" + "@smithy/invalid-dependency" "^3.0.11" + "@smithy/md5-js" "^3.0.11" + "@smithy/middleware-content-length" "^3.0.13" + "@smithy/middleware-endpoint" "^3.2.5" + "@smithy/middleware-retry" "^3.0.30" + "@smithy/middleware-serde" "^3.0.11" + "@smithy/middleware-stack" "^3.0.11" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/node-http-handler" "^3.3.2" + "@smithy/protocol-http" "^4.1.8" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.30" + "@smithy/util-defaults-mode-node" "^3.0.30" + "@smithy/util-endpoints" "^2.1.7" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-retry" "^3.0.11" + "@smithy/util-stream" "^3.3.2" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.714.0.tgz#ddbb500ce93003f21c26d05ac45593c961d8b8e2" + integrity sha512-dMvpPUaL3v01psPY1ZyCzQ/w2tOgQTH1if0zBF5r2q7Vc0oOPzbBZgNAhG1bDWlRCBW0iXmoqRFoWUwQ5rtx+A== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/credential-provider-node" "3.714.0" + "@aws-sdk/middleware-host-header" "3.714.0" + "@aws-sdk/middleware-logger" "3.714.0" + "@aws-sdk/middleware-recursion-detection" "3.714.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/region-config-resolver" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@aws-sdk/util-user-agent-browser" "3.714.0" + "@aws-sdk/util-user-agent-node" "3.714.0" + "@smithy/config-resolver" "^3.0.13" + "@smithy/core" "^2.5.5" + "@smithy/fetch-http-handler" "^4.1.2" + "@smithy/hash-node" "^3.0.11" + "@smithy/invalid-dependency" "^3.0.11" + "@smithy/middleware-content-length" "^3.0.13" + "@smithy/middleware-endpoint" "^3.2.5" + "@smithy/middleware-retry" "^3.0.30" + "@smithy/middleware-serde" "^3.0.11" + "@smithy/middleware-stack" "^3.0.11" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/node-http-handler" "^3.3.2" + "@smithy/protocol-http" "^4.1.8" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.30" + "@smithy/util-defaults-mode-node" "^3.0.30" + "@smithy/util-endpoints" "^2.1.7" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-retry" "^3.0.11" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.714.0.tgz#a98358f499fcffec7895f9fb0fb8650b3c993bc4" + integrity sha512-pFtjY5Ga91qrryo0UfbjetdT2p9rOgtHofogAeEuGjxx7/rupBpdlW0WDOtD/7jhmbhM8WZEr6aH7GLzzkKfCA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/middleware-host-header" "3.714.0" + "@aws-sdk/middleware-logger" "3.714.0" + "@aws-sdk/middleware-recursion-detection" "3.714.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/region-config-resolver" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@aws-sdk/util-user-agent-browser" "3.714.0" + "@aws-sdk/util-user-agent-node" "3.714.0" + "@smithy/config-resolver" "^3.0.13" + "@smithy/core" "^2.5.5" + "@smithy/fetch-http-handler" "^4.1.2" + "@smithy/hash-node" "^3.0.11" + "@smithy/invalid-dependency" "^3.0.11" + "@smithy/middleware-content-length" "^3.0.13" + "@smithy/middleware-endpoint" "^3.2.5" + "@smithy/middleware-retry" "^3.0.30" + "@smithy/middleware-serde" "^3.0.11" + "@smithy/middleware-stack" "^3.0.11" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/node-http-handler" "^3.3.2" + "@smithy/protocol-http" "^4.1.8" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.30" + "@smithy/util-defaults-mode-node" "^3.0.30" + "@smithy/util-endpoints" "^2.1.7" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-retry" "^3.0.11" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.714.0.tgz#3222b498ae1dd83490379558eb1af27d5d89601c" + integrity sha512-ThcXgolapPsOzeavJF4Am312umFyoFBBeiTYD8PQGIiYkbJi4hXcjoWacmtkq6moMmMZSP9iK/ellls7vwY2JQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.714.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/credential-provider-node" "3.714.0" + "@aws-sdk/middleware-host-header" "3.714.0" + "@aws-sdk/middleware-logger" "3.714.0" + "@aws-sdk/middleware-recursion-detection" "3.714.0" + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/region-config-resolver" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@aws-sdk/util-user-agent-browser" "3.714.0" + "@aws-sdk/util-user-agent-node" "3.714.0" + "@smithy/config-resolver" "^3.0.13" + "@smithy/core" "^2.5.5" + "@smithy/fetch-http-handler" "^4.1.2" + "@smithy/hash-node" "^3.0.11" + "@smithy/invalid-dependency" "^3.0.11" + "@smithy/middleware-content-length" "^3.0.13" + "@smithy/middleware-endpoint" "^3.2.5" + "@smithy/middleware-retry" "^3.0.30" + "@smithy/middleware-serde" "^3.0.11" + "@smithy/middleware-stack" "^3.0.11" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/node-http-handler" "^3.3.2" + "@smithy/protocol-http" "^4.1.8" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.30" + "@smithy/util-defaults-mode-node" "^3.0.30" + "@smithy/util-endpoints" "^2.1.7" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-retry" "^3.0.11" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.714.0.tgz#f53dbf5aa579f66bf3aa3e3e312b624e70ae871d" + integrity sha512-TlZ50d8MEPVp9O03SvisOmcmxjxhMDKHJJcrBgYjgDej6QmNfiFwtCRkReXDdkEeXP29ehMs7uPXtmVvPqziYw== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/core" "^2.5.5" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/signature-v4" "^4.2.4" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + "@smithy/util-middleware" "^3.0.11" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.714.0.tgz#87b9e71d6477fbed1d4c8c3fc561c11994ba573c" + integrity sha512-0S4nKE1a+EHXAInXUeuWkyzVnXzmwIbwLStVidAIoyl6sJF8xGdw+r3AaoTr7p0YXzdoDUsn3wBTCA6ZwgXVbA== + dependencies: + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/property-provider" "^3.1.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.714.0.tgz#06dc80fc910ef85aadb920d9be9b6aba971ea31a" + integrity sha512-1AXEfUSQUQg+x/DpH1XJhjf2yEgTHHatM3cvYu7FZMhRXF28Q5OJDbEFPfdqrK+vmCiYRWhszDb+zuUIvz46bw== + dependencies: + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/fetch-http-handler" "^4.1.2" + "@smithy/node-http-handler" "^3.3.2" + "@smithy/property-provider" "^3.1.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + "@smithy/util-stream" "^3.3.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.714.0.tgz#7fbe0a9c2ef00f1eee59f1bc24194f66c77fdaf2" + integrity sha512-w5wOcgBngfcvVev5wnYWXoc/W2ewVmGJkfRdGquhFt8pkUxktyd8eXehqkP7u31SONVlgy96EFTdSCzWpTrqOw== + dependencies: + "@aws-sdk/core" "3.714.0" + "@aws-sdk/credential-provider-env" "3.714.0" + "@aws-sdk/credential-provider-http" "3.714.0" + "@aws-sdk/credential-provider-process" "3.714.0" + "@aws-sdk/credential-provider-sso" "3.714.0" + "@aws-sdk/credential-provider-web-identity" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/credential-provider-imds" "^3.2.8" + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.714.0.tgz#48c90bf53e55b31b23bf464b420816ec9259f0c1" + integrity sha512-ebho1HYNKzaw0ZfbI9kEicSW8J7tsOoV6EJajsjfFnuP+GY9J5Oi4759GEq1Qqj7GxIhrySOZFzif/hxAXPWtQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.714.0" + "@aws-sdk/credential-provider-http" "3.714.0" + "@aws-sdk/credential-provider-ini" "3.714.0" + "@aws-sdk/credential-provider-process" "3.714.0" + "@aws-sdk/credential-provider-sso" "3.714.0" + "@aws-sdk/credential-provider-web-identity" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/credential-provider-imds" "^3.2.8" + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.714.0.tgz#1fd25ddda0bac94fad7d2cbeeeb84d5746af3f2a" + integrity sha512-mHM+zYJDUiXggBx4YvQgMOhbkV07KUib8/jWPnAZbUJcRncN/yevAp/WNocjUN4VaBWkooJUgoTET/okRK+TCQ== + dependencies: + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.714.0.tgz#803a21cbd558a2b47ab102c68ec9ed92e999523f" + integrity sha512-LQyHUQd+/A0PO96m6/A3KeekRplRpG9AmwLn8VPknlmACAhhbWHehzerCTd42V8dClf5pigr25/aVqh/2p/sRw== + dependencies: + "@aws-sdk/client-sso" "3.714.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/token-providers" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.714.0.tgz#975b11d07c0f87bc4f6470cb45aef5aee590b78c" + integrity sha512-piKfEJvLrGZ0bH4NPO19d1dtfCZi2p6YJUK/9vRCD1rvJidOuHNeUwIcxTnkIMovQHX12rZVvU9ub0C3CwegUQ== + dependencies: + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/property-provider" "^3.1.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.714.0.tgz#c184781eb3e00648e9ca0f6db4522be8e8fbde4e" + integrity sha512-I/xSOskiseJJ8i183Z522BgqbgYzLKP7jGcg2Qeib/IWoG2IP+9DH8pwqagKaPAycyswtnoKBJiiFXY43n0CkA== + dependencies: + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-arn-parser" "3.693.0" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-config-provider" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.714.0.tgz#8ea3941adf191c94246a9bc56c443d350fd32589" + integrity sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.714.0.tgz#a42c12bfc3d619f40bc1c05d00ce535b4c3264fa" + integrity sha512-y5I2mRmTDRQ/SYa+F30RRE4xchTHmDPDiYKFRRoENxFhVcrv/FbjA3hfhB8Z95JfSalzJVr+XQjd+N+t4M2gMw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-crypto/util" "5.2.0" + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-stream" "^3.3.2" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.714.0.tgz#c14707c2501e70a4343644f876bea5b575dc74e2" + integrity sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.714.0.tgz#67bcc4552287481ac631be1c7a3326601be70f9b" + integrity sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.714.0.tgz#c059e1aabf28fdfc647db6a3dba625a9813787cd" + integrity sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.714.0.tgz#c2d20d335c035196ac1cd5cdf3f58c5f31b01bdb" + integrity sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.714.0.tgz#d07f48aef867bf9f937031406ba70ec98d021ee5" + integrity sha512-YYhX+JefwwEsUxYs0YXn5Mfb97Lo3hwnk3qRIlUkcotCsHYwgCX4jVWjeh8HK+RFFx3Krbh/8/YmzTkI/Z4Z9Q== + dependencies: + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-arn-parser" "3.693.0" + "@smithy/core" "^2.5.5" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/protocol-http" "^4.1.8" + "@smithy/signature-v4" "^4.2.4" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-stream" "^3.3.2" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.714.0.tgz#a5112a5537da9330ab476c8f9c549e3e9ffba510" + integrity sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.714.0.tgz#15cebf91f8bf51f494174911fd8808b32bf3a905" + integrity sha512-OgLjJf7WxUqA2OgiqGCfIc68gsbXlIG8LjObBiF0qlMStAd0L23AGuK5VmYinJlsle9qUpwQvWgKFKaDgdQXgA== + dependencies: + "@aws-sdk/core" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@aws-sdk/util-endpoints" "3.714.0" + "@smithy/core" "^2.5.5" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.714.0.tgz#26449aeb67daa00560c69bb80cb6cd187ee18dc9" + integrity sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.714.0.tgz#91db060340d0006083cc750a4291a3144b4c4392" + integrity sha512-xIQyx0ILRtJZnSUPpMsWkwASuFDYh9GPnr7p+pmfsV5KtRQluHuoH1wPkPTeNuTnAl7RDHUOmcOgTPUCDxiKxg== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/protocol-http" "^4.1.8" + "@smithy/signature-v4" "^4.2.4" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.714.0.tgz#c308dff77d18978f630188000aebb87be38f5526" + integrity sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/types@3.714.0", "@aws-sdk/types@^3.222.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.714.0.tgz#de6afee1436d2d95364efa0663887f3bf0b1303a" + integrity sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.693.0": + version "3.693.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz#8dae27eb822ab4f88be28bb3c0fc11f1f13d3948" + integrity sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.714.0.tgz#f059c27bedf329584358b1f837cd9a5c220f34e2" + integrity sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/types" "^3.7.2" + "@smithy/util-endpoints" "^2.1.7" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.693.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz#1160f6d055cf074ca198eb8ecf89b6311537ad6c" + integrity sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.714.0.tgz#7768660fa92a70b78406810a30174fb20508eb61" + integrity sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw== + dependencies: + "@aws-sdk/types" "3.714.0" + "@smithy/types" "^3.7.2" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.714.0": + version "3.714.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.714.0.tgz#b9c86713fb0c9770cec9935eac93a74cf70844fd" + integrity sha512-x8JoZb7yBEbNUmHUNoRAP4L++6A5uZCVf2yFLw8CZKpH4q+Cf1a68ou48OfnND3H0rbBnLXc/3uOlseRvd57/g== + dependencies: + "@aws-sdk/middleware-user-agent" "3.714.0" + "@aws-sdk/types" "3.714.0" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@aws-sdk/xml-builder@3.709.0": + version "3.709.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.709.0.tgz#5841faa1e78afcea064557a1a56709978b325758" + integrity sha512-2GPCwlNxeHspoK/Mc8nbk9cBOkSpp3j2SJUQmFnyQK6V/pR6II2oPRyZkMomug1Rc10hqlBHByMecq4zhV2uUw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2": version "7.24.2" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz" @@ -480,23 +1082,23 @@ resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.2.2.tgz#1a6d89603fb215dc4d4178052d05b30b83c75402" integrity sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A== -"@commitlint/cli@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.5.0.tgz#a6e2f7f8397ddf9abd5ee5870e30a1bf51b7be2b" - integrity sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ== +"@commitlint/cli@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.6.0.tgz#98e7fc8501cc38b6eef4b7f61e19b15f3c53700e" + integrity sha512-v17BgGD9w5KnthaKxXnEg6KLq6DYiAxyiN44TpiRtqyW8NSq+Kx99mkEG8Qo6uu6cI5eMzMojW2muJxjmPnF8w== dependencies: "@commitlint/format" "^19.5.0" - "@commitlint/lint" "^19.5.0" + "@commitlint/lint" "^19.6.0" "@commitlint/load" "^19.5.0" "@commitlint/read" "^19.5.0" "@commitlint/types" "^19.5.0" tinyexec "^0.3.0" yargs "^17.0.0" -"@commitlint/config-conventional@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.5.0.tgz#f838cdaed0e0e223cdc2e865f055d474a49fe18c" - integrity sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg== +"@commitlint/config-conventional@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.6.0.tgz#badba72c8639ea79291e2941001bd7ea7fad3a2c" + integrity sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ== dependencies: "@commitlint/types" "^19.5.0" conventional-changelog-conventionalcommits "^7.0.2" @@ -534,22 +1136,22 @@ "@commitlint/types" "^19.5.0" chalk "^5.3.0" -"@commitlint/is-ignored@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.5.0.tgz#f8b7f365887acc1e3bdb31b17117bb435585dddf" - integrity sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w== +"@commitlint/is-ignored@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.6.0.tgz#6adb9097d36b68e00b9c06a73d7a08e9f54c54dc" + integrity sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw== dependencies: "@commitlint/types" "^19.5.0" semver "^7.6.0" -"@commitlint/lint@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.5.0.tgz#f4e162e7857a1c0694b20b92527704897558ff70" - integrity sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg== +"@commitlint/lint@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.6.0.tgz#f9fc9b11b808c96bd3f85e882e056daabac40c36" + integrity sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg== dependencies: - "@commitlint/is-ignored" "^19.5.0" + "@commitlint/is-ignored" "^19.6.0" "@commitlint/parse" "^19.5.0" - "@commitlint/rules" "^19.5.0" + "@commitlint/rules" "^19.6.0" "@commitlint/types" "^19.5.0" "@commitlint/load@^19.5.0": @@ -605,10 +1207,10 @@ lodash.mergewith "^4.6.2" resolve-from "^5.0.0" -"@commitlint/rules@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.5.0.tgz#2a72ab506d49d7f33eda56f0ae072a3479429e74" - integrity sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw== +"@commitlint/rules@^19.6.0": + version "19.6.0" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.6.0.tgz#2436da7974c3cf2a7236257f3ef5dd40c4d91312" + integrity sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw== dependencies: "@commitlint/ensure" "^19.5.0" "@commitlint/message" "^19.5.0" @@ -1059,20 +1661,20 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== -"@fontsource/noto-sans@^5.0.22": - version "5.0.22" - resolved "https://registry.yarnpkg.com/@fontsource/noto-sans/-/noto-sans-5.0.22.tgz#2c5249347ba84fef16e71a58e0ec01b460174093" - integrity sha512-PwjvKPGFbgpwfKjWZj1zeUvd7ExUW2AqHE9PF9ysAJ2gOuzIHWE6mEVIlchYif7WC2pQhn+g0w6xooCObVi+4A== +"@fontsource/noto-sans@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@fontsource/noto-sans/-/noto-sans-5.1.0.tgz#54a5edd1b2b8c8e17bec6a85d4ee3a53b4b89c1f" + integrity sha512-P6X+ynPOteCsbUHI7rU4UIpRJcuraJ3OllKqPIjKgxPZS0yPtxFyquADb4SmcgZosRrgqDy34/dcSIhio3Qx4Q== "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@hookform/resolvers@^3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.9.0.tgz#cf540ac21c6c0cd24a40cf53d8e6d64391fb753d" - integrity sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg== +"@hookform/resolvers@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.9.1.tgz#a23883c40bfd449cb6c6ab5a0fa0729184c950ff" + integrity sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug== "@humanwhocodes/config-array@^0.13.0": version "0.13.0" @@ -1093,11 +1695,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@intercom/messenger-js-sdk@^0.0.14": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@intercom/messenger-js-sdk/-/messenger-js-sdk-0.0.14.tgz#a27999370cc0a82a2a57a779426df25a57891863" - integrity sha512-2dH4BDAh9EI90K7hUkAdZ76W79LM45Sd1OBX7t6Vzy8twpNiQ5X+7sH9G5hlJlkSGnf+vFWlFcy9TOYAyEs1hA== - "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" @@ -1662,6 +2259,496 @@ resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== +"@smithy/abort-controller@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.9.tgz#47d323f754136a489e972d7fd465d534d72fcbff" + integrity sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz#39045ed278ee1b6f4c12715c7565678557274c29" + integrity sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ== + dependencies: + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz#754099909957fb1986c16eb88afad75919d7129d" + integrity sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^3.0.13": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.13.tgz#653643a77a33d0f5907a5e7582353886b07ba752" + integrity sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + +"@smithy/core@^2.5.5": + version "2.5.5" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.5.tgz#c75b15caee9e58c800db3e6b99e9e373532d394a" + integrity sha512-G8G/sDDhXA7o0bOvkc7bgai6POuSld/+XhNnWAbpQTpLv2OZPvyqQ58tLPPlz0bSNsXktldDDREIv1LczFeNEw== + dependencies: + "@smithy/middleware-serde" "^3.0.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-stream" "^3.3.2" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de" + integrity sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^3.1.10": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz#0c1a3457e7a23b71cd71525ceb668f8569a84dad" + integrity sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.7.2" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^3.0.14": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz#0c3584c7cde2e210aacdfbbd2b57c1d7e2ca3b95" + integrity sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.13" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz#5edceba836debea165ea93145231036f6286d67c" + integrity sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^3.0.13": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz#5aebd7b553becee277e411a2b69f6af8c9d7b3a6" + integrity sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.13" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.13": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz#609c922ea14a0a3eed23a28ac110344c935704eb" + integrity sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw== + dependencies: + "@smithy/eventstream-codec" "^3.1.10" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.2.tgz#f034ff16416b37d92908a1381ef5fddbf4ef1879" + integrity sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA== + dependencies: + "@smithy/protocol-http" "^4.1.8" + "@smithy/querystring-builder" "^3.0.11" + "@smithy/types" "^3.7.2" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^3.1.10": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.10.tgz#985e308189c2687a15004152b97506882ffb2b13" + integrity sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA== + dependencies: + "@smithy/chunked-blob-reader" "^4.0.0" + "@smithy/chunked-blob-reader-native" "^3.0.1" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.11.tgz#99e09ead3fc99c8cd7ca0f254ea0e35714f2a0d3" + integrity sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^3.1.10": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-3.1.10.tgz#94716b4556f4ccf2807e605f47bb5b018ed7dfb0" + integrity sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae" + integrity sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" + integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== + dependencies: + tslib "^2.6.2" + +"@smithy/md5-js@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.11.tgz#27e4dab616348ff94aed24dc75e4017c582df40f" + integrity sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^3.0.13": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f" + integrity sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw== + dependencies: + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.5.tgz#bdcfdf1f342cf933b0b8a709996f9a8fbb8148f4" + integrity sha512-VhJNs/s/lyx4weiZdXSloBgoLoS8osV0dKIain8nGmx7of3QFKu5BSdEuk1z/U8x9iwes1i+XCiNusEvuK1ijg== + dependencies: + "@smithy/core" "^2.5.5" + "@smithy/middleware-serde" "^3.0.11" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.30": + version "3.0.30" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.30.tgz#2580322d0d28ad782b5b8c07c150b14efdc3b2f9" + integrity sha512-6323RL2BvAR3VQpTjHpa52kH/iSHyxd/G9ohb2MkBk2Ucu+oMtRXT8yi7KTSIS9nb58aupG6nO0OlXnQOAcvmQ== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/protocol-http" "^4.1.8" + "@smithy/service-error-classification" "^3.0.11" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-retry" "^3.0.11" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz#c7d54e0add4f83e05c6878a011fc664e21022f12" + integrity sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc" + integrity sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.1.12": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c" + integrity sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ== + dependencies: + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.2.tgz#b34685863b74dabdaf7860aa81b42d0d5437c7e0" + integrity sha512-t4ng1DAd527vlxvOfKFYEe6/QFBcsj7WpNlWTyjorwXXcKw3XlltBGbyHfSJ24QT84nF+agDha9tNYpzmSRZPA== + dependencies: + "@smithy/abort-controller" "^3.1.9" + "@smithy/protocol-http" "^4.1.8" + "@smithy/querystring-builder" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/property-provider@^3.1.11": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad" + integrity sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.1.8": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" + integrity sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909" + integrity sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969" + integrity sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/service-error-classification@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a" + integrity sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog== + dependencies: + "@smithy/types" "^3.7.2" + +"@smithy/shared-ini-file-loader@^3.1.12": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a" + integrity sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/signature-v4@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d" + integrity sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.5.0.tgz#65cff262801b009998c1196764ee69929ee06f8a" + integrity sha512-Y8FeOa7gbDfCWf7njrkoRATPa5eNLUEjlJS5z5rXatYuGkCb80LbHcu8AQR8qgAZZaNHCLyo2N+pxPsV7l+ivg== + dependencies: + "@smithy/core" "^2.5.5" + "@smithy/middleware-endpoint" "^3.2.5" + "@smithy/middleware-stack" "^3.0.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-stream" "^3.3.2" + tslib "^2.6.2" + +"@smithy/types@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10" + integrity sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d" + integrity sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw== + dependencies: + "@smithy/querystring-parser" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-base64@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" + integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" + integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" + integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" + integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-config-provider@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" + integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^3.0.30": + version "3.0.30" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.30.tgz#6c0d95af3f15bef8f1fe3f6217cc4f5ba8df5554" + integrity sha512-nLuGmgfcr0gzm64pqF2UT4SGWVG8UGviAdayDlVzJPNa6Z4lqvpDzdRXmLxtOdEjVlTOEdpZ9dd3ZMMu488mzg== + dependencies: + "@smithy/property-provider" "^3.1.11" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.30": + version "3.0.30" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.30.tgz#33cdb02f90944b9ff221e2f8e0904a63ac1e335f" + integrity sha512-OD63eWoH68vp75mYcfYyuVH+p7Li/mY4sYOROnauDrtObo1cS4uWfsy/zhOTW8F8ZPxQC1ZXZKVxoxvMGUv2Ow== + dependencies: + "@smithy/config-resolver" "^3.0.13" + "@smithy/credential-provider-imds" "^3.2.8" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/smithy-client" "^3.5.0" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz#a088ebfab946a7219dd4763bfced82709894b82d" + integrity sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" + integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf" + integrity sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425" + integrity sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ== + dependencies: + "@smithy/service-error-classification" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-stream@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.2.tgz#daeea26397e8541cf2499ce65bf0b8d528cba421" + integrity sha512-sInAqdiVeisUGYAv/FrXpmJ0b4WTFmciTRqzhb7wVuem9BHvhIG7tpiYHLDWrl2stOokNZpTTGqz3mzB2qFwXg== + dependencies: + "@smithy/fetch-http-handler" "^4.1.2" + "@smithy/node-http-handler" "^3.3.2" + "@smithy/types" "^3.7.2" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" + integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.0.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" + integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-waiter@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.2.0.tgz#1e52f870e77d2e5572025f7606053e6ff00df93d" + integrity sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg== + dependencies: + "@smithy/abort-controller" "^3.1.9" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@sqltools/formatter@^1.2.5": version "1.2.5" resolved "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz" @@ -1991,19 +3078,19 @@ resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== -"@types/jsdom@^21.1.6": - version "21.1.6" - resolved "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.6.tgz" - integrity sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw== +"@types/jsdom@^21.1.7": + version "21.1.7" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.7.tgz#9edcb09e0b07ce876e7833922d3274149c898cfa" + integrity sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA== dependencies: "@types/node" "*" "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/jsonwebtoken@^9.0.6": - version "9.0.6" - resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz" - integrity sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw== +"@types/jsonwebtoken@^9.0.7": + version "9.0.7" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz#e49b96c2b29356ed462e9708fc73b833014727d2" + integrity sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg== dependencies: "@types/node" "*" @@ -2252,12 +3339,12 @@ modern-ahocorasick "^1.0.0" picocolors "^1.0.0" -"@vanilla-extract/dynamic@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.1.tgz#bc93a577b127a7dcb6f254973d13a863029a7faf" - integrity sha512-iqf736036ujEIKsIq28UsBEMaLC2vR2DhwKyrG3NDb/fRy9qL9FKl1TqTtBV4daU30Uh3saeik4vRzN8bzQMbw== +"@vanilla-extract/dynamic@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.2.tgz#b1d1c1e0e392934c5a3bbb53f99069a7721311ac" + integrity sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A== dependencies: - "@vanilla-extract/private" "^1.0.5" + "@vanilla-extract/private" "^1.0.6" "@vanilla-extract/integration@^7.1.3": version "7.1.4" @@ -2282,10 +3369,10 @@ resolved "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.4.tgz" integrity sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg== -"@vanilla-extract/private@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.5.tgz#8c08ac4851f4cc89a3dcdb858d8938e69b1481c4" - integrity sha512-6YXeOEKYTA3UV+RC8DeAjFk+/okoNz/h88R+McnzA2zpaVqTR/Ep+vszkWYlGBcMNO7vEkqbq5nT/JMMvhi+tw== +"@vanilla-extract/private@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.6.tgz#f10bbf3189f7b827d0bd7f804a6219dd03ddbdd4" + integrity sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw== "@vanilla-extract/recipes@^0.5.2": version "0.5.2" @@ -2528,14 +3615,12 @@ aria-hidden@^1.1.1: dependencies: tslib "^2.0.0" -aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -2680,10 +3765,10 @@ axe-core@^4.10.0: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== -axios@^1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== +axios@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -2721,10 +3806,10 @@ bep53-range@^2.0.0: resolved "https://registry.yarnpkg.com/bep53-range/-/bep53-range-2.0.0.tgz#a1770475661b4b814c4359e4b66f7cbd88de2b10" integrity sha512-sMm2sV5PRs0YOVk0LTKtjuIprVzxgTQUsrGX/7Yph2Rm4FO2Fqqtq7hNjsOB5xezM4v4+5rljCgK++UeQJZguA== -better-sqlite3@^11.3.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.3.0.tgz#f10b32ddff665c33176d148e707bd1e57dfd0284" - integrity sha512-iHt9j8NPYF3oKCNOO5ZI4JwThjt3Z6J6XrcwG85VNMVzv1ByqrHWv5VILEbCMFWDsoHhXvQ7oC8vgRXFAKgl9w== +better-sqlite3@^11.7.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.7.0.tgz#3eaa0f54f9e57d0a100d980e42320f8b9a4cd676" + integrity sha512-mXpa5jnIKKHeoGzBrUJrc65cXFKcILGZpU3FXR0pradUEm9MA7UZz02qfEejaMcm9iXrSOCenwwYMJ/tZ1y5Ig== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -2762,6 +3847,11 @@ boolean@^3.0.1: resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2907,6 +3997,14 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -2918,6 +4016,24 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.2.tgz#9dbd4daf9f5f753bec3e4c8fbb8a2ecc4de6c39b" + integrity sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg== + dependencies: + call-bind "^1.0.8" + get-intrinsic "^1.2.5" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3380,30 +4496,6 @@ dedent@^1.5.1, dedent@^1.5.3: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -3479,10 +4571,10 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -dexie@^4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/dexie/-/dexie-4.0.9.tgz#8c4e827815a84ef4fdc6aa7923f89ea2cda87610" - integrity sha512-VQG1huEVSAdDZssb9Bb9mFy+d3jAE0PT4d1nIRYlT46ip1fzbs1tXi0SlUayRDgV3tTbJG8ZRqAo2um49gtynA== +dexie@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/dexie/-/dexie-4.0.10.tgz#979e3ee75993b44eea3852f97ceb198019d5b287" + integrity sha512-eM2RzuR3i+M046r2Q0Optl3pS31qTWf8aFuA7H9wnsHTwl8EPvroVLwvQene/6paAs39Tbk6fWZcn2aZaHkc/w== diff@^4.0.1: version "4.0.2" @@ -3573,6 +4665,15 @@ dotenv@^16.0.3, dotenv@^16.4.4, dotenv@^16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== +dunder-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80" + integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-errors "^1.3.0" + gopd "^1.2.0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -3608,10 +4709,10 @@ electron-builder@^25.1.8: simple-update-notifier "2.0.0" yargs "^17.6.2" -electron-log@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.0.tgz#505716926dfcf9cb3e74f42b1003be6d865bcb88" - integrity sha512-VjLkvaLmbP3AOGOh5Fob9M8bFU0mmeSAb5G2EoTBx+kQLf2XA/0byzjsVGBTHhikbT+m1AB27NEQUv9wX9nM8w== +electron-log@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.4.tgz#6b488d9db80aa3c6f3dc39bcd635fc9d1f79c8af" + integrity sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA== electron-publish@25.1.7: version "25.1.7" @@ -3657,10 +4758,10 @@ electron-vite@^2.0.0: magic-string "^0.30.10" picocolors "^1.0.1" -electron@^30.3.0: - version "30.5.1" - resolved "https://registry.yarnpkg.com/electron/-/electron-30.5.1.tgz#9f6060ce5b869c3803cbf8064305e9c3056c0744" - integrity sha512-AhL7+mZ8Lg14iaNfoYTkXQ2qee8mmsQyllKdqxlpv/zrKgfxz6jNVtcRRbQtLxtF8yzcImWdfTQROpYiPumdbw== +electron@^31.7.6: + version "31.7.6" + resolved "https://registry.yarnpkg.com/electron/-/electron-31.7.6.tgz#c3eccfdd2209cd782e9c2a1fc3b9a5532406928d" + integrity sha512-fc2kMaEc/zxGTW6oCxbuE7BQNOlDucSo+351AiovBAcp7G0iQkVu3k2kHIQolSsD38+tPdBj/N02DVpZTzi7rg== dependencies: "@electron/get" "^2.0.0" "@types/node" "^20.9.0" @@ -3712,7 +4813,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: +es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -3764,6 +4865,58 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 unbox-primitive "^1.0.2" which-typed-array "^1.1.15" +es-abstract@^1.23.5: + version "1.23.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb" + integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -3771,30 +4924,20 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.19: - version "1.0.19" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" - integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== +es-iterator-helpers@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz#2f1a3ab998b30cb2d10b195b587c6d9ebdebf152" + integrity sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" @@ -3803,12 +4946,13 @@ es-iterator-helpers@^1.0.19: es-set-tostringtag "^2.0.3" function-bind "^1.1.2" get-intrinsic "^1.2.4" - globalthis "^1.0.3" + globalthis "^1.0.4" + gopd "^1.0.1" has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" internal-slot "^1.0.7" - iterator.prototype "^1.1.2" + iterator.prototype "^1.1.3" safe-array-concat "^1.1.2" es-object-atoms@^1.0.0: @@ -3926,12 +5070,12 @@ eslint-config-prettier@^9.1.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== -eslint-plugin-jsx-a11y@^6.8.0: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz#36fb9dead91cafd085ddbe3829602fb10ef28339" - integrity sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg== +eslint-plugin-jsx-a11y@^6.10.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== dependencies: - aria-query "~5.1.3" + aria-query "^5.3.2" array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" @@ -3939,14 +5083,13 @@ eslint-plugin-jsx-a11y@^6.8.0: axobject-query "^4.1.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.19" hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" object.fromentries "^2.0.8" safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.0" + string.prototype.includes "^2.0.1" eslint-plugin-prettier@^5.0.1: version "5.2.1" @@ -3961,17 +5104,17 @@ eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== -eslint-plugin-react@^7.33.2: - version "7.37.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz#56493d7d69174d0d828bc83afeffe96903fdadbd" - integrity sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg== +eslint-plugin-react@^7.37.2: + version "7.37.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz#cd0935987876ba2900df2f58339f6d92305acc7a" + integrity sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.19" + es-iterator-helpers "^1.1.0" estraverse "^5.3.0" hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" @@ -4155,6 +5298,13 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-xml-parser@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + dependencies: + strnum "^1.0.5" + fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -4388,7 +5538,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -4404,6 +5554,22 @@ get-nonce@^1.0.0: resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz#43dd3dd0e7b49b82b2dfcad10dc824bf7fc265d5" + integrity sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA== + dependencies: + call-bind-apply-helpers "^1.0.1" + dunder-proto "^1.0.0" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.0.0" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -4548,7 +5714,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.1, globalthis@^1.0.3: +globalthis@^1.0.1, globalthis@^1.0.3, globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -4575,6 +5741,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + got@^11.7.0, got@^11.8.5: version "11.8.6" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" @@ -4634,6 +5805,11 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" @@ -4732,10 +5908,10 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^9.0.11: - version "9.1.6" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.6.tgz#e23aa996b6203ab33534bdc82306b0cf2cb07d6c" - integrity sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== +husky@^9.1.7: + version "9.1.7" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== i18next-browser-languagedetector@^7.2.1: version "7.2.1" @@ -4837,7 +6013,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.4, internal-slot@^1.0.7: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -4866,15 +6042,7 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -4906,6 +6074,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -4914,6 +6089,14 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-boolean-object@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" + integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -4940,24 +6123,32 @@ is-data-view@^1.0.1: dependencies: is-typed-array "^1.1.13" -is-date-object@^1.0.1, is-date-object@^1.0.5: +is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" +is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== +is-finalizationregistry@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz#d74a7d0c5f3578e34a20729e69202e578d495dc2" + integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -4988,7 +6179,7 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-map@^2.0.2, is-map@^2.0.3: +is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -5005,6 +6196,14 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.0.tgz#5a867e9ecc3d294dda740d9f127835857af7eb05" + integrity sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -5033,7 +6232,17 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.2, is-set@^2.0.3: +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== @@ -5057,6 +6266,14 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-string@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.0.tgz#8cb83c5d57311bf8058bc6c8db294711641da45d" + integrity sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g== + dependencies: + call-bind "^1.0.7" + has-tostringtag "^1.0.2" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" @@ -5064,6 +6281,15 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-symbol@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + is-text-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" @@ -5123,16 +6349,17 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== +iterator.prototype@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.4.tgz#4ae6cf98b97fdc717b7e159d79dc25f8fc9482f1" + integrity sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA== dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + reflect.getprototypeof "^1.0.8" + set-function-name "^2.0.2" jackspeak@^2.3.6: version "2.3.6" @@ -5592,6 +6819,11 @@ matcher@^3.0.0: dependencies: escape-string-regexp "^4.0.0" +math-intrinsics@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.0.0.tgz#4e04bf87c85aa51e90d078dac2252b4eb5260817" + integrity sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA== + media-query-parser@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/media-query-parser/-/media-query-parser-2.0.2.tgz#ff79e56cee92615a304a1c2fa4f2bd056c0a1d29" @@ -5935,13 +7167,10 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" +object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== object-keys@^1.1.1: version "1.1.1" @@ -6267,10 +7496,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^3.2.4: - version "3.3.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" - integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== +prettier@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== progress@^2.0.3: version "2.0.3" @@ -6484,25 +7713,26 @@ reflect-metadata@^0.2.1: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== -reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== +reflect.getprototypeof@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz#c58afb17a4007b4d1118c07b92c23fca422c5d82" + integrity sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.23.1" + dunder-proto "^1.0.0" + es-abstract "^1.23.5" es-errors "^1.3.0" get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" + gopd "^1.2.0" + which-builtin-type "^1.2.0" regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -6512,6 +7742,16 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" +regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6696,6 +7936,15 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6888,7 +8137,7 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.2.1: +set-function-length@^1.2.1, set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -7067,13 +8316,6 @@ stat-mode@^1.0.0: resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -7101,13 +8343,14 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.includes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" - integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" string.prototype.matchall@^4.0.11: version "4.0.11" @@ -7201,6 +8444,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + strtok3@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-9.0.1.tgz#7e3d7bbd2b829c9def6a7bb90d82e240abdd32be" @@ -7680,10 +8928,10 @@ use-sync-external-store@^1.0.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== -user-agents@^1.1.193: - version "1.1.325" - resolved "https://registry.yarnpkg.com/user-agents/-/user-agents-1.1.325.tgz#12c3602d6b0175468f45564b3c684c390c3be57e" - integrity sha512-BmVDscJOZsBBztMPHg+wf65QwbT+N3C46YEsuW8BmcxRxwKh2AbdSaKEjzoC7rDlyuECXEUXO+C2eW3QAhbl2A== +user-agents@^1.1.387: + version "1.1.387" + resolved "https://registry.yarnpkg.com/user-agents/-/user-agents-1.1.387.tgz#afc69da00b50eee7ffa17724890e755a6672b99f" + integrity sha512-EQ1tx80ucECUrw+mY/lI4lVQTEN7nYflGpuLwqZS6vXw+pfzHMnhKPwZN9NiR+Mo9QxmDeNmk+2ZDEvInsxrxw== dependencies: lodash.clonedeep "^4.5.0" @@ -7697,7 +8945,7 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^9.0.0: +uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== @@ -7812,25 +9060,37 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-builtin-type@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" - integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== +which-boxed-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz#2d850d6c4ac37b95441a67890e19f3fda8b6c6d9" + integrity sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng== dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.0" + is-number-object "^1.1.0" + is-string "^1.1.0" + is-symbol "^1.1.0" + +which-builtin-type@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" function.prototype.name "^1.1.6" has-tostringtag "^1.0.2" is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" is-generator-function "^1.0.10" - is-regex "^1.1.4" + is-regex "^1.2.1" is-weakref "^1.0.2" isarray "^2.0.5" - which-boxed-primitive "^1.0.2" + which-boxed-primitive "^1.1.0" which-collection "^1.0.2" - which-typed-array "^1.1.15" + which-typed-array "^1.1.16" -which-collection@^1.0.1, which-collection@^1.0.2: +which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -7840,7 +9100,7 @@ which-collection@^1.0.1, which-collection@^1.0.2: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -7851,6 +9111,17 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: gopd "^1.0.1" has-tostringtag "^1.0.2" +which-typed-array@^1.1.16: + version "1.1.16" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.16.tgz#db4db429c4706feca2f01677a144278e4a8c216b" + integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -7947,10 +9218,10 @@ yallist@^5.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== -yaml@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.1.tgz#c9772aacf62cb7494a95b0c4f1fb065b563db130" - integrity sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q== +yaml@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== yargs-parser@^20.2.2: version "20.2.9" @@ -8011,17 +9282,17 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== -yup@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-1.4.0.tgz#898dcd660f9fb97c41f181839d3d65c3ee15a43e" - integrity sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg== +yup@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.5.0.tgz#1aaa5e453f04424094b9c8a0e5292e0ac2d97246" + integrity sha512-NJfBIHnp1QbqZwxcgl6irnDMIsb/7d1prNhFx02f1kp8h+orpi4xs3w90szNpOh68a/iHPdMsYvhZWoDmUvXBQ== dependencies: property-expr "^2.0.5" tiny-case "^1.0.3" toposort "^2.0.2" type-fest "^2.19.0" -zod@^3.23.8: - version "3.23.8" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" - integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== +zod@^3.24.1: + version "3.24.1" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee" + integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==