diff --git a/.github/workflows/ci-nym-vpn-ui-js.yml b/.github/workflows/ci-nym-vpn-ui-js.yml deleted file mode 100644 index fc923aa43e..0000000000 --- a/.github/workflows/ci-nym-vpn-ui-js.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: ci-nym-vpn-ui-js - -on: - workflow_dispatch: - pull_request: - paths: - - 'nym-vpn/ui/src/**' - - 'nym-vpn/ui/package.json' - - 'nym-vpn/ui/index.html' - -jobs: - check: - runs-on: custom-linux - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Install Node - uses: actions/setup-node@v3 - with: - node-version: 18 - - name: Install Yarn - run: npm install -g yarn - - name: Install dependencies - working-directory: nym-vpn/ui - run: yarn - - name: Type-check - working-directory: nym-vpn/ui - run: yarn typecheck - - name: Check lint - working-directory: nym-vpn/ui - run: yarn lint - - name: Check formatting - working-directory: nym-vpn/ui - run: yarn fmt:check -# - name: Run tests -# working-directory: nym-vpn/ui -# run: yarn test - - name: Check build - working-directory: nym-vpn/ui - run: yarn build diff --git a/.github/workflows/ci-nym-vpn-ui-rust.yml b/.github/workflows/ci-nym-vpn-ui-rust.yml deleted file mode 100644 index 89048d612d..0000000000 --- a/.github/workflows/ci-nym-vpn-ui-rust.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: ci-nym-vpn-ui-rust - -on: - workflow_dispatch: - pull_request: - paths: - - 'nym-vpn/ui/src-tauri/**' - -jobs: - build: - runs-on: custom-linux - env: - CARGO_TERM_COLOR: always - CARGOTOML_PATH: ./nym-vpn/ui/src-tauri/Cargo.toml - steps: - - name: Install Dependencies (Linux) - run: sudo apt-get update && sudo apt-get -y install libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev squashfs-tools libayatana-appindicator3-dev - continue-on-error: true - - - name: Checkout - uses: actions/checkout@v4 - - - name: Install rust toolchain - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - override: true - components: rustfmt, clippy - - - name: Prepare build - run: mkdir nym-vpn/ui/dist - - - name: Build - uses: actions-rs/cargo@v1 - with: - command: build - args: --manifest-path ${{ env.CARGOTOML_PATH }} --features custom-protocol - -# - name: Run all tests -# uses: actions-rs/cargo@v1 -# with: -# command: test -# args: --manifest-path ${{ env.CARGOTOML_PATH }} - - - name: Check formatting - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --manifest-path ${{ env.CARGOTOML_PATH }} --all -- --check - - - name: Annotate with clippy checks - uses: actions-rs/clippy-check@v1 - continue-on-error: true - with: - token: ${{ secrets.GITHUB_TOKEN }} - args: --manifest-path ${{ env.CARGOTOML_PATH }} --all-features - - - name: Clippy - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --manifest-path ${{ env.CARGOTOML_PATH }} --all-features --all-targets -- -D warnings diff --git a/nym-vpn/android/.gitignore b/nym-vpn/android/.gitignore deleted file mode 100644 index 31caa0cedf..0000000000 --- a/nym-vpn/android/.gitignore +++ /dev/null @@ -1,71 +0,0 @@ -# Built application files -*.apk -*.aar -*.ap_ -*.aab -# Files for the ART/Dalvik VM -*.dex -# Java class files -*.class -# Generated files -bin/ -gen/ -out/ -release/ -build/ -# Gradle files -.gradle/ -# Local configuration file (sdk path, etc) -local.properties -# Proguard folder generated by Eclipse -proguard/ -# Log Files -*.log -# Android Studio Navigation editor temp files -.navigation/ -# Android Studio captures folder -captures/ -# IntelliJ -*.iml -.idea/ -# .idea/workspace.xml -# .idea/tasks.xml -# .idea/gradle.xml -# .idea/assetWizardSettings.xml -# .idea/dictionaries -.idea/libraries -# Android Studio 3 in .gitignore file. -.idea/caches -.idea/modules.xml -# Comment next line if keeping position of elements in Navigation Editor is relevant for you -.idea/navEditor.xml -# Keystore files -# Uncomment the following lines if you do not want to check your keystore files in. -*.jks -*.keystore -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild -.cxx/ -# Freeline -freeline.py -freeline/ -freeline_project_description.json -# fastlane -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots -fastlane/test_output -fastlane/readme.md -# Version control -vcs.xml -# lint -lint/intermediates/ -lint/generated/ -lint/outputs/ -lint/tmp/ -# lint/reports/ -# MacOS -.DS_Store -# App Specific cases -app/release/output.json -.idea/codeStyles/ diff --git a/nym-vpn/android/LICENSE b/nym-vpn/android/LICENSE deleted file mode 100644 index 51f3844dba..0000000000 --- a/nym-vpn/android/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 NymConnect - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/nym-vpn/android/README.md b/nym-vpn/android/README.md deleted file mode 100644 index e4a334e993..0000000000 --- a/nym-vpn/android/README.md +++ /dev/null @@ -1,42 +0,0 @@ -## NymConnect for Android - -### Prerequisites - -_TODO_ - -### Getting started - -[Install](https://developer.android.com/studio/install) Android Studio and open -the project.\ -Setup an android emulator using AVD.\ -[Run](https://developer.android.com/studio/run/emulator) the project. - -**⚠ NOTE**: be sure -to [set](https://developer.android.com/studio/run#changing-variant) -the build variant to `x86_64Debug` when running on emulator - -### Features - -* Add tunnels via .conf file -* Auto connect to VPN based on Wi-Fi SSID -* Split tunneling by application with search -* Always-on VPN for Android support -* Quick tile support for vpn toggling -* Dynamic shortcuts support for automation integration -* Configurable Trusted Network list -* Optional auto connect on mobile data -* Automatic service restart after reboot -* Service will stay running in background after app has been closed - -### Building - -_TODO_ - -### Credits - -This project is based on the "WG Tunnel" project made by Zane Schepke -https://github.com/zaneschepke/wgtunnel - -### License - -MIT diff --git a/nym-vpn/android/app/.gitignore b/nym-vpn/android/app/.gitignore deleted file mode 100644 index 956c004dc0..0000000000 --- a/nym-vpn/android/app/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build -/release \ No newline at end of file diff --git a/nym-vpn/android/app/build.gradle.kts b/nym-vpn/android/app/build.gradle.kts deleted file mode 100644 index bc158e58e9..0000000000 --- a/nym-vpn/android/app/build.gradle.kts +++ /dev/null @@ -1,159 +0,0 @@ -val rExtra = rootProject.extra - -plugins { - id("com.android.application") - id("org.jetbrains.kotlin.android") - kotlin("kapt") - id("com.google.dagger.hilt.android") - id("org.jetbrains.kotlin.plugin.serialization") - id("io.objectbox") -} - -android { - namespace = "net.nymtech.nymconnect" - compileSdk = 34 - - val versionMajor = 1 - val versionMinor = 0 - val versionPatch = 0 - val versionBuild = 0 - - defaultConfig { - applicationId = "net.nymtech.nymconnect" - minSdk = 28 - targetSdk = 34 - versionCode = versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild - versionName = "${versionMajor}.${versionMinor}.${versionPatch}" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - vectorDrawables { - useSupportLibrary = true - } - } - - buildTypes { - release { - isDebuggable = false - isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - } - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - kotlinOptions { - jvmTarget = "17" - } - buildFeatures { - compose = true - } - composeOptions { - kotlinCompilerExtensionVersion = "1.4.8" - } - packaging { - resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" - } - } - - /* flavorDimensions += "abi" - productFlavors { - create("universal") { - dimension = "abi" - ndk { - abiFilters += listOf("arm64-v8a", "armeabi-v7a", "x86_64", "x86") - } - } - create("arch64") { - dimension = "abi" - ndk { - abiFilters += listOf("arm64-v8a", "x86_64") - } - } - create("arm64") { - dimension = "abi" - ndk { - abiFilters += "arm64-v8a" - } - } - create("arm") { - dimension = "abi" - ndk { - abiFilters += "armeabi-v7a" - } - } - create("x86_64") { - dimension = "abi" - ndk { - abiFilters += "x86_64" - } - } - create("x86") { - dimension = "abi" - ndk { - abiFilters += "x86" - } - } - } */ -} - -dependencies { - implementation("androidx.core:core-ktx:1.10.1") - implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") - implementation("androidx.activity:activity-compose:1.7.2") - implementation(platform("androidx.compose:compose-bom:2023.03.00")) - implementation("androidx.compose.ui:ui") - implementation("androidx.compose.ui:ui-graphics") - implementation("androidx.compose.ui:ui-tooling-preview") - implementation("androidx.compose.material3:material3:1.1.1") - implementation("androidx.appcompat:appcompat:1.6.1") - - testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.1.5") - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") - androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) - androidTestImplementation("androidx.compose.ui:ui-test-junit4") - debugImplementation("androidx.compose.ui:ui-tooling") - debugImplementation("androidx.compose.ui:ui-test-manifest") - - //wireguard tunnel - implementation("com.wireguard.android:tunnel:1.0.20230706") - - //logging - implementation("com.jakewharton.timber:timber:5.0.1") - - // compose navigation - implementation("androidx.navigation:navigation-compose:2.7.1") - implementation("androidx.hilt:hilt-navigation-compose:1.0.0") - - // hilt - implementation("com.google.dagger:hilt-android:${rExtra.get("hiltVersion")}") - kapt("com.google.dagger:hilt-android-compiler:${rExtra.get("hiltVersion")}") - - //accompanist - implementation("com.google.accompanist:accompanist-systemuicontroller:${rExtra.get("accompanistVersion")}") - implementation("com.google.accompanist:accompanist-permissions:${rExtra.get("accompanistVersion")}") - implementation("com.google.accompanist:accompanist-flowlayout:${rExtra.get("accompanistVersion")}") - implementation("com.google.accompanist:accompanist-navigation-animation:${rExtra.get("accompanistVersion")}") - implementation("com.google.accompanist:accompanist-drawablepainter:${rExtra.get("accompanistVersion")}") - - //db - implementation("io.objectbox:objectbox-kotlin:${rExtra.get("objectBoxVersion")}") - - //lifecycle - implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.1") - - //icons - implementation("androidx.compose.material:material-icons-extended:1.5.0") - - - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") -} - -kapt { - correctErrorTypes = true -} \ No newline at end of file diff --git a/nym-vpn/android/app/objectbox-models/default.json b/nym-vpn/android/app/objectbox-models/default.json deleted file mode 100644 index dd7a8ab78e..0000000000 --- a/nym-vpn/android/app/objectbox-models/default.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.", - "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.", - "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.", - "entities": [ - { - "id": "1:2692736974585027589", - "lastPropertyId": "15:5057486545428188436", - "name": "TunnelConfig", - "properties": [ - { - "id": "1:1985347930017457084", - "name": "id", - "type": 6, - "flags": 1 - }, - { - "id": "12:2409068226744965585", - "name": "name", - "indexId": "1:4811206443952699137", - "type": 9, - "flags": 34848 - }, - { - "id": "13:8987443291286312275", - "name": "wgQuick", - "type": 9 - } - ], - "relations": [] - }, - { - "id": "2:8887605597748372702", - "lastPropertyId": "9:4468844863383145378", - "name": "Settings", - "properties": [ - { - "id": "1:7485739868216068651", - "name": "id", - "type": 6, - "flags": 1 - }, - { - "id": "2:5814013113141456749", - "name": "isAutoTunnelEnabled", - "type": 1 - }, - { - "id": "4:5645665441196906014", - "name": "trustedNetworkSSIDs", - "type": 30 - }, - { - "id": "5:4989886999117763881", - "name": "isTunnelOnMobileDataEnabled", - "type": 1 - }, - { - "id": "6:3370284381040192129", - "name": "defaultTunnel", - "type": 9 - }, - { - "id": "9:4468844863383145378", - "name": "isAlwaysOnVpnEnabled", - "type": 1 - } - ], - "relations": [] - } - ], - "lastEntityId": "2:8887605597748372702", - "lastIndexId": "1:4811206443952699137", - "lastRelationId": "0:0", - "lastSequenceId": "0:0", - "modelVersion": 5, - "modelVersionParserMinimum": 5, - "retiredEntityUids": [], - "retiredIndexUids": [], - "retiredPropertyUids": [ - 1763475292291320186, - 6483820955437198310, - 8323071516033820771, - 5904440563612311217, - 1408037976996390989, - 7737847485212546994, - 8215616901775229364, - 8021610768066328637, - 6174306582797008721, - 2175939938544485767, - 7555225587864607050, - 969146862000617878, - 5057486545428188436, - 2814640993034665120, - 4981008812459251156 - ], - "retiredRelationUids": [], - "version": 1 -} \ No newline at end of file diff --git a/nym-vpn/android/app/objectbox-models/default.json.bak b/nym-vpn/android/app/objectbox-models/default.json.bak deleted file mode 100644 index d4084866ef..0000000000 --- a/nym-vpn/android/app/objectbox-models/default.json.bak +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.", - "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.", - "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.", - "entities": [ - { - "id": "1:2692736974585027589", - "lastPropertyId": "15:5057486545428188436", - "name": "TunnelConfig", - "properties": [ - { - "id": "1:1985347930017457084", - "name": "id", - "type": 6, - "flags": 1 - }, - { - "id": "12:2409068226744965585", - "name": "name", - "indexId": "1:4811206443952699137", - "type": 9, - "flags": 34848 - }, - { - "id": "13:8987443291286312275", - "name": "wgQuick", - "type": 9 - } - ], - "relations": [] - }, - { - "id": "2:8887605597748372702", - "lastPropertyId": "8:4981008812459251156", - "name": "Settings", - "properties": [ - { - "id": "1:7485739868216068651", - "name": "id", - "type": 6, - "flags": 1 - }, - { - "id": "2:5814013113141456749", - "name": "isAutoTunnelEnabled", - "type": 1 - }, - { - "id": "4:5645665441196906014", - "name": "trustedNetworkSSIDs", - "type": 30 - }, - { - "id": "5:4989886999117763881", - "name": "isTunnelOnMobileDataEnabled", - "type": 1 - }, - { - "id": "6:3370284381040192129", - "name": "defaultTunnel", - "type": 9 - } - ], - "relations": [] - } - ], - "lastEntityId": "2:8887605597748372702", - "lastIndexId": "1:4811206443952699137", - "lastRelationId": "0:0", - "lastSequenceId": "0:0", - "modelVersion": 5, - "modelVersionParserMinimum": 5, - "retiredEntityUids": [], - "retiredIndexUids": [], - "retiredPropertyUids": [ - 1763475292291320186, - 6483820955437198310, - 8323071516033820771, - 5904440563612311217, - 1408037976996390989, - 7737847485212546994, - 8215616901775229364, - 8021610768066328637, - 6174306582797008721, - 2175939938544485767, - 7555225587864607050, - 969146862000617878, - 5057486545428188436, - 2814640993034665120, - 4981008812459251156 - ], - "retiredRelationUids": [], - "version": 1 -} \ No newline at end of file diff --git a/nym-vpn/android/app/proguard-rules.pro b/nym-vpn/android/app/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/nym-vpn/android/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/nym-vpn/android/app/src/androidTest/java/com/zaneschepke/wireguardautotunnel/ExampleInstrumentedTest.kt b/nym-vpn/android/app/src/androidTest/java/com/zaneschepke/wireguardautotunnel/ExampleInstrumentedTest.kt deleted file mode 100644 index c006861187..0000000000 --- a/nym-vpn/android/app/src/androidTest/java/com/zaneschepke/wireguardautotunnel/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package net.nymtech.nymconnect - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("net.nymtech.nymconnect", appContext.packageName) - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/AndroidManifest.xml b/nym-vpn/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 391dff34b2..0000000000 --- a/nym-vpn/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/ic_launcher-playstore.png b/nym-vpn/android/app/src/main/ic_launcher-playstore.png deleted file mode 100644 index e5d8e99564..0000000000 Binary files a/nym-vpn/android/app/src/main/ic_launcher-playstore.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/Constants.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/Constants.kt deleted file mode 100644 index c34ccaa493..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/Constants.kt +++ /dev/null @@ -1,6 +0,0 @@ -package net.nymtech.nymconnect - -object Constants { - const val VPN_CONNECTIVITY_CHECK_INTERVAL = 3000L; - const val VPN_STATISTIC_CHECK_INTERVAL = 10000L; -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/WireGuardAutoTunnel.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/WireGuardAutoTunnel.kt deleted file mode 100644 index f0d53e5162..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/WireGuardAutoTunnel.kt +++ /dev/null @@ -1,27 +0,0 @@ -package net.nymtech.nymconnect - -import android.app.Application -import android.content.Context -import android.content.pm.PackageManager -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.tunnel.model.Settings -import dagger.hilt.android.HiltAndroidApp -import javax.inject.Inject - -@HiltAndroidApp -class WireGuardAutoTunnel : Application() { - - @Inject - lateinit var settingsRepo : Repository - - override fun onCreate() { - super.onCreate() - settingsRepo.init() - } - - companion object { - fun isRunningOnAndroidTv(context : Context) : Boolean { - return context.packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK) - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/BoxModule.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/BoxModule.kt deleted file mode 100644 index 032232369b..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/BoxModule.kt +++ /dev/null @@ -1,40 +0,0 @@ -package net.nymtech.nymconnect.module - -import android.content.Context -import net.nymtech.nymconnect.service.tunnel.model.MyObjectBox -import net.nymtech.nymconnect.service.tunnel.model.Settings -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.components.SingletonComponent -import io.objectbox.Box -import io.objectbox.BoxStore -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -class BoxModule { - - @Provides - @Singleton - fun provideBoxStore(@ApplicationContext context : Context) : BoxStore { - return MyObjectBox.builder() - .androidContext(context.applicationContext) - .build() - } - - @Provides - @Singleton - fun provideBoxForSettings(store : BoxStore) : Box { - return store.boxFor(Settings::class.java) - } - - @Provides - @Singleton - fun provideBoxForTunnels(store : BoxStore) : Box { - return store.boxFor(TunnelConfig::class.java) - } - -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/RepositoryModule.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/RepositoryModule.kt deleted file mode 100644 index e402249cba..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/RepositoryModule.kt +++ /dev/null @@ -1,25 +0,0 @@ -package net.nymtech.nymconnect.module - -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.repository.SettingsBox -import net.nymtech.nymconnect.repository.TunnelBox -import net.nymtech.nymconnect.service.tunnel.model.Settings -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun provideSettingsRepository(settingsBox: SettingsBox) : Repository - - @Binds - @Singleton - abstract fun provideTunnelRepository(tunnelBox: TunnelBox) : Repository -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/ServiceModule.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/ServiceModule.kt deleted file mode 100644 index fa043ec549..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/ServiceModule.kt +++ /dev/null @@ -1,29 +0,0 @@ -package net.nymtech.nymconnect.module - -import net.nymtech.nymconnect.service.network.MobileDataService -import net.nymtech.nymconnect.service.network.NetworkService -import net.nymtech.nymconnect.service.network.WifiService -import net.nymtech.nymconnect.service.notification.NotificationService -import net.nymtech.nymconnect.service.notification.WireGuardNotification -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.android.components.ServiceComponent -import dagger.hilt.android.scopes.ServiceScoped - -@Module -@InstallIn(ServiceComponent::class) -abstract class ServiceModule { - - @Binds - @ServiceScoped - abstract fun provideNotificationService(wireGuardNotification: WireGuardNotification) : NotificationService - - @Binds - @ServiceScoped - abstract fun provideWifiService(wifiService: WifiService) : NetworkService - - @Binds - @ServiceScoped - abstract fun provideMobileDataService(mobileDataService : MobileDataService) : NetworkService -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/TunnelModule.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/TunnelModule.kt deleted file mode 100644 index b5962a39d9..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/TunnelModule.kt +++ /dev/null @@ -1,31 +0,0 @@ -package net.nymtech.nymconnect.module - -import android.content.Context -import com.wireguard.android.backend.Backend -import com.wireguard.android.backend.GoBackend -import net.nymtech.nymconnect.service.tunnel.VpnService -import net.nymtech.nymconnect.service.tunnel.WireGuardTunnel -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -class TunnelModule { - - @Provides - @Singleton - fun provideBackend(@ApplicationContext context : Context) : Backend { - return GoBackend(context) - } - - @Provides - @Singleton - fun provideVpnService(backend: Backend) : VpnService { - return WireGuardTunnel(backend) - } - -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/BootReceiver.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/BootReceiver.kt deleted file mode 100644 index 8fcf823c4f..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/BootReceiver.kt +++ /dev/null @@ -1,39 +0,0 @@ -package net.nymtech.nymconnect.receiver - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.foreground.ServiceManager -import net.nymtech.nymconnect.service.tunnel.model.Settings -import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.cancel -import kotlinx.coroutines.launch -import javax.inject.Inject - -@AndroidEntryPoint -class BootReceiver : BroadcastReceiver() { - - @Inject - lateinit var settingsRepo : Repository - - override fun onReceive(context: Context, intent: Intent) { - if (intent.action == Intent.ACTION_BOOT_COMPLETED) { - CoroutineScope(Dispatchers.IO).launch { - try { - val settings = settingsRepo.getAll() - if (!settings.isNullOrEmpty()) { - val setting = settings.first() - if (setting.isAutoTunnelEnabled && setting.defaultTunnel != null) { - ServiceManager.startWatcherService(context, setting.defaultTunnel!!) - } - } - } finally { - cancel() - } - } - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/NotificationActionReceiver.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/NotificationActionReceiver.kt deleted file mode 100644 index 97033a8f63..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/NotificationActionReceiver.kt +++ /dev/null @@ -1,39 +0,0 @@ -package net.nymtech.nymconnect.receiver - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.foreground.ServiceManager -import net.nymtech.nymconnect.service.tunnel.model.Settings -import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.cancel -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import javax.inject.Inject - -@AndroidEntryPoint -class NotificationActionReceiver : BroadcastReceiver() { - - @Inject - lateinit var settingsRepo : Repository - override fun onReceive(context: Context, intent: Intent?) { - CoroutineScope(Dispatchers.IO).launch { - try { - val settings = settingsRepo.getAll() - if (!settings.isNullOrEmpty()) { - val setting = settings.first() - if (setting.defaultTunnel != null) { - ServiceManager.stopVpnService(context) - delay(1000) - ServiceManager.startVpnService(context, setting.defaultTunnel.toString()) - } - } - } finally { - cancel() - } - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/Repository.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/Repository.kt deleted file mode 100644 index 187957132c..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/Repository.kt +++ /dev/null @@ -1,16 +0,0 @@ -package net.nymtech.nymconnect.repository - -import kotlinx.coroutines.flow.Flow - -interface Repository { - suspend fun save(t : T) - suspend fun saveAll(t : List) - suspend fun getById(id : Long) : T? - suspend fun getAll() : List? - suspend fun delete(t : T) : Boolean? - suspend fun count() : Long? - - val itemFlow : Flow> - - fun init() -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/SettingsBox.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/SettingsBox.kt deleted file mode 100644 index f56247463c..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/SettingsBox.kt +++ /dev/null @@ -1,63 +0,0 @@ -package net.nymtech.nymconnect.repository - -import net.nymtech.nymconnect.service.tunnel.model.Settings -import io.objectbox.Box -import io.objectbox.BoxStore -import io.objectbox.kotlin.awaitCallInTx -import io.objectbox.kotlin.toFlow -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.launch -import javax.inject.Inject - - -class SettingsBox @Inject constructor(private val box : Box, private val boxStore : BoxStore) : Repository { - - @OptIn(ExperimentalCoroutinesApi::class) - override val itemFlow = box.query().build().subscribe().toFlow() - - override fun init() { - CoroutineScope(Dispatchers.IO).launch { - if(getAll().isNullOrEmpty()) { - save(Settings()) - } - } - } - - override suspend fun save(t : Settings) { - boxStore.awaitCallInTx { - box.put(t) - } - } - - override suspend fun saveAll(t : List) { - boxStore.awaitCallInTx { - box.put(t) - } - } - - override suspend fun getById(id: Long): Settings? { - return boxStore.awaitCallInTx { - box[id] - } - } - - override suspend fun getAll(): List? { - return boxStore.awaitCallInTx { - box.all - } - } - - override suspend fun delete(t : Settings): Boolean? { - return boxStore.awaitCallInTx { - box.remove(t) - } - } - - override suspend fun count() : Long? { - return boxStore.awaitCallInTx { - box.count() - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/TunnelBox.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/TunnelBox.kt deleted file mode 100644 index c57621d53c..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/repository/TunnelBox.kt +++ /dev/null @@ -1,57 +0,0 @@ -package net.nymtech.nymconnect.repository - -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import io.objectbox.Box -import io.objectbox.BoxStore -import io.objectbox.kotlin.awaitCallInTx -import io.objectbox.kotlin.toFlow -import kotlinx.coroutines.ExperimentalCoroutinesApi -import timber.log.Timber -import javax.inject.Inject - -class TunnelBox @Inject constructor(private val box : Box,private val boxStore : BoxStore) : Repository { - - @OptIn(ExperimentalCoroutinesApi::class) - override val itemFlow = box.query().build().subscribe().toFlow() - override fun init() { - - } - - override suspend fun save(t : TunnelConfig) { - Timber.d("Saving tunnel config") - boxStore.awaitCallInTx { - box.put(t) - } - - } - - override suspend fun saveAll(t : List) { - boxStore.awaitCallInTx { - box.put(t) - } - } - - override suspend fun getById(id: Long): TunnelConfig? { - return boxStore.awaitCallInTx { - box[id] - } - } - - override suspend fun getAll(): List? { - return boxStore.awaitCallInTx { - box.all - } - } - - override suspend fun delete(t : TunnelConfig): Boolean? { - return boxStore.awaitCallInTx { - box.remove(t) - } - } - - override suspend fun count() : Long? { - return boxStore.awaitCallInTx { - box.count() - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/Action.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/Action.kt deleted file mode 100644 index ba4f930b12..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/Action.kt +++ /dev/null @@ -1,6 +0,0 @@ -package net.nymtech.nymconnect.service.foreground - -enum class Action { - START, - STOP -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ForegroundService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ForegroundService.kt deleted file mode 100644 index 9aaf0b93d8..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ForegroundService.kt +++ /dev/null @@ -1,64 +0,0 @@ -package net.nymtech.nymconnect.service.foreground - -import android.app.Service -import android.content.Intent -import android.os.Bundle -import android.os.IBinder -import timber.log.Timber - - -open class ForegroundService : Service() { - - private var isServiceStarted = false - - override fun onBind(intent: Intent): IBinder? { - // We don't provide binding, so return null - return null - } - - override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - Timber.d("onStartCommand executed with startId: $startId") - if (intent != null) { - val action = intent.action - Timber.d("using an intent with action $action") - when (action) { - Action.START.name -> startService(intent.extras) - Action.STOP.name -> stopService(intent.extras) - "android.net.VpnService" -> { - Timber.d("Always-on VPN starting service") - startService(intent.extras) - } - else -> Timber.d("This should never happen. No action in the received intent") - } - } else { - Timber.d( - "with a null intent. It has been probably restarted by the system." - ) - } - // by returning this we make sure the service is restarted if the system kills the service - return START_STICKY - } - - - override fun onDestroy() { - super.onDestroy() - Timber.d("The service has been destroyed") - } - - protected open fun startService(extras : Bundle?) { - if (isServiceStarted) return - Timber.d("Starting ${this.javaClass.simpleName}") - isServiceStarted = true - } - - protected open fun stopService(extras : Bundle?) { - Timber.d("Stopping ${this.javaClass.simpleName}") - try { - stopForeground(STOP_FOREGROUND_REMOVE) - stopSelf() - } catch (e: Exception) { - Timber.d("Service stopped without being started: ${e.message}") - } - isServiceStarted = false - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ServiceManager.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ServiceManager.kt deleted file mode 100644 index c00a796453..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ServiceManager.kt +++ /dev/null @@ -1,90 +0,0 @@ -package net.nymtech.nymconnect.service.foreground - -import android.app.ActivityManager -import android.app.Application -import android.app.Service -import android.content.Context -import android.content.Context.ACTIVITY_SERVICE -import android.content.Intent -import net.nymtech.nymconnect.R -import timber.log.Timber - -object ServiceManager { - @Suppress("DEPRECATION") - private // Deprecated for third party Services. - fun Context.isServiceRunning(service: Class) = - (getSystemService(ACTIVITY_SERVICE) as ActivityManager) - .getRunningServices(Integer.MAX_VALUE) - .any { it.service.className == service.name } - - fun getServiceState(context: Context, cls : Class): ServiceState { - val isServiceRunning = context.isServiceRunning(cls) - return if(isServiceRunning) ServiceState.STARTED else ServiceState.STOPPED - } - - private fun actionOnService(action: Action, context: Context, cls : Class, extras : Map? = null) { - if (getServiceState(context, cls) == ServiceState.STOPPED && action == Action.STOP) return - if (getServiceState(context, cls) == ServiceState.STARTED && action == Action.START) return - val intent = Intent(context, cls).also { - it.action = action.name - extras?.forEach {(k, v) -> - it.putExtra(k, v) - } - } - intent.component?.javaClass - try { - when(action) { - Action.START -> { - try { - context.startForegroundService(intent) - } catch (e : Exception) { - Timber.e("Unable to start service foreground ${e.message}") - context.startService(intent) - } - } - Action.STOP -> context.startService(intent) - } - } catch (e : Exception) { - Timber.tag("ServiceManager").e(e) - } - } - - fun startVpnService(context : Context, tunnelConfig : String) { - actionOnService( - Action.START, - context, - WireGuardTunnelService::class.java, - mapOf(context.getString(R.string.tunnel_extras_key) to tunnelConfig)) - } - fun stopVpnService(context : Context) { - actionOnService( - Action.STOP, - context, - WireGuardTunnelService::class.java - ) - } - - fun startWatcherService(context : Context, tunnelConfig : String) { - actionOnService( - Action.START, context, - WireGuardConnectivityWatcherService::class.java, mapOf(context. - getString(R.string.tunnel_extras_key) to - tunnelConfig)) - } - - fun stopWatcherService(context : Context) { - actionOnService( - Action.STOP, context, - WireGuardConnectivityWatcherService::class.java) - } - - fun toggleWatcherService(context: Context, tunnelConfig : String) { - when(getServiceState( - context, - WireGuardConnectivityWatcherService::class.java, - )) { - ServiceState.STARTED -> stopWatcherService(context) - ServiceState.STOPPED -> startWatcherService(context, tunnelConfig) - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ServiceState.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ServiceState.kt deleted file mode 100644 index 9c26fa0795..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/ServiceState.kt +++ /dev/null @@ -1,6 +0,0 @@ -package net.nymtech.nymconnect.service.foreground - -enum class ServiceState { - STARTED, - STOPPED, -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardConnectivityWatcherService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardConnectivityWatcherService.kt deleted file mode 100644 index fcfa811ea2..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardConnectivityWatcherService.kt +++ /dev/null @@ -1,210 +0,0 @@ -package net.nymtech.nymconnect.service.foreground - -import android.app.AlarmManager -import android.app.PendingIntent -import android.content.Context -import android.content.Intent -import android.os.Bundle -import android.os.PowerManager -import android.os.SystemClock -import com.wireguard.android.backend.Tunnel -import net.nymtech.nymconnect.Constants -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.network.MobileDataService -import net.nymtech.nymconnect.service.network.NetworkService -import net.nymtech.nymconnect.service.network.NetworkStatus -import net.nymtech.nymconnect.service.network.WifiService -import net.nymtech.nymconnect.service.notification.NotificationService -import net.nymtech.nymconnect.service.tunnel.VpnService -import net.nymtech.nymconnect.service.tunnel.model.Settings -import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import timber.log.Timber -import javax.inject.Inject - -@AndroidEntryPoint -class WireGuardConnectivityWatcherService : ForegroundService() { - - private val foregroundId = 122; - - @Inject - lateinit var wifiService : NetworkService - - @Inject - lateinit var mobileDataService : NetworkService - - @Inject - lateinit var settingsRepo: Repository - - @Inject - lateinit var notificationService : NotificationService - - @Inject - lateinit var vpnService : VpnService - - private var isWifiConnected = false; - private var isMobileDataConnected = false; - private var currentNetworkSSID = ""; - - private lateinit var watcherJob : Job; - private lateinit var setting : Settings - private lateinit var tunnelConfig: String - - private var wakeLock: PowerManager.WakeLock? = null - private val tag = this.javaClass.name; - - - override fun startService(extras: Bundle?) { - super.startService(extras) - val tunnelId = extras?.getString(getString(R.string.tunnel_extras_key)) - if (tunnelId != null) { - this.tunnelConfig = tunnelId - } - // we need this lock so our service gets not affected by Doze Mode - initWakeLock() - cancelWatcherJob() - launchWatcherNotification() - if(this::tunnelConfig.isInitialized) { - startWatcherJob() - } else { - stopService(extras) - } - } - - override fun stopService(extras: Bundle?) { - super.stopService(extras) - wakeLock?.let { - if (it.isHeld) { - it.release() - } - } - cancelWatcherJob() - stopSelf() - } - - private fun launchWatcherNotification() { - val notification = notificationService.createNotification( - channelId = getString(R.string.watcher_channel_id), - channelName = getString(R.string.watcher_channel_name), - description = getString(R.string.watcher_notification_text)) - super.startForeground(foregroundId, notification) - } - - //try to start task again if killed - override fun onTaskRemoved(rootIntent: Intent) { - Timber.d("Task Removed called") - val restartServiceIntent = Intent(rootIntent) - val restartServicePendingIntent: PendingIntent = PendingIntent.getService(this, 1, restartServiceIntent, - PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE); - applicationContext.getSystemService(Context.ALARM_SERVICE); - val alarmService: AlarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager; - alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent); - } - - private fun initWakeLock() { - wakeLock = - (getSystemService(Context.POWER_SERVICE) as PowerManager).run { - newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "$tag::lock").apply { - acquire() - } - } - } - - private fun cancelWatcherJob() { - if(this::watcherJob.isInitialized) { - watcherJob.cancel() - } - } - - private fun startWatcherJob() { - watcherJob = CoroutineScope(Dispatchers.IO).launch { - val settings = settingsRepo.getAll(); - if(!settings.isNullOrEmpty()) { - setting = settings[0] - } - launch { - watchForWifiConnectivityChanges() - } - if(setting.isTunnelOnMobileDataEnabled) { - launch { - watchForMobileDataConnectivityChanges() - } - } - launch { - manageVpn() - } - } - } - - private suspend fun watchForMobileDataConnectivityChanges() { - mobileDataService.networkStatus.collect { - when(it) { - is NetworkStatus.Available -> { - Timber.d("Gained Mobile data connection") - isMobileDataConnected = true - } - is NetworkStatus.CapabilitiesChanged -> { - isMobileDataConnected = true - Timber.d("Mobile data capabilities changed") - } - is NetworkStatus.Unavailable -> { - isMobileDataConnected = false - Timber.d("Lost mobile data connection") - } - - else -> {} - } - } - } - - private suspend fun watchForWifiConnectivityChanges() { - wifiService.networkStatus.collect { - when (it) { - is NetworkStatus.Available -> { - Timber.d("Gained Wi-Fi connection") - isWifiConnected = true - } - is NetworkStatus.CapabilitiesChanged -> { - Timber.d("Wifi capabilities changed") - isWifiConnected = true - currentNetworkSSID = wifiService.getNetworkName(it.networkCapabilities) ?: ""; - } - is NetworkStatus.Unavailable -> { - isWifiConnected = false - Timber.d("Lost Wi-Fi connection") - } - - else -> {} - } - } - } - - private suspend fun manageVpn() { - while(watcherJob.isActive) { - if(setting.isTunnelOnMobileDataEnabled && - !isWifiConnected && - isMobileDataConnected - && vpnService.getState() == Tunnel.State.DOWN) { - ServiceManager.startVpnService(this, tunnelConfig) - } else if(!setting.isTunnelOnMobileDataEnabled && - !isWifiConnected && - vpnService.getState() == Tunnel.State.UP) { - ServiceManager.stopVpnService(this) - } else if(isWifiConnected && - !setting.trustedNetworkSSIDs.contains(currentNetworkSSID) && - (vpnService.getState() != Tunnel.State.UP)) { - ServiceManager.startVpnService(this, tunnelConfig) - } else if((isWifiConnected && - setting.trustedNetworkSSIDs.contains(currentNetworkSSID)) && - (vpnService.getState() == Tunnel.State.UP)) { - ServiceManager.stopVpnService(this) - } - delay(Constants.VPN_CONNECTIVITY_CHECK_INTERVAL) - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardTunnelService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardTunnelService.kt deleted file mode 100644 index 776928e649..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardTunnelService.kt +++ /dev/null @@ -1,154 +0,0 @@ -package net.nymtech.nymconnect.service.foreground - -import android.app.PendingIntent -import android.content.Intent -import android.os.Bundle -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.receiver.NotificationActionReceiver -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.notification.NotificationService -import net.nymtech.nymconnect.service.tunnel.HandshakeStatus -import net.nymtech.nymconnect.service.tunnel.VpnService -import net.nymtech.nymconnect.service.tunnel.model.Settings -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.launch -import timber.log.Timber -import javax.inject.Inject - -@AndroidEntryPoint -class WireGuardTunnelService : ForegroundService() { - - private val foregroundId = 123; - - @Inject - lateinit var vpnService : VpnService - - @Inject - lateinit var settingsRepo: Repository - - @Inject - lateinit var notificationService : NotificationService - - private lateinit var job : Job - - private var tunnelName : String = "" - - override fun startService(extras : Bundle?) { - super.startService(extras) - val tunnelConfigString = extras?.getString(getString(R.string.tunnel_extras_key)) - cancelJob() - job = CoroutineScope(Dispatchers.IO).launch { - if(tunnelConfigString != null) { - try { - val tunnelConfig = TunnelConfig.from(tunnelConfigString) - tunnelName = tunnelConfig.name - vpnService.startTunnel(tunnelConfig) - launchVpnStartingNotification() - } catch (e : Exception) { - Timber.e("Problem starting tunnel: ${e.message}") - stopService(extras) - } - } else { - Timber.d("Tunnel config null, starting default tunnel") - val settings = settingsRepo.getAll(); - if(!settings.isNullOrEmpty()) { - val setting = settings[0] - if(setting.defaultTunnel != null && setting.isAlwaysOnVpnEnabled) { - val tunnelConfig = TunnelConfig.from(setting.defaultTunnel!!) - tunnelName = tunnelConfig.name - vpnService.startTunnel(tunnelConfig) - launchVpnStartingNotification() - } - } - } - } - CoroutineScope(job).launch { - var didShowConnected = false - var didShowFailedHandshakeNotification = false - vpnService.handshakeStatus.collect { - when(it) { - HandshakeStatus.NOT_STARTED -> { - } - HandshakeStatus.NEVER_CONNECTED -> { - if(!didShowFailedHandshakeNotification) { - launchVpnConnectionFailedNotification(getString(R.string.initial_connection_failure_message)) - didShowFailedHandshakeNotification = true - didShowConnected = false - } - } - HandshakeStatus.HEALTHY -> { - if(!didShowConnected) { - launchVpnConnectedNotification() - didShowConnected = true - } - } - HandshakeStatus.UNHEALTHY -> { - if(!didShowFailedHandshakeNotification) { - launchVpnConnectionFailedNotification(getString(R.string.lost_connection_failure_message)) - didShowFailedHandshakeNotification = true - didShowConnected = false - } - } - } - } - } - } - - override fun stopService(extras : Bundle?) { - super.stopService(extras) - CoroutineScope(Dispatchers.IO).launch() { - vpnService.stopTunnel() - } - cancelJob() - stopSelf() - } - - private fun launchVpnConnectedNotification() { - val notification = notificationService.createNotification( - channelId = getString(R.string.vpn_channel_id), - channelName = getString(R.string.vpn_channel_name), - title = getString(R.string.tunnel_start_title), - onGoing = false, - showTimestamp = true, - description = "${getString(R.string.tunnel_start_text)} $tunnelName" - ) - super.startForeground(foregroundId, notification) - } - - private fun launchVpnStartingNotification() { - val notification = notificationService.createNotification( - channelId = getString(R.string.vpn_channel_id), - channelName = getString(R.string.vpn_channel_name), - title = getString(R.string.vpn_starting), - onGoing = false, - showTimestamp = true, - description = getString(R.string.attempt_connection) - ) - super.startForeground(foregroundId, notification) - } - - private fun launchVpnConnectionFailedNotification(message : String) { - val notification = notificationService.createNotification( - channelId = getString(R.string.vpn_channel_id), - channelName = getString(R.string.vpn_channel_name), - action = PendingIntent.getBroadcast(this,0,Intent(this, NotificationActionReceiver::class.java),PendingIntent.FLAG_IMMUTABLE), - actionText = getString(R.string.restart), - title = getString(R.string.vpn_connection_failed), - onGoing = false, - showTimestamp = true, - description = message - ) - super.startForeground(foregroundId, notification) - } - - - private fun cancelJob() { - if(this::job.isInitialized) { - job.cancel() - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/BaseNetworkService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/BaseNetworkService.kt deleted file mode 100644 index 9574d659ef..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/BaseNetworkService.kt +++ /dev/null @@ -1,117 +0,0 @@ -package net.nymtech.nymconnect.service.network - -import android.content.Context -import android.net.ConnectivityManager -import android.net.Network -import android.net.NetworkCapabilities -import android.net.NetworkRequest -import android.net.wifi.SupplicantState -import android.net.wifi.WifiInfo -import android.net.wifi.WifiManager -import android.os.Build -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.map - - -abstract class BaseNetworkService>(val context: Context, networkCapability : Int) : NetworkService { - private val connectivityManager = - context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - - private val wifiManager = - context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager - - override val networkStatus = callbackFlow { - val networkStatusCallback = when (Build.VERSION.SDK_INT) { - in Build.VERSION_CODES.S..Int.MAX_VALUE -> { - object : ConnectivityManager.NetworkCallback( - FLAG_INCLUDE_LOCATION_INFO - ) { - override fun onAvailable(network: Network) { - trySend(NetworkStatus.Available(network)) - } - - override fun onLost(network: Network) { - trySend(NetworkStatus.Unavailable(network)) - } - - override fun onCapabilitiesChanged( - network: Network, - networkCapabilities: NetworkCapabilities - ) { - trySend(NetworkStatus.CapabilitiesChanged(network, networkCapabilities)) - } - } - } - - else -> { - object : ConnectivityManager.NetworkCallback() { - - override fun onAvailable(network: Network) { - trySend(NetworkStatus.Available(network)) - } - - override fun onLost(network: Network) { - trySend(NetworkStatus.Unavailable(network)) - } - - override fun onCapabilitiesChanged( - network: Network, - networkCapabilities: NetworkCapabilities - ) { - trySend(NetworkStatus.CapabilitiesChanged(network, networkCapabilities)) - } - } - } - } - val request = NetworkRequest.Builder() - .addTransportType(networkCapability) - .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) - .build() - connectivityManager.registerNetworkCallback(request, networkStatusCallback) - - awaitClose { - connectivityManager.unregisterNetworkCallback(networkStatusCallback) - } - } - - - override fun getNetworkName(networkCapabilities: NetworkCapabilities): String? { - var ssid: String? = getWifiNameFromCapabilities(networkCapabilities) - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { - val info = wifiManager.connectionInfo - if (info.supplicantState === SupplicantState.COMPLETED) { - ssid = info.ssid - } - } - return ssid?.trim('"') - } - - - companion object { - private fun getWifiNameFromCapabilities(networkCapabilities: NetworkCapabilities): String? { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - val info: WifiInfo - if (networkCapabilities.transportInfo is WifiInfo) { - info = networkCapabilities.transportInfo as WifiInfo - return info.ssid - } - } - return null - } - } -} - -inline fun Flow.map( - crossinline onUnavailable: suspend (network : Network) -> Result, - crossinline onAvailable: suspend (network : Network) -> Result, - crossinline onCapabilitiesChanged: suspend (network : Network, networkCapabilities : NetworkCapabilities) -> Result, -): Flow = map { status -> - when (status) { - is NetworkStatus.Unavailable -> onUnavailable(status.network) - is NetworkStatus.Available -> onAvailable(status.network) - is NetworkStatus.CapabilitiesChanged -> onCapabilitiesChanged(status.network, status.networkCapabilities) - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/MobileDataService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/MobileDataService.kt deleted file mode 100644 index a067af06cf..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/MobileDataService.kt +++ /dev/null @@ -1,10 +0,0 @@ -package net.nymtech.nymconnect.service.network - -import android.content.Context -import android.net.NetworkCapabilities -import dagger.hilt.android.qualifiers.ApplicationContext -import javax.inject.Inject - -class MobileDataService @Inject constructor(@ApplicationContext context: Context) : - BaseNetworkService(context, NetworkCapabilities.TRANSPORT_CELLULAR) { -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/NetworkService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/NetworkService.kt deleted file mode 100644 index 6c274dab03..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/NetworkService.kt +++ /dev/null @@ -1,10 +0,0 @@ -package net.nymtech.nymconnect.service.network - -import android.net.NetworkCapabilities -import kotlinx.coroutines.flow.Flow - -interface NetworkService { - fun getNetworkName(networkCapabilities: NetworkCapabilities) : String? - val networkStatus : Flow - -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/NetworkStatus.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/NetworkStatus.kt deleted file mode 100644 index 5446ce52a6..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/NetworkStatus.kt +++ /dev/null @@ -1,10 +0,0 @@ -package net.nymtech.nymconnect.service.network - -import android.net.Network -import android.net.NetworkCapabilities - -sealed class NetworkStatus { - class Available(val network : Network) : NetworkStatus() - class Unavailable(val network : Network) : NetworkStatus() - class CapabilitiesChanged(val network : Network, val networkCapabilities : NetworkCapabilities) : NetworkStatus() -} diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/WifiService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/WifiService.kt deleted file mode 100644 index a01ebba746..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/network/WifiService.kt +++ /dev/null @@ -1,10 +0,0 @@ -package net.nymtech.nymconnect.service.network - -import android.content.Context -import android.net.NetworkCapabilities -import dagger.hilt.android.qualifiers.ApplicationContext -import javax.inject.Inject - -class WifiService @Inject constructor(@ApplicationContext context: Context) : - BaseNetworkService(context, NetworkCapabilities.TRANSPORT_WIFI) { -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/notification/NotificationService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/notification/NotificationService.kt deleted file mode 100644 index 4071e64202..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/notification/NotificationService.kt +++ /dev/null @@ -1,21 +0,0 @@ -package net.nymtech.nymconnect.service.notification - -import android.app.Notification -import android.app.NotificationManager -import android.app.PendingIntent - -interface NotificationService { - fun createNotification( - channelId: String, - channelName: String, - title: String = "", - action: PendingIntent? = null, - actionText: String? = null, - description: String, - showTimestamp : Boolean = false, - importance: Int = NotificationManager.IMPORTANCE_HIGH, - vibration: Boolean = true, - onGoing: Boolean = true, - lights: Boolean = true - ): Notification -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/notification/WireGuardNotification.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/notification/WireGuardNotification.kt deleted file mode 100644 index 4e4cdb3e1b..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/notification/WireGuardNotification.kt +++ /dev/null @@ -1,77 +0,0 @@ -package net.nymtech.nymconnect.service.notification - -import android.app.Notification -import android.app.NotificationChannel -import android.app.NotificationManager -import android.app.PendingIntent -import android.content.Context -import android.content.Intent -import android.graphics.Color -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.ui.MainActivity -import dagger.hilt.android.qualifiers.ApplicationContext -import javax.inject.Inject - -class WireGuardNotification @Inject constructor(@ApplicationContext private val context: Context) : NotificationService { - - private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager; - - override fun createNotification( - channelId: String, - channelName: String, - title: String, - action: PendingIntent?, - actionText: String?, - description: String, - showTimestamp: Boolean, - importance: Int, - vibration: Boolean, - onGoing: Boolean, - lights: Boolean - ): Notification { - val channel = NotificationChannel( - channelId, - channelName, - importance - ).let { - it.description = title - it.enableLights(lights) - it.lightColor = Color.RED - it.enableVibration(vibration) - it.vibrationPattern = longArrayOf(100, 200, 300, 400, 500, 400, 300, 200, 400) - it - } - notificationManager.createNotificationChannel(channel) - val pendingIntent: PendingIntent = - Intent(context, MainActivity::class.java).let { notificationIntent -> - PendingIntent.getActivity( - context, - 0, - notificationIntent, - PendingIntent.FLAG_IMMUTABLE - ) - } - - val builder: Notification.Builder = - Notification.Builder( - context, - channelId - ) - return builder.let { - if(action != null && actionText != null) { - //TODO find a not deprecated way to do this - it.addAction( - Notification.Action.Builder(0, actionText, action) - .build()) - it.setAutoCancel(true) - } - it.setContentTitle(title) - .setContentText(description) - .setContentIntent(pendingIntent) - .setOngoing(onGoing) - .setShowWhen(showTimestamp) - .setSmallIcon(R.mipmap.ic_launcher_foreground) - .build() - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/shortcut/ShortcutsActivity.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/shortcut/ShortcutsActivity.kt deleted file mode 100644 index c88825e71e..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/shortcut/ShortcutsActivity.kt +++ /dev/null @@ -1,28 +0,0 @@ -package net.nymtech.nymconnect.service.shortcut - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.service.foreground.Action -import net.nymtech.nymconnect.service.foreground.ServiceManager -import net.nymtech.nymconnect.service.foreground.WireGuardTunnelService -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class ShortcutsActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - if(intent.getStringExtra(ShortcutsManager.CLASS_NAME_EXTRA_KEY) - .equals(WireGuardTunnelService::class.java.name)) { - intent.getStringExtra(getString(R.string.tunnel_extras_key))?.let { - ServiceManager.toggleWatcherService(this, it) - } - when(intent.action){ - Action.STOP.name -> ServiceManager.stopVpnService(this) - Action.START.name -> intent.getStringExtra(getString(R.string.tunnel_extras_key)) - ?.let { ServiceManager.startVpnService(this, it) } - } - } - finish() - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/shortcut/ShortcutsManager.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/shortcut/ShortcutsManager.kt deleted file mode 100644 index 13df427ebd..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/shortcut/ShortcutsManager.kt +++ /dev/null @@ -1,73 +0,0 @@ -package net.nymtech.nymconnect.service.shortcut - -import android.content.Context -import android.content.Intent -import androidx.core.content.pm.ShortcutInfoCompat -import androidx.core.content.pm.ShortcutManagerCompat -import androidx.core.graphics.drawable.IconCompat -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.service.foreground.Action -import net.nymtech.nymconnect.service.foreground.WireGuardTunnelService -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig - -object ShortcutsManager { - - private const val SHORT_LABEL_MAX_SIZE = 10; - private const val LONG_LABEL_MAX_SIZE = 25; - private const val APPEND_ON = " On"; - private const val APPEND_OFF = " Off" - const val CLASS_NAME_EXTRA_KEY = "className" - - private fun createAndPushShortcut(context : Context, intent : Intent, id : String, shortLabel : String, - longLabel : String, drawable : Int ) { - val shortcut = ShortcutInfoCompat.Builder(context, id) - .setShortLabel(shortLabel) - .setLongLabel(longLabel) - .setIcon(IconCompat.createWithResource(context, drawable)) - .setIntent(intent) - .build() - ShortcutManagerCompat.pushDynamicShortcut(context, shortcut) - } - - fun createTunnelShortcuts(context : Context, tunnelConfig : TunnelConfig) { - createAndPushShortcut(context, - createTunnelOnIntent(context, mapOf(context.getString(R.string.tunnel_extras_key) to tunnelConfig.toString())), - tunnelConfig.id.toString() + APPEND_ON, - tunnelConfig.name.take((SHORT_LABEL_MAX_SIZE - APPEND_ON.length)) + APPEND_ON, - tunnelConfig.name.take((LONG_LABEL_MAX_SIZE - APPEND_ON.length)) + APPEND_ON, - R.drawable.vpn_on - ) - createAndPushShortcut(context, - createTunnelOffIntent(context, mapOf(context.getString(R.string.tunnel_extras_key) to tunnelConfig.toString())), - tunnelConfig.id.toString() + APPEND_OFF, - tunnelConfig.name.take((SHORT_LABEL_MAX_SIZE - APPEND_OFF.length)) + APPEND_OFF, - tunnelConfig.name.take((LONG_LABEL_MAX_SIZE - APPEND_OFF.length)) + APPEND_OFF, - R.drawable.vpn_off - ) - } - - fun removeTunnelShortcuts(context : Context, tunnelConfig : TunnelConfig) { - ShortcutManagerCompat.removeDynamicShortcuts(context, listOf(tunnelConfig.id.toString() + APPEND_ON, - tunnelConfig.id.toString() + APPEND_OFF )) - } - - private fun createTunnelOnIntent(context: Context, extras : Map) : Intent { - return Intent(context, ShortcutsActivity::class.java).also { - it.action = Action.START.name - it.putExtra(CLASS_NAME_EXTRA_KEY, WireGuardTunnelService::class.java.name) - extras.forEach {(k, v) -> - it.putExtra(k, v) - } - } - } - - private fun createTunnelOffIntent(context : Context, extras : Map) : Intent { - return Intent(context, ShortcutsActivity::class.java).also { - it.action = Action.STOP.name - it.putExtra(CLASS_NAME_EXTRA_KEY, WireGuardTunnelService::class.java.name) - extras.forEach {(k, v) -> - it.putExtra(k, v) - } - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tile/TunnelControlTile.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tile/TunnelControlTile.kt deleted file mode 100644 index 38c774c963..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tile/TunnelControlTile.kt +++ /dev/null @@ -1,142 +0,0 @@ -package net.nymtech.nymconnect.service.tile - -import android.os.Build -import android.service.quicksettings.Tile -import android.service.quicksettings.TileService -import com.wireguard.android.backend.Tunnel -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.foreground.ServiceManager -import net.nymtech.nymconnect.service.tunnel.VpnService -import net.nymtech.nymconnect.service.tunnel.model.Settings -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.cancel -import kotlinx.coroutines.launch -import timber.log.Timber -import javax.inject.Inject - -@AndroidEntryPoint -class TunnelControlTile : TileService() { - - @Inject - lateinit var settingsRepo : Repository - - @Inject - lateinit var configRepo : Repository - - @Inject - lateinit var vpnService : VpnService - - private val scope = CoroutineScope(Dispatchers.Main); - - private lateinit var job : Job - - override fun onStartListening() { - job = scope.launch { - updateTileState() - } - super.onStartListening() - } - - override fun onTileAdded() { - super.onTileAdded() - qsTile.contentDescription = this.resources.getString(R.string.toggle_vpn) - scope.launch { - updateTileState(); - } - } - - override fun onTileRemoved() { - super.onTileRemoved() - cancelJob() - } - - override fun onClick() { - super.onClick() - unlockAndRun { - scope.launch { - try { - val tunnel = determineTileTunnel(); - if(tunnel != null) { - attemptWatcherServiceToggle(tunnel.toString()) - if(vpnService.getState() == Tunnel.State.UP) { - ServiceManager.stopVpnService(this@TunnelControlTile) - } else { - ServiceManager.startVpnService(this@TunnelControlTile, tunnel.toString()) - } - } - } catch (e : Exception) { - Timber.e(e.message) - } finally { - cancel() - } - } - } - } - - private suspend fun determineTileTunnel() : TunnelConfig? { - var tunnelConfig : TunnelConfig? = null; - val settings = settingsRepo.getAll() - if (!settings.isNullOrEmpty()) { - val setting = settings.first() - tunnelConfig = if (setting.defaultTunnel != null) { - TunnelConfig.from(setting.defaultTunnel!!); - } else { - val config = configRepo.getAll()?.first(); - config; - } - } - return tunnelConfig; - } - - - private fun attemptWatcherServiceToggle(tunnelConfig : String) { - scope.launch { - val settings = settingsRepo.getAll() - if (!settings.isNullOrEmpty()) { - val setting = settings.first() - if(setting.isAutoTunnelEnabled) { - ServiceManager.toggleWatcherService(this@TunnelControlTile, tunnelConfig) - } - } - } - } - - private suspend fun updateTileState() { - vpnService.state.collect { - when(it) { - Tunnel.State.UP -> { - qsTile.state = Tile.STATE_ACTIVE - } - Tunnel.State.DOWN -> { - qsTile.state = Tile.STATE_INACTIVE; - } - else -> { - qsTile.state = Tile.STATE_UNAVAILABLE - } - } - val config = determineTileTunnel(); - setTileDescription(config?.name ?: this.resources.getString(R.string.no_tunnel_available)) - qsTile.updateTile() - } - } - - private fun setTileDescription(description : String) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - qsTile.subtitle = description - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - qsTile.stateDescription = description; - } - } - - private fun cancelJob() { - if(this::job.isInitialized) { - job.cancel(); - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/HandshakeStatus.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/HandshakeStatus.kt deleted file mode 100644 index 1d2fa54ea7..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/HandshakeStatus.kt +++ /dev/null @@ -1,14 +0,0 @@ -package net.nymtech.nymconnect.service.tunnel - -enum class HandshakeStatus { - HEALTHY, - UNHEALTHY, - NEVER_CONNECTED, - NOT_STARTED; - - companion object { - private const val WG_TYPICAL_HANDSHAKE_INTERVAL_WHEN_HEALTHY_SEC = 120 - const val UNHEALTHY_TIME_LIMIT_SEC = WG_TYPICAL_HANDSHAKE_INTERVAL_WHEN_HEALTHY_SEC + 60 - const val NEVER_CONNECTED_TO_UNHEALTHY_TIME_LIMIT_SEC = 30 - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/VpnService.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/VpnService.kt deleted file mode 100644 index 15c8c1b676..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/VpnService.kt +++ /dev/null @@ -1,18 +0,0 @@ -package net.nymtech.nymconnect.service.tunnel - -import com.wireguard.android.backend.Statistics -import com.wireguard.android.backend.Tunnel -import com.wireguard.crypto.Key -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import kotlinx.coroutines.flow.SharedFlow - -interface VpnService : Tunnel { - suspend fun startTunnel(tunnelConfig : TunnelConfig) : Tunnel.State - suspend fun stopTunnel() - val state : SharedFlow - val tunnelName : SharedFlow - val statistics : SharedFlow - val lastHandshake : SharedFlow> - val handshakeStatus : SharedFlow - fun getState() : Tunnel.State -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/WireGuardTunnel.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/WireGuardTunnel.kt deleted file mode 100644 index ae9a3c233d..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/WireGuardTunnel.kt +++ /dev/null @@ -1,131 +0,0 @@ -package net.nymtech.nymconnect.service.tunnel - -import com.wireguard.android.backend.Backend -import com.wireguard.android.backend.BackendException -import com.wireguard.android.backend.Statistics -import com.wireguard.android.backend.Tunnel -import com.wireguard.crypto.Key -import net.nymtech.nymconnect.Constants -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import net.nymtech.nymconnect.util.NumberUtils -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.channels.BufferOverflow -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharedFlow -import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch -import timber.log.Timber -import javax.inject.Inject - - -class WireGuardTunnel @Inject constructor(private val backend : Backend, -) : VpnService { - - private val _tunnelName = MutableStateFlow("") - override val tunnelName get() = _tunnelName.asStateFlow() - - private val _state = MutableSharedFlow( - onBufferOverflow = BufferOverflow.DROP_OLDEST, - replay = 1) - - private val _handshakeStatus = MutableSharedFlow(replay = 1, - onBufferOverflow = BufferOverflow.DROP_OLDEST) - override val state get() = _state.asSharedFlow() - - private val _statistics = MutableSharedFlow(replay = 1) - override val statistics get() = _statistics.asSharedFlow() - - private val _lastHandshake = MutableSharedFlow>(replay = 1) - override val lastHandshake get() = _lastHandshake.asSharedFlow() - - override val handshakeStatus: SharedFlow - get() = _handshakeStatus.asSharedFlow() - - private lateinit var statsJob : Job - - - override suspend fun startTunnel(tunnelConfig: TunnelConfig) : Tunnel.State{ - return try { - if(getState() == Tunnel.State.UP && _tunnelName.value != tunnelConfig.name) { - stopTunnel() - } - _tunnelName.emit(tunnelConfig.name) - val config = TunnelConfig.configFromQuick(tunnelConfig.wgQuick) - val state = backend.setState( - this, Tunnel.State.UP, config) - _state.emit(state) - state; - } catch (e : Exception) { - Timber.e("Failed to start tunnel with error: ${e.message}") - Tunnel.State.DOWN - } - } - - override fun getName(): String { - return _tunnelName.value - } - - override suspend fun stopTunnel() { - try { - if(getState() == Tunnel.State.UP) { - val state = backend.setState(this, Tunnel.State.DOWN, null) - _state.emit(state) - } - } catch (e : BackendException) { - Timber.e("Failed to stop tunnel with error: ${e.message}") - } - } - - override fun getState(): Tunnel.State { - return backend.getState(this) - } - - override fun onStateChange(state : Tunnel.State) { - val tunnel = this; - _state.tryEmit(state) - if(state == Tunnel.State.UP) { - statsJob = CoroutineScope(Dispatchers.IO).launch { - val handshakeMap = HashMap() - var neverHadHandshakeCounter = 0 - while (true) { - val statistics = backend.getStatistics(tunnel) - _statistics.emit(statistics) - statistics.peers().forEach { - val handshakeEpoch = statistics.peer(it)?.latestHandshakeEpochMillis ?: 0L - handshakeMap[it] = handshakeEpoch - if(handshakeEpoch == 0L) { - if(neverHadHandshakeCounter >= HandshakeStatus.NEVER_CONNECTED_TO_UNHEALTHY_TIME_LIMIT_SEC) { - _handshakeStatus.emit(HandshakeStatus.NEVER_CONNECTED) - } else { - _handshakeStatus.emit(HandshakeStatus.NOT_STARTED) - } - if(neverHadHandshakeCounter <= HandshakeStatus.NEVER_CONNECTED_TO_UNHEALTHY_TIME_LIMIT_SEC) { - neverHadHandshakeCounter += 10 - } - return@forEach - } - if(NumberUtils.getSecondsBetweenTimestampAndNow(handshakeEpoch) >= HandshakeStatus.UNHEALTHY_TIME_LIMIT_SEC) { - _handshakeStatus.emit(HandshakeStatus.UNHEALTHY) - } else { - _handshakeStatus.emit(HandshakeStatus.HEALTHY) - } - } - _lastHandshake.emit(handshakeMap) - delay(Constants.VPN_STATISTIC_CHECK_INTERVAL) - } - } - } - if(state == Tunnel.State.DOWN) { - if(this::statsJob.isInitialized) { - statsJob.cancel() - } - _handshakeStatus.tryEmit(HandshakeStatus.NOT_STARTED) - _lastHandshake.tryEmit(emptyMap()) - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/model/Settings.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/model/Settings.kt deleted file mode 100644 index 2aff4e9f11..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/model/Settings.kt +++ /dev/null @@ -1,15 +0,0 @@ -package net.nymtech.nymconnect.service.tunnel.model - -import io.objectbox.annotation.Entity -import io.objectbox.annotation.Id - -@Entity -data class Settings( - @Id - var id : Long = 0, - var isAutoTunnelEnabled : Boolean = false, - var isTunnelOnMobileDataEnabled : Boolean = false, - var trustedNetworkSSIDs : MutableList = mutableListOf(), - var defaultTunnel : String? = null, - var isAlwaysOnVpnEnabled : Boolean = false, -) diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/model/TunnelConfig.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/model/TunnelConfig.kt deleted file mode 100644 index 91f7440d0d..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/tunnel/model/TunnelConfig.kt +++ /dev/null @@ -1,89 +0,0 @@ -package net.nymtech.nymconnect.service.tunnel.model - -import com.wireguard.config.Config -import io.objectbox.annotation.ConflictStrategy -import io.objectbox.annotation.Entity -import io.objectbox.annotation.Id -import io.objectbox.annotation.Unique -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.Json -import java.io.InputStream - - -@Entity -@Serializable -data class TunnelConfig( - @Id - var id : Long = 0, - @Unique(onConflict = ConflictStrategy.REPLACE) - var name : String, - var wgQuick : String -) { - - - override fun toString(): String { - return Json.encodeToString(serializer(), this) - } - - companion object { - private const val INCLUDED_APPLICATIONS = "IncludedApplications = " - private const val EXCLUDED_APPLICATIONS = "ExcludedApplications = " - private const val INTERFACE = "[Interface]" - private const val NEWLINE_CHAR = "\n" - private const val APP_CONFIG_SEPARATOR = ", " - - private fun addApplicationsToConfig(appConfig : String, wgQuick : String) : String { - val configList = wgQuick.split(NEWLINE_CHAR).toMutableList() - val interfaceIndex = configList.indexOf(INTERFACE) - configList.add(interfaceIndex + 1, appConfig) - return configList.joinToString(NEWLINE_CHAR) - } - - fun clearAllApplicationsFromConfig(wgQuick : String) : String { - val configList = wgQuick.split(NEWLINE_CHAR).toMutableList() - val itr = configList.iterator() - while (itr.hasNext()) { - val next = itr.next() - if(next.contains(INCLUDED_APPLICATIONS) || next.contains(EXCLUDED_APPLICATIONS)) { - itr.remove() - } - } - return configList.joinToString(NEWLINE_CHAR) - } - - - fun setExcludedApplicationsOnQuick(packages : List, wgQuick: String) : String { - if(packages.isEmpty()) { - return wgQuick - } - val clearedWgQuick = clearAllApplicationsFromConfig(wgQuick) - val excludeConfig = buildExcludedApplicationsString(packages) - return addApplicationsToConfig(excludeConfig, clearedWgQuick) - } - - fun setIncludedApplicationsOnQuick(packages : List, wgQuick: String) : String { - if(packages.isEmpty()) { - return wgQuick - } - val clearedWgQuick = clearAllApplicationsFromConfig(wgQuick) - val includeConfig = buildIncludedApplicationsString(packages) - return addApplicationsToConfig(includeConfig, clearedWgQuick) - } - - private fun buildExcludedApplicationsString(packages : List) : String { - return EXCLUDED_APPLICATIONS + packages.joinToString(APP_CONFIG_SEPARATOR) - } - - private fun buildIncludedApplicationsString(packages : List) : String { - return INCLUDED_APPLICATIONS + packages.joinToString(APP_CONFIG_SEPARATOR) - } - fun from(string : String) : TunnelConfig { - return Json.decodeFromString(string) - } - fun configFromQuick(wgQuick: String): Config { - val inputStream: InputStream = wgQuick.byteInputStream() - val reader = inputStream.bufferedReader(Charsets.UTF_8) - return Config.parse(reader) - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/MainActivity.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/MainActivity.kt deleted file mode 100644 index edb82cc213..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/MainActivity.kt +++ /dev/null @@ -1,201 +0,0 @@ -package net.nymtech.nymconnect.ui - -import android.Manifest -import android.content.Intent -import android.net.Uri -import android.os.Build -import android.os.Bundle -import android.provider.Settings -import android.view.KeyEvent -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.compose.setContent -import androidx.activity.result.contract.ActivityResultContracts -import androidx.appcompat.app.AppCompatActivity -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.animation.core.tween -import androidx.compose.animation.fadeIn -import androidx.compose.animation.slideInHorizontally -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SnackbarHost -import androidx.compose.material3.SnackbarHostState -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.input.key.onKeyEvent -import com.google.accompanist.navigation.animation.AnimatedNavHost -import com.google.accompanist.navigation.animation.composable -import com.google.accompanist.navigation.animation.rememberAnimatedNavController -import com.google.accompanist.permissions.ExperimentalPermissionsApi -import com.google.accompanist.permissions.isGranted -import com.google.accompanist.permissions.rememberPermissionState -import com.wireguard.android.backend.GoBackend -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.ui.common.PermissionRequestFailedScreen -import net.nymtech.nymconnect.ui.common.navigation.BottomNavBar -import net.nymtech.nymconnect.ui.screens.config.ConfigScreen -import net.nymtech.nymconnect.ui.screens.detail.DetailScreen -import net.nymtech.nymconnect.ui.screens.main.MainScreen -import net.nymtech.nymconnect.ui.screens.settings.SettingsScreen -import net.nymtech.nymconnect.ui.screens.support.SupportScreen -import net.nymtech.nymconnect.ui.theme.TransparentSystemBars -import net.nymtech.nymconnect.ui.theme.WireguardAutoTunnelTheme -import dagger.hilt.android.AndroidEntryPoint -import timber.log.Timber -import java.lang.IllegalStateException - -@AndroidEntryPoint -class MainActivity : AppCompatActivity() { - - @OptIn(ExperimentalAnimationApi::class, - ExperimentalPermissionsApi::class - ) - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContent { - val navController = rememberAnimatedNavController() - val focusRequester = remember { FocusRequester() } - - WireguardAutoTunnelTheme { - TransparentSystemBars() - - val snackbarHostState = remember { SnackbarHostState() } - - val notificationPermissionState = - rememberPermissionState(Manifest.permission.POST_NOTIFICATIONS) - - fun requestNotificationPermission() { - if (!notificationPermissionState.status.isGranted && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - notificationPermissionState.launchPermissionRequest() - } - } - - var vpnIntent by remember { mutableStateOf(GoBackend.VpnService.prepare(this)) } - val vpnActivityResultState = rememberLauncherForActivityResult( - ActivityResultContracts.StartActivityForResult(), - onResult = { - val accepted = (it.resultCode == RESULT_OK) - if (accepted) { - vpnIntent = null - } - }) - LaunchedEffect(vpnIntent) { - if (vpnIntent != null) { - vpnActivityResultState.launch(vpnIntent) - } else requestNotificationPermission() - } - - Scaffold(snackbarHost = { SnackbarHost(snackbarHostState)}, - modifier = Modifier.onKeyEvent { - if (it.nativeKeyEvent.action == KeyEvent.ACTION_UP) { - when (it.nativeKeyEvent.keyCode) { - KeyEvent.KEYCODE_DPAD_UP -> { - try { - focusRequester.requestFocus() - } catch(e : IllegalStateException) { - Timber.e("No D-Pad focus request modifier added to element on screen") - } - false - } else -> { - false; - } - } - } else { - false - } - }, - bottomBar = if (vpnIntent == null && notificationPermissionState.status.isGranted) { - { BottomNavBar(navController, Routes.navItems) } - } else { - {} - }, - ) - { padding -> - if (vpnIntent != null) { - PermissionRequestFailedScreen( - padding = padding, - onRequestAgain = { vpnActivityResultState.launch(vpnIntent) }, - message = getString(R.string.vpn_permission_required), - getString(R.string.retry) - ) - return@Scaffold - } - if (!notificationPermissionState.status.isGranted) { - PermissionRequestFailedScreen( - padding = padding, - onRequestAgain = { - val intentSettings = - Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - intentSettings.data = - Uri.fromParts("package", this.packageName, null) - startActivity(intentSettings); - }, - message = getString(R.string.notification_permission_required), - getString(R.string.open_settings) - ) - return@Scaffold - } - AnimatedNavHost(navController, startDestination = Routes.Main.name) { - composable(Routes.Main.name, enterTransition = { - when (initialState.destination.route) { - Routes.Settings.name, Routes.Support.name -> - slideInHorizontally( - initialOffsetX = { -1000 }, - animationSpec = tween(500) - ) - - else -> { - fadeIn(animationSpec = tween(1000)) - } - } - }) { - MainScreen(padding = padding, snackbarHostState = snackbarHostState, navController = navController) - } - composable(Routes.Settings.name, enterTransition = { - when (initialState.destination.route) { - Routes.Main.name -> - slideInHorizontally( - initialOffsetX = { 1000 }, - animationSpec = tween(500) - ) - - Routes.Support.name -> { - slideInHorizontally( - initialOffsetX = { -1000 }, - animationSpec = tween(500) - ) - } - - else -> { - fadeIn(animationSpec = tween(1000)) - } - } - }) { SettingsScreen(padding = padding, snackbarHostState = snackbarHostState, navController = navController, focusRequester = focusRequester) } - composable(Routes.Support.name, enterTransition = { - when (initialState.destination.route) { - Routes.Settings.name, Routes.Main.name -> - slideInHorizontally( - initialOffsetX = { 1000 }, - animationSpec = tween(500) - ) - - else -> { - fadeIn(animationSpec = tween(1000)) - } - } - }) { SupportScreen(padding = padding, focusRequester) } - composable("${Routes.Config.name}/{id}", enterTransition = { - fadeIn(animationSpec = tween(1000)) - }) { ConfigScreen(padding = padding, navController = navController, id = it.arguments?.getString("id"), focusRequester = focusRequester)} - composable("${Routes.Detail.name}/{id}", enterTransition = { - fadeIn(animationSpec = tween(1000)) - }) { DetailScreen(padding = padding, id = it.arguments?.getString("id")) } - } - } - } - } - } -} diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/Routes.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/Routes.kt deleted file mode 100644 index 589fa5fbbf..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/Routes.kt +++ /dev/null @@ -1,36 +0,0 @@ -package net.nymtech.nymconnect.ui - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Home -import androidx.compose.material.icons.rounded.QuestionMark -import androidx.compose.material.icons.rounded.Settings -import net.nymtech.nymconnect.ui.common.navigation.BottomNavItem - -enum class Routes { - Main, - Settings, - Support, - Config, - Detail; - - - companion object { - val navItems = listOf( - BottomNavItem( - name = "Tunnels", - route = Main.name, - icon = Icons.Rounded.Home, - ), - BottomNavItem( - name = "Settings", - route = Settings.name, - icon = Icons.Rounded.Settings, - ), - BottomNavItem( - name = "Support", - route = Support.name, - icon = Icons.Rounded.QuestionMark, - ) - ) - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/ViewState.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/ViewState.kt deleted file mode 100644 index 66aa0b8790..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/ViewState.kt +++ /dev/null @@ -1,9 +0,0 @@ -package net.nymtech.nymconnect.ui - -data class ViewState( - val showSnackbarMessage : Boolean = false, - val snackbarMessage : String = "", - val snackbarActionText : String = "", - val onSnackbarActionClick : () -> Unit = {}, - val isLoading : Boolean = false -) diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/ClickableIconButton.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/ClickableIconButton.kt deleted file mode 100644 index 2ddd1f27b2..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/ClickableIconButton.kt +++ /dev/null @@ -1,31 +0,0 @@ -package net.nymtech.nymconnect.ui.common - -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.size -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Icon -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector - -@Composable -fun ClickableIconButton(onIconClick : () -> Unit, text : String, icon : ImageVector, enabled : Boolean) { - Button(onClick = {}, - enabled = enabled - ) { - Text(text) - Spacer(modifier = Modifier.size(ButtonDefaults.IconSpacing)) - Icon( - imageVector = icon, - contentDescription = "Delete", - modifier = Modifier.size(ButtonDefaults.IconSize).clickable { - if(enabled) { - onIconClick() - } - } - ) - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/PermissionRequestFailedScreen.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/PermissionRequestFailedScreen.kt deleted file mode 100644 index a0f81b5745..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/PermissionRequestFailedScreen.kt +++ /dev/null @@ -1,35 +0,0 @@ -package net.nymtech.nymconnect.ui.common - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Button -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import kotlinx.coroutines.launch - -@Composable -fun PermissionRequestFailedScreen(padding : PaddingValues, onRequestAgain : () -> Unit, message : String, buttonText : String ) { - val scope = rememberCoroutineScope() - Column(horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - modifier = Modifier - .fillMaxSize() - .padding(padding)) { - Text(message, textAlign = TextAlign.Center, modifier = Modifier.padding(15.dp)) - Button(onClick = { - scope.launch { - onRequestAgain() - } - }) { - Text(buttonText) - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/RowListItem.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/RowListItem.kt deleted file mode 100644 index 33fb6d0bf6..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/RowListItem.kt +++ /dev/null @@ -1,55 +0,0 @@ -package net.nymtech.nymconnect.ui.common - -import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.combinedClickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.material3.Icon -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.unit.dp - -@OptIn(ExperimentalFoundationApi::class) -@Composable -fun RowListItem(leadingIcon : ImageVector? = null, leadingIconColor : Color = Color.Gray, text : String, onHold : () -> Unit, onClick: () -> Unit, rowButton : @Composable() () -> Unit ) { - Box( - modifier = Modifier - .combinedClickable( - onClick = { - onClick() - }, - onLongClick = { - onHold() - } - ) - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(14.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Row(verticalAlignment = Alignment.CenterVertically,) { - if(leadingIcon != null) { - Icon( - leadingIcon, "status", - tint = leadingIconColor, - modifier = Modifier.padding(end = 10.dp).size(15.dp) - ) - } - Text(text) - } - - rowButton() - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/SearchBar.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/SearchBar.kt deleted file mode 100644 index cec26f5b09..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/SearchBar.kt +++ /dev/null @@ -1,80 +0,0 @@ -package net.nymtech.nymconnect.ui.common - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Clear -import androidx.compose.material.icons.rounded.Search -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.material3.TextField -import androidx.compose.material3.TextFieldDefaults -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.RectangleShape -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.input.KeyboardType -import net.nymtech.nymconnect.R - -@Composable -fun SearchBar( - onQuery : (queryString : String) -> Unit -) { - // Immediately update and keep track of query from text field changes. - var query: String by rememberSaveable { mutableStateOf("") } - var showClearIcon by rememberSaveable { mutableStateOf(false) } - - if (query.isEmpty()) { - showClearIcon = false - } else if (query.isNotEmpty()) { - showClearIcon = true - } - - TextField( - value = query, - onValueChange = { onQueryChanged -> - // If user makes changes to text, immediately updated it. - query = onQueryChanged - onQuery(onQueryChanged) - }, - leadingIcon = { - Icon( - imageVector = Icons.Rounded.Search, - tint = MaterialTheme.colorScheme.onBackground, - contentDescription = stringResource(id = R.string.search_icon) - ) - }, - trailingIcon = { - if (showClearIcon) { - IconButton(onClick = { query = "" }) { - Icon( - imageVector = Icons.Rounded.Clear, - tint = MaterialTheme.colorScheme.onBackground, - contentDescription = stringResource(id = R.string.clear_icon) - ) - } - } - }, - maxLines = 1, - colors = TextFieldDefaults.colors( - focusedContainerColor = Color.Transparent, - unfocusedContainerColor = Color.Transparent, - disabledContainerColor = Color.Transparent, - ), - placeholder = { Text(text = stringResource(R.string.hint_search_packages)) }, - textStyle = MaterialTheme.typography.bodySmall, - singleLine = true, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text), - modifier = Modifier - .fillMaxWidth() - .background(color = MaterialTheme.colorScheme.background, shape = RectangleShape) - ) -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/BottomNavBar.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/BottomNavBar.kt deleted file mode 100644 index 957228eece..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/BottomNavBar.kt +++ /dev/null @@ -1,42 +0,0 @@ -package net.nymtech.nymconnect.ui.common.navigation - -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.text.font.FontWeight -import androidx.navigation.NavController -import androidx.navigation.compose.currentBackStackEntryAsState - -@Composable -fun BottomNavBar(navController : NavController, bottomNavItems : List) { - - val backStackEntry = navController.currentBackStackEntryAsState() - - NavigationBar( - containerColor = MaterialTheme.colorScheme.background, - ) { - bottomNavItems.forEach { item -> - val selected = item.route == backStackEntry.value?.destination?.route - - NavigationBarItem( - selected = selected, - onClick = { navController.navigate(item.route) }, - label = { - Text( - text = item.name, - fontWeight = FontWeight.SemiBold, - ) - }, - icon = { - Icon( - imageVector = item.icon, - contentDescription = "${item.name} Icon", - ) - } - ) - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/BottomNavItem.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/BottomNavItem.kt deleted file mode 100644 index a4a585ce5e..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/BottomNavItem.kt +++ /dev/null @@ -1,9 +0,0 @@ -package net.nymtech.nymconnect.ui.common.navigation - -import androidx.compose.ui.graphics.vector.ImageVector - -data class BottomNavItem( - val name: String, - val route: String, - val icon: ImageVector, -) diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt deleted file mode 100644 index 1ecfaf6570..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt +++ /dev/null @@ -1,241 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.config - -import android.widget.Toast -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.text.KeyboardActions -import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Android -import androidx.compose.material3.Button -import androidx.compose.material3.Checkbox -import androidx.compose.material3.Icon -import androidx.compose.material3.OutlinedTextField -import androidx.compose.material3.Switch -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.Alignment -import androidx.compose.ui.ExperimentalComposeUiApi -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.input.ImeAction -import androidx.compose.ui.text.input.KeyboardCapitalization -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.navigation.NavController -import com.google.accompanist.drawablepainter.DrawablePainter -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.ui.Routes -import net.nymtech.nymconnect.ui.common.SearchBar -import kotlinx.coroutines.launch - -@OptIn(ExperimentalComposeUiApi::class) -@Composable -fun ConfigScreen( - viewModel: ConfigViewModel = hiltViewModel(), - padding: PaddingValues, - focusRequester: FocusRequester, - navController: NavController, - id : String? -) { - - val context = LocalContext.current - val focusManager = LocalFocusManager.current - - val keyboardController = LocalSoftwareKeyboardController.current - val scope = rememberCoroutineScope() - val tunnel by viewModel.tunnel.collectAsStateWithLifecycle(null) - val tunnelName = viewModel.tunnelName.collectAsStateWithLifecycle() - val packages by viewModel.packages.collectAsStateWithLifecycle() - val checkedPackages by viewModel.checkedPackages.collectAsStateWithLifecycle() - val include by viewModel.include.collectAsStateWithLifecycle() - val allApplications by viewModel.allApplications.collectAsStateWithLifecycle() - - LaunchedEffect(Unit) { - viewModel.getTunnelById(id) - viewModel.emitQueriedPackages("") - viewModel.emitCurrentPackageConfigurations(id) - } - - if(tunnel != null) { - LazyColumn( - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.Top, - modifier = Modifier - .fillMaxSize() - .padding(padding) - ) { - item { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 20.dp, vertical = 7.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - OutlinedTextField( - modifier = Modifier.focusRequester(focusRequester), - value = tunnelName.value, - onValueChange = { - viewModel.onTunnelNameChange(it) - }, - label = { Text(stringResource(id = R.string.tunnel_name)) }, - maxLines = 1, - keyboardOptions = KeyboardOptions( - capitalization = KeyboardCapitalization.None, - imeAction = ImeAction.Done - ), - keyboardActions = KeyboardActions( - onDone = { - focusManager.clearFocus() - keyboardController?.hide() - viewModel.onTunnelNameChange(tunnelName.value) - } - ), - ) - } - } - item { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 20.dp, vertical = 7.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Text(stringResource(id = R.string.tunnel_all)) - Switch( - checked = allApplications, - onCheckedChange = { - viewModel.onAllApplicationsChange(!allApplications) - } - ) - } - } - if (!allApplications) { - item { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 20.dp, vertical = 7.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Text(stringResource(id = R.string.include)) - Checkbox( - checked = include, - onCheckedChange = { - viewModel.onIncludeChange(!include) - } - ) - } - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Text(stringResource(id = R.string.exclude)) - Checkbox( - checked = !include, - onCheckedChange = { - viewModel.onIncludeChange(!include) - } - ) - } - } - } - item { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 20.dp, vertical = 7.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween) { - SearchBar(viewModel::emitQueriedPackages); - } - } - items(packages) { pack -> - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Row( - horizontalArrangement = Arrangement.Center, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.padding(5.dp) - ) { - val drawable = - pack.applicationInfo?.loadIcon(context.packageManager) - if (drawable != null) { - Image( - painter = DrawablePainter(drawable), - stringResource(id = R.string.icon), - modifier = Modifier.size(50.dp, 50.dp) - ) - } else { - Icon( - Icons.Rounded.Android, - stringResource(id = R.string.edit), - modifier = Modifier.size(50.dp, 50.dp) - ) - } - Text( - pack.applicationInfo.loadLabel(context.packageManager) - .toString(), modifier = Modifier.padding(5.dp) - ) - } - Checkbox( - checked = (checkedPackages.contains(pack.packageName)), - onCheckedChange = { - if (it) viewModel.onAddCheckedPackage(pack.packageName) else viewModel.onRemoveCheckedPackage( - pack.packageName - ) - } - ) - } - } - } - item { - Row( - horizontalArrangement = Arrangement.Center, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxWidth() - ) { - Button(onClick = { - scope.launch { - viewModel.onSaveAllChanges() - Toast.makeText( - context, - context.resources.getString(R.string.config_changes_saved), - Toast.LENGTH_LONG - ).show() - navController.navigate(Routes.Main.name) - } - }, Modifier.padding(25.dp)) { - Text(stringResource(id = R.string.save_changes)) - } - } - } - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigViewModel.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigViewModel.kt deleted file mode 100644 index 325e5a49bd..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigViewModel.kt +++ /dev/null @@ -1,152 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.config - -import android.Manifest -import android.app.Application -import android.content.pm.PackageInfo -import android.content.pm.PackageManager -import android.os.Build -import androidx.compose.runtime.mutableStateListOf -import androidx.compose.runtime.toMutableStateList -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.tunnel.model.Settings -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch -import timber.log.Timber -import javax.inject.Inject - -@HiltViewModel -class ConfigViewModel @Inject constructor(private val application : Application, - private val tunnelRepo : Repository, - private val settingsRepo : Repository) : ViewModel() { - - private val _tunnel = MutableStateFlow(null) - private val _tunnelName = MutableStateFlow("") - val tunnelName get() = _tunnelName.asStateFlow() - val tunnel get() = _tunnel.asStateFlow() - private val _packages = MutableStateFlow(emptyList()) - val packages get() = _packages.asStateFlow() - private val packageManager = application.packageManager - - private val _checkedPackages = MutableStateFlow(mutableStateListOf()) - val checkedPackages get() = _checkedPackages.asStateFlow() - private val _include = MutableStateFlow(true) - val include get() = _include.asStateFlow() - - private val _allApplications = MutableStateFlow(true) - val allApplications get() = _allApplications.asStateFlow() - - suspend fun getTunnelById(id : String?) : TunnelConfig? { - return try { - if(id != null) { - val config = tunnelRepo.getById(id.toLong()) - if (config != null) { - _tunnel.emit(config) - _tunnelName.emit(config.name) - - } - return config - } - return null - } catch (e : Exception) { - Timber.e(e.message) - null - } - } - - fun onTunnelNameChange(name : String) { - _tunnelName.value = name - } - - fun onIncludeChange(include : Boolean) { - _include.value = include - } - fun onAddCheckedPackage(packageName : String) { - _checkedPackages.value.add(packageName) - } - - fun onAllApplicationsChange(allApplications : Boolean) { - _allApplications.value = allApplications - } - - fun onRemoveCheckedPackage(packageName : String) { - _checkedPackages.value.remove(packageName) - } - - suspend fun emitCurrentPackageConfigurations(id : String?) { - val tunnelConfig = getTunnelById(id) - if(tunnelConfig != null) { - val config = TunnelConfig.configFromQuick(tunnelConfig.wgQuick) - val excludedApps = config.`interface`.excludedApplications - val includedApps = config.`interface`.includedApplications - if(excludedApps.isNullOrEmpty() && includedApps.isNullOrEmpty()) { - _allApplications.emit(true) - return - } - if(excludedApps.isEmpty()) { - _include.emit(true) - _checkedPackages.emit(includedApps.toMutableStateList()) - } else { - _include.emit(false) - _checkedPackages.emit(excludedApps.toMutableStateList()) - } - _allApplications.emit(false) - } - } - - fun emitQueriedPackages(query : String) { - viewModelScope.launch { - _packages.emit(getAllInternetCapablePackages().filter { - it.packageName.contains(query) - }) - } - } - - private fun getAllInternetCapablePackages() : List { - return getPackagesHoldingPermissions(arrayOf(Manifest.permission.INTERNET)) - } - - private fun getPackagesHoldingPermissions(permissions: Array): List { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - packageManager.getPackagesHoldingPermissions(permissions, PackageManager.PackageInfoFlags.of(0L)) - } else { - @Suppress("DEPRECATION") - packageManager.getPackagesHoldingPermissions(permissions, 0) - } - } - - suspend fun onSaveAllChanges() { - var wgQuick = _tunnel.value?.wgQuick - if(wgQuick != null) { - wgQuick = if(_include.value) { - TunnelConfig.setIncludedApplicationsOnQuick(_checkedPackages.value, wgQuick) - } else { - TunnelConfig.setExcludedApplicationsOnQuick(_checkedPackages.value, wgQuick) - } - if(_allApplications.value) { - wgQuick = TunnelConfig.clearAllApplicationsFromConfig(wgQuick) - } - _tunnel.value?.copy( - name = _tunnelName.value, - wgQuick = wgQuick - )?.let { - tunnelRepo.save(it) - val settings = settingsRepo.getAll() - if(settings != null) { - val setting = settings[0] - if(setting.defaultTunnel != null) { - if(it.id == TunnelConfig.from(setting.defaultTunnel!!).id) { - settingsRepo.save(setting.copy( - defaultTunnel = it.toString() - )) - } - } - } - } - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/detail/DetailScreen.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/detail/DetailScreen.kt deleted file mode 100644 index bdf77a5e56..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/detail/DetailScreen.kt +++ /dev/null @@ -1,139 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.detail - -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.ClipboardManager -import androidx.compose.ui.platform.LocalClipboardManager -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.AnnotatedString -import androidx.compose.ui.text.font.FontStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.util.NumberUtils -import java.time.Duration -import java.time.Instant - -@Composable -fun DetailScreen( - viewModel: DetailViewModel = hiltViewModel(), - padding: PaddingValues, - id : String? -) { - - val clipboardManager: ClipboardManager = LocalClipboardManager.current - val tunnelStats by viewModel.tunnelStats.collectAsStateWithLifecycle(null) - val tunnel by viewModel.tunnel.collectAsStateWithLifecycle(null) - val tunnelName by viewModel.tunnelName.collectAsStateWithLifecycle() - val lastHandshake by viewModel.lastHandshake.collectAsStateWithLifecycle(emptyMap()) - - - LaunchedEffect(Unit) { - viewModel.getTunnelById(id) - } - - if(tunnel != null) { - val interfaceKey = tunnel?.`interface`?.keyPair?.publicKey?.toBase64().toString() - val addresses = tunnel?.`interface`?.addresses!!.joinToString() - val dnsServers = tunnel?.`interface`?.dnsServers!!.joinToString() - val optionalMtu = tunnel?.`interface`?.mtu - val mtu = if(optionalMtu?.isPresent == true) optionalMtu.get().toString() else "None" - Column( - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.Top, - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding(padding) - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 20.dp, vertical = 7.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Column { - Text(stringResource(R.string.config_interface), fontWeight = FontWeight.Bold, fontSize = 20.sp) - Text(stringResource(R.string.name), fontStyle = FontStyle.Italic) - Text(text = tunnelName, modifier = Modifier.clickable { - clipboardManager.setText(AnnotatedString(tunnelName)) - }) - Text(stringResource(R.string.public_key), fontStyle = FontStyle.Italic) - Text(text = interfaceKey, modifier = Modifier.clickable { - clipboardManager.setText(AnnotatedString(interfaceKey)) - }) - Text(stringResource(R.string.addresses), fontStyle = FontStyle.Italic) - Text(text = addresses, modifier = Modifier.clickable { - clipboardManager.setText(AnnotatedString(addresses)) - }) - Text(stringResource(R.string.dns_servers), fontStyle = FontStyle.Italic) - Text(text = dnsServers, modifier = Modifier.clickable { - clipboardManager.setText(AnnotatedString(dnsServers)) - }) - Text(stringResource(R.string.mtu), fontStyle = FontStyle.Italic) - Text(text = mtu, modifier = Modifier.clickable { - clipboardManager.setText(AnnotatedString(mtu)) - }) - Box(modifier = Modifier.padding(10.dp)) - tunnel?.peers?.forEach{ - val peerKey = it.publicKey.toBase64().toString() - val allowedIps = it.allowedIps.joinToString() - val endpoint = if(it.endpoint.isPresent) it.endpoint.get().toString() else "None" - Text(stringResource(R.string.peer), fontWeight = FontWeight.Bold, fontSize = 20.sp) - Text(stringResource(R.string.public_key), fontStyle = FontStyle.Italic) - Text(text = peerKey, modifier = Modifier.clickable { - clipboardManager.setText(AnnotatedString(peerKey)) - }) - Text(stringResource(id = R.string.allowed_ips), fontStyle = FontStyle.Italic) - Text(text = allowedIps, modifier = Modifier.clickable { - clipboardManager.setText(AnnotatedString(allowedIps)) - }) - Text(stringResource(R.string.endpoint), fontStyle = FontStyle.Italic) - Text(text = endpoint, modifier = Modifier.clickable { - clipboardManager.setText(AnnotatedString(endpoint)) - }) - if (tunnelStats != null) { - val totalRx = tunnelStats?.totalRx() ?: 0 - val totalTx = tunnelStats?.totalTx() ?: 0 - if((totalRx + totalTx != 0L)) { - val rxKB = NumberUtils.bytesToKB(tunnelStats!!.totalRx()) - val txKB = NumberUtils.bytesToKB(tunnelStats!!.totalTx()) - Text(stringResource(R.string.transfer), fontStyle = FontStyle.Italic) - Text("rx: ${NumberUtils.formatDecimalTwoPlaces(rxKB)} KB tx: ${NumberUtils.formatDecimalTwoPlaces(txKB)} KB") - Text(stringResource(R.string.last_handshake), fontStyle = FontStyle.Italic) - val handshakeEpoch = lastHandshake[it.publicKey] - if(handshakeEpoch != null) { - if(handshakeEpoch == 0L) { - Text("Never") - } else { - val time = Instant.ofEpochMilli(handshakeEpoch) - Text("${Duration.between(time, Instant.now()).seconds} seconds ago") - } - } - } - } - } - } - } - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/detail/DetailViewModel.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/detail/DetailViewModel.kt deleted file mode 100644 index cf83878a0b..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/detail/DetailViewModel.kt +++ /dev/null @@ -1,45 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.detail - -import androidx.lifecycle.ViewModel -import com.wireguard.config.Config -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.tunnel.VpnService -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import timber.log.Timber -import javax.inject.Inject - -@HiltViewModel -class DetailViewModel @Inject constructor(private val tunnelRepo : Repository, private val vpnService : VpnService - -) : ViewModel() { - - private val _tunnel = MutableStateFlow(null) - val tunnel get() = _tunnel.asStateFlow() - - private val _tunnelName = MutableStateFlow("") - val tunnelName = _tunnelName.asStateFlow() - val tunnelStats get() = vpnService.statistics - val lastHandshake get() = vpnService.lastHandshake - - private var config : TunnelConfig? = null - - suspend fun getTunnelById(id : String?) : TunnelConfig? { - return try { - if(id != null) { - config = tunnelRepo.getById(id.toLong()) - if (config != null) { - _tunnel.emit(TunnelConfig.configFromQuick(config!!.wgQuick)) - _tunnelName.emit(config!!.name) - } - return config - } - return null - } catch (e : Exception) { - Timber.e(e.message) - null - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainScreen.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainScreen.kt deleted file mode 100644 index e2abdd07b7..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainScreen.kt +++ /dev/null @@ -1,336 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.main - -import android.annotation.SuppressLint -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.slideInVertically -import androidx.compose.animation.slideOutVertically -import androidx.compose.foundation.clickable -import androidx.compose.foundation.focusable -import androidx.compose.foundation.gestures.detectTapGestures -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.FileOpen -import androidx.compose.material.icons.rounded.Add -import androidx.compose.material.icons.rounded.Circle -import androidx.compose.material.icons.rounded.Delete -import androidx.compose.material.icons.rounded.Edit -import androidx.compose.material.icons.rounded.Info -import androidx.compose.material3.Divider -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.FabPosition -import androidx.compose.material3.FloatingActionButton -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.ModalBottomSheet -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SnackbarDuration -import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.SnackbarResult -import androidx.compose.material3.Switch -import androidx.compose.material3.Text -import androidx.compose.material3.rememberModalBottomSheetState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.hapticfeedback.HapticFeedbackType -import androidx.compose.ui.input.nestedscroll.NestedScrollConnection -import androidx.compose.ui.input.nestedscroll.NestedScrollSource -import androidx.compose.ui.input.nestedscroll.nestedScroll -import androidx.compose.ui.input.pointer.pointerInput -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontStyle -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.navigation.NavController -import com.wireguard.android.backend.Tunnel -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.WireGuardAutoTunnel -import net.nymtech.nymconnect.service.tunnel.HandshakeStatus -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import net.nymtech.nymconnect.ui.Routes -import net.nymtech.nymconnect.ui.common.RowListItem -import net.nymtech.nymconnect.ui.theme.brickRed -import net.nymtech.nymconnect.ui.theme.mint -import kotlinx.coroutines.launch - -@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun MainScreen( - viewModel: MainViewModel = hiltViewModel(), padding: PaddingValues, - snackbarHostState: SnackbarHostState, navController: NavController -) { - - val haptic = LocalHapticFeedback.current - val context = LocalContext.current - val isVisible = rememberSaveable { mutableStateOf(true) } - val scope = rememberCoroutineScope() - - val sheetState = rememberModalBottomSheetState() - var showBottomSheet by remember { mutableStateOf(false) } - val tunnels by viewModel.tunnels.collectAsStateWithLifecycle(mutableListOf()) - val handshakeStatus by viewModel.handshakeStatus.collectAsStateWithLifecycle(HandshakeStatus.NOT_STARTED) - val viewState = viewModel.viewState.collectAsStateWithLifecycle() - var selectedTunnel by remember { mutableStateOf(null) } - val state by viewModel.state.collectAsStateWithLifecycle(Tunnel.State.DOWN) - val tunnelName by viewModel.tunnelName.collectAsStateWithLifecycle("") - - // Nested scroll for control FAB - val nestedScrollConnection = remember { - object : NestedScrollConnection { - override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { - // Hide FAB - if (available.y < -1) { - isVisible.value = false - } - // Show FAB - if (available.y > 1) { - isVisible.value = true - } - return Offset.Zero - } - } - } - - LaunchedEffect(viewState.value) { - if (viewState.value.showSnackbarMessage) { - val result = snackbarHostState.showSnackbar( - message = viewState.value.snackbarMessage, - actionLabel = viewState.value.snackbarActionText, - duration = SnackbarDuration.Long, - ) - when (result) { - SnackbarResult.ActionPerformed -> viewState.value.onSnackbarActionClick - SnackbarResult.Dismissed -> viewState.value.onSnackbarActionClick - } - } - } - - val pickFileLauncher = rememberLauncherForActivityResult( - ActivityResultContracts.GetContent() - ) { file -> - if (file != null) { - viewModel.onTunnelFileSelected(file) - } - } - - Scaffold( - modifier = Modifier.pointerInput(Unit) { - detectTapGestures(onTap = { - selectedTunnel = null - }) - }, - floatingActionButtonPosition = FabPosition.End, - floatingActionButton = { - AnimatedVisibility( - visible = isVisible.value, - enter = slideInVertically(initialOffsetY = { it * 2 }), - exit = slideOutVertically(targetOffsetY = { it * 2 }), - ) { - FloatingActionButton( - modifier = Modifier.padding(bottom = 90.dp), - onClick = { - showBottomSheet = true - }, - containerColor = MaterialTheme.colorScheme.secondary, - shape = RoundedCornerShape(16.dp), - ) { - Icon( - imageVector = Icons.Rounded.Add, - contentDescription = stringResource(id = R.string.add_tunnel), - tint = Color.DarkGray, - ) - } - } - } - ) { - if (tunnels.isEmpty()) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - modifier = Modifier - .fillMaxSize() - .padding(padding) - ) { - Text(text = stringResource(R.string.no_tunnels), fontStyle = FontStyle.Italic) - } - } - if (showBottomSheet) { - ModalBottomSheet( - onDismissRequest = { - showBottomSheet = false - }, - sheetState = sheetState - ) { - // Sheet content - Row( - modifier = Modifier - .fillMaxWidth() - .clickable { - showBottomSheet = false - pickFileLauncher.launch("*/*") - } - .padding(10.dp) - ) { - Icon( - Icons.Filled.FileOpen, - contentDescription = stringResource(id = R.string.open_file), - modifier = Modifier.padding(10.dp) - ) - Text( - stringResource(id = R.string.add_from_file), - modifier = Modifier.padding(10.dp) - ) - } - Divider() - } - } - Column( - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.Top, - modifier = Modifier - .fillMaxSize() - .padding(padding) - ) { - - LazyColumn( - modifier = Modifier.fillMaxSize() - .nestedScroll(nestedScrollConnection), - ) { - itemsIndexed(tunnels.toList()) { index, tunnel -> - val focusRequester = FocusRequester(); - RowListItem(leadingIcon = Icons.Rounded.Circle, - leadingIconColor = if (tunnelName == tunnel.name) when (handshakeStatus) { - HandshakeStatus.HEALTHY -> mint - HandshakeStatus.UNHEALTHY -> brickRed - HandshakeStatus.NOT_STARTED -> Color.Gray - HandshakeStatus.NEVER_CONNECTED -> brickRed - } else Color.Gray, - text = tunnel.name, - onHold = { - if (state == Tunnel.State.UP && tunnel.name == tunnelName) { - scope.launch { - viewModel.showSnackBarMessage(context.resources.getString(R.string.turn_off_tunnel)) - } - return@RowListItem - } - haptic.performHapticFeedback(HapticFeedbackType.LongPress) - selectedTunnel = tunnel; - }, - onClick = { - if (!WireGuardAutoTunnel.isRunningOnAndroidTv(context)) { - navController.navigate("${Routes.Detail.name}/${tunnel.id}") - } else { - focusRequester.requestFocus() - } - }, - rowButton = { - if (tunnel.id == selectedTunnel?.id) { - Row { - IconButton(onClick = { - navController.navigate("${Routes.Config.name}/${selectedTunnel?.id}") - }) { - Icon(Icons.Rounded.Edit, stringResource(id = R.string.edit)) - } - IconButton( - modifier = Modifier.focusable(), - onClick = { viewModel.onDelete(tunnel) }) { - Icon( - Icons.Rounded.Delete, - stringResource(id = R.string.delete) - ) - } - } - } else { - if (WireGuardAutoTunnel.isRunningOnAndroidTv(context)) { - Row { - IconButton( - modifier = Modifier.focusRequester(focusRequester), - onClick = { - navController.navigate("${Routes.Detail.name}/${tunnel.id}") - }) { - Icon(Icons.Rounded.Info, "Info") - } - IconButton(onClick = { - if (state == Tunnel.State.UP && tunnel.name == tunnelName) - scope.launch { - viewModel.showSnackBarMessage( - context.resources.getString( - R.string.turn_off_tunnel - ) - ) - } else { - navController.navigate("${Routes.Config.name}/${tunnel.id}") - } - }) { - Icon( - Icons.Rounded.Edit, - stringResource(id = R.string.edit) - ) - } - IconButton(onClick = { - if (state == Tunnel.State.UP && tunnel.name == tunnelName) - scope.launch { - viewModel.showSnackBarMessage( - context.resources.getString( - R.string.turn_off_tunnel - ) - ) - } else { - viewModel.onDelete(tunnel) - } - }) { - Icon( - Icons.Rounded.Delete, - stringResource(id = R.string.delete) - ) - } - Switch( - checked = (state == Tunnel.State.UP && tunnel.name == tunnelName), - onCheckedChange = { checked -> - if (checked) viewModel.onTunnelStart(tunnel) else viewModel.onTunnelStop() - } - ) - } - } else { - Switch( - checked = (state == Tunnel.State.UP && tunnel.name == tunnelName), - onCheckedChange = { checked -> - if (checked) viewModel.onTunnelStart(tunnel) else viewModel.onTunnelStop() - } - ) - } - } - }) - } - } - } - } -} diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainViewModel.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainViewModel.kt deleted file mode 100644 index a88b5adcb9..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/MainViewModel.kt +++ /dev/null @@ -1,179 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.main - -import android.annotation.SuppressLint -import android.app.Application -import android.content.Context -import android.net.Uri -import android.provider.OpenableColumns -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.wireguard.config.BadConfigException -import com.wireguard.config.Config -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.foreground.ServiceState -import net.nymtech.nymconnect.service.foreground.ServiceManager -import net.nymtech.nymconnect.service.foreground.WireGuardConnectivityWatcherService -import net.nymtech.nymconnect.service.shortcut.ShortcutsManager -import net.nymtech.nymconnect.service.tunnel.VpnService -import net.nymtech.nymconnect.service.tunnel.model.Settings -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import net.nymtech.nymconnect.ui.ViewState -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch -import timber.log.Timber -import javax.inject.Inject - - -@HiltViewModel -class MainViewModel @Inject constructor(private val application : Application, - private val tunnelRepo : Repository, - private val settingsRepo : Repository, - private val vpnService: VpnService, -) : ViewModel() { - - private val _viewState = MutableStateFlow(ViewState()) - val viewState get() = _viewState.asStateFlow() - val tunnels get() = tunnelRepo.itemFlow - val state get() = vpnService.state - - val handshakeStatus get() = vpnService.handshakeStatus - val tunnelName get() = vpnService.tunnelName - private val _settings = MutableStateFlow(Settings()) - val settings get() = _settings.asStateFlow() - - private val defaultConfigName = { - "tunnel${(Math.random() * 100000).toInt()}" - } - - - init { - viewModelScope.launch { - settingsRepo.itemFlow.collect { - val settings = it.first() - validateWatcherServiceState(settings) - _settings.emit(settings) - } - } - } - - private fun validateWatcherServiceState(settings: Settings) { - val watcherState = ServiceManager.getServiceState(application.applicationContext, WireGuardConnectivityWatcherService::class.java) - if(settings.isAutoTunnelEnabled && watcherState == ServiceState.STOPPED && settings.defaultTunnel != null) { - ServiceManager.startWatcherService(application.applicationContext, settings.defaultTunnel!!) - } - } - - - fun onDelete(tunnel : TunnelConfig) { - viewModelScope.launch { - if(tunnelRepo.count() == 1L) { - ServiceManager.stopWatcherService(application.applicationContext) - val settings = settingsRepo.getAll() - if(!settings.isNullOrEmpty()) { - val setting = settings[0] - setting.defaultTunnel = null - setting.isAutoTunnelEnabled = false - setting.isAlwaysOnVpnEnabled = false - settingsRepo.save(setting) - } - } - tunnelRepo.delete(tunnel) - ShortcutsManager.removeTunnelShortcuts(application.applicationContext, tunnel) - } - } - - fun onTunnelStart(tunnelConfig : TunnelConfig) = viewModelScope.launch { - ServiceManager.startVpnService(application.applicationContext, tunnelConfig.toString()) - } - - fun onTunnelStop() { - ServiceManager.stopVpnService(application.applicationContext) - } - - fun onTunnelFileSelected(uri : Uri) { - try { - val fileName = getFileName(application.applicationContext, uri) - val extension = getFileExtensionFromFileName(fileName) - if(extension != ".conf") { - viewModelScope.launch { - showSnackBarMessage(application.resources.getString(R.string.file_extension_message)) - } - return - } - val stream = application.applicationContext.contentResolver.openInputStream(uri) - stream ?: return - val bufferReader = stream.bufferedReader(charset = Charsets.UTF_8) - val config = Config.parse(bufferReader) - val tunnelName = getNameFromFileName(fileName) - saveTunnel(TunnelConfig(name = tunnelName, wgQuick = config.toWgQuickString())) - stream.close() - } catch(_: BadConfigException) { - viewModelScope.launch { - showSnackBarMessage(application.applicationContext.getString(R.string.bad_config)) - } - } - } - - private fun saveTunnel(tunnelConfig : TunnelConfig) { - viewModelScope.launch { - tunnelRepo.save(tunnelConfig) - ShortcutsManager.createTunnelShortcuts(application.applicationContext, tunnelConfig) - } - } - - @SuppressLint("Range") - private fun getFileName(context: Context, uri: Uri): String { - if (uri.scheme == "content") { - val cursor = try { - context.contentResolver.query(uri, null, null, null, null) - } catch (e : Exception) { - Timber.d("Exception getting config name") - null - } - cursor ?: return defaultConfigName() - cursor.use { - if(cursor.moveToFirst()) { - return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)) - } - } - } - return defaultConfigName() - } - - suspend fun showSnackBarMessage(message : String) { - _viewState.emit(_viewState.value.copy( - showSnackbarMessage = true, - snackbarMessage = message, - snackbarActionText = "Okay", - onSnackbarActionClick = { - viewModelScope.launch { - dismissSnackBar() - } - } - )) - delay(3000) - dismissSnackBar() - } - - private suspend fun dismissSnackBar() { - _viewState.emit(_viewState.value.copy( - showSnackbarMessage = false - )) - } - - private fun getNameFromFileName(fileName : String) : String { - return fileName.substring(0 , fileName.lastIndexOf('.') ) - } - - private fun getFileExtensionFromFileName(fileName : String) : String { - return try { - fileName.substring(fileName.lastIndexOf('.')) - } catch (e : Exception) { - "" - } - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt deleted file mode 100644 index 4616a8fd9a..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt +++ /dev/null @@ -1,415 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.settings - -import android.Manifest -import android.content.Intent -import android.net.Uri -import android.os.Build -import android.provider.Settings -import androidx.compose.foundation.clickable -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.ExperimentalLayoutApi -import androidx.compose.foundation.layout.FlowRow -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.text.KeyboardActions -import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.outlined.Add -import androidx.compose.material.icons.rounded.LocationOff -import androidx.compose.material3.Button -import androidx.compose.material3.DropdownMenuItem -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.ExposedDropdownMenuBox -import androidx.compose.material3.ExposedDropdownMenuDefaults -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.OutlinedTextField -import androidx.compose.material3.SnackbarDuration -import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.SnackbarResult -import androidx.compose.material3.Switch -import androidx.compose.material3.Text -import androidx.compose.material3.TextField -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontStyle -import androidx.compose.ui.text.input.ImeAction -import androidx.compose.ui.text.input.KeyboardCapitalization -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.navigation.NavController -import com.google.accompanist.permissions.ExperimentalPermissionsApi -import com.google.accompanist.permissions.isGranted -import com.google.accompanist.permissions.rememberPermissionState -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.WireGuardAutoTunnel -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import net.nymtech.nymconnect.ui.Routes -import net.nymtech.nymconnect.ui.common.ClickableIconButton -import kotlinx.coroutines.launch - -@OptIn(ExperimentalMaterial3Api::class, ExperimentalPermissionsApi::class, - ExperimentalLayoutApi::class -) -@Composable -fun SettingsScreen( - viewModel: SettingsViewModel = hiltViewModel(), - padding: PaddingValues, - navController: NavController, - focusRequester: FocusRequester, - snackbarHostState: SnackbarHostState = remember { SnackbarHostState() } -) { - - val scope = rememberCoroutineScope() - val context = LocalContext.current - val focusManager = LocalFocusManager.current - val interactionSource = remember { MutableInteractionSource() } - - var expanded by remember { mutableStateOf(false) } - val viewState by viewModel.viewState.collectAsStateWithLifecycle() - val settings by viewModel.settings.collectAsStateWithLifecycle() - val trustedSSIDs by viewModel.trustedSSIDs.collectAsStateWithLifecycle() - val tunnels by viewModel.tunnels.collectAsStateWithLifecycle(mutableListOf()) - val backgroundLocationState = - rememberPermissionState(Manifest.permission.ACCESS_BACKGROUND_LOCATION) - val fineLocationState = rememberPermissionState(Manifest.permission.ACCESS_FINE_LOCATION) - var currentText by remember { mutableStateOf("") } - val scrollState = rememberScrollState() - var isLocationServicesEnabled by remember { mutableStateOf(viewModel.checkLocationServicesEnabled())} - - LaunchedEffect(viewState) { - if (viewState.showSnackbarMessage) { - val result = snackbarHostState.showSnackbar( - message = viewState.snackbarMessage, - actionLabel = viewState.snackbarActionText, - duration = SnackbarDuration.Long, - ) - when (result) { - SnackbarResult.ActionPerformed -> viewState.onSnackbarActionClick - SnackbarResult.Dismissed -> viewState.onSnackbarActionClick - } - } - } - - fun saveTrustedSSID() { - if (currentText.isNotEmpty()) { - scope.launch { - viewModel.onSaveTrustedSSID(currentText) - currentText = "" - } - } - } - - fun openSettings() { - scope.launch { - val intentSettings = - Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - intentSettings.data = - Uri.fromParts("package", context.packageName, null) - context.startActivity(intentSettings) - } - } - - if(!backgroundLocationState.status.isGranted && Build.VERSION.SDK_INT > Build.VERSION_CODES.P) { - Column(horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Top, - modifier = Modifier - .fillMaxSize() - .verticalScroll(scrollState) - .padding(padding)) { - Icon(Icons.Rounded.LocationOff, contentDescription = stringResource(id = R.string.map), modifier = Modifier - .padding(30.dp) - .size(128.dp)) - Text(stringResource(R.string.prominent_background_location_title), textAlign = TextAlign.Center, modifier = Modifier.padding(30.dp), fontSize = 20.sp) - Text(stringResource(R.string.prominent_background_location_message), textAlign = TextAlign.Center, modifier = Modifier.padding(30.dp), fontSize = 15.sp) - Row( - modifier = if(WireGuardAutoTunnel.isRunningOnAndroidTv(context)) Modifier - .fillMaxWidth() - .padding(10.dp) else Modifier - .fillMaxWidth() - .padding(30.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceEvenly - ) { - Button(onClick = { - navController.navigate(Routes.Main.name) - }) { - Text(stringResource(id = R.string.no_thanks)) - } - Button(modifier = Modifier.focusRequester(focusRequester), onClick = { - openSettings() - }) { - Text(stringResource(id = R.string.turn_on)) - } - } - } - return - } - - if(!fineLocationState.status.isGranted) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - modifier = Modifier - .fillMaxSize() - .padding(padding) - ) { - Text( - stringResource(id = R.string.precise_location_message), - textAlign = TextAlign.Center, - modifier = Modifier.padding(15.dp), - fontStyle = FontStyle.Italic - ) - Button(modifier = Modifier.focusRequester(focusRequester),onClick = { - fineLocationState.launchPermissionRequest() - }) { - Text(stringResource(id = R.string.request)) - } - - } - return - } - - if (tunnels.isEmpty()) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - modifier = Modifier - .fillMaxSize() - .padding(padding) - ) { - Text( - stringResource(R.string.one_tunnel_required), - textAlign = TextAlign.Center, - modifier = Modifier.padding(15.dp), - fontStyle = FontStyle.Italic - ) - } - return - } - if(!isLocationServicesEnabled && Build.VERSION.SDK_INT > Build.VERSION_CODES.P) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - modifier = Modifier - .fillMaxSize() - .padding(padding) - ) { - Text( - stringResource(id = R.string.location_services_not_detected), - textAlign = TextAlign.Center, - modifier = Modifier.padding(15.dp), - fontStyle = FontStyle.Italic - ) - Button(modifier = Modifier.focusRequester(focusRequester), onClick = { - val locationServicesEnabled = viewModel.checkLocationServicesEnabled() - isLocationServicesEnabled = locationServicesEnabled - if(!locationServicesEnabled) { - scope.launch { - viewModel.showSnackBarMessage(context.getString(R.string.detecting_location_services_disabled)) - } - } - }) { - Text(stringResource(id = R.string.check_again)) - } - } - return - } - val screenPadding = if(WireGuardAutoTunnel.isRunningOnAndroidTv(context)) 5.dp else 15.dp - Column( - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.Top, - modifier = if(WireGuardAutoTunnel.isRunningOnAndroidTv(context)) Modifier - .fillMaxHeight(.85f) - .fillMaxWidth() - .verticalScroll(scrollState) - .clickable(indication = null, interactionSource = interactionSource) { - focusManager.clearFocus() - } - .padding(padding) else Modifier - .fillMaxSize() - .verticalScroll(scrollState) - .clickable(indication = null, interactionSource = interactionSource) { - focusManager.clearFocus() - } - .padding(padding) - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(screenPadding), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Text(stringResource(R.string.enable_auto_tunnel)) - Switch( - modifier = Modifier.focusRequester(focusRequester), - enabled = !settings.isAlwaysOnVpnEnabled, - checked = settings.isAutoTunnelEnabled, - onCheckedChange = { - scope.launch { - viewModel.toggleAutoTunnel() - } - } - ) - } - Text( - stringResource(id = R.string.select_tunnel), - textAlign = TextAlign.Center, - modifier = Modifier.padding(screenPadding, bottom = 5.dp, top = 5.dp) - ) - ExposedDropdownMenuBox( - expanded = expanded, - onExpandedChange = { - if(!(settings.isAutoTunnelEnabled || settings.isAlwaysOnVpnEnabled)) { - expanded = !expanded }}, - modifier = Modifier.padding(start = 15.dp, top = 5.dp, bottom = 10.dp).clickable { - expanded = !expanded - }, - ) { - TextField( - enabled = !(settings.isAutoTunnelEnabled || settings.isAlwaysOnVpnEnabled), - value = settings.defaultTunnel?.let { - TunnelConfig.from(it).name } - ?: "", - readOnly = true, - modifier = Modifier.menuAnchor(), - label = { Text(stringResource(R.string.tunnels)) }, - onValueChange = { }, - trailingIcon = { - ExposedDropdownMenuDefaults.TrailingIcon( - expanded = expanded - ) - } - ) - ExposedDropdownMenu( - expanded = expanded, - onDismissRequest = { - expanded = false - } - ) { - tunnels.forEach() { tunnel -> - DropdownMenuItem( - onClick = { - scope.launch { - viewModel.onDefaultTunnelSelected(tunnel) - } - expanded = false - }, - text = { Text(text = tunnel.name) } - ) - } - } - } - Text( - stringResource(R.string.trusted_ssid), - textAlign = TextAlign.Center, - modifier = Modifier.padding(screenPadding, bottom = 5.dp, top = 5.dp) - ) - FlowRow( - modifier = Modifier.padding(screenPadding), - horizontalArrangement = Arrangement.spacedBy(8.dp), - verticalArrangement = Arrangement.SpaceEvenly - ) { - trustedSSIDs.forEach { ssid -> - ClickableIconButton(onIconClick = { - scope.launch { - viewModel.onDeleteTrustedSSID(ssid) - } - }, text = ssid, icon = Icons.Filled.Close, enabled = !(settings.isAutoTunnelEnabled || settings.isAlwaysOnVpnEnabled)) - } - } - OutlinedTextField( - enabled = !(settings.isAutoTunnelEnabled || settings.isAlwaysOnVpnEnabled), - value = currentText, - onValueChange = { currentText = it }, - label = { Text(stringResource(R.string.add_trusted_ssid)) }, - modifier = Modifier.padding(start = screenPadding, top = 5.dp), - maxLines = 1, - keyboardOptions = KeyboardOptions( - capitalization = KeyboardCapitalization.None, - imeAction = ImeAction.Done - ), - keyboardActions = KeyboardActions( - onDone = { - saveTrustedSSID() - } - ), - trailingIcon = { - IconButton(onClick = { saveTrustedSSID() }) { - Icon( - imageVector = Icons.Outlined.Add, - contentDescription = if (currentText == "") stringResource(id = R.string.trusted_ssid_empty_description) else stringResource( - id = R.string.trusted_ssid_value_description - ), - tint = if(currentText == "") Color.Transparent else Color.Green - ) - } - }, - ) - Row( - modifier = Modifier - .fillMaxWidth() - .padding(screenPadding), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Text(stringResource(R.string.tunnel_mobile_data)) - Switch( - enabled = !(settings.isAutoTunnelEnabled || settings.isAlwaysOnVpnEnabled), - checked = settings.isTunnelOnMobileDataEnabled, - onCheckedChange = { - scope.launch { - viewModel.onToggleTunnelOnMobileData() - } - } - ) - } - Row( - modifier = Modifier - .fillMaxWidth() - .padding(screenPadding), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Text(stringResource(R.string.always_on_vpn_support)) - Switch( - enabled = !settings.isAutoTunnelEnabled, - checked = settings.isAlwaysOnVpnEnabled, - onCheckedChange = { - scope.launch { - viewModel.onToggleAlwaysOnVPN() - } - } - ) - } - } -} - - diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsViewModel.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsViewModel.kt deleted file mode 100644 index 7143c1b4b6..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsViewModel.kt +++ /dev/null @@ -1,124 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.settings - -import android.app.Application -import android.content.Context -import android.location.LocationManager -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import net.nymtech.nymconnect.R -import net.nymtech.nymconnect.repository.Repository -import net.nymtech.nymconnect.service.foreground.ServiceManager -import net.nymtech.nymconnect.service.tunnel.model.Settings -import net.nymtech.nymconnect.service.tunnel.model.TunnelConfig -import net.nymtech.nymconnect.ui.ViewState -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch -import javax.inject.Inject - - -@HiltViewModel -class SettingsViewModel @Inject constructor(private val application : Application, - private val tunnelRepo : Repository, private val settingsRepo : Repository -) : ViewModel() { - - private val _trustedSSIDs = MutableStateFlow(emptyList()) - val trustedSSIDs = _trustedSSIDs.asStateFlow() - private val _settings = MutableStateFlow(Settings()) - val settings get() = _settings.asStateFlow() - val tunnels get() = tunnelRepo.itemFlow - private val _viewState = MutableStateFlow(ViewState()) - val viewState get() = _viewState.asStateFlow() - - init { - checkLocationServicesEnabled() - viewModelScope.launch { - settingsRepo.itemFlow.collect { - val settings = it.first() - _settings.emit(settings) - _trustedSSIDs.emit(settings.trustedNetworkSSIDs.toList()) - } - } - } - - suspend fun onSaveTrustedSSID(ssid: String) { - val trimmed = ssid.trim() - if (!_settings.value.trustedNetworkSSIDs.contains(trimmed)) { - _settings.value.trustedNetworkSSIDs.add(trimmed) - settingsRepo.save(_settings.value) - } else { - showSnackBarMessage("SSID already exists.") - } - } - - suspend fun onDefaultTunnelSelected(tunnelConfig: TunnelConfig) { - settingsRepo.save(_settings.value.copy( - defaultTunnel = tunnelConfig.toString() - )) - } - - suspend fun onToggleTunnelOnMobileData() { - settingsRepo.save(_settings.value.copy( - isTunnelOnMobileDataEnabled = !_settings.value.isTunnelOnMobileDataEnabled - )) - } - - suspend fun onDeleteTrustedSSID(ssid: String) { - _settings.value.trustedNetworkSSIDs.remove(ssid) - settingsRepo.save(_settings.value) - } - - suspend fun toggleAutoTunnel() { - if(_settings.value.defaultTunnel.isNullOrEmpty() && !_settings.value.isAutoTunnelEnabled) { - showSnackBarMessage(application.getString(R.string.select_tunnel_message)) - return - } - if(_settings.value.isAutoTunnelEnabled) { - ServiceManager.stopWatcherService(application) - } else { - if(_settings.value.defaultTunnel != null) { - val defaultTunnel = _settings.value.defaultTunnel - ServiceManager.startWatcherService(application, defaultTunnel!!) - } - } - settingsRepo.save(_settings.value.copy( - isAutoTunnelEnabled = !_settings.value.isAutoTunnelEnabled - )) - } - - suspend fun showSnackBarMessage(message : String) { - _viewState.emit(_viewState.value.copy( - showSnackbarMessage = true, - snackbarMessage = message, - snackbarActionText = "Okay", - onSnackbarActionClick = { - viewModelScope.launch { - dismissSnackBar() - } - } - )) - } - - private suspend fun dismissSnackBar() { - _viewState.emit(_viewState.value.copy( - showSnackbarMessage = false - )) - } - - suspend fun onToggleAlwaysOnVPN() { - if(_settings.value.defaultTunnel != null) { - _settings.emit( - _settings.value.copy(isAlwaysOnVpnEnabled = !_settings.value.isAlwaysOnVpnEnabled) - ) - settingsRepo.save(_settings.value) - } else { - showSnackBarMessage(application.getString(R.string.select_tunnel_message)) - } - } - fun checkLocationServicesEnabled() : Boolean { - val locationManager = - application.getSystemService(Context.LOCATION_SERVICE) as LocationManager - return locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt deleted file mode 100644 index 31fc9dbf6a..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt +++ /dev/null @@ -1,83 +0,0 @@ -package net.nymtech.nymconnect.ui.screens.support - -import android.content.Intent -import android.content.pm.PackageManager -import android.net.Uri -import androidx.compose.foundation.clickable -import androidx.compose.foundation.focusable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.text.style.TextDecoration -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import net.nymtech.nymconnect.R - -@Composable -fun SupportScreen(padding : PaddingValues, focusRequester: FocusRequester) { - - val context = LocalContext.current - - fun openWebPage(url: String) { - val webpage: Uri = Uri.parse(url) - val intent = Intent(Intent.ACTION_VIEW, webpage) - context.startActivity(intent) - } - - Column(horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Top, - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .focusable() - .padding(padding)) { - Text(stringResource(R.string.support_text), textAlign = TextAlign.Center, modifier = Modifier.padding(30.dp), fontSize = 15.sp) - Row( - modifier = Modifier - .fillMaxWidth() - .padding(14.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceEvenly - ) { - IconButton(onClick = { - openWebPage(context.resources.getString(R.string.discord_url)) - }) { - Icon(imageVector = ImageVector.vectorResource(R.drawable.discord), "Discord") - } - IconButton(modifier = Modifier.focusRequester(focusRequester),onClick = { - openWebPage(context.resources.getString(R.string.github_url)) - }) { - Icon(imageVector = ImageVector.vectorResource(R.drawable.github), "Github") - } - } - Spacer(modifier = Modifier.weight(1f)) - Text(stringResource(id = R.string.privacy_policy), style = TextStyle(textDecoration = TextDecoration.Underline), - modifier = Modifier.clickable { - openWebPage(context.resources.getString(R.string.privacy_policy_url)) - }) - Text("App version: ${net.nymtech.nymconnect.BuildConfig.VERSION_NAME}", Modifier.padding(25.dp)) - } - } \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Color.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Color.kt deleted file mode 100644 index 3561a75512..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Color.kt +++ /dev/null @@ -1,17 +0,0 @@ -package net.nymtech.nymconnect.ui.theme - -import androidx.compose.ui.graphics.Color - -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFF492532) -val virdigris = Color(0xFF5BC0BE) - -val Purple40 = Color(0xFF6650a4) -val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFFFFFFFF) - -//status colors -val brickRed = Color(0xFFCE4257) -val pinkRed = Color(0xFFEF476F) -val mint = Color(0xFF52B788) diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Theme.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Theme.kt deleted file mode 100644 index 647ad9f2ad..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Theme.kt +++ /dev/null @@ -1,80 +0,0 @@ -package net.nymtech.nymconnect.ui.theme - -import android.app.Activity -import android.os.Build -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.WindowCompat - -private val DarkColorScheme = darkColorScheme( - //primary = Purple80, - primary = virdigris, - secondary = virdigris, - // secondary = PurpleGrey80, - tertiary = virdigris - //tertiary = Pink80 -) - -private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40 - - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ -) - -@Composable -fun WireguardAutoTunnelTheme( - //force dark theme - darkTheme : Boolean = true, - //darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - //turning off dynamic color for now - dynamicColor: Boolean = false, - content: @Composable () -> Unit -) { - - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - val window = (view.context as Activity).window - WindowCompat.setDecorFitsSystemWindows(window, false) - window.statusBarColor = Color.Transparent.toArgb() - window.navigationBarColor = Color.Transparent.toArgb() - WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = !darkTheme - WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightNavigationBars = !darkTheme - } - } - - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, - content = content - ) -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/TransparentSystemBars.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/TransparentSystemBars.kt deleted file mode 100644 index 6a1c35331c..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/TransparentSystemBars.kt +++ /dev/null @@ -1,22 +0,0 @@ -package net.nymtech.nymconnect.ui.theme - -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.ui.graphics.Color -import com.google.accompanist.systemuicontroller.rememberSystemUiController - -@Composable -fun TransparentSystemBars() { - val systemUiController = rememberSystemUiController() - val useDarkIcons = !isSystemInDarkTheme() - - DisposableEffect(systemUiController, useDarkIcons) { - systemUiController.setSystemBarsColor( - color = Color.Transparent, - darkIcons = useDarkIcons - ) - - onDispose {} - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Type.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Type.kt deleted file mode 100644 index 6b89a8e327..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/theme/Type.kt +++ /dev/null @@ -1,34 +0,0 @@ -package net.nymtech.nymconnect.ui.theme - -import androidx.compose.material3.Typography -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp - -// Set of Material typography styles to start with -val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ -) \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/NumberUtils.kt b/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/NumberUtils.kt deleted file mode 100644 index aa240e6eb2..0000000000 --- a/nym-vpn/android/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/NumberUtils.kt +++ /dev/null @@ -1,25 +0,0 @@ -package net.nymtech.nymconnect.util - -import java.math.BigDecimal -import java.text.DecimalFormat -import java.time.Duration -import java.time.Instant - -object NumberUtils { - - private const val BYTES_IN_KB = 1024L - - fun bytesToKB(bytes : Long) : BigDecimal { - return bytes.toBigDecimal().divide(BYTES_IN_KB.toBigDecimal()) - } - - fun formatDecimalTwoPlaces(bigDecimal: BigDecimal) : String { - val df = DecimalFormat("#.##") - return df.format(bigDecimal) - } - - fun getSecondsBetweenTimestampAndNow(epoch : Long) : Long { - val time = Instant.ofEpochMilli(epoch) - return Duration.between(time, Instant.now()).seconds - } -} \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/nym-vpn/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d1146..0000000000 --- a/nym-vpn/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/drawable/discord.xml b/nym-vpn/android/app/src/main/res/drawable/discord.xml deleted file mode 100644 index df43339353..0000000000 --- a/nym-vpn/android/app/src/main/res/drawable/discord.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/nym-vpn/android/app/src/main/res/drawable/github.xml b/nym-vpn/android/app/src/main/res/drawable/github.xml deleted file mode 100644 index 32f8254ebe..0000000000 --- a/nym-vpn/android/app/src/main/res/drawable/github.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/nym-vpn/android/app/src/main/res/drawable/ic_launcher_background.xml b/nym-vpn/android/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9cbf..0000000000 --- a/nym-vpn/android/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/nym-vpn/android/app/src/main/res/drawable/ic_launcher_foreground.xml b/nym-vpn/android/app/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d1146..0000000000 --- a/nym-vpn/android/app/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/drawable/shield.xml b/nym-vpn/android/app/src/main/res/drawable/shield.xml deleted file mode 100644 index e49a1f265d..0000000000 --- a/nym-vpn/android/app/src/main/res/drawable/shield.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/nym-vpn/android/app/src/main/res/drawable/vpn_off.xml b/nym-vpn/android/app/src/main/res/drawable/vpn_off.xml deleted file mode 100644 index d33949b74b..0000000000 --- a/nym-vpn/android/app/src/main/res/drawable/vpn_off.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/nym-vpn/android/app/src/main/res/drawable/vpn_on.xml b/nym-vpn/android/app/src/main/res/drawable/vpn_on.xml deleted file mode 100644 index 1339fb3b8b..0000000000 --- a/nym-vpn/android/app/src/main/res/drawable/vpn_on.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/nym-vpn/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/nym-vpn/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/nym-vpn/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/nym-vpn/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/nym-vpn/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 4974445c9a..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 483ace7edf..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 59b2f1db44..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 307fb6aab9..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index e634763b42..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 37a8d502c8..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 5b412e78a0..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index 580c767c54..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 51a588fdee..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 65cefcb196..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 312d818bbe..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 5070e583a0..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 18252905f8..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 514ec36652..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 83e115a87d..0000000000 Binary files a/nym-vpn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/nym-vpn/android/app/src/main/res/values/colors.xml b/nym-vpn/android/app/src/main/res/values/colors.xml deleted file mode 100644 index d035176a0b..0000000000 --- a/nym-vpn/android/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF1c1b20 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/values/ic_banner_background.xml b/nym-vpn/android/app/src/main/res/values/ic_banner_background.xml deleted file mode 100644 index 5274b8a4f3..0000000000 --- a/nym-vpn/android/app/src/main/res/values/ic_banner_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #121212 - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/values/ic_launcher_background.xml b/nym-vpn/android/app/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index a3b9258141..0000000000 --- a/nym-vpn/android/app/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #1D2125 - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/values/strings.xml b/nym-vpn/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 2c1d791d4d..0000000000 --- a/nym-vpn/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,90 +0,0 @@ - - NymConnect - tunnelConfig - VPN Channel - VPN Notification Channel - Watcher Channel - Watcher Notification Channel - FOREGROUND_FILE - https://github.com/nymtech/nym - https://github.com/nymtech/nym - File is not a .conf file - Turn off tunnel before editing - No tunnels added yet! - Tunnel name already exists - https://discord.com/invite/nym - Watcher Service - Monitoring network state changes - VPN Connected - Connected to tunnel - - VPN permission is required for the app to work properly. If this permission is not launching, please disable \"Always-on VPN\" in your phone settings for the official WireGuard mobile app and try again. - Notifications permission is required for the app to work properly. - Open Settings - Add Trusted SSID - Trusted SSID - Tunnels - Select Tunnel - Enable auto tunneling - Tunnel on mobile data - \"Allow all the time\" location permission is required for retrieving Wi-Fi SSID in the background. Permission is needed for this feature. - Location permission is required for this feature to work properly. - At least one tunnel required to use this feature - "Retry" - View Privacy Policy - Okay - This feature requires background location permission to enable Wi-Fi SSID monitoring even while the application is closed. For more details, please see the Privacy Policy linked on the Support screen. - Background Location Disclosure - TODO - Enter SSID - Submit SSID - [Interface] - Add tunnel from files - File Open - Tunnel Edit - Tunnel Name - Edit - Delete - Add Tunnel - Exclude - Include - Tunnel all applications - Configuration changes saved. - Save changes - Icon - No thanks - Turn on - Map - Bad config. Please try again. - Interface - Public key - Waiting for the Barcode UI module to be downloaded. - Barcode module downloading. Try again. - Addresses - DNS servers - MTU - Peer - Allowed IPs - Endpoint - Transfer - Last handshake - Name - Restart Tunnel - VPN Connection Failed - Failed connection to - - Attempting to connect to server after 30 seconds of no response. - Attempting to reconnect to server after more than one minute of no response. - Enable Always-On VPN support - Please select a tunnel first - Unable to detect Location Services which are required for this feature. Please enable Location Services. - Check again - Detecting Location Services disabled - This feature requires precise location to access Wi-Fi SSID name. Please enable precise location here or in the app settings. - Request - Toggle VPN - No tunnels available - Search packages - Clear Icon - Search Icon - Attempting connection.. - VPN Starting - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/values/themes.xml b/nym-vpn/android/app/src/main/res/values/themes.xml deleted file mode 100644 index 9414a536e4..0000000000 --- a/nym-vpn/android/app/src/main/res/values/themes.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/xml/backup_rules.xml b/nym-vpn/android/app/src/main/res/xml/backup_rules.xml deleted file mode 100644 index fa0f996d2c..0000000000 --- a/nym-vpn/android/app/src/main/res/xml/backup_rules.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - \ No newline at end of file diff --git a/nym-vpn/android/app/src/main/res/xml/data_extraction_rules.xml b/nym-vpn/android/app/src/main/res/xml/data_extraction_rules.xml deleted file mode 100644 index 9ee9997b0b..0000000000 --- a/nym-vpn/android/app/src/main/res/xml/data_extraction_rules.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/nym-vpn/android/app/src/test/java/com/zaneschepke/wireguardautotunnel/ExampleUnitTest.kt b/nym-vpn/android/app/src/test/java/com/zaneschepke/wireguardautotunnel/ExampleUnitTest.kt deleted file mode 100644 index c3453e018c..0000000000 --- a/nym-vpn/android/app/src/test/java/com/zaneschepke/wireguardautotunnel/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package net.nymtech.nymconnect - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file diff --git a/nym-vpn/android/build.gradle.kts b/nym-vpn/android/build.gradle.kts deleted file mode 100644 index 1a6937f39a..0000000000 --- a/nym-vpn/android/build.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - val objectBoxVersion by extra("3.5.1") - val hiltVersion by extra("2.47") - val accompanistVersion by extra("0.31.2-alpha") - - dependencies { - classpath("io.objectbox:objectbox-gradle-plugin:$objectBoxVersion") - classpath("com.google.gms:google-services:4.3.15") - } -} - -plugins { - id("com.android.application") version "8.2.0-beta02" apply false - id("org.jetbrains.kotlin.android") version "1.8.22" apply false - id("com.google.dagger.hilt.android") version "2.44" apply false - kotlin("plugin.serialization") version "1.8.22" apply false -} diff --git a/nym-vpn/android/gradle.properties b/nym-vpn/android/gradle.properties deleted file mode 100644 index 1023be831f..0000000000 --- a/nym-vpn/android/gradle.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Kotlin code style for this project: "official" or "obsolete": -kotlin.code.style=official -# Enables namespacing of each library's R class so that its R class includes only the -# resources declared in the library itself and none from the library's dependencies, -# thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true -#enable buildconfig values -android.defaults.buildfeatures.buildconfig=true \ No newline at end of file diff --git a/nym-vpn/android/gradle/wrapper/gradle-wrapper.jar b/nym-vpn/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c023..0000000000 Binary files a/nym-vpn/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/nym-vpn/android/gradle/wrapper/gradle-wrapper.properties b/nym-vpn/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 96f2e7a959..0000000000 --- a/nym-vpn/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Mon Apr 24 22:46:45 EDT 2023 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/nym-vpn/android/gradlew b/nym-vpn/android/gradlew deleted file mode 100755 index 4f906e0c81..0000000000 --- a/nym-vpn/android/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/nym-vpn/android/gradlew.bat b/nym-vpn/android/gradlew.bat deleted file mode 100644 index 107acd32c4..0000000000 --- a/nym-vpn/android/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/nym-vpn/android/settings.gradle.kts b/nym-vpn/android/settings.gradle.kts deleted file mode 100644 index aaebe93cd6..0000000000 --- a/nym-vpn/android/settings.gradle.kts +++ /dev/null @@ -1,18 +0,0 @@ -pluginManagement { - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} -dependencyResolutionManagement { - repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) - repositories { - google() - mavenCentral() - } -} - -rootProject.name = "NymConnect" -include(":app") - \ No newline at end of file diff --git a/nym-vpn/ios/.gitkeep b/nym-vpn/ios/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/nym-vpn/linux/.gitkeep b/nym-vpn/linux/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/nym-vpn/macos/.gitkeep b/nym-vpn/macos/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/nym-vpn/ui/.eslintignore b/nym-vpn/ui/.eslintignore deleted file mode 100644 index a2a9c20b8d..0000000000 --- a/nym-vpn/ui/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -*.config.js -*.config.ts diff --git a/nym-vpn/ui/.eslintrc.cjs b/nym-vpn/ui/.eslintrc.cjs deleted file mode 100644 index ff65dd7c03..0000000000 --- a/nym-vpn/ui/.eslintrc.cjs +++ /dev/null @@ -1,50 +0,0 @@ -module.exports = { - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react/recommended', - 'plugin:react/jsx-runtime', - 'plugin:jsx-a11y/recommended', - 'plugin:react-hooks/recommended', - 'plugin:import/typescript', - 'prettier', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - project: './tsconfig.json', - }, - plugins: ['@typescript-eslint', 'import'], - root: true, - settings: { - react: { - version: 'detect', - }, - // https://github.com/import-js/eslint-import-resolver-typescript#configuration - 'import/parsers': { - '@typescript-eslint/parser': ['.ts', '.tsx'], - }, - 'import/resolver': { - typescript: { - alwaysTryTypes: true, // always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` - project: 'tsconfig.json', - }, - }, - }, - rules: { - 'sort-imports': [ - 'error', - { - ignoreDeclarationSort: true, - allowSeparatedGroups: true, - }, - ], - 'import/first': 'error', - 'import/order': [ - 'error', - { - groups: ['builtin', 'external', 'parent', 'sibling', 'index'], - }, - ], - 'import/extensions': ['error', 'never', { json: 'always', svg: 'always' }], - }, -}; diff --git a/nym-vpn/ui/.gitignore b/nym-vpn/ui/.gitignore deleted file mode 100644 index a547bf36d8..0000000000 --- a/nym-vpn/ui/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/nym-vpn/ui/.prettierignore b/nym-vpn/ui/.prettierignore deleted file mode 100644 index 8cb9ac2499..0000000000 --- a/nym-vpn/ui/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -src-tauri/target -src-tauri/src diff --git a/nym-vpn/ui/.vscode/extensions.json b/nym-vpn/ui/.vscode/extensions.json deleted file mode 100644 index 24d7cc6de8..0000000000 --- a/nym-vpn/ui/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] -} diff --git a/nym-vpn/ui/README.md b/nym-vpn/ui/README.md deleted file mode 100644 index 8e685878d0..0000000000 --- a/nym-vpn/ui/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# NymVPN UI app for desktop clients - -This is the application UI layer for the next NymVPN clients. - -## Install - -#### Prerequisites - -- Rust -- Nodejs, latest LTS version recommended -- yarn 1.x - -Some system libraries are required depending on the host platform. -Follow the instructions for your specific OS [here](https://tauri.app/v1/guides/getting-started/prerequisites) - -To install: - -``` -yarn -``` - -## Required config - -First you can provide a network configuration using en env file, -pick the relevant one [here](https://github.com/nymtech/nym/tree/develop/envs). -The mainnet config will be used by default if not provided. - -Then create the main app config file `config.toml` under `nym-vpn` -directory, full path is platform specific: - -- Linux: Resolves to `$XDG_CONFIG_HOME` or `$HOME/.config` -- macOS: Resolves to `$HOME/Library/Application Support` -- Windows: Resolves to `{FOLDERID_RoamingAppData}` - -For example on Linux the path would be `~/.config/nym-vpn/config.toml` - -```toml -# example config on Linux - -# path to the env config file if you provide one -env_config_file = "/home//.config/nym-vpn/qa.env" -``` - -## Dev - -``` -yarn dev:app -``` - -or - -``` -cd src-tauri -cargo tauri dev -``` - -**NOTE** Starting a VPN connection requires root privileges as it will set up a link interface. -If you want to connect during development, you need to run the app as root, -likely using `sudo` (or equivalent) - -```shell -sudo -E RUST_LOG=debug cargo tauri dev -``` - -#### Logging - -Rust logging (standard output) is controlled by the `RUST_LOG` -env variable - -Example: - -``` -cd src-tauri -RUST_LOG=trace cargo tauri dev -``` - -## Dev in the browser - -For convenience and better development experience, we can run the -app directly in the browser - -``` -yarn dev:browser -``` - -Then press `o` to open the app in the browser. - -#### Tauri commands mock - -Browser mode requires all tauri [commands](https://tauri.app/v1/guides/features/command) (IPC calls) to be mocked. -When creating new tauri command, be sure to add the corresponding -mock definition into `nym-vpn/ui/src/dev/tauri-cmd-mocks/` and -update `nym-vpn/ui/src/dev/setup.ts` accordingly. - -## Type bindings - -[ts-rs](https://github.com/Aleph-Alpha/ts-rs) can be used to generate -TS type definitions from Rust types - -To generate bindings, first -[annotate](https://github.com/Aleph-Alpha/ts-rs/blob/main/example/src/lib.rs) -Rust types, then run - -``` -cd src-tauri -cargo test -``` - -Generated TS types will be located in `src-tauri/bindings/` - -## Build - -``` -yarn build:app -``` diff --git a/nym-vpn/ui/index.html b/nym-vpn/ui/index.html deleted file mode 100644 index d79f04f6fc..0000000000 --- a/nym-vpn/ui/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - NymVPN - - - -
- - - diff --git a/nym-vpn/ui/package.json b/nym-vpn/ui/package.json deleted file mode 100644 index ecfd29f4b2..0000000000 --- a/nym-vpn/ui/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "nym-vpn-ui", - "private": true, - "version": "0.0.1", - "type": "module", - "scripts": { - "dev": "vite", - "dev:app": "tauri dev", - "dev:browser": "vite --mode dev-browser", - "build": "tsc && vite build", - "build:app": "yarn tauri build", - "preview": "vite preview", - "lint": "eslint --ext .ts,.tsx src/", - "lint:fix": "eslint --ext .js,.ts --fix src/", - "fmt": "prettier --write --ignore-unknown \"**/*\"", - "fmt:check": "prettier --check --ignore-unknown \"**/*\"", - "typecheck": "tsc --noEmit", - "tauri": "tauri" - }, - "dependencies": { - "@headlessui/react": "^1.7.17", - "@headlessui/tailwindcss": "^0.2.0", - "@mui/base": "^5.0.0-beta.24", - "@tauri-apps/api": "^1.5.0", - "clsx": "^2.0.0", - "dayjs": "^1.11.10", - "i18next": "^23.7.6", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-i18next": "^14.0.0", - "react-router-dom": "^6.18.0" - }, - "devDependencies": { - "@tauri-apps/cli": "^1.5.0", - "@types/react": "^18.2.37", - "@types/react-dom": "^18.2.15", - "@types/react-router-dom": "^5.3.3", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "@vitejs/plugin-react-swc": "^3.3.2", - "autoprefixer": "^10.4.16", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", - "postcss": "^8.4.31", - "postcss-import": "^16.0.0", - "prettier": "^3.0.3", - "tailwindcss": "^3.3.3", - "typescript": "^5.0.2", - "vite": "^5.0.5" - } -} diff --git a/nym-vpn/ui/postcss.config.js b/nym-vpn/ui/postcss.config.js deleted file mode 100644 index feab3515aa..0000000000 --- a/nym-vpn/ui/postcss.config.js +++ /dev/null @@ -1,8 +0,0 @@ -export default { - plugins: { - 'postcss-import': {}, - 'tailwindcss/nesting': {}, - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/nym-vpn/ui/prettier.config.js b/nym-vpn/ui/prettier.config.js deleted file mode 100644 index 44bcd83526..0000000000 --- a/nym-vpn/ui/prettier.config.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @type {import("prettier").Config} */ - -const config = { - tabWidth: 2, - semi: true, - singleQuote: true, -}; - -export default config; diff --git a/nym-vpn/ui/public/flags/ac.svg b/nym-vpn/ui/public/flags/ac.svg deleted file mode 100644 index 5d5914549a..0000000000 --- a/nym-vpn/ui/public/flags/ac.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ad.svg b/nym-vpn/ui/public/flags/ad.svg deleted file mode 100644 index 8e9d368f82..0000000000 --- a/nym-vpn/ui/public/flags/ad.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ae.svg b/nym-vpn/ui/public/flags/ae.svg deleted file mode 100644 index 779b9f50b5..0000000000 --- a/nym-vpn/ui/public/flags/ae.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/af.svg b/nym-vpn/ui/public/flags/af.svg deleted file mode 100644 index eb83faf831..0000000000 --- a/nym-vpn/ui/public/flags/af.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ag.svg b/nym-vpn/ui/public/flags/ag.svg deleted file mode 100644 index 8ab60fe831..0000000000 --- a/nym-vpn/ui/public/flags/ag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ai.svg b/nym-vpn/ui/public/flags/ai.svg deleted file mode 100644 index 5530eb65c3..0000000000 --- a/nym-vpn/ui/public/flags/ai.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/al.svg b/nym-vpn/ui/public/flags/al.svg deleted file mode 100644 index 5bdcf48ba7..0000000000 --- a/nym-vpn/ui/public/flags/al.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/am.svg b/nym-vpn/ui/public/flags/am.svg deleted file mode 100644 index 537a16f355..0000000000 --- a/nym-vpn/ui/public/flags/am.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/an.svg b/nym-vpn/ui/public/flags/an.svg deleted file mode 100644 index cad94ecca1..0000000000 --- a/nym-vpn/ui/public/flags/an.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ao.svg b/nym-vpn/ui/public/flags/ao.svg deleted file mode 100644 index c21abd44d8..0000000000 --- a/nym-vpn/ui/public/flags/ao.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/aq.svg b/nym-vpn/ui/public/flags/aq.svg deleted file mode 100644 index e09d43f202..0000000000 --- a/nym-vpn/ui/public/flags/aq.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ar.svg b/nym-vpn/ui/public/flags/ar.svg deleted file mode 100644 index ce7316579e..0000000000 --- a/nym-vpn/ui/public/flags/ar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/as.svg b/nym-vpn/ui/public/flags/as.svg deleted file mode 100644 index 0c58705301..0000000000 --- a/nym-vpn/ui/public/flags/as.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/at.svg b/nym-vpn/ui/public/flags/at.svg deleted file mode 100644 index 73a87c8870..0000000000 --- a/nym-vpn/ui/public/flags/at.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/au.svg b/nym-vpn/ui/public/flags/au.svg deleted file mode 100644 index bccaab301b..0000000000 --- a/nym-vpn/ui/public/flags/au.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/aw.svg b/nym-vpn/ui/public/flags/aw.svg deleted file mode 100644 index 872f466b6c..0000000000 --- a/nym-vpn/ui/public/flags/aw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ax.svg b/nym-vpn/ui/public/flags/ax.svg deleted file mode 100644 index f30a7ec4fc..0000000000 --- a/nym-vpn/ui/public/flags/ax.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/az.svg b/nym-vpn/ui/public/flags/az.svg deleted file mode 100644 index 7308f67bc2..0000000000 --- a/nym-vpn/ui/public/flags/az.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ba.svg b/nym-vpn/ui/public/flags/ba.svg deleted file mode 100644 index 62babc7a98..0000000000 --- a/nym-vpn/ui/public/flags/ba.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bb.svg b/nym-vpn/ui/public/flags/bb.svg deleted file mode 100644 index d31472b93f..0000000000 --- a/nym-vpn/ui/public/flags/bb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bd.svg b/nym-vpn/ui/public/flags/bd.svg deleted file mode 100644 index e2a36bbe39..0000000000 --- a/nym-vpn/ui/public/flags/bd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/be.svg b/nym-vpn/ui/public/flags/be.svg deleted file mode 100644 index 3825681949..0000000000 --- a/nym-vpn/ui/public/flags/be.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bf.svg b/nym-vpn/ui/public/flags/bf.svg deleted file mode 100644 index 641867b59e..0000000000 --- a/nym-vpn/ui/public/flags/bf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bg.svg b/nym-vpn/ui/public/flags/bg.svg deleted file mode 100644 index 43c143c007..0000000000 --- a/nym-vpn/ui/public/flags/bg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bh.svg b/nym-vpn/ui/public/flags/bh.svg deleted file mode 100644 index aa05f5e96e..0000000000 --- a/nym-vpn/ui/public/flags/bh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bi.svg b/nym-vpn/ui/public/flags/bi.svg deleted file mode 100644 index 0abd98bd78..0000000000 --- a/nym-vpn/ui/public/flags/bi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bj.svg b/nym-vpn/ui/public/flags/bj.svg deleted file mode 100644 index 7a18b52d2b..0000000000 --- a/nym-vpn/ui/public/flags/bj.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bl.svg b/nym-vpn/ui/public/flags/bl.svg deleted file mode 100644 index e03311749e..0000000000 --- a/nym-vpn/ui/public/flags/bl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bm.svg b/nym-vpn/ui/public/flags/bm.svg deleted file mode 100644 index d726a1fa02..0000000000 --- a/nym-vpn/ui/public/flags/bm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bn.svg b/nym-vpn/ui/public/flags/bn.svg deleted file mode 100644 index c52c6c1475..0000000000 --- a/nym-vpn/ui/public/flags/bn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bo.svg b/nym-vpn/ui/public/flags/bo.svg deleted file mode 100644 index 3247e6bb88..0000000000 --- a/nym-vpn/ui/public/flags/bo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bq.svg b/nym-vpn/ui/public/flags/bq.svg deleted file mode 100644 index 367ed4581a..0000000000 --- a/nym-vpn/ui/public/flags/bq.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/br.svg b/nym-vpn/ui/public/flags/br.svg deleted file mode 100644 index 44aacbd43d..0000000000 --- a/nym-vpn/ui/public/flags/br.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bs.svg b/nym-vpn/ui/public/flags/bs.svg deleted file mode 100644 index 3c3f9aa3b9..0000000000 --- a/nym-vpn/ui/public/flags/bs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bt.svg b/nym-vpn/ui/public/flags/bt.svg deleted file mode 100644 index be25d68c79..0000000000 --- a/nym-vpn/ui/public/flags/bt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bv.svg b/nym-vpn/ui/public/flags/bv.svg deleted file mode 100644 index bc702a397d..0000000000 --- a/nym-vpn/ui/public/flags/bv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bw.svg b/nym-vpn/ui/public/flags/bw.svg deleted file mode 100644 index 6b63835e34..0000000000 --- a/nym-vpn/ui/public/flags/bw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/by.svg b/nym-vpn/ui/public/flags/by.svg deleted file mode 100644 index 4d2cc0756c..0000000000 --- a/nym-vpn/ui/public/flags/by.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/bz.svg b/nym-vpn/ui/public/flags/bz.svg deleted file mode 100644 index ece2b9f446..0000000000 --- a/nym-vpn/ui/public/flags/bz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ca.svg b/nym-vpn/ui/public/flags/ca.svg deleted file mode 100644 index 3348f9eea3..0000000000 --- a/nym-vpn/ui/public/flags/ca.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cc.svg b/nym-vpn/ui/public/flags/cc.svg deleted file mode 100644 index 2a4c0979e7..0000000000 --- a/nym-vpn/ui/public/flags/cc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cd.svg b/nym-vpn/ui/public/flags/cd.svg deleted file mode 100644 index 17ef2e2750..0000000000 --- a/nym-vpn/ui/public/flags/cd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cf.svg b/nym-vpn/ui/public/flags/cf.svg deleted file mode 100644 index dd94895e0d..0000000000 --- a/nym-vpn/ui/public/flags/cf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cg.svg b/nym-vpn/ui/public/flags/cg.svg deleted file mode 100644 index 620c50ad17..0000000000 --- a/nym-vpn/ui/public/flags/cg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ch.svg b/nym-vpn/ui/public/flags/ch.svg deleted file mode 100644 index 3943b1fbb5..0000000000 --- a/nym-vpn/ui/public/flags/ch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ci.svg b/nym-vpn/ui/public/flags/ci.svg deleted file mode 100644 index 1d21f102e3..0000000000 --- a/nym-vpn/ui/public/flags/ci.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ck.svg b/nym-vpn/ui/public/flags/ck.svg deleted file mode 100644 index 5ad7aeeaf1..0000000000 --- a/nym-vpn/ui/public/flags/ck.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cl.svg b/nym-vpn/ui/public/flags/cl.svg deleted file mode 100644 index a7a4f89988..0000000000 --- a/nym-vpn/ui/public/flags/cl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cm.svg b/nym-vpn/ui/public/flags/cm.svg deleted file mode 100644 index fad286c5d4..0000000000 --- a/nym-vpn/ui/public/flags/cm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cn.svg b/nym-vpn/ui/public/flags/cn.svg deleted file mode 100644 index a61d24ca4d..0000000000 --- a/nym-vpn/ui/public/flags/cn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/co.svg b/nym-vpn/ui/public/flags/co.svg deleted file mode 100644 index ac562e38dd..0000000000 --- a/nym-vpn/ui/public/flags/co.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cp.svg b/nym-vpn/ui/public/flags/cp.svg deleted file mode 100644 index 54000084f7..0000000000 --- a/nym-vpn/ui/public/flags/cp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cq.svg b/nym-vpn/ui/public/flags/cq.svg deleted file mode 100644 index 90c23bd7c4..0000000000 --- a/nym-vpn/ui/public/flags/cq.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cr.svg b/nym-vpn/ui/public/flags/cr.svg deleted file mode 100644 index ed16d798cd..0000000000 --- a/nym-vpn/ui/public/flags/cr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cu.svg b/nym-vpn/ui/public/flags/cu.svg deleted file mode 100644 index 63758bd6ff..0000000000 --- a/nym-vpn/ui/public/flags/cu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cv.svg b/nym-vpn/ui/public/flags/cv.svg deleted file mode 100644 index a49dc54004..0000000000 --- a/nym-vpn/ui/public/flags/cv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cw.svg b/nym-vpn/ui/public/flags/cw.svg deleted file mode 100644 index 5e8772d859..0000000000 --- a/nym-vpn/ui/public/flags/cw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cx.svg b/nym-vpn/ui/public/flags/cx.svg deleted file mode 100644 index 574ac205a9..0000000000 --- a/nym-vpn/ui/public/flags/cx.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cy.svg b/nym-vpn/ui/public/flags/cy.svg deleted file mode 100644 index 126b94db22..0000000000 --- a/nym-vpn/ui/public/flags/cy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/cz.svg b/nym-vpn/ui/public/flags/cz.svg deleted file mode 100644 index 70668af648..0000000000 --- a/nym-vpn/ui/public/flags/cz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/de.svg b/nym-vpn/ui/public/flags/de.svg deleted file mode 100644 index efde34193a..0000000000 --- a/nym-vpn/ui/public/flags/de.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/dg.svg b/nym-vpn/ui/public/flags/dg.svg deleted file mode 100644 index 34dc359d28..0000000000 --- a/nym-vpn/ui/public/flags/dg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/dj.svg b/nym-vpn/ui/public/flags/dj.svg deleted file mode 100644 index ac41c5d919..0000000000 --- a/nym-vpn/ui/public/flags/dj.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/dk.svg b/nym-vpn/ui/public/flags/dk.svg deleted file mode 100644 index 9a0cb4c0f7..0000000000 --- a/nym-vpn/ui/public/flags/dk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/dm.svg b/nym-vpn/ui/public/flags/dm.svg deleted file mode 100644 index c716af8df2..0000000000 --- a/nym-vpn/ui/public/flags/dm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/do.svg b/nym-vpn/ui/public/flags/do.svg deleted file mode 100644 index 5820015077..0000000000 --- a/nym-vpn/ui/public/flags/do.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/dz.svg b/nym-vpn/ui/public/flags/dz.svg deleted file mode 100644 index b6287718c4..0000000000 --- a/nym-vpn/ui/public/flags/dz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ea.svg b/nym-vpn/ui/public/flags/ea.svg deleted file mode 100644 index 715a783f1f..0000000000 --- a/nym-vpn/ui/public/flags/ea.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ec.svg b/nym-vpn/ui/public/flags/ec.svg deleted file mode 100644 index c0a0b225bb..0000000000 --- a/nym-vpn/ui/public/flags/ec.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ee.svg b/nym-vpn/ui/public/flags/ee.svg deleted file mode 100644 index 05e9d26d5d..0000000000 --- a/nym-vpn/ui/public/flags/ee.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/eg.svg b/nym-vpn/ui/public/flags/eg.svg deleted file mode 100644 index 7c00ce5c21..0000000000 --- a/nym-vpn/ui/public/flags/eg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/eh.svg b/nym-vpn/ui/public/flags/eh.svg deleted file mode 100644 index 2bc578f594..0000000000 --- a/nym-vpn/ui/public/flags/eh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/er.svg b/nym-vpn/ui/public/flags/er.svg deleted file mode 100644 index 80fb3abf6f..0000000000 --- a/nym-vpn/ui/public/flags/er.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/es.svg b/nym-vpn/ui/public/flags/es.svg deleted file mode 100644 index 833ad88a44..0000000000 --- a/nym-vpn/ui/public/flags/es.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/et.svg b/nym-vpn/ui/public/flags/et.svg deleted file mode 100644 index a76da17a05..0000000000 --- a/nym-vpn/ui/public/flags/et.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/eu.svg b/nym-vpn/ui/public/flags/eu.svg deleted file mode 100644 index 6f584056a1..0000000000 --- a/nym-vpn/ui/public/flags/eu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/fi.svg b/nym-vpn/ui/public/flags/fi.svg deleted file mode 100644 index cac8507ca2..0000000000 --- a/nym-vpn/ui/public/flags/fi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/fj.svg b/nym-vpn/ui/public/flags/fj.svg deleted file mode 100644 index 21ba9aaafe..0000000000 --- a/nym-vpn/ui/public/flags/fj.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/fk.svg b/nym-vpn/ui/public/flags/fk.svg deleted file mode 100644 index 2ef39fa5d7..0000000000 --- a/nym-vpn/ui/public/flags/fk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/fm.svg b/nym-vpn/ui/public/flags/fm.svg deleted file mode 100644 index f0b3118002..0000000000 --- a/nym-vpn/ui/public/flags/fm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/fo.svg b/nym-vpn/ui/public/flags/fo.svg deleted file mode 100644 index 27abfe72ae..0000000000 --- a/nym-vpn/ui/public/flags/fo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/fr.svg b/nym-vpn/ui/public/flags/fr.svg deleted file mode 100644 index 0fe5619a72..0000000000 --- a/nym-vpn/ui/public/flags/fr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/fx.svg b/nym-vpn/ui/public/flags/fx.svg deleted file mode 100644 index 0fe5619a72..0000000000 --- a/nym-vpn/ui/public/flags/fx.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ga.svg b/nym-vpn/ui/public/flags/ga.svg deleted file mode 100644 index b7ca0305c1..0000000000 --- a/nym-vpn/ui/public/flags/ga.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gb.svg b/nym-vpn/ui/public/flags/gb.svg deleted file mode 100644 index 4dca1e7828..0000000000 --- a/nym-vpn/ui/public/flags/gb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gd.svg b/nym-vpn/ui/public/flags/gd.svg deleted file mode 100644 index ac39ac20bf..0000000000 --- a/nym-vpn/ui/public/flags/gd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ge.svg b/nym-vpn/ui/public/flags/ge.svg deleted file mode 100644 index 199569aae5..0000000000 --- a/nym-vpn/ui/public/flags/ge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gf.svg b/nym-vpn/ui/public/flags/gf.svg deleted file mode 100644 index 6b822a8574..0000000000 --- a/nym-vpn/ui/public/flags/gf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gg.svg b/nym-vpn/ui/public/flags/gg.svg deleted file mode 100644 index d948f912d1..0000000000 --- a/nym-vpn/ui/public/flags/gg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gh.svg b/nym-vpn/ui/public/flags/gh.svg deleted file mode 100644 index fed2c37e74..0000000000 --- a/nym-vpn/ui/public/flags/gh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gi.svg b/nym-vpn/ui/public/flags/gi.svg deleted file mode 100644 index 4327dacdcb..0000000000 --- a/nym-vpn/ui/public/flags/gi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gl.svg b/nym-vpn/ui/public/flags/gl.svg deleted file mode 100644 index cf8e3c8009..0000000000 --- a/nym-vpn/ui/public/flags/gl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gm.svg b/nym-vpn/ui/public/flags/gm.svg deleted file mode 100644 index 0ce0dc360d..0000000000 --- a/nym-vpn/ui/public/flags/gm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gn.svg b/nym-vpn/ui/public/flags/gn.svg deleted file mode 100644 index bc62f79a47..0000000000 --- a/nym-vpn/ui/public/flags/gn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gp.svg b/nym-vpn/ui/public/flags/gp.svg deleted file mode 100644 index 6ab4bd630a..0000000000 --- a/nym-vpn/ui/public/flags/gp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gq.svg b/nym-vpn/ui/public/flags/gq.svg deleted file mode 100644 index 3f2050f991..0000000000 --- a/nym-vpn/ui/public/flags/gq.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gr.svg b/nym-vpn/ui/public/flags/gr.svg deleted file mode 100644 index 5e991bc75a..0000000000 --- a/nym-vpn/ui/public/flags/gr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gs.svg b/nym-vpn/ui/public/flags/gs.svg deleted file mode 100644 index ed468e07a9..0000000000 --- a/nym-vpn/ui/public/flags/gs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gt.svg b/nym-vpn/ui/public/flags/gt.svg deleted file mode 100644 index deaefb8286..0000000000 --- a/nym-vpn/ui/public/flags/gt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gu.svg b/nym-vpn/ui/public/flags/gu.svg deleted file mode 100644 index 9cc1a885c0..0000000000 --- a/nym-vpn/ui/public/flags/gu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gw.svg b/nym-vpn/ui/public/flags/gw.svg deleted file mode 100644 index 862416e5e4..0000000000 --- a/nym-vpn/ui/public/flags/gw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/gy.svg b/nym-vpn/ui/public/flags/gy.svg deleted file mode 100644 index c43af53e58..0000000000 --- a/nym-vpn/ui/public/flags/gy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/hk.svg b/nym-vpn/ui/public/flags/hk.svg deleted file mode 100644 index 7b05101111..0000000000 --- a/nym-vpn/ui/public/flags/hk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/hm.svg b/nym-vpn/ui/public/flags/hm.svg deleted file mode 100644 index bccaab301b..0000000000 --- a/nym-vpn/ui/public/flags/hm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/hn.svg b/nym-vpn/ui/public/flags/hn.svg deleted file mode 100644 index 21f8b1a95e..0000000000 --- a/nym-vpn/ui/public/flags/hn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/hr.svg b/nym-vpn/ui/public/flags/hr.svg deleted file mode 100644 index 5ddd7188b9..0000000000 --- a/nym-vpn/ui/public/flags/hr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ht.svg b/nym-vpn/ui/public/flags/ht.svg deleted file mode 100644 index 5423c4e2a2..0000000000 --- a/nym-vpn/ui/public/flags/ht.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/hu.svg b/nym-vpn/ui/public/flags/hu.svg deleted file mode 100644 index a0a71b05ee..0000000000 --- a/nym-vpn/ui/public/flags/hu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ic.svg b/nym-vpn/ui/public/flags/ic.svg deleted file mode 100644 index a9d4433756..0000000000 --- a/nym-vpn/ui/public/flags/ic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/id.svg b/nym-vpn/ui/public/flags/id.svg deleted file mode 100644 index 5879cb4270..0000000000 --- a/nym-vpn/ui/public/flags/id.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ie.svg b/nym-vpn/ui/public/flags/ie.svg deleted file mode 100644 index a680a7f2db..0000000000 --- a/nym-vpn/ui/public/flags/ie.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/il.svg b/nym-vpn/ui/public/flags/il.svg deleted file mode 100644 index 35c11936ec..0000000000 --- a/nym-vpn/ui/public/flags/il.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/im.svg b/nym-vpn/ui/public/flags/im.svg deleted file mode 100644 index 96f8f6d35f..0000000000 --- a/nym-vpn/ui/public/flags/im.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/in.svg b/nym-vpn/ui/public/flags/in.svg deleted file mode 100644 index 2f070cbd6c..0000000000 --- a/nym-vpn/ui/public/flags/in.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/io.svg b/nym-vpn/ui/public/flags/io.svg deleted file mode 100644 index 34dc359d28..0000000000 --- a/nym-vpn/ui/public/flags/io.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/iq.svg b/nym-vpn/ui/public/flags/iq.svg deleted file mode 100644 index 376b6972a8..0000000000 --- a/nym-vpn/ui/public/flags/iq.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ir.svg b/nym-vpn/ui/public/flags/ir.svg deleted file mode 100644 index 883fe5c451..0000000000 --- a/nym-vpn/ui/public/flags/ir.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/is.svg b/nym-vpn/ui/public/flags/is.svg deleted file mode 100644 index 5a2706c0d3..0000000000 --- a/nym-vpn/ui/public/flags/is.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/it.svg b/nym-vpn/ui/public/flags/it.svg deleted file mode 100644 index 56b4fb3008..0000000000 --- a/nym-vpn/ui/public/flags/it.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/je.svg b/nym-vpn/ui/public/flags/je.svg deleted file mode 100644 index 6198cafcb9..0000000000 --- a/nym-vpn/ui/public/flags/je.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/jm.svg b/nym-vpn/ui/public/flags/jm.svg deleted file mode 100644 index 410bf0308c..0000000000 --- a/nym-vpn/ui/public/flags/jm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/jo.svg b/nym-vpn/ui/public/flags/jo.svg deleted file mode 100644 index e725de0b4b..0000000000 --- a/nym-vpn/ui/public/flags/jo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/jp.svg b/nym-vpn/ui/public/flags/jp.svg deleted file mode 100644 index 31f064f5d5..0000000000 --- a/nym-vpn/ui/public/flags/jp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ke.svg b/nym-vpn/ui/public/flags/ke.svg deleted file mode 100644 index d2e7f43757..0000000000 --- a/nym-vpn/ui/public/flags/ke.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/kg.svg b/nym-vpn/ui/public/flags/kg.svg deleted file mode 100644 index 11103bcc5d..0000000000 --- a/nym-vpn/ui/public/flags/kg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/kh.svg b/nym-vpn/ui/public/flags/kh.svg deleted file mode 100644 index 8277797c07..0000000000 --- a/nym-vpn/ui/public/flags/kh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ki.svg b/nym-vpn/ui/public/flags/ki.svg deleted file mode 100644 index 3d4d5c8397..0000000000 --- a/nym-vpn/ui/public/flags/ki.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/km.svg b/nym-vpn/ui/public/flags/km.svg deleted file mode 100644 index d97952b6c9..0000000000 --- a/nym-vpn/ui/public/flags/km.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/kn.svg b/nym-vpn/ui/public/flags/kn.svg deleted file mode 100644 index 1aa7f1520f..0000000000 --- a/nym-vpn/ui/public/flags/kn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/kp.svg b/nym-vpn/ui/public/flags/kp.svg deleted file mode 100644 index 83a1ca552f..0000000000 --- a/nym-vpn/ui/public/flags/kp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/kr.svg b/nym-vpn/ui/public/flags/kr.svg deleted file mode 100644 index 1056107339..0000000000 --- a/nym-vpn/ui/public/flags/kr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/kw.svg b/nym-vpn/ui/public/flags/kw.svg deleted file mode 100644 index 6b14a167ea..0000000000 --- a/nym-vpn/ui/public/flags/kw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ky.svg b/nym-vpn/ui/public/flags/ky.svg deleted file mode 100644 index 0042a7f79c..0000000000 --- a/nym-vpn/ui/public/flags/ky.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/kz.svg b/nym-vpn/ui/public/flags/kz.svg deleted file mode 100644 index 9fd8b6d11b..0000000000 --- a/nym-vpn/ui/public/flags/kz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/la.svg b/nym-vpn/ui/public/flags/la.svg deleted file mode 100644 index aaa0589730..0000000000 --- a/nym-vpn/ui/public/flags/la.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/lb.svg b/nym-vpn/ui/public/flags/lb.svg deleted file mode 100644 index e30e722199..0000000000 --- a/nym-vpn/ui/public/flags/lb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/lc.svg b/nym-vpn/ui/public/flags/lc.svg deleted file mode 100644 index 8a1fff1509..0000000000 --- a/nym-vpn/ui/public/flags/lc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/li.svg b/nym-vpn/ui/public/flags/li.svg deleted file mode 100644 index 495815f55c..0000000000 --- a/nym-vpn/ui/public/flags/li.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/lk.svg b/nym-vpn/ui/public/flags/lk.svg deleted file mode 100644 index 2fb7256ecf..0000000000 --- a/nym-vpn/ui/public/flags/lk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/lr.svg b/nym-vpn/ui/public/flags/lr.svg deleted file mode 100644 index 37e8e2878b..0000000000 --- a/nym-vpn/ui/public/flags/lr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ls.svg b/nym-vpn/ui/public/flags/ls.svg deleted file mode 100644 index 99024b5287..0000000000 --- a/nym-vpn/ui/public/flags/ls.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/lt.svg b/nym-vpn/ui/public/flags/lt.svg deleted file mode 100644 index 3d5ff126d4..0000000000 --- a/nym-vpn/ui/public/flags/lt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/lu.svg b/nym-vpn/ui/public/flags/lu.svg deleted file mode 100644 index 5e226fe95c..0000000000 --- a/nym-vpn/ui/public/flags/lu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/lv.svg b/nym-vpn/ui/public/flags/lv.svg deleted file mode 100644 index 9152e7a00c..0000000000 --- a/nym-vpn/ui/public/flags/lv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ly.svg b/nym-vpn/ui/public/flags/ly.svg deleted file mode 100644 index bb7e16ecd6..0000000000 --- a/nym-vpn/ui/public/flags/ly.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ma.svg b/nym-vpn/ui/public/flags/ma.svg deleted file mode 100644 index 30cd031c96..0000000000 --- a/nym-vpn/ui/public/flags/ma.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mc.svg b/nym-vpn/ui/public/flags/mc.svg deleted file mode 100644 index 2f54af2f6f..0000000000 --- a/nym-vpn/ui/public/flags/mc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/md.svg b/nym-vpn/ui/public/flags/md.svg deleted file mode 100644 index d5e76979a9..0000000000 --- a/nym-vpn/ui/public/flags/md.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/me.svg b/nym-vpn/ui/public/flags/me.svg deleted file mode 100644 index 2c03aaf3ef..0000000000 --- a/nym-vpn/ui/public/flags/me.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mf.svg b/nym-vpn/ui/public/flags/mf.svg deleted file mode 100644 index 6719335892..0000000000 --- a/nym-vpn/ui/public/flags/mf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mg.svg b/nym-vpn/ui/public/flags/mg.svg deleted file mode 100644 index a9fa058f16..0000000000 --- a/nym-vpn/ui/public/flags/mg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mh.svg b/nym-vpn/ui/public/flags/mh.svg deleted file mode 100644 index ccade87c7c..0000000000 --- a/nym-vpn/ui/public/flags/mh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mk.svg b/nym-vpn/ui/public/flags/mk.svg deleted file mode 100644 index 4a90573747..0000000000 --- a/nym-vpn/ui/public/flags/mk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ml.svg b/nym-vpn/ui/public/flags/ml.svg deleted file mode 100644 index 181215e70d..0000000000 --- a/nym-vpn/ui/public/flags/ml.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mm.svg b/nym-vpn/ui/public/flags/mm.svg deleted file mode 100644 index 115d013a2d..0000000000 --- a/nym-vpn/ui/public/flags/mm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mn.svg b/nym-vpn/ui/public/flags/mn.svg deleted file mode 100644 index 5b573ca669..0000000000 --- a/nym-vpn/ui/public/flags/mn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mo.svg b/nym-vpn/ui/public/flags/mo.svg deleted file mode 100644 index 1b49023db2..0000000000 --- a/nym-vpn/ui/public/flags/mo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mp.svg b/nym-vpn/ui/public/flags/mp.svg deleted file mode 100644 index f54f65752d..0000000000 --- a/nym-vpn/ui/public/flags/mp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mq.svg b/nym-vpn/ui/public/flags/mq.svg deleted file mode 100644 index 537736c444..0000000000 --- a/nym-vpn/ui/public/flags/mq.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mr.svg b/nym-vpn/ui/public/flags/mr.svg deleted file mode 100644 index 4833a6fd1f..0000000000 --- a/nym-vpn/ui/public/flags/mr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ms.svg b/nym-vpn/ui/public/flags/ms.svg deleted file mode 100644 index e56e9b45e0..0000000000 --- a/nym-vpn/ui/public/flags/ms.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mt.svg b/nym-vpn/ui/public/flags/mt.svg deleted file mode 100644 index 6ee551ddf9..0000000000 --- a/nym-vpn/ui/public/flags/mt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mu.svg b/nym-vpn/ui/public/flags/mu.svg deleted file mode 100644 index bc37ac4b41..0000000000 --- a/nym-vpn/ui/public/flags/mu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mv.svg b/nym-vpn/ui/public/flags/mv.svg deleted file mode 100644 index a01de4554f..0000000000 --- a/nym-vpn/ui/public/flags/mv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mw.svg b/nym-vpn/ui/public/flags/mw.svg deleted file mode 100644 index 76ed981cc0..0000000000 --- a/nym-vpn/ui/public/flags/mw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mx.svg b/nym-vpn/ui/public/flags/mx.svg deleted file mode 100644 index f7d3230f98..0000000000 --- a/nym-vpn/ui/public/flags/mx.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/my.svg b/nym-vpn/ui/public/flags/my.svg deleted file mode 100644 index 605c5ce181..0000000000 --- a/nym-vpn/ui/public/flags/my.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/mz.svg b/nym-vpn/ui/public/flags/mz.svg deleted file mode 100644 index 6d8d035c84..0000000000 --- a/nym-vpn/ui/public/flags/mz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/na.svg b/nym-vpn/ui/public/flags/na.svg deleted file mode 100644 index 0df1f168a5..0000000000 --- a/nym-vpn/ui/public/flags/na.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/nc.svg b/nym-vpn/ui/public/flags/nc.svg deleted file mode 100644 index 88488700b4..0000000000 --- a/nym-vpn/ui/public/flags/nc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ne.svg b/nym-vpn/ui/public/flags/ne.svg deleted file mode 100644 index 89e18a822e..0000000000 --- a/nym-vpn/ui/public/flags/ne.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/nf.svg b/nym-vpn/ui/public/flags/nf.svg deleted file mode 100644 index 4c9ef6221e..0000000000 --- a/nym-vpn/ui/public/flags/nf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ng.svg b/nym-vpn/ui/public/flags/ng.svg deleted file mode 100644 index ee20b59a7c..0000000000 --- a/nym-vpn/ui/public/flags/ng.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ni.svg b/nym-vpn/ui/public/flags/ni.svg deleted file mode 100644 index 89fcd2597c..0000000000 --- a/nym-vpn/ui/public/flags/ni.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/nl.svg b/nym-vpn/ui/public/flags/nl.svg deleted file mode 100644 index 25b6c9100f..0000000000 --- a/nym-vpn/ui/public/flags/nl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/no.svg b/nym-vpn/ui/public/flags/no.svg deleted file mode 100644 index bc702a397d..0000000000 --- a/nym-vpn/ui/public/flags/no.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/np.svg b/nym-vpn/ui/public/flags/np.svg deleted file mode 100644 index 50b1e3dba4..0000000000 --- a/nym-vpn/ui/public/flags/np.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/nr.svg b/nym-vpn/ui/public/flags/nr.svg deleted file mode 100644 index b3c755f4f0..0000000000 --- a/nym-vpn/ui/public/flags/nr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/nu.svg b/nym-vpn/ui/public/flags/nu.svg deleted file mode 100644 index 83d663b839..0000000000 --- a/nym-vpn/ui/public/flags/nu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/nz.svg b/nym-vpn/ui/public/flags/nz.svg deleted file mode 100644 index 688bb9d93a..0000000000 --- a/nym-vpn/ui/public/flags/nz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/om.svg b/nym-vpn/ui/public/flags/om.svg deleted file mode 100644 index 79c4bf23fd..0000000000 --- a/nym-vpn/ui/public/flags/om.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pa.svg b/nym-vpn/ui/public/flags/pa.svg deleted file mode 100644 index c29cedd1b9..0000000000 --- a/nym-vpn/ui/public/flags/pa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pe.svg b/nym-vpn/ui/public/flags/pe.svg deleted file mode 100644 index 07a7190989..0000000000 --- a/nym-vpn/ui/public/flags/pe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pf.svg b/nym-vpn/ui/public/flags/pf.svg deleted file mode 100644 index 7d08fbf2a1..0000000000 --- a/nym-vpn/ui/public/flags/pf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pg.svg b/nym-vpn/ui/public/flags/pg.svg deleted file mode 100644 index 214d94126f..0000000000 --- a/nym-vpn/ui/public/flags/pg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ph.svg b/nym-vpn/ui/public/flags/ph.svg deleted file mode 100644 index a5fc569279..0000000000 --- a/nym-vpn/ui/public/flags/ph.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pk.svg b/nym-vpn/ui/public/flags/pk.svg deleted file mode 100644 index 457a0518a6..0000000000 --- a/nym-vpn/ui/public/flags/pk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pl.svg b/nym-vpn/ui/public/flags/pl.svg deleted file mode 100644 index cf3574a189..0000000000 --- a/nym-vpn/ui/public/flags/pl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pm.svg b/nym-vpn/ui/public/flags/pm.svg deleted file mode 100644 index 5f5586fabf..0000000000 --- a/nym-vpn/ui/public/flags/pm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pn.svg b/nym-vpn/ui/public/flags/pn.svg deleted file mode 100644 index ded89b52b6..0000000000 --- a/nym-vpn/ui/public/flags/pn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pr.svg b/nym-vpn/ui/public/flags/pr.svg deleted file mode 100644 index 25403954bf..0000000000 --- a/nym-vpn/ui/public/flags/pr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ps.svg b/nym-vpn/ui/public/flags/ps.svg deleted file mode 100644 index 0b3657b075..0000000000 --- a/nym-vpn/ui/public/flags/ps.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pt.svg b/nym-vpn/ui/public/flags/pt.svg deleted file mode 100644 index 32ce13f2ff..0000000000 --- a/nym-vpn/ui/public/flags/pt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/pw.svg b/nym-vpn/ui/public/flags/pw.svg deleted file mode 100644 index 67be6e211e..0000000000 --- a/nym-vpn/ui/public/flags/pw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/py.svg b/nym-vpn/ui/public/flags/py.svg deleted file mode 100644 index 537af58cac..0000000000 --- a/nym-vpn/ui/public/flags/py.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/qa.svg b/nym-vpn/ui/public/flags/qa.svg deleted file mode 100644 index 7ccf5bd280..0000000000 --- a/nym-vpn/ui/public/flags/qa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/re.svg b/nym-vpn/ui/public/flags/re.svg deleted file mode 100644 index 22fcc98f77..0000000000 --- a/nym-vpn/ui/public/flags/re.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ro.svg b/nym-vpn/ui/public/flags/ro.svg deleted file mode 100644 index 2d3bfd9c5d..0000000000 --- a/nym-vpn/ui/public/flags/ro.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/rs.svg b/nym-vpn/ui/public/flags/rs.svg deleted file mode 100644 index 96a0717c56..0000000000 --- a/nym-vpn/ui/public/flags/rs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ru.svg b/nym-vpn/ui/public/flags/ru.svg deleted file mode 100644 index b49e8cc7ed..0000000000 --- a/nym-vpn/ui/public/flags/ru.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/rw.svg b/nym-vpn/ui/public/flags/rw.svg deleted file mode 100644 index ae6fc4769d..0000000000 --- a/nym-vpn/ui/public/flags/rw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sa.svg b/nym-vpn/ui/public/flags/sa.svg deleted file mode 100644 index ef73f0eb54..0000000000 --- a/nym-vpn/ui/public/flags/sa.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sb.svg b/nym-vpn/ui/public/flags/sb.svg deleted file mode 100644 index 3db190a4d5..0000000000 --- a/nym-vpn/ui/public/flags/sb.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sc.svg b/nym-vpn/ui/public/flags/sc.svg deleted file mode 100644 index f2eb4437e6..0000000000 --- a/nym-vpn/ui/public/flags/sc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sd.svg b/nym-vpn/ui/public/flags/sd.svg deleted file mode 100644 index a2605fba78..0000000000 --- a/nym-vpn/ui/public/flags/sd.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/se.svg b/nym-vpn/ui/public/flags/se.svg deleted file mode 100644 index c8520bcd22..0000000000 --- a/nym-vpn/ui/public/flags/se.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sg.svg b/nym-vpn/ui/public/flags/sg.svg deleted file mode 100644 index 901ba886ac..0000000000 --- a/nym-vpn/ui/public/flags/sg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sh.svg b/nym-vpn/ui/public/flags/sh.svg deleted file mode 100644 index 7234ea657c..0000000000 --- a/nym-vpn/ui/public/flags/sh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/si.svg b/nym-vpn/ui/public/flags/si.svg deleted file mode 100644 index 520693c549..0000000000 --- a/nym-vpn/ui/public/flags/si.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sj.svg b/nym-vpn/ui/public/flags/sj.svg deleted file mode 100644 index bc702a397d..0000000000 --- a/nym-vpn/ui/public/flags/sj.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sk.svg b/nym-vpn/ui/public/flags/sk.svg deleted file mode 100644 index ee0e1292b9..0000000000 --- a/nym-vpn/ui/public/flags/sk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sl.svg b/nym-vpn/ui/public/flags/sl.svg deleted file mode 100644 index 58dc96b925..0000000000 --- a/nym-vpn/ui/public/flags/sl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sm.svg b/nym-vpn/ui/public/flags/sm.svg deleted file mode 100644 index 69f842700e..0000000000 --- a/nym-vpn/ui/public/flags/sm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sn.svg b/nym-vpn/ui/public/flags/sn.svg deleted file mode 100644 index f634dca72b..0000000000 --- a/nym-vpn/ui/public/flags/sn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/so.svg b/nym-vpn/ui/public/flags/so.svg deleted file mode 100644 index 76a599c534..0000000000 --- a/nym-vpn/ui/public/flags/so.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sr.svg b/nym-vpn/ui/public/flags/sr.svg deleted file mode 100644 index 2cce22acf6..0000000000 --- a/nym-vpn/ui/public/flags/sr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ss.svg b/nym-vpn/ui/public/flags/ss.svg deleted file mode 100644 index d8cc2db9fc..0000000000 --- a/nym-vpn/ui/public/flags/ss.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/st.svg b/nym-vpn/ui/public/flags/st.svg deleted file mode 100644 index 798731ba2f..0000000000 --- a/nym-vpn/ui/public/flags/st.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/su.svg b/nym-vpn/ui/public/flags/su.svg deleted file mode 100644 index d3be990a6a..0000000000 --- a/nym-vpn/ui/public/flags/su.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sv.svg b/nym-vpn/ui/public/flags/sv.svg deleted file mode 100644 index c3b8db7b61..0000000000 --- a/nym-vpn/ui/public/flags/sv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sx.svg b/nym-vpn/ui/public/flags/sx.svg deleted file mode 100644 index 9bb89b74cc..0000000000 --- a/nym-vpn/ui/public/flags/sx.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sy.svg b/nym-vpn/ui/public/flags/sy.svg deleted file mode 100644 index ab7adedd7f..0000000000 --- a/nym-vpn/ui/public/flags/sy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/sz.svg b/nym-vpn/ui/public/flags/sz.svg deleted file mode 100644 index b3fcc158e8..0000000000 --- a/nym-vpn/ui/public/flags/sz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ta.svg b/nym-vpn/ui/public/flags/ta.svg deleted file mode 100644 index dd1d031c16..0000000000 --- a/nym-vpn/ui/public/flags/ta.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tc.svg b/nym-vpn/ui/public/flags/tc.svg deleted file mode 100644 index 764155ef6f..0000000000 --- a/nym-vpn/ui/public/flags/tc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/td.svg b/nym-vpn/ui/public/flags/td.svg deleted file mode 100644 index bb49f985c7..0000000000 --- a/nym-vpn/ui/public/flags/td.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tf.svg b/nym-vpn/ui/public/flags/tf.svg deleted file mode 100644 index d2c44abef8..0000000000 --- a/nym-vpn/ui/public/flags/tf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tg.svg b/nym-vpn/ui/public/flags/tg.svg deleted file mode 100644 index f5b7c8775c..0000000000 --- a/nym-vpn/ui/public/flags/tg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/th.svg b/nym-vpn/ui/public/flags/th.svg deleted file mode 100644 index 680994bcf1..0000000000 --- a/nym-vpn/ui/public/flags/th.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tj.svg b/nym-vpn/ui/public/flags/tj.svg deleted file mode 100644 index 509da9ff8d..0000000000 --- a/nym-vpn/ui/public/flags/tj.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tk.svg b/nym-vpn/ui/public/flags/tk.svg deleted file mode 100644 index 60ab627b77..0000000000 --- a/nym-vpn/ui/public/flags/tk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tl.svg b/nym-vpn/ui/public/flags/tl.svg deleted file mode 100644 index d5ba3dc873..0000000000 --- a/nym-vpn/ui/public/flags/tl.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tm.svg b/nym-vpn/ui/public/flags/tm.svg deleted file mode 100644 index bc5311dfa6..0000000000 --- a/nym-vpn/ui/public/flags/tm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tn.svg b/nym-vpn/ui/public/flags/tn.svg deleted file mode 100644 index e43c73eff9..0000000000 --- a/nym-vpn/ui/public/flags/tn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/to.svg b/nym-vpn/ui/public/flags/to.svg deleted file mode 100644 index 9a72ea06db..0000000000 --- a/nym-vpn/ui/public/flags/to.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tr.svg b/nym-vpn/ui/public/flags/tr.svg deleted file mode 100644 index f4c325d2b3..0000000000 --- a/nym-vpn/ui/public/flags/tr.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tt.svg b/nym-vpn/ui/public/flags/tt.svg deleted file mode 100644 index 5de43d9292..0000000000 --- a/nym-vpn/ui/public/flags/tt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tv.svg b/nym-vpn/ui/public/flags/tv.svg deleted file mode 100644 index 184185788c..0000000000 --- a/nym-vpn/ui/public/flags/tv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tw.svg b/nym-vpn/ui/public/flags/tw.svg deleted file mode 100644 index a0a5387288..0000000000 --- a/nym-vpn/ui/public/flags/tw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/tz.svg b/nym-vpn/ui/public/flags/tz.svg deleted file mode 100644 index cb00ae73b2..0000000000 --- a/nym-vpn/ui/public/flags/tz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ua.svg b/nym-vpn/ui/public/flags/ua.svg deleted file mode 100644 index ccd0a810d0..0000000000 --- a/nym-vpn/ui/public/flags/ua.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/ug.svg b/nym-vpn/ui/public/flags/ug.svg deleted file mode 100644 index 2394c76c8e..0000000000 --- a/nym-vpn/ui/public/flags/ug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/uk.svg b/nym-vpn/ui/public/flags/uk.svg deleted file mode 100644 index 4dca1e7828..0000000000 --- a/nym-vpn/ui/public/flags/uk.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/um.svg b/nym-vpn/ui/public/flags/um.svg deleted file mode 100644 index e3560c6a51..0000000000 --- a/nym-vpn/ui/public/flags/um.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/flags/us.svg b/nym-vpn/ui/public/flags/us.svg deleted file mode 100644 index e3560c6a51..0000000000 --- a/nym-vpn/ui/public/flags/us.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/nym-vpn/ui/public/nym.svg b/nym-vpn/ui/public/nym.svg deleted file mode 100644 index 1050c4d0ae..0000000000 --- a/nym-vpn/ui/public/nym.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/nym-vpn/ui/src-tauri/.gitignore b/nym-vpn/ui/src-tauri/.gitignore deleted file mode 100644 index a324855cc5..0000000000 --- a/nym-vpn/ui/src-tauri/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/target/ -/bindings/ - diff --git a/nym-vpn/ui/src-tauri/Cargo.lock b/nym-vpn/ui/src-tauri/Cargo.lock deleted file mode 100644 index 2ead3c3f86..0000000000 --- a/nym-vpn/ui/src-tauri/Cargo.lock +++ /dev/null @@ -1,9861 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aead" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "aead" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common", - "generic-array 0.14.7", -] - -[[package]] -name = "aes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "ctr 0.8.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "aes" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" -dependencies = [ - "cfg-if", - "cipher 0.4.4", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" -dependencies = [ - "aead 0.4.3", - "aes 0.7.5", - "cipher 0.3.0", - "ctr 0.8.0", - "ghash", - "subtle 2.4.1", -] - -[[package]] -name = "ahash" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" -dependencies = [ - "getrandom 0.2.12", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "allocator-api2" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" - -[[package]] -name = "anstyle-parse" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - -[[package]] -name = "anyhow" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" - -[[package]] -name = "arc-swap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" - -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "async-trait" -version = "0.1.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "atk" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" -dependencies = [ - "atk-sys", - "bitflags 1.3.2", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.2.0", -] - -[[package]] -name = "atoi" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" -dependencies = [ - "num-traits", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axum" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" -dependencies = [ - "async-trait", - "axum-core", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa 1.0.10", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c79fed4cdb43e993fcdadc7e58a09fd0e3e649c4436fa11da71c9f1f3ee7feb9" - -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bip32" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e141fb0f8be1c7b45887af94c88b182472b57c96b56773250ae00cd6a14a164" -dependencies = [ - "bs58 0.5.0", - "hmac 0.12.1", - "k256", - "once_cell", - "pbkdf2", - "rand_core 0.6.4", - "ripemd", - "sha2 0.10.8", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "bip39" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" -dependencies = [ - "bitcoin_hashes", - "rand 0.8.5", - "rand_core 0.6.4", - "serde", - "unicode-normalization", - "zeroize", -] - -[[package]] -name = "bitcoin_hashes" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac 0.7.0", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - -[[package]] -name = "blake3" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "digest 0.10.7", -] - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "bls12_381" -version = "0.8.0" -source = "git+https://github.com/jstuczyn/bls12_381?branch=feature/gt-serialization-0.8.0#c4543fde7d02efea6ecfcf22e14476ddb516b483" -dependencies = [ - "digest 0.9.0", - "ff", - "group", - "pairing", - "rand_core 0.6.4", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "bnum" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "845141a4fade3f790628b7daaaa298a25b204fb28907eb54febe5142db6ce653" - -[[package]] -name = "brotli" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - -[[package]] -name = "bs58" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" -dependencies = [ - "sha2 0.10.8", -] - -[[package]] -name = "bstr" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "byte_string" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11aade7a05aa8c3a351cedc44c3fc45806430543382fcc4743a9b757a2a0b4ed" - -[[package]] -name = "bytecodec" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf4c9d0bbf32eea58d7c0f812058138ee8edaf0f2802b6d03561b504729a325" -dependencies = [ - "byteorder", - "trackable 0.2.24", -] - -[[package]] -name = "bytemuck" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.15.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" -dependencies = [ - "bitflags 1.3.2", - "cairo-sys-rs", - "glib", - "libc", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" -dependencies = [ - "glib-sys", - "libc", - "system-deps 6.2.0", -] - -[[package]] -name = "cargo_toml" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" -dependencies = [ - "serde", - "toml 0.7.8", -] - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "jobserver", - "libc", -] - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid 1.6.1", -] - -[[package]] -name = "cfg-expr" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-expr" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a" -dependencies = [ - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - -[[package]] -name = "chacha20" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" -dependencies = [ - "cfg-if", - "cipher 0.3.0", - "cpufeatures", - "zeroize", -] - -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher 0.4.4", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" -dependencies = [ - "aead 0.4.3", - "chacha20 0.8.2", - "cipher 0.3.0", - "poly1305 0.7.2", - "zeroize", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead 0.5.2", - "chacha20 0.9.1", - "cipher 0.4.4", - "poly1305 0.8.0", - "zeroize", -] - -[[package]] -name = "chrono" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-targets 0.48.5", -] - -[[package]] -name = "cipher" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "clap" -version = "4.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e92c5c1a78c62968ec57dbc2440366a2d6e5a23faf829970ff1585dc6b18e2" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4323769dc8a61e2c39ad7dc26f6f2800524691a44d74fe3d1071a5c24db6370" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim 0.10.0", -] - -[[package]] -name = "clap_complete" -version = "4.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97aeaa95557bd02f23fbb662f981670c3d20c5a26e69f7354b28f57092437fcd" -dependencies = [ - "clap", -] - -[[package]] -name = "clap_complete_fig" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e571d70e22ec91d34e1c5317c8308035a2280d925167646bf094fc5de1737c" -dependencies = [ - "clap", - "clap_complete", -] - -[[package]] -name = "clap_derive" -version = "4.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "clap_lex" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" - -[[package]] -name = "classic-mceliece-rust" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ce62f72a15a9071f83c5084bdf0af4e8cbf31431e79eb4a5509a2f7fe7fe5d" -dependencies = [ - "rand 0.8.5", - "sha3", - "zeroize", -] - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" -dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation", - "core-graphics-types", - "libc", - "objc", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "colored" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" -dependencies = [ - "lazy_static", - "windows-sys 0.48.0", -] - -[[package]] -name = "combine" -version = "4.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "const-oid" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "constant_time_eq" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "cosmos-sdk-proto" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32560304ab4c365791fd307282f76637213d8083c1a98490c35159cd67852237" -dependencies = [ - "prost 0.12.3", - "prost-types 0.12.3", - "tendermint-proto", -] - -[[package]] -name = "cosmrs" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47126f5364df9387b9d8559dcef62e99010e1d4098f39eb3f7ee4b5c254e40ea" -dependencies = [ - "bip32", - "cosmos-sdk-proto", - "ecdsa 0.16.9", - "eyre", - "k256", - "rand_core 0.6.4", - "serde", - "serde_json", - "signature 2.2.0", - "subtle-encoding", - "tendermint", - "tendermint-rpc", - "thiserror", -] - -[[package]] -name = "cosmwasm-crypto" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad24bc9dae9aac5dc124b4560e3f7678729d701f1bf3cb11140703d91f247d31" -dependencies = [ - "digest 0.10.7", - "ecdsa 0.16.9", - "ed25519-zebra", - "k256", - "rand_core 0.6.4", - "thiserror", -] - -[[package]] -name = "cosmwasm-derive" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca65635b768406eabdd28ba015cc3f2f863ca5a2677a7dc4c237b8ee1298efb3" -dependencies = [ - "syn 1.0.109", -] - -[[package]] -name = "cosmwasm-schema" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6b2fb76758ef59cddc77f2e2ae91c22f77da49037e9f182e9c2833f0e959b1" -dependencies = [ - "cosmwasm-schema-derive", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cosmwasm-schema-derive" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfa39422f0d9f1c9a6fd3711573258495314dfa3aae738ea825ecd9964bc659" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cosmwasm-std" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6dc2ee23313add5ecacc3ccac217b9967ad9d2d11bd56e5da6aa65a9da6138" -dependencies = [ - "base64 0.13.1", - "bnum", - "cosmwasm-crypto", - "cosmwasm-derive", - "derivative", - "forward_ref", - "hex", - "schemars", - "serde", - "serde-json-wasm", - "sha2 0.10.8", - "thiserror", -] - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crypto-bigint" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array 0.14.7", - "rand_core 0.6.4", - "typenum", -] - -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array 0.14.7", - "subtle 2.4.1", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.48", -] - -[[package]] -name = "ctor" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" -dependencies = [ - "quote", - "syn 2.0.48", -] - -[[package]] -name = "ctr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" -dependencies = [ - "cipher 0.3.0", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher 0.4.4", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "serde", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "fiat-crypto", - "platforms", - "rustc_version", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "curve25519-dalek-ng" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", - "subtle-ng", - "zeroize", -] - -[[package]] -name = "cw-controllers" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d8edce4b78785f36413f67387e4be7d0cb7d032b5d4164bcc024f9c3f3f2ea" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "cw-storage-plus" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f0e92a069d62067f3472c62e30adedb4cab1754725c0f2a682b3128d2bf3c79" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", -] - -[[package]] -name = "cw-utils" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c80e93d1deccb8588db03945016a292c3c631e6325d349ebb35d2db6f4f946f7" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2", - "schemars", - "semver 1.0.21", - "serde", - "thiserror", -] - -[[package]] -name = "cw2" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ac2dc7a55ad64173ca1e0a46697c31b7a5c51342f55a1e84a724da4eb99908" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "cw20" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011c45920f8200bd5d32d4fe52502506f64f2f75651ab408054d4cfc75ca3a9b" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "schemars", - "serde", -] - -[[package]] -name = "cw3" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171af3d9127de6805a7dd819fb070c7d2f6c3ea85f4193f42cef259f0a7f33d5" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "cw20", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "cw4" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a398696307efadaaa2d0850076f865fa706c959d493cb4203314f72be6b77a64" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "schemars", - "serde", -] - -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core 0.10.2", - "darling_macro 0.10.2", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core 0.20.3", - "darling_macro 0.20.3", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.9.3", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 2.0.48", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core 0.10.2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" -dependencies = [ - "darling_core 0.20.3", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.3", - "lock_api", - "once_cell", - "parking_lot_core 0.9.9", -] - -[[package]] -name = "data-encoding" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" - -[[package]] -name = "dbus" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" -dependencies = [ - "libc", - "libdbus-sys", - "winapi", -] - -[[package]] -name = "default-net" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85dc7576d8346d3c86ad64dc64d26d0f6c970ba4795b850f15ee94467d8e53eb" -dependencies = [ - "dlopen2", - "libc", - "memalloc", - "netlink-packet-core 0.7.0", - "netlink-packet-route 0.17.1", - "netlink-sys", - "once_cell", - "system-configuration", - "windows 0.48.0", -] - -[[package]] -name = "der" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" -dependencies = [ - "const-oid 0.7.1", -] - -[[package]] -name = "der" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" -dependencies = [ - "const-oid 0.9.6", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", - "serde", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" -dependencies = [ - "darling 0.10.2", - "derive_builder_core", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder_core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" -dependencies = [ - "darling 0.10.2", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "const-oid 0.9.6", - "crypto-common", - "subtle 2.4.1", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys 0.3.7", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys 0.4.1", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dlopen2" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" -dependencies = [ - "libc", - "once_cell", - "winapi", -] - -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - -[[package]] -name = "dtoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" - -[[package]] -name = "dtoa-short" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" -dependencies = [ - "dtoa", -] - -[[package]] -name = "duct" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" -dependencies = [ - "libc", - "once_cell", - "os_pipe 1.1.5", - "shared_child", -] - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[package]] -name = "dyn-clone" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" - -[[package]] -name = "ecdsa" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9" -dependencies = [ - "der 0.5.1", - "elliptic-curve 0.11.12", - "signature 1.4.0", -] - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der 0.7.8", - "digest 0.10.7", - "elliptic-curve 0.13.7", - "rfc6979", - "signature 2.2.0", - "spki", -] - -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "serde", - "signature 1.4.0", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "signature 2.2.0", -] - -[[package]] -name = "ed25519-consensus" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" -dependencies = [ - "curve25519-dalek-ng", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek 3.2.0", - "ed25519 1.5.3", - "rand 0.7.3", - "serde", - "serde_bytes", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "serde", - "sha2 0.9.9", - "zeroize", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "elliptic-curve" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b477563c2bfed38a3b7a60964c49e058b2510ad3f12ba3483fd8f62c2306d6" -dependencies = [ - "base16ct 0.1.1", - "crypto-bigint 0.3.2", - "der 0.5.1", - "generic-array 0.14.7", - "rand_core 0.6.4", - "sec1 0.2.1", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "elliptic-curve" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9775b22bc152ad86a0cf23f0f348b884b26add12bf741e7ffc4d4ab2ab4d205" -dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.5", - "digest 0.10.7", - "ff", - "generic-array 0.14.7", - "group", - "pkcs8", - "rand_core 0.6.4", - "sec1 0.7.3", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "embed-resource" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bde55e389bea6a966bd467ad1ad7da0ae14546a5bc794d16d1e55e7fca44881" -dependencies = [ - "cc", - "memchr", - "rustc_version", - "toml 0.8.8", - "vswhom", - "winreg 0.51.0", -] - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "endian-type" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" - -[[package]] -name = "enum-as-inner" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "enum-iterator" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a0ac4aeb3a18f92eaf09c6bb9b3ac30ff61ca95514fc58cbead1c9a6bf5401" -dependencies = [ - "enum-iterator-derive", -] - -[[package]] -name = "enum-iterator-derive" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "env_logger" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" -dependencies = [ - "atty", - "humantime 1.3.0", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "env_logger" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" -dependencies = [ - "atty", - "humantime 2.1.0", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "err-context" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449aad22b1364e927ff3bf50f55404efd705c40065fb47f73f28704de707c89e" - -[[package]] -name = "err-derive" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34a887c8df3ed90498c1c437ce21f211c8e27672921a8ffa293cb8d6d4caa9e" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", - "synstructure", -] - -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] - -[[package]] -name = "errno" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "backtrace", - "version_check", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "eyre" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" - -[[package]] -name = "fdeflate" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209098dd6dfc4445aa6111f0e98653ac323eaa4dfd212c9ca3931bf9955c31bd" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "bitvec", - "rand_core 0.6.4", - "subtle 2.4.1", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" - -[[package]] -name = "field-offset" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" -dependencies = [ - "memoffset 0.9.0", - "rustc_version", -] - -[[package]] -name = "filetime" -version = "0.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", -] - -[[package]] -name = "finl_unicode" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "flex-error" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" -dependencies = [ - "eyre", - "paste", -] - -[[package]] -name = "flume" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "futures-core", - "futures-sink", - "pin-project", - "spin 0.9.8", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "forward_ref" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-intrusive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot 0.11.2", -] - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" -dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" -dependencies = [ - "bitflags 1.3.2", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.2.0", -] - -[[package]] -name = "gdk-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps 6.2.0", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps 6.2.0", -] - -[[package]] -name = "gdkx11-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps 6.2.0", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows 0.48.0", -] - -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "serde", - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getset" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ghash" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" -dependencies = [ - "opaque-debug 0.3.0", - "polyval", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "gio" -version = "0.15.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" -dependencies = [ - "bitflags 1.3.2", - "futures-channel", - "futures-core", - "futures-io", - "gio-sys", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.2.0", - "winapi", -] - -[[package]] -name = "git2" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c" -dependencies = [ - "bitflags 1.3.2", - "libc", - "libgit2-sys", - "log", - "url", -] - -[[package]] -name = "glib" -version = "0.15.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" -dependencies = [ - "bitflags 1.3.2", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.15.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" -dependencies = [ - "anyhow", - "heck 0.4.1", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "glib-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" -dependencies = [ - "libc", - "system-deps 6.2.0", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" -dependencies = [ - "aho-corasick", - "bstr", - "log", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", -] - -[[package]] -name = "gloo-net" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils", - "http", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "gloo-utils" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" -dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gobject-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" -dependencies = [ - "glib-sys", - "libc", - "system-deps 6.2.0", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle 2.4.1", -] - -[[package]] -name = "gtk" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" -dependencies = [ - "atk", - "bitflags 1.3.2", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps 6.2.0", -] - -[[package]] -name = "gtk3-macros" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b553656127a00601c8ae5590fcfdc118e4083a7924b6cf4ffc1ea4b99dc429d7" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 2.1.0", - "slab", - "tokio", - "tokio-util 0.7.10", - "tracing", -] - -[[package]] -name = "handlebars" -version = "3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" -dependencies = [ - "log", - "pest", - "pest_derive", - "quick-error 2.0.1", - "serde", - "serde_json", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.7", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -dependencies = [ - "ahash 0.8.7", - "allocator-api2", -] - -[[package]] -name = "hashlink" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" -dependencies = [ - "hashbrown 0.14.3", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-literal" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - -[[package]] -name = "hkdf" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b" -dependencies = [ - "digest 0.9.0", - "hmac 0.11.0", -] - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac 0.12.1", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - -[[package]] -name = "html5ever" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.10", -] - -[[package]] -name = "http-api-client" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "async-trait", - "reqwest", - "serde", - "serde_json", - "thiserror", - "tracing", - "url", - "wasmtimer", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpcodec" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f49d64351430cabd543943b79d48aaf0bc95a41d9ccf5b8774c2cfd23422775" -dependencies = [ - "bytecodec", - "trackable 0.2.24", -] - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "humantime" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error 1.2.3", -] - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "humantime-serde" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" -dependencies = [ - "humantime 2.1.0", - "serde", -] - -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.10", - "pin-project-lite", - "socket2 0.5.5", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http", - "hyper", - "rustls 0.21.10", - "tokio", - "tokio-rustls 0.24.1", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "ico" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" -dependencies = [ - "crossbeam-deque", - "globset", - "log", - "memchr", - "regex-automata 0.4.3", - "same-file", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", - "serde", -] - -[[package]] -name = "infer" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" -dependencies = [ - "cfb", -] - -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" -dependencies = [ - "bitflags 1.3.2", - "futures-core", - "inotify-sys", - "libc", - "tokio", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array 0.14.7", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "internet-checksum" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6d6206008e25125b1f97fbe5d309eb7b85141cf9199d52dbd3729a1584dd16" - -[[package]] -name = "ioctl-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c429fffa658f288669529fc26565f728489a2e39bc7b24a428aaaf51355182e" - -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2 0.5.5", - "widestring", - "windows-sys 0.48.0", - "winreg 0.50.0", -] - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[package]] -name = "ipnetwork" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8eca9f51da27bc908ef3dd85c21e1bbba794edaf94d7841e37356275b82d31e" -dependencies = [ - "serde", -] - -[[package]] -name = "iprange" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37209be0ad225457e63814401415e748e2453a5297f9b637338f5fb8afa4ec00" -dependencies = [ - "ipnet", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "javascriptcore-rs" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" -dependencies = [ - "bitflags 1.3.2", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 5.0.0", -] - -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jnix" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd797d41e48568eb956ded20d7e5e3f2df1c02980d9e5b9aab9b47bd3a9f599" -dependencies = [ - "jni 0.19.0", - "jnix-macros", - "once_cell", - "parking_lot 0.12.1", -] - -[[package]] -name = "jnix-macros" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "002f4dfe6d97ae88c33f3489c0d31ffc6f81d9a492de98ff113b127d73bafff8" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "jobserver" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" -dependencies = [ - "serde", - "serde_json", - "thiserror", - "treediff", -] - -[[package]] -name = "json5" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" -dependencies = [ - "pest", - "pest_derive", - "serde", -] - -[[package]] -name = "k256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" -dependencies = [ - "cfg-if", - "ecdsa 0.16.9", - "elliptic-curve 0.13.7", - "once_cell", - "sha2 0.10.8", - "signature 2.2.0", -] - -[[package]] -name = "keccak" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - -[[package]] -name = "kqueue" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - -[[package]] -name = "kuchikiki" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" -dependencies = [ - "cssparser", - "html5ever", - "indexmap 1.9.3", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "libdbus-sys" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" -dependencies = [ - "pkg-config", -] - -[[package]] -name = "libgit2-sys" -version = "0.13.5+1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e5ea06c26926f1002dd553fded6cfcdc9784c1f60feeb58368b4d9b07b6dba" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" -dependencies = [ - "bitflags 2.4.1", - "libc", - "redox_syscall 0.4.1", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "295c17e837573c8c821dbaeb3cceb3d745ad082f7572191409e69cbc1b3fd050" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-raw-sys" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" - -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2", - "chacha", - "keystream", -] - -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "lru_time_cache" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9106e1d747ffd48e6be5bb2d97fa706ed25b144fbee4d5c02eae110cd8d6badd" - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" -dependencies = [ - "log", - "phf 0.10.1", - "phf_codegen 0.10.0", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest 0.10.7", - "md5-asm", -] - -[[package]] -name = "md5-asm" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61d33bc4cdfe5c60340e282bbbee0a6e2bc57f0b9279bb3489c5004d12492e5c" -dependencies = [ - "cc", -] - -[[package]] -name = "memalloc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1" - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "minisign-verify" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - -[[package]] -name = "mnl" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1a5469630da93e1813bb257964c0ccee3b26b6879dd858039ddec35cc8681ed" -dependencies = [ - "libc", - "log", - "mnl-sys", -] - -[[package]] -name = "mnl-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9750685b201e1ecfaaf7aa5d0387829170fa565989cc481b49080aa155f70457" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags 1.3.2", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "netlink-packet-core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" -dependencies = [ - "anyhow", - "byteorder", - "libc", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5dee5ed749373c298237fe694eb0a51887f4cc1a27370c8464bac4382348f1a" -dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", - "libc", - "netlink-packet-core 0.4.2", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" -dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", - "libc", - "netlink-packet-core 0.7.0", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror", -] - -[[package]] -name = "netlink-proto" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core 0.4.2", - "netlink-sys", - "thiserror", - "tokio", -] - -[[package]] -name = "netlink-sys" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" -dependencies = [ - "bytes", - "futures", - "libc", - "log", - "tokio", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nftnl" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9201688bd0bc571dfa4c21ce0a525480c8b782776cf88e12571fa89108dd920" -dependencies = [ - "bitflags 1.3.2", - "err-derive", - "log", - "nftnl-sys", -] - -[[package]] -name = "nftnl-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b5c587b6a5e76a3a5d51e0a757ae66dbff38c277563485807ae979ce361b56" -dependencies = [ - "cfg-if", - "libc", - "pkg-config", -] - -[[package]] -name = "nibble_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" -dependencies = [ - "smallvec", -] - -[[package]] -name = "nix" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" -dependencies = [ - "bitflags 1.3.2", - "cc", - "cfg-if", - "libc", - "memoffset 0.6.5", -] - -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", -] - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "notify" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" -dependencies = [ - "bitflags 1.3.2", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify 0.9.6", - "kqueue", - "libc", - "mio", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.3", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "nym-api-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bs58 0.4.0", - "cosmrs", - "cosmwasm-std", - "getset", - "nym-coconut-interface", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-node-requests", - "schemars", - "serde", - "tendermint", -] - -[[package]] -name = "nym-bandwidth-controller" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bip39", - "nym-coconut-interface", - "nym-credential-storage", - "nym-credentials", - "nym-crypto", - "nym-network-defaults", - "nym-validator-client", - "rand 0.7.3", - "thiserror", - "url", - "zeroize", -] - -[[package]] -name = "nym-bin-common" -version = "0.6.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "atty", - "clap", - "clap_complete", - "clap_complete_fig", - "log", - "pretty_env_logger", - "schemars", - "semver 0.11.0", - "serde", - "vergen", -] - -[[package]] -name = "nym-client-core" -version = "1.1.15" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "async-trait", - "base64 0.21.6", - "cfg-if", - "dashmap", - "dirs 4.0.0", - "futures", - "gloo-timers", - "humantime-serde", - "log", - "nym-bandwidth-controller", - "nym-config", - "nym-credential-storage", - "nym-crypto", - "nym-explorer-client", - "nym-gateway-client", - "nym-gateway-requests", - "nym-network-defaults", - "nym-nonexhaustive-delayqueue", - "nym-pemstore", - "nym-sphinx", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.7.3", - "reqwest", - "serde", - "serde_json", - "sha2 0.10.8", - "sqlx", - "tap", - "thiserror", - "time", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tungstenite", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-coconut" -version = "0.5.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bls12_381", - "bs58 0.4.0", - "digest 0.9.0", - "ff", - "getrandom 0.2.12", - "group", - "itertools 0.10.5", - "nym-dkg", - "nym-pemstore", - "rand 0.8.5", - "serde", - "serde_derive", - "sha2 0.9.9", - "thiserror", -] - -[[package]] -name = "nym-coconut-bandwidth-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "nym-multisig-contract-common", -] - -[[package]] -name = "nym-coconut-dkg-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "nym-contracts-common", - "nym-multisig-contract-common", -] - -[[package]] -name = "nym-coconut-interface" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bs58 0.4.0", - "getset", - "nym-coconut", - "serde", - "thiserror", -] - -[[package]] -name = "nym-config" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "dirs 5.0.1", - "handlebars", - "log", - "nym-network-defaults", - "serde", - "toml 0.7.8", - "url", -] - -[[package]] -name = "nym-contracts-common" -version = "0.5.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bs58 0.4.0", - "cosmwasm-schema", - "cosmwasm-std", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "nym-credential-storage" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "async-trait", - "log", - "sqlx", - "thiserror", - "tokio", -] - -[[package]] -name = "nym-credential-utils" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-credential-storage", - "nym-credentials", - "nym-validator-client", - "thiserror", - "tokio", -] - -[[package]] -name = "nym-credentials" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bls12_381", - "cosmrs", - "log", - "nym-api-requests", - "nym-coconut-interface", - "nym-crypto", - "nym-validator-client", - "thiserror", - "zeroize", -] - -[[package]] -name = "nym-crypto" -version = "0.4.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "aes 0.8.3", - "blake3", - "bs58 0.4.0", - "cipher 0.4.4", - "ctr 0.9.2", - "digest 0.10.7", - "ed25519-dalek", - "generic-array 0.14.7", - "hkdf 0.12.4", - "hmac 0.12.1", - "nym-pemstore", - "nym-sphinx-types", - "rand 0.7.3", - "serde", - "serde_bytes", - "subtle-encoding", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", -] - -[[package]] -name = "nym-dkg" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bitvec", - "bls12_381", - "bs58 0.4.0", - "ff", - "group", - "lazy_static", - "nym-pemstore", - "rand 0.8.5", - "rand_chacha 0.3.1", - "rand_core 0.6.4", - "serde", - "serde_derive", - "sha2 0.9.9", - "thiserror", - "zeroize", -] - -[[package]] -name = "nym-ephemera-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils", - "nym-contracts-common", -] - -[[package]] -name = "nym-exit-policy" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "serde", - "thiserror", - "tracing", -] - -[[package]] -name = "nym-explorer-api-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "nym-api-requests", - "nym-contracts-common", - "nym-mixnet-contract-common", - "schemars", - "serde", -] - -[[package]] -name = "nym-explorer-client" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "log", - "nym-explorer-api-requests", - "reqwest", - "serde", - "thiserror", - "url", -] - -[[package]] -name = "nym-gateway-client" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "futures", - "getrandom 0.2.12", - "gloo-utils", - "log", - "nym-bandwidth-controller", - "nym-coconut-interface", - "nym-credential-storage", - "nym-crypto", - "nym-gateway-requests", - "nym-network-defaults", - "nym-pemstore", - "nym-sphinx", - "nym-task", - "nym-validator-client", - "rand 0.7.3", - "serde", - "thiserror", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tungstenite", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-utils", - "wasmtimer", -] - -[[package]] -name = "nym-gateway-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bs58 0.4.0", - "futures", - "generic-array 0.14.7", - "log", - "nym-coconut-interface", - "nym-credentials", - "nym-crypto", - "nym-pemstore", - "nym-sphinx", - "rand 0.7.3", - "serde", - "serde_json", - "thiserror", - "tungstenite", - "zeroize", -] - -[[package]] -name = "nym-group-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cosmwasm-schema", - "cw-controllers", - "cw4", - "schemars", - "serde", -] - -[[package]] -name = "nym-ip-packet-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bincode", - "bytes", - "nym-sphinx", - "rand 0.8.5", - "serde", - "thiserror", -] - -[[package]] -name = "nym-mixnet-contract-common" -version = "0.6.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bs58 0.4.0", - "cosmwasm-schema", - "cosmwasm-std", - "humantime-serde", - "log", - "nym-contracts-common", - "schemars", - "serde", - "serde-json-wasm", - "serde_repr", - "thiserror", - "time", -] - -[[package]] -name = "nym-multisig-contract-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus", - "cw-utils", - "cw3", - "cw4", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "nym-name-service-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "nym-contracts-common", - "serde", - "thiserror", -] - -[[package]] -name = "nym-network-defaults" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cfg-if", - "dotenvy", - "hex-literal", - "once_cell", - "schemars", - "serde", - "thiserror", - "url", -] - -[[package]] -name = "nym-node-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "async-trait", - "base64 0.21.6", - "http-api-client", - "nym-bin-common", - "nym-crypto", - "nym-exit-policy", - "nym-wireguard-types", - "schemars", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "nym-nonexhaustive-delayqueue" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "tokio", - "tokio-stream", - "tokio-util 0.7.10", - "wasmtimer", -] - -[[package]] -name = "nym-ordered-buffer" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "log", - "thiserror", -] - -[[package]] -name = "nym-outfox" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "blake3", - "chacha20 0.9.1", - "chacha20poly1305 0.10.1", - "curve25519-dalek 3.2.0", - "getrandom 0.2.12", - "log", - "rand 0.7.3", - "rayon", - "sphinx-packet", - "thiserror", - "zeroize", -] - -[[package]] -name = "nym-pemstore" -version = "0.3.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "pem", -] - -[[package]] -name = "nym-sdk" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "async-trait", - "bip39", - "bytecodec", - "bytes", - "futures", - "http", - "httpcodec", - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-credential-storage", - "nym-credential-utils", - "nym-credentials", - "nym-crypto", - "nym-gateway-requests", - "nym-network-defaults", - "nym-ordered-buffer", - "nym-service-providers-common", - "nym-socks5-client-core", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-topology", - "nym-validator-client", - "rand 0.7.3", - "tap", - "thiserror", - "toml 0.5.11", - "url", -] - -[[package]] -name = "nym-service-provider-directory-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "nym-contracts-common", - "thiserror", -] - -[[package]] -name = "nym-service-providers-common" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "async-trait", - "log", - "nym-bin-common", - "nym-sphinx-anonymous-replies", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "nym-socks5-client-core" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "anyhow", - "dirs 4.0.0", - "futures", - "log", - "nym-bandwidth-controller", - "nym-client-core", - "nym-config", - "nym-contracts-common", - "nym-credential-storage", - "nym-mixnet-contract-common", - "nym-network-defaults", - "nym-service-providers-common", - "nym-socks5-proxy-helpers", - "nym-socks5-requests", - "nym-sphinx", - "nym-task", - "nym-validator-client", - "pin-project", - "rand 0.7.3", - "reqwest", - "schemars", - "serde", - "tap", - "thiserror", - "tokio", - "url", -] - -[[package]] -name = "nym-socks5-proxy-helpers" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bytes", - "futures", - "log", - "nym-ordered-buffer", - "nym-socks5-requests", - "nym-task", - "tokio", - "tokio-util 0.7.10", -] - -[[package]] -name = "nym-socks5-requests" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bincode", - "log", - "nym-exit-policy", - "nym-service-providers-common", - "nym-sphinx-addressing", - "serde", - "serde_json", - "tap", - "thiserror", -] - -[[package]] -name = "nym-sphinx" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "log", - "nym-crypto", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-anonymous-replies", - "nym-sphinx-chunking", - "nym-sphinx-cover", - "nym-sphinx-forwarding", - "nym-sphinx-framing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.7.3", - "rand_distr", - "thiserror", - "tokio", -] - -[[package]] -name = "nym-sphinx-acknowledgements" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "nym-crypto", - "nym-pemstore", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.7.3", - "thiserror", - "zeroize", -] - -[[package]] -name = "nym-sphinx-addressing" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "nym-crypto", - "nym-sphinx-types", - "serde", - "thiserror", -] - -[[package]] -name = "nym-sphinx-anonymous-replies" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bs58 0.4.0", - "nym-crypto", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.7.3", - "serde", - "thiserror", - "wasm-bindgen", -] - -[[package]] -name = "nym-sphinx-chunking" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "log", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-types", - "rand 0.7.3", - "thiserror", -] - -[[package]] -name = "nym-sphinx-cover" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "nym-crypto", - "nym-sphinx-acknowledgements", - "nym-sphinx-addressing", - "nym-sphinx-chunking", - "nym-sphinx-forwarding", - "nym-sphinx-params", - "nym-sphinx-routing", - "nym-sphinx-types", - "nym-topology", - "rand 0.7.3", - "thiserror", -] - -[[package]] -name = "nym-sphinx-forwarding" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "nym-outfox", - "nym-sphinx-addressing", - "nym-sphinx-params", - "nym-sphinx-types", - "thiserror", -] - -[[package]] -name = "nym-sphinx-framing" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "bytes", - "nym-sphinx-params", - "nym-sphinx-types", - "thiserror", - "tokio-util 0.7.10", -] - -[[package]] -name = "nym-sphinx-params" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "nym-crypto", - "nym-sphinx-types", - "serde", - "thiserror", -] - -[[package]] -name = "nym-sphinx-routing" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "nym-sphinx-addressing", - "nym-sphinx-types", - "thiserror", -] - -[[package]] -name = "nym-sphinx-types" -version = "0.2.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "nym-outfox", - "sphinx-packet", - "thiserror", -] - -[[package]] -name = "nym-task" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "futures", - "log", - "thiserror", - "tokio", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasmtimer", -] - -[[package]] -name = "nym-topology" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "async-trait", - "bs58 0.4.0", - "log", - "nym-api-requests", - "nym-bin-common", - "nym-config", - "nym-crypto", - "nym-mixnet-contract-common", - "nym-sphinx-addressing", - "nym-sphinx-routing", - "nym-sphinx-types", - "rand 0.7.3", - "semver 0.11.0", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "nym-validator-client" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "async-trait", - "base64 0.13.1", - "bip32", - "bip39", - "colored", - "cosmrs", - "cosmwasm-std", - "cw-controllers", - "cw-utils", - "cw2", - "cw3", - "cw4", - "eyre", - "flate2", - "futures", - "http-api-client", - "itertools 0.10.5", - "log", - "nym-api-requests", - "nym-coconut-bandwidth-contract-common", - "nym-coconut-dkg-common", - "nym-coconut-interface", - "nym-config", - "nym-contracts-common", - "nym-ephemera-common", - "nym-group-contract-common", - "nym-mixnet-contract-common", - "nym-multisig-contract-common", - "nym-name-service-common", - "nym-network-defaults", - "nym-service-provider-directory-common", - "nym-vesting-contract-common", - "openssl", - "prost 0.12.3", - "reqwest", - "serde", - "serde_json", - "sha2 0.9.9", - "tendermint-rpc", - "thiserror", - "tokio", - "url", - "wasmtimer", - "zeroize", -] - -[[package]] -name = "nym-vesting-contract-common" -version = "0.7.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "nym-contracts-common", - "nym-mixnet-contract-common", - "serde", - "thiserror", -] - -[[package]] -name = "nym-vpn-lib" -version = "0.1.0" -dependencies = [ - "bincode", - "bytes", - "default-net", - "futures", - "ipnetwork", - "log", - "nym-bin-common", - "nym-client-core", - "nym-config", - "nym-crypto", - "nym-ip-packet-requests", - "nym-node-requests", - "nym-sdk", - "nym-task", - "nym-validator-client", - "nym-wireguard-types", - "rand 0.7.3", - "serde", - "serde_json", - "signature 1.4.0", - "talpid-core", - "talpid-routing", - "talpid-tunnel", - "talpid-types", - "talpid-wireguard", - "tap", - "thiserror", - "tokio", - "tracing", - "tracing-subscriber", - "tun", - "url", -] - -[[package]] -name = "nym-vpn-ui" -version = "0.0.2" -dependencies = [ - "anyhow", - "dotenvy", - "futures", - "nym-vpn-lib", - "once_cell", - "serde", - "serde_json", - "shadowsocks", - "shadowsocks-service", - "tauri", - "tauri-build", - "thiserror", - "time", - "tokio", - "toml 0.8.8", - "tracing", - "tracing-subscriber", - "ts-rs", -] - -[[package]] -name = "nym-wireguard-types" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "base64 0.21.6", - "dashmap", - "hmac 0.12.1", - "log", - "nym-crypto", - "serde", - "sha2 0.10.8", - "thiserror", - "x25519-dalek 2.0.0", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "open" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" -dependencies = [ - "pathdiff", - "windows-sys 0.42.0", -] - -[[package]] -name = "openssl" -version = "0.10.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" -dependencies = [ - "bitflags 2.4.1", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-src" -version = "300.2.1+3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fe476c29791a5ca0d1273c697e96085bbabbbea2ef7afd5617e78a4b40332d3" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" -dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "os_pipe" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb233f06c2307e1f5ce2ecad9f8121cffbbee2c95428f44ea85222e460d0d213" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "os_pipe" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "p256" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19736d80675fbe9fe33426268150b951a3fb8f5cfca2a23a17c85ef3adb24e3b" -dependencies = [ - "ecdsa 0.13.4", - "elliptic-curve 0.11.12", - "sec1 0.2.1", -] - -[[package]] -name = "p384" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755d8266e41f57bd8562ed9b6e93cdcf73ead050e1e8c3a27ea3871b6643a20c" -dependencies = [ - "ecdsa 0.13.4", - "elliptic-curve 0.11.12", - "sec1 0.2.1", -] - -[[package]] -name = "pairing" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" -dependencies = [ - "group", -] - -[[package]] -name = "pango" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" -dependencies = [ - "bitflags 1.3.2", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.2.0", -] - -[[package]] -name = "parity-tokio-ipc" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9981e32fb75e004cc148f5fb70342f393830e0a4aa62e3cc93b50976218d42b6" -dependencies = [ - "futures", - "libc", - "log", - "rand 0.7.3", - "tokio", - "winapi", -] - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core 0.9.9", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.4.1", - "smallvec", - "windows-targets 0.48.5", -] - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", -] - -[[package]] -name = "peg" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c0b841ea54f523f7aa556956fbd293bcbe06f2e67d2eb732b7278aaf1d166a" -dependencies = [ - "peg-macros", - "peg-runtime", -] - -[[package]] -name = "peg-macros" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aa52829b8decbef693af90202711348ab001456803ba2a98eb4ec8fb70844c" -dependencies = [ - "peg-runtime", - "proc-macro2", - "quote", -] - -[[package]] -name = "peg-runtime" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c719dcf55f09a3a7e764c6649ab594c18a177e3599c467983cdf644bfc0a4088" - -[[package]] -name = "pem" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" -dependencies = [ - "base64 0.13.1", - "once_cell", - "regex", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pest" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd6ab1236bbdb3a49027e920e693192ebfe8913f6d60e294de57463a493cfde" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a31940305ffc96863a735bef7c7994a00b325a7138fdbc5bda0f1a0476d3275" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "pest_meta" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ff62f5259e53b78d1af898941cdcdccfae7385cf7d793a6e55de5d05bb4b7d" -dependencies = [ - "once_cell", - "pest", - "sha2 0.10.8", -] - -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap 2.1.0", -] - -[[package]] -name = "pfctl" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e0c1e1bc65fb241166b7ec8278d89cc2432d41adcbe57ffe1095c81e1d7b44" -dependencies = [ - "derive_builder", - "errno 0.2.8", - "error-chain", - "ioctl-sys", - "ipnetwork", - "libc", -] - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_shared 0.10.0", -] - -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_macros 0.11.2", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_codegen" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared 0.11.2", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" -dependencies = [ - "phf_generator 0.11.2", - "phf_shared 0.11.2", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der 0.7.8", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" - -[[package]] -name = "platforms" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" - -[[package]] -name = "plist" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" -dependencies = [ - "base64 0.21.6", - "indexmap 2.1.0", - "line-wrap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "poly1305" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" -dependencies = [ - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash 0.4.1", -] - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash 0.5.1", -] - -[[package]] -name = "polyval" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug 0.3.0", - "universal-hash 0.4.1", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "pretty_env_logger" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" -dependencies = [ - "env_logger 0.7.1", - "log", -] - -[[package]] -name = "prettyplease" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" -dependencies = [ - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" -dependencies = [ - "bytes", - "prost-derive 0.11.9", -] - -[[package]] -name = "prost" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" -dependencies = [ - "bytes", - "prost-derive 0.12.3", -] - -[[package]] -name = "prost-build" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" -dependencies = [ - "bytes", - "heck 0.4.1", - "itertools 0.10.5", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost 0.11.9", - "prost-types 0.11.9", - "regex", - "syn 1.0.109", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" -dependencies = [ - "anyhow", - "itertools 0.10.5", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "prost-derive" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" -dependencies = [ - "anyhow", - "itertools 0.11.0", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "prost-types" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" -dependencies = [ - "prost 0.11.9", -] - -[[package]] -name = "prost-types" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" -dependencies = [ - "prost 0.12.3", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - -[[package]] -name = "quick-xml" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "radix_trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" -dependencies = [ - "endian-type", - "nibble_vec", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.12", -] - -[[package]] -name = "rand_distr" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9532ada3929fb8b2e9dbe28d1e06c9b2cc65813f074fcb6bd5fbefeff9d56" -dependencies = [ - "num-traits", - "rand 0.7.3", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "rayon" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_users" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" -dependencies = [ - "getrandom 0.2.12", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.2", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "reqwest" -version = "0.11.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" -dependencies = [ - "base64 0.21.6", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.10", - "rustls-native-certs", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tokio-native-tls", - "tokio-rustls 0.24.1", - "tokio-util 0.7.10", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "winreg 0.50.0", -] - -[[package]] -name = "resolv-conf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error 1.2.3", -] - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac 0.12.1", - "subtle 2.4.1", -] - -[[package]] -name = "rfd" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" -dependencies = [ - "block", - "dispatch", - "glib-sys", - "gobject-sys", - "gtk-sys", - "js-sys", - "lazy_static", - "log", - "objc", - "objc-foundation", - "objc_id", - "raw-window-handle", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows 0.37.0", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - -[[package]] -name = "ring" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" -dependencies = [ - "cc", - "getrandom 0.2.12", - "libc", - "spin 0.9.8", - "untrusted 0.9.0", - "windows-sys 0.48.0", -] - -[[package]] -name = "ring-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6242f589b69a0555addb0bb759f81e5cba40485d38b36f780ab3a588b2bdf064" -dependencies = [ - "aead 0.4.3", - "digest 0.9.0", - "ecdsa 0.13.4", - "ed25519 1.5.3", - "generic-array 0.14.7", - "opaque-debug 0.3.0", - "p256", - "p384", - "ring 0.16.20", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "rtnetlink" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f1cfa18f8cebe685373a2697915d7e0db3b4554918bba118385e0f71f258a7" -dependencies = [ - "futures", - "log", - "netlink-packet-route 0.13.0", - "netlink-proto", - "nix 0.24.3", - "thiserror", - "tokio", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.21", -] - -[[package]] -name = "rustix" -version = "0.38.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" -dependencies = [ - "bitflags 2.4.1", - "errno 0.3.8", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustls" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" -dependencies = [ - "log", - "ring 0.16.20", - "sct", - "webpki", -] - -[[package]] -name = "rustls" -version = "0.21.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" -dependencies = [ - "log", - "ring 0.17.7", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.6", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring 0.17.7", - "untrusted 0.9.0", -] - -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "schemars" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", -] - -[[package]] -name = "schemars_derive" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn 1.0.109", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring 0.17.7", - "untrusted 0.9.0", -] - -[[package]] -name = "sec1" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" -dependencies = [ - "der 0.5.1", - "generic-array 0.14.7", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct 0.2.0", - "der 0.7.8", - "generic-array 0.14.7", - "pkcs8", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "security-framework" -version = "2.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags 1.3.2", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen 0.8.0", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - -[[package]] -name = "sendfd" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604b71b8fc267e13bb3023a2c901126c8f349393666a6d98ac1ae5729b701798" -dependencies = [ - "libc", - "tokio", -] - -[[package]] -name = "serde" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde-json-wasm" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15bee9b04dd165c3f4e142628982ddde884c2022a89e8ddf99c4829bf2c3a58" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_bytes" -version = "0.11.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_derive_internals" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "serde_json" -version = "1.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" -dependencies = [ - "itoa 1.0.10", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_spanned" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.10", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" -dependencies = [ - "base64 0.21.6", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.1.0", - "serde", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" -dependencies = [ - "darling 0.20.3", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", - "sha1-asm", -] - -[[package]] -name = "sha1-asm" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ba6947745e7f86be3b8af00b7355857085dbdf8901393c89514510eb61f4e21" -dependencies = [ - "cc", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest 0.10.7", - "keccak", -] - -[[package]] -name = "shadowsocks" -version = "1.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16fc99441d1a1b91b5f7b5093773d631ad506761a973e0a632f1836d1b05939" -dependencies = [ - "arc-swap", - "async-trait", - "base64 0.13.1", - "byte_string", - "bytes", - "cfg-if", - "futures", - "libc", - "log", - "nix 0.23.2", - "notify", - "once_cell", - "pin-project", - "sendfd", - "serde", - "serde_json", - "serde_urlencoded", - "shadowsocks-crypto", - "socket2 0.4.10", - "thiserror", - "tokio", - "tokio-tfo", - "trust-dns-resolver", - "url", - "winapi", -] - -[[package]] -name = "shadowsocks-crypto" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd381517e3eb8fec5090696debfdea972d8afe6fc926c26c7bfd5fee9053efbd" -dependencies = [ - "aes 0.7.5", - "aes-gcm", - "cfg-if", - "chacha20 0.8.2", - "chacha20poly1305 0.9.1", - "hkdf 0.12.4", - "md-5", - "rand 0.8.5", - "ring-compat", - "sha1", -] - -[[package]] -name = "shadowsocks-service" -version = "1.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c3eb3ce85fb4c1f7451d2a5704503d3146ed7d626a17a63194092f07be45a4" -dependencies = [ - "arc-swap", - "async-trait", - "byte_string", - "byteorder", - "bytes", - "cfg-if", - "futures", - "idna 0.2.3", - "ipnet", - "iprange", - "json5", - "libc", - "log", - "lru_time_cache", - "nix 0.23.2", - "once_cell", - "pin-project", - "regex", - "serde", - "shadowsocks", - "socket2 0.4.10", - "spin 0.9.8", - "thiserror", - "tokio", - "winapi", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shared_child" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "shell-escape" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "signature" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" -dependencies = [ - "rand_core 0.6.4", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest 0.10.7", - "rand_core 0.6.4", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "soup2" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" -dependencies = [ - "bitflags 1.3.2", - "gio", - "glib", - "libc", - "once_cell", - "soup2-sys", -] - -[[package]] -name = "soup2-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" -dependencies = [ - "bitflags 1.3.2", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps 5.0.0", -] - -[[package]] -name = "sphinx-packet" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc43eda802856ee82a7555c7b75ceb9e07451741c7a2f5f23d036020e01189d4" -dependencies = [ - "aes 0.7.5", - "arrayref", - "blake2", - "bs58 0.4.0", - "byteorder", - "chacha", - "curve25519-dalek 3.2.0", - "digest 0.9.0", - "hkdf 0.11.0", - "hmac 0.11.0", - "lioness", - "log", - "rand 0.7.3", - "rand_distr", - "sha2 0.9.9", - "subtle 2.4.1", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der 0.7.8", -] - -[[package]] -name = "sqlformat" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" -dependencies = [ - "itertools 0.12.0", - "nom", - "unicode_categories", -] - -[[package]] -name = "sqlx" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188" -dependencies = [ - "sqlx-core", - "sqlx-macros", -] - -[[package]] -name = "sqlx-core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029" -dependencies = [ - "ahash 0.7.7", - "atoi", - "bitflags 1.3.2", - "byteorder", - "bytes", - "crc", - "crossbeam-queue", - "dotenvy", - "either", - "event-listener", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "hashlink", - "hex", - "indexmap 1.9.3", - "itoa 1.0.10", - "libc", - "libsqlite3-sys", - "log", - "memchr", - "once_cell", - "paste", - "percent-encoding", - "rustls 0.20.9", - "rustls-pemfile", - "sha2 0.10.8", - "smallvec", - "sqlformat", - "sqlx-rt", - "stringprep", - "thiserror", - "tokio-stream", - "url", - "webpki-roots", -] - -[[package]] -name = "sqlx-macros" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9" -dependencies = [ - "dotenvy", - "either", - "heck 0.4.1", - "once_cell", - "proc-macro2", - "quote", - "sha2 0.10.8", - "sqlx-core", - "sqlx-rt", - "syn 1.0.109", - "url", -] - -[[package]] -name = "sqlx-rt" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024" -dependencies = [ - "once_cell", - "tokio", - "tokio-rustls 0.23.4", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot 0.12.1", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "stringprep" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" -dependencies = [ - "finl_unicode", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "subslice" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a8e4809a3bb02de01f1f7faf1ba01a83af9e8eabcd4d31dd6e413d14d56aae" -dependencies = [ - "memchr", -] - -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "subtle-encoding" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" -dependencies = [ - "zeroize", -] - -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "unicode-xid", -] - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "system-deps" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" -dependencies = [ - "cfg-expr 0.9.1", - "heck 0.3.3", - "pkg-config", - "toml 0.5.11", - "version-compare 0.0.11", -] - -[[package]] -name = "system-deps" -version = "6.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" -dependencies = [ - "cfg-expr 0.15.6", - "heck 0.4.1", - "pkg-config", - "toml 0.8.8", - "version-compare 0.1.1", -] - -[[package]] -name = "talpid-core" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "async-trait", - "atty", - "bitflags 1.3.2", - "byteorder", - "cfg-if", - "chrono", - "duct", - "err-derive", - "futures", - "hex", - "inotify 0.10.2", - "internet-checksum", - "ipnetwork", - "jnix", - "lazy_static", - "libc", - "log", - "memoffset 0.6.5", - "mnl", - "netlink-packet-route 0.13.0", - "netlink-sys", - "nftnl", - "nix 0.23.2", - "once_cell", - "os_pipe 0.9.2", - "parity-tokio-ipc", - "parking_lot 0.11.2", - "pfctl", - "prost 0.11.9", - "rand 0.8.5", - "regex", - "resolv-conf", - "rtnetlink", - "shadowsocks-service", - "shell-escape", - "socket2 0.4.10", - "subslice", - "system-configuration", - "talpid-dbus", - "talpid-openvpn", - "talpid-routing", - "talpid-time", - "talpid-tunnel", - "talpid-tunnel-config-client", - "talpid-types", - "talpid-windows-net", - "talpid-wireguard", - "tokio", - "tonic", - "tonic-build", - "triggered", - "trust-dns-server", - "tun", - "uuid 0.8.2", - "which", - "widestring", - "windows-service", - "windows-sys 0.42.0", - "winreg 0.7.0", - "zeroize", -] - -[[package]] -name = "talpid-dbus" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "dbus", - "err-derive", - "lazy_static", - "libc", - "log", - "tokio", -] - -[[package]] -name = "talpid-openvpn" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "async-trait", - "atty", - "bitflags 1.3.2", - "byteorder", - "cfg-if", - "duct", - "err-derive", - "futures", - "lazy_static", - "log", - "os_pipe 0.9.2", - "parity-tokio-ipc", - "parking_lot 0.11.2", - "prost 0.11.9", - "shadowsocks-service", - "shell-escape", - "socket2 0.4.10", - "talpid-routing", - "talpid-tunnel", - "talpid-types", - "talpid-windows-net", - "tokio", - "tonic", - "tonic-build", - "triggered", - "uuid 0.8.2", - "which", - "widestring", - "windows-sys 0.42.0", - "winreg 0.7.0", -] - -[[package]] -name = "talpid-routing" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "err-derive", - "futures", - "ipnetwork", - "lazy_static", - "libc", - "log", - "netlink-packet-route 0.13.0", - "netlink-sys", - "rtnetlink", - "socket2 0.4.10", - "talpid-types", - "talpid-windows-net", - "tokio", - "tokio-stream", - "widestring", - "windows-sys 0.42.0", -] - -[[package]] -name = "talpid-time" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "libc", - "tokio", -] - -[[package]] -name = "talpid-tunnel" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "cfg-if", - "duct", - "err-derive", - "futures", - "ipnetwork", - "jnix", - "log", - "nix 0.23.2", - "talpid-routing", - "talpid-types", - "talpid-windows-net", - "tokio", - "tun", - "windows-sys 0.42.0", -] - -[[package]] -name = "talpid-tunnel-config-client" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "classic-mceliece-rust", - "log", - "prost 0.11.9", - "rand 0.8.5", - "talpid-types", - "tokio", - "tonic", - "tonic-build", - "tower", -] - -[[package]] -name = "talpid-types" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "base64 0.13.1", - "err-derive", - "ipnetwork", - "jnix", - "rand 0.8.5", - "serde", - "x25519-dalek 2.0.0", - "zeroize", -] - -[[package]] -name = "talpid-windows-net" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "err-derive", - "futures", - "libc", - "socket2 0.4.10", - "winapi", - "windows-sys 0.42.0", -] - -[[package]] -name = "talpid-wireguard" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "bitflags 1.3.2", - "byteorder", - "chrono", - "duct", - "err-derive", - "futures", - "hex", - "internet-checksum", - "ipnetwork", - "lazy_static", - "libc", - "log", - "netlink-packet-core 0.4.2", - "netlink-packet-route 0.13.0", - "netlink-packet-utils", - "netlink-proto", - "nix 0.23.2", - "parking_lot 0.11.2", - "rand 0.8.5", - "rtnetlink", - "socket2 0.4.10", - "talpid-dbus", - "talpid-routing", - "talpid-tunnel", - "talpid-tunnel-config-client", - "talpid-types", - "talpid-windows-net", - "tokio", - "tokio-stream", - "tunnel-obfuscation", - "widestring", - "windows-sys 0.42.0", - "zeroize", -] - -[[package]] -name = "tao" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f5aefd6be4cd3ad3f047442242fd9f57cbfb3e565379f66b5e14749364fa4f" -dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkwayland-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni 0.20.0", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot 0.12.1", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "tao-macros", - "unicode-segmentation", - "uuid 1.6.1", - "windows 0.39.0", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "tar" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "target-lexicon" -version = "0.12.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" - -[[package]] -name = "tauri" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd27c04b9543776a972c86ccf70660b517ecabbeced9fb58d8b961a13ad129af" -dependencies = [ - "anyhow", - "base64 0.21.6", - "bytes", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck 0.4.1", - "http", - "ignore", - "minisign-verify", - "objc", - "once_cell", - "open", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "regex", - "reqwest", - "rfd", - "semver 1.0.21", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "state", - "tar", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "time", - "tokio", - "url", - "uuid 1.6.1", - "webkit2gtk", - "webview2-com", - "windows 0.39.0", - "zip", -] - -[[package]] -name = "tauri-build" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9914a4715e0b75d9f387a285c7e26b5bbfeb1249ad9f842675a82481565c532" -dependencies = [ - "anyhow", - "cargo_toml", - "dirs-next", - "heck 0.4.1", - "json-patch", - "semver 1.0.21", - "serde", - "serde_json", - "tauri-utils", - "tauri-winres", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1554c5857f65dbc377cefb6b97c8ac77b1cb2a90d30d3448114d5d6b48a77fc" -dependencies = [ - "base64 0.21.6", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "regex", - "semver 1.0.21", - "serde", - "serde_json", - "sha2 0.10.8", - "tauri-utils", - "thiserror", - "time", - "uuid 1.6.1", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "277abf361a3a6993ec16bcbb179de0d6518009b851090a01adfea12ac89fa875" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-runtime" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2d0652aa2891ff3e9caa2401405257ea29ab8372cce01f186a5825f1bd0e76" -dependencies = [ - "gtk", - "http", - "http-range", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "url", - "uuid 1.6.1", - "webview2-com", - "windows 0.39.0", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cae61fbc731f690a4899681c9052dde6d05b159b44563ace8186fc1bfb7d158" -dependencies = [ - "cocoa", - "gtk", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid 1.6.1", - "webkit2gtk", - "webview2-com", - "windows 0.39.0", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece74810b1d3d44f29f732a7ae09a63183d63949bbdd59c61f8ed2a1b70150db" -dependencies = [ - "brotli", - "ctor", - "dunce", - "glob", - "heck 0.4.1", - "html5ever", - "infer", - "json-patch", - "kuchikiki", - "log", - "memchr", - "phf 0.11.2", - "proc-macro2", - "quote", - "semver 1.0.21", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows-version", -] - -[[package]] -name = "tauri-winres" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" -dependencies = [ - "embed-resource", - "toml 0.7.8", -] - -[[package]] -name = "tempfile" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.4.1", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "tendermint" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc2294fa667c8b548ee27a9ba59115472d0a09c2ba255771092a7f1dcf03a789" -dependencies = [ - "bytes", - "digest 0.10.7", - "ed25519 2.2.3", - "ed25519-consensus", - "flex-error", - "futures", - "k256", - "num-traits", - "once_cell", - "prost 0.12.3", - "prost-types 0.12.3", - "ripemd", - "serde", - "serde_bytes", - "serde_json", - "serde_repr", - "sha2 0.10.8", - "signature 2.2.0", - "subtle 2.4.1", - "subtle-encoding", - "tendermint-proto", - "time", - "zeroize", -] - -[[package]] -name = "tendermint-config" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a25dbe8b953e80f3d61789fbdb83bf9ad6c0ef16df5ca6546f49912542cc137" -dependencies = [ - "flex-error", - "serde", - "serde_json", - "tendermint", - "toml 0.5.11", - "url", -] - -[[package]] -name = "tendermint-proto" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc728a4f9e891d71adf66af6ecaece146f9c7a11312288a3107b3e1d6979aaf" -dependencies = [ - "bytes", - "flex-error", - "num-derive", - "num-traits", - "prost 0.12.3", - "prost-types 0.12.3", - "serde", - "serde_bytes", - "subtle-encoding", - "time", -] - -[[package]] -name = "tendermint-rpc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbf0a4753b46a190f367337e0163d0b552a2674a6bac54e74f9f2cdcde2969b" -dependencies = [ - "async-trait", - "bytes", - "flex-error", - "futures", - "getrandom 0.2.12", - "peg", - "pin-project", - "reqwest", - "semver 1.0.21", - "serde", - "serde_bytes", - "serde_json", - "subtle 2.4.1", - "subtle-encoding", - "tendermint", - "tendermint-config", - "tendermint-proto", - "thiserror", - "time", - "tokio", - "tracing", - "url", - "uuid 0.8.2", - "walkdir", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" -dependencies = [ - "deranged", - "itoa 1.0.10", - "js-sys", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "parking_lot 0.12.1", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.5.5", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.9", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.10", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util 0.7.10", -] - -[[package]] -name = "tokio-tfo" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4279aec5ded232170bf39130dd0e0deaed2c9f31cd3b5db1f2021056bcf5f94a" -dependencies = [ - "cfg-if", - "futures", - "libc", - "log", - "once_cell", - "pin-project", - "socket2 0.4.10", - "tokio", - "winapi", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" -dependencies = [ - "futures-util", - "log", - "native-tls", - "tokio", - "tokio-native-tls", - "tungstenite", -] - -[[package]] -name = "tokio-util" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "slab", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.19.15", -] - -[[package]] -name = "toml" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.21.0", -] - -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.1.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" -dependencies = [ - "indexmap 2.1.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tonic" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64 0.13.1", - "bytes", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost 0.11.9", - "prost-derive 0.11.9", - "tokio", - "tokio-stream", - "tokio-util 0.7.10", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", -] - -[[package]] -name = "tonic-build" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util 0.7.10", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "trackable" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" -dependencies = [ - "trackable 1.3.0", - "trackable_derive", -] - -[[package]] -name = "trackable" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" -dependencies = [ - "trackable_derive", -] - -[[package]] -name = "trackable_derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - -[[package]] -name = "triggered" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce148eae0d1a376c1b94ae651fc3261d9cb8294788b962b7382066376503a2d1" - -[[package]] -name = "trust-dns-client" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6d9ba1c6079f6f9b4664e482db1700bd53d2ee77b1c9752c1d7a66c0c8bda99" -dependencies = [ - "cfg-if", - "data-encoding", - "futures-channel", - "futures-util", - "lazy_static", - "log", - "radix_trie", - "rand 0.8.5", - "thiserror", - "time", - "tokio", - "trust-dns-proto", -] - -[[package]] -name = "trust-dns-proto" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "log", - "rand 0.8.5", - "serde", - "smallvec", - "thiserror", - "tinyvec", - "tokio", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "log", - "lru-cache", - "parking_lot 0.12.1", - "resolv-conf", - "serde", - "smallvec", - "thiserror", - "tokio", - "trust-dns-proto", -] - -[[package]] -name = "trust-dns-server" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a395a2e0fd8aac9b4613767a5b4ba4b2040de1b767fa03ace8c9d6f351d60b2d" -dependencies = [ - "async-trait", - "bytes", - "cfg-if", - "enum-as-inner", - "env_logger 0.9.3", - "futures-executor", - "futures-util", - "log", - "serde", - "thiserror", - "time", - "tokio", - "toml 0.5.11", - "trust-dns-client", - "trust-dns-proto", - "trust-dns-resolver", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "ts-rs" -version = "7.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee928abbcfd4d13e0a65a30c5e9904aad823d3053cbdc4327e4c7fa053140c6e" -dependencies = [ - "chrono", - "thiserror", - "ts-rs-macros", -] - -[[package]] -name = "ts-rs-macros" -version = "7.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d1f9819299b55836a08a7a6f7cfe3a6f405c03831c81b2e45f8a38b1b1531c" -dependencies = [ - "Inflector", - "proc-macro2", - "quote", - "syn 2.0.48", - "termcolor", -] - -[[package]] -name = "tun" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc25e23adc6cac7dd895ce2780f255902290fc39b00e1ae3c33e89f3d20fa66" -dependencies = [ - "byteorder", - "bytes", - "futures-core", - "ioctl-sys", - "libc", - "thiserror", - "tokio", - "tokio-util 0.6.10", -] - -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "native-tls", - "rand 0.8.5", - "sha1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "tunnel-obfuscation" -version = "0.0.0" -source = "git+https://github.com/mullvad/mullvadvpn-app?tag=2023.2#ccfbaa279d04b4f93dff489880e3fb3ae67025bd" -dependencies = [ - "async-trait", - "err-derive", - "futures", - "tokio", - "udp-over-tcp", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "ucd-trie" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" - -[[package]] -name = "udp-over-tcp" -version = "0.2.0" -source = "git+https://github.com/mullvad/udp-over-tcp?rev=4d52f93cd9962562cb52d66e36771d5f5c70e25a#4d52f93cd9962562cb52d66e36771d5f5c70e25a" -dependencies = [ - "err-context", - "futures", - "lazy_static", - "log", - "nix 0.23.2", - "tokio", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array 0.14.7", - "subtle 2.4.1", -] - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle 2.4.1", -] - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna 0.5.0", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" -dependencies = [ - "getrandom 0.2.12", -] - -[[package]] -name = "uuid" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" -dependencies = [ - "getrandom 0.2.12", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "vergen" -version = "7.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447f9238a4553957277b3ee09d80babeae0811f1b3baefb093de1c0448437a37" -dependencies = [ - "anyhow", - "cfg-if", - "enum-iterator", - "getset", - "git2", - "rustc_version", - "rustversion", - "thiserror", - "time", -] - -[[package]] -name = "version-compare" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "vswhom" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" -dependencies = [ - "libc", - "vswhom-sys", -] - -[[package]] -name = "vswhom-sys" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "walkdir" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" - -[[package]] -name = "wasm-streams" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasm-utils" -version = "0.1.0" -source = "git+https://github.com/nymtech/nym?rev=62894e2b40852a63566c06887663d4517c147923#62894e2b40852a63566c06887663d4517c147923" -dependencies = [ - "futures", - "getrandom 0.2.12", - "gloo-net", - "gloo-utils", - "js-sys", - "tungstenite", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmtimer" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.12.1", - "pin-utils", - "slab", - "wasm-bindgen", -] - -[[package]] -name = "web-sys" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" -dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup2", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" -dependencies = [ - "atk-sys", - "bitflags 1.3.2", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pango-sys", - "pkg-config", - "soup2-sys", - "system-deps 6.2.0", -] - -[[package]] -name = "webpki" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" -dependencies = [ - "ring 0.17.7", - "untrusted 0.9.0", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] - -[[package]] -name = "webview2-com" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows 0.39.0", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "webview2-com-sys" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.39.0", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - -[[package]] -name = "widestring" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" -dependencies = [ - "windows_aarch64_msvc 0.37.0", - "windows_i686_gnu 0.37.0", - "windows_i686_msvc 0.37.0", - "windows_x86_64_gnu 0.37.0", - "windows_x86_64_msvc 0.37.0", -] - -[[package]] -name = "windows" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" -dependencies = [ - "windows-implement", - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", -] - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-bindgen" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-implement" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" -dependencies = [ - "syn 1.0.109", - "windows-tokens", -] - -[[package]] -name = "windows-metadata" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" - -[[package]] -name = "windows-service" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917fdb865e7ff03af9dd86609f8767bc88fefba89e8efd569de8e208af8724b3" -dependencies = [ - "bitflags 1.3.2", - "err-derive", - "widestring", - "windows-sys 0.36.1", -] - -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows-tokens" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" - -[[package]] -name = "windows-version" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" -dependencies = [ - "windows-targets 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" - -[[package]] -name = "windows_i686_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_i686_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" - -[[package]] -name = "windows_i686_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "winnow" -version = "0.5.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" -dependencies = [ - "winapi", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "winreg" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "wry" -version = "0.24.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad85d0e067359e409fcb88903c3eac817c392e5d638258abfb3da5ad8ba6fc4" -dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "dunce", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "kuchikiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2 0.10.8", - "soup2", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows 0.39.0", - "windows-implement", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x25519-dalek" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" -dependencies = [ - "curve25519-dalek 3.2.0", - "rand_core 0.5.1", - "serde", - "zeroize", -] - -[[package]] -name = "x25519-dalek" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb66477291e7e8d2b0ff1bcb900bf29489a9692816d79874bea351e7a8b6de96" -dependencies = [ - "curve25519-dalek 4.1.1", - "rand_core 0.6.4", - "serde", - "zeroize", -] - -[[package]] -name = "xattr" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914566e6413e7fa959cc394fb30e563ba80f3541fbd40816d4c05a0fc3f2a0f1" -dependencies = [ - "libc", - "linux-raw-sys", - "rustix", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zeroize" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zip" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", -] diff --git a/nym-vpn/ui/src-tauri/Cargo.toml b/nym-vpn/ui/src-tauri/Cargo.toml deleted file mode 100644 index 3b6b648085..0000000000 --- a/nym-vpn/ui/src-tauri/Cargo.toml +++ /dev/null @@ -1,39 +0,0 @@ -[package] -name = "nym-vpn-ui" -version = "0.0.2" -description = "Application UI for Nym VPN desktop clients" -authors = ["you"] -license = "" -repository = "" -edition = "2021" - -[build-dependencies] -tauri-build = { version = "1.5", features = [] } - -[dependencies] -tauri = { version = "1.5.2", features = ["updater", "shell-open"] } -tokio = { version = "1.33", features = ["rt", "sync", "time", "fs"] } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" -tracing = "0.1" -tracing-subscriber = { version = "0.3.1", features = ["tracing-log", "env-filter"] } -anyhow = "1.0" -dotenvy = "0.15.7" -thiserror = "1.0" -ts-rs = { version = "7.0.0", features = ["chrono-impl"] } -once_cell = "1.18.0" -toml = "0.8.5" -time = "0.3.9" -nym-vpn-lib = { path = "../../../../nym-vpn-client/nym-vpn-lib" } -futures = "0.3.15" - -# TODO Ugly workaround to force a working setup for nym-vpn-lib -# We should get rid of this ASAP -shadowsocks = { version = "~1.14.2" } -shadowsocks-service = { version = "~1.14.3" } - -[features] -# this feature is used for production builds or when `devPath` points to the filesystem -# DO NOT REMOVE!! -custom-protocol = ["tauri/custom-protocol"] - diff --git a/nym-vpn/ui/src-tauri/Cross.toml b/nym-vpn/ui/src-tauri/Cross.toml deleted file mode 100644 index 27d16cba1f..0000000000 --- a/nym-vpn/ui/src-tauri/Cross.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build.env] -volumes = ["VOL1_ARG=../dist"] diff --git a/nym-vpn/ui/src-tauri/build.rs b/nym-vpn/ui/src-tauri/build.rs deleted file mode 100644 index d860e1e6a7..0000000000 --- a/nym-vpn/ui/src-tauri/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - tauri_build::build() -} diff --git a/nym-vpn/ui/src-tauri/icons/128x128.png b/nym-vpn/ui/src-tauri/icons/128x128.png deleted file mode 100644 index 2f8c35c828..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/128x128.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/128x128@2x.png b/nym-vpn/ui/src-tauri/icons/128x128@2x.png deleted file mode 100644 index 32de9d1f0e..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/128x128@2x.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/32x32.png b/nym-vpn/ui/src-tauri/icons/32x32.png deleted file mode 100644 index 32722d4b2c..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/32x32.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square107x107Logo.png b/nym-vpn/ui/src-tauri/icons/Square107x107Logo.png deleted file mode 100644 index 9a6a7d50cb..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square107x107Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square142x142Logo.png b/nym-vpn/ui/src-tauri/icons/Square142x142Logo.png deleted file mode 100644 index 987134e92b..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square142x142Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square150x150Logo.png b/nym-vpn/ui/src-tauri/icons/Square150x150Logo.png deleted file mode 100644 index bb84ee90c9..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square150x150Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square284x284Logo.png b/nym-vpn/ui/src-tauri/icons/Square284x284Logo.png deleted file mode 100644 index 8b936410d9..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square284x284Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square30x30Logo.png b/nym-vpn/ui/src-tauri/icons/Square30x30Logo.png deleted file mode 100644 index ebf441338e..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square30x30Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square310x310Logo.png b/nym-vpn/ui/src-tauri/icons/Square310x310Logo.png deleted file mode 100644 index 4793ed5cd9..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square310x310Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square44x44Logo.png b/nym-vpn/ui/src-tauri/icons/Square44x44Logo.png deleted file mode 100644 index 966966252a..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square44x44Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square71x71Logo.png b/nym-vpn/ui/src-tauri/icons/Square71x71Logo.png deleted file mode 100644 index b161cd4833..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square71x71Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/Square89x89Logo.png b/nym-vpn/ui/src-tauri/icons/Square89x89Logo.png deleted file mode 100644 index 5304954324..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/Square89x89Logo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/StoreLogo.png b/nym-vpn/ui/src-tauri/icons/StoreLogo.png deleted file mode 100644 index 28ddc2eb28..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/StoreLogo.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/icon.icns b/nym-vpn/ui/src-tauri/icons/icon.icns deleted file mode 100644 index 66d61665db..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/icon.icns and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/icon.ico b/nym-vpn/ui/src-tauri/icons/icon.ico deleted file mode 100644 index c9a3c54620..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/icon.ico and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/icons/icon.png b/nym-vpn/ui/src-tauri/icons/icon.png deleted file mode 100644 index 0a6a4c715c..0000000000 Binary files a/nym-vpn/ui/src-tauri/icons/icon.png and /dev/null differ diff --git a/nym-vpn/ui/src-tauri/src/commands/app_data.rs b/nym-vpn/ui/src-tauri/src/commands/app_data.rs deleted file mode 100644 index d4acdaa5f1..0000000000 --- a/nym-vpn/ui/src-tauri/src/commands/app_data.rs +++ /dev/null @@ -1,167 +0,0 @@ -use tauri::State; -use tracing::{debug, instrument}; - -use crate::country::COUNTRIES; -use crate::states::app::Country; -use crate::{ - error::{CmdError, CmdErrorSource}, - fs::data::{AppData, UiTheme}, - states::SharedAppData, -}; - -#[instrument] -#[tauri::command] -pub fn get_node_countries() -> Result, CmdError> { - debug!("get_node_countries"); - // TODO fetch the list of countries from some API - Ok(COUNTRIES.clone()) -} - -#[instrument(skip(state))] -#[tauri::command] -pub async fn set_app_data( - state: State<'_, SharedAppData>, - data: Option, -) -> Result<(), CmdError> { - debug!("set_app_data"); - let mut app_data_store = state.lock().await; - if let Some(data) = data { - app_data_store.data = data; - } - app_data_store - .write() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - - Ok(()) -} - -#[instrument(skip_all)] -#[tauri::command] -pub async fn get_app_data( - state: State<'_, SharedAppData>, - data: Option, -) -> Result { - debug!("get_app_data"); - let mut app_data_store = state.lock().await; - if let Some(data) = data { - app_data_store.data = data; - } - let data = app_data_store - .read() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - - Ok(data) -} - -#[instrument(skip(data_state))] -#[tauri::command] -pub async fn set_ui_theme( - data_state: State<'_, SharedAppData>, - theme: UiTheme, -) -> Result<(), CmdError> { - debug!("set_ui_theme"); - - // save the selected UI theme to disk - let mut app_data_store = data_state.lock().await; - let mut app_data = app_data_store - .read() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - app_data.ui_theme = Some(theme); - app_data_store.data = app_data; - app_data_store - .write() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - Ok(()) -} - -#[instrument(skip(data_state))] -#[tauri::command] -pub async fn set_root_font_size( - data_state: State<'_, SharedAppData>, - size: u32, -) -> Result<(), CmdError> { - debug!("set_root_font_size"); - - let mut app_data_store = data_state.lock().await; - let mut app_data = app_data_store - .read() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - app_data.ui_root_font_size = Some(size); - app_data_store.data = app_data; - app_data_store - .write() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - Ok(()) -} - -#[instrument(skip(data_state))] -#[tauri::command] -pub async fn set_entry_location_selector( - data_state: State<'_, SharedAppData>, - entry_selector: bool, -) -> Result<(), CmdError> { - debug!("set_entry_location_selector"); - - let mut app_data_store = data_state.lock().await; - let mut app_data = app_data_store - .read() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - app_data.entry_location_selector = Some(entry_selector); - app_data_store.data = app_data; - app_data_store - .write() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - Ok(()) -} - -#[instrument(skip(data_state))] -#[tauri::command] -pub async fn set_auto_connect( - data_state: State<'_, SharedAppData>, - entry_selector: bool, -) -> Result<(), CmdError> { - debug!("set_auto_connect"); - - let mut app_data_store = data_state.lock().await; - let mut app_data = app_data_store - .read() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - app_data.autoconnect = Some(entry_selector); - app_data_store.data = app_data; - app_data_store - .write() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - Ok(()) -} - -#[instrument(skip(data_state))] -#[tauri::command] -pub async fn set_monitoring( - data_state: State<'_, SharedAppData>, - entry_selector: bool, -) -> Result<(), CmdError> { - debug!("set_monitoring"); - - let mut app_data_store = data_state.lock().await; - let mut app_data = app_data_store - .read() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - app_data.monitoring = Some(entry_selector); - app_data_store.data = app_data; - app_data_store - .write() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - Ok(()) -} diff --git a/nym-vpn/ui/src-tauri/src/commands/connection.rs b/nym-vpn/ui/src-tauri/src/commands/connection.rs deleted file mode 100644 index 74eca48b2f..0000000000 --- a/nym-vpn/ui/src-tauri/src/commands/connection.rs +++ /dev/null @@ -1,278 +0,0 @@ -use futures::SinkExt; -use nym_vpn_lib::gateway_client::{EntryPoint, ExitPoint}; -use nym_vpn_lib::{NymVpnCtrlMessage, NymVpnHandle}; -use tauri::{Manager, State}; -use tracing::{debug, error, info, instrument, trace}; - -use crate::{ - error::{CmdError, CmdErrorSource}, - states::{ - app::{ConnectionState, VpnMode}, - SharedAppData, SharedAppState, - }, - vpn_client::{ - create_vpn_config, spawn_exit_listener, spawn_status_listener, ConnectProgressMsg, - ConnectionEventPayload, ProgressEventPayload, EVENT_CONNECTION_PROGRESS, - EVENT_CONNECTION_STATE, - }, -}; - -const DEFAULT_NODE_LOCATION: &str = "DE"; - -#[instrument(skip_all)] -#[tauri::command] -pub async fn get_connection_state( - state: State<'_, SharedAppState>, -) -> Result { - debug!("get_connection_state"); - let app_state = state.lock().await; - Ok(app_state.state) -} - -#[instrument(skip_all)] -#[tauri::command] -pub async fn connect( - app: tauri::AppHandle, - state: State<'_, SharedAppState>, -) -> Result { - debug!("connect"); - { - let mut app_state = state.lock().await; - if app_state.state != ConnectionState::Disconnected { - return Err(CmdError::new( - CmdErrorSource::CallerError, - format!("cannot connect from state {:?}", app_state.state), - )); - }; - - // switch to "Connecting" state - trace!("update connection state [Connecting]"); - app_state.state = ConnectionState::Connecting; - } - - debug!("sending event [{}]: Connecting", EVENT_CONNECTION_STATE); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new(ConnectionState::Connecting, None, None), - ) - .ok(); - - trace!( - "sending event [{}]: Initializing", - EVENT_CONNECTION_PROGRESS - ); - app.emit_all( - EVENT_CONNECTION_PROGRESS, - ProgressEventPayload { - key: ConnectProgressMsg::Initializing, - }, - ) - .ok(); - - let app_state = state.lock().await; - - let entry_point = match app_state.entry_node_location { - Some(ref entry_node_location) => { - debug!( - "entry node location set, using: {}", - entry_node_location.code - ); - EntryPoint::Location(entry_node_location.code.clone()) - } - _ => { - debug!( - "entry node location not set, using default: {}", - DEFAULT_NODE_LOCATION - ); - EntryPoint::Location(DEFAULT_NODE_LOCATION.into()) - } - }; - let exit_point = match app_state.exit_node_location { - Some(ref exit_node_location) => { - debug!("exit node location set, using: {}", exit_node_location.code); - ExitPoint::Location(exit_node_location.code.clone()) - } - _ => { - debug!( - "exit node location not set, using default: {}", - DEFAULT_NODE_LOCATION - ); - ExitPoint::Location(DEFAULT_NODE_LOCATION.into()) - } - }; - - let mut vpn_config = create_vpn_config(entry_point, exit_point); - if let VpnMode::TwoHop = app_state.vpn_mode { - info!("2-hop mode enabled"); - vpn_config.enable_two_hop = true; - } else { - info!("5-hop mode enabled"); - } - // vpn_config.disable_routing = true; - // !! release app_state mutex - drop(app_state); - - // spawn the VPN client and start a new connection - let NymVpnHandle { - vpn_ctrl_tx, - vpn_status_rx, - vpn_exit_rx, - } = nym_vpn_lib::spawn_nym_vpn(vpn_config).map_err(|e| { - let err_message = format!("fail to initialize Nym VPN client: {}", e); - error!(err_message); - debug!("sending event [{}]: Disconnected", EVENT_CONNECTION_STATE); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new( - ConnectionState::Disconnected, - Some(err_message.clone()), - None, - ), - ) - .ok(); - CmdError::new(CmdErrorSource::InternalError, err_message) - })?; - info!("nym vpn client spawned"); - trace!("sending event [{}]: InitDone", EVENT_CONNECTION_PROGRESS); - app.emit_all( - EVENT_CONNECTION_PROGRESS, - ProgressEventPayload { - key: ConnectProgressMsg::InitDone, - }, - ) - .ok(); - - // Start exit message listener - // This will listen for the (single) exit message from the VPN client and update the UI accordingly - debug!("starting exit listener"); - spawn_exit_listener(app.clone(), state.inner().clone(), vpn_exit_rx) - .await - .ok(); - - // Start the VPN status listener - // This will listen for status messages from the VPN client and update the UI accordingly - debug!("starting status listener"); - spawn_status_listener(app, state.inner().clone(), vpn_status_rx) - .await - .ok(); - - // Store the vpn control tx in the app state, which will be used to send control messages to - // the running background VPN task, such as to disconnect. - trace!("added vpn_ctrl_tx to app state"); - let mut state = state.lock().await; - state.vpn_ctrl_tx = Some(vpn_ctrl_tx); - - Ok(state.state) -} - -#[instrument(skip_all)] -#[tauri::command] -pub async fn disconnect( - app: tauri::AppHandle, - state: State<'_, SharedAppState>, -) -> Result { - debug!("disconnect"); - let mut app_state = state.lock().await; - if app_state.state != ConnectionState::Connected { - return Err(CmdError::new( - CmdErrorSource::CallerError, - format!("cannot disconnect from state {:?}", app_state.state), - )); - }; - - // switch to "Disconnecting" state - trace!("update connection state [Disconnecting]"); - app_state.state = ConnectionState::Disconnecting; - - debug!("sending event [{}]: Disconnecting", EVENT_CONNECTION_STATE); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new(ConnectionState::Disconnecting, None, None), - ) - .ok(); - - let Some(ref mut vpn_tx) = app_state.vpn_ctrl_tx else { - trace!("update connection state [Disconnected]"); - app_state.state = ConnectionState::Disconnected; - app_state.connection_start_time = None; - debug!("sending event [{}]: Disconnected", EVENT_CONNECTION_STATE); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new( - ConnectionState::Disconnected, - Some("vpn handle has not been initialized".to_string()), - None, - ), - ) - .ok(); - return Err(CmdError::new( - CmdErrorSource::InternalError, - "vpn handle has not been initialized".to_string(), - )); - }; - - // send Stop message to the VPN client - debug!("sending Stop message to VPN client"); - vpn_tx.send(NymVpnCtrlMessage::Stop).await.map_err(|e| { - let err_message = format!("failed to send Stop message to VPN client: {}", e); - error!(err_message); - debug!("sending event [{}]: Disconnected", EVENT_CONNECTION_STATE); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new( - ConnectionState::Disconnected, - Some(err_message.clone()), - None, - ), - ) - .ok(); - CmdError::new(CmdErrorSource::InternalError, err_message) - })?; - debug!("Stop message sent"); - - Ok(app_state.state) -} - -#[instrument(skip_all)] -#[tauri::command] -pub async fn get_connection_start_time( - state: State<'_, SharedAppState>, -) -> Result, CmdError> { - debug!("get_connection_start_time"); - let app_state = state.lock().await; - Ok(app_state.connection_start_time.map(|t| t.unix_timestamp())) -} - -#[instrument(skip(app_state, data_state))] -#[tauri::command] -pub async fn set_vpn_mode( - app_state: State<'_, SharedAppState>, - data_state: State<'_, SharedAppData>, - mode: VpnMode, -) -> Result<(), CmdError> { - debug!("set_vpn_mode"); - - let mut state = app_state.lock().await; - - if let ConnectionState::Disconnected = state.state { - } else { - let err_message = format!("cannot change vpn mode from state {:?}", state.state); - error!(err_message); - return Err(CmdError::new(CmdErrorSource::CallerError, err_message)); - } - state.vpn_mode = mode.clone(); - - // save the selected mode to disk - let mut app_data_store = data_state.lock().await; - let mut app_data = app_data_store - .read() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - app_data.vpn_mode = Some(mode); - app_data_store.data = app_data; - app_data_store - .write() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - Ok(()) -} diff --git a/nym-vpn/ui/src-tauri/src/commands/mod.rs b/nym-vpn/ui/src-tauri/src/commands/mod.rs deleted file mode 100644 index 53529ee0ce..0000000000 --- a/nym-vpn/ui/src-tauri/src/commands/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod app_data; -pub mod connection; -pub mod node_location; diff --git a/nym-vpn/ui/src-tauri/src/commands/node_location.rs b/nym-vpn/ui/src-tauri/src/commands/node_location.rs deleted file mode 100644 index 7ef01976c1..0000000000 --- a/nym-vpn/ui/src-tauri/src/commands/node_location.rs +++ /dev/null @@ -1,66 +0,0 @@ -use serde::{Deserialize, Serialize}; -use tauri::State; -use tracing::{debug, instrument}; -use ts_rs::TS; - -use crate::{ - country::DEFAULT_NODE_LOCATION, - error::{CmdError, CmdErrorSource}, - states::{app::Country, SharedAppData, SharedAppState}, -}; - -#[derive(Debug, Serialize, Deserialize, TS, Clone)] -pub enum NodeType { - Entry, - Exit, -} - -#[instrument(skip(app_state, data_state))] -#[tauri::command] -pub async fn set_node_location( - app_state: State<'_, SharedAppState>, - data_state: State<'_, SharedAppData>, - node_type: NodeType, - country: Country, -) -> Result<(), CmdError> { - debug!("set_node_location"); - let mut state = app_state.lock().await; - match node_type { - NodeType::Entry => { - state.entry_node_location = Some(country.clone()); - } - NodeType::Exit => { - state.exit_node_location = Some(country.clone()); - } - } - - // save the location on disk - let mut app_data_store = data_state.lock().await; - let mut app_data = app_data_store - .read() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - - match node_type { - NodeType::Entry => { - app_data.entry_node_location = Some(country); - } - NodeType::Exit => { - app_data.exit_node_location = Some(country); - } - } - app_data_store.data = app_data; - app_data_store - .write() - .await - .map_err(|e| CmdError::new(CmdErrorSource::InternalError, e.to_string()))?; - - Ok(()) -} - -#[instrument] -#[tauri::command] -pub async fn get_default_node_location() -> Result { - debug!("get_default_node_location"); - Ok(DEFAULT_NODE_LOCATION.clone()) -} diff --git a/nym-vpn/ui/src-tauri/src/country.rs b/nym-vpn/ui/src-tauri/src/country.rs deleted file mode 100644 index e9c4ede6dc..0000000000 --- a/nym-vpn/ui/src-tauri/src/country.rs +++ /dev/null @@ -1,34 +0,0 @@ -use once_cell::sync::Lazy; - -use crate::states::app::Country; - -// TODO use hardcoded country list for now -pub static COUNTRIES: Lazy> = Lazy::new(|| { - vec![ - Country { - name: "France".to_string(), - code: "FR".to_string(), - }, - Country { - name: "Germany".to_string(), - code: "DE".to_string(), - }, - Country { - name: "Ireland".to_string(), - code: "IE".to_string(), - }, - Country { - name: "Japan".to_string(), - code: "JP".to_string(), - }, - Country { - name: "United Kingdom".to_string(), - code: "GB".to_string(), - }, - ] -}); - -pub static DEFAULT_NODE_LOCATION: Lazy = Lazy::new(|| Country { - code: "FR".to_string(), - name: "France".to_string(), -}); diff --git a/nym-vpn/ui/src-tauri/src/error.rs b/nym-vpn/ui/src-tauri/src/error.rs deleted file mode 100644 index e4be67cc80..0000000000 --- a/nym-vpn/ui/src-tauri/src/error.rs +++ /dev/null @@ -1,39 +0,0 @@ -use std::fmt::{self, Display}; - -use serde::{Deserialize, Serialize}; -use thiserror::Error; -use ts_rs::TS; - -#[derive(Error, Debug, Serialize, Deserialize, TS)] -#[ts(export)] -pub enum CmdErrorSource { - #[error("internal error")] - InternalError, - #[error("caller error")] - CallerError, - #[error("unknown error")] - Unknown, -} - -#[derive(Error, Debug, Serialize, Deserialize, TS)] -#[ts(export)] -pub struct CmdError { - #[source] - pub source: CmdErrorSource, - pub message: String, -} - -impl CmdError { - pub fn new(error: CmdErrorSource, message: String) -> Self { - Self { - message, - source: error, - } - } -} - -impl Display for CmdError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}: {}", self.source, self.message) - } -} diff --git a/nym-vpn/ui/src-tauri/src/fs/cache.rs b/nym-vpn/ui/src-tauri/src/fs/cache.rs deleted file mode 100644 index 64bc676b0f..0000000000 --- a/nym-vpn/ui/src-tauri/src/fs/cache.rs +++ /dev/null @@ -1,6 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Default, Serialize, Deserialize, Debug, Clone)] -pub struct AppCache { - // TODO -} diff --git a/nym-vpn/ui/src-tauri/src/fs/config.rs b/nym-vpn/ui/src-tauri/src/fs/config.rs deleted file mode 100644 index b0d22ef37b..0000000000 --- a/nym-vpn/ui/src-tauri/src/fs/config.rs +++ /dev/null @@ -1,9 +0,0 @@ -use std::path::PathBuf; - -use serde::{Deserialize, Serialize}; - -#[derive(Default, Serialize, Deserialize, Debug, Clone)] -pub struct AppConfig { - /// Path pointing to an env configuration file describing the network - pub env_config_file: Option, -} diff --git a/nym-vpn/ui/src-tauri/src/fs/data.rs b/nym-vpn/ui/src-tauri/src/fs/data.rs deleted file mode 100644 index 797009af2a..0000000000 --- a/nym-vpn/ui/src-tauri/src/fs/data.rs +++ /dev/null @@ -1,28 +0,0 @@ -use serde::{Deserialize, Serialize}; -use ts_rs::TS; - -use crate::states::app::{Country, NodeConfig, VpnMode}; - -#[derive(Default, Serialize, Deserialize, Debug, Clone, TS)] -#[ts(export)] -pub enum UiTheme { - Dark, - #[default] - Light, -} - -#[derive(Default, Serialize, Deserialize, Debug, Clone, TS)] -#[ts(export)] -pub struct AppData { - pub monitoring: Option, - pub autoconnect: Option, - pub killswitch: Option, - pub entry_location_selector: Option, - pub ui_theme: Option, - pub ui_root_font_size: Option, - pub vpn_mode: Option, - pub entry_node: Option, - pub exit_node: Option, - pub entry_node_location: Option, - pub exit_node_location: Option, -} diff --git a/nym-vpn/ui/src-tauri/src/fs/log.rs b/nym-vpn/ui/src-tauri/src/fs/log.rs deleted file mode 100644 index 7401d4e653..0000000000 --- a/nym-vpn/ui/src-tauri/src/fs/log.rs +++ /dev/null @@ -1,6 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Default, Serialize, Deserialize, Debug, Clone)] -pub struct AppLog { - // TODO -} diff --git a/nym-vpn/ui/src-tauri/src/fs/mod.rs b/nym-vpn/ui/src-tauri/src/fs/mod.rs deleted file mode 100644 index 429f48cc99..0000000000 --- a/nym-vpn/ui/src-tauri/src/fs/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod config; -pub mod data; -pub mod log; -pub mod storage; diff --git a/nym-vpn/ui/src-tauri/src/fs/storage.rs b/nym-vpn/ui/src-tauri/src/fs/storage.rs deleted file mode 100644 index cd718a52d6..0000000000 --- a/nym-vpn/ui/src-tauri/src/fs/storage.rs +++ /dev/null @@ -1,91 +0,0 @@ -use anyhow::{anyhow, Context, Result}; -use serde::{de::DeserializeOwned, Serialize}; -use std::{fmt, path::PathBuf, str}; -use tauri::api::path::data_dir; -use tokio::fs; -use tracing::{debug, error, instrument}; - -#[derive(Debug, Clone)] -pub struct AppStorage -where - T: Serialize + DeserializeOwned + Default + fmt::Debug, -{ - pub data: T, - pub dir_path: PathBuf, - pub filename: String, - pub full_path: PathBuf, -} - -async fn create_directory_path(path: &PathBuf) -> Result<()> { - let mut data_dir = data_dir().ok_or(anyhow!( - "Failed to retrieve data directory {:?}", - path.display() - ))?; - data_dir.push(path); - - fs::create_dir_all(&data_dir).await.context(format!( - "Failed to create data directory {}", - data_dir.display() - )) -} - -impl AppStorage -where - T: Serialize + DeserializeOwned + Default + fmt::Debug, -{ - pub fn new(dir_path: PathBuf, filename: &str, data: Option) -> Self { - let mut full_path = dir_path.clone(); - full_path.push(filename); - - Self { - data: data.unwrap_or_default(), - dir_path, - filename: filename.to_owned(), - full_path, - } - } - - #[instrument] - pub async fn read(&self) -> Result { - // create the full directory path if it is missing - create_directory_path(&self.dir_path).await?; - - // check if the file exists, if not create it - match fs::try_exists(&self.full_path).await { - Ok(true) => {} - _ => fs::write(&self.full_path, []).await?, - } - - debug!("reading stored data from {}", self.full_path.display()); - let content = fs::read(&self.full_path).await.context(format!( - "Failed to read data from {}", - self.full_path.display() - ))?; - - toml::from_str::(str::from_utf8(&content)?).map_err(|e| { - error!("{e}"); - anyhow!("{e}") - }) - } - - #[instrument] - pub async fn write(&self) -> Result<()> { - // create the full directory path if it is missing - create_directory_path(&self.dir_path).await?; - - debug!("writing data to {}", self.full_path.display()); - let toml = toml::to_string(&self.data)?; - fs::write(&self.full_path, toml).await?; - Ok(()) - } - - #[instrument] - pub async fn clear(&self) -> Result<()> { - // create the full directory path if it is missing - create_directory_path(&self.dir_path).await?; - - debug!("clearing data {}", self.full_path.display()); - fs::write(&self.full_path, vec![]).await?; - Ok(()) - } -} diff --git a/nym-vpn/ui/src-tauri/src/main.rs b/nym-vpn/ui/src-tauri/src/main.rs deleted file mode 100644 index 64eb32c2e3..0000000000 --- a/nym-vpn/ui/src-tauri/src/main.rs +++ /dev/null @@ -1,122 +0,0 @@ -// Prevents additional console window on Windows in release, DO NOT REMOVE!! -#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] - -use std::{env, sync::Arc}; - -use anyhow::{anyhow, Context, Result}; -use tauri::api::path::{config_dir, data_dir}; -use tokio::{fs::try_exists, sync::Mutex}; -use tracing::{debug, error, info}; - -use commands::*; -use states::app::AppState; - -use nym_vpn_lib::nym_config; - -use crate::fs::{config::AppConfig, data::AppData, storage::AppStorage}; - -mod commands; -mod country; -mod error; -mod fs; -mod states; -mod vpn_client; - -const APP_DIR: &str = "nym-vpn"; -const APP_DATA_FILE: &str = "app-data.toml"; -const APP_CONFIG_FILE: &str = "config.toml"; - -pub fn setup_logging() { - let filter = tracing_subscriber::EnvFilter::builder() - .with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into()) - .from_env() - .unwrap() - .add_directive("hyper::proto=info".parse().unwrap()) - .add_directive("netlink_proto=info".parse().unwrap()); - - tracing_subscriber::fmt() - .with_env_filter(filter) - .compact() - .init(); -} - -#[tokio::main] -async fn main() -> Result<()> { - dotenvy::dotenv().ok(); - setup_logging(); - - let app_data_store = { - let mut app_data_path = - data_dir().ok_or(anyhow!("Failed to retrieve data directory path"))?; - app_data_path.push(APP_DIR); - AppStorage::::new(app_data_path, APP_DATA_FILE, None) - }; - debug!("app_data_store: {}", app_data_store.full_path.display()); - - let app_config_store = { - let mut app_config_path = - config_dir().ok_or(anyhow!("Failed to retrieve config directory path"))?; - app_config_path.push(APP_DIR); - AppStorage::::new(app_config_path, APP_CONFIG_FILE, None) - }; - debug!( - "app_config_store: {}", - &app_config_store.full_path.display() - ); - - let app_data = app_data_store.read().await?; - debug!("app_data: {app_data:?}"); - let app_config = app_config_store.read().await?; - debug!("app_config: {app_config:?}"); - - // check for the existence of the env_config_file if provided - if let Some(env_config_file) = &app_config.env_config_file { - debug!("provided env_config_file: {}", env_config_file.display()); - if !(try_exists(env_config_file) - .await - .context("an error happened while trying to read env_config_file `{}`")?) - { - let err_message = format!( - "app config, env_config_file `{}`: file not found", - env_config_file.display() - ); - error!(err_message); - return Err(anyhow!(err_message)); - } - } - - // Read the env variables in the provided file and export them all to the local environment. - nym_config::defaults::setup_env(app_config.env_config_file); - - info!("Starting tauri app"); - - tauri::Builder::default() - .manage(Arc::new(Mutex::new(AppState::from(&app_data)))) - .manage(Arc::new(Mutex::new(app_data_store))) - .manage(Arc::new(Mutex::new(app_config_store))) - .setup(|_app| { - info!("app setup"); - Ok(()) - }) - .invoke_handler(tauri::generate_handler![ - connection::set_vpn_mode, - connection::get_connection_state, - connection::connect, - connection::disconnect, - connection::get_connection_start_time, - app_data::get_app_data, - app_data::set_app_data, - app_data::set_ui_theme, - app_data::set_entry_location_selector, - app_data::set_monitoring, - app_data::set_auto_connect, - app_data::get_node_countries, - app_data::set_root_font_size, - node_location::set_node_location, - node_location::get_default_node_location, - ]) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); - - Ok(()) -} diff --git a/nym-vpn/ui/src-tauri/src/states/app.rs b/nym-vpn/ui/src-tauri/src/states/app.rs deleted file mode 100644 index 1a54f73e03..0000000000 --- a/nym-vpn/ui/src-tauri/src/states/app.rs +++ /dev/null @@ -1,72 +0,0 @@ -use futures::channel::mpsc::UnboundedSender; -use nym_vpn_lib::NymVpnCtrlMessage; -use serde::{Deserialize, Serialize}; -use time::OffsetDateTime; -use ts_rs::TS; - -use crate::fs::data::AppData; - -#[derive(Debug, Serialize, Deserialize, Clone, TS)] -#[ts(export)] -pub struct NodeConfig { - pub id: String, - pub country: Country, -} - -#[derive(Default, Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, TS)] -#[ts(export)] -pub enum ConnectionState { - Connected, - #[default] - Disconnected, - Connecting, - Disconnecting, - Unknown, -} - -#[derive(Default, Debug, Serialize, Deserialize, TS, Clone, PartialEq, Eq)] -#[ts(export)] -pub enum VpnMode { - Mixnet, - #[default] - TwoHop, -} - -#[derive(Debug, Serialize, Deserialize, TS)] -#[ts(export)] -pub struct TunnelConfig { - pub id: String, - pub name: String, -} - -#[derive(Debug, Default)] -pub struct AppState { - pub state: ConnectionState, - pub error: Option, - pub vpn_mode: VpnMode, - pub entry_node: Option, - pub exit_node: Option, - pub entry_node_location: Option, - pub exit_node_location: Option, - pub tunnel: Option, - pub connection_start_time: Option, - pub vpn_ctrl_tx: Option>, -} - -impl From<&AppData> for AppState { - fn from(app_data: &AppData) -> Self { - AppState { - entry_node_location: app_data.entry_node_location.clone(), - exit_node_location: app_data.exit_node_location.clone(), - vpn_mode: app_data.vpn_mode.clone().unwrap_or_default(), - ..Default::default() - } - } -} - -#[derive(Default, Serialize, Deserialize, Debug, Clone, TS)] -#[ts(export)] -pub struct Country { - pub name: String, - pub code: String, -} diff --git a/nym-vpn/ui/src-tauri/src/states/mod.rs b/nym-vpn/ui/src-tauri/src/states/mod.rs deleted file mode 100644 index 022f0760fd..0000000000 --- a/nym-vpn/ui/src-tauri/src/states/mod.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::fs::{config::AppConfig, data::AppData, storage::AppStorage}; -use std::sync::Arc; -use tokio::sync::Mutex; - -pub mod app; - -pub type SharedAppState = Arc>; -pub type SharedAppData = Arc>>; - -// TODO remove this macro -#[allow(dead_code)] -pub type SharedAppConfig = Arc>>; diff --git a/nym-vpn/ui/src-tauri/src/vpn_client.rs b/nym-vpn/ui/src-tauri/src/vpn_client.rs deleted file mode 100644 index 1f0aa1c9f5..0000000000 --- a/nym-vpn/ui/src-tauri/src/vpn_client.rs +++ /dev/null @@ -1,172 +0,0 @@ -use crate::states::{app::ConnectionState, SharedAppState}; -use anyhow::Result; -use futures::channel::oneshot::Receiver as OneshotReceiver; -use futures::StreamExt; -use nym_vpn_lib::gateway_client::{Config as GatewayClientConfig, EntryPoint, ExitPoint}; -use nym_vpn_lib::nym_config::OptionalSet; -use nym_vpn_lib::{NymVpn, NymVpnExitError, NymVpnExitStatusMessage, StatusReceiver}; -use tauri::Manager; -use time::OffsetDateTime; -use tracing::{debug, error, info, instrument, trace}; - -pub const EVENT_CONNECTION_STATE: &str = "connection-state"; -pub const EVENT_CONNECTION_PROGRESS: &str = "connection-progress"; - -#[derive(Clone, serde::Serialize)] -pub enum ConnectProgressMsg { - Initializing, - InitDone, -} - -#[derive(Clone, serde::Serialize)] -pub struct ProgressEventPayload { - pub key: ConnectProgressMsg, -} - -#[derive(Clone, serde::Serialize)] -pub struct ConnectionEventPayload { - state: ConnectionState, - error: Option, - start_time: Option, // unix timestamp in seconds -} - -impl ConnectionEventPayload { - pub fn new(state: ConnectionState, error: Option, start_time: Option) -> Self { - Self { - state, - error, - start_time, - } - } -} - -fn handle_vpn_exit_error(e: Box) -> String { - match e.downcast::>() { - Ok(e) => { - // TODO The double boxing here is unexpected, we should look into that - match **e { - NymVpnExitError::Generic { reason } => reason.to_string(), - NymVpnExitError::FailedToResetFirewallPolicy { reason } => reason.to_string(), - NymVpnExitError::FailedToResetDnsMonitor { reason } => reason.to_string(), - } - } - Err(e) => format!("unknown error: {e}"), - } -} - -#[instrument(skip_all)] -pub async fn spawn_exit_listener( - app: tauri::AppHandle, - app_state: SharedAppState, - exit_rx: OneshotReceiver, -) -> Result<()> { - tokio::spawn(async move { - match exit_rx.await { - Ok(res) => { - debug!("received vpn exit message: {res:?}"); - match res { - NymVpnExitStatusMessage::Stopped => { - info!("vpn connection stopped"); - debug!( - "vpn stopped, sending event [{}]: disconnected", - EVENT_CONNECTION_STATE - ); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new(ConnectionState::Disconnected, None, None), - ) - .ok(); - } - NymVpnExitStatusMessage::Failed(e) => { - let error = handle_vpn_exit_error(e); - debug!( - "vpn failed, sending event [{}]: disconnected", - EVENT_CONNECTION_STATE - ); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new( - ConnectionState::Disconnected, - Some(error), - None, - ), - ) - .ok(); - } - } - } - Err(e) => { - error!("vpn_exit_rx failed to receive exit message: {}", e); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new( - ConnectionState::Disconnected, - Some("exit channel with vpn client has been closed".to_string()), - None, - ), - ) - .ok(); - } - } - // update the connection state - let mut state = app_state.lock().await; - state.state = ConnectionState::Disconnected; - state.connection_start_time = None; - info!("vpn exit listener has exited"); - }); - Ok(()) -} - -#[instrument(skip_all)] -pub async fn spawn_status_listener( - app: tauri::AppHandle, - app_state: SharedAppState, - mut status_rx: StatusReceiver, -) -> Result<()> { - tokio::spawn(async move { - while let Some(msg) = status_rx.next().await { - info!("received vpn status message: {msg:?}"); - if "Ready" == msg.to_string().as_str() { - info!("vpn connection has been established"); - let now = OffsetDateTime::now_utc(); - { - let mut state = app_state.lock().await; - trace!("update connection state [Connected]"); - state.state = ConnectionState::Connected; - state.connection_start_time = Some(now); - } - debug!("sending event [{}]: Connected", EVENT_CONNECTION_STATE); - app.emit_all( - EVENT_CONNECTION_STATE, - ConnectionEventPayload::new( - ConnectionState::Connected, - None, - Some(now.unix_timestamp()), - ), - ) - .ok(); - } - } - info!("vpn status listener has exited"); - }); - Ok(()) -} - -fn setup_gateway_client_config(private_key: Option<&str>) -> GatewayClientConfig { - let mut config = GatewayClientConfig::default() - // Read in the environment variable NYM_API if it exists - .with_optional_env(GatewayClientConfig::with_custom_api_url, None, "NYM_API"); - info!("Using nym-api: {}", config.api_url()); - - if let Some(key) = private_key { - config = config.with_local_private_key(key.into()); - } - config -} - -#[instrument(skip_all)] -pub fn create_vpn_config(entry_point: EntryPoint, exit_point: ExitPoint) -> NymVpn { - let mut nym_vpn = NymVpn::new(entry_point, exit_point); - nym_vpn.gateway_config = setup_gateway_client_config(None); - nym_vpn -} diff --git a/nym-vpn/ui/src-tauri/tauri.conf.json b/nym-vpn/ui/src-tauri/tauri.conf.json deleted file mode 100644 index b2a47877c3..0000000000 --- a/nym-vpn/ui/src-tauri/tauri.conf.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "build": { - "beforeDevCommand": "yarn dev", - "beforeBuildCommand": "yarn build", - "devPath": "http://localhost:1420", - "distDir": "../dist", - "withGlobalTauri": false - }, - "package": { - "productName": "nym-vpn", - "version": "0.0.2" - }, - "tauri": { - "updater": { - "active": true, - "endpoints": [ - "https://releases.myapp.com/{{target}}/{{arch}}/{{current_version}}" - ], - "dialog": true, - "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDUxMjFCMDhFOTczQzE5MjUKUldRbEdUeVhqckFoVVljRDZNZkRQZzIyYTBSZUVmSk1SVUlaTC9OeTk0NDFYUVl1blhWV2VTQi8K" - }, - "allowlist": { - "all": false, - "shell": { - "all": false, - "open": true - } - }, - "bundle": { - "active": true, - "targets": "all", - "identifier": "net.nymtech.vpn", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ] - }, - "security": { - "csp": null - }, - "windows": [ - { - "fullscreen": false, - "resizable": true, - "title": "NymVPN", - "width": 440, - "height": 920 - } - ] - } -} diff --git a/nym-vpn/ui/src/App.tsx b/nym-vpn/ui/src/App.tsx deleted file mode 100644 index 273d7786f5..0000000000 --- a/nym-vpn/ui/src/App.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { RouterProvider } from 'react-router-dom'; -import dayjs from 'dayjs'; -import { useTranslation } from 'react-i18next'; -import router from './router'; -import { MainStateProvider } from './state'; -import './i18n/config'; -import { ThemeSetter } from './ui'; - -function App() { - const { i18n } = useTranslation(); - dayjs.locale(i18n.language); - - return ( - - - - - - ); -} - -export default App; diff --git a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Bold.ttf b/nym-vpn/ui/src/assets/fonts/Lato/Lato-Bold.ttf deleted file mode 100644 index ef5ae3b43e..0000000000 Binary files a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Bold.ttf and /dev/null differ diff --git a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Italic.ttf b/nym-vpn/ui/src/assets/fonts/Lato/Lato-Italic.ttf deleted file mode 100644 index b23256ff53..0000000000 Binary files a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Italic.ttf and /dev/null differ diff --git a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Medium.ttf b/nym-vpn/ui/src/assets/fonts/Lato/Lato-Medium.ttf deleted file mode 100644 index 2c612da2ae..0000000000 Binary files a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Medium.ttf and /dev/null differ diff --git a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Regular.ttf b/nym-vpn/ui/src/assets/fonts/Lato/Lato-Regular.ttf deleted file mode 100644 index adbfc467d2..0000000000 Binary files a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Regular.ttf and /dev/null differ diff --git a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Semibold.ttf b/nym-vpn/ui/src/assets/fonts/Lato/Lato-Semibold.ttf deleted file mode 100644 index 60ac82d65b..0000000000 Binary files a/nym-vpn/ui/src/assets/fonts/Lato/Lato-Semibold.ttf and /dev/null differ diff --git a/nym-vpn/ui/src/assets/fonts/Lato/SIL Open Font License.txt b/nym-vpn/ui/src/assets/fonts/Lato/SIL Open Font License.txt deleted file mode 100644 index f00e6a2714..0000000000 --- a/nym-vpn/ui/src/assets/fonts/Lato/SIL Open Font License.txt +++ /dev/null @@ -1,48 +0,0 @@ -Copyright (c) 2010-2014, Łukasz Dziedzic (dziedzic@typoland.com), -with Reserved Font Name Lato. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. - -The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the copyright statement(s). - -"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. - -"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. - -5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/nym-vpn/ui/src/assets/fonts/MaterialSymbolsOutlined.woff2 b/nym-vpn/ui/src/assets/fonts/MaterialSymbolsOutlined.woff2 deleted file mode 100644 index 93b97c722e..0000000000 Binary files a/nym-vpn/ui/src/assets/fonts/MaterialSymbolsOutlined.woff2 and /dev/null differ diff --git a/nym-vpn/ui/src/constants.ts b/nym-vpn/ui/src/constants.ts deleted file mode 100644 index 3193f21cf6..0000000000 --- a/nym-vpn/ui/src/constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const routes = { - root: '/', - settings: '/settings', - display: '/settings/display', - logs: '/settings/logs', - feedback: '/settings/feedback', - legal: '/settings/legal', - entryNodeLocation: '/entry-node-location', - exitNodeLocation: '/exit-node-location', -} as const; - -export const AppName = 'NymVPN'; -export const ConnectionEvent = 'connection-state'; -export const ProgressEvent = 'connection-progress'; -export const QuickConnectPrefix = 'Fastest'; -// TODO ⚠ keep this value in sync with the one declared in `index.html` -export const DefaultRootFontSize = 12; // in px diff --git a/nym-vpn/ui/src/contexts/index.ts b/nym-vpn/ui/src/contexts/index.ts deleted file mode 100644 index aad1ca831e..0000000000 --- a/nym-vpn/ui/src/contexts/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './main'; diff --git a/nym-vpn/ui/src/contexts/main.ts b/nym-vpn/ui/src/contexts/main.ts deleted file mode 100644 index cc9cb74eaf..0000000000 --- a/nym-vpn/ui/src/contexts/main.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { createContext, useContext } from 'react'; -import { StateAction, initialState } from '../state'; -import { AppState } from '../types'; - -export const MainStateContext = createContext(initialState); -export const MainDispatchContext = - createContext | null>(null); - -export const useMainState = () => { - return useContext(MainStateContext); -}; - -export const useMainDispatch = () => { - return useContext(MainDispatchContext); -}; diff --git a/nym-vpn/ui/src/dev/setup.ts b/nym-vpn/ui/src/dev/setup.ts deleted file mode 100644 index 7bedb656a7..0000000000 --- a/nym-vpn/ui/src/dev/setup.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { mockIPC, mockWindows } from '@tauri-apps/api/mocks'; -import { emit } from '@tauri-apps/api/event'; -import { AppDataFromBackend, ConnectionState, Country } from '../types'; -import { ConnectionEvent } from '../constants'; - -export function mockTauriIPC() { - mockWindows('main'); - - mockIPC(async (cmd, args) => { - console.log(`IPC call mocked "${cmd}"`); - console.log(args); - if (cmd === 'connect') { - await emit(ConnectionEvent, { state: 'Connecting' }); - return new Promise((resolve) => - setTimeout(async () => { - await emit(ConnectionEvent, { state: 'Connected' }); - resolve('Connected'); - }, 2000), - ); - } - if (cmd === 'disconnect') { - await emit(ConnectionEvent, { state: 'Disconnecting' }); - return new Promise((resolve) => - setTimeout(async () => { - await emit(ConnectionEvent, { state: 'Disconnected' }); - resolve('Disconnected'); - }, 2000), - ); - } - if (cmd === 'get_connection_state') { - return new Promise((resolve) => - setTimeout(() => resolve('Disconnected'), 2000), - ); - } - - if (cmd === 'get_node_countries') { - return new Promise((resolve) => - resolve([ - { - name: 'United States', - code: 'US', - }, - { - name: 'France', - code: 'FR', - }, - { - name: 'Switzerland', - code: 'CH', - }, - { - name: 'Germany', - code: 'DE', - }, - ]), - ); - } - - if (cmd === 'get_default_node_location') { - return new Promise((resolve) => - resolve({ - name: 'France', - code: 'FR', - }), - ); - } - - if (cmd === 'set_root_font_size') { - return new Promise((resolve) => resolve()); - } - - if (cmd === 'get_app_data') { - return new Promise((resolve) => - resolve({ - monitoring: false, - autoconnect: false, - killswitch: false, - entry_location_selector: false, - ui_theme: 'Dark', - ui_root_font_size: 12, - vpn_mode: 'TwoHop', - entry_node: { - country: { - name: 'France', - code: 'FR', - }, - id: 'nodeOne', - }, - exit_node: { - country: { - name: 'France', - code: 'FR', - }, - id: 'nodeTwo', - }, - entry_node_location: null, - exit_node_location: null, - }), - ); - } - }); -} diff --git a/nym-vpn/ui/src/i18n/config.ts b/nym-vpn/ui/src/i18n/config.ts deleted file mode 100644 index ffdb86b44c..0000000000 --- a/nym-vpn/ui/src/i18n/config.ts +++ /dev/null @@ -1,31 +0,0 @@ -import i18n from 'i18next'; -import { initReactI18next } from 'react-i18next'; -import common from './en/common.json'; -import home from './en/home.json'; -import settings from './en/settings.json'; -import nodeLocation from './en/node-location.json'; -import backendMessages from './en/backend-messages.json'; - -const defaultNS = 'common'; - -i18n.use(initReactI18next).init({ - lng: 'en', - debug: import.meta.env.DEV, - resources: { - en: { - common, - home, - settings, - nodeLocation, - backendMessages, - }, - }, - ns: ['common', 'home', 'settings', 'nodeLocation', 'backendMessages'], - defaultNS, - - interpolation: { - escapeValue: false, // not needed for react as it escapes by default - }, -}); - -export default i18n; diff --git a/nym-vpn/ui/src/i18n/en/backend-messages.json b/nym-vpn/ui/src/i18n/en/backend-messages.json deleted file mode 100644 index 95dd6222a5..0000000000 --- a/nym-vpn/ui/src/i18n/en/backend-messages.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "connection-progress": { - "Initializing": "Initializing Nym VPN client…", - "InitDone": "Nym VPN client initialized" - } -} diff --git a/nym-vpn/ui/src/i18n/en/common.json b/nym-vpn/ui/src/i18n/en/common.json deleted file mode 100644 index ba22112baf..0000000000 --- a/nym-vpn/ui/src/i18n/en/common.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "connect": "Connect", - "disconnect": "Disconnect", - "first-hop-selection": "First hop selection", - "last-hop-selection": "Last hop selection", - "settings": "Settings", - "display-theme": "Display theme", - "logs": "Logs", - "feedback": "Feedback", - "legal": "Legal", - "ui-mode": { - "dark": "Dark mode", - "light": "Light mode" - } -} diff --git a/nym-vpn/ui/src/i18n/en/home.json b/nym-vpn/ui/src/i18n/en/home.json deleted file mode 100644 index 2403849864..0000000000 --- a/nym-vpn/ui/src/i18n/en/home.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "connect": "Connect", - "disconnect": "Disconnect", - "status": { - "connected": "Connected", - "disconnected": "Disconnected", - "connecting": "Connecting…", - "disconnecting": "Disconnecting…", - "unknown": "Unknown" - }, - "last-hop": "Last hop", - "first-hop": "First hop", - "connecting-message": "Establishing connection", - "connection-time": "Connection time", - "select-network-label": "Select network", - "select-node-title": "Connect to", - "mixnet-mode": { - "title": "5-hop mixnet", - "desc": "Best for payments, emails, messages" - }, - "twohop-mode": { - "title": "2-hop", - "desc": "Best for browsing, streaming, sharing" - }, - "last-node-select": { - "label": "Last hop", - "text": "Quick connect ({{country}})" - } -} diff --git a/nym-vpn/ui/src/i18n/en/node-location.json b/nym-vpn/ui/src/i18n/en/node-location.json deleted file mode 100644 index 9766e025fb..0000000000 --- a/nym-vpn/ui/src/i18n/en/node-location.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "loading": "Loading..", - "none-found": "No results found. Please try another search", - "selected": "Selected", - "search-country": "Search country" -} diff --git a/nym-vpn/ui/src/i18n/en/settings.json b/nym-vpn/ui/src/i18n/en/settings.json deleted file mode 100644 index bc0aaec8e9..0000000000 --- a/nym-vpn/ui/src/i18n/en/settings.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "auto-connect": { - "title": "Auto-connect", - "desc": "Auto connect at app startup" - }, - "entry-selector": { - "title": "Entry location selector", - "desc": "Manually select your entry hop" - }, - "feedback": "Feedback", - "error-reporting": { - "title": "Error reporting", - "desc": "Help us improve NymVPN" - }, - "faq": "FAQ", - "display-theme": "Display theme", - "logs": "Logs", - "legal": "Legal", - "quit": "Quit NymVPN", - "zoom-level": "Zoom level" -} diff --git a/nym-vpn/ui/src/main.tsx b/nym-vpn/ui/src/main.tsx deleted file mode 100644 index f0292032d0..0000000000 --- a/nym-vpn/ui/src/main.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import dayjs from 'dayjs'; -import relativeTime from 'dayjs/plugin/relativeTime'; -import duration from 'dayjs/plugin/duration'; -import App from './App'; -import { mockTauriIPC } from './dev/setup'; -import './styles.css'; - -if (import.meta.env.MODE === 'dev-browser') { - console.log('Running in dev-browser mode. Mocking tauri window and IPCs'); - mockTauriIPC(); -} - -dayjs.extend(relativeTime); -dayjs.extend(duration); - -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - - - , -); diff --git a/nym-vpn/ui/src/pages/Error.tsx b/nym-vpn/ui/src/pages/Error.tsx deleted file mode 100644 index f6b70714d0..0000000000 --- a/nym-vpn/ui/src/pages/Error.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useRouteError } from 'react-router-dom'; - -type routerErrorType = { - statusText: string; - message: string; -}; - -export default function Error() { - const error: routerErrorType = useRouteError() as unknown as routerErrorType; - console.error(error); - - return ( -
-

Oops!

-

Sorry, an unexpected error has occurred.

-

- {error.statusText || error.message} -

-
- ); -} diff --git a/nym-vpn/ui/src/pages/MainLayout.tsx b/nym-vpn/ui/src/pages/MainLayout.tsx deleted file mode 100644 index 86fe1b76bb..0000000000 --- a/nym-vpn/ui/src/pages/MainLayout.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Outlet } from 'react-router-dom'; -import clsx from 'clsx'; -import { TopBar } from '../ui'; - -function MainLayout() { - return ( -
- -
-
- -
-
-
- ); -} - -export default MainLayout; diff --git a/nym-vpn/ui/src/pages/home/ConnectionStatus.tsx b/nym-vpn/ui/src/pages/home/ConnectionStatus.tsx deleted file mode 100644 index 738e26503f..0000000000 --- a/nym-vpn/ui/src/pages/home/ConnectionStatus.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import clsx from 'clsx'; -import { useTranslation } from 'react-i18next'; -import { ConnectionState } from '../../types'; -import { useMainState } from '../../contexts'; -import ConnectionTimer from './ConnectionTimer'; - -function ConnectionStatus() { - const state = useMainState(); - - const { t } = useTranslation('home'); - - const statusBadgeDynStyles = { - Connected: ['text-vert-menthe', 'bg-vert-prasin bg-opacity-10'], - Disconnected: [ - 'bg-cement-feet bg-opacity-10', - 'text-coal-mine-light', - 'dark:bg-oil dark:bg-opacity-15', - 'dark:text-coal-mine-dark', - ], - Connecting: [ - 'bg-cement-feet bg-opacity-10', - 'text-baltic-sea', - 'dark:bg-oil dark:bg-opacity-15', - 'dark:text-white', - ], - Disconnecting: [ - 'bg-cement-feet bg-opacity-10', - 'text-baltic-sea', - 'dark:bg-oil dark:bg-opacity-15', - 'dark:text-white', - ], - Unknown: [ - 'bg-cement-feet bg-opacity-10', - 'text-coal-mine-light', - 'dark:bg-oil dark:bg-opacity-15', - 'dark:text-coal-mine-dark', - ], - }; - - const getStatusText = (state: ConnectionState) => { - switch (state) { - case 'Connected': - return t('status.connected'); - case 'Disconnected': - return t('status.disconnected'); - case 'Connecting': - return t('status.connecting'); - case 'Disconnecting': - return t('status.disconnecting'); - case 'Unknown': - return t('status.unknown'); - } - }; - return ( -
-
-
- {getStatusText(state.state)} -
-
-
- {state.loading && state.progressMessages.length > 0 && !state.error && ( -
-

- {t( - `connection-progress.${ - state.progressMessages[state.progressMessages.length - 1] - }`, - { - ns: 'backendMessages', - }, - )} -

-
- )} - {state.state === 'Connected' && } - {state.error && ( -
-

{state.error}

-
- )} -
-
- ); -} - -export default ConnectionStatus; diff --git a/nym-vpn/ui/src/pages/home/ConnectionTimer.tsx b/nym-vpn/ui/src/pages/home/ConnectionTimer.tsx deleted file mode 100644 index a06f0cdd41..0000000000 --- a/nym-vpn/ui/src/pages/home/ConnectionTimer.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { useEffect, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import dayjs from 'dayjs'; -import { useMainState } from '../../contexts'; - -function ConnectionTimer() { - const { sessionStartDate } = useMainState(); - const [connectionTime, setConnectionTime] = useState('00:00:00'); - const { t } = useTranslation('home'); - - useEffect(() => { - if (!sessionStartDate) { - return; - } - - const elapsed = dayjs.duration(dayjs().diff(sessionStartDate)); - setConnectionTime(elapsed.format('HH:mm:ss')); - - const interval = setInterval(() => { - const elapsed = dayjs.duration(dayjs().diff(sessionStartDate)); - setConnectionTime(elapsed.format('HH:mm:ss')); - }, 500); - - return () => { - clearInterval(interval); - }; - }, [sessionStartDate]); - - return ( -
-

- {t('connection-time')} -

-

- {connectionTime} -

-
- ); -} - -export default ConnectionTimer; diff --git a/nym-vpn/ui/src/pages/home/Home.tsx b/nym-vpn/ui/src/pages/home/Home.tsx deleted file mode 100644 index 3841adbf71..0000000000 --- a/nym-vpn/ui/src/pages/home/Home.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { useCallback } from 'react'; -import { useTranslation } from 'react-i18next'; -import { invoke } from '@tauri-apps/api'; -import clsx from 'clsx'; -import { Button } from '@mui/base'; -import { useNavigate } from 'react-router-dom'; -import { useMainDispatch, useMainState } from '../../contexts'; -import { CmdError, StateDispatch } from '../../types'; -import { routes } from '../../constants'; -import NetworkModeSelect from './NetworkModeSelect'; -import ConnectionStatus from './ConnectionStatus'; -import HopSelect from './HopSelect'; - -function Home() { - const { - state, - loading, - entryNodeLocation, - exitNodeLocation, - entrySelector, - defaultNodeLocation, - } = useMainState(); - const dispatch = useMainDispatch() as StateDispatch; - const navigate = useNavigate(); - const { t } = useTranslation('home'); - - const handleClick = async () => { - dispatch({ type: 'disconnect' }); - if (state === 'Connected') { - invoke('disconnect') - .then((result) => { - console.log('disconnect result'); - console.log(result); - }) - .catch((e: CmdError) => { - console.warn(`backend error: ${e.source} - ${e.message}`); - dispatch({ type: 'set-error', error: e.message }); - }); - } else if (state === 'Disconnected') { - dispatch({ type: 'connect' }); - invoke('connect') - .then((result) => { - console.log('connect result'); - console.log(result); - }) - .catch((e: CmdError) => { - console.warn(`backend error: ${e.source} - ${e.message}`); - dispatch({ type: 'set-error', error: e.message }); - }); - } - }; - - const getButtonText = useCallback(() => { - switch (state) { - case 'Connected': - return t('disconnect'); - case 'Disconnected': - return t('connect'); - case 'Connecting': - return autorenew; - case 'Disconnecting': - return autorenew; - case 'Unknown': - return t('status.unknown'); - } - }, [state, t]); - - return ( -
-
- -
-
-
- -
-
- {t('select-node-title')} -
-
- {entrySelector && ( - { - if (state === 'Disconnected') { - navigate(routes.entryNodeLocation); - } - }} - nodeHop="entry" - /> - )} - { - if (state === 'Disconnected') { - navigate(routes.exitNodeLocation); - } - }} - nodeHop="exit" - /> -
-
-
- -
-
- ); -} - -export default Home; diff --git a/nym-vpn/ui/src/pages/home/HopSelect.tsx b/nym-vpn/ui/src/pages/home/HopSelect.tsx deleted file mode 100644 index 6f3611a9a3..0000000000 --- a/nym-vpn/ui/src/pages/home/HopSelect.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { useTranslation } from 'react-i18next'; -import clsx from 'clsx'; -import { Country, NodeHop } from '../../types'; -import { useMainState } from '../../contexts'; - -interface HopSelectProps { - country: Country; - onClick: () => void; - nodeHop: NodeHop; -} - -export default function HopSelect({ - nodeHop, - country, - onClick, -}: HopSelectProps) { - const { state } = useMainState(); - const { t } = useTranslation('home'); - - return ( -
-
- {nodeHop === 'entry' ? t('first-hop') : t('last-hop')} -
-
- {country.code} -
{country.name}
-
- - arrow_right - -
- ); -} diff --git a/nym-vpn/ui/src/pages/home/NetworkModeSelect.tsx b/nym-vpn/ui/src/pages/home/NetworkModeSelect.tsx deleted file mode 100644 index 9967ad447c..0000000000 --- a/nym-vpn/ui/src/pages/home/NetworkModeSelect.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { useEffect, useState } from 'react'; -import { RadioGroup } from '@headlessui/react'; -import { invoke } from '@tauri-apps/api'; -import clsx from 'clsx'; -import { useTranslation } from 'react-i18next'; -import { useMainDispatch, useMainState } from '../../contexts'; -import { StateDispatch, VpnMode } from '../../types'; - -type VpnModeOption = { name: VpnMode; title: string; desc: string }; - -function NetworkModeSelect() { - const state = useMainState(); - const dispatch = useMainDispatch() as StateDispatch; - const [selected, setSelected] = useState(state.vpnMode); - const [loading, setLoading] = useState(false); - - const { t } = useTranslation('home'); - - useEffect(() => { - if (state.vpnMode !== selected) { - setSelected(state.vpnMode); - } - }, [state.vpnMode, selected]); - - const handleNetworkModeChange = async (value: VpnMode) => { - if (state.state === 'Disconnected' && value !== state.vpnMode) { - setLoading(true); - try { - await invoke('set_vpn_mode', { mode: value }); - dispatch({ type: 'set-vpn-mode', mode: value }); - } catch (e) { - console.log(e); - } finally { - setLoading(false); - } - } - }; - - const vpnModes: VpnModeOption[] = [ - { - name: 'Mixnet', - title: t('mixnet-mode.title'), - desc: t('mixnet-mode.desc'), - }, - { - name: 'TwoHop', - title: t('twohop-mode.title'), - desc: t('twohop-mode.desc'), - }, - ]; - - const handleSelect = (value: VpnMode) => { - setSelected(value); - handleNetworkModeChange(value); - }; - - return ( -
- - - {t('select-network-label')} - -
- {vpnModes.map((mode) => ( - - clsx([ - 'bg-white dark:bg-baltic-sea-jaguar relative flex rounded-lg px-5 py-2 focus:outline-none', - (state.state !== 'Disconnected' || loading) && - 'cursor-not-allowed', - checked && - 'ring-0 ring-melon ring-offset-2 ring-offset-melon', - state.state === 'Disconnected' && 'cursor-pointer', - ]) - } - disabled={state.state !== 'Disconnected' || loading} - > - {({ checked }) => { - return ( -
- {checked ? ( - - radio_button_checked - - ) : ( - - radio_button_unchecked - - )} -
-
- - {mode.title} - - - {mode.desc} - -
-
-
- ); - }} -
- ))} -
-
-
- ); -} - -export default NetworkModeSelect; diff --git a/nym-vpn/ui/src/pages/home/index.ts b/nym-vpn/ui/src/pages/home/index.ts deleted file mode 100644 index c2d92a5746..0000000000 --- a/nym-vpn/ui/src/pages/home/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Home } from './Home'; diff --git a/nym-vpn/ui/src/pages/index.ts b/nym-vpn/ui/src/pages/index.ts deleted file mode 100644 index a948bb4bd9..0000000000 --- a/nym-vpn/ui/src/pages/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './home'; -export * from './settings'; -export { default as MainLayout } from './MainLayout'; -export * from './location'; -export { default as Error } from './Error'; diff --git a/nym-vpn/ui/src/pages/location/CountryList.tsx b/nym-vpn/ui/src/pages/location/CountryList.tsx deleted file mode 100644 index 8aa738e0d4..0000000000 --- a/nym-vpn/ui/src/pages/location/CountryList.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { useTranslation } from 'react-i18next'; -import clsx from 'clsx'; -import { Country } from '../../types'; - -interface CountryListProps { - countries: Country[]; - onClick: (name: string, code: string) => void; - isSelected: (code: string) => boolean; -} - -export default function CountryList({ - countries, - onClick, - isSelected, -}: CountryListProps) { - const { t } = useTranslation('nodeLocation'); - - return ( -
    - {countries && countries.length > 0 ? ( - countries.map((country) => ( -
  • -
    onClick(country.name, country.code)} - className={clsx([ - 'flex flex-row justify-between', - 'hover:bg-gun-powder hover:bg-opacity-10', - 'dark:hover:bg-laughing-jack dark:hover:bg-opacity-10', - 'rounded-lg cursor-pointer px-3 py-1', - isSelected(country.code) && - 'bg-gun-powder dark:bg-laughing-jack bg-opacity-15 dark:bg-opacity-15', - ])} - onClick={() => onClick(country.name, country.code)} - > -
    - {country.code} -
    - {country.name} -
    -
    -
    - {isSelected(country.code) && t('selected')} -
    -
    -
  • - )) - ) : ( -

    {t('none-found')}

    - )} -
- ); -} diff --git a/nym-vpn/ui/src/pages/location/NodeLocation.tsx b/nym-vpn/ui/src/pages/location/NodeLocation.tsx deleted file mode 100644 index 01d0ecfbfc..0000000000 --- a/nym-vpn/ui/src/pages/location/NodeLocation.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { useTranslation } from 'react-i18next'; -import { useEffect, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { invoke } from '@tauri-apps/api'; -import { useMainDispatch, useMainState } from '../../contexts'; -import { Country, InputEvent, NodeHop, StateDispatch } from '../../types'; -import { routes } from '../../constants'; -import SearchBox from './SearchBox'; -import CountryList from './CountryList'; -import QuickConnect from './QuickConnect'; - -function NodeLocation({ node }: { node: NodeHop }) { - const { t } = useTranslation('nodeLocation'); - const { entryNodeLocation, exitNodeLocation, countries } = useMainState(); - const [search, setSearch] = useState(''); - const [foundCountries, setFoundCountries] = useState(countries); - - const dispatch = useMainDispatch() as StateDispatch; - - const navigate = useNavigate(); - - //request backend to update countries cache - useEffect(() => { - const getNodeCountries = async () => { - const countries = await invoke('get_node_countries'); - dispatch({ type: 'set-countries', countries }); - }; - getNodeCountries().catch(console.error); - }, [dispatch]); - - const filter = (e: InputEvent) => { - const keyword = e.target.value; - if (keyword !== '') { - const results = countries.filter((country) => { - return country.name.toLowerCase().startsWith(keyword.toLowerCase()); - // Use the toLowerCase() method to make it case-insensitive - }); - setFoundCountries(results); - } else { - setFoundCountries(countries); - // If the text field is empty, show all users - } - setSearch(keyword); - }; - - const isCountrySelected = (code: string): boolean => { - return node === 'entry' - ? entryNodeLocation?.code === code - : exitNodeLocation?.code === code; - }; - - const handleCountrySelection = async (name: string, code: string) => { - try { - await invoke('set_node_location', { - nodeType: node === 'entry' ? 'Entry' : 'Exit', - country: { name, code }, - }); - dispatch({ - type: 'set-node-location', - payload: { hop: node, country: { name, code } }, - }); - } catch (e) { - console.log(e); - } - navigate(routes.root); - }; - - return ( -
-
- - - - -
-
- ); -} - -export default NodeLocation; diff --git a/nym-vpn/ui/src/pages/location/QuickConnect.tsx b/nym-vpn/ui/src/pages/location/QuickConnect.tsx deleted file mode 100644 index 680e0d5714..0000000000 --- a/nym-vpn/ui/src/pages/location/QuickConnect.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { useMainState } from '../../contexts'; -import { QuickConnectPrefix } from '../../constants'; - -interface QuickConnectProps { - onClick: (name: string, code: string) => void; -} - -export default function QuickConnect({ onClick }: QuickConnectProps) { - const { defaultNodeLocation } = useMainState(); - - return ( -
- onClick(defaultNodeLocation.name, defaultNodeLocation.code) - } - className="flex px-1 flex-row items-center w-full py-5 cursor-pointer" - onClick={() => - onClick(defaultNodeLocation.name, defaultNodeLocation.code) - } - > - bolt -
{`${QuickConnectPrefix} (${defaultNodeLocation.name})`}
-
- ); -} diff --git a/nym-vpn/ui/src/pages/location/SearchBox.tsx b/nym-vpn/ui/src/pages/location/SearchBox.tsx deleted file mode 100644 index 2918b796a7..0000000000 --- a/nym-vpn/ui/src/pages/location/SearchBox.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import clsx from 'clsx'; -import { InputEvent } from '../../types'; - -interface SearchProps { - value: string; - onChange: (e: InputEvent) => void; - placeholder: string; -} - -export default function SearchBox({ - value, - onChange, - placeholder, -}: SearchProps) { - return ( -
- -
- Search -
- - search - -
- ); -} diff --git a/nym-vpn/ui/src/pages/location/index.ts b/nym-vpn/ui/src/pages/location/index.ts deleted file mode 100644 index 991fa94860..0000000000 --- a/nym-vpn/ui/src/pages/location/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as NodeLocation } from './NodeLocation'; diff --git a/nym-vpn/ui/src/pages/settings/Settings.tsx b/nym-vpn/ui/src/pages/settings/Settings.tsx deleted file mode 100644 index ce42647846..0000000000 --- a/nym-vpn/ui/src/pages/settings/Settings.tsx +++ /dev/null @@ -1,228 +0,0 @@ -import { useEffect, useState } from 'react'; -import clsx from 'clsx'; -import { invoke } from '@tauri-apps/api'; -import { Switch } from '@headlessui/react'; -import { useTranslation } from 'react-i18next'; -import { useNavigate } from 'react-router-dom'; -import { routes } from '../../constants'; -import { useMainDispatch, useMainState } from '../../contexts'; -import { StateDispatch } from '../../types'; -import SettingsGroup from './SettingsGroup'; - -function Settings() { - const state = useMainState(); - const navigate = useNavigate(); - const dispatch = useMainDispatch() as StateDispatch; - const { t } = useTranslation('settings'); - - const [entrySelector, setEntrySelector] = useState(state.entrySelector); - const [autoConnect, setAutoConnect] = useState(state.autoConnect); - const [monitoring, setMonitoring] = useState(state.monitoring); - - useEffect(() => { - setEntrySelector(state.entrySelector); - setAutoConnect(state.autoConnect); - setMonitoring(state.monitoring); - }, [state]); - - const handleEntrySelectorChange = async () => { - const isSelected = !state.entrySelector; - dispatch({ type: 'set-entry-selector', entrySelector: isSelected }); - invoke('set_entry_location_selector', { - entrySelector: isSelected, - }).catch((e) => { - console.log(e); - }); - }; - - const handleAutoConnectChanged = async () => { - const isSelected = !state.autoConnect; - dispatch({ type: 'set-auto-connect', autoConnect: isSelected }); - invoke('set_auto_connect', { autoConnect: isSelected }).catch((e) => { - console.log(e); - }); - }; - - const handleMonitoringChanged = async () => { - const isSelected = !state.monitoring; - dispatch({ type: 'set-monitoring', monitoring: isSelected }); - invoke('set_monitoring', { monitoring: isSelected }).catch((e) => { - console.log(e); - }); - }; - - return ( -
- - - - ), - }, - { - title: t('entry-selector.title'), - desc: t('entry-selector.desc'), - leadingIcon: 'looks_two', - trailing: ( - - - - ), - }, - ]} - /> - { - navigate(routes.display); - }, - trailing: ( -
- arrow_right -
- ), - }, - ]} - /> - { - navigate(routes.logs); - }, - trailing: ( -
- arrow_right -
- ), - disabled: true, - }, - ]} - /> - { - navigate(routes.feedback); - }, - trailing: ( -
- arrow_right -
- ), - disabled: true, - }, - { - title: t('error-reporting.title'), - desc: t('error-reporting.desc'), - leadingIcon: 'error', - disabled: true, - trailing: ( - - - - ), - }, - { - title: t('faq'), - leadingIcon: 'help', - disabled: true, - trailing: ( -
launch
- ), - }, - ]} - /> - { - navigate(routes.legal); - }, - disabled: true, - trailing: ( -
- arrow_right -
- ), - }, - ]} - /> - { - //TODO shutdown gracefully - }, - disabled: true, - }, - ]} - /> -
- Version {state.version} -
-
- ); -} - -export default Settings; diff --git a/nym-vpn/ui/src/pages/settings/SettingsGroup.tsx b/nym-vpn/ui/src/pages/settings/SettingsGroup.tsx deleted file mode 100644 index fb4400aee0..0000000000 --- a/nym-vpn/ui/src/pages/settings/SettingsGroup.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import clsx from 'clsx'; -import { ReactNode } from 'react'; -import { RadioGroup } from '@headlessui/react'; - -type Setting = { - title: string; - leadingIcon?: string; - desc?: string; - onClick?: () => void; - trailing?: ReactNode; - disabled?: boolean; -}; - -interface Props { - settings: Setting[]; -} - -function SettingsGroup({ settings }: Props) { - return ( - - {settings.map((setting, index) => ( - -
- {setting.leadingIcon && ( - - {setting.leadingIcon} - - )} -
-
- - {setting.title} - - - {setting.desc} - -
-
-
{setting.trailing}
-
-
- ))} -
- ); -} - -export default SettingsGroup; diff --git a/nym-vpn/ui/src/pages/settings/SettingsLayout.tsx b/nym-vpn/ui/src/pages/settings/SettingsLayout.tsx deleted file mode 100644 index be3824d410..0000000000 --- a/nym-vpn/ui/src/pages/settings/SettingsLayout.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Outlet } from 'react-router-dom'; - -function SettingsLayout() { - return ; -} - -export default SettingsLayout; diff --git a/nym-vpn/ui/src/pages/settings/display/Display.tsx b/nym-vpn/ui/src/pages/settings/display/Display.tsx deleted file mode 100644 index 375557ddbc..0000000000 --- a/nym-vpn/ui/src/pages/settings/display/Display.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { useEffect, useState } from 'react'; -import clsx from 'clsx'; -import { invoke } from '@tauri-apps/api'; -import { Switch } from '@headlessui/react'; -import { useTranslation } from 'react-i18next'; -import { useMainDispatch, useMainState } from '../../../contexts'; -import { StateDispatch } from '../../../types'; -import UiScaler from './UiScaler'; - -function Display() { - const state = useMainState(); - const dispatch = useMainDispatch() as StateDispatch; - const { t } = useTranslation(); - - const [darkModeEnabled, setDarkModeEnabled] = useState( - state.uiTheme === 'Dark', - ); - - useEffect(() => { - setDarkModeEnabled(state.uiTheme === 'Dark'); - }, [state]); - - const handleThemeChange = async (darkMode: boolean) => { - if (darkMode && state.uiTheme === 'Light') { - dispatch({ type: 'set-ui-theme', theme: 'Dark' }); - } else if (!darkMode && state.uiTheme === 'Dark') { - dispatch({ type: 'set-ui-theme', theme: 'Light' }); - } - invoke('set_ui_theme', { theme: darkMode ? 'Dark' : 'Light' }).catch( - (e) => { - console.log(e); - }, - ); - }; - - return ( -
-
-

- {t('ui-mode.dark')} -

- - Dark mode - - -
- -
- ); -} - -export default Display; diff --git a/nym-vpn/ui/src/pages/settings/display/UiScaler.tsx b/nym-vpn/ui/src/pages/settings/display/UiScaler.tsx deleted file mode 100644 index 7781eceeba..0000000000 --- a/nym-vpn/ui/src/pages/settings/display/UiScaler.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { ChangeEvent, useEffect, useState } from 'react'; -import { invoke } from '@tauri-apps/api'; -import clsx from 'clsx'; -import { useTranslation } from 'react-i18next'; -import { useMainDispatch, useMainState } from '../../../contexts'; -import { CmdError, StateDispatch } from '../../../types'; - -function UiScaler() { - const [slideValue, setSlideValue] = useState(12); - const dispatch = useMainDispatch() as StateDispatch; - const { rootFontSize } = useMainState(); - const { t } = useTranslation('settings'); - - useEffect(() => { - setSlideValue(rootFontSize); - }, [rootFontSize]); - - const handleChange = (e: ChangeEvent) => { - setSlideValue(parseInt(e.target.value)); - dispatch({ type: 'set-root-font-size', size: slideValue }); - }; - - const setNewFontSize = () => { - document.documentElement.style.fontSize = `${slideValue}px`; - dispatch({ type: 'set-root-font-size', size: slideValue }); - invoke('set_root_font_size', { size: slideValue }).catch((e: CmdError) => { - console.warn(`backend error: ${e.source} - ${e.message}`); - }); - }; - - return ( -
-

- {`${t('zoom-level')}: ${slideValue}`} -

- -
- ); -} - -export default UiScaler; diff --git a/nym-vpn/ui/src/pages/settings/display/index.ts b/nym-vpn/ui/src/pages/settings/display/index.ts deleted file mode 100644 index fa2dc562ff..0000000000 --- a/nym-vpn/ui/src/pages/settings/display/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Display } from './Display'; diff --git a/nym-vpn/ui/src/pages/settings/feedback/Feedback.tsx b/nym-vpn/ui/src/pages/settings/feedback/Feedback.tsx deleted file mode 100644 index e6a9d5cd81..0000000000 --- a/nym-vpn/ui/src/pages/settings/feedback/Feedback.tsx +++ /dev/null @@ -1,9 +0,0 @@ -function Feedback() { - return ( -
-
-
- ); -} - -export default Feedback; diff --git a/nym-vpn/ui/src/pages/settings/feedback/index.ts b/nym-vpn/ui/src/pages/settings/feedback/index.ts deleted file mode 100644 index 4a06655c88..0000000000 --- a/nym-vpn/ui/src/pages/settings/feedback/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Feedback } from './Feedback'; diff --git a/nym-vpn/ui/src/pages/settings/index.ts b/nym-vpn/ui/src/pages/settings/index.ts deleted file mode 100644 index 65ba8ccb8d..0000000000 --- a/nym-vpn/ui/src/pages/settings/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { default as Settings } from './Settings'; -export { default as SettingsLayout } from './SettingsLayout'; -export * from './display'; -export * from './feedback'; -export * from './legal'; diff --git a/nym-vpn/ui/src/pages/settings/legal/Legal.tsx b/nym-vpn/ui/src/pages/settings/legal/Legal.tsx deleted file mode 100644 index f3d88a319d..0000000000 --- a/nym-vpn/ui/src/pages/settings/legal/Legal.tsx +++ /dev/null @@ -1,9 +0,0 @@ -function Legal() { - return ( -
-
-
- ); -} - -export default Legal; diff --git a/nym-vpn/ui/src/pages/settings/legal/index.ts b/nym-vpn/ui/src/pages/settings/legal/index.ts deleted file mode 100644 index 77d3ce9eb2..0000000000 --- a/nym-vpn/ui/src/pages/settings/legal/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Legal } from './Legal'; diff --git a/nym-vpn/ui/src/router.tsx b/nym-vpn/ui/src/router.tsx deleted file mode 100644 index 221beb378a..0000000000 --- a/nym-vpn/ui/src/router.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { createBrowserRouter } from 'react-router-dom'; -import { - Display, - Error, - Feedback, - Home, - Legal, - MainLayout, - NodeLocation, - Settings, - SettingsLayout, -} from './pages'; -import { routes } from './constants'; - -const router = createBrowserRouter([ - { - path: routes.root, - element: , - children: [ - { - element: , - errorElement: , - index: true, - }, - { - path: routes.settings, - element: , - errorElement: , - children: [ - { - element: , - errorElement: , - index: true, - }, - { - path: routes.display, - element: , - errorElement: , - }, - { - path: routes.feedback, - element: , - errorElement: , - }, - { - path: routes.legal, - element: , - errorElement: , - }, - ], - }, - { - path: routes.entryNodeLocation, - // eslint-disable-next-line react/jsx-no-undef - element: , - errorElement: , - }, - { - path: routes.exitNodeLocation, - element: , - errorElement: , - }, - ], - }, -]); - -export default router; diff --git a/nym-vpn/ui/src/state/index.ts b/nym-vpn/ui/src/state/index.ts deleted file mode 100644 index c48bb0ca2d..0000000000 --- a/nym-vpn/ui/src/state/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './main'; -export * from './provider'; diff --git a/nym-vpn/ui/src/state/main.ts b/nym-vpn/ui/src/state/main.ts deleted file mode 100644 index 4c8a6d1fb9..0000000000 --- a/nym-vpn/ui/src/state/main.ts +++ /dev/null @@ -1,180 +0,0 @@ -import dayjs from 'dayjs'; -import { - AppState, - ConnectProgressMsg, - ConnectionState, - Country, - NodeHop, - UiTheme, - VpnMode, -} from '../types'; - -export type StateAction = - | { type: 'set-partial-state'; partialState: Partial } - | { type: 'change-connection-state'; state: ConnectionState } - | { type: 'set-vpn-mode'; mode: VpnMode } - | { type: 'set-entry-selector'; entrySelector: boolean } - | { type: 'set-error'; error: string } - | { type: 'reset-error' } - | { type: 'new-progress-message'; message: ConnectProgressMsg } - | { type: 'connect' } - | { type: 'disconnect' } - | { type: 'set-version'; version: string } - | { type: 'set-connected'; startTime: number } - | { type: 'set-connection-start-time'; startTime?: number | null } - | { type: 'set-disconnected' } - | { type: 'set-auto-connect'; autoConnect: boolean } - | { type: 'set-monitoring'; monitoring: boolean } - | { type: 'reset' } - | { type: 'set-ui-theme'; theme: UiTheme } - | { type: 'set-countries'; countries: Country[] } - | { type: 'set-node-location'; payload: { hop: NodeHop; country: Country } } - | { type: 'set-default-node-location'; country: Country } - | { type: 'set-root-font-size'; size: number }; - -export const initialState: AppState = { - state: 'Disconnected', - version: null, - loading: false, - vpnMode: 'TwoHop', - entrySelector: false, - tunnel: { name: 'nym', id: 'nym' }, - uiTheme: 'Light', - progressMessages: [], - autoConnect: false, - monitoring: false, - entryNodeLocation: null, - exitNodeLocation: null, - defaultNodeLocation: { - name: 'France', - code: 'FR', - }, - countries: [], - rootFontSize: 12, -}; - -export function reducer(state: AppState, action: StateAction): AppState { - switch (action.type) { - case 'set-node-location': - if (action.payload.hop === 'entry') { - return { - ...state, - entryNodeLocation: action.payload.country, - }; - } - return { - ...state, - exitNodeLocation: action.payload.country, - }; - case 'set-vpn-mode': - return { - ...state, - vpnMode: action.mode, - }; - case 'set-entry-selector': - return { - ...state, - entrySelector: action.entrySelector, - }; - case 'set-auto-connect': - return { - ...state, - autoConnect: action.autoConnect, - }; - case 'set-monitoring': - return { - ...state, - monitoring: action.monitoring, - }; - case 'set-countries': - return { - ...state, - countries: action.countries, - }; - case 'set-partial-state': { - return { ...state, ...action.partialState }; - } - case 'change-connection-state': { - console.log( - `__REDUCER [change-connection-state] changing connection state to ${action.state}`, - ); - if (action.state === state.state) { - return state; - } - return { - ...state, - state: action.state, - loading: - action.state === 'Connecting' || action.state === 'Disconnecting', - }; - } - case 'connect': { - console.log( - `__REDUCER [connect] changing connection state to Connecting`, - ); - return { ...state, state: 'Connecting', loading: true }; - } - case 'disconnect': { - return { ...state, state: 'Disconnecting', loading: true }; - } - case 'set-version': - return { - ...state, - version: action.version, - }; - case 'set-connected': { - console.log( - `__REDUCER [set-connected] changing connection state to Connected`, - ); - return { - ...state, - state: 'Connected', - loading: false, - progressMessages: [], - sessionStartDate: dayjs.unix(action.startTime), - }; - } - case 'set-disconnected': { - return { - ...state, - state: 'Disconnected', - loading: false, - progressMessages: [], - sessionStartDate: null, - }; - } - case 'set-connection-start-time': - return { - ...state, - sessionStartDate: - (action.startTime && dayjs.unix(action.startTime)) || null, - }; - case 'set-error': - return { ...state, error: action.error }; - case 'reset-error': - return { ...state, error: null }; - case 'new-progress-message': - return { - ...state, - progressMessages: [...state.progressMessages, action.message], - }; - case 'set-ui-theme': - return { - ...state, - uiTheme: action.theme, - }; - case 'set-default-node-location': - return { - ...state, - defaultNodeLocation: action.country, - }; - case 'set-root-font-size': - return { - ...state, - rootFontSize: action.size, - }; - - case 'reset': - return initialState; - } -} diff --git a/nym-vpn/ui/src/state/provider.tsx b/nym-vpn/ui/src/state/provider.tsx deleted file mode 100644 index 482ea353bd..0000000000 --- a/nym-vpn/ui/src/state/provider.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import React, { useEffect, useReducer } from 'react'; -import { invoke } from '@tauri-apps/api'; -import { getVersion } from '@tauri-apps/api/app'; -import { MainDispatchContext, MainStateContext } from '../contexts'; -import { - AppDataFromBackend, - CmdError, - ConnectionState, - Country, -} from '../types'; -import { DefaultRootFontSize } from '../constants'; -import { initialState, reducer } from './main'; -import { useTauriEvents } from './useTauriEvents'; - -type Props = { - children?: React.ReactNode; -}; - -export function MainStateProvider({ children }: Props) { - const [state, dispatch] = useReducer(reducer, initialState); - - useTauriEvents(dispatch); - - // initialize connection state - useEffect(() => { - const getInitialConnectionState = async () => { - return await invoke('get_connection_state'); - }; - - // initialize session start time - const getSessionStartTime = async () => { - return await invoke('get_connection_start_time'); - }; - - // init country list - const getCountries = async () => { - return await invoke('get_node_countries'); - }; - - // init default node location - const getDefaultNodeLocation = async () => { - return await invoke('get_default_node_location'); - }; - - getVersion() - .then((version) => - dispatch({ - type: 'set-version', - version, - }), - ) - .catch((e) => { - console.warn(`command [set-version] returned an error: ${e}`); - }); - - getInitialConnectionState() - .then((state) => dispatch({ type: 'change-connection-state', state })) - .catch((e: CmdError) => { - console.warn( - `command [get_connection_state] returned an error: ${e.source} - ${e.message}`, - ); - }); - - getSessionStartTime() - .then((startTime) => - dispatch({ type: 'set-connection-start-time', startTime }), - ) - .catch((e: CmdError) => { - console.warn( - `command [get_connection_start_time] returned an error: ${e.source} - ${e.message}`, - ); - }); - - getCountries() - .then((countries) => { - dispatch({ type: 'set-countries', countries }); - }) - .catch((e: CmdError) => { - console.warn( - `command [get_node_countries] returned an error: ${e.source} - ${e.message}`, - ); - }); - - getDefaultNodeLocation() - .then((country) => { - dispatch({ type: 'set-default-node-location', country }); - }) - .catch((e: CmdError) => { - console.warn( - `command [get_default_node_location] returned an error: ${e.source} - ${e.message}`, - ); - }); - }, []); - - // get saved on disk app data and restore state from it - useEffect(() => { - const getAppData = async () => { - return await invoke('get_app_data'); - }; - - getAppData() - .then((data) => { - console.log('app data read from disk:'); - console.log(data); - - if (data.ui_root_font_size) { - document.documentElement.style.fontSize = `${data.ui_root_font_size}px`; - } - - const partialState: Partial = { - entrySelector: data.entry_location_selector || false, - uiTheme: data.ui_theme || 'Light', - vpnMode: data.vpn_mode || 'TwoHop', - autoConnect: data.autoconnect || false, - monitoring: data.monitoring || false, - rootFontSize: data.ui_root_font_size || DefaultRootFontSize, - }; - if (data.entry_node_location) { - partialState.entryNodeLocation = data.entry_node_location; - } - if (data.exit_node_location) { - partialState.exitNodeLocation = data.exit_node_location; - } - dispatch({ - type: 'set-partial-state', - partialState, - }); - }) - .catch((e: CmdError) => { - console.warn( - `command [get_app_data] returned an error: ${e.source} - ${e.message}`, - ); - }); - }, []); - - return ( - - - {children} - - - ); -} diff --git a/nym-vpn/ui/src/state/useTauriEvents.ts b/nym-vpn/ui/src/state/useTauriEvents.ts deleted file mode 100644 index 9c22566c1b..0000000000 --- a/nym-vpn/ui/src/state/useTauriEvents.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { useCallback, useEffect } from 'react'; -import { listen } from '@tauri-apps/api/event'; -import dayjs from 'dayjs'; -import { - ConnectionEventPayload, - ProgressEventPayload, - StateDispatch, -} from '../types'; -import { ConnectionEvent, ProgressEvent } from '../constants'; - -function handleError(dispatch: StateDispatch, error?: string | null) { - if (!error) { - dispatch({ type: 'reset-error' }); - return; - } - console.warn(`received backend error: ${error}`); - dispatch({ type: 'set-error', error }); -} - -export function useTauriEvents(dispatch: StateDispatch) { - const registerStateListener = useCallback(() => { - return listen(ConnectionEvent, (event) => { - console.log( - `received event ${event.event}, state: ${event.payload.state}`, - ); - switch (event.payload.state) { - case 'Connected': - dispatch({ - type: 'set-connected', - startTime: event.payload.start_time || dayjs().unix(), - }); - handleError(dispatch, event.payload.error); - break; - case 'Disconnected': - dispatch({ type: 'set-disconnected' }); - handleError(dispatch, event.payload.error); - break; - case 'Connecting': - dispatch({ type: 'change-connection-state', state: 'Connecting' }); - handleError(dispatch, event.payload.error); - break; - case 'Disconnecting': - dispatch({ type: 'change-connection-state', state: 'Disconnecting' }); - handleError(dispatch, event.payload.error); - break; - case 'Unknown': - dispatch({ type: 'change-connection-state', state: 'Unknown' }); - handleError(dispatch, event.payload.error); - break; - } - }); - }, [dispatch]); - - const registerProgressListener = useCallback(() => { - return listen(ProgressEvent, (event) => { - console.log( - `received event ${event.event}, message: ${event.payload.key}`, - ); - dispatch({ - type: 'new-progress-message', - message: event.payload.key, - }); - }); - }, [dispatch]); - - // register/unregister event listener - useEffect(() => { - const unlistenState = registerStateListener(); - const unlistenProgress = registerProgressListener(); - - return () => { - unlistenState.then((f) => f()); - unlistenProgress.then((f) => f()); - }; - }, [registerStateListener, registerProgressListener]); -} diff --git a/nym-vpn/ui/src/styles.css b/nym-vpn/ui/src/styles.css deleted file mode 100644 index 50519805b2..0000000000 --- a/nym-vpn/ui/src/styles.css +++ /dev/null @@ -1,49 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - /* Regular */ - @font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 400; - src: url(assets/fonts/Lato/Lato-Regular.ttf) format('truetype'); - } - /* Regular italic */ - @font-face { - font-family: 'Lato'; - font-style: italic; - font-weight: 400; - src: url(assets/fonts/Lato/Lato-Italic.ttf) format('truetype'); - } - /* Medium */ - @font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 500; - src: url(assets/fonts/Lato/Lato-Medium.ttf) format('truetype'); - } - /* Semi-bold */ - @font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 600; - src: url(assets/fonts/Lato/Lato-Semibold.ttf) format('truetype'); - } - /* Bold */ - @font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 700; - src: url(assets/fonts/Lato/Lato-Bold.ttf) format('truetype'); - } - - /* icon font */ - @font-face { - font-family: 'Material Symbols Outlined'; - font-style: normal; - font-weight: 400; - src: url(assets/fonts/MaterialSymbolsOutlined.woff2) format('woff2'); - } -} diff --git a/nym-vpn/ui/src/types/app-data.ts b/nym-vpn/ui/src/types/app-data.ts deleted file mode 100644 index 6a0bb2f5be..0000000000 --- a/nym-vpn/ui/src/types/app-data.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { VpnMode } from './app-state'; - -export type UiTheme = 'Dark' | 'Light'; - -export interface NodeConfig { - id: string; - country: Country; -} - -export type Country = { - name: string; - code: string; -}; - -// tauri type, hence the use of snake_case -export interface AppDataFromBackend { - monitoring: boolean | null; - autoconnect: boolean | null; - killswitch: boolean | null; - entry_location_selector: boolean | null; - ui_theme: UiTheme | null; - ui_root_font_size: number | null; - vpn_mode: VpnMode | null; - entry_node: NodeConfig | null; - exit_node: NodeConfig | null; - entry_node_location: Country | null; - exit_node_location: Country | null; -} diff --git a/nym-vpn/ui/src/types/app-state.ts b/nym-vpn/ui/src/types/app-state.ts deleted file mode 100644 index bbbd887c8c..0000000000 --- a/nym-vpn/ui/src/types/app-state.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Dispatch } from 'react'; -import { Dayjs } from 'dayjs'; -import { StateAction } from '../state'; -import { Country } from './app-data'; - -export type ConnectionState = - | 'Connected' - | 'Disconnected' - | 'Connecting' - | 'Disconnecting' - | 'Unknown'; - -export type VpnMode = 'TwoHop' | 'Mixnet'; - -export interface TunnelConfig { - id: string; - name: string; -} - -export type AppState = { - state: ConnectionState; - version: string | null; - loading: boolean; - error?: string | null; - progressMessages: ConnectProgressMsg[]; - sessionStartDate?: Dayjs | null; - vpnMode: VpnMode; - tunnel: TunnelConfig; - uiTheme: 'Light' | 'Dark'; - entrySelector: boolean; - autoConnect: boolean; - monitoring: boolean; - entryNodeLocation: Country | null; - exitNodeLocation: Country | null; - defaultNodeLocation: Country; - countries: Country[]; - rootFontSize: number; -}; - -export type ConnectionEventPayload = { - state: ConnectionState; - error?: string | null; - start_time?: number | null; // unix timestamp in seconds -}; - -export type ConnectProgressMsg = 'Initializing' | 'InitDone'; - -export type ProgressEventPayload = { - key: ConnectProgressMsg; -}; - -export type StateDispatch = Dispatch; diff --git a/nym-vpn/ui/src/types/general.ts b/nym-vpn/ui/src/types/general.ts deleted file mode 100644 index a7b89bc235..0000000000 --- a/nym-vpn/ui/src/types/general.ts +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; - -export type InputEvent = React.ChangeEvent; - -export type NodeHop = 'entry' | 'exit'; diff --git a/nym-vpn/ui/src/types/index.ts b/nym-vpn/ui/src/types/index.ts deleted file mode 100644 index 7bd3444e71..0000000000 --- a/nym-vpn/ui/src/types/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './app-state'; -export * from './app-data'; -export * from './tauri-ipc'; -export * from './routes'; -export * from './general'; diff --git a/nym-vpn/ui/src/types/routes.ts b/nym-vpn/ui/src/types/routes.ts deleted file mode 100644 index a18280924e..0000000000 --- a/nym-vpn/ui/src/types/routes.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { routes } from '../constants'; - -export type Routes = (typeof routes)[keyof typeof routes]; diff --git a/nym-vpn/ui/src/types/tauri-ipc.ts b/nym-vpn/ui/src/types/tauri-ipc.ts deleted file mode 100644 index 9df3c44f36..0000000000 --- a/nym-vpn/ui/src/types/tauri-ipc.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type CmdErrorSource = 'InternalError' | 'CallerError' | 'Unknown'; - -export interface CmdError { - source: CmdErrorSource; - message: string; -} diff --git a/nym-vpn/ui/src/ui/ThemeSetter.tsx b/nym-vpn/ui/src/ui/ThemeSetter.tsx deleted file mode 100644 index 99941e74cc..0000000000 --- a/nym-vpn/ui/src/ui/ThemeSetter.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import { useMainState } from '../contexts'; - -export default function ThemeSetter({ - children, -}: { - children: React.ReactNode; -}) { - const { uiTheme } = useMainState(); - - return ( -
- {children} -
- ); -} diff --git a/nym-vpn/ui/src/ui/TopBar.tsx b/nym-vpn/ui/src/ui/TopBar.tsx deleted file mode 100644 index 2f3bfe7fa8..0000000000 --- a/nym-vpn/ui/src/ui/TopBar.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { useEffect, useMemo, useState } from 'react'; -import { useLocation, useNavigate } from 'react-router-dom'; -import { useTranslation } from 'react-i18next'; -import clsx from 'clsx'; -import { routes } from '../constants'; -import { Routes } from '../types'; - -type NavLocation = { - title: string; - leftIcon?: React.ReactNode; - handleLeftNav?: () => void; - rightIcon?: React.ReactNode; - handleRightNav?: () => void; -}; - -type NavBarData = { - [key in Routes]: NavLocation; -}; - -export default function TopBar() { - const location = useLocation(); - const navigate = useNavigate(); - const { t } = useTranslation(); - - const [currentNavLocation, setCurrentNavLocation] = useState({ - title: '', - rightIcon: 'settings', - handleRightNav: () => { - navigate(routes.settings); - }, - }); - - const navBarData = useMemo(() => { - return { - '/': { - title: '', - rightIcon: 'settings', - handleRightNav: () => { - navigate(routes.settings); - }, - }, - '/settings': { - title: t('settings'), - leftIcon: 'arrow_back', - handleLeftNav: () => { - navigate(-1); - }, - }, - '/settings/display': { - title: t('display-theme'), - leftIcon: 'arrow_back', - handleLeftNav: () => { - navigate(-1); - }, - }, - '/settings/logs': { - title: t('logs'), - leftIcon: 'arrow_back', - handleLeftNav: () => { - navigate(-1); - }, - }, - '/settings/feedback': { - title: t('feedback'), - leftIcon: 'arrow_back', - handleLeftNav: () => { - navigate(-1); - }, - }, - '/settings/legal': { - title: t('legal'), - leftIcon: 'arrow_back', - handleLeftNav: () => { - navigate(-1); - }, - }, - '/entry-node-location': { - title: t('first-hop-selection'), - leftIcon: 'arrow_back', - handleLeftNav: () => { - navigate(-1); - }, - }, - '/exit-node-location': { - title: t('last-hop-selection'), - leftIcon: 'arrow_back', - handleLeftNav: () => { - navigate(-1); - }, - }, - }; - }, [t, navigate]); - - useEffect(() => { - setCurrentNavLocation(navBarData[location.pathname as Routes]); - }, [location.pathname, navBarData]); - - return ( - - ); -} diff --git a/nym-vpn/ui/src/ui/index.ts b/nym-vpn/ui/src/ui/index.ts deleted file mode 100644 index f3af8c7dd6..0000000000 --- a/nym-vpn/ui/src/ui/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as ThemeSetter } from './ThemeSetter'; -export { default as TopBar } from './TopBar'; diff --git a/nym-vpn/ui/src/vite-env.d.ts b/nym-vpn/ui/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a0..0000000000 --- a/nym-vpn/ui/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/nym-vpn/ui/tailwind.config.ts b/nym-vpn/ui/tailwind.config.ts deleted file mode 100644 index 6213b8afd2..0000000000 --- a/nym-vpn/ui/tailwind.config.ts +++ /dev/null @@ -1,90 +0,0 @@ -import type { Config } from 'tailwindcss'; -import defaultTheme from 'tailwindcss/defaultTheme'; -import headlessui from '@headlessui/tailwindcss'; - -export default { - content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], - theme: { - colors: { - transparent: 'transparent', - current: 'currentColor', - 'baltic-sea': { - // [D] bg for top-bar nav - // [D] bg for network modes - jaguar: '#2B2831', - // [L] status-line title text + icon - // [L] connection timer text - // [L] "Connecting" status text - // [L] main titles text - // [L] network mode title text + icon - // [L] node location select text value + icon + label - // [D] button text - DEFAULT: '#1C1B1F', // [D] main bg - }, - // [L] main bg - 'blanc-nacre': '#F2F4F6', - // [DL] primary accent - melon: '#FB6E4E', - // [DL] secondary accent - cornflower: '#7075FF', - // [DL] error status text - teaberry: '#E33B5A', - comet: '#625B71', - // [DL] "Connected" status text - 'vert-menthe': '#2BC761', - // [D] main titles text - // [D] connection timer text - // [D] "Connecting" status text - // [L] bg for top-bar nav - // [L] bg for network modes - // [L] button text - white: '#FFF', - 'flawed-white': '#FFFBFE', - black: '#000', - mercury: { - // [D] status-line title text + icon - // [D] network mode title text + icon - // [D] node location select text value + icon + label - pinkish: '#E6E1E5', - DEFAULT: '#E1EFE7', - // [D] network mode desc text - // [D] "Connection time" - // [D] main status desc text - mist: '#938F99', - }, - // [DL] "Disconnected" status text - 'coal-mine': { dark: '#56545A', light: '#A4A4A4' }, - // [L] "Connection time" - // [L] main status desc text - 'dim-gray': '#696571', - // [L] network mode desc text - // [L] node location select outline - // [L] connection status bg (combined with 10% opacity) - 'cement-feet': '#79747E', - // [D] node location select outline - 'gun-powder': '#49454F', - // [D] top-bar icon - 'laughing-jack': '#CAC4D0', - // [L] button bg in disabled state - 'wind-chime': '#DEDEE1', - // [D] connection status bg (combined with 15% opacity) - oil: '#313033', - // [DL] "Connected" status bg (combined with 10% opacity) - 'vert-prasin': '#47C45D', - }, - extend: { - fontFamily: { - sans: ['Lato', ...defaultTheme.fontFamily.sans], - icon: [ - 'Material Symbols Outlined', - { - fontVariationSettings: '"opsz" 24;', - }, - ], - }, - }, - }, - plugins: [headlessui], - // Toggling dark mode manually - darkMode: 'class', -} satisfies Config; diff --git a/nym-vpn/ui/tsconfig.json b/nym-vpn/ui/tsconfig.json deleted file mode 100644 index a7fc6fbf23..0000000000 --- a/nym-vpn/ui/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/nym-vpn/ui/tsconfig.node.json b/nym-vpn/ui/tsconfig.node.json deleted file mode 100644 index 42872c59f5..0000000000 --- a/nym-vpn/ui/tsconfig.node.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/nym-vpn/ui/vite.config.ts b/nym-vpn/ui/vite.config.ts deleted file mode 100644 index e198d2119d..0000000000 --- a/nym-vpn/ui/vite.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react-swc'; - -// https://vitejs.dev/config/ -export default defineConfig(async () => ({ - plugins: [react()], - // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` - // - // 1. prevent vite from obscuring rust errors - clearScreen: false, - // 2. tauri expects a fixed port, fail if that port is not available - server: { - port: 1420, - strictPort: true, - }, - // 3. to make use of `TAURI_DEBUG` and other env variables - // https://tauri.app/v1/api/config#buildconfig.beforedevcommand - envPrefix: ['VITE_', 'TAURI_'], -})); diff --git a/nym-vpn/ui/yarn.lock b/nym-vpn/ui/yarn.lock deleted file mode 100644 index cd65f0aff0..0000000000 --- a/nym-vpn/ui/yarn.lock +++ /dev/null @@ -1,3105 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - -"@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.7.tgz#dd7c88deeb218a0f8bd34d5db1aa242e0f203193" - integrity sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA== - dependencies: - regenerator-runtime "^0.14.0" - -"@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - -"@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - -"@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - -"@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - -"@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - -"@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - -"@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - -"@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - -"@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - -"@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - -"@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - -"@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - -"@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - -"@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - -"@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - -"@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - -"@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - -"@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - -"@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - -"@esbuild/sunos-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" - integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== - -"@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - -"@esbuild/win32-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" - integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== - -"@esbuild/win32-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" - integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== - -"@floating-ui/core@^1.5.3": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.3.tgz#b6aa0827708d70971c8679a16cf680a515b8a52a" - integrity sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q== - dependencies: - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/dom@^1.5.4": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.4.tgz#28df1e1cb373884224a463235c218dcbd81a16bb" - integrity sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ== - dependencies: - "@floating-ui/core" "^1.5.3" - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/react-dom@^2.0.4": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.5.tgz#851522899c34e3e2be1e29f3294f150834936e28" - integrity sha512-UsBK30Bg+s6+nsgblXtZmwHhgS2vmbuQK22qgt2pTQM6M3X6H1+cQcLXqgRY3ihVLcZJE6IvqDQozhsnIVqK/Q== - dependencies: - "@floating-ui/dom" "^1.5.4" - -"@floating-ui/utils@^0.2.0": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" - integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== - -"@headlessui/react@^1.7.17": - version "1.7.17" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.17.tgz#a0ec23af21b527c030967245fd99776aa7352bc6" - integrity sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow== - dependencies: - client-only "^0.0.1" - -"@headlessui/tailwindcss@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@headlessui/tailwindcss/-/tailwindcss-0.2.0.tgz#2c55c98fd8eee4b4f21ec6eb35a014b840059eec" - integrity sha512-fpL830Fln1SykOCboExsWr3JIVeQKieLJ3XytLe/tt1A0XzqUthOftDmjcCYLW62w7mQI7wXcoPXr3tZ9QfGxw== - -"@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== - dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@mui/base@^5.0.0-beta.24": - version "5.0.0-beta.30" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.30.tgz#8feca6b70f2b9cd4d5cb97799ae9fcb5376c7f83" - integrity sha512-dc38W4W3K42atE9nSaOeoJ7/x9wGIfawdwC/UmMxMLlZ1iSsITQ8dQJaTATCbn98YvYPINK/EH541YA5enQIPQ== - dependencies: - "@babel/runtime" "^7.23.6" - "@floating-ui/react-dom" "^2.0.4" - "@mui/types" "^7.2.12" - "@mui/utils" "^5.15.3" - "@popperjs/core" "^2.11.8" - clsx "^2.0.0" - prop-types "^15.8.1" - -"@mui/types@^7.2.12": - version "7.2.12" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.12.tgz#602acbb5aa3eb56a31f569a19f87f75d33de5c01" - integrity sha512-3kaHiNm9khCAo0pVe0RenketDSFoZGAlVZ4zDjB/QNZV0XiCj+sh1zkX0VVhQPgYJDlBEzAag+MHJ1tU3vf0Zw== - -"@mui/utils@^5.15.3": - version "5.15.3" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.15.3.tgz#421043be5279d31ca9b221a6398feb7c9d61209b" - integrity sha512-mT3LiSt9tZWCdx1pl7q4Q5tNo6gdZbvJel286ZHGuj6LQQXjWNAh8qiF9d+LogvNUI+D7eLkTnj605d1zoazfg== - dependencies: - "@babel/runtime" "^7.23.6" - "@types/prop-types" "^15.7.11" - prop-types "^15.8.1" - react-is "^18.2.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@popperjs/core@^2.11.8": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - -"@remix-run/router@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.14.1.tgz#6d2dd03d52e604279c38911afc1079d58c50a755" - integrity sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow== - -"@rollup/rollup-android-arm-eabi@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz#b1094962742c1a0349587040bc06185e2a667c9b" - integrity sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA== - -"@rollup/rollup-android-arm64@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz#96eb86fb549e05b187f2ad06f51d191a23cb385a" - integrity sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA== - -"@rollup/rollup-darwin-arm64@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz#2456630c007cc5905cb368acb9ff9fc04b2d37be" - integrity sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA== - -"@rollup/rollup-darwin-x64@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz#97742214fc7dfd47a0f74efba6f5ae264e29c70c" - integrity sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA== - -"@rollup/rollup-linux-arm-gnueabihf@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz#cd933e61d6f689c9cdefde424beafbd92cfe58e2" - integrity sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw== - -"@rollup/rollup-linux-arm64-gnu@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz#33b09bf462f1837afc1e02a1b352af6b510c78a6" - integrity sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg== - -"@rollup/rollup-linux-arm64-musl@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz#50257fb248832c2308064e3764a16273b6ee4615" - integrity sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A== - -"@rollup/rollup-linux-riscv64-gnu@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz#09589e4e1a073cf56f6249b77eb6c9a8e9b613a8" - integrity sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A== - -"@rollup/rollup-linux-x64-gnu@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz#bd312bb5b5f02e54d15488605d15cfd3f90dda7c" - integrity sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw== - -"@rollup/rollup-linux-x64-musl@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz#25b3bede85d86438ce28cc642842d10d867d40e9" - integrity sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ== - -"@rollup/rollup-win32-arm64-msvc@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz#95957067eb107f571da1d81939f017d37b4958d3" - integrity sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ== - -"@rollup/rollup-win32-ia32-msvc@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz#71b6facad976db527863f698692c6964c0b6e10e" - integrity sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ== - -"@rollup/rollup-win32-x64-msvc@4.9.4": - version "4.9.4" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz#16295ccae354707c9bc6842906bdeaad4f3ba7a5" - integrity sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw== - -"@swc/core-darwin-arm64@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.102.tgz#2bbd90a8751e6eee981f857ec3f0b6233208da37" - integrity sha512-CJDxA5Wd2cUMULj3bjx4GEoiYyyiyL8oIOu4Nhrs9X+tlg8DnkCm4nI57RJGP8Mf6BaXPIJkHX8yjcefK2RlDA== - -"@swc/core-darwin-x64@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.102.tgz#df16d51f45771d3c9cca8554b28a3190cdb075cf" - integrity sha512-X5akDkHwk6oAer49oER0qZMjNMkLH3IOZaV1m98uXIasAGyjo5WH1MKPeMLY1sY6V6TrufzwiSwD4ds571ytcg== - -"@swc/core-linux-arm-gnueabihf@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.102.tgz#eb71697590c56ea261fa9a4b198c45304c7ece39" - integrity sha512-kJH3XtZP9YQdjq/wYVBeFuiVQl4HaC4WwRrIxAHwe2OyvrwUI43dpW3LpxSggBnxXcVCXYWf36sTnv8S75o2Gw== - -"@swc/core-linux-arm64-gnu@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.102.tgz#75d72d5253d56723fa7054e1a8f313bf3d17b1a2" - integrity sha512-flQP2WDyCgO24WmKA1wjjTx+xfCmavUete2Kp6yrM+631IHLGnr17eu7rYJ/d4EnDBId/ytMyrnWbTVkaVrpbQ== - -"@swc/core-linux-arm64-musl@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.102.tgz#7db86022fec57c1e06c573d45cef5e911bcc420e" - integrity sha512-bQEQSnC44DyoIGLw1+fNXKVGoCHi7eJOHr8BdH0y1ooy9ArskMjwobBFae3GX4T1AfnrTaejyr0FvLYIb0Zkog== - -"@swc/core-linux-x64-gnu@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.102.tgz#298a25aa854924bedc7e4b69da52da19f84fc7a8" - integrity sha512-dFvnhpI478svQSxqISMt00MKTDS0e4YtIr+ioZDG/uJ/q+RpcNy3QI2KMm05Fsc8Y0d4krVtvCKWgfUMsJZXAg== - -"@swc/core-linux-x64-musl@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.102.tgz#1bcd911aaa88b96f3bb665b0fd84ef4d21adf886" - integrity sha512-+a0M3CvjeIRNA/jTCzWEDh2V+mhKGvLreHOL7J97oULZy5yg4gf7h8lQX9J8t9QLbf6fsk+0F8bVH1Ie/PbXjA== - -"@swc/core-win32-arm64-msvc@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.102.tgz#59084786364d03fa4a120bdd589a557a00caedeb" - integrity sha512-w76JWLjkZNOfkB25nqdWUNCbt0zJ41CnWrJPZ+LxEai3zAnb2YtgB/cCIrwxDebRuMgE9EJXRj7gDDaTEAMOOQ== - -"@swc/core-win32-ia32-msvc@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.102.tgz#27954889d940a63796d58ff7753f5f27ed381a1f" - integrity sha512-vlDb09HiGqKwz+2cxDS9T5/461ipUQBplvuhW+cCbzzGuPq8lll2xeyZU0N1E4Sz3MVdSPx1tJREuRvlQjrwNg== - -"@swc/core-win32-x64-msvc@1.3.102": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.102.tgz#477da542e6b01b3eb64476ec9a78f497a9b87807" - integrity sha512-E/jfSD7sShllxBwwgDPeXp1UxvIqehj/ShSUqq1pjR/IDRXngcRSXKJK92mJkNFY7suH6BcCWwzrxZgkO7sWmw== - -"@swc/core@^1.3.96": - version "1.3.102" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.102.tgz#870874bcf1d78cd7bb1bc66b31bf2b1a87c1a667" - integrity sha512-OAjNLY/f6QWKSDzaM3bk31A+OYHu6cPa9P/rFIx8X5d24tHXUpRiiq6/PYI6SQRjUPlB72GjsjoEU8F+ALadHg== - dependencies: - "@swc/counter" "^0.1.1" - "@swc/types" "^0.1.5" - optionalDependencies: - "@swc/core-darwin-arm64" "1.3.102" - "@swc/core-darwin-x64" "1.3.102" - "@swc/core-linux-arm-gnueabihf" "1.3.102" - "@swc/core-linux-arm64-gnu" "1.3.102" - "@swc/core-linux-arm64-musl" "1.3.102" - "@swc/core-linux-x64-gnu" "1.3.102" - "@swc/core-linux-x64-musl" "1.3.102" - "@swc/core-win32-arm64-msvc" "1.3.102" - "@swc/core-win32-ia32-msvc" "1.3.102" - "@swc/core-win32-x64-msvc" "1.3.102" - -"@swc/counter@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" - integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== - -"@swc/types@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" - integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== - -"@tauri-apps/api@^1.5.0": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.5.3.tgz#f7b362b1f30aadb0a8bbeb7ae111755c0ed33d73" - integrity sha512-zxnDjHHKjOsrIzZm6nO5Xapb/BxqUq1tc7cGkFXsFkGTsSWgCPH1D8mm0XS9weJY2OaR73I3k3S+b7eSzJDfqA== - -"@tauri-apps/cli-darwin-arm64@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.5.9.tgz#38c6cc3a82cb5e13d311a0b55507c9e9c830685c" - integrity sha512-7C2Jf8f0gzv778mLYb7Eszqqv1bm9Wzews81MRTqKrUIcC+eZEtDXLex+JaEkEzFEUrgIafdOvMBVEavF030IA== - -"@tauri-apps/cli-darwin-x64@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.5.9.tgz#b0bb7958945e74b33e41cc840d6289558d8bc9b1" - integrity sha512-LHKytpkofPYgH8RShWvwDa3hD1ws131x7g7zNasJPfOiCWLqYVQFUuQVmjEUt8+dpHe/P/err5h4z+YZru2d0A== - -"@tauri-apps/cli-linux-arm-gnueabihf@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.5.9.tgz#610023c827cc71b4d6715cb966112db34bcfde5c" - integrity sha512-teGK20IYKx+dVn8wFq/Lg57Q9ce7foq1KHSfyHi464LVt1T0V1rsmULSgZpQPPj/NYPF5BG78PcWYv64yH86jw== - -"@tauri-apps/cli-linux-arm64-gnu@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.5.9.tgz#d2b088d16ee321b7021f62cd873c976690c3da46" - integrity sha512-onJ/DW5Crw38qVx+wquY4uBbfCxVhzhdJmlCYqnYyXsZZmSiPUfSyhV58y+5TYB0q1hG8eYdB5x8VAwzByhGzw== - -"@tauri-apps/cli-linux-arm64-musl@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.5.9.tgz#433f35e7daa59cc8fb8e0212c370f49c9fbfd598" - integrity sha512-23AYoLD3acakLp9NtheKQDJl8F66eTOflxoPzdJNRy13hUSxb+W9qpz4rRA+CIzkjICFvO2i3UWjeV9QwDVpsQ== - -"@tauri-apps/cli-linux-x64-gnu@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.5.9.tgz#3d733f9d9706273bdb1f247bbfcca21f2acedcc8" - integrity sha512-9PQA1rE7gh41W2ylyKd5qOGOds55ymaYPml9KOpM0g+cxmCXa+8Wf9K5NKvACnJldJJ6cekWzIyB4eN6o5T+yQ== - -"@tauri-apps/cli-linux-x64-musl@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.5.9.tgz#eeb0b55fa7257d7566b873734d2c230dca0f1c6c" - integrity sha512-5hdbNFeDsrJ/pXZ4cSQV4bJwUXPPxXxN3/pAtNUqIph7q+vLcBXOXIMoS64iuyaluJC59lhEwlWZFz+EPv0Hqg== - -"@tauri-apps/cli-win32-arm64-msvc@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.5.9.tgz#f772456d3ef97050e467e88e9d95b6b68b4206e7" - integrity sha512-O18JufjSB3hSJYu5WWByONouGeX7DraLAtXLErsG1r/VS3zHd/zyuzycrVUaObNXk5bfGlIP0Ypt+RvZJILN2w== - -"@tauri-apps/cli-win32-ia32-msvc@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.5.9.tgz#2aa3b267e23d0dd2ece4e183bbd2a85c3e7e4c60" - integrity sha512-FQxtxTZu0JVBihfd/lmpxo7jyMOesjWQehfyVUqtgMfm5+Pvvw0Y+ZioeDi1TZkFVrT3QDYy8R4LqDLSZVMQRA== - -"@tauri-apps/cli-win32-x64-msvc@1.5.9": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.5.9.tgz#3b970c949326f5874cc88a016372cb87485c15a1" - integrity sha512-EeI1+L518cIBLKw0qUFwnLIySBeSmPQjPLIlNwSukHSro4tAQPHycEVGgKrdToiCWgaZJBA0e5aRSds0Du2TWg== - -"@tauri-apps/cli@^1.5.0": - version "1.5.9" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.5.9.tgz#43391e4b6997483d485d84d97e0d72f648eae581" - integrity sha512-knSt/9AvCTeyfC6wkyeouF9hBW/0Mzuw+5vBKEvzaGPQsfFJo1ZCp5FkdiZpGBBfnm09BhugasGRTGofzatfqQ== - optionalDependencies: - "@tauri-apps/cli-darwin-arm64" "1.5.9" - "@tauri-apps/cli-darwin-x64" "1.5.9" - "@tauri-apps/cli-linux-arm-gnueabihf" "1.5.9" - "@tauri-apps/cli-linux-arm64-gnu" "1.5.9" - "@tauri-apps/cli-linux-arm64-musl" "1.5.9" - "@tauri-apps/cli-linux-x64-gnu" "1.5.9" - "@tauri-apps/cli-linux-x64-musl" "1.5.9" - "@tauri-apps/cli-win32-arm64-msvc" "1.5.9" - "@tauri-apps/cli-win32-ia32-msvc" "1.5.9" - "@tauri-apps/cli-win32-x64-msvc" "1.5.9" - -"@types/estree@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - -"@types/json-schema@^7.0.12": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/prop-types@*", "@types/prop-types@^15.7.11": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== - -"@types/react-dom@^18.2.15": - version "18.2.18" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" - integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== - dependencies: - "@types/react" "*" - -"@types/react-router-dom@^5.3.3": - version "5.3.3" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - -"@types/react-router@*": - version "5.1.20" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" - integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - -"@types/react@*", "@types/react@^18.2.37": - version "18.2.47" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.47.tgz#85074b27ab563df01fbc3f68dc64bf7050b0af40" - integrity sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - -"@types/semver@^7.5.0": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== - -"@typescript-eslint/eslint-plugin@^6.8.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.0.tgz#94b86f3c25b468c714a04bd490017ecec2fd3746" - integrity sha512-3lqEvQUdCozi6d1mddWqd+kf8KxmGq2Plzx36BlkjuQe3rSTm/O98cLf0A4uDO+a5N1KD2SeEEl6fW97YHY+6w== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.18.0" - "@typescript-eslint/type-utils" "6.18.0" - "@typescript-eslint/utils" "6.18.0" - "@typescript-eslint/visitor-keys" "6.18.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.8.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.18.0.tgz#d494161d64832e869f0a6acc6000a2cdff858383" - integrity sha512-v6uR68SFvqhNQT41frCMCQpsP+5vySy6IdgjlzUWoo7ALCnpaWYcz/Ij2k4L8cEsL0wkvOviCMpjmtRtHNOKzA== - dependencies: - "@typescript-eslint/scope-manager" "6.18.0" - "@typescript-eslint/types" "6.18.0" - "@typescript-eslint/typescript-estree" "6.18.0" - "@typescript-eslint/visitor-keys" "6.18.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.18.0.tgz#24ca6fc1f4a2afa71122dcfca9282878687d9997" - integrity sha512-o/UoDT2NgOJ2VfHpfr+KBY2ErWvCySNUIX/X7O9g8Zzt/tXdpfEU43qbNk8LVuWUT2E0ptzTWXh79i74PP0twA== - dependencies: - "@typescript-eslint/types" "6.18.0" - "@typescript-eslint/visitor-keys" "6.18.0" - -"@typescript-eslint/type-utils@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.18.0.tgz#a492da599da5c38c70aa9ff9bfb473961b8ae663" - integrity sha512-ZeMtrXnGmTcHciJN1+u2CigWEEXgy1ufoxtWcHORt5kGvpjjIlK9MUhzHm4RM8iVy6dqSaZA/6PVkX6+r+ChjQ== - dependencies: - "@typescript-eslint/typescript-estree" "6.18.0" - "@typescript-eslint/utils" "6.18.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.18.0.tgz#ffce610a1540c17cf7d8ecf2bb34b8b0e2e77101" - integrity sha512-/RFVIccwkwSdW/1zeMx3hADShWbgBxBnV/qSrex6607isYjj05t36P6LyONgqdUrNLl5TYU8NIKdHUYpFvExkA== - -"@typescript-eslint/typescript-estree@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.0.tgz#1c357c3ca435c3cfa2af6b9daf45ca0bc2bb059a" - integrity sha512-klNvl+Ql4NsBNGB4W9TZ2Od03lm7aGvTbs0wYaFYsplVPhr+oeXjlPZCDI4U9jgJIDK38W1FKhacCFzCC+nbIg== - dependencies: - "@typescript-eslint/types" "6.18.0" - "@typescript-eslint/visitor-keys" "6.18.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.18.0.tgz#4d07c9c08f84b9939a1aca7aef98c8f378936142" - integrity sha512-wiKKCbUeDPGaYEYQh1S580dGxJ/V9HI7K5sbGAVklyf+o5g3O+adnS4UNJajplF4e7z2q0uVBaTdT/yLb4XAVA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.18.0" - "@typescript-eslint/types" "6.18.0" - "@typescript-eslint/typescript-estree" "6.18.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.0.tgz#3c8733737786fa6c78a347b4fa306ae7155b560f" - integrity sha512-1wetAlSZpewRDb2h9p/Q8kRjdGuqdTAQbkJIOUMLug2LBLG+QOjiWoSj6/3B/hA9/tVTFFdtiKvAYoYnSRW/RA== - dependencies: - "@typescript-eslint/types" "6.18.0" - eslint-visitor-keys "^3.4.1" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@vitejs/plugin-react-swc@^3.3.2": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.5.0.tgz#1fadff5148003e8091168c431e44c850f9a39e74" - integrity sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig== - dependencies: - "@swc/core" "^1.3.96" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -ast-types-flow@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" - integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== - -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - -autoprefixer@^10.4.16: - version "10.4.16" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -axe-core@=4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== - -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.21.10: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== - dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565: - version "1.0.30001576" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" - integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -client-only@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -clsx@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" - integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -dayjs@^1.11.10: - version "1.11.10" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" - integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -electron-to-chromium@^1.4.601: - version "1.4.623" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz#0f7400114ac3425500e9244d2b0e9c3107c331cb" - integrity sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -enhanced-resolve@^5.12.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" - -es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" - -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== - dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -esbuild@^0.19.3: - version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" - integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.11" - "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" - "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" - "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" - "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" - "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" - "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" - "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" - "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^9.0.0: - version "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-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" - integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.12.0" - eslint-module-utils "^2.7.4" - fast-glob "^3.3.1" - get-tsconfig "^4.5.0" - is-core-module "^2.11.0" - is-glob "^4.0.3" - -eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.29.0: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" - -eslint-plugin-jsx-a11y@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" - integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== - dependencies: - "@babel/runtime" "^7.23.2" - aria-query "^5.3.0" - array-includes "^3.1.7" - array.prototype.flatmap "^1.3.2" - ast-types-flow "^0.0.8" - axe-core "=4.7.0" - axobject-query "^3.2.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.15" - hasown "^2.0.0" - jsx-ast-utils "^3.3.5" - language-tags "^1.0.9" - minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" - -eslint-plugin-react-hooks@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react@^7.33.2: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.1" - string.prototype.matchall "^4.0.8" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.52.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -fraction.js@^4.3.6: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1, function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@^4.5.0: - version "4.7.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" - integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== - dependencies: - resolve-pkg-maps "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.2.4: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -i18next@^23.7.6: - version "23.7.16" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.7.16.tgz#7026d18b7a3ac9e2ecfeb78da5e4da5ca33312ef" - integrity sha512-SrqFkMn9W6Wb43ZJ9qrO6U2U4S80RsFMA7VYFSqp7oc7RllQOYDCdRfsse6A7Cq/V8MnpxKvJCYgM8++27n4Fw== - dependencies: - "@babel/runtime" "^7.23.2" - -ignore@^5.2.0, ignore@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== - dependencies: - get-intrinsic "^1.2.2" - hasown "^2.0.0" - side-channel "^1.0.4" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -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" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -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" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - 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-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== - dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -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" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "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== - 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" - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jiti@^1.19.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lilconfig@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -minimatch@9.0.3, minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.13.1, object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.6, object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.fromentries@^2.0.6, object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== - dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-import@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-16.0.0.tgz#2be1c78391b3f43f129fccfe5cc0cc1a11baef54" - integrity sha512-e77lhVvrD1I2y7dYmBv0k9ULTdArgEYZt97T4w6sFIU5uxIHvDFQlKgUUyY7v7Barj0Yf/zm5A4OquZN7jKm5Q== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-load-config@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== - dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" - -postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== - dependencies: - postcss-selector-parser "^6.0.11" - -postcss-selector-parser@^6.0.11: - version "6.0.15" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" - integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.32: - version "8.4.33" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848" - integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== - -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-i18next@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.0.0.tgz#eb39d2245fd1024237828c955f770e409a1ccb12" - integrity sha512-OCrS8rHNAmnr8ggGRDxjakzihrMW7HCbsplduTm3EuuQ6fyvWGT41ksZpqbduYoqJurBmEsEVZ1pILSUWkHZng== - dependencies: - "@babel/runtime" "^7.22.5" - html-parse-stringify "^3.0.1" - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react-router-dom@^6.18.0: - version "6.21.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.21.1.tgz#58b459d2fe1841388c95bb068f85128c45e27349" - integrity sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA== - dependencies: - "@remix-run/router" "1.14.1" - react-router "6.21.1" - -react-router@6.21.1: - version "6.21.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.21.1.tgz#8db7ee8d7cfc36513c9a66b44e0897208c33be34" - integrity sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA== - dependencies: - "@remix-run/router" "1.14.1" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -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.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.4: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup@^4.2.0: - version "4.9.4" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.4.tgz#37bc0c09ae6b4538a9c974f4d045bb64b2e7c27c" - integrity sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.9.4" - "@rollup/rollup-android-arm64" "4.9.4" - "@rollup/rollup-darwin-arm64" "4.9.4" - "@rollup/rollup-darwin-x64" "4.9.4" - "@rollup/rollup-linux-arm-gnueabihf" "4.9.4" - "@rollup/rollup-linux-arm64-gnu" "4.9.4" - "@rollup/rollup-linux-arm64-musl" "4.9.4" - "@rollup/rollup-linux-riscv64-gnu" "4.9.4" - "@rollup/rollup-linux-x64-gnu" "4.9.4" - "@rollup/rollup-linux-x64-musl" "4.9.4" - "@rollup/rollup-win32-arm64-msvc" "4.9.4" - "@rollup/rollup-win32-ia32-msvc" "4.9.4" - "@rollup/rollup-win32-x64-msvc" "4.9.4" - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: - name string-width-cjs - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -sucrase@^3.32.0: - version "3.35.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" - integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "^10.3.10" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tailwindcss@^3.3.3: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" - integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.3.0" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.19.1" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typescript@^5.0.2: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -vite@^5.0.5: - version "5.0.11" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.11.tgz#31562e41e004cb68e1d51f5d2c641ab313b289e4" - integrity sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA== - dependencies: - esbuild "^0.19.3" - postcss "^8.4.32" - rollup "^4.2.0" - optionalDependencies: - fsevents "~2.3.3" - -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/nym-vpn/win/.gitkeep b/nym-vpn/win/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000