diff --git a/.github/workflows/build-app-release.yml b/.github/workflows/build-app-release.yml index bac85c66a..bf5e6b134 100644 --- a/.github/workflows/build-app-release.yml +++ b/.github/workflows/build-app-release.yml @@ -25,7 +25,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v2 with: - node-version: "18" + node-version: "20" - name: Install dependencies run: yarn install @@ -46,6 +46,7 @@ jobs: echo "EXPO_PUBLIC_EXPO_PROJECT_ID=${{ secrets.EXPO_PUBLIC_EXPO_PROJECT_ID }}" >> .env.production echo "EXPO_PUBLIC_PRIVY_APP_ID=${{ secrets.EXPO_PUBLIC_PRIVY_APP_ID }}" >> .env.production echo "EXPO_PUBLIC_EVM_RPC_ENDPOINT=${{ secrets.EXPO_PUBLIC_EVM_RPC_ENDPOINT }}" >> .env.production + echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> .env.production - name: Update EAS config with env variables run: node scripts/Øbuild/eas.js --env production @@ -67,7 +68,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v2 with: - node-version: "18" + node-version: "20" - name: Install dependencies run: yarn install @@ -88,6 +89,7 @@ jobs: echo "EXPO_PUBLIC_EXPO_PROJECT_ID=${{ secrets.EXPO_PUBLIC_EXPO_PROJECT_ID }}" >> .env.production echo "EXPO_PUBLIC_PRIVY_APP_ID=${{ secrets.EXPO_PUBLIC_PRIVY_APP_ID }}" >> .env.production echo "EXPO_PUBLIC_EVM_RPC_ENDPOINT=${{ secrets.EXPO_PUBLIC_EVM_RPC_ENDPOINT }}" >> .env.production + echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> .env.production - name: Update EAS config with env variables run: node scripts/build/eas.js --env production @@ -109,7 +111,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v2 with: - node-version: "18" + node-version: "20" - name: Increment version number run: | diff --git a/.github/workflows/build-internal.yml b/.github/workflows/build-internal.yml index a8f8b8f0b..6c6eb29be 100644 --- a/.github/workflows/build-internal.yml +++ b/.github/workflows/build-internal.yml @@ -28,7 +28,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v2 with: - node-version: "18" + node-version: "20" - name: Install dependencies run: yarn install @@ -54,6 +54,7 @@ jobs: echo "EXPO_PUBLIC_EXPO_PROJECT_ID=${{ secrets.EXPO_PUBLIC_EXPO_PROJECT_ID }}" >> $env_file echo "EXPO_PUBLIC_PRIVY_APP_ID=${{ secrets.EXPO_PUBLIC_PRIVY_APP_ID }}" >> $env_file echo "EXPO_PUBLIC_EVM_RPC_ENDPOINT=${{ secrets.EXPO_PUBLIC_EVM_RPC_ENDPOINT }}" >> $env_file + echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> $env_file - name: Update EAS config with env variables run: | @@ -63,9 +64,6 @@ jobs: node scripts/build/eas.js --env preview fi - - name: Update Android Files - run: node scripts/build/android/build.js - - name: Build for Android run: | if [ "${{ github.event.inputs.environment || 'Production' }}" == "Production" ]; then @@ -85,7 +83,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v2 with: - node-version: "18" + node-version: "20" - name: Install dependencies run: yarn install @@ -111,6 +109,7 @@ jobs: echo "EXPO_PUBLIC_EXPO_PROJECT_ID=${{ secrets.EXPO_PUBLIC_EXPO_PROJECT_ID }}" >> $env_file echo "EXPO_PUBLIC_PRIVY_APP_ID=${{ secrets.EXPO_PUBLIC_PRIVY_APP_ID }}" >> $env_file echo "EXPO_PUBLIC_EVM_RPC_ENDPOINT=${{ secrets.EXPO_PUBLIC_EVM_RPC_ENDPOINT }}" >> $env_file + echo "SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}" >> $env_file - name: Update EAS config with env variables run: | @@ -147,7 +146,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v2 with: - node-version: "18" + node-version: "20" - name: Increment version numbers run: node scripts/build/incrementBuildNumbers.js diff --git a/.github/workflows/check-android-build.yml b/.github/workflows/check-android-build.yml index 7622a8220..d5aa9df56 100644 --- a/.github/workflows/check-android-build.yml +++ b/.github/workflows/check-android-build.yml @@ -27,7 +27,7 @@ jobs: - name: Setup node uses: actions/setup-node@v4.0.2 with: - node-version: 18.x + node-version: 20.x cache: "yarn" - name: Set up JDK 17 diff --git a/.github/workflows/check-ios-build.yml b/.github/workflows/check-ios-build.yml index 0927c06d2..00897e342 100644 --- a/.github/workflows/check-ios-build.yml +++ b/.github/workflows/check-ios-build.yml @@ -19,7 +19,7 @@ jobs: - name: Setup node uses: actions/setup-node@v4.0.2 with: - node-version: 18.x + node-version: 20.x cache: "yarn" - name: 🏗 Setup EAS diff --git a/.github/workflows/create-new-release.yml b/.github/workflows/create-new-release.yml index f8c94c4d0..0fcbcd6bf 100644 --- a/.github/workflows/create-new-release.yml +++ b/.github/workflows/create-new-release.yml @@ -19,7 +19,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: "18" + node-version: "20" - name: Setup Git run: | diff --git a/.gitignore b/.gitignore index aadb65919..7561f1a00 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,6 @@ ios/Converse.xcworkspace/xcshareddata/swiftpm/Package.resolved # Reassure output directory .reassure + +# Android +/android/ diff --git a/android/.gitignore b/android/.gitignore deleted file mode 100644 index 8a6be0771..000000000 --- a/android/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# OSX -# -.DS_Store - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ - -# Bundle artifacts -*.jsbundle diff --git a/android/app/build.gradle b/android/app/build.gradle deleted file mode 100644 index b5cb346f9..000000000 --- a/android/app/build.gradle +++ /dev/null @@ -1,264 +0,0 @@ -apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" -apply plugin: "com.facebook.react" - -def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() -def expoDebuggableVariants = ['debug'] -// Override `debuggableVariants` for expo-updates debugging -if (System.getenv('EX_UPDATES_NATIVE_DEBUG') == "1") { - react { - expoDebuggableVariants = [] - } -} - -/** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. - */ -react { - entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) - reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() - hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" - codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() - debuggableVariants = expoDebuggableVariants - - // Use Expo CLI to bundle the app, this ensures the Metro config - // works correctly with Expo projects. - cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) - bundleCommand = "export:embed" - - /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '..' - // root = file("../") - // The folder where the react-native NPM package is. Default is ../node_modules/react-native - // reactNativeDir = file("../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen - // codegenDir = file("../node_modules/@react-native/codegen") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. By default is just 'debug'. - // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] - - /* Bundling */ - // A list containing the node command and its flags. Default is just 'node'. - // nodeExecutableAndArgs = ["node"] - - // - // The path to the CLI configuration file. Default is empty. - // bundleConfig = file(../rn-cli.config.js) - // - // The name of the generated asset file containing your JS bundle - // bundleAssetName = "MyApplication.android.bundle" - // - // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' - // entryFile = file("../js/MyApplication.android.js") - // - // A list of extra flags to pass to the 'bundle' commands. - // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle - // extraPackagerArgs = [] - - /* Hermes Commands */ - // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] - - /* Autolinking */ - autolinkLibrariesWithApp() -} - -/** - * Set this to true to Run Proguard on Release builds to minify the Java bytecode. - */ -def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() - -/** - * The preferred build flavor of JavaScriptCore (JSC) - * - * For example, to use the international variant, you can use: - * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'org.webkit:android-jsc:+' - -apply from: new File(["node", "--print", "require.resolve('@sentry/react-native/package.json')"].execute().text.trim(), "../sentry.gradle") -android { - ndkVersion rootProject.ext.ndkVersion - - buildToolsVersion rootProject.ext.buildToolsVersion - compileSdk rootProject.ext.compileSdkVersion - - namespace 'com.converse' - defaultConfig { - applicationId 'com.converse.dev' - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0.0" - - configurations.all { - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - if (details.requested.name == 'bcprov-jdk15on') { - details.useTarget group: details.requested.group, name: 'bcprov-jdk15to18', version: '1.70' - } - if (details.requested.name == 'lifecycle-viewmodel-ktx') { - details.useTarget group: details.requested.group, name: 'lifecycle-viewmodel-ktx', version: '2.5.0' - } - } - } - - } - - flavorDimensions "env" - productFlavors { - dev { - dimension "env" - applicationId "com.converse.dev" - } - prod { - dimension "env" - applicationId "com.converse.prod" - } - preview { - dimension "env" - applicationId "com.converse.preview" - } - } - - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - - - - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug - shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true) - } - } - - - sourceSets { - main { assets.srcDirs = ['src/main/assets', '../../assets'] } - } - lint { - abortOnError false - } - - packagingOptions { - jniLibs { - useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false) - } - } - -} - -// Apply static values from `gradle.properties` to the `android.packagingOptions` -// Accepts values in comma delimited lists, example: -// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini -["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> - // Split option: 'foo,bar' -> ['foo', 'bar'] - def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); - // Trim all elements in place. - for (i in 0.. 0) { - println "android.packagingOptions.$prop += $options ($options.length)" - // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**' - options.each { - android.packagingOptions[prop] += it - } - } -} - -dependencies { - // The version of react-native is set by the React Native Gradle Plugin - implementation("com.facebook.react:react-android") - - implementation 'com.google.firebase:firebase-messaging-ktx:24.0.1' - implementation 'com.beust:klaxon:5.5' - implementation 'androidx.security:security-crypto:1.1.0-alpha05' - implementation "org.xmtp:android:0.16.2" - implementation 'org.web3j:crypto:4.9.4' - implementation 'com.google.crypto.tink:tink-android:1.7.0' - implementation 'com.android.volley:volley:1.2.1' - implementation 'com.tencent:mmkv:1.3.1' - implementation 'me.leolin:ShortcutBadger:1.1.22' - implementation "org.jetbrains.kotlin:kotlin-reflect:1.9.22" - implementation 'com.github.bumptech.glide:glide:4.13.2' - annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2' - - - - def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true"; - def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true"; - def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true"; - - if (isGifEnabled) { - // For animated gif support - implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}") - } - - if (isWebpEnabled) { - // For webp support - implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}") - if (isWebpAnimatedEnabled) { - // Animated webp support - implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}") - } - } - - implementation("androidx.core:core-splashscreen:1.0.0") - - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } -} - -apply plugin: 'org.jetbrains.kotlin.android' -apply plugin: "io.sentry.android.gradle" -apply plugin: 'com.google.gms.google-services' - -sentry { - // Enables or disables the automatic configuration of Native Symbols - // for Sentry. This executes sentry-cli automatically so - // you don't need to do it manually. - // Default is disabled. - uploadNativeSymbols = true - - // Enables or disables the automatic upload of the app's native source code to Sentry. - // This executes sentry-cli with the --include-sources param automatically so - // you don't need to do it manually. - // This option has an effect only when [uploadNativeSymbols] is enabled. - // Default is disabled. - includeNativeSources = true - - autoInstallation { - enabled = false - } -} \ No newline at end of file diff --git a/android/app/debug.keystore b/android/app/debug.keystore deleted file mode 100644 index 364e105ed..000000000 Binary files a/android/app/debug.keystore and /dev/null differ diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro deleted file mode 100644 index 551eb41da..000000000 --- a/android/app/proguard-rules.pro +++ /dev/null @@ -1,14 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# react-native-reanimated --keep class com.swmansion.reanimated.** { *; } --keep class com.facebook.react.turbomodule.** { *; } - -# Add any project specific keep options here: diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 99e38fc5f..000000000 --- a/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 367a3cc6b..000000000 --- a/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/app/src/main/google-services.json b/android/app/src/main/google-services.json deleted file mode 100644 index 115bfb5d8..000000000 --- a/android/app/src/main/google-services.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "project_info": { - "project_number": "564961909146", - "project_id": "converse-unshut-labs", - "storage_bucket": "converse-unshut-labs.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:564961909146:android:93ca1fb8d079f640bd0223", - "android_client_info": { - "package_name": "com.converse.dev" - } - }, - "oauth_client": [ - { - "client_id": "564961909146-n61c2ccs7s26k7i5gmv2e1cv3r52t4i5.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyBLyJ66tj4-ej4Cq2BHa-EJhHNTNWp8bFE" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "564961909146-n61c2ccs7s26k7i5gmv2e1cv3r52t4i5.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/android/app/src/main/ic_launcher-playstore.png b/android/app/src/main/ic_launcher-playstore.png deleted file mode 100644 index 24d353d3d..000000000 Binary files a/android/app/src/main/ic_launcher-playstore.png and /dev/null differ diff --git a/android/app/src/main/ic_launcher_preview-playstore.png b/android/app/src/main/ic_launcher_preview-playstore.png deleted file mode 100644 index 24d353d3d..000000000 Binary files a/android/app/src/main/ic_launcher_preview-playstore.png and /dev/null differ diff --git a/android/app/src/main/java/com/converse/MainActivity.kt b/android/app/src/main/java/com/converse/MainActivity.kt deleted file mode 100644 index 0a6dfbc50..000000000 --- a/android/app/src/main/java/com/converse/MainActivity.kt +++ /dev/null @@ -1,59 +0,0 @@ -package com.converse - -import android.os.Build -import android.os.Bundle - -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate - -import com.zoontek.rnbootsplash.RNBootSplash; -import expo.modules.ReactActivityDelegateWrapper - -class MainActivity : ReactActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - RNBootSplash.init(this); - super.onCreate(null) - } - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "main" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate { - return ReactActivityDelegateWrapper( - this, - BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, - object : DefaultReactActivityDelegate( - this, - mainComponentName, - fabricEnabled - ){}) - } - - /** - * Align the back button behavior with Android S - * where moving root activities to background instead of finishing activities. - * @see onBackPressed - */ - override fun invokeDefaultOnBackPressed() { - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { - if (!moveTaskToBack(false)) { - // For non-root activities, use the default implementation to finish them. - super.invokeDefaultOnBackPressed() - } - return - } - - // Use the default back button implementation on Android S - // because it's doing more than [Activity.moveTaskToBack] in fact. - super.invokeDefaultOnBackPressed() - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/converse/MainApplication.kt b/android/app/src/main/java/com/converse/MainApplication.kt deleted file mode 100644 index 03393a496..000000000 --- a/android/app/src/main/java/com/converse/MainApplication.kt +++ /dev/null @@ -1,55 +0,0 @@ -package com.converse - -import android.app.Application -import android.content.res.Configuration - -import com.facebook.react.PackageList -import com.facebook.react.ReactApplication -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.ReactHost -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.soloader.SoLoader - -import expo.modules.ApplicationLifecycleDispatcher -import expo.modules.ReactNativeHostWrapper - -class MainApplication : Application(), ReactApplication { - - override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper( - this, - object : DefaultReactNativeHost(this) { - override fun getPackages(): List { - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - return PackageList(this).packages - } - - override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - ) - - override val reactHost: ReactHost - get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() - SoLoader.init(this, false) - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - load() - } - ApplicationLifecycleDispatcher.onApplicationCreate(this) - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) - } -} \ No newline at end of file diff --git a/android/app/src/main/res/drawable-hdpi/ic_default_expo_notifications.png b/android/app/src/main/res/drawable-hdpi/ic_default_expo_notifications.png deleted file mode 100644 index 04f11def2..000000000 Binary files a/android/app/src/main/res/drawable-hdpi/ic_default_expo_notifications.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-mdpi/ic_default_expo_notifications.png b/android/app/src/main/res/drawable-mdpi/ic_default_expo_notifications.png deleted file mode 100644 index 5537ab62d..000000000 Binary files a/android/app/src/main/res/drawable-mdpi/ic_default_expo_notifications.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-v24/ic_launcher_background.xml b/android/app/src/main/res/drawable-v24/ic_launcher_background.xml deleted file mode 100644 index de4af6a95..000000000 --- a/android/app/src/main/res/drawable-v24/ic_launcher_background.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/drawable-xhdpi/ic_default_expo_notifications.png b/android/app/src/main/res/drawable-xhdpi/ic_default_expo_notifications.png deleted file mode 100644 index 7b04fdcc5..000000000 Binary files a/android/app/src/main/res/drawable-xhdpi/ic_default_expo_notifications.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_default_expo_notifications.png b/android/app/src/main/res/drawable-xxhdpi/ic_default_expo_notifications.png deleted file mode 100644 index 2eed8d3d0..000000000 Binary files a/android/app/src/main/res/drawable-xxhdpi/ic_default_expo_notifications.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_default_expo_notifications.png b/android/app/src/main/res/drawable-xxxhdpi/ic_default_expo_notifications.png deleted file mode 100644 index 0f2e99114..000000000 Binary files a/android/app/src/main/res/drawable-xxxhdpi/ic_default_expo_notifications.png and /dev/null differ diff --git a/android/app/src/main/res/drawable/rn_edit_text_material.xml b/android/app/src/main/res/drawable/rn_edit_text_material.xml deleted file mode 100644 index f35d99620..000000000 --- a/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 4ae7d1237..000000000 --- a/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/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_preview.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_preview.xml deleted file mode 100644 index 1f5170f08..000000000 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_preview.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_preview_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_preview_round.xml deleted file mode 100644 index 1f5170f08..000000000 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_preview_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 4ae7d1237..000000000 --- a/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/android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png deleted file mode 100644 index b300b9958..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index 59ed55d48..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp deleted file mode 100644 index c0ced3387..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp deleted file mode 100644 index 58a4ec727..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview.webp deleted file mode 100644 index 59ed55d48..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_background.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_background.webp deleted file mode 100644 index c0ced3387..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_foreground.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_foreground.webp deleted file mode 100644 index 58a4ec727..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_round.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_round.webp deleted file mode 100644 index a066cad27..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_preview_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index a066cad27..000000000 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png deleted file mode 100644 index fac826fcd..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100644 index b070c4e81..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp deleted file mode 100644 index cd0baf067..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp deleted file mode 100644 index 5dd0e2625..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview.webp deleted file mode 100644 index b070c4e81..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_background.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_background.webp deleted file mode 100644 index cd0baf067..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_foreground.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_foreground.webp deleted file mode 100644 index 5dd0e2625..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_round.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_round.webp deleted file mode 100644 index f96466c91..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_preview_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index f96466c91..000000000 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png deleted file mode 100644 index a644719ce..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index a606ff546..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp deleted file mode 100644 index 9a9a067da..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp deleted file mode 100644 index 449c7ce17..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview.webp deleted file mode 100644 index a606ff546..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_background.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_background.webp deleted file mode 100644 index 9a9a067da..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_foreground.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_foreground.webp deleted file mode 100644 index 449c7ce17..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_round.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_round.webp deleted file mode 100644 index 415bdb9ac..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_preview_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 415bdb9ac..000000000 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png deleted file mode 100644 index ba832b31b..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 6186c065c..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp deleted file mode 100644 index 3e5665109..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index 49c5e0e15..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview.webp deleted file mode 100644 index 6186c065c..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_background.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_background.webp deleted file mode 100644 index 3e5665109..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_foreground.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_foreground.webp deleted file mode 100644 index 49c5e0e15..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_round.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_round.webp deleted file mode 100644 index aa55aad6d..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_preview_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index aa55aad6d..000000000 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png deleted file mode 100644 index 002589ad6..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index ce5195fdc..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp deleted file mode 100644 index 64074c760..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp deleted file mode 100644 index 89da27516..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview.webp deleted file mode 100644 index ce5195fdc..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_background.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_background.webp deleted file mode 100644 index 64074c760..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_background.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_foreground.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_foreground.webp deleted file mode 100644 index 89da27516..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_foreground.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_round.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_round.webp deleted file mode 100644 index e32241890..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_preview_round.webp and /dev/null differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index e32241890..000000000 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/android/app/src/main/res/values-night/colors.xml b/android/app/src/main/res/values-night/colors.xml deleted file mode 100644 index 54b32641a..000000000 --- a/android/app/src/main/res/values-night/colors.xml +++ /dev/null @@ -1,4 +0,0 @@ - - #000000 - #000000 - \ No newline at end of file diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml deleted file mode 100644 index eabdd524c..000000000 --- a/android/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,7 +0,0 @@ - - #FFFFFF - #023c69 - #ffffff - #FFFFFF - #FC4F37 - \ No newline at end of file diff --git a/android/app/src/main/res/values/ic_launcher_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index c5d5899fd..000000000 --- a/android/app/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #FFFFFF - \ No newline at end of file diff --git a/android/app/src/main/res/values/ic_launcher_preview_background.xml b/android/app/src/main/res/values/ic_launcher_preview_background.xml deleted file mode 100644 index 33c5187fb..000000000 --- a/android/app/src/main/res/values/ic_launcher_preview_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #ADADAD - \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml deleted file mode 100644 index dc907a7cb..000000000 --- a/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - Converse DEV - contain - false - automatic - 2.0.6 - \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 77f1b31ba..000000000 --- a/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/android/app/src/preview/AndroidManifest.xml b/android/app/src/preview/AndroidManifest.xml deleted file mode 100644 index 5ef15e678..000000000 --- a/android/app/src/preview/AndroidManifest.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/preview/res/values/strings.xml b/android/app/src/preview/res/values/strings.xml deleted file mode 100644 index 2e88d1848..000000000 --- a/android/app/src/preview/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Converse PREVIEW - diff --git a/android/app/src/prod/AndroidManifest.xml b/android/app/src/prod/AndroidManifest.xml deleted file mode 100644 index f0ee2c224..000000000 --- a/android/app/src/prod/AndroidManifest.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/prod/res/values/strings.xml b/android/app/src/prod/res/values/strings.xml deleted file mode 100644 index 9565a7d78..000000000 --- a/android/app/src/prod/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Converse - diff --git a/android/build.gradle b/android/build.gradle deleted file mode 100644 index e69545abe..000000000 --- a/android/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - ext { - buildToolsVersion = findProperty('android.buildToolsVersion') ?: '34.0.0' - minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23') - compileSdkVersion = 34 - targetSdkVersion = 34 - kotlinVersion = "1.9.23" - - ndkVersion = "26.1.10909125" - } - repositories { - google() - mavenCentral() - } - dependencies { - classpath('com.android.tools.build:gradle:8.5.0') - classpath('com.facebook.react:react-native-gradle-plugin') - classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0' - classpath("io.sentry:sentry-android-gradle-plugin:3.11.1") - classpath 'com.google.gms:google-services:4.4.0' - } -} - -apply plugin: "com.facebook.react.rootproject" - - -allprojects { - repositories { - maven { - // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm - url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) - } - maven { - // Android JSC is installed from npm - url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) - } - - google() - mavenCentral() - maven { url 'https://www.jitpack.io' } - } -} \ No newline at end of file diff --git a/android/gradle.properties b/android/gradle.properties deleted file mode 100644 index 95323bd09..000000000 --- a/android/gradle.properties +++ /dev/null @@ -1,57 +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. -# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m -org.gradle.jvmargs=-Xmx4608m -XX:MaxMetaspaceSize=2g - -# 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 - -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true - -android.enablePngCrunchInReleaseBuilds=true - -# Use this property to specify which architecture you want to build. -# You can also override it from the CLI using -# ./gradlew -PreactNativeArchitectures=x86_64 -reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 - -# Use this property to enable support to the new architecture. -# This will allow you to use TurboModules and the Fabric render in -# your application. You should enable this flag either if you want -# to write custom TurboModules/Fabric components OR use libraries that -# are providing them. -newArchEnabled=false - -# The hosted JavaScript engine -hermesEnabled=true - -# Enable GIF support in React Native images (~200 B increase) -expo.gif.enabled=true -# Enable webp support in React Native images (~85 KB increase) -expo.webp.enabled=true -# Enable animated webp support (~3.4 MB increase) -# Disabled by default because iOS doesn't support animated webp -expo.webp.animated=false - -# Enable network inspector -EX_DEV_CLIENT_NETWORK_INSPECTOR=true - -# Use legacy packaging to compress native libraries in the resulting APK. -expo.useLegacyPackaging=false diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 249e5832f..000000000 Binary files a/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 6f7a6eb33..000000000 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew deleted file mode 100755 index ce3ee30bc..000000000 --- a/android/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original 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 POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} - -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# 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 ;; #( - MSYS* | 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 - if ! command -v java >/dev/null 2>&1 - then - 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 -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# 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"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat deleted file mode 100644 index 7101f8e46..000000000 --- a/android/gradlew.bat +++ /dev/null @@ -1,92 +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=. -@rem This is normally unused -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% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -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% equ 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! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/android/react-settings-plugin/build.gradle.kts b/android/react-settings-plugin/build.gradle.kts deleted file mode 100644 index b4f6668e9..000000000 --- a/android/react-settings-plugin/build.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - -plugins { - kotlin("jvm") version "1.9.24" - id("java-gradle-plugin") -} - -repositories { - mavenCentral() -} - -gradlePlugin { - plugins { - create("reactSettingsPlugin") { - id = "com.facebook.react.settings" - implementationClass = "expo.plugins.ReactSettingsPlugin" - } - } -} diff --git a/android/react-settings-plugin/src/main/kotlin/expo/plugins/ReactSettingsPlugin.kt b/android/react-settings-plugin/src/main/kotlin/expo/plugins/ReactSettingsPlugin.kt deleted file mode 100644 index c54f6c7a6..000000000 --- a/android/react-settings-plugin/src/main/kotlin/expo/plugins/ReactSettingsPlugin.kt +++ /dev/null @@ -1,10 +0,0 @@ -package expo.plugins - -import org.gradle.api.Plugin -import org.gradle.api.initialization.Settings - -class ReactSettingsPlugin : Plugin { - override fun apply(settings: Settings) { - // Do nothing, just register the plugin. - } -} diff --git a/android/sentry.properties b/android/sentry.properties deleted file mode 100644 index 16bdf9135..000000000 --- a/android/sentry.properties +++ /dev/null @@ -1,4 +0,0 @@ -defaults.url=https://sentry.io/ -defaults.org=converse-app -defaults.project=converse-react-native -auth.token=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 diff --git a/android/settings.gradle b/android/settings.gradle deleted file mode 100644 index 96f10f13e..000000000 --- a/android/settings.gradle +++ /dev/null @@ -1,40 +0,0 @@ -pluginManagement { - includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile().toString()) -} - -plugins { id("com.facebook.react.settings") } - -extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> - if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') { - println('\u001B[32mUsing expo-modules-autolinking as core autolinking source\u001B[0m') - def command = [ - 'node', - '--no-warnings', - '--eval', - 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', - 'react-native-config', - '--json', - '--platform', - 'android' - ].toList() - ex.autolinkLibrariesFromCommand(command) - } else { - ex.autolinkLibrariesFromCommand() - } -} - -rootProject.name = 'Converse' - -dependencyResolutionManagement { - versionCatalogs { - reactAndroidLibs { - from(files(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../gradle/libs.versions.toml"))) - } - } -} - -apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle"); -useExpoModules() - -include ':app' -includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) diff --git a/app.config.ts b/app.config.ts index f7fac77c6..e3714ceb0 100644 --- a/app.config.ts +++ b/app.config.ts @@ -1,5 +1,7 @@ import { ConfigContext, ExpoConfig } from "expo/config"; import warnOnce from "warn-once"; +// Removed this import as it was causing a build error +// import type { PluginConfigTypeAndroid } from "expo-build-properties/src/pluginConfig"; import appBuildNumbers from "./app.json"; @@ -13,6 +15,26 @@ warnOnce( const isPreview = env.EXPO_ENV === "preview"; const isProduction = !isDev && !isPreview; +const scheme = isDev + ? "converse-dev" + : isPreview + ? "converse-preview" + : "converse"; +const androidPackage = isDev + ? "com.converse.dev" + : isPreview + ? "com.converse.preview" + : "com.converse.prod"; +const appDomainConverse = isDev + ? "dev.converse.xyz" + : isPreview + ? "preview.converse.xyz" + : "converse.xyz"; +const appDomainGetConverse = isDev + ? "dev.getconverse.app" + : isPreview + ? "preview.getconverse.app" + : "getconverse.app"; export default ({ config }: ConfigContext): ExpoConfig => ({ ...config, @@ -33,6 +55,15 @@ export default ({ config }: ConfigContext): ExpoConfig => ({ }, version: appBuildNumbers.expo.version, assetBundlePatterns: ["**/*"], + extra: { + eas: { + projectId: "49a65fae-3895-4487-8e8a-5bd8bee3a401", + }, + ENV: isDev ? "dev" : isPreview ? "preview" : "prod", + }, + runtimeVersion: appBuildNumbers.expo.version, + owner: "converse", + jsEngine: "hermes", ios: { supportsTablet: true, buildNumber: appBuildNumbers.expo.ios.buildNumber, @@ -41,23 +72,173 @@ export default ({ config }: ConfigContext): ExpoConfig => ({ }, }, android: { - adaptiveIcon: { - foregroundImage: "./assets/adaptive-icon.png", - backgroundColor: "#FFFFFF", - }, versionCode: appBuildNumbers.expo.android.versionCode, + package: androidPackage, + googleServicesFile: isDev + ? "./scripts/build/android/google-services/dev.json" + : isPreview + ? "./scripts/build/android/google-services/preview.json" + : "./scripts/build/android/google-services/production.json", + permissions: [ + "INTERNET", + "READ_EXTERNAL_STORAGE", + "SYSTEM_ALERT_WINDOW", + "VIBRATE", + "POST_NOTIFICATIONS", + "READ_CONTACTS", + "RECEIVE_BOOT_COMPLETED", + "WRITE_EXTERNAL_STORAGE", + "WAKE_LOCK", + "USE_FINGERPRINT", + "USE_BIOMETRIC", + ], + intentFilters: [ + { + action: "VIEW", + category: ["DEFAULT", "BROWSABLE"], + data: [{ scheme: scheme }, { scheme: androidPackage }], + }, + { + autoVerify: true, + action: "VIEW", + category: ["DEFAULT", "BROWSABLE"], + data: [ + { scheme: "https", host: appDomainGetConverse, pathPrefix: "/dm" }, + { scheme: "https", host: appDomainConverse, pathPrefix: "/dm" }, + { + scheme: "https", + host: appDomainGetConverse, + pathPrefix: "/group-invite", + }, + { + scheme: "https", + host: appDomainConverse, + pathPrefix: "/group-invite", + }, + { + scheme: "https", + host: appDomainGetConverse, + pathPrefix: "/group", + }, + { scheme: "https", host: appDomainConverse, pathPrefix: "/group" }, + { + scheme: "https", + host: appDomainGetConverse, + pathPrefix: "/coinbase", + }, + { + scheme: "https", + host: appDomainConverse, + pathPrefix: "/coinbase", + }, + { + scheme: "https", + host: appDomainGetConverse, + pathPrefix: "/desktopconnect", + }, + { + scheme: "https", + host: appDomainConverse, + pathPrefix: "/desktopconnect", + }, + ], + }, + ], }, + plugins: [ + [ + "expo-build-properties", + { + android: { + compileSdkVersion: 34, + targetSdkVersion: 34, + buildToolsVersion: "34.0.0", + minSdkVersion: 26, + manifestQueries: { + package: ["org.toshi"], + intent: [ + { + action: "VIEW", + data: { + scheme: "cbwallet", + host: "*", + }, + }, + { + action: "VIEW", + data: { + scheme: "ledgerlive", + host: "*", + }, + }, + { + action: "VIEW", + data: { + scheme: "rainbow", + host: "*", + }, + }, + { + action: "VIEW", + data: { + scheme: "metamask", + host: "*", + }, + }, + { + action: "VIEW", + data: { + scheme: "trust", + host: "*", + }, + }, + { + action: "VIEW", + data: { + scheme: "uniswap", + host: "*", + }, + }, + { + action: "VIEW", + data: { + scheme: "zerion", + host: "*", + }, + }, + { + action: "VIEW", + data: { + scheme: "exodus", + host: "*", + }, + }, + { + action: "VIEW", + data: { + scheme: "oneinch", + host: "*", + }, + }, + ], + }, + }, + }, + ], + [ + "@sentry/react-native/expo", + { + organization: "converse-app", + project: "converse-react-native", + url: "https://sentry.io/", + }, + ], + "./scripts/build/android/notifeeExpoPlugin.js", // See https://github.com/invertase/notifee/issues/350 + "./scripts/build/android/androidDependenciesExpoPlugin.js", // Handle some conflicting dependencies manually + "./scripts/build/android/buildGradleProperties.js", // Increase memory for building android in EAS + ], web: { favicon: "./assets/favicon.png", bundler: "metro", }, - extra: { - eas: { - projectId: "49a65fae-3895-4487-8e8a-5bd8bee3a401", - }, - ENV: isDev ? "dev" : isPreview ? "preview" : "prod", - }, - runtimeVersion: appBuildNumbers.expo.version, - owner: "converse", - jsEngine: "hermes", }); diff --git a/assets/adaptive-icon.png b/assets/adaptive-icon.png deleted file mode 100644 index 03d6f6b6c..000000000 Binary files a/assets/adaptive-icon.png and /dev/null differ diff --git a/eas.json b/eas.json index f60f8ad04..b7d0928e0 100644 --- a/eas.json +++ b/eas.json @@ -16,7 +16,6 @@ "cocoapods": "1.14.3" }, "android": { - "gradleCommand": ":app:assembleDevDebug", "resourceClass": "medium" } }, @@ -25,7 +24,6 @@ "channel": "production", "android": { "buildType": "app-bundle", - "gradleCommand": ":app:bundleProdRelease", "resourceClass": "large" }, "node": "20.15.1", @@ -41,9 +39,6 @@ "preview": { "extends": "production", "channel": "preview", - "android": { - "gradleCommand": ":app:bundlePreviewRelease" - }, "env": { "EXPO_ENV": "preview" }, diff --git a/features/conversation-list/hooks/useMessageIsUnread.ts b/features/conversation-list/hooks/useMessageIsUnread.ts index ea058fad8..5e712ba27 100644 --- a/features/conversation-list/hooks/useMessageIsUnread.ts +++ b/features/conversation-list/hooks/useMessageIsUnread.ts @@ -30,7 +30,7 @@ export const useConversationIsUnread = ({ if (topicsData[topic]?.status === "unread") return true; // Check if the last message was sent by the current user - if (lastMessage.senderAddress === currentInboxId) { + if (lastMessage.senderInboxId === currentInboxId) { return false; } diff --git a/features/conversation/conversation-composer/conversation-composer-reply-preview.tsx b/features/conversation/conversation-composer/conversation-composer-reply-preview.tsx index 2190af092..7c258a656 100644 --- a/features/conversation/conversation-composer/conversation-composer-reply-preview.tsx +++ b/features/conversation/conversation-composer/conversation-composer-reply-preview.tsx @@ -59,11 +59,11 @@ export const ReplyPreview = memo(function ReplyPreview() { }); const inboxName = usePreferredInboxName( - replyMessage?.senderAddress as InboxId + replyMessage?.senderInboxId as InboxId ); const replyingTo = replyMessage - ? replyMessage.senderAddress === currentAccountInboxId + ? replyMessage.senderInboxId === currentAccountInboxId ? `Replying to you` : inboxName ? `Replying to ${inboxName}` diff --git a/features/conversation/conversation-message/conversation-message-content-types/conversation-message-reply.tsx b/features/conversation/conversation-message/conversation-message-content-types/conversation-message-reply.tsx index ff88203e1..b1761aebb 100644 --- a/features/conversation/conversation-message/conversation-message-content-types/conversation-message-reply.tsx +++ b/features/conversation/conversation-message/conversation-message-content-types/conversation-message-reply.tsx @@ -115,7 +115,7 @@ const MessageReplyReference = memo(function MessageReplyReference(props: { useConversationMessageForReplyMessage(referenceMessageId); const inboxName = usePreferredInboxName( - replyMessageReference?.senderAddress as InboxId + replyMessageReference?.senderInboxId as InboxId ); return ( diff --git a/features/conversation/conversation-message/conversation-message.store-context.tsx b/features/conversation/conversation-message/conversation-message.store-context.tsx index 6a14e6b20..e1ca78331 100644 --- a/features/conversation/conversation-message/conversation-message.store-context.tsx +++ b/features/conversation/conversation-message/conversation-message.store-context.tsx @@ -82,7 +82,7 @@ function getStoreStateBasedOnProps(props: IMessageContextStoreProps) { previousMessage: props.previousMessage, }), sentAt: convertNanosecondsToMilliseconds(props.message.sentNs), - senderInboxId: props.message.senderAddress, + senderInboxId: props.message.senderInboxId, isHighlighted: false, isShowingTime: false, }; diff --git a/features/conversation/conversation-message/conversation-message.utils.tsx b/features/conversation/conversation-message/conversation-message.utils.tsx index 3348cfbb9..8d015b3b8 100644 --- a/features/conversation/conversation-message/conversation-message.utils.tsx +++ b/features/conversation/conversation-message/conversation-message.utils.tsx @@ -97,7 +97,7 @@ export function useMessageSenderReadableProfile( if (!currentAccountAdress) { return ""; } - return getReadableProfile(currentAccountAdress, message.senderAddress); + return getReadableProfile(currentAccountAdress, message.senderInboxId); } export function getMessageById({ diff --git a/features/conversation/conversation.tsx b/features/conversation/conversation.tsx index ae797bc36..e54ad9cdc 100644 --- a/features/conversation/conversation.tsx +++ b/features/conversation/conversation.tsx @@ -195,7 +195,7 @@ const Messages = memo(function Messages(props: { return messages.ids.find( (messageId) => isAnActualMessage(messages.byId[messageId]) && - messages.byId[messageId].senderAddress === currentAccountInboxId + messages.byId[messageId].senderInboxId === currentAccountInboxId ); }, [messages?.ids, messages?.byId, currentAccountInboxId]); diff --git a/features/conversation/hooks/use-react-on-message.ts b/features/conversation/hooks/use-react-on-message.ts index ed4201df7..305575382 100644 --- a/features/conversation/hooks/use-react-on-message.ts +++ b/features/conversation/hooks/use-react-on-message.ts @@ -39,14 +39,14 @@ export function useReactOnMessage(props: { account: currentAccount, topic: conversation.topic, message: { - id: getRandomId(), + id: getRandomId() as MessageId, client: conversation.client, contentTypeId: contentTypesPrefixes.reaction, sentNs: getTodayNs(), fallback: variables.reaction.content, deliveryStatus: MessageDeliveryStatus.PUBLISHED, topic: conversation.topic, - senderAddress: currentUserInboxId, + senderInboxId: currentUserInboxId, nativeContent: {}, content: () => { return variables.reaction; diff --git a/features/conversation/hooks/use-remove-reaction-on-message.ts b/features/conversation/hooks/use-remove-reaction-on-message.ts index 7355138c9..b152ca2b6 100644 --- a/features/conversation/hooks/use-remove-reaction-on-message.ts +++ b/features/conversation/hooks/use-remove-reaction-on-message.ts @@ -38,14 +38,14 @@ export function useRemoveReactionOnMessage(props: { account: currentAccount, topic: conversation.topic, message: { - id: getRandomId(), + id: getRandomId() as MessageId, client: conversation.client, contentTypeId: contentTypesPrefixes.reaction, sentNs: getTodayNs(), fallback: variables.reaction.content, deliveryStatus: MessageDeliveryStatus.PUBLISHED, topic: conversation.topic, - senderAddress: currentUserInboxId, + senderInboxId: currentUserInboxId, nativeContent: {}, content: () => { return variables.reaction; diff --git a/features/conversation/hooks/use-send-message.ts b/features/conversation/hooks/use-send-message.ts index fdaa706c0..b6e9c4d93 100644 --- a/features/conversation/hooks/use-send-message.ts +++ b/features/conversation/hooks/use-send-message.ts @@ -72,7 +72,7 @@ export function useSendMessage(props: { const generatedMessageId = getRandomId(); const textMessage: DecodedMessage = { - id: generatedMessageId, + id: generatedMessageId as MessageId, client: conversation.client, contentTypeId: variables.content.text ? contentTypesPrefixes.text diff --git a/features/conversation/utils/has-next-message-in-serie.ts b/features/conversation/utils/has-next-message-in-serie.ts index a1a3f6d59..87dc8f1e9 100644 --- a/features/conversation/utils/has-next-message-in-serie.ts +++ b/features/conversation/utils/has-next-message-in-serie.ts @@ -10,5 +10,5 @@ export const hasNextMessageInSeries = ({ nextMessage, }: HasNextMessageInSeriesPayload) => { if (!nextMessage) return false; - return nextMessage.senderAddress === currentMessage.senderAddress; + return nextMessage.senderInboxId === currentMessage.senderInboxId; }; diff --git a/features/conversation/utils/has-previous-message-in-serie.ts b/features/conversation/utils/has-previous-message-in-serie.ts index bac558f93..32a38a219 100644 --- a/features/conversation/utils/has-previous-message-in-serie.ts +++ b/features/conversation/utils/has-previous-message-in-serie.ts @@ -10,5 +10,5 @@ export const hasPreviousMessageInSeries = ({ previousMessage, }: HasPreviousMessageInSeriesPayload) => { if (!previousMessage || !currentMessage) return false; - return previousMessage.senderAddress !== currentMessage.senderAddress; + return previousMessage.senderInboxId !== currentMessage.senderInboxId; }; diff --git a/features/conversation/utils/is-latest-message-settled-from-peer.ts b/features/conversation/utils/is-latest-message-settled-from-peer.ts index fee0ea6ad..a4dd115c1 100644 --- a/features/conversation/utils/is-latest-message-settled-from-peer.ts +++ b/features/conversation/utils/is-latest-message-settled-from-peer.ts @@ -18,5 +18,5 @@ export const isLatestMessageSettledFromPeer = ({ ) return false; if (!nextMessage) return true; - return nextMessage.senderAddress !== message.senderAddress; + return nextMessage.senderInboxId !== message.senderInboxId; }; diff --git a/features/conversation/utils/message-is-from-current-user.ts b/features/conversation/utils/message-is-from-current-user.ts index eb1f23d4b..2be834d93 100644 --- a/features/conversation/utils/message-is-from-current-user.ts +++ b/features/conversation/utils/message-is-from-current-user.ts @@ -12,13 +12,13 @@ export const messageIsFromCurrentUser = ({ if (!message) return false; const currentAccount = getCurrentAccount(); if (!currentAccount) return false; - return message.senderAddress.toLowerCase() === currentAccount.toLowerCase(); + return message.senderInboxId.toLowerCase() === currentAccount.toLowerCase(); }; export function messageIsFromCurrentUserV3({ message, }: MessageFromCurrentUserPayload) { return ( - message?.senderAddress.toLowerCase() === getCurrentUserAccountInboxId() + message?.senderInboxId.toLowerCase() === getCurrentUserAccountInboxId() ); } diff --git a/features/notifications/utils/background/groupMessageNotification.ts b/features/notifications/utils/background/groupMessageNotification.ts index 9d8c3e88a..e45ea434a 100644 --- a/features/notifications/utils/background/groupMessageNotification.ts +++ b/features/notifications/utils/background/groupMessageNotification.ts @@ -1,16 +1,27 @@ -import { ConverseXmtpClientType } from "@utils/xmtpRN/client"; +import { + ConverseXmtpClientType, + GroupWithCodecsType, +} from "@utils/xmtpRN/client"; import { ProtocolNotification } from "./protocolNotification"; import notifee, { + AndroidPerson, AndroidStyle, AndroidVisibility, } from "@notifee/react-native"; -import { getV3IdFromTopic } from "@utils/groupUtils/groupId"; -import { getProfile, getPreferredName } from "@utils/profile"; +import { + getProfile, + getPreferredName, + getPreferredAvatar, +} from "@utils/profile"; import { androidChannel } from "../setupAndroidNotificationChannel"; import { getNotificationContent } from "./notificationContent"; import { computeSpamScoreGroupMessage } from "./notificationSpamScore"; import { notificationAlreadyShown } from "./alreadyShown"; -import type { ConversationTopic } from "@xmtp/react-native-sdk"; +import { + ConversationVersion, + Group, + type ConversationTopic, +} from "@xmtp/react-native-sdk"; import { normalizeTimestamp } from "@/utils/date"; export const isGroupMessageContentTopic = (contentTopic: string) => { @@ -21,77 +32,118 @@ export const handleGroupMessageNotification = async ( xmtpClient: ConverseXmtpClientType, notification: ProtocolNotification ) => { - const groupId = getV3IdFromTopic( + let conversation = await xmtpClient.conversations.findConversationByTopic( notification.contentTopic as ConversationTopic ); - let group = await xmtpClient.conversations.findGroup(groupId); - if (!group) { + if (!conversation) { await xmtpClient.conversations.sync(); - group = await xmtpClient.conversations.findGroup(groupId); - if (!group) throw new Error("Group not found"); + conversation = await xmtpClient.conversations.findConversationByTopic( + notification.contentTopic as ConversationTopic + ); + if (!conversation) throw new Error("Conversation not found"); } - await group.sync(); - const groupName = await group.groupName(); - const message = await group.processMessage(notification.message); + await conversation.sync(); + const isGroup = conversation.version === ConversationVersion.GROUP; + + const message = await conversation.processMessage(notification.message); // Not displaying notifications for ourselves, syncing is enough - if (message.senderAddress === xmtpClient.inboxId) return; + if (message.senderInboxId === xmtpClient.inboxId) return; // Not displaying notifications for already shown messages if (notificationAlreadyShown(message.id)) return; // Let's compute spam score const spamScore = await computeSpamScoreGroupMessage( xmtpClient, - group, + conversation as GroupWithCodecsType, message ); - if (spamScore >= 0) { - // Not displaying notifications for spam, syncing is enough - return; - } + if (spamScore >= 0) return; // For now, use the group member linked address as "senderAddress" // @todo => make inboxId a first class citizen - const senderAddress = (await group.members()).find( - (m) => m.inboxId === message.senderAddress + const senderAddress = (await conversation.members()).find( + (m) => m.inboxId === message.senderInboxId )?.addresses[0]; if (!senderAddress) return; const senderSocials = await getProfile( xmtpClient.address, - message.senderAddress, + message.senderInboxId, senderAddress ); const senderName = getPreferredName(senderSocials, senderAddress); - const notificationContent = await getNotificationContent(group, message); + const notificationContent = await getNotificationContent( + conversation as GroupWithCodecsType, + message + ); if (!notificationContent) return; - const groupImage = await group.groupImageUrlSquare(); - - await notifee.displayNotification({ - title: groupName, - subtitle: senderName, - body: notificationContent, - data: notification, - android: { - channelId: androidChannel.id, - pressAction: { - id: "default", - }, - visibility: AndroidVisibility.PUBLIC, - style: { - type: AndroidStyle.MESSAGING, - person: { - name: groupName, - icon: groupImage, + if (isGroup) { + const groupName = await (conversation as Group).groupName(); + const groupImage = await (conversation as Group).groupImageUrlSquare(); + const person: AndroidPerson = { + name: groupName || "Group", + }; + if (groupImage) { + person.icon = groupImage; + } + await notifee.displayNotification({ + title: groupName, + subtitle: senderName, + body: notificationContent, + data: notification, + android: { + channelId: androidChannel.id, + pressAction: { + id: "default", }, - messages: [ - { - // Notifee doesn't handle more complex messages with a group name & image + a person name & image - // so handling it manually by concatenating sender name & message - text: `${senderName}: ${notificationContent}`, - timestamp: normalizeTimestamp(message.sentNs), + visibility: AndroidVisibility.PUBLIC, + style: { + type: AndroidStyle.MESSAGING, + person: { + name: groupName, + icon: groupImage, }, - ], - group: true, // todo => handle 1:1 DM MLS groups + messages: [ + { + // Notifee doesn't handle more complex messages with a group name & image + a person name & image + // so handling it manually by concatenating sender name & message + text: `${senderName}: ${notificationContent}`, + timestamp: normalizeTimestamp(message.sentNs), + }, + ], + group: true, + }, }, - }, - }); + }); + } else { + const senderImage = getPreferredAvatar(senderSocials); + const person: AndroidPerson = { + name: senderName, + }; + if (senderImage) { + person.icon = senderImage; + } + await notifee.displayNotification({ + title: senderName, + body: notificationContent, + data: notification, + android: { + channelId: androidChannel.id, + pressAction: { + id: "default", + }, + visibility: AndroidVisibility.PUBLIC, + style: { + type: AndroidStyle.MESSAGING, + person, + messages: [ + { + text: notificationContent, + timestamp: normalizeTimestamp(message.sentNs), + }, + ], + group: false, + }, + }, + }); + } }; diff --git a/features/notifications/utils/background/notificationContent.ts b/features/notifications/utils/background/notificationContent.ts index b7a7a0674..4fc4bf69f 100644 --- a/features/notifications/utils/background/notificationContent.ts +++ b/features/notifications/utils/background/notificationContent.ts @@ -64,5 +64,5 @@ const isGroupMessageFromMe = async ( const message = await client.conversations.findMessage( messageId as MessageId ); - return message?.senderAddress === client.inboxId; + return message?.senderInboxId === client.inboxId; }; diff --git a/features/notifications/utils/background/notificationSpamScore.ts b/features/notifications/utils/background/notificationSpamScore.ts index e2535c560..cf4284e4a 100644 --- a/features/notifications/utils/background/notificationSpamScore.ts +++ b/features/notifications/utils/background/notificationSpamScore.ts @@ -80,7 +80,7 @@ export const computeSpamScoreGroupMessage = async ( let senderSpamScore = 0; try { - await xmtpClient.preferences.syncConsent(); + // await xmtpClient.preferences.syncConsent(); const groupConsentState = await xmtpClient.preferences.conversationConsentState(group.id); @@ -88,7 +88,7 @@ export const computeSpamScoreGroupMessage = async ( return 1; } - const senderInboxId = decodedMessage.senderAddress as InboxId; + const senderInboxId = decodedMessage.senderInboxId as InboxId; const senderConsentState = await xmtpClient.preferences.inboxIdConsentState(senderInboxId); if (senderConsentState === "denied") { diff --git a/ios/ConverseNotificationExtension/Spam.swift b/ios/ConverseNotificationExtension/Spam.swift index 2b4d1c72c..635387b97 100644 --- a/ios/ConverseNotificationExtension/Spam.swift +++ b/ios/ConverseNotificationExtension/Spam.swift @@ -161,7 +161,7 @@ func computeSpamScoreV3Message(client: XMTP.Client, conversation: XMTP.Conversat // Network consent will override other checks return 1 } - let senderInboxId = decodedMessage.senderAddress + let senderInboxId = decodedMessage.senderInboxId let senderDenied = try await client.preferences.inboxIdState(inboxId: senderInboxId) == .denied if senderDenied { // Network consent will override other checks diff --git a/ios/ConverseNotificationExtension/Xmtp/Messages.swift b/ios/ConverseNotificationExtension/Xmtp/Messages.swift index 7e69fae98..4ef9f66b3 100644 --- a/ios/ConverseNotificationExtension/Xmtp/Messages.swift +++ b/ios/ConverseNotificationExtension/Xmtp/Messages.swift @@ -60,13 +60,15 @@ func handleV3Message(xmtpClient: XMTP.Client, envelope: XMTP.Xmtp_MessageApi_V1_ do { - if let conversation = try xmtpClient.findConversationByTopic(topic: envelope.contentTopic) { + if let conversation = try await xmtpClient.findConversationByTopic(topic: envelope.contentTopic) { try await conversation.sync() if var decodedMessage = try? await decodeMessage(xmtpClient: xmtpClient, envelope: envelope) { // For now, use the group member linked address as "senderAddress" // @todo => make inboxId a first class citizen - if let senderAddresses = try await conversation.members().first(where: {$0.inboxId == decodedMessage.senderAddress})?.addresses { - decodedMessage.senderAddress = senderAddresses[0] + if let senderAddresses = try await conversation.members().first(where: {$0.inboxId == decodedMessage.senderInboxId})?.addresses { + // This is a bit yucky since we are doing some gymnastics around inboxId vs address. + // Will have a fast follow if we see any issues with push + decodedMessage.senderInboxId = senderAddresses[0] } let decodedMessageResult = handleMessageByContentType(decodedMessage: decodedMessage, xmtpClient: xmtpClient); @@ -83,19 +85,19 @@ func handleV3Message(xmtpClient: XMTP.Client, envelope: XMTP.Xmtp_MessageApi_V1_ } // We replaced decodedMessage.senderAddress from inboxId to actual address // so it appears well in the app until inboxId is a first class citizen - if let senderProfileSocials = await getProfile(account: xmtpClient.address, address: decodedMessage.senderAddress) { - bestAttemptContent.subtitle = getPreferredName(address: decodedMessage.senderAddress, socials: senderProfileSocials) + if let senderProfileSocials = await getProfile(account: xmtpClient.address, address: decodedMessage.senderInboxId) { + bestAttemptContent.subtitle = getPreferredName(address: decodedMessage.senderInboxId, socials: senderProfileSocials) } if let content = decodedMessageResult.content { bestAttemptContent.body = content } let groupImage = try? group.groupImageUrlSquare() - messageIntent = getIncomingGroupMessageIntent(group: group, content: bestAttemptContent.body, senderId: decodedMessage.senderAddress, senderName: bestAttemptContent.subtitle) + messageIntent = getIncomingGroupMessageIntent(group: group, content: bestAttemptContent.body, senderId: decodedMessage.senderInboxId, senderName: bestAttemptContent.subtitle) } else if case .dm(let dm) = conversation { var senderAvatar: String? = nil - if let senderProfileSocials = await getProfile(account: xmtpClient.address, address: decodedMessage.senderAddress) { - bestAttemptContent.title = getPreferredName(address: decodedMessage.senderAddress, socials: senderProfileSocials) + if let senderProfileSocials = await getProfile(account: xmtpClient.address, address: decodedMessage.senderInboxId) { + bestAttemptContent.title = getPreferredName(address: decodedMessage.senderInboxId, socials: senderProfileSocials) senderAvatar = getPreferredAvatar(socials: senderProfileSocials) } if let content = decodedMessageResult.content { @@ -103,7 +105,7 @@ func handleV3Message(xmtpClient: XMTP.Client, envelope: XMTP.Xmtp_MessageApi_V1_ } messageIntent = getIncoming1v1MessageIntent( topic: contentTopic, - senderId: decodedMessage.senderAddress, + senderId: decodedMessage.senderInboxId, senderName: bestAttemptContent.title, senderAvatar: senderAvatar, content: bestAttemptContent.body ) @@ -159,7 +161,7 @@ func handleOngoingConversationMessage(xmtpClient: XMTP.Client, envelope: XMTP.Xm shouldShowNotification = true messageId = decodedMessageResult.id - messageIntent = getIncoming1v1MessageIntent(topic: envelope.contentTopic, senderId: decodedMessage?.senderAddress ?? "", senderName: bestAttemptContent.title, senderAvatar: senderAvatar, content: bestAttemptContent.body) + messageIntent = getIncoming1v1MessageIntent(topic: envelope.contentTopic, senderId: decodedMessage?.senderInboxId ?? "", senderName: bestAttemptContent.title, senderAvatar: senderAvatar, content: bestAttemptContent.body) } } else { print("[NotificationExtension] Not showing a notification because could not decode message") @@ -187,28 +189,11 @@ func loadSavedMessages() -> [SavedNotificationMessage] { } } -func saveMessage(account: String, topic: String, sent: Date, senderAddress: String, content: String, id: String, contentType: String, referencedMessageId: String?) throws { - if (isDebugAccount(account: account)) { - sentryAddBreadcrumb(message: "Calling save message with sender \(senderAddress) and content \(content)") - } - let savedMessage = SavedNotificationMessage(topic: topic, content: content, senderAddress: senderAddress, sent: Int(sent.timeIntervalSince1970 * 1000), id: id, contentType: contentType, account: account, referencedMessageId: referencedMessageId) - - var savedMessagesList = loadSavedMessages() - savedMessagesList.append(savedMessage) - let encodedValue = try JSONEncoder().encode(savedMessagesList) - let encodedString = String(data: encodedValue, encoding: .utf8) - let mmkv = getMmkv() - mmkv?.set(encodedString!, forKey: "saved-notifications-messages") - if (isDebugAccount(account: account)) { - sentryAddBreadcrumb(message: "Done save message - count \(savedMessagesList.count) - value \(encodedString ?? "EMPTY")") - } -} - func decodeMessage(xmtpClient: XMTP.Client, envelope: XMTP.Xmtp_MessageApi_V1_Envelope) async throws -> DecodedMessage? { // If topic is MLS, the conversation should already be there // @todo except if it's new convo => call sync before? if (isV3MessageTopic(topic: envelope.contentTopic)) { - if let conversation = try! xmtpClient.findConversationByTopic(topic: envelope.contentTopic) { + if let conversation = try! await xmtpClient.findConversationByTopic(topic: envelope.contentTopic) { do { sentryAddBreadcrumb(message: "[NotificationExtension] Syncing Group") try await conversation.sync() @@ -300,27 +285,14 @@ func handleMessageByContentType(decodedMessage: DecodedMessage, xmtpClient: XMTP default: sentryTrackMessage(message: "NOTIFICATION_UNKNOWN_CONTENT_TYPE", extras: ["contentType": contentType, "topic": decodedMessage.topic]) print("[NotificationExtension] UNKOWN CONTENT TYPE: \(contentType)") - return (nil, decodedMessage.senderAddress, false, nil) + return (nil, decodedMessage.senderInboxId, false, nil) } if (isDebugAccount(account: xmtpClient.address)) { sentryAddBreadcrumb(message: "Finished handling message content - \(contentToReturn ?? "EMPTY") - tosave \(contentToSave ?? "EMPTY")") } - - // If there's content to save, save it - if let content = contentToSave { - try saveMessage( - account: xmtpClient.address, - topic: decodedMessage.topic, - sent: decodedMessage.sent, - senderAddress: decodedMessage.senderAddress, - content: content, - id: decodedMessage.id, - contentType: contentType, - referencedMessageId: referencedMessageId - ) - } - return (contentToReturn, decodedMessage.senderAddress, forceIgnore, decodedMessage.id) + + return (contentToReturn, decodedMessage.senderInboxId, forceIgnore, decodedMessage.id) } catch { let errorType = contentType.split(separator: "/").last ?? "UNKNOWN" sentryTrackError(error: error, extras: ["message": "NOTIFICATION_\(errorType)_ERROR", "topic": decodedMessage.topic]) @@ -362,7 +334,7 @@ func getJsonReaction(reaction: Reaction) -> String? { func isGroupMessageFromMe(xmtpClient: Client, messageId: String) throws -> Bool { if let message = try xmtpClient.findMessage(messageId: messageId) { - return message.decodeOrNull()?.senderAddress == xmtpClient.inboxID + return message.decodeOrNull()?.senderInboxId == xmtpClient.inboxID } else { return false } diff --git a/ios/Podfile b/ios/Podfile index a84ef62e2..14ab7af96 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -18,7 +18,7 @@ install! 'cocoapods', # Version must match version from XMTP Podspec (matching @xmtp/react-native-sdk from package.json) # https://github.com/xmtp/xmtp-react-native/blob/v2.6.2/ios/XMTPReactNative.podspec#L29 -$xmtpVersion = '3.0.14' +$xmtpVersion = '3.0.19' # Pinning MMKV to 1.3.3 that has included that fix https://github.com/Tencent/MMKV/pull/1222#issuecomment-1905164314 $mmkvVersion = '1.3.3' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3a5b6b374..393cfaf6d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -391,7 +391,7 @@ PODS: - libwebp/sharpyuv (1.3.2) - libwebp/webp (1.3.2): - libwebp/sharpyuv - - LibXMTP (3.0.10) + - LibXMTP (3.0.13) - MessagePacker (0.4.7) - MMKV (1.3.3): - MMKVCore (~> 1.3.3) @@ -2071,10 +2071,10 @@ PODS: - Yoga - RNLocalize (3.0.2): - React-Core - - RNNotifee (9.1.2): + - RNNotifee (9.1.3): - React-Core - - RNNotifee/NotifeeCore (= 9.1.2) - - RNNotifee/NotifeeCore (9.1.2): + - RNNotifee/NotifeeCore (= 9.1.3) + - RNNotifee/NotifeeCore (9.1.3): - React-Core - RNReactNativeSharedGroupPreferences (1.1.23): - React @@ -2218,18 +2218,18 @@ PODS: - "sqlite3/common (3.45.3+1)" - SwiftProtobuf (1.28.2) - UMAppLoader (4.6.0) - - XMTP (3.0.14): + - XMTP (3.0.19): - Connect-Swift (= 1.0.0) - CryptoSwift (= 1.8.3) - CSecp256k1 (~> 0.2) - - LibXMTP (= 3.0.10) + - LibXMTP (= 3.0.13) - SQLCipher (= 4.5.7) - - XMTPReactNative (3.1.1): + - XMTPReactNative (3.1.4): - CSecp256k1 (~> 0.2) - ExpoModulesCore - MessagePacker - SQLCipher (= 4.5.7) - - XMTP (= 3.0.14) + - XMTP (= 3.0.19) - Yoga (0.0.0) DEPENDENCIES: @@ -2378,7 +2378,7 @@ DEPENDENCIES: - Sentry/HybridSDK (= 8.36.0) - SQLite.swift - UMAppLoader (from `../node_modules/unimodules-app-loader/ios`) - - XMTP (= 3.0.14) + - XMTP (= 3.0.19) - "XMTPReactNative (from `../node_modules/@xmtp/react-native-sdk/ios`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -2751,7 +2751,7 @@ SPEC CHECKSUMS: libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 - LibXMTP: e550ccb4565023eb77f5a2eddd9d5a71cfb9d2b3 + LibXMTP: 3b4b45c0edd404de164e26c7920af5ea0ebb3e17 MessagePacker: ab2fe250e86ea7aedd1a9ee47a37083edd41fd02 MMKV: f902fb6719da13c2ab0965233d8963a59416f911 MMKVAppExtension: fcf23c6b250cc87db63507bc57be8e6ed378168d @@ -2841,7 +2841,7 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: 634189dbe31ecedf6e75c0d8b5ec5ae208850074 RNLocalize: dbea38dcb344bf80ff18a1757b1becf11f70cae4 - RNNotifee: bc20a5e3d581f629db988075944fdd944d363dfe + RNNotifee: 522276e0be010e98173175fb838514b69f18cbe0 RNReactNativeSharedGroupPreferences: de0121a4224c267bc7e9fb16c398f3f087c8da81 RNReanimated: e71d3475e3ef59d343061839b4506a7eaeeeae96 RNScreens: de55b9d7de8a017d1588dcb70415492d0b0597c2 @@ -2859,10 +2859,10 @@ SPEC CHECKSUMS: sqlite3: 02d1f07eaaa01f80a1c16b4b31dfcbb3345ee01a SwiftProtobuf: 4dbaffec76a39a8dc5da23b40af1a5dc01a4c02d UMAppLoader: f17a5ee8e85b536ace0fc254b447a37ed198d57e - XMTP: 3b586fa3703640bb5fec8a64daba9e157d9e5fdc - XMTPReactNative: f3e1cbf80b7278b817bd42982703a95a9250497d + XMTP: b5311154b2a3cda7c07ce78ae9fa6d111bac979d + XMTPReactNative: 19b1bde805593502a14a7337c0b132efa911e5db Yoga: a9ef4f5c2cd79ad812110525ef61048be6a582a4 -PODFILE CHECKSUM: 7ed5cefb992e438c67772278d7c473ace4b42753 +PODFILE CHECKSUM: c41ba0637d8261aca47e5705727f10078165114f COCOAPODS: 1.16.2 diff --git a/package.json b/package.json index 95280b906..01ab698ed 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "converse", "version": "1.0.0", "scripts": { - "android": "EXPO_ENV=dev expo run:android --variant devDebug", + "android": "EXPO_ENV=dev expo run:android", "android:build:dev": "eas build -p android --profile development --local", "android:reverse": "adb reverse tcp:8081 tcp:8081 && adb reverse tcp:9875 tcp:9875", "build": "node scripts/build/build.js", @@ -10,7 +10,7 @@ "db": "ts-node scripts/migrations/db.ts", "lint": "eslint --max-warnings 2500", "lint:errors": "eslint --quiet", - "ios": "EXPO_ENV=dev expo start --ios", + "ios": "expo run:ios", "run:ios": "EXPO_ENV=dev expo run:ios", "postinstall": "patch-package && node scripts/wasm.js && husky install && cross-os postinstall", "start": "EXPO_ENV=dev expo start", @@ -50,7 +50,7 @@ "@material-symbols/svg-400": "^0.5.0", "@mfellner/react-native-fast-create-hash": "^1.0.0-alpha.2", "@noble/secp256k1": "^1.5.2", - "@notifee/react-native": "^9.1.2", + "@notifee/react-native": "^9.1.3", "@op-engineering/op-sqlite": "^6.0.1", "@open-frames/proxy-types": "^0.2.3", "@peculiar/webcrypto": "^1.4.1", @@ -83,7 +83,7 @@ "@xmtp/content-type-transaction-reference": "^1.0.3", "@xmtp/frames-client": "^0.5.4", "@xmtp/proto": "^3.60.0", - "@xmtp/react-native-sdk": "^3.1.1", + "@xmtp/react-native-sdk": "^3.1.4", "@xmtp/xmtp-js": "11.5.0", "@xstate/react": "^5.0.0", "@yornaath/batshit": "^0.10.1", @@ -109,6 +109,7 @@ "expo-asset": "~10.0.10", "expo-background-fetch": "~12.0.1", "expo-blur": "^13.0.2", + "expo-build-properties": "~0.12.5", "expo-clipboard": "~6.0.3", "expo-constants": "~16.0.2", "expo-contacts": "~13.0.5", @@ -197,7 +198,6 @@ "rn-fetch-blob": "^0.12.0", "safe-buffer": "^5.2.1", "scheduler": "^0.23.2", - "semver": "^7.3.8", "setimmediate": "^1.0.5", "stream-browserify": "^3.0.0", "stream-http": "^3.2.0", diff --git a/queries/useConversationMessages.ts b/queries/useConversationMessages.ts index 633a5588c..b347255c6 100644 --- a/queries/useConversationMessages.ts +++ b/queries/useConversationMessages.ts @@ -190,7 +190,7 @@ function processMessages(args: { for (const reactionMessage of reactionsMessages) { const reactionContent = reactionMessage.content() as ReactionContent; const referenceMessageId = reactionContent?.reference as MessageId; - const senderAddress = reactionMessage.senderAddress as InboxId; + const senderAddress = reactionMessage.senderInboxId as InboxId; if (!reactionContent || !referenceMessageId) { continue; diff --git a/scripts/build/android/androidDependenciesExpoPlugin.js b/scripts/build/android/androidDependenciesExpoPlugin.js new file mode 100644 index 000000000..21ac1e4e5 --- /dev/null +++ b/scripts/build/android/androidDependenciesExpoPlugin.js @@ -0,0 +1,52 @@ +const { + createRunOncePlugin, + withAppBuildGradle +} = require("@expo/config-plugins"); +const { + mergeContents +} = require("@expo/config-plugins/build/utils/generateCode"); + +const withFixedConverseAndroidDependencies = (config) => { + return withAppBuildGradle(config, (config) => { + if (config.modResults.contents) { + config.modResults.contents = setBouncyCastleVersion( + config.modResults.contents + ); + } + return config; + }); +}; + +const TAG = "converse-android-dependencies-fix"; + +const setBouncyCastleVersion = (src) => { + const configurationFix = ` + configurations.all { + resolutionStrategy.eachDependency { DependencyResolveDetails details -> + if (details.requested.name == 'bcprov-jdk15on') { + details.useTarget group: details.requested.group, name: 'bcprov-jdk15to18', version: '1.70' + } + if (details.requested.name == 'lifecycle-viewmodel-ktx') { + details.useTarget group: details.requested.group, name: 'lifecycle-viewmodel-ktx', version: '2.5.0' + } + } +} +`; + + const mergeResults = mergeContents({ + tag: TAG, + src: src, + newSrc: configurationFix, + anchor: /android {/gm, + offset: 1, + comment: `// `, + }); + + return mergeResults.contents; +}; + +module.exports = createRunOncePlugin( + withFixedConverseAndroidDependencies, + "withFixedConverseAndroidDependencies", + "1.0.0" +); diff --git a/scripts/build/android/build.js b/scripts/build/android/build.js deleted file mode 100644 index b5483f052..000000000 --- a/scripts/build/android/build.js +++ /dev/null @@ -1,21 +0,0 @@ -const fs = require("fs"); - -const go = async () => { - const BUILD_GRADLE_PATH = "android/app/build.gradle"; - const APP_JSON_PATH = "app.json"; - - const appJson = fs.readFileSync(APP_JSON_PATH, "utf8"); - const appJsonData = JSON.parse(appJson); - const buildGradleContent = fs.readFileSync(BUILD_GRADLE_PATH, "utf8"); - - const newBuildGradleContent = buildGradleContent - .replace(`versionName "1.0.0"`, `versionName "${appJsonData.expo.version}"`) - .replace( - `versionCode 1`, - `versionCode ${appJsonData.expo.android.versionCode}` - ); - - fs.writeFileSync(BUILD_GRADLE_PATH, newBuildGradleContent); -}; - -go(); diff --git a/scripts/build/android/buildGradleProperties.js b/scripts/build/android/buildGradleProperties.js new file mode 100644 index 000000000..901b52dec --- /dev/null +++ b/scripts/build/android/buildGradleProperties.js @@ -0,0 +1,34 @@ +const { withGradleProperties } = require("expo/config-plugins"); + +function setGradlePropertiesValue(config, key, value) { + return withGradleProperties(config, (exportedConfig) => { + const keyIdx = exportedConfig.modResults.findIndex( + (item) => item.type === "property" && item.key === key + ); + if (keyIdx >= 0) { + exportedConfig.modResults.splice(keyIdx, 1, { + type: "property", + key, + value, + }); + } else { + exportedConfig.modResults.push({ + type: "property", + key, + value, + }); + } + + return exportedConfig; + }); +} + +module.exports = function withCustomPlugin(config) { + config = setGradlePropertiesValue( + config, + "org.gradle.jvmargs", + "-Xmx4096m -XX:MaxMetaspaceSize=1024m" //Set data of your choice + ); + + return config; +}; diff --git a/android/app/google-services.json b/scripts/build/android/google-services/dev.json similarity index 100% rename from android/app/google-services.json rename to scripts/build/android/google-services/dev.json diff --git a/android/app/src/preview/google-services.json b/scripts/build/android/google-services/preview.json similarity index 99% rename from android/app/src/preview/google-services.json rename to scripts/build/android/google-services/preview.json index e962a6a4b..4453231be 100644 --- a/android/app/src/preview/google-services.json +++ b/scripts/build/android/google-services/preview.json @@ -36,4 +36,4 @@ } ], "configuration_version": "1" -} +} \ No newline at end of file diff --git a/android/app/src/prod/google-services.json b/scripts/build/android/google-services/production.json similarity index 99% rename from android/app/src/prod/google-services.json rename to scripts/build/android/google-services/production.json index 796bcfe6e..c0ff4391b 100644 --- a/android/app/src/prod/google-services.json +++ b/scripts/build/android/google-services/production.json @@ -36,4 +36,4 @@ } ], "configuration_version": "1" -} +} \ No newline at end of file diff --git a/scripts/build/android/notifeeExpoPlugin.js b/scripts/build/android/notifeeExpoPlugin.js new file mode 100644 index 000000000..8e7dfbb55 --- /dev/null +++ b/scripts/build/android/notifeeExpoPlugin.js @@ -0,0 +1,17 @@ +const { withProjectBuildGradle } = require('expo/config-plugins') + +module.exports = function withNotifeeRepo(config) { + return withProjectBuildGradle(config, async config => { + const contents = config.modResults.contents + + if (!contents.includes('@notifee/react-native')) { + const replacement = `maven { url 'https://www.jitpack.io' } + maven { + url "$rootDir/../node_modules/@notifee/react-native/android/libs" + }` + config.modResults.contents = contents.replace("maven { url 'https://www.jitpack.io' }", replacement) + } + + return config + }) +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 7515d2c88..ed24ad446 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1865,7 +1865,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.8.4": +"@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== @@ -2040,6 +2040,202 @@ mathjs "^13.1.1" pretty-format "^29.7.0" +"@changesets/apply-release-plan@^7.0.7": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.7.tgz#cabeaed77de07c6bd9878a9bc5ffd3ea7db7f7ff" + integrity sha512-qnPOcmmmnD0MfMg9DjU1/onORFyRpDXkMMl2IJg9mECY6RnxL3wN0TCCc92b2sXt1jt8DgjAUUsZYGUGTdYIXA== + dependencies: + "@changesets/config" "^3.0.5" + "@changesets/get-version-range-type" "^0.4.0" + "@changesets/git" "^3.0.2" + "@changesets/should-skip-package" "^0.1.1" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + detect-indent "^6.0.0" + fs-extra "^7.0.1" + lodash.startcase "^4.4.0" + outdent "^0.5.0" + prettier "^2.7.1" + resolve-from "^5.0.0" + semver "^7.5.3" + +"@changesets/assemble-release-plan@^6.0.5": + version "6.0.5" + resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.5.tgz#d987b01c2d91c8b2f81eedd2df56ba355e4ce536" + integrity sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ== + dependencies: + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.1.2" + "@changesets/should-skip-package" "^0.1.1" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + semver "^7.5.3" + +"@changesets/changelog-git@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.2.0.tgz#1f3de11becafff5a38ebe295038a602403c93a86" + integrity sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ== + dependencies: + "@changesets/types" "^6.0.0" + +"@changesets/cli@^2.27.10": + version "2.27.11" + resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.27.11.tgz#1d510044b350a7c78a8b55a0591637d7ad224469" + integrity sha512-1QislpE+nvJgSZZo9+Lj3Lno5pKBgN46dAV8IVxKJy9wX8AOrs9nn5pYVZuDpoxWJJCALmbfOsHkyxujgetQSg== + dependencies: + "@changesets/apply-release-plan" "^7.0.7" + "@changesets/assemble-release-plan" "^6.0.5" + "@changesets/changelog-git" "^0.2.0" + "@changesets/config" "^3.0.5" + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.1.2" + "@changesets/get-release-plan" "^4.0.6" + "@changesets/git" "^3.0.2" + "@changesets/logger" "^0.1.1" + "@changesets/pre" "^2.0.1" + "@changesets/read" "^0.6.2" + "@changesets/should-skip-package" "^0.1.1" + "@changesets/types" "^6.0.0" + "@changesets/write" "^0.3.2" + "@manypkg/get-packages" "^1.1.3" + ansi-colors "^4.1.3" + ci-info "^3.7.0" + enquirer "^2.4.1" + external-editor "^3.1.0" + fs-extra "^7.0.1" + mri "^1.2.0" + p-limit "^2.2.0" + package-manager-detector "^0.2.0" + picocolors "^1.1.0" + resolve-from "^5.0.0" + semver "^7.5.3" + spawndamnit "^3.0.1" + term-size "^2.1.0" + +"@changesets/config@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@changesets/config/-/config-3.0.5.tgz#cb59e9f338a4b35d3266af8a32799cb940d54ee0" + integrity sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ== + dependencies: + "@changesets/errors" "^0.2.0" + "@changesets/get-dependents-graph" "^2.1.2" + "@changesets/logger" "^0.1.1" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + fs-extra "^7.0.1" + micromatch "^4.0.8" + +"@changesets/errors@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.2.0.tgz#3c545e802b0f053389cadcf0ed54e5636ff9026a" + integrity sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow== + dependencies: + extendable-error "^0.1.5" + +"@changesets/get-dependents-graph@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz#108304652d4bf22c9fee9f1d31dcf9908c24ca51" + integrity sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ== + dependencies: + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + picocolors "^1.1.0" + semver "^7.5.3" + +"@changesets/get-release-plan@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-4.0.6.tgz#40d70c2524be51a70b7e1a778826854bb6c8562a" + integrity sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w== + dependencies: + "@changesets/assemble-release-plan" "^6.0.5" + "@changesets/config" "^3.0.5" + "@changesets/pre" "^2.0.1" + "@changesets/read" "^0.6.2" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + +"@changesets/get-version-range-type@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz#429a90410eefef4368502c41c63413e291740bf5" + integrity sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ== + +"@changesets/git@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@changesets/git/-/git-3.0.2.tgz#669c700049dc3b8ba53f46de45f5c4b1e6ddea3b" + integrity sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ== + dependencies: + "@changesets/errors" "^0.2.0" + "@manypkg/get-packages" "^1.1.3" + is-subdir "^1.1.1" + micromatch "^4.0.8" + spawndamnit "^3.0.1" + +"@changesets/logger@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.1.1.tgz#9926ac4dc8fb00472fe1711603b6b4755d64b435" + integrity sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg== + dependencies: + picocolors "^1.1.0" + +"@changesets/parse@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.4.0.tgz#5cabbd9844b3b213cb83f5edb5768454c70dd2b4" + integrity sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw== + dependencies: + "@changesets/types" "^6.0.0" + js-yaml "^3.13.1" + +"@changesets/pre@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-2.0.1.tgz#3ed60f9d218b3b81d3074d72139582da11a94d5f" + integrity sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ== + dependencies: + "@changesets/errors" "^0.2.0" + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + fs-extra "^7.0.1" + +"@changesets/read@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.6.2.tgz#816cf75dd22a70e75ac279474e44be52fb3fb91b" + integrity sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg== + dependencies: + "@changesets/git" "^3.0.2" + "@changesets/logger" "^0.1.1" + "@changesets/parse" "^0.4.0" + "@changesets/types" "^6.0.0" + fs-extra "^7.0.1" + p-filter "^2.1.0" + picocolors "^1.1.0" + +"@changesets/should-skip-package@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz#76218ef4ce7691351a6dffdb356e8893267b0b3a" + integrity sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg== + dependencies: + "@changesets/types" "^6.0.0" + "@manypkg/get-packages" "^1.1.3" + +"@changesets/types@^4.0.1": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@changesets/types/-/types-4.1.0.tgz#fb8f7ca2324fd54954824e864f9a61a82cb78fe0" + integrity sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw== + +"@changesets/types@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@changesets/types/-/types-6.0.0.tgz#e46abda9890610dd1fbe1617730173d2267544bd" + integrity sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ== + +"@changesets/write@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.3.2.tgz#bee64e4ccdff480872df5d1e38f2b913cb940116" + integrity sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw== + dependencies: + "@changesets/types" "^6.0.0" + fs-extra "^7.0.1" + human-id "^1.0.2" + prettier "^2.7.1" + "@coinbase/wallet-mobile-sdk@^1.0.13": version "1.0.13" resolved "https://registry.yarnpkg.com/@coinbase/wallet-mobile-sdk/-/wallet-mobile-sdk-1.0.13.tgz#e745da101c49830d180da52aabbed8c5adf7534f" @@ -3876,6 +4072,28 @@ dependencies: "@lit-labs/ssr-dom-shim" "^1.2.0" +"@manypkg/find-root@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f" + integrity sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA== + dependencies: + "@babel/runtime" "^7.5.5" + "@types/node" "^12.7.1" + find-up "^4.1.0" + fs-extra "^8.1.0" + +"@manypkg/get-packages@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@manypkg/get-packages/-/get-packages-1.1.3.tgz#e184db9bba792fa4693de4658cfb1463ac2c9c47" + integrity sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A== + dependencies: + "@babel/runtime" "^7.5.5" + "@changesets/types" "^4.0.1" + "@manypkg/find-root" "^1.1.0" + fs-extra "^8.1.0" + globby "^11.0.0" + read-yaml-file "^1.1.0" + "@mapbox/node-pre-gyp@^1.0.0": version "1.0.10" resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz" @@ -4304,10 +4522,10 @@ resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== -"@notifee/react-native@^9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@notifee/react-native/-/react-native-9.1.2.tgz#e82a6007cf6350e7f5b55883f682fbb833336942" - integrity sha512-oUabHwBtu7Zkos898mZkFb3t1by7PPJmXAWS5Kl5VQSxjNUyVA9kk6a1p31TUDKCkV083tN33scT+cyLnyKMzw== +"@notifee/react-native@^9.1.3": + version "9.1.3" + resolved "https://registry.yarnpkg.com/@notifee/react-native/-/react-native-9.1.3.tgz#974b4b3d6ffc12109644a2634e81ac09195bbf95" + integrity sha512-KUshWu/MCYHCbVIVGwevQc7si0IA76uKGV7a0qbnCZlVFkuQvCUrrHzM2HWBhQ0+8dB1g6jPJxipNeXDWHELVw== "@npmcli/fs@^1.0.0": version "1.1.1" @@ -7081,7 +7299,7 @@ dependencies: undici-types "~5.26.4" -"@types/node@^12.12.54", "@types/node@^12.12.6": +"@types/node@^12.12.54", "@types/node@^12.12.6", "@types/node@^12.7.1": version "12.20.55" resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== @@ -8357,11 +8575,12 @@ rxjs "^7.8.0" undici "^5.8.1" -"@xmtp/react-native-sdk@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@xmtp/react-native-sdk/-/react-native-sdk-3.1.1.tgz#9b20b0f1b967ae3064d363db2396b00ca92cfc62" - integrity sha512-p0EybyhPpSrbLpuCgN1DsZdrEp0zzttfVZfeTbTkxZQWLea0BtVESagWTOZuuTbtqD6oGwJWUJi00CvyR6J61g== +"@xmtp/react-native-sdk@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@xmtp/react-native-sdk/-/react-native-sdk-3.1.4.tgz#7b70226dfbeb42f0d999e703d5794ebe18133d0f" + integrity sha512-MrfNJjgM6xKXmsRmev0EZAkGOqH+khOORxZk3+jD4ti9MmfZTh4MD49HSjXuINsy2Xnu/p2SX7H1KdG+x1A3jw== dependencies: + "@changesets/cli" "^2.27.10" "@ethersproject/bytes" "^5.7.0" "@msgpack/msgpack" "^3.0.0-beta2" "@noble/hashes" "^1.3.3" @@ -8574,6 +8793,16 @@ ajv@^8.0.0, ajv@^8.9.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@^8.11.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + alchemy-sdk@^3.4.4: version "3.4.6" resolved "https://registry.yarnpkg.com/alchemy-sdk/-/alchemy-sdk-3.4.6.tgz#ee9fd727f7414f45ac46cfbc6e3d7f5e003b5cfa" @@ -8610,6 +8839,11 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" @@ -9330,6 +9564,13 @@ better-opn@~3.0.2: dependencies: open "^8.0.4" +better-path-resolve@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/better-path-resolve/-/better-path-resolve-1.0.0.tgz#13a35a1104cdd48a7b74bf8758f96a1ee613f99d" + integrity sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g== + dependencies: + is-windows "^1.0.0" + big-integer@1.6.x: version "1.6.51" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" @@ -9520,6 +9761,13 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" @@ -9968,6 +10216,11 @@ char-regex@^2.0.0: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + charenc@0.0.2, charenc@~0.0.1: version "0.0.2" resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" @@ -10030,7 +10283,7 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== -ci-info@^3.3.0: +ci-info@^3.3.0, ci-info@^3.7.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== @@ -10602,6 +10855,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.5: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypt@0.0.2, crypt@~0.0.1: version "0.0.2" resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" @@ -11064,6 +11326,11 @@ detect-browser@5.3.0, detect-browser@^5.2.0: resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -11380,6 +11647,14 @@ enhanced-resolve@^5.15.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enquirer@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" @@ -12305,6 +12580,14 @@ expo-blur@^13.0.2: resolved "https://registry.yarnpkg.com/expo-blur/-/expo-blur-13.0.2.tgz#c2d179b19b13830db1d8b90c51373235f462e958" integrity sha512-t2p7BChO3Reykued++QJRMZ/og6J3aXtSQ+bU31YcBeXhZLkHwjWEhiPKPnJka7J2/yTs4+jOCNDY0kCZmcE3w== +expo-build-properties@~0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/expo-build-properties/-/expo-build-properties-0.12.5.tgz#4d6232389f00c846ba37ca5df2c0b5527c2d94ca" + integrity sha512-donC1le0PYfLKCPKRMGQoixuWuwDWCngzXSoQXUPsgHTDHQUKr8aw+lcWkTwZcItgNovcnk784I0dyfYDcxybA== + dependencies: + ajv "^8.11.0" + semver "^7.6.0" + expo-clipboard@~6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/expo-clipboard/-/expo-clipboard-6.0.3.tgz#dfea74d4a004dce59ecefd063d6fb9f1c356a03f" @@ -12700,6 +12983,11 @@ extend@~3.0.2: resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extendable-error@^0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" + integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg== + extension-port-stream@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/extension-port-stream/-/extension-port-stream-2.1.1.tgz#ec11f2a5ed95655d8c40805d7cb0c39939ee9ef4" @@ -12707,6 +12995,15 @@ extension-port-stream@^2.0.1: dependencies: webextension-polyfill ">=0.10.0 <1.0" +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" @@ -12798,6 +13095,11 @@ fast-text-encoding@1.0.6: resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== +fast-uri@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + fast-xml-parser@4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" @@ -12902,6 +13204,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + filter-iterator@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/filter-iterator/-/filter-iterator-0.0.1.tgz#0a2ecf07d6c06f96bdeb6846f8e88b57b8da1f37" @@ -13138,6 +13447,15 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0, fs-extra@~8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -13533,7 +13851,7 @@ globalthis@^1.0.4: define-properties "^1.2.1" gopd "^1.0.1" -globby@^11.0.1: +globby@^11.0.0, globby@^11.0.1: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -13604,7 +13922,7 @@ got@^11.8.5: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: 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== @@ -13984,6 +14302,11 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: agent-base "6" debug "4" +human-id@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" + integrity sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -14035,7 +14358,7 @@ i18next@22.5.1: dependencies: "@babel/runtime" "^7.20.6" -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -14842,6 +15165,13 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-subdir@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-subdir/-/is-subdir-1.2.0.tgz#b791cd28fab5202e91a08280d51d9d7254fd20d4" + integrity sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw== + dependencies: + better-path-resolve "1.0.0" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" @@ -14905,6 +15235,11 @@ is-what@^4.1.8: resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== +is-windows@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" @@ -15720,7 +16055,7 @@ js-sha3@^0.5.7: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: +js-yaml@^3.13.1, js-yaml@^3.6.1: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -16418,6 +16753,11 @@ lodash.pick@^4.4.0: resolved "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz" integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" @@ -17020,6 +17360,14 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" @@ -18034,6 +18382,11 @@ osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +outdent@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" + integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== + override-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/override-require/-/override-require-1.1.1.tgz#6ae22fadeb1f850ffb0cf4c20ff7b87e5eb650df" @@ -18067,6 +18420,13 @@ p-fifo@^1.0.0: fast-fifo "^1.0.0" p-defer "^3.0.0" +p-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== + dependencies: + p-map "^2.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -18107,6 +18467,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + p-map@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" @@ -18140,6 +18505,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-manager-detector@^0.2.0: + version "0.2.7" + resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-0.2.7.tgz#6c3e47d7794fdd513512d02e2160c24ba559e39b" + integrity sha512-g4+387DXDKlZzHkP+9FLt8yKj8+/3tOkPv7DVTJGGRm00RkEWgqbFstX1mXJ4M0VDYhUqsTOiISqNOJnhAu3PQ== + pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -18608,6 +18978,11 @@ prelude-ls@^1.2.1: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + prettier@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" @@ -19614,6 +19989,16 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +read-yaml-file@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8" + integrity sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA== + dependencies: + graceful-fs "^4.1.5" + js-yaml "^3.6.1" + pify "^4.0.1" + strip-bom "^3.0.0" + read@1.0.x: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -20766,6 +21151,14 @@ sparse-array@^1.3.1: resolved "https://registry.yarnpkg.com/sparse-array/-/sparse-array-1.3.2.tgz#0e1a8b71706d356bc916fe754ff496d450ec20b0" integrity sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg== +spawndamnit@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-3.0.1.tgz#44410235d3dc4e21f8e4f740ae3266e4486c2aed" + integrity sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg== + dependencies: + cross-spawn "^7.0.5" + signal-exit "^4.0.1" + spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" @@ -21527,6 +21920,11 @@ tempy@^0.7.1: type-fest "^0.16.0" unique-string "^2.0.0" +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + terminal-link@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"