Compare commits
65
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
893066bbb6 | ||
|
|
093a3ca4ad | ||
|
|
a360a28b0f | ||
|
|
4caa788836 | ||
|
|
da9bec7063 | ||
|
|
3358e8ec75 | ||
|
|
7e23b16de3 | ||
|
|
fd9e8273e1 | ||
|
|
6afaba23b5 | ||
|
|
4aef76281c | ||
|
|
c62d7d501e | ||
|
|
65cdb0dfe7 | ||
|
|
ea18966f33 | ||
|
|
e1abe5c6e2 | ||
|
|
cac96b589f | ||
|
|
f8d4f56d2d | ||
|
|
0957fb6e0a | ||
|
|
5118a5095d | ||
|
|
01c5cf2498 | ||
|
|
fae4b34863 | ||
|
|
020d5cc1c1 | ||
|
|
7e5df7689b | ||
|
|
ff7ec97de4 | ||
|
|
dd0ba49bea | ||
|
|
6105435207 | ||
|
|
711fd19967 | ||
|
|
d58553f67a | ||
|
|
76882690d7 | ||
|
|
6a33c4723a | ||
|
|
6a26ebafa3 | ||
|
|
3c55fc1fa2 | ||
|
|
15a1a15c08 | ||
|
|
9e43aa04c7 | ||
|
|
18f7d05a61 | ||
|
|
70e325fd2b | ||
|
|
fba631c044 | ||
|
|
598617cf2b | ||
|
|
66f177370a | ||
|
|
ad7d58788f | ||
|
|
ad4ea0783f | ||
|
|
5c44cb6399 | ||
|
|
a9e0b3dd6b | ||
|
|
131da5f444 | ||
|
|
874ececc47 | ||
|
|
5f1d74a77a | ||
|
|
00b0d75fc4 | ||
|
|
4b93c8ff43 | ||
|
|
80ad2b8fca | ||
|
|
a8bc93eb17 | ||
|
|
9d3fc4286e | ||
|
|
16fba373c9 | ||
|
|
9c3ff8c88c | ||
|
|
2525620730 | ||
|
|
6dde1d7b74 | ||
|
|
1691e2fe34 | ||
|
|
b536d20713 | ||
|
|
ca3720be0a | ||
|
|
63d0aaca2a | ||
|
|
3a4b58f32f | ||
|
|
d748ccdef9 | ||
|
|
97aff27980 | ||
|
|
0c3e836272 | ||
|
|
60fc4f1b9a | ||
|
|
b97e2df2fb | ||
|
|
f539bb5ca2 |
@@ -97,6 +97,8 @@ nix-purge: ##@nix Completely remove Nix setup, including /nix directory
|
||||
nix/scripts/purge.sh
|
||||
|
||||
nix-update-gradle: export TARGET := gradle
|
||||
nix-update-gradle: export ORG_GRADLE_PROJECT_hermesEnabled := false
|
||||
nix-update-gradle: export ORG_GRADLE_PROJECT_universalApk := false
|
||||
nix-update-gradle: ##@nix Update maven nix expressions based on current gradle setup
|
||||
nix/deps/gradle/generate.sh
|
||||
|
||||
|
||||
@@ -299,6 +299,8 @@ dependencies {
|
||||
implementation("com.squareup.okhttp3:okhttp-tls:4.11.0")
|
||||
implementation("com.google.prefab:cli:2.0.0")
|
||||
implementation("com.android.tools.build:aapt2:8.1.1-10154469")
|
||||
implementation "com.github.bumptech.glide:okhttp3-integration:4.12.0"
|
||||
annotationProcessor "com.github.bumptech.glide:compiler:4.12.0"
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package im.status.ethereum
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.Registry
|
||||
import com.bumptech.glide.module.GlideModule
|
||||
import com.bumptech.glide.GlideBuilder
|
||||
import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader
|
||||
import com.bumptech.glide.load.model.GlideUrl
|
||||
import java.io.InputStream
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
class CustomGlideModule : GlideModule {
|
||||
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
|
||||
// Create a single thread executor for background operations
|
||||
val executor = Executors.newSingleThreadExecutor()
|
||||
val mainHandler = Handler(Looper.getMainLooper())
|
||||
|
||||
// Execute network operation in background
|
||||
executor.execute {
|
||||
val client = StatusOkHttpClientFactory().createNewNetworkModuleClient()
|
||||
|
||||
// Post results back to main thread
|
||||
mainHandler.post {
|
||||
client?.let {
|
||||
val factory = OkHttpUrlLoader.Factory(it)
|
||||
registry.replace(
|
||||
GlideUrl::class.java,
|
||||
InputStream::class.java,
|
||||
factory
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up executor
|
||||
executor.shutdown()
|
||||
}
|
||||
|
||||
override fun applyOptions(context: Context, builder: GlideBuilder) {
|
||||
// No additional options needed
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,10 @@ import cl.json.RNSharePackage
|
||||
import com.reactnativecommunity.blurview.BlurViewPackage
|
||||
import im.status.ethereum.keycard.RNStatusKeycardPackage
|
||||
import im.status.ethereum.module.StatusPackage
|
||||
import im.status.ethereum.module.StatusBackendClient
|
||||
import im.status.ethereum.pushnotifications.PushNotificationPackage
|
||||
import im.status.ethereum.StatusOkHttpClientFactory
|
||||
import android.util.Log
|
||||
|
||||
class MainApplication : NavigationApplication() {
|
||||
|
||||
@@ -39,6 +41,26 @@ class MainApplication : NavigationApplication() {
|
||||
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
|
||||
|
||||
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
|
||||
|
||||
override fun createReactInstanceManager() =
|
||||
super.createReactInstanceManager().apply {
|
||||
addReactInstanceEventListener {
|
||||
val serverEnabledEnv = true
|
||||
val statusGoEndpointEnv = "127.0.0.1:60000"
|
||||
val rootDataDirEnv = "/Users/frank/Downloads/tmp"
|
||||
val statusGoEndpoint = "http://${statusGoEndpointEnv}/statusgo/"
|
||||
val signalEndpoint = "ws://${statusGoEndpointEnv}/signals"
|
||||
Log.d("MainApplication", "Configuring StatusBackendServer with serverEnabled=$serverEnabledEnv, statusGoEndpoint=$statusGoEndpoint, signalEndpoint=$signalEndpoint, rootDataDir=$rootDataDirEnv")
|
||||
StatusBackendClient.getInstance()?.configStatusBackendServer(
|
||||
serverEnabled = serverEnabledEnv,
|
||||
statusGoEndpoint = statusGoEndpoint,
|
||||
signalEndpoint = signalEndpoint,
|
||||
rootDataDir = rootDataDirEnv
|
||||
)
|
||||
OkHttpClientProvider.setOkHttpClientFactory(StatusOkHttpClientFactory())
|
||||
Log.d("MainApplication", "StatusBackendServer configured")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override val reactNativeHost: ReactNativeHost
|
||||
@@ -47,7 +69,7 @@ class MainApplication : NavigationApplication() {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
||||
OkHttpClientProvider.setOkHttpClientFactory(StatusOkHttpClientFactory())
|
||||
//OkHttpClientProvider.setOkHttpClientFactory(StatusOkHttpClientFactory())
|
||||
|
||||
WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG_WEBVIEW == "1")
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
initscript {
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
}
|
||||
dependencies {
|
||||
classpath "org.gradle:github-dependency-graph-gradle-plugin:+"
|
||||
}
|
||||
}
|
||||
apply plugin: org.gradle.dependencygraph.simple.SimpleDependencyGraphPlugin
|
||||
@@ -1,12 +1,12 @@
|
||||
pluginManagement {
|
||||
include ':react-native-share'
|
||||
project(':react-native-share').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-share/android')
|
||||
includeBuild('../node_modules/@react-native/gradle-plugin')
|
||||
repositories {
|
||||
mavenLocal() // Let's prioritize local Maven repos so that Nix can provide them offline
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
include ':react-native-share'
|
||||
project(':react-native-share').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-share/android')
|
||||
rootProject.name = 'StatusIm'
|
||||
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
|
||||
include ':react-native-nfc-manager'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
import groovy.json.JsonBuilder
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
pipeline {
|
||||
agent { label 'linux' }
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
pipeline {
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
pipeline {
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
pipeline {
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
pipeline {
|
||||
agent { label 'macos' }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
pipeline {
|
||||
agent { label params.AGENT_LABEL }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
pipeline {
|
||||
agent { label 'linux' }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.10'
|
||||
library 'status-jenkins-lib@v1.9.13'
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
Make sure to compress images before using into project.
|
||||
```
|
||||
make shell
|
||||
./scrips/compress_image.sh image_path
|
||||
./scripts/compress_image.sh image_path
|
||||
```
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
## Solution to use Status Backend Server
|
||||
`StatusBackendClient` is the entry point to use Status Backend Server. We need always to call `status-im.setup.status-backend-client/init` whether `STATUS_BACKEND_SERVER_ENABLED` is `1` or not. If it's not enabled, the invocation to functions in `native-module.core` will be delegated to built-in status-go library, otherwise it will be delegated to status-go running in status-backend server. Currently, all functions has usages in `native-module.core` should be supported delegated to.
|
||||
|
||||
related [PR](https://github.com/status-im/status-mobile/pull/21550)
|
||||
|
||||
## Usage
|
||||
### Add environment variables to your local machine:
|
||||
```shell
|
||||
# enable using status backend server or not, otherwise it will use built-in status-go library
|
||||
export STATUS_BACKEND_SERVER_ENABLED=1
|
||||
|
||||
#The host should contain an IP address and a port separated by a colon.
|
||||
#The port comes from your running status backend server.
|
||||
#If you run it by PORT=60000 make run-status-backend , then host will likely be 127.0.0.1:60000
|
||||
export STATUS_BACKEND_SERVER_HOST="127.0.0.1:60000"
|
||||
|
||||
export STATUS_BACKEND_SERVER_ROOT_DATA_DIR="/path/to/your/root/data/dir"
|
||||
```
|
||||
You need to change `STATUS_BACKEND_SERVER_ROOT_DATA_DIR` to your preferred directory and ensure it exists, it should be in absolute path.
|
||||
All the db files and log files(requests.log/geth.log) and keystore files etc will be stored in this directory.
|
||||
|
||||
### Start the status backend server:
|
||||
```shell
|
||||
PORT=60000 make run-status-backend
|
||||
```
|
||||
MAKE SURE the status-backend is checked out to a revision that's at least compatible with the revision in status-mobile/status-go-version.json before starting the server.
|
||||
|
||||
For the Android simulator, you need to reverse the port:
|
||||
```shell
|
||||
adb reverse tcp:60000 tcp:60000
|
||||
```
|
||||
|
||||
### Known issues
|
||||
- Android devices may not display images due to TLS certificate validation issues with the image server
|
||||
- exportUnencryptedDatabaseV2/import-multiaccount does not work for android, probably cause of tech debt, I found it during creating the draft PR.
|
||||
+30
-23
@@ -1,6 +1,7 @@
|
||||
PODS:
|
||||
- BigInt (5.2.0)
|
||||
- boost (1.83.0)
|
||||
- CryptoSwift (1.5.1)
|
||||
- CryptoSwift (1.8.3)
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.73.5)
|
||||
- FBReactNativeSpec (0.73.5):
|
||||
@@ -16,20 +17,24 @@ PODS:
|
||||
- hermes-engine/Pre-built (= 0.73.5)
|
||||
- hermes-engine/Pre-built (0.73.5)
|
||||
- HMSegmentedControl (1.5.6)
|
||||
- Keycard (3.0.6):
|
||||
- Keycard (3.1.0):
|
||||
- BigInt
|
||||
- CryptoSwift
|
||||
- secp256k1
|
||||
- SSZipArchive
|
||||
- libevent (2.1.12)
|
||||
- libwebp (1.2.4):
|
||||
- libwebp/demux (= 1.2.4)
|
||||
- libwebp/mux (= 1.2.4)
|
||||
- libwebp/webp (= 1.2.4)
|
||||
- libwebp/demux (1.2.4):
|
||||
- libwebp (1.3.2):
|
||||
- libwebp/demux (= 1.3.2)
|
||||
- libwebp/mux (= 1.3.2)
|
||||
- libwebp/sharpyuv (= 1.3.2)
|
||||
- libwebp/webp (= 1.3.2)
|
||||
- libwebp/demux (1.3.2):
|
||||
- libwebp/webp
|
||||
- libwebp/mux (1.2.4):
|
||||
- libwebp/mux (1.3.2):
|
||||
- libwebp/demux
|
||||
- libwebp/webp (1.2.4)
|
||||
- libwebp/sharpyuv (1.3.2)
|
||||
- libwebp/webp (1.3.2):
|
||||
- libwebp/sharpyuv
|
||||
- RCT-Folly (2022.05.16.00):
|
||||
- boost
|
||||
- DoubleConversion
|
||||
@@ -1148,15 +1153,15 @@ PODS:
|
||||
- glog
|
||||
- RCT-Folly (= 2022.05.16.00)
|
||||
- React-Core
|
||||
- RNImageCropPicker (0.40.0):
|
||||
- RNImageCropPicker (0.41.2):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- RNImageCropPicker/QBImagePickerController (= 0.40.0)
|
||||
- TOCropViewController
|
||||
- RNImageCropPicker/QBImagePickerController (0.40.0):
|
||||
- RNImageCropPicker/QBImagePickerController (= 0.41.2)
|
||||
- TOCropViewController (~> 2.7.4)
|
||||
- RNImageCropPicker/QBImagePickerController (0.41.2):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- TOCropViewController
|
||||
- TOCropViewController (~> 2.7.4)
|
||||
- RNKeychain (8.1.2):
|
||||
- React-Core
|
||||
- RNLinearGradient (3.0.0-alpha.1):
|
||||
@@ -1185,7 +1190,7 @@ PODS:
|
||||
- secp256k1 (0.1.6)
|
||||
- SocketRocket (0.6.1)
|
||||
- SSZipArchive (2.4.3)
|
||||
- TOCropViewController (2.6.1)
|
||||
- TOCropViewController (2.7.4)
|
||||
- Yoga (1.14.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
@@ -1282,6 +1287,7 @@ DEPENDENCIES:
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- BigInt
|
||||
- CryptoSwift
|
||||
- fmt
|
||||
- HMSegmentedControl
|
||||
@@ -1471,26 +1477,27 @@ EXTERNAL SOURCES:
|
||||
|
||||
CHECKOUT OPTIONS:
|
||||
Keycard:
|
||||
:commit: 17381678bb981c3c553bb7202a26e642cecb1817
|
||||
:commit: afb19836d6730ade5035f6f86ad90715be336af2
|
||||
:git: https://github.com/status-im/Keycard.swift.git
|
||||
secp256k1:
|
||||
:commit: 46a1fa30d9b8babeae85ff519050f42394ab5fcc
|
||||
:commit: 4ab977cc2b2d7319be858bcb30a5d189bb149884
|
||||
:git: https://github.com/status-im/secp256k1.swift.git
|
||||
:submodules: true
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
BigInt: f668a80089607f521586bbe29513d708491ef2f7
|
||||
boost: d3f49c53809116a5d38da093a8aa78bf551aed09
|
||||
CryptoSwift: c4f2debceb38bf44c80659afe009f71e23e4a082
|
||||
CryptoSwift: 967f37cea5a3294d9cce358f78861652155be483
|
||||
DoubleConversion: fea03f2699887d960129cc54bba7e52542b6f953
|
||||
FBLazyVector: 56e0e498dbb513b96c40bac6284729ba4e62672d
|
||||
FBReactNativeSpec: 146c741a3f40361f6bc13a4ba284678cbedb5881
|
||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||
glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
|
||||
glog: 53cc9a00a2af0495ac1613e9fe3df6e646a3f405
|
||||
hermes-engine: 1d1835b2cc54c381909d94d1b3c8e0a2f1a94a0e
|
||||
HMSegmentedControl: 34c1f54d822d8308e7b24f5d901ec674dfa31352
|
||||
Keycard: ac6df4d91525c3c82635ac24d4ddd9a80aca5fc8
|
||||
Keycard: 3bd24405b9a875b3b3cf1ab1be69b5c30c5f28bc
|
||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
|
||||
libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
|
||||
RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0
|
||||
RCTRequired: 2544c0f1081a5fa12e108bb8cb40e5f4581ccd87
|
||||
RCTTypeSafety: 50efabe2b115c11ed03fbf3fd79e2f163ddb5d7c
|
||||
@@ -1560,7 +1567,7 @@ SPEC CHECKSUMS:
|
||||
RNFastImage: 1f2cab428712a4baaf78d6169eaec7f622556dd7
|
||||
RNFS: 2bd9eb49dc82fa9676382f0585b992c424cd59df
|
||||
RNGestureHandler: 15c6ef51acba34c49ff03003806cf5dd6098f383
|
||||
RNImageCropPicker: 486e2f7e2b0461ce24321f751410dce1b3b49e6d
|
||||
RNImageCropPicker: 771e2ca319d2cf92e04ebf334ece892ee9a6728f
|
||||
RNKeychain: a65256b6ca6ba6976132cc4124b238a5b13b3d9c
|
||||
RNLinearGradient: ccaaebce083b54180da61d992e7fa56abfe000d6
|
||||
RNPermissions: 08e619529cced22695f4b6d0efcc0a233e278903
|
||||
@@ -1573,7 +1580,7 @@ SPEC CHECKSUMS:
|
||||
secp256k1: f61d67e6fdcb85fd727acf1bf35ace6036db540c
|
||||
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
|
||||
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
|
||||
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
|
||||
TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654
|
||||
Yoga: a716eea57d0d3430219c0a5a233e1e93ee931eb7
|
||||
|
||||
PODFILE CHECKSUM: 5dd4a5279260d370bcdf016158c825ceb404ee06
|
||||
|
||||
@@ -572,6 +572,8 @@
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Status-StatusIm-StatusImTests/Pods-Status-StatusIm-StatusImTests-resources.sh",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNPermissions/RNPermissionsPrivacyInfo.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle",
|
||||
@@ -579,6 +581,8 @@
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/CryptoSwift.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNPermissionsPrivacyInfo.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle",
|
||||
@@ -614,6 +618,8 @@
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Status-StatusIm/Pods-Status-StatusIm-resources.sh",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNPermissions/RNPermissionsPrivacyInfo.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle",
|
||||
@@ -621,6 +627,8 @@
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/CryptoSwift.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNPermissionsPrivacyInfo.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle",
|
||||
@@ -728,6 +736,8 @@
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Status-StatusImPR/Pods-Status-StatusImPR-resources.sh",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNPermissions/RNPermissionsPrivacyInfo.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle",
|
||||
@@ -735,6 +745,8 @@
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/CryptoSwift.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNPermissionsPrivacyInfo.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle",
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
#import <Security/Security.h>
|
||||
#import <react/config/ReactNativeConfig.h>
|
||||
|
||||
#import "StatusBackendClient.h"
|
||||
|
||||
//TODO: properly import the framework
|
||||
extern "C" NSString* StatusgoImageServerTLSCert();
|
||||
|
||||
@@ -188,7 +190,12 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response
|
||||
NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
|
||||
__block NSURLCredential *credential = nil;
|
||||
|
||||
NSString *pemCert = StatusgoImageServerTLSCert();
|
||||
NSString *pemCert = [StatusBackendClient executeStatusGoRequestWithResult:@"ImageServerTLSCert"
|
||||
body:@""
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoImageServerTLSCert();
|
||||
}];
|
||||
|
||||
pemCert = [pemCert stringByReplacingOccurrencesOfString:@"-----BEGIN CERTIFICATE-----\n" withString:@""];
|
||||
pemCert = [pemCert stringByReplacingOccurrencesOfString:@"\n-----END CERTIFICATE-----" withString:@""];
|
||||
NSData *derCert = [[NSData alloc] initWithBase64EncodedString:pemCert options:NSDataBase64DecodingIgnoreUnknownCharacters];
|
||||
|
||||
+128
-62
@@ -24,25 +24,23 @@ class AccountManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
@ReactMethod
|
||||
fun createAccountAndLogin(createAccountRequest: String) {
|
||||
Log.d(TAG, "createAccountAndLogin")
|
||||
val result = Statusgo.createAccountAndLogin(createAccountRequest)
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "createAccountAndLogin success: $result")
|
||||
Log.d(TAG, "Geth node started")
|
||||
} else {
|
||||
Log.e(TAG, "createAccountAndLogin failed: $result")
|
||||
}
|
||||
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "CreateAccountAndLogin",
|
||||
requestBody = createAccountRequest,
|
||||
statusgoFunction = { Statusgo.createAccountAndLogin(createAccountRequest) }
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun restoreAccountAndLogin(restoreAccountRequest: String) {
|
||||
Log.d(TAG, "restoreAccountAndLogin")
|
||||
val result = Statusgo.restoreAccountAndLogin(restoreAccountRequest)
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "restoreAccountAndLogin success: $result")
|
||||
Log.d(TAG, "Geth node started")
|
||||
} else {
|
||||
Log.e(TAG, "restoreAccountAndLogin failed: $result")
|
||||
}
|
||||
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "RestoreAccountAndLogin",
|
||||
requestBody = restoreAccountRequest,
|
||||
statusgoFunction = { Statusgo.restoreAccountAndLogin(restoreAccountRequest) }
|
||||
)
|
||||
}
|
||||
|
||||
private fun updateConfig(jsonConfigString: String, absRootDirPath: String, keystoreDirPath: String): String {
|
||||
@@ -173,12 +171,7 @@ class AccountManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
accountsData,
|
||||
chatKey
|
||||
)
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "saveAccountAndLoginWithKeycard result: $result")
|
||||
Log.d(TAG, "Geth node started")
|
||||
} else {
|
||||
Log.e(TAG, "saveAccountAndLoginWithKeycard failed: $result")
|
||||
}
|
||||
utils.handleStatusGoResponse(result, "saveAccountAndLoginWithKeycard")
|
||||
} catch (e: JSONException) {
|
||||
Log.e(TAG, "JSON conversion failed: ${e.message}")
|
||||
}
|
||||
@@ -189,11 +182,7 @@ class AccountManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
Log.d(TAG, "loginWithKeycard")
|
||||
utils.migrateKeyStoreDir(accountData, password)
|
||||
val result = Statusgo.loginWithKeycard(accountData, password, chatKey, nodeConfigJSON)
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "LoginWithKeycard result: $result")
|
||||
} else {
|
||||
Log.e(TAG, "LoginWithKeycard failed: $result")
|
||||
}
|
||||
utils.handleStatusGoResponse(result, "loginWithKeycard")
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
@@ -201,22 +190,17 @@ class AccountManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
Log.d(TAG, "loginWithConfig")
|
||||
utils.migrateKeyStoreDir(accountData, password)
|
||||
val result = Statusgo.loginWithConfig(accountData, password, configJSON)
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "LoginWithConfig result: $result")
|
||||
} else {
|
||||
Log.e(TAG, "LoginWithConfig failed: $result")
|
||||
}
|
||||
utils.handleStatusGoResponse(result, "loginWithConfig")
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun loginAccount(request: String) {
|
||||
Log.d(TAG, "loginAccount")
|
||||
val result = Statusgo.loginAccount(request)
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "loginAccount result: $result")
|
||||
} else {
|
||||
Log.e(TAG, "loginAccount failed: $result")
|
||||
}
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "LoginAccount",
|
||||
requestBody = request,
|
||||
statusgoFunction = { Statusgo.loginAccount(request) }
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
@@ -224,16 +208,31 @@ class AccountManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
val absRootDirPath = utils.getNoBackupDirectory()
|
||||
val newKeystoreDir = utils.pathCombine(absRootDirPath, "keystore")
|
||||
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
{ Statusgo.verifyAccountPassword(newKeystoreDir, address, password) },
|
||||
val jsonParams = JSONObject()
|
||||
jsonParams.put("keyStoreDir", newKeystoreDir)
|
||||
jsonParams.put("address", address)
|
||||
jsonParams.put("password", password)
|
||||
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "VerifyAccountPasswordV2",
|
||||
requestBody = jsonParams.toString(),
|
||||
statusgoFunction = { Statusgo.verifyAccountPasswordV2(jsonParams.toString()) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun verifyDatabasePassword(keyUID: String, password: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
{ Statusgo.verifyDatabasePassword(keyUID, password) },
|
||||
val jsonParams = JSONObject()
|
||||
jsonParams.put("keyUID", keyUID)
|
||||
jsonParams.put("password", password)
|
||||
|
||||
val jsonString = jsonParams.toString()
|
||||
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "VerifyDatabasePasswordV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.verifyDatabasePasswordV2(jsonString) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
@@ -249,74 +248,136 @@ class AccountManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
@ReactMethod
|
||||
private fun initializeApplication(request: String, callback: Callback) {
|
||||
Log.d(TAG, "initializeApplication")
|
||||
Log.d(TAG, "[Initializing application $request")
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.initializeApplication(request) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"InitializeApplication",
|
||||
request,
|
||||
{ Statusgo.initializeApplication(request) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
private fun acceptTerms(callback: Callback) {
|
||||
Log.d(TAG, "acceptTerms")
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"AcceptTerms",
|
||||
"",
|
||||
{ Statusgo.acceptTerms() },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun logout() {
|
||||
Log.d(TAG, "logout")
|
||||
val runnable = Runnable {
|
||||
val result = Statusgo.logout()
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "Logout result: $result")
|
||||
} else {
|
||||
Log.e(TAG, "Logout failed: $result")
|
||||
}
|
||||
}
|
||||
StatusThreadPoolExecutor.getInstance().execute(runnable)
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "Logout",
|
||||
requestBody = "",
|
||||
statusgoFunction = { Statusgo.logout() }
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun multiAccountStoreAccount(json: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.multiAccountStoreAccount(json) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "MultiAccountStoreAccount",
|
||||
requestBody = json,
|
||||
statusgoFunction = { Statusgo.multiAccountStoreAccount(json) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun multiAccountLoadAccount(json: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.multiAccountLoadAccount(json) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "MultiAccountLoadAccount",
|
||||
requestBody = json,
|
||||
statusgoFunction = { Statusgo.multiAccountLoadAccount(json) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun multiAccountDeriveAddresses(json: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.multiAccountDeriveAddresses(json) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "MultiAccountDeriveAddresses",
|
||||
requestBody = json,
|
||||
statusgoFunction = { Statusgo.multiAccountDeriveAddresses(json) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun multiAccountGenerateAndDeriveAddresses(json: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.multiAccountGenerateAndDeriveAddresses(json) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "MultiAccountGenerateAndDeriveAddresses",
|
||||
requestBody = json,
|
||||
statusgoFunction = { Statusgo.multiAccountGenerateAndDeriveAddresses(json) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun multiAccountStoreDerived(json: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.multiAccountStoreDerivedAccounts(json) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "MultiAccountStoreDerivedAccounts",
|
||||
requestBody = json,
|
||||
statusgoFunction = { Statusgo.multiAccountStoreDerivedAccounts(json) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun multiAccountImportMnemonic(json: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.multiAccountImportMnemonic(json) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "MultiAccountImportMnemonic",
|
||||
requestBody = json,
|
||||
statusgoFunction = { Statusgo.multiAccountImportMnemonic(json) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun multiAccountImportPrivateKey(json: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.multiAccountImportPrivateKey(json) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "MultiAccountImportPrivateKey",
|
||||
requestBody = json,
|
||||
statusgoFunction = { Statusgo.multiAccountImportPrivateKey(json) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun deleteMultiaccount(keyUID: String, callback: Callback) {
|
||||
val keyStoreDir = utils.getKeyStorePath(keyUID)
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.deleteMultiaccount(keyUID, keyStoreDir) }, callback)
|
||||
val params = JSONObject().apply {
|
||||
put("keyUID", keyUID)
|
||||
put("keyStoreDir", keyStoreDir)
|
||||
}
|
||||
val jsonString = params.toString()
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "DeleteMultiaccountV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.deleteMultiaccountV2(jsonString) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun getRandomMnemonic(callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.getRandomMnemonic() }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"GetRandomMnemonic",
|
||||
"",
|
||||
{ Statusgo.getRandomMnemonic() },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun createAccountFromMnemonicAndDeriveAccountsForPaths(mnemonic: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"CreateAccountFromMnemonicAndDeriveAccountsForPaths",
|
||||
mnemonic,
|
||||
{ Statusgo.createAccountFromMnemonicAndDeriveAccountsForPaths(mnemonic) },
|
||||
callback
|
||||
)
|
||||
@@ -324,7 +385,12 @@ class AccountManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
|
||||
@ReactMethod
|
||||
fun createAccountFromPrivateKey(json: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.createAccountFromPrivateKey(json) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "CreateAccountFromPrivateKey",
|
||||
requestBody = json,
|
||||
statusgoFunction = { Statusgo.createAccountFromPrivateKey(json) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
+48
-11
@@ -9,6 +9,8 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule
|
||||
import com.facebook.react.bridge.ReactMethod
|
||||
import statusgo.Statusgo
|
||||
import java.io.File
|
||||
import org.json.JSONObject
|
||||
import org.json.JSONException
|
||||
|
||||
class DatabaseManager(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
|
||||
|
||||
@@ -17,22 +19,43 @@ class DatabaseManager(private val reactContext: ReactApplicationContext) : React
|
||||
override fun getName() = "DatabaseManager"
|
||||
|
||||
private fun getExportDBFile(): File {
|
||||
StatusBackendClient.getInstance()?.let {
|
||||
if (it.serverEnabled) {
|
||||
return File(it.rootDataDir, exportDBFileName)
|
||||
}
|
||||
}
|
||||
val pubDirectory = reactContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
|
||||
return File(pubDirectory, exportDBFileName)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun exportUnencryptedDatabase(accountData: String, password: String, callback: Callback) {
|
||||
Log.d(TAG, "login")
|
||||
Log.d(TAG, "exportUnencryptedDatabase")
|
||||
|
||||
val newFile = getExportDBFile()
|
||||
|
||||
utils.migrateKeyStoreDir(accountData, password)
|
||||
val result = Statusgo.exportUnencryptedDatabase(accountData, password, newFile.absolutePath)
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "Login result: $result")
|
||||
} else {
|
||||
Log.e(TAG, "Login failed: $result")
|
||||
|
||||
try {
|
||||
val accountJson = JSONObject(accountData)
|
||||
|
||||
val params = JSONObject().apply {
|
||||
put("account", accountJson)
|
||||
put("password", password)
|
||||
put("databasePath", newFile.absolutePath)
|
||||
}
|
||||
|
||||
val jsonParams = params.toString()
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "ExportUnencryptedDatabaseV2",
|
||||
requestBody = jsonParams,
|
||||
statusgoFunction = { Statusgo.exportUnencryptedDatabaseV2(jsonParams) },
|
||||
callback = null
|
||||
)
|
||||
callback.invoke(newFile.absolutePath)
|
||||
|
||||
} catch (e: JSONException) {
|
||||
Log.e(TAG, "Error parsing account data: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,11 +66,25 @@ class DatabaseManager(private val reactContext: ReactApplicationContext) : React
|
||||
val newFile = getExportDBFile()
|
||||
|
||||
utils.migrateKeyStoreDir(accountData, password)
|
||||
val result = Statusgo.importUnencryptedDatabase(accountData, password, newFile.absolutePath)
|
||||
if (result.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "import result: $result")
|
||||
} else {
|
||||
Log.e(TAG, "import failed: $result")
|
||||
|
||||
try {
|
||||
val accountJson = JSONObject(accountData)
|
||||
|
||||
val params = JSONObject().apply {
|
||||
put("account", accountJson)
|
||||
put("password", password)
|
||||
put("databasePath", newFile.absolutePath)
|
||||
}
|
||||
|
||||
val jsonParams = params.toString()
|
||||
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "ImportUnencryptedDatabaseV2",
|
||||
requestBody = jsonParams,
|
||||
statusgoFunction = { Statusgo.importUnencryptedDatabaseV2(jsonParams) }
|
||||
)
|
||||
} catch (e: JSONException) {
|
||||
Log.e(TAG, "Error parsing account data: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+134
-20
@@ -7,6 +7,7 @@ import com.facebook.react.bridge.Callback;
|
||||
import android.util.Log;
|
||||
import statusgo.Statusgo;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import java.util.function.Function;
|
||||
import android.app.Activity;
|
||||
import android.view.WindowManager;
|
||||
@@ -39,67 +40,151 @@ public class EncryptionUtils extends ReactContextBaseJavaModule {
|
||||
final String commonKeydir = this.utils.pathCombine(this.utils.getNoBackupDirectory(), "/keystore");
|
||||
final String keydir = this.utils.pathCombine(commonKeydir, keyUID);
|
||||
|
||||
this.utils.executeRunnableStatusGoMethod(() -> Statusgo.initKeystore(keydir), callback);
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"InitKeystore",
|
||||
keydir,
|
||||
() -> Statusgo.initKeystore(keydir),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void reEncryptDbAndKeystore(final String keyUID, final String password, final String newPassword, final Callback callback) throws JSONException {
|
||||
this.utils.executeRunnableStatusGoMethod(() -> Statusgo.changeDatabasePassword(keyUID, password, newPassword), callback);
|
||||
JSONObject params = new JSONObject();
|
||||
params.put("keyUID", keyUID);
|
||||
params.put("oldPassword", password);
|
||||
params.put("newPassword", newPassword);
|
||||
String jsonParams = params.toString();
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"ChangeDatabasePasswordV2",
|
||||
jsonParams,
|
||||
() -> Statusgo.changeDatabasePasswordV2(jsonParams),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void convertToKeycardAccount(final String keyUID, final String accountData, final String options, final String keycardUID, final String password,
|
||||
final String newPassword, final Callback callback) throws JSONException {
|
||||
final String keyStoreDir = this.utils.getKeyStorePath(keyUID);
|
||||
this.utils.executeRunnableStatusGoMethod(() -> {
|
||||
Statusgo.initKeystore(keyStoreDir);
|
||||
return Statusgo.convertToKeycardAccount(accountData, options, keycardUID, password, newPassword);
|
||||
}, callback);
|
||||
JSONObject params = new JSONObject();
|
||||
params.put("keyUID", keyUID);
|
||||
params.put("account", new JSONObject(accountData));
|
||||
params.put("settings", new JSONObject(options));
|
||||
params.put("keycardUID", keycardUID);
|
||||
params.put("oldPassword", password);
|
||||
params.put("newPassword", newPassword);
|
||||
final String jsonParams = params.toString();
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
"InitKeystore",
|
||||
keyStoreDir,
|
||||
() -> Statusgo.initKeystore(keyStoreDir)
|
||||
);
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"ConvertToKeycardAccountV2",
|
||||
jsonParams,
|
||||
() -> Statusgo.convertToKeycardAccountV2(jsonParams),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String encodeTransfer(final String to, final String value) {
|
||||
return Statusgo.encodeTransfer(to, value);
|
||||
try {
|
||||
JSONObject params = new JSONObject();
|
||||
params.put("to", to);
|
||||
params.put("value", value);
|
||||
String jsonParams = params.toString();
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"EncodeTransferV2",
|
||||
jsonParams,
|
||||
() -> Statusgo.encodeTransferV2(jsonParams)
|
||||
);
|
||||
} catch (JSONException e) {
|
||||
Log.e(TAG, "Error creating JSON for encodeTransfer: " + e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String encodeFunctionCall(final String method, final String paramsJSON) {
|
||||
return Statusgo.encodeFunctionCall(method, paramsJSON);
|
||||
try {
|
||||
JSONObject params = new JSONObject();
|
||||
params.put("method", method);
|
||||
params.put("paramsJSON", new JSONObject(paramsJSON));
|
||||
String jsonString = params.toString();
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"EncodeFunctionCallV2",
|
||||
jsonString,
|
||||
() -> Statusgo.encodeFunctionCallV2(jsonString)
|
||||
);
|
||||
} catch (JSONException e) {
|
||||
Log.e(TAG, "Error creating JSON for encodeFunctionCall: " + e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String decodeParameters(final String decodeParamJSON) {
|
||||
return Statusgo.decodeParameters(decodeParamJSON);
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"DecodeParameters",
|
||||
decodeParamJSON,
|
||||
() -> Statusgo.decodeParameters(decodeParamJSON)
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String hexToNumber(final String hex) {
|
||||
return Statusgo.hexToNumber(hex);
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"HexToNumber",
|
||||
hex,
|
||||
() -> Statusgo.hexToNumber(hex)
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String numberToHex(final String numString) {
|
||||
return Statusgo.numberToHex(numString);
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"NumberToHex",
|
||||
numString,
|
||||
() -> Statusgo.numberToHex(numString)
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String sha3(final String str) {
|
||||
return Statusgo.sha3(str);
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"Sha3",
|
||||
str,
|
||||
() -> Statusgo.sha3(str)
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String utf8ToHex(final String str) {
|
||||
return Statusgo.utf8ToHex(str);
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"Utf8ToHex",
|
||||
str,
|
||||
() -> Statusgo.utf8ToHex(str)
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String hexToUtf8(final String str) {
|
||||
return Statusgo.hexToUtf8(str);
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"HexToUtf8",
|
||||
str,
|
||||
() -> Statusgo.hexToUtf8(str)
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
public String serializeLegacyKey(final String publicKey) {
|
||||
return Statusgo.serializeLegacyKey(publicKey);
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
"SerializeLegacyKey",
|
||||
publicKey,
|
||||
() -> Statusgo.serializeLegacyKey(publicKey)
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
@@ -130,22 +215,46 @@ public class EncryptionUtils extends ReactContextBaseJavaModule {
|
||||
|
||||
@ReactMethod
|
||||
public void hashTransaction(final String txArgsJSON, final Callback callback) throws JSONException {
|
||||
this.utils.executeRunnableStatusGoMethod(() -> Statusgo.hashTransaction(txArgsJSON), callback);
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"HashTransaction",
|
||||
txArgsJSON,
|
||||
() -> Statusgo.hashTransaction(txArgsJSON),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void hashMessage(final String message, final Callback callback) throws JSONException {
|
||||
this.utils.executeRunnableStatusGoMethod(() -> Statusgo.hashMessage(message), callback);
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"HashMessage",
|
||||
message,
|
||||
() -> Statusgo.hashMessage(message),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void multiformatDeserializePublicKey(final String multiCodecKey, final String base58btc, final Callback callback) throws JSONException {
|
||||
this.utils.executeRunnableStatusGoMethod(() -> Statusgo.multiformatDeserializePublicKey(multiCodecKey,base58btc), callback);
|
||||
JSONObject params = new JSONObject();
|
||||
params.put("key", multiCodecKey);
|
||||
params.put("outBase", base58btc);
|
||||
String jsonParams = params.toString();
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"MultiformatDeserializePublicKeyV2",
|
||||
jsonParams,
|
||||
() -> Statusgo.multiformatDeserializePublicKeyV2(jsonParams),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void deserializeAndCompressKey(final String desktopKey, final Callback callback) throws JSONException {
|
||||
this.utils.executeRunnableStatusGoMethod(() -> Statusgo.deserializeAndCompressKey(desktopKey), callback);
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"DeserializeAndCompressKey",
|
||||
desktopKey,
|
||||
() -> Statusgo.deserializeAndCompressKey(desktopKey),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
@@ -160,7 +269,12 @@ public class EncryptionUtils extends ReactContextBaseJavaModule {
|
||||
|
||||
@ReactMethod
|
||||
public void signMessage(final String rpcParams, final Callback callback) throws JSONException {
|
||||
this.utils.executeRunnableStatusGoMethod(() -> Statusgo.signMessage(rpcParams), callback);
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
"SignMessage",
|
||||
rpcParams,
|
||||
() -> Statusgo.signMessage(rpcParams),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
|
||||
+6
-1
@@ -206,7 +206,12 @@ class LogManager(private val reactContext: ReactApplicationContext) : ReactConte
|
||||
put("LogRequestFile", getRequestLogFile().absolutePath)
|
||||
}
|
||||
val config = jsonConfig.toString()
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.initLogging(config) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "InitLogging",
|
||||
requestBody = config,
|
||||
statusgoFunction = { Statusgo.initLogging(config) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
|
||||
+73
-20
@@ -16,7 +16,12 @@ class NetworkManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
|
||||
@ReactMethod
|
||||
fun startSearchForLocalPairingPeers(callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.startSearchForLocalPairingPeers() }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "StartSearchForLocalPairingPeers",
|
||||
requestBody = "",
|
||||
statusgoFunction = { Statusgo.startSearchForLocalPairingPeers() },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
@@ -26,48 +31,85 @@ class NetworkManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
val keyUID = senderConfig.getString("keyUID")
|
||||
val keyStorePath = utils.getKeyStorePath(keyUID)
|
||||
senderConfig.put("keystorePath", keyStorePath)
|
||||
val jsonString = jsonConfig.toString()
|
||||
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
{ Statusgo.getConnectionStringForBootstrappingAnotherDevice(jsonConfig.toString()) },
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "GetConnectionStringForBootstrappingAnotherDevice",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.getConnectionStringForBootstrappingAnotherDevice(jsonString) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun inputConnectionStringForBootstrapping(connectionString: String, configJSON: String, callback: Callback) {
|
||||
val jsonConfig = JSONObject(configJSON)
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
{ Statusgo.inputConnectionStringForBootstrapping(connectionString, jsonConfig.toString()) },
|
||||
val receiverClientConfig = JSONObject(configJSON)
|
||||
val params = JSONObject().apply {
|
||||
put("connectionString", connectionString)
|
||||
put("receiverClientConfig", receiverClientConfig)
|
||||
}
|
||||
val jsonString = params.toString()
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "InputConnectionStringForBootstrappingV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.inputConnectionStringForBootstrappingV2(jsonString) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun sendTransactionWithSignature(txArgsJSON: String, signature: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
{ Statusgo.sendTransactionWithSignature(txArgsJSON, signature) },
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "SendTransactionWithSignature",
|
||||
requestBody = txArgsJSON,
|
||||
statusgoFunction = { Statusgo.sendTransactionWithSignature(txArgsJSON, signature) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun sendTransaction(txArgsJSON: String, password: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.sendTransaction(txArgsJSON, password) }, callback)
|
||||
val jsonParams = JSONObject().apply {
|
||||
put("txArgs", JSONObject(txArgsJSON))
|
||||
put("password", password)
|
||||
}
|
||||
val jsonString = jsonParams.toString()
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "SendTransactionV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.sendTransactionV2(jsonString) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun callRPC(payload: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.callRPC(payload) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "CallRPC",
|
||||
requestBody = payload,
|
||||
statusgoFunction = { Statusgo.callRPC(payload) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun callPrivateRPC(payload: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.callPrivateRPC(payload) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "CallPrivateRPC",
|
||||
requestBody = payload,
|
||||
statusgoFunction = { Statusgo.callPrivateRPC(payload) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun recover(rpcParams: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.recover(rpcParams) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "Recover",
|
||||
requestBody = rpcParams,
|
||||
statusgoFunction = { Statusgo.recover(rpcParams) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
@@ -77,22 +119,33 @@ class NetworkManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
val keyUID = senderConfig.getString("loggedInKeyUid")
|
||||
val keyStorePath = utils.getKeyStorePath(keyUID)
|
||||
senderConfig.put("keystorePath", keyStorePath)
|
||||
val jsonString = jsonConfig.toString()
|
||||
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
{ Statusgo.getConnectionStringForExportingKeypairsKeystores(jsonConfig.toString()) },
|
||||
callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "GetConnectionStringForExportingKeypairsKeystores",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.getConnectionStringForExportingKeypairsKeystores(jsonString) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun inputConnectionStringForImportingKeypairsKeystores(connectionString: String, configJSON: String, callback: Callback) {
|
||||
val jsonConfig = JSONObject(configJSON)
|
||||
val receiverConfig = jsonConfig.getJSONObject("receiverConfig")
|
||||
val keystoreFilesReceiverClientConfig = JSONObject(configJSON)
|
||||
val receiverConfig = keystoreFilesReceiverClientConfig.getJSONObject("receiverConfig")
|
||||
val keyStorePath = utils.pathCombine(utils.getNoBackupDirectory(), "/keystore")
|
||||
receiverConfig.put("keystorePath", keyStorePath)
|
||||
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
{ Statusgo.inputConnectionStringForImportingKeypairsKeystores(connectionString, jsonConfig.toString()) },
|
||||
callback
|
||||
val params = JSONObject().apply {
|
||||
put("connectionString", connectionString)
|
||||
put("keystoreFilesReceiverClientConfig", keystoreFilesReceiverClientConfig)
|
||||
}
|
||||
val jsonString = params.toString()
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "InputConnectionStringForImportingKeypairsKeystoresV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.inputConnectionStringForImportingKeypairsKeystoresV2(jsonString) },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+231
@@ -0,0 +1,231 @@
|
||||
package im.status.ethereum.module
|
||||
|
||||
import android.util.Log
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import okhttp3.Response
|
||||
import okhttp3.WebSocket
|
||||
import okhttp3.WebSocketListener
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
||||
import com.facebook.react.bridge.ReactMethod
|
||||
import com.facebook.react.bridge.Callback
|
||||
import java.net.SocketException
|
||||
import java.net.SocketTimeoutException
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class StatusBackendClient(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
|
||||
companion object {
|
||||
private const val TAG = "StatusBackendClient"
|
||||
private val JSON = "application/json; charset=utf-8".toMediaType()
|
||||
private const val TIMEOUT_SECONDS = 30L
|
||||
@Volatile private var instance: StatusBackendClient? = null
|
||||
private lateinit var utils: Utils
|
||||
|
||||
private val initializationCallbacks = mutableListOf<() -> Unit>()
|
||||
|
||||
fun getInstance(): StatusBackendClient? = instance
|
||||
|
||||
@JvmStatic
|
||||
fun executeStatusGoRequest(
|
||||
endpoint: String,
|
||||
requestBody: String,
|
||||
statusgoFunction: () -> String
|
||||
) {
|
||||
val statusBackendClient = getInstance()
|
||||
if (statusBackendClient?.serverEnabled == true) {
|
||||
val result = statusBackendClient.request(endpoint, requestBody)
|
||||
result.onSuccess { response ->
|
||||
utils.handleStatusGoResponse(response, endpoint)
|
||||
}.onFailure { error ->
|
||||
Log.e(TAG, "request to $endpoint failed", error)
|
||||
}
|
||||
} else {
|
||||
val result = statusgoFunction()
|
||||
utils.handleStatusGoResponse(result, endpoint)
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun executeStatusGoRequestWithCallback(
|
||||
endpoint: String,
|
||||
requestBody: String,
|
||||
statusgoFunction: () -> String,
|
||||
callback: Callback?
|
||||
) {
|
||||
val statusBackendClient = getInstance()
|
||||
if (statusBackendClient?.serverEnabled == true) {
|
||||
val runnable = Runnable {
|
||||
val result = statusBackendClient.request(endpoint, requestBody)
|
||||
result.onSuccess { response ->
|
||||
callback?.invoke(response)
|
||||
}.onFailure { error ->
|
||||
Log.e(TAG, "request to $endpoint failed", error)
|
||||
callback?.invoke(false)
|
||||
}
|
||||
}
|
||||
StatusThreadPoolExecutor.getInstance().execute(runnable)
|
||||
} else {
|
||||
utils.executeRunnableStatusGoMethod(statusgoFunction, callback)
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun executeStatusGoRequestWithResult(
|
||||
endpoint: String,
|
||||
requestBody: String,
|
||||
statusgoFunction: () -> String
|
||||
): String {
|
||||
val statusBackendClient = getInstance()
|
||||
return if (statusBackendClient?.serverEnabled == true) {
|
||||
val result = statusBackendClient.request(endpoint, requestBody)
|
||||
result.getOrElse { error ->
|
||||
Log.e(TAG, "request to $endpoint failed", error)
|
||||
""
|
||||
}
|
||||
} else {
|
||||
if (endpoint == "ImageServerTLSCert") {
|
||||
Log.i(TAG, "ImageServerTLSCert endpoint called without server enabled - " +
|
||||
"stacktrace: ${Thread.currentThread().stackTrace.joinToString("\n")}")
|
||||
}
|
||||
statusgoFunction()
|
||||
}
|
||||
}
|
||||
|
||||
fun addInitializationCallback(callback: () -> Unit) {
|
||||
if (instance?.initialized == true) {
|
||||
Log.d(TAG, "Executing initialization callback immediately")
|
||||
callback()
|
||||
} else {
|
||||
Log.d(TAG, "Adding initialization callback")
|
||||
initializationCallbacks.add(callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
instance = this
|
||||
utils = Utils(reactContext)
|
||||
}
|
||||
|
||||
override fun getName(): String = "StatusBackendClient"
|
||||
|
||||
private val httpClient = OkHttpClient.Builder()
|
||||
.connectTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
|
||||
.writeTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
|
||||
.readTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
|
||||
.retryOnConnectionFailure(true)
|
||||
.build()
|
||||
|
||||
private val wsClient = OkHttpClient.Builder()
|
||||
.retryOnConnectionFailure(true)
|
||||
.build()
|
||||
|
||||
private var webSocket: WebSocket? = null
|
||||
|
||||
@Volatile var serverEnabled = true
|
||||
@Volatile private var statusGoEndpoint: String? = null
|
||||
@Volatile private var signalEndpoint: String? = null
|
||||
@Volatile var rootDataDir: String? = null
|
||||
@Volatile var initialized = false
|
||||
|
||||
@ReactMethod
|
||||
fun configStatusBackendServer(
|
||||
serverEnabled: Boolean,
|
||||
statusGoEndpoint: String,
|
||||
signalEndpoint: String,
|
||||
rootDataDir: String
|
||||
) {
|
||||
configure(serverEnabled, statusGoEndpoint, signalEndpoint, rootDataDir)
|
||||
this.initialized = true
|
||||
// Execute callbacks
|
||||
initializationCallbacks.forEach { it() }
|
||||
initializationCallbacks.clear()
|
||||
Log.d(TAG, "StatusBackendClient initialized")
|
||||
}
|
||||
|
||||
private fun configure(
|
||||
serverEnabled: Boolean,
|
||||
statusGoEndpoint: String,
|
||||
signalEndpoint: String,
|
||||
rootDataDir: String
|
||||
) {
|
||||
Log.d(TAG, "configure: serverEnabled=$serverEnabled, statusGoEndpoint=$statusGoEndpoint, " +
|
||||
"signalEndpoint=$signalEndpoint, rootDataDir=$rootDataDir")
|
||||
|
||||
this.serverEnabled = serverEnabled
|
||||
if (serverEnabled) {
|
||||
this.statusGoEndpoint = statusGoEndpoint
|
||||
this.signalEndpoint = signalEndpoint
|
||||
this.rootDataDir = rootDataDir
|
||||
connectWebSocket()
|
||||
} else {
|
||||
disconnectWebSocket()
|
||||
this.statusGoEndpoint = null
|
||||
this.signalEndpoint = null
|
||||
this.rootDataDir = null
|
||||
}
|
||||
}
|
||||
|
||||
private fun connectWebSocket() {
|
||||
if (!serverEnabled || signalEndpoint == null) {
|
||||
return
|
||||
}
|
||||
|
||||
val request = Request.Builder()
|
||||
.url("$signalEndpoint")
|
||||
.build()
|
||||
|
||||
webSocket = wsClient.newWebSocket(request, object : WebSocketListener() {
|
||||
override fun onMessage(webSocket: WebSocket, text: String) {
|
||||
StatusModule.getInstance()?.handleSignal(text)
|
||||
}
|
||||
|
||||
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
|
||||
Log.e(TAG, "WebSocket error: ${t.message}")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun disconnectWebSocket() {
|
||||
webSocket?.cancel()
|
||||
webSocket = null
|
||||
}
|
||||
|
||||
fun request(endpoint: String, body: String): Result<String> {
|
||||
if (!serverEnabled || statusGoEndpoint == null) {
|
||||
return Result.failure(IllegalStateException("Status backend server is not enabled"))
|
||||
}
|
||||
|
||||
val fullUrl = "$statusGoEndpoint$endpoint"
|
||||
|
||||
return try {
|
||||
val request = Request.Builder()
|
||||
.url(fullUrl)
|
||||
.post(body.toRequestBody(JSON))
|
||||
.build()
|
||||
|
||||
httpClient.newCall(request).execute().use { response ->
|
||||
val responseBody = response.body?.string() ?: ""
|
||||
|
||||
if (response.isSuccessful) {
|
||||
Log.d(TAG, "Request to $endpoint succeeded: $responseBody")
|
||||
Result.success(responseBody)
|
||||
} else {
|
||||
val errorMsg = "Request failed with code ${response.code}: $responseBody"
|
||||
Log.e(TAG, "Request to $endpoint failed: $errorMsg")
|
||||
Result.failure(Exception(errorMsg))
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
when (e) {
|
||||
is SocketTimeoutException -> Log.e(TAG, "Request to $endpoint timed out", e)
|
||||
is SocketException -> Log.e(TAG, "Socket error for $endpoint", e)
|
||||
else -> Log.e(TAG, "Request to $endpoint failed with exception", e)
|
||||
}
|
||||
Result.failure(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
+67
-10
@@ -9,12 +9,17 @@ import statusgo.SignalHandler
|
||||
import statusgo.Statusgo
|
||||
import org.json.JSONException
|
||||
import android.view.WindowManager
|
||||
import org.json.JSONObject
|
||||
|
||||
class StatusModule(private val reactContext: ReactApplicationContext, private val rootedDevice: Boolean) : ReactContextBaseJavaModule(reactContext), LifecycleEventListener, SignalHandler {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "StatusModule"
|
||||
private var module: StatusModule? = null
|
||||
|
||||
fun getInstance(): StatusModule? {
|
||||
return module
|
||||
}
|
||||
}
|
||||
|
||||
private val utils: Utils = Utils(reactContext)
|
||||
@@ -56,45 +61,97 @@ class StatusModule(private val reactContext: ReactApplicationContext, private va
|
||||
@ReactMethod
|
||||
fun connectionChange(type: String, isExpensive: Boolean) {
|
||||
Log.d(TAG, "ConnectionChange: $type, is expensive $isExpensive")
|
||||
Statusgo.connectionChange(type, if (isExpensive) 1 else 0)
|
||||
val params = JSONObject().apply {
|
||||
put("type", type)
|
||||
put("expensive", isExpensive)
|
||||
}
|
||||
|
||||
val jsonString = params.toString()
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "ConnectionChangeV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.connectionChangeV2(jsonString) }
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun appStateChange(type: String) {
|
||||
Log.d(TAG, "AppStateChange: $type")
|
||||
Statusgo.appStateChange(type)
|
||||
fun appStateChange(state: String) {
|
||||
Log.d(TAG, "AppStateChange: $state")
|
||||
val params = JSONObject().apply {
|
||||
put("state", state)
|
||||
}
|
||||
val jsonString = params.toString()
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "AppStateChangeV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.appStateChangeV2(jsonString) }
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun startLocalNotifications() {
|
||||
Log.d(TAG, "startLocalNotifications")
|
||||
Statusgo.startLocalNotifications()
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "StartLocalNotifications",
|
||||
requestBody = "",
|
||||
statusgoFunction = { Statusgo.startLocalNotifications() }
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun getNodeConfig(callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.getNodeConfig() }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "GetNodeConfig",
|
||||
requestBody = "",
|
||||
statusgoFunction = { Statusgo.getNodeConfig() },
|
||||
callback = callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun addCentralizedMetric(request: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.addCentralizedMetric(request) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "AddCentralizedMetric",
|
||||
requestBody = request,
|
||||
statusgoFunction = { Statusgo.addCentralizedMetric(request) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun toggleCentralizedMetrics(request: String, callback: Callback) {
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.toggleCentralizedMetrics(request) }, callback)
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "ToggleCentralizedMetrics",
|
||||
requestBody = request,
|
||||
statusgoFunction = { Statusgo.toggleCentralizedMetrics(request) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun deleteImportedKey(keyUID: String, address: String, password: String, callback: Callback) {
|
||||
val keyStoreDir = utils.getKeyStorePath(keyUID)
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.deleteImportedKey(address, password, keyStoreDir) }, callback)
|
||||
val params = JSONObject().apply {
|
||||
put("address", address)
|
||||
put("password", password)
|
||||
put("keyStoreDir", keyStoreDir)
|
||||
}
|
||||
val jsonString = params.toString()
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "DeleteImportedKeyV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.deleteImportedKeyV2(jsonString) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
fun fleets(): String {
|
||||
return Statusgo.fleets()
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
endpoint = "Fleets",
|
||||
requestBody = "",
|
||||
statusgoFunction = { Statusgo.fleets() }
|
||||
)
|
||||
}
|
||||
|
||||
override fun getConstants(): Map<String, Any>? {
|
||||
|
||||
+7
-1
@@ -9,7 +9,12 @@ import statusgo.Statusgo
|
||||
class StatusPackage(private val rootedDevice: Boolean) : ReactPackage {
|
||||
|
||||
companion object {
|
||||
fun getImageTLSCert(): String = Statusgo.imageServerTLSCert()
|
||||
fun getImageTLSCert(): String =
|
||||
StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
endpoint = "ImageServerTLSCert",
|
||||
requestBody = "",
|
||||
statusgoFunction = { Statusgo.imageServerTLSCert() }
|
||||
)
|
||||
}
|
||||
|
||||
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
||||
@@ -26,6 +31,7 @@ class StatusPackage(private val rootedDevice: Boolean) : ReactPackage {
|
||||
add(NetworkManager(reactContext))
|
||||
add(MailManager(reactContext))
|
||||
add(RNSelectableTextInputModule(reactContext))
|
||||
add(StatusBackendClient(reactContext))
|
||||
}
|
||||
|
||||
return modules
|
||||
|
||||
+67
-10
@@ -25,6 +25,11 @@ class Utils(private val reactContext: ReactApplicationContext) : ReactContextBas
|
||||
}
|
||||
|
||||
fun getNoBackupDirectory(): String {
|
||||
StatusBackendClient.getInstance()?.let { client ->
|
||||
if (client.serverEnabled && client.rootDataDir != null) {
|
||||
return client.rootDataDir!!
|
||||
}
|
||||
}
|
||||
return reactContext.noBackupFilesDir.absolutePath
|
||||
}
|
||||
|
||||
@@ -34,6 +39,11 @@ class Utils(private val reactContext: ReactApplicationContext) : ReactContextBas
|
||||
}
|
||||
|
||||
fun getPublicStorageDirectory(): File? {
|
||||
StatusBackendClient.getInstance()?.let { client ->
|
||||
if (client.serverEnabled && client.rootDataDir != null) {
|
||||
return File(client.rootDataDir!!)
|
||||
}
|
||||
}
|
||||
// Environment.getExternalStoragePublicDirectory doesn't work as expected on Android Q
|
||||
// https://developer.android.com/reference/android/os/Environment#getExternalStoragePublicDirectory(java.lang.String)
|
||||
return reactContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
|
||||
@@ -69,8 +79,22 @@ class Utils(private val reactContext: ReactApplicationContext) : ReactContextBas
|
||||
val keydirFile = File(keydir)
|
||||
if (!keydirFile.exists() || keydirFile.list().isEmpty()) {
|
||||
Log.d(TAG, "migrateKeyStoreDir")
|
||||
Statusgo.migrateKeyStoreDir(accountData, password, commonKeydir, keydir)
|
||||
Statusgo.initKeystore(keydir)
|
||||
val jsonParams = JSONObject()
|
||||
jsonParams.put("account", JSONObject(accountData)) // Remove 'new' keyword
|
||||
jsonParams.put("password", password)
|
||||
jsonParams.put("oldDir", commonKeydir)
|
||||
jsonParams.put("newDir", keydir)
|
||||
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "MigrateKeyStoreDirV2",
|
||||
requestBody = jsonParams.toString(),
|
||||
statusgoFunction = { Statusgo.migrateKeyStoreDirV2(jsonParams.toString()) }
|
||||
)
|
||||
StatusBackendClient.executeStatusGoRequest(
|
||||
endpoint = "InitKeystore",
|
||||
requestBody = keydir,
|
||||
statusgoFunction = { Statusgo.initKeystore(keydir) }
|
||||
)
|
||||
}
|
||||
} catch (e: JSONException) {
|
||||
Log.e(TAG, "JSON conversion failed: ${e.message}")
|
||||
@@ -99,15 +123,15 @@ class Utils(private val reactContext: ReactApplicationContext) : ReactContextBas
|
||||
return false
|
||||
}
|
||||
|
||||
fun executeRunnableStatusGoMethod(method: Supplier<String>, callback: Callback) {
|
||||
fun executeRunnableStatusGoMethod(method: Supplier<String>, callback: Callback?) {
|
||||
if (!checkAvailability()) {
|
||||
callback.invoke(false)
|
||||
callback?.invoke(false)
|
||||
return
|
||||
}
|
||||
|
||||
val runnableTask = Runnable {
|
||||
val res = method.get()
|
||||
callback.invoke(res)
|
||||
callback?.invoke(res)
|
||||
}
|
||||
|
||||
StatusThreadPoolExecutor.getInstance().execute(runnableTask)
|
||||
@@ -115,7 +139,15 @@ class Utils(private val reactContext: ReactApplicationContext) : ReactContextBas
|
||||
|
||||
@ReactMethod
|
||||
fun validateMnemonic(seed: String, callback: Callback) {
|
||||
executeRunnableStatusGoMethod({ Statusgo.validateMnemonic(seed) }, callback)
|
||||
val jsonParams = JSONObject()
|
||||
jsonParams.put("mnemonic", seed)
|
||||
val jsonString = jsonParams.toString()
|
||||
StatusBackendClient.executeStatusGoRequestWithCallback(
|
||||
endpoint = "ValidateMnemonicV2",
|
||||
requestBody = jsonString,
|
||||
statusgoFunction = { Statusgo.validateMnemonicV2(jsonString) },
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
fun is24Hour(): Boolean {
|
||||
@@ -124,17 +156,29 @@ class Utils(private val reactContext: ReactApplicationContext) : ReactContextBas
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
fun checkAddressChecksum(address: String): String {
|
||||
return Statusgo.checkAddressChecksum(address)
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
endpoint = "CheckAddressChecksum",
|
||||
requestBody = address,
|
||||
statusgoFunction = { Statusgo.checkAddressChecksum(address) }
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
fun isAddress(address: String): String {
|
||||
return Statusgo.isAddress(address)
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
endpoint = "IsAddress",
|
||||
requestBody = address,
|
||||
statusgoFunction = { Statusgo.isAddress(address) }
|
||||
)
|
||||
}
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
fun toChecksumAddress(address: String): String {
|
||||
return Statusgo.toChecksumAddress(address)
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
endpoint = "ToChecksumAddress",
|
||||
requestBody = address,
|
||||
statusgoFunction = { Statusgo.toChecksumAddress(address) }
|
||||
)
|
||||
}
|
||||
|
||||
fun readableArrayToStringArray(r: ReadableArray): Array<String> {
|
||||
@@ -150,6 +194,19 @@ class Utils(private val reactContext: ReactApplicationContext) : ReactContextBas
|
||||
|
||||
@ReactMethod(isBlockingSynchronousMethod = true)
|
||||
fun validateConnectionString(connectionString: String): String {
|
||||
return Statusgo.validateConnectionString(connectionString)
|
||||
return StatusBackendClient.executeStatusGoRequestWithResult(
|
||||
endpoint = "ValidateConnectionString",
|
||||
requestBody = connectionString,
|
||||
statusgoFunction = { Statusgo.validateConnectionString(connectionString) }
|
||||
)
|
||||
}
|
||||
|
||||
fun handleStatusGoResponse(response: String, source: String) {
|
||||
//TODO(frank) we should remove sensitive data from the response
|
||||
if (response.startsWith("{\"error\":\"\"")) {
|
||||
Log.d(TAG, "$source success: $response")
|
||||
} else {
|
||||
Log.e(TAG, "$source failed: $response")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#import "React/RCTEventDispatcher.h"
|
||||
#import "Statusgo.h"
|
||||
#import "Utils.h"
|
||||
#import "StatusBackendClient.h"
|
||||
|
||||
@implementation AccountManager
|
||||
|
||||
@@ -12,23 +13,29 @@ RCT_EXPORT_METHOD(createAccountAndLogin:(NSString *)request) {
|
||||
#if DEBUG
|
||||
NSLog(@"createAccountAndLogin() method called");
|
||||
#endif
|
||||
StatusgoCreateAccountAndLogin(request);
|
||||
[StatusBackendClient executeStatusGoRequest:@"CreateAccountAndLogin"
|
||||
body:request
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoCreateAccountAndLogin(request);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(restoreAccountAndLogin:(NSString *)request) {
|
||||
#if DEBUG
|
||||
NSLog(@"restoreAccountAndLogin() method called");
|
||||
#endif
|
||||
StatusgoRestoreAccountAndLogin(request);
|
||||
[StatusBackendClient executeStatusGoRequest:@"RestoreAccountAndLogin"
|
||||
body:request
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoRestoreAccountAndLogin(request);
|
||||
}];
|
||||
}
|
||||
|
||||
-(NSString *) prepareDirAndUpdateConfig:(NSString *)config
|
||||
withKeyUID:(NSString *)keyUID {
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSError *error = nil;
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
NSURL *rootUrl =[Utils getRootUrl];
|
||||
NSURL *absTestnetFolderName = [rootUrl URLByAppendingPathComponent:@"ethereum/testnet"];
|
||||
|
||||
if (![fileManager fileExistsAtPath:absTestnetFolderName.path])
|
||||
@@ -102,8 +109,24 @@ RCT_EXPORT_METHOD(deleteMultiaccount:(NSString *)keyUID
|
||||
NSLog(@"DeleteMultiaccount() method called");
|
||||
#endif
|
||||
NSURL *multiaccountKeystoreDir = [Utils getKeyStoreDirForKeyUID:keyUID];
|
||||
NSString *result = StatusgoDeleteMultiaccount(keyUID, multiaccountKeystoreDir.path);
|
||||
callback(@[result]);
|
||||
NSDictionary *params = @{
|
||||
@"keyUID": keyUID,
|
||||
@"keyStoreDir": multiaccountKeystoreDir.path
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"DeleteMultiaccountV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoDeleteMultiaccountV2(jsonString);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(prepareDirAndUpdateConfig:(NSString *)keyUID
|
||||
@@ -163,36 +186,69 @@ RCT_EXPORT_METHOD(loginWithConfig:(NSString *)accountData
|
||||
|
||||
RCT_EXPORT_METHOD(loginAccount:(NSString *)request) {
|
||||
#if DEBUG
|
||||
NSLog(@"LoginAccount() method called");
|
||||
NSLog(@"loginAccount() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoLoginAccount(request);
|
||||
NSLog(@"%@", result);
|
||||
[StatusBackendClient executeStatusGoRequest:@"LoginAccount"
|
||||
body:request
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoLoginAccount(request);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(verify:(NSString *)address
|
||||
password:(NSString *)password
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"VerifyAccountPassword() method called");
|
||||
NSLog(@"VerifyAccountPasswordV2() method called");
|
||||
#endif
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
NSURL *absKeystoreUrl = [rootUrl URLByAppendingPathComponent:@"keystore"];
|
||||
|
||||
NSString *result = StatusgoVerifyAccountPassword(absKeystoreUrl.path, address, password);
|
||||
callback(@[result]);
|
||||
NSURL *rootUrl = [Utils getRootUrl];
|
||||
NSString *keystorePath = [rootUrl.path stringByAppendingPathComponent:@"keystore"];
|
||||
|
||||
NSDictionary *params = @{
|
||||
@"keyStoreDir": keystorePath,
|
||||
@"address": address,
|
||||
@"password": password
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"VerifyAccountPasswordV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoVerifyAccountPasswordV2(jsonString);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(verifyDatabasePassword:(NSString *)keyUID
|
||||
password:(NSString *)password
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"VerifyDatabasePassword() method called");
|
||||
NSLog(@"VerifyDatabasePasswordV2() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoVerifyDatabasePassword(keyUID, password);
|
||||
callback(@[result]);
|
||||
NSDictionary *params = @{
|
||||
@"keyUID": keyUID,
|
||||
@"password": password
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"VerifyDatabasePasswordV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoVerifyDatabasePasswordV2(jsonString);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(initializeApplication:(NSString *)request
|
||||
@@ -200,54 +256,173 @@ RCT_EXPORT_METHOD(initializeApplication:(NSString *)request
|
||||
#if DEBUG
|
||||
NSLog(@"initializeApplication() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoInitializeApplication(request);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"InitializeApplication"
|
||||
body:request
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoInitializeApplication(request);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(acceptTerms:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"acceptTerms() method called");
|
||||
#endif
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"AcceptTerms"
|
||||
body:@""
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoAcceptTerms();
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(openAccounts:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"OpenAccounts() method called");
|
||||
#endif
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
|
||||
NSURL *rootUrl =[Utils getRootUrl];
|
||||
NSString *result = StatusgoOpenAccounts(rootUrl.path);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(logout) {
|
||||
#if DEBUG
|
||||
NSLog(@"Logout() method called");
|
||||
NSLog(@"Logout() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoLogout();
|
||||
[StatusBackendClient executeStatusGoRequest:@"Logout"
|
||||
body:@""
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoLogout();
|
||||
}];
|
||||
}
|
||||
|
||||
NSLog(@"%@", result);
|
||||
RCT_EXPORT_METHOD(multiAccountStoreAccount:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountStoreAccount() method called");
|
||||
#endif
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"MultiAccountStoreAccount"
|
||||
body:json
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoMultiAccountStoreAccount(json);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountLoadAccount:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountLoadAccount() method called");
|
||||
#endif
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"MultiAccountLoadAccount"
|
||||
body:json
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoMultiAccountLoadAccount(json);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountDeriveAddresses:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"multiAccountDeriveAddresses() method called");
|
||||
#endif
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"MultiAccountDeriveAddresses"
|
||||
body:json
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoMultiAccountDeriveAddresses(json);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountGenerateAndDeriveAddresses:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountGenerateAndDeriveAddresses() method called");
|
||||
#endif
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"MultiAccountGenerateAndDeriveAddresses"
|
||||
body:json
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoMultiAccountGenerateAndDeriveAddresses(json);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountStoreDerived:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountStoreDerived() method called");
|
||||
#endif
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"MultiAccountStoreDerivedAccounts"
|
||||
body:json
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoMultiAccountStoreDerivedAccounts(json);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountImportMnemonic:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountImportMnemonic() method called");
|
||||
#endif
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"MultiAccountImportMnemonic"
|
||||
body:json
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoMultiAccountImportMnemonic(json);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountImportPrivateKey:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountImportPrivateKey() method called");
|
||||
#endif
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"MultiAccountImportPrivateKey"
|
||||
body:json
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoMultiAccountImportPrivateKey(json);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(getRandomMnemonic:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"GetRandomMnemonic() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoGetRandomMnemonic();
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"GetRandomMnemonic"
|
||||
body:@""
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoGetRandomMnemonic();
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(createAccountFromMnemonicAndDeriveAccountsForPaths:(NSString *)mnemonic callback:(RCTResponseSenderBlock)callback) {
|
||||
RCT_EXPORT_METHOD(createAccountFromMnemonicAndDeriveAccountsForPaths:(NSString *)mnemonic
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"createAccountFromMnemonicAndDeriveAccountsForPaths() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoCreateAccountFromMnemonicAndDeriveAccountsForPaths(mnemonic);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"CreateAccountFromMnemonicAndDeriveAccountsForPaths"
|
||||
body:mnemonic
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoCreateAccountFromMnemonicAndDeriveAccountsForPaths(mnemonic);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(createAccountFromPrivateKey:(NSString *)configJSON callback:(RCTResponseSenderBlock)callback) {
|
||||
RCT_EXPORT_METHOD(createAccountFromPrivateKey:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"createAccountFromPrivateKey() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoCreateAccountFromPrivateKey(configJSON);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"CreateAccountFromPrivateKey"
|
||||
body:json
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoCreateAccountFromPrivateKey(json);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#import "React/RCTEventDispatcher.h"
|
||||
#import "Statusgo.h"
|
||||
#import "Utils.h"
|
||||
|
||||
#import "StatusBackendClient.h"
|
||||
@implementation DatabaseManager
|
||||
|
||||
RCT_EXPORT_MODULE();
|
||||
@@ -16,8 +16,31 @@ RCT_EXPORT_METHOD(exportUnencryptedDatabase:(NSString *)accountData
|
||||
#endif
|
||||
|
||||
NSString *filePath = [Utils getExportDbFilePath];
|
||||
StatusgoExportUnencryptedDatabase(accountData, password, filePath);
|
||||
|
||||
|
||||
NSDictionary *params = @{
|
||||
@"account": [NSJSONSerialization JSONObjectWithData:[accountData dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil],
|
||||
@"password": password,
|
||||
@"databasePath": filePath
|
||||
};
|
||||
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", [error localizedDescription]);
|
||||
callback(@[filePath]);
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"ExportUnencryptedDatabaseV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoExportUnencryptedDatabaseV2(jsonString);
|
||||
}
|
||||
callback:nil];
|
||||
|
||||
callback(@[filePath]);
|
||||
}
|
||||
|
||||
@@ -26,7 +49,31 @@ RCT_EXPORT_METHOD(importUnencryptedDatabase:(NSString *)accountData
|
||||
#if DEBUG
|
||||
NSLog(@"importUnencryptedDatabase() method called");
|
||||
#endif
|
||||
"";
|
||||
|
||||
NSString *filePath = [Utils getExportDbFilePath];
|
||||
[Utils migrateKeystore:accountData password:password];
|
||||
|
||||
NSDictionary *params = @{
|
||||
@"account": [NSJSONSerialization JSONObjectWithData:[accountData dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil],
|
||||
@"password": password,
|
||||
@"databasePath": filePath
|
||||
};
|
||||
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", [error localizedDescription]);
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequest:@"ImportUnencryptedDatabaseV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoImportUnencryptedDatabaseV2(jsonString);
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#import "React/RCTEventDispatcher.h"
|
||||
#import "Statusgo.h"
|
||||
#import "Utils.h"
|
||||
#import "StatusBackendClient.h"
|
||||
|
||||
@implementation EncryptionUtils
|
||||
|
||||
@@ -15,21 +16,14 @@ RCT_EXPORT_METHOD(initKeystore:(NSString *)keyUID
|
||||
#if DEBUG
|
||||
NSLog(@"initKeystore() method called");
|
||||
#endif
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
|
||||
NSURL *commonKeystoreDir = [rootUrl URLByAppendingPathComponent:@"keystore"];
|
||||
NSURL *keystoreDir = [commonKeystoreDir URLByAppendingPathComponent:keyUID];
|
||||
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
|
||||
^(void)
|
||||
{
|
||||
NSString *res = StatusgoInitKeystore(keystoreDir.path);
|
||||
NSLog(@"InitKeyStore result %@", res);
|
||||
callback(@[]);
|
||||
});
|
||||
NSURL *multiaccountKeystoreDir = [Utils getKeyStoreDirForKeyUID:keyUID];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"InitKeystore"
|
||||
body:multiaccountKeystoreDir.path
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoInitKeystore(multiaccountKeystoreDir.path);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(reEncryptDbAndKeystore:(NSString *)keyUID
|
||||
@@ -39,9 +33,26 @@ RCT_EXPORT_METHOD(reEncryptDbAndKeystore:(NSString *)keyUID
|
||||
#if DEBUG
|
||||
NSLog(@"reEncryptDbAndKeystore() method called");
|
||||
#endif
|
||||
// changes password and re-encrypts keystore
|
||||
NSString *result = StatusgoChangeDatabasePassword(keyUID, currentPassword, newPassword);
|
||||
callback(@[result]);
|
||||
// Construct params into JSON string
|
||||
NSDictionary *params = @{
|
||||
@"keyUID": keyUID,
|
||||
@"oldPassword": currentPassword,
|
||||
@"newPassword": newPassword
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"ChangeDatabasePasswordV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoChangeDatabasePasswordV2(jsonString);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(convertToKeycardAccount:(NSString *)keyUID
|
||||
@@ -55,47 +66,141 @@ RCT_EXPORT_METHOD(convertToKeycardAccount:(NSString *)keyUID
|
||||
NSLog(@"convertToKeycardAccount() method called");
|
||||
#endif
|
||||
NSURL *multiaccountKeystoreDir = [Utils getKeyStoreDirForKeyUID:keyUID];
|
||||
StatusgoInitKeystore(multiaccountKeystoreDir.path);
|
||||
NSString *result = StatusgoConvertToKeycardAccount(accountData, settings, keycardUID, currentPassword, newPassword);
|
||||
callback(@[result]);
|
||||
|
||||
// First initialize keystore
|
||||
[StatusBackendClient executeStatusGoRequest:@"InitKeystore"
|
||||
body:multiaccountKeystoreDir.path
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoInitKeystore(multiaccountKeystoreDir.path);
|
||||
}];
|
||||
|
||||
// Prepare parameters for conversion
|
||||
NSDictionary *params = @{
|
||||
@"keyUID": keyUID,
|
||||
@"account": [NSJSONSerialization JSONObjectWithData:[accountData dataUsingEncoding:NSUTF8StringEncoding]
|
||||
options:0
|
||||
error:nil],
|
||||
@"settings": [NSJSONSerialization JSONObjectWithData:[settings dataUsingEncoding:NSUTF8StringEncoding]
|
||||
options:0
|
||||
error:nil],
|
||||
@"keycardUID": keycardUID,
|
||||
@"oldPassword": currentPassword,
|
||||
@"newPassword": newPassword
|
||||
};
|
||||
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", [error localizedDescription]);
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"ConvertToKeycardAccountV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoConvertToKeycardAccountV2(jsonString);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(encodeTransfer:(NSString *)to
|
||||
value:(NSString *)value) {
|
||||
return StatusgoEncodeTransfer(to,value);
|
||||
value:(NSString *)value) {
|
||||
NSDictionary *params = @{
|
||||
@"to": to,
|
||||
@"value": value
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", [error localizedDescription]);
|
||||
return nil;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"EncodeTransferV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoEncodeTransferV2(jsonString);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(encodeFunctionCall:(NSString *)method
|
||||
paramsJSON:(NSString *)paramsJSON) {
|
||||
return StatusgoEncodeFunctionCall(method,paramsJSON);
|
||||
paramsJSON:(NSString *)paramsJSON) {
|
||||
NSDictionary *params = @{
|
||||
@"method": method,
|
||||
@"paramsJSON": paramsJSON
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", [error localizedDescription]);
|
||||
return nil;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"EncodeFunctionCallV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoEncodeFunctionCallV2(jsonString);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(decodeParameters:(NSString *)decodeParamJSON) {
|
||||
return StatusgoDecodeParameters(decodeParamJSON);
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"DecodeParameters"
|
||||
body:decodeParamJSON
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoDecodeParameters(decodeParamJSON);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(hexToNumber:(NSString *)hex) {
|
||||
return StatusgoHexToNumber(hex);
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"HexToNumber"
|
||||
body:hex
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoHexToNumber(hex);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(numberToHex:(NSString *)numString) {
|
||||
return StatusgoNumberToHex(numString);
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"NumberToHex"
|
||||
body:numString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoNumberToHex(numString);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(sha3:(NSString *)str) {
|
||||
return StatusgoSha3(str);
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"Sha3"
|
||||
body:str
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoSha3(str);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(utf8ToHex:(NSString *)str) {
|
||||
return StatusgoUtf8ToHex(str);
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"Utf8ToHex"
|
||||
body:str
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoUtf8ToHex(str);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(hexToUtf8:(NSString *)str) {
|
||||
return StatusgoHexToUtf8(str);
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"HexToUtf8"
|
||||
body:str
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoHexToUtf8(str);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(serializeLegacyKey:(NSString *)str) {
|
||||
return StatusgoSerializeLegacyKey(str);
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"SerializeLegacyKey"
|
||||
body:str
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoSerializeLegacyKey(str);
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(setBlankPreviewFlag:(BOOL *)newValue)
|
||||
@@ -110,10 +215,14 @@ RCT_EXPORT_METHOD(setBlankPreviewFlag:(BOOL *)newValue)
|
||||
RCT_EXPORT_METHOD(hashTransaction:(NSString *)txArgsJSON
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"HashTransaction() method called");
|
||||
NSLog(@"hashTransaction() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoHashTransaction(txArgsJSON);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"HashTransaction"
|
||||
body:txArgsJSON
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoHashTransaction(txArgsJSON);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(hashMessage:(NSString *)message
|
||||
@@ -121,8 +230,12 @@ RCT_EXPORT_METHOD(hashMessage:(NSString *)message
|
||||
#if DEBUG
|
||||
NSLog(@"hashMessage() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoHashMessage(message);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"HashMessage"
|
||||
body:message
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoHashMessage(message);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(localPairingPreflightOutboundCheck:(RCTResponseSenderBlock)callback) {
|
||||
@@ -136,14 +249,34 @@ RCT_EXPORT_METHOD(localPairingPreflightOutboundCheck:(RCTResponseSenderBlock)cal
|
||||
RCT_EXPORT_METHOD(multiformatDeserializePublicKey:(NSString *)multiCodecKey
|
||||
base58btc:(NSString *)base58btc
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
NSString *result = StatusgoMultiformatDeserializePublicKey(multiCodecKey,base58btc);
|
||||
callback(@[result]);
|
||||
NSDictionary *params = @{
|
||||
@"key": multiCodecKey,
|
||||
@"outBase": base58btc
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"MultiformatDeserializePublicKeyV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoMultiformatDeserializePublicKeyV2(jsonString);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(deserializeAndCompressKey:(NSString *)desktopKey
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
NSString *result = StatusgoDeserializeAndCompressKey(desktopKey);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"DeserializeAndCompressKey"
|
||||
body:desktopKey
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoDeserializeAndCompressKey(desktopKey);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(hashTypedData:(NSString *)data
|
||||
@@ -166,13 +299,14 @@ RCT_EXPORT_METHOD(hashTypedDataV4:(NSString *)data
|
||||
|
||||
#pragma mark - SignMessage
|
||||
|
||||
RCT_EXPORT_METHOD(signMessage:(NSString *)message
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"SignMessage() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoSignMessage(message);
|
||||
callback(@[result]);
|
||||
RCT_EXPORT_METHOD(signMessage:(NSString *)rpcParams
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"SignMessage"
|
||||
body:rpcParams
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoSignMessage(rpcParams);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
#pragma mark - SignTypedData
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#import "Statusgo.h"
|
||||
#import "Utils.h"
|
||||
#import "SSZipArchive.h"
|
||||
#import "StatusBackendClient.h"
|
||||
|
||||
@implementation LogManager
|
||||
|
||||
@@ -20,9 +21,7 @@ RCT_EXPORT_METHOD(sendLogs:(NSString *)dbJson
|
||||
#endif
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSError *error = nil;
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
NSURL *rootUrl =[Utils getRootUrl];
|
||||
|
||||
NSURL *zipFile = [rootUrl URLByAppendingPathComponent:@"logs.zip"];
|
||||
[fileManager removeItemAtPath:zipFile.path error:nil];
|
||||
@@ -88,37 +87,36 @@ RCT_EXPORT_METHOD(initLogging:(BOOL)enabled
|
||||
NSString *logFilePath = [logDirectory stringByAppendingPathComponent:@"geth.log"];
|
||||
NSString *logRequestFilePath = [logDirectory stringByAppendingPathComponent:@"requests.log"];
|
||||
|
||||
NSMutableDictionary *jsonConfig = [NSMutableDictionary dictionary];
|
||||
jsonConfig[@"Enabled"] = @(enabled);
|
||||
jsonConfig[@"MobileSystem"] = @(mobileSystem);
|
||||
jsonConfig[@"Level"] = logLevel;
|
||||
jsonConfig[@"File"] = logFilePath;
|
||||
jsonConfig[@"LogRequestGo"] = @(logRequestGo);
|
||||
jsonConfig[@"LogRequestFile"] = logRequestFilePath;
|
||||
NSError *error = nil;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonConfig options:0 error:&error];
|
||||
|
||||
NSDictionary *config = @{
|
||||
@"Enabled": @(enabled),
|
||||
@"MobileSystem": @(mobileSystem),
|
||||
@"Level": logLevel,
|
||||
@"File": logFilePath,
|
||||
@"LogRequestGo": @(logRequestGo),
|
||||
@"LogRequestFile": logRequestFilePath
|
||||
};
|
||||
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:config options:0 error:&error];
|
||||
|
||||
if (error) {
|
||||
// Handle JSON serialization error
|
||||
callback(@[error.localizedDescription]);
|
||||
NSLog(@"Error creating JSON: %@", [error localizedDescription]);
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *configJson = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
NSString *config = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
// Call your native logging initialization method here
|
||||
NSString *initResult = StatusgoInitLogging(config);
|
||||
|
||||
callback(@[initResult]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"InitLogging"
|
||||
body:configJson
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoInitLogging(configJson);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(logFileDirectory) {
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
NSURL *rootUrl = [Utils getRootUrl];
|
||||
return rootUrl.path;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -3,14 +3,18 @@
|
||||
#import "React/RCTEventDispatcher.h"
|
||||
#import "Statusgo.h"
|
||||
#import "Utils.h"
|
||||
|
||||
#import "StatusBackendClient.h"
|
||||
@implementation NetworkManager
|
||||
|
||||
RCT_EXPORT_MODULE();
|
||||
|
||||
RCT_EXPORT_METHOD(startSearchForLocalPairingPeers:(RCTResponseSenderBlock)callback) {
|
||||
NSString *result = StatusgoStartSearchForLocalPairingPeers();
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"StartSearchForLocalPairingPeers"
|
||||
body:@""
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoStartSearchForLocalPairingPeers();
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(getConnectionStringForBootstrappingAnotherDevice:(NSString *)configJSON
|
||||
@@ -19,6 +23,11 @@ RCT_EXPORT_METHOD(getConnectionStringForBootstrappingAnotherDevice:(NSString *)c
|
||||
NSData *configData = [configJSON dataUsingEncoding:NSUTF8StringEncoding];
|
||||
NSError *error;
|
||||
NSMutableDictionary *configDict = [NSJSONSerialization JSONObjectWithData:configData options:NSJSONReadingMutableContainers error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error parsing JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
|
||||
NSMutableDictionary *senderConfig = configDict[@"senderConfig"];
|
||||
NSString *keyUID = senderConfig[@"keyUID"];
|
||||
NSURL *multiaccountKeystoreDir = [Utils getKeyStoreDirForKeyUID:keyUID];
|
||||
@@ -27,16 +36,43 @@ RCT_EXPORT_METHOD(getConnectionStringForBootstrappingAnotherDevice:(NSString *)c
|
||||
[senderConfig setValue:keystoreDir forKey:@"keystorePath"];
|
||||
NSString *modifiedConfigJSON = [Utils jsonStringWithPrettyPrint:NO fromDictionary:configDict];
|
||||
|
||||
NSString *result = StatusgoGetConnectionStringForBootstrappingAnotherDevice(modifiedConfigJSON);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"GetConnectionStringForBootstrappingAnotherDevice"
|
||||
body:modifiedConfigJSON
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoGetConnectionStringForBootstrappingAnotherDevice(modifiedConfigJSON);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(inputConnectionStringForBootstrapping:(NSString *)cs
|
||||
configJSON:(NSString *)configJSON
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
|
||||
NSString *result = StatusgoInputConnectionStringForBootstrapping(cs, configJSON);
|
||||
callback(@[result]);
|
||||
NSData *configData = [configJSON dataUsingEncoding:NSUTF8StringEncoding];
|
||||
NSError *jsonError;
|
||||
NSDictionary *configDict = [NSJSONSerialization JSONObjectWithData:configData options:0 error:&jsonError];
|
||||
if (jsonError) {
|
||||
NSLog(@"Error parsing JSON: %@", jsonError);
|
||||
return;
|
||||
}
|
||||
|
||||
NSDictionary *params = @{
|
||||
@"connectionString": cs,
|
||||
@"receiverClientConfig": configDict
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"InputConnectionStringForBootstrappingV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoInputConnectionStringForBootstrappingV2(jsonString);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(sendTransactionWithSignature:(NSString *)txArgsJSON
|
||||
@@ -45,8 +81,12 @@ RCT_EXPORT_METHOD(sendTransactionWithSignature:(NSString *)txArgsJSON
|
||||
#if DEBUG
|
||||
NSLog(@"sendTransactionWithSignature() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoSendTransactionWithSignature(txArgsJSON, signature);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"SendTransactionWithSignature"
|
||||
body:txArgsJSON
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoSendTransactionWithSignature(txArgsJSON, signature);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
#pragma mark - SendTransaction
|
||||
@@ -55,30 +95,53 @@ RCT_EXPORT_METHOD(sendTransaction:(NSString *)txArgsJSON
|
||||
password:(NSString *)password
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"SendTransaction() method called");
|
||||
NSLog(@"SendTransactionV2() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoSendTransaction(txArgsJSON, password);
|
||||
callback(@[result]);
|
||||
NSData *txArgsData = [txArgsJSON dataUsingEncoding:NSUTF8StringEncoding];
|
||||
NSError *jsonError;
|
||||
NSDictionary *txArgsDict = [NSJSONSerialization JSONObjectWithData:txArgsData options:0 error:&jsonError];
|
||||
if (jsonError) {
|
||||
NSLog(@"Error parsing JSON: %@", jsonError);
|
||||
return;
|
||||
}
|
||||
|
||||
NSDictionary *params = @{
|
||||
@"txArgs": txArgsDict,
|
||||
@"password": password
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"SendTransactionV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoSendTransactionV2(jsonString);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(callRPC:(NSString *)payload
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
NSString *result = StatusgoCallRPC(payload);
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
callback(@[result]);
|
||||
});
|
||||
});
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"CallRPC"
|
||||
body:payload
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoCallRPC(payload);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(callPrivateRPC:(NSString *)payload
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
NSString *result = StatusgoCallPrivateRPC(payload);
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
callback(@[result]);
|
||||
});
|
||||
});
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"CallPrivateRPC"
|
||||
body:payload
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoCallPrivateRPC(payload);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
#pragma mark - Recover
|
||||
@@ -88,8 +151,12 @@ RCT_EXPORT_METHOD(recover:(NSString *)message
|
||||
#if DEBUG
|
||||
NSLog(@"Recover() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoRecover(message);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"Recover"
|
||||
body:message
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoRecover(message);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(getConnectionStringForExportingKeypairsKeystores:(NSString *)configJSON
|
||||
@@ -106,8 +173,12 @@ RCT_EXPORT_METHOD(getConnectionStringForExportingKeypairsKeystores:(NSString *)c
|
||||
[senderConfig setValue:keystoreDir forKey:@"keystorePath"];
|
||||
NSString *modifiedConfigJSON = [Utils jsonStringWithPrettyPrint:NO fromDictionary:configDict];
|
||||
|
||||
NSString *result = StatusgoGetConnectionStringForExportingKeypairsKeystores(modifiedConfigJSON);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"GetConnectionStringForExportingKeypairsKeystores"
|
||||
body:modifiedConfigJSON
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoGetConnectionStringForExportingKeypairsKeystores(modifiedConfigJSON);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(inputConnectionStringForImportingKeypairsKeystores:(NSString *)cs
|
||||
@@ -119,14 +190,25 @@ RCT_EXPORT_METHOD(inputConnectionStringForImportingKeypairsKeystores:(NSString *
|
||||
NSMutableDictionary *configDict = [NSJSONSerialization JSONObjectWithData:configData options:NSJSONReadingMutableContainers error:&error];
|
||||
NSMutableDictionary *receiverConfig = configDict[@"receiverConfig"];
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl =[[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
|
||||
NSURL *rootUrl =[Utils getRootUrl];
|
||||
NSURL *multiaccountKeystoreDir = [rootUrl URLByAppendingPathComponent:@"keystore"];
|
||||
NSString *keystoreDir = multiaccountKeystoreDir.path;
|
||||
|
||||
[receiverConfig setValue:keystoreDir forKey:@"keystorePath"];
|
||||
NSString *modifiedConfigJSON = [Utils jsonStringWithPrettyPrint:NO fromDictionary:configDict];
|
||||
NSString *result = StatusgoInputConnectionStringForImportingKeypairsKeystores(cs, modifiedConfigJSON);
|
||||
callback(@[result]);
|
||||
|
||||
NSDictionary *params = @{
|
||||
@"connectionString": cs,
|
||||
@"keystoreFilesReceiverClientConfig": modifiedConfigJSON
|
||||
};
|
||||
NSString *paramsJSON = [Utils jsonStringWithPrettyPrint:NO fromDictionary:params];
|
||||
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"InputConnectionStringForImportingKeypairsKeystoresV2"
|
||||
body:paramsJSON
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoInputConnectionStringForImportingKeypairsKeystoresV2(paramsJSON);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -5,5 +5,6 @@
|
||||
#import "RCTLog.h"
|
||||
|
||||
@interface Status : NSObject <RCTBridgeModule, StatusgoSignalHandler>
|
||||
+ (Status *)sharedInstance;
|
||||
- (void)handleSignal:(NSString *)signal;
|
||||
@end
|
||||
|
||||
@@ -2,13 +2,22 @@
|
||||
#import "React/RCTBridge.h"
|
||||
#import "React/RCTEventDispatcher.h"
|
||||
#import "Statusgo.h"
|
||||
|
||||
#import "StatusBackendClient.h"
|
||||
#import "Utils.h"
|
||||
|
||||
static RCTBridge *bridge;
|
||||
|
||||
@implementation Status
|
||||
|
||||
+ (Status *)sharedInstance {
|
||||
static Status *sharedInstance = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedInstance = [[self alloc] init];
|
||||
});
|
||||
return sharedInstance;
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
@@ -73,74 +82,17 @@ RCT_EXPORT_METHOD(deleteImportedKey:(NSString *)keyUID
|
||||
password:(NSString *)password
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"DeleteImportedKey() method called");
|
||||
NSLog(@"DeleteImportedKeyV2() method called");
|
||||
#endif
|
||||
NSURL *multiaccountKeystoreDir = [Utils getKeyStoreDirForKeyUID:keyUID];
|
||||
NSString *result = StatusgoDeleteImportedKey(address, password, multiaccountKeystoreDir.path);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountGenerateAndDeriveAddresses:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountGenerateAndDeriveAddresses() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoMultiAccountGenerateAndDeriveAddresses(json);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountStoreAccount:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountStoreAccount() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoMultiAccountStoreAccount(json);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountLoadAccount:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountLoadAccount() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoMultiAccountLoadAccount(json);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountStoreDerived:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountStoreDerived() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoMultiAccountStoreDerivedAccounts(json);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountImportPrivateKey:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountImportPrivateKey() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoMultiAccountImportPrivateKey(json);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountImportMnemonic:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountImportMnemonic() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoMultiAccountImportMnemonic(json);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(multiAccountDeriveAddresses:(NSString *)json
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"MultiAccountDeriveAddresses() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoMultiAccountDeriveAddresses(json);
|
||||
callback(@[result]);
|
||||
NSString *jsonParams = [NSString stringWithFormat:@"{\"address\":\"%@\",\"password\":\"%@\",\"keyStoreDir\":\"%@\"}",
|
||||
address, password, multiaccountKeystoreDir.path];
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"DeleteImportedKeyV2"
|
||||
body:jsonParams
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoDeleteImportedKeyV2(jsonParams);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
#pragma mark - GetNodeConfig
|
||||
@@ -149,12 +101,20 @@ RCT_EXPORT_METHOD(getNodeConfig:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"GetNodeConfig() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoGetNodeConfig();
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"GetNodeConfig"
|
||||
body:@""
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoGetNodeConfig();
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(fleets) {
|
||||
return StatusgoFleets();
|
||||
return [StatusBackendClient executeStatusGoRequestWithResult:@"Fleets"
|
||||
body:@""
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoFleets();
|
||||
}];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(closeApplication) {
|
||||
@@ -166,14 +126,55 @@ RCT_EXPORT_METHOD(connectionChange:(NSString *)type
|
||||
#if DEBUG
|
||||
NSLog(@"ConnectionChange() method called");
|
||||
#endif
|
||||
StatusgoConnectionChange(type, isExpensive ? 1 : 0);
|
||||
NSDictionary *params = @{
|
||||
@"type": type,
|
||||
@"expensive": @(isExpensive)
|
||||
};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params
|
||||
options:0
|
||||
error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (jsonData) {
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
[StatusBackendClient executeStatusGoRequest:@"ConnectionChangeV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoConnectionChangeV2(jsonString);
|
||||
}];
|
||||
} else {
|
||||
NSLog(@"Failed to create JSON data");
|
||||
}
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(appStateChange:(NSString *)type) {
|
||||
RCT_EXPORT_METHOD(appStateChange:(NSString *)state) {
|
||||
#if DEBUG
|
||||
NSLog(@"AppStateChange() method called");
|
||||
#endif
|
||||
StatusgoAppStateChange(type);
|
||||
NSDictionary *params = @{@"state": state};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params
|
||||
options:0
|
||||
error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (jsonData) {
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
[StatusBackendClient executeStatusGoRequest:@"AppStateChangeV2"
|
||||
body:jsonString
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoAppStateChangeV2(jsonString);
|
||||
}];
|
||||
} else {
|
||||
NSLog(@"Failed to create JSON data");
|
||||
}
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(addCentralizedMetric:(NSString *)request
|
||||
@@ -181,8 +182,12 @@ RCT_EXPORT_METHOD(addCentralizedMetric:(NSString *)request
|
||||
#if DEBUG
|
||||
NSLog(@"addCentralizedMetric() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoAddCentralizedMetric(request);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"AddCentralizedMetric"
|
||||
body:request
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoAddCentralizedMetric(request);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(toggleCentralizedMetrics:(NSString *)request
|
||||
@@ -190,15 +195,23 @@ RCT_EXPORT_METHOD(toggleCentralizedMetrics:(NSString *)request
|
||||
#if DEBUG
|
||||
NSLog(@"toggleCentralizedMetrics() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoToggleCentralizedMetrics(request);
|
||||
callback(@[result]);
|
||||
[StatusBackendClient executeStatusGoRequestWithCallback:@"ToggleCentralizedMetrics"
|
||||
body:request
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoToggleCentralizedMetrics(request);
|
||||
}
|
||||
callback:callback];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(startLocalNotifications) {
|
||||
#if DEBUG
|
||||
NSLog(@"StartLocalNotifications() method called");
|
||||
#endif
|
||||
StatusgoStartLocalNotifications();
|
||||
[StatusBackendClient executeStatusGoRequest:@"StartLocalNotifications"
|
||||
body:@""
|
||||
statusgoFunction:^NSString *{
|
||||
return StatusgoStartLocalNotifications();
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - deviceinfo
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <React/RCTBridgeModule.h>
|
||||
|
||||
@interface StatusBackendClient : NSObject <RCTBridgeModule>
|
||||
|
||||
@property (nonatomic) BOOL serverEnabled;
|
||||
@property (nonatomic, strong) NSString *statusGoEndpoint;
|
||||
@property (nonatomic, strong) NSString *signalEndpoint;
|
||||
@property (nonatomic, strong) NSString *rootDataDir;
|
||||
@property (nonatomic, strong) NSURLSessionWebSocketTask *webSocket;
|
||||
|
||||
// Add sharedInstance class method declaration
|
||||
+ (instancetype)sharedInstance;
|
||||
- (void)request:(NSString *)endpoint
|
||||
body:(NSString *)body
|
||||
callback:(void (^)(NSString *response, NSError *error))callback;
|
||||
|
||||
+ (void)executeStatusGoRequest:(NSString *)endpoint
|
||||
body:(NSString *)body
|
||||
statusgoFunction:(NSString * (^)(void))statusgoFunction;
|
||||
|
||||
+ (void)executeStatusGoRequestWithCallback:(NSString *)endpoint
|
||||
body:(NSString *)body
|
||||
statusgoFunction:(NSString * (^)(void))statusgoFunction
|
||||
callback:(RCTResponseSenderBlock)callback;
|
||||
|
||||
+ (NSString *)executeStatusGoRequestWithResult:(NSString *)endpoint
|
||||
body:(NSString *)body
|
||||
statusgoFunction:(NSString * (^)(void))statusgoFunction;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,246 @@
|
||||
#import "StatusBackendClient.h"
|
||||
#import "RCTStatus.h"
|
||||
#import "Utils.h"
|
||||
|
||||
@implementation StatusBackendClient {
|
||||
NSURLSessionWebSocketTask *_webSocket;
|
||||
BOOL _serverEnabled;
|
||||
NSString *_statusGoEndpoint;
|
||||
NSString *_signalEndpoint;
|
||||
NSString *_rootDataDir;
|
||||
}
|
||||
|
||||
RCT_EXPORT_MODULE();
|
||||
|
||||
+ (BOOL)requiresMainQueueSetup {
|
||||
return YES;
|
||||
}
|
||||
|
||||
+ (instancetype)allocWithZone:(NSZone *)zone {
|
||||
static StatusBackendClient *sharedInstance = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedInstance = [super allocWithZone:zone];
|
||||
});
|
||||
return sharedInstance;
|
||||
}
|
||||
|
||||
+ (instancetype)sharedInstance {
|
||||
return [[self alloc] init];
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
static StatusBackendClient *sharedInstance = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedInstance = [super init];
|
||||
if (sharedInstance) {
|
||||
sharedInstance->_serverEnabled = NO;
|
||||
sharedInstance->_statusGoEndpoint = nil;
|
||||
sharedInstance->_signalEndpoint = nil;
|
||||
sharedInstance->_rootDataDir = nil;
|
||||
sharedInstance->_webSocket = nil;
|
||||
}
|
||||
});
|
||||
return sharedInstance;
|
||||
}
|
||||
|
||||
- (id)copyWithZone:(NSZone *)zone {
|
||||
return self;
|
||||
}
|
||||
|
||||
- (BOOL)serverEnabled {
|
||||
return _serverEnabled;
|
||||
}
|
||||
|
||||
- (NSString *)statusGoEndpoint {
|
||||
return _statusGoEndpoint;
|
||||
}
|
||||
|
||||
- (NSString *)signalEndpoint {
|
||||
return _signalEndpoint;
|
||||
}
|
||||
|
||||
- (NSString *)rootDataDir {
|
||||
return _rootDataDir;
|
||||
}
|
||||
|
||||
- (void)connectWebSocket {
|
||||
if (!self.serverEnabled || !self.signalEndpoint) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *fullUrl = [NSString stringWithFormat:@"%@", self.signalEndpoint];
|
||||
NSURL *url = [NSURL URLWithString:fullUrl];
|
||||
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
|
||||
self.webSocket = [session webSocketTaskWithURL:url];
|
||||
|
||||
[self.webSocket resume];
|
||||
[self receiveMessage];
|
||||
}
|
||||
|
||||
- (void)receiveMessage {
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[self.webSocket receiveMessageWithCompletionHandler:^(NSURLSessionWebSocketMessage *message, NSError *error) {
|
||||
__strong typeof(weakSelf) strongSelf = weakSelf;
|
||||
if (!strongSelf || !strongSelf.webSocket) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
NSLog(@"WebSocket error: %@", error);
|
||||
// Attempt to reconnect after error
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[strongSelf connectWebSocket];
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (message) {
|
||||
if (message.type == NSURLSessionWebSocketMessageTypeString && message.string) {
|
||||
[[Status sharedInstance] handleSignal:message.string];
|
||||
}
|
||||
// Continue receiving messages only if the connection is still active
|
||||
if (strongSelf.webSocket) {
|
||||
[strongSelf receiveMessage];
|
||||
}
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)disconnectWebSocket {
|
||||
if (self.webSocket) {
|
||||
[self.webSocket cancel];
|
||||
self.webSocket = nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)request:(NSString *)endpoint
|
||||
body:(NSString *)body
|
||||
callback:(void (^)(NSString *response, NSError *error))callback {
|
||||
NSString *fullUrlString = [NSString stringWithFormat:@"%@%@", self.statusGoEndpoint, endpoint];
|
||||
NSURL *url = [NSURL URLWithString:fullUrlString];
|
||||
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
|
||||
request.HTTPMethod = @"POST";
|
||||
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
|
||||
|
||||
NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding];
|
||||
request.HTTPBody = bodyData;
|
||||
|
||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
|
||||
|
||||
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
|
||||
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
||||
if (error) {
|
||||
NSLog(@"request error: %@", error);
|
||||
callback(nil, error);
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
callback(responseString, nil);
|
||||
}];
|
||||
|
||||
[task resume];
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(configStatusBackendServer:(BOOL)serverEnabled
|
||||
statusGoEndpoint:(NSString *)statusGoEndpoint
|
||||
signalEndpoint:(NSString *)signalEndpoint
|
||||
rootDataDir:(NSString *)rootDataDir) {
|
||||
[self configureWithEnabled:serverEnabled
|
||||
statusGoEndpoint:statusGoEndpoint
|
||||
signalEndpoint:signalEndpoint
|
||||
rootDataDir:rootDataDir];
|
||||
}
|
||||
|
||||
- (void)configureWithEnabled:(BOOL)serverEnabled
|
||||
statusGoEndpoint:(NSString *)statusGoEndpoint
|
||||
signalEndpoint:(NSString *)signalEndpoint
|
||||
rootDataDir:(NSString *)rootDataDir {
|
||||
_serverEnabled = serverEnabled;
|
||||
|
||||
if (serverEnabled) {
|
||||
_statusGoEndpoint = statusGoEndpoint;
|
||||
_signalEndpoint = signalEndpoint;
|
||||
_rootDataDir = rootDataDir;
|
||||
[self connectWebSocket];
|
||||
} else {
|
||||
[self disconnectWebSocket];
|
||||
_statusGoEndpoint = nil;
|
||||
_signalEndpoint = nil;
|
||||
_rootDataDir = nil;
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)executeStatusGoRequest:(NSString *)endpoint
|
||||
body:(NSString *)body
|
||||
statusgoFunction:(NSString * (^)(void))statusgoFunction {
|
||||
StatusBackendClient *client = [StatusBackendClient sharedInstance];
|
||||
if (client.serverEnabled) {
|
||||
[client request:endpoint body:body callback:^(NSString *response, NSError *error) {
|
||||
[Utils handleStatusGoResponse:response source:endpoint error:error];
|
||||
}];
|
||||
} else {
|
||||
NSString *result = statusgoFunction();
|
||||
[Utils handleStatusGoResponse:result source:endpoint error:nil];
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)executeStatusGoRequestWithCallback:(NSString *)endpoint
|
||||
body:(NSString *)body
|
||||
statusgoFunction:(NSString * (^)(void))statusgoFunction
|
||||
callback:(RCTResponseSenderBlock)callback {
|
||||
StatusBackendClient *client = [StatusBackendClient sharedInstance];
|
||||
if (client.serverEnabled) {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
[client request:endpoint body:body callback:^(NSString *response, NSError *error) {
|
||||
if (error) {
|
||||
NSLog(@"request to %@ failed: %@", endpoint, error);
|
||||
if (callback) {
|
||||
callback(@[@(NO)]);
|
||||
}
|
||||
} else {
|
||||
if (callback) {
|
||||
callback(@[response]);
|
||||
}
|
||||
}
|
||||
}];
|
||||
});
|
||||
} else {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
NSString *result = statusgoFunction();
|
||||
if (callback) {
|
||||
callback(@[result]);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
+ (NSString *)executeStatusGoRequestWithResult:(NSString *)endpoint
|
||||
body:(NSString *)body
|
||||
statusgoFunction:(NSString * (^)(void))statusgoFunction {
|
||||
StatusBackendClient *client = [StatusBackendClient sharedInstance];
|
||||
if (client.serverEnabled) {
|
||||
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
|
||||
__block NSString *resultString = @"";
|
||||
|
||||
[client request:endpoint body:body callback:^(NSString *response, NSError *error) {
|
||||
if (error) {
|
||||
NSLog(@"request to %@ failed: %@", endpoint, error);
|
||||
resultString = @"";
|
||||
} else {
|
||||
resultString = response;
|
||||
}
|
||||
dispatch_semaphore_signal(semaphore);
|
||||
}];
|
||||
|
||||
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
|
||||
return resultString;
|
||||
} else {
|
||||
return statusgoFunction();
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -6,11 +6,13 @@
|
||||
|
||||
@interface Utils : NSObject <RCTBridgeModule>
|
||||
|
||||
+ (NSURL *)getRootUrl;
|
||||
+ (NSString *)jsonStringWithPrettyPrint:(BOOL)prettyPrint fromDictionary:(NSDictionary *)dictionary;
|
||||
+ (NSString *)jsonStringWithPrettyPrint:(BOOL)prettyPrint fromArray:(NSArray *)array;
|
||||
+ (NSURL *)getKeyStoreDirForKeyUID:(NSString *)keyUID;
|
||||
+ (NSString *)getExportDbFilePath;
|
||||
+ (NSString *)getKeyUID:(NSString *)jsonString;
|
||||
+ (void)migrateKeystore:(NSString *)accountData password:(NSString *)password;
|
||||
+ (void)handleStatusGoResponse:(NSString *)response source:(NSString *)source error:(NSError *)error;
|
||||
|
||||
@end
|
||||
|
||||
@@ -3,11 +3,28 @@
|
||||
#import "React/RCTEventDispatcher.h"
|
||||
#import "Statusgo.h"
|
||||
#import "Utils.h"
|
||||
#import "StatusBackendClient.h"
|
||||
|
||||
@implementation Utils
|
||||
|
||||
RCT_EXPORT_MODULE();
|
||||
|
||||
#pragma mark - Private Methods
|
||||
|
||||
+ (NSURL *)getRootUrl {
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl;
|
||||
|
||||
StatusBackendClient *client = [StatusBackendClient sharedInstance];
|
||||
if (client.serverEnabled && client.rootDataDir) {
|
||||
rootUrl = [NSURL fileURLWithPath:client.rootDataDir];
|
||||
} else {
|
||||
rootUrl = [[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
|
||||
}
|
||||
|
||||
return rootUrl;
|
||||
}
|
||||
|
||||
+ (NSString *)jsonStringWithPrettyPrint:(BOOL)prettyPrint fromDictionary:(NSDictionary *)dictionary {
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary
|
||||
@@ -38,7 +55,7 @@ RCT_EXPORT_MODULE();
|
||||
|
||||
+ (NSURL *)getKeyStoreDirForKeyUID:(NSString *)keyUID {
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl = [[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
|
||||
NSURL *rootUrl = [self getRootUrl];
|
||||
|
||||
NSURL *oldKeystoreDir = [rootUrl URLByAppendingPathComponent:@"keystore"];
|
||||
NSURL *multiaccountKeystoreDir = [oldKeystoreDir URLByAppendingPathComponent:keyUID];
|
||||
@@ -57,6 +74,11 @@ RCT_EXPORT_MODULE();
|
||||
}
|
||||
|
||||
+ (NSString *) getExportDbFilePath {
|
||||
StatusBackendClient *client = [StatusBackendClient sharedInstance];
|
||||
if (client.serverEnabled && client.rootDataDir) {
|
||||
return [client.rootDataDir stringByAppendingPathComponent:@"export.db"];
|
||||
}
|
||||
|
||||
NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"export.db"];
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
|
||||
@@ -70,17 +92,36 @@ RCT_EXPORT_MODULE();
|
||||
+ (void) migrateKeystore:(NSString *)accountData
|
||||
password:(NSString *)password {
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
NSURL *rootUrl =[self getRootUrl];
|
||||
|
||||
NSURL *keyUID = [self getKeyStoreDirForKeyUID:accountData];
|
||||
NSData *jsonData = [accountData dataUsingEncoding:NSUTF8StringEncoding];
|
||||
NSError *error;
|
||||
NSDictionary *accountJson = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error parsing accountData: %@", error);
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *keyUID = [self getKeyUID:accountData];
|
||||
NSURL *oldKeystoreDir = [rootUrl URLByAppendingPathComponent:@"keystore"];
|
||||
NSURL *multiaccountKeystoreDir = [self getKeyStoreDirForKeyUID:keyUID.path];
|
||||
NSURL *multiaccountKeystoreDir = [self getKeyStoreDirForKeyUID:keyUID];
|
||||
|
||||
NSArray *keys = [fileManager contentsOfDirectoryAtPath:multiaccountKeystoreDir.path error:nil];
|
||||
if (keys.count == 0) {
|
||||
NSString *migrationResult = StatusgoMigrateKeyStoreDir(accountData, password, oldKeystoreDir.path, multiaccountKeystoreDir.path);
|
||||
NSDictionary *params = @{
|
||||
@"account": accountJson,
|
||||
@"password": password,
|
||||
@"oldDir": oldKeystoreDir.path,
|
||||
@"newDir": multiaccountKeystoreDir.path
|
||||
};
|
||||
NSData *paramsJsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating params JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:paramsJsonData encoding:NSUTF8StringEncoding];
|
||||
|
||||
NSString *migrationResult = StatusgoMigrateKeyStoreDirV2(jsonString);
|
||||
NSLog(@"keystore migration result %@", migrationResult);
|
||||
|
||||
NSString *initKeystoreResult = StatusgoInitKeystore(multiaccountKeystoreDir.path);
|
||||
@@ -89,18 +130,19 @@ RCT_EXPORT_MODULE();
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(backupDisabledDataDir) {
|
||||
StatusBackendClient *client = [StatusBackendClient sharedInstance];
|
||||
if (client.serverEnabled && client.rootDataDir) {
|
||||
return client.rootDataDir;
|
||||
}
|
||||
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
NSURL *rootUrl = [Utils getRootUrl];
|
||||
return rootUrl.path;
|
||||
}
|
||||
|
||||
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(keystoreDir) {
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSURL *rootUrl =[[fileManager
|
||||
URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]
|
||||
lastObject];
|
||||
NSURL *rootUrl =[Utils getRootUrl];
|
||||
|
||||
NSURL *commonKeystoreDir = [rootUrl URLByAppendingPathComponent:@"keystore"];
|
||||
|
||||
@@ -110,9 +152,17 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(keystoreDir) {
|
||||
RCT_EXPORT_METHOD(validateMnemonic:(NSString *)seed
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
#if DEBUG
|
||||
NSLog(@"validateMnemonic() method called");
|
||||
NSLog(@"validateMnemonicV2() method called");
|
||||
#endif
|
||||
NSString *result = StatusgoValidateMnemonic(seed);
|
||||
NSDictionary *params = @{@"mnemonic": seed};
|
||||
NSError *error;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"Error creating JSON: %@", error);
|
||||
return;
|
||||
}
|
||||
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||
NSString *result = StatusgoValidateMnemonicV2(jsonString);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
@@ -132,4 +182,17 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(validateConnectionString:(NSString *)cs)
|
||||
return StatusgoValidateConnectionString(cs);
|
||||
}
|
||||
|
||||
+ (void)handleStatusGoResponse:(NSString *)response source:(NSString *)source error:(NSError *)error {
|
||||
if (error) {
|
||||
NSLog(@"%@ failed: %@", source, error);
|
||||
return;
|
||||
}
|
||||
|
||||
if ([response hasPrefix:@"{\"error\":\"\""]) {
|
||||
NSLog(@"%@ success: %@", source, response);
|
||||
} else {
|
||||
NSLog(@"%@ failed: %@", source, response);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -761,6 +761,26 @@ void _Logout(const FunctionCallbackInfo<Value>& args) {
|
||||
|
||||
}
|
||||
|
||||
void _AcceptTerms(const FunctionCallbackInfo<Value>& args) {
|
||||
Isolate* isolate = args.GetIsolate();
|
||||
|
||||
if (args.Length() != 0) {
|
||||
// Throw an Error that is passed back to JavaScript
|
||||
isolate->ThrowException(Exception::TypeError(
|
||||
String::NewFromUtf8Literal(isolate, "Wrong number of arguments for AcceptTerms")));
|
||||
return;
|
||||
}
|
||||
|
||||
// Check the argument types
|
||||
|
||||
// Call exported Go function, which returns a C string
|
||||
char *c = AcceptTerms();
|
||||
|
||||
Local<String> ret = String::NewFromUtf8(isolate, c).ToLocalChecked();
|
||||
args.GetReturnValue().Set(ret);
|
||||
delete c;
|
||||
}
|
||||
|
||||
void _HashMessage(const FunctionCallbackInfo<Value>& args) {
|
||||
Isolate* isolate = args.GetIsolate();
|
||||
Local<Context> context = isolate->GetCurrentContext();
|
||||
@@ -1998,6 +2018,7 @@ void init(Local<Object> exports) {
|
||||
NODE_SET_METHOD(exports, "multiAccountStoreAccount", _MultiAccountStoreAccount);
|
||||
NODE_SET_METHOD(exports, "initKeystore", _InitKeystore);
|
||||
NODE_SET_METHOD(exports, "initializeApplication", _InitializeApplication);
|
||||
NODE_SET_METHOD(exports, "acceptTerms", _AcceptTerms);
|
||||
NODE_SET_METHOD(exports, "fleets", _Fleets);
|
||||
NODE_SET_METHOD(exports, "stopCPUProfiling", _StopCPUProfiling);
|
||||
NODE_SET_METHOD(exports, "encodeTransfer", _EncodeTransfer);
|
||||
|
||||
+1601
-743
File diff suppressed because it is too large
Load Diff
+110
-13
@@ -4,10 +4,12 @@ androidx.activity:activity:1.2.4
|
||||
androidx.activity:activity:1.6.0
|
||||
androidx.annotation:annotation-experimental:1.1.0
|
||||
androidx.annotation:annotation-experimental:1.3.0
|
||||
androidx.annotation:annotation-jvm:1.6.0
|
||||
androidx.annotation:annotation:1.0.0
|
||||
androidx.annotation:annotation:1.1.0
|
||||
androidx.annotation:annotation:1.2.0
|
||||
androidx.annotation:annotation:1.3.0
|
||||
androidx.annotation:annotation:1.6.0
|
||||
androidx.appcompat:appcompat-resources:1.1.0-rc01
|
||||
androidx.appcompat:appcompat-resources:1.2.0
|
||||
androidx.appcompat:appcompat-resources:1.3.1
|
||||
@@ -41,12 +43,14 @@ androidx.coordinatorlayout:coordinatorlayout:1.1.0
|
||||
androidx.core:core-ktx:1.2.0
|
||||
androidx.core:core-ktx:1.6.0
|
||||
androidx.core:core-ktx:1.9.0
|
||||
androidx.core:core-ktx:1.12.0
|
||||
androidx.core:core-splashscreen:1.0.0
|
||||
androidx.core:core:1.0.0
|
||||
androidx.core:core:1.1.0
|
||||
androidx.core:core:1.1.0-rc01
|
||||
androidx.core:core:1.6.0
|
||||
androidx.core:core:1.9.0
|
||||
androidx.core:core:1.12.0
|
||||
androidx.cursoradapter:cursoradapter:1.0.0
|
||||
androidx.customview:customview:1.0.0
|
||||
androidx.databinding:databinding-common:3.2.1
|
||||
@@ -55,6 +59,7 @@ androidx.databinding:databinding-common:4.1.0
|
||||
androidx.databinding:databinding-common:7.0.4
|
||||
androidx.databinding:databinding-common:7.2.1
|
||||
androidx.databinding:databinding-common:7.3.1
|
||||
androidx.databinding:databinding-common:7.4.2
|
||||
androidx.databinding:databinding-common:8.1.1
|
||||
androidx.databinding:databinding-compiler-common:3.2.1
|
||||
androidx.databinding:databinding-compiler-common:3.5.3
|
||||
@@ -62,6 +67,7 @@ androidx.databinding:databinding-compiler-common:4.1.0
|
||||
androidx.databinding:databinding-compiler-common:7.0.4
|
||||
androidx.databinding:databinding-compiler-common:7.2.1
|
||||
androidx.databinding:databinding-compiler-common:7.3.1
|
||||
androidx.databinding:databinding-compiler-common:7.4.2
|
||||
androidx.databinding:databinding-compiler-common:8.1.1
|
||||
androidx.documentfile:documentfile:1.0.0
|
||||
androidx.drawerlayout:drawerlayout:1.0.0
|
||||
@@ -165,6 +171,7 @@ com.android.databinding:baseLibrary:4.1.0
|
||||
com.android.databinding:baseLibrary:7.0.4
|
||||
com.android.databinding:baseLibrary:7.2.1
|
||||
com.android.databinding:baseLibrary:7.3.1
|
||||
com.android.databinding:baseLibrary:7.4.2
|
||||
com.android.databinding:baseLibrary:8.1.1
|
||||
com.android.databinding:compilerCommon:1.0-rc5
|
||||
com.android.databinding:compilerCommon:3.0.1
|
||||
@@ -174,6 +181,7 @@ com.android.tools.analytics-library:crash:27.1.0
|
||||
com.android.tools.analytics-library:crash:30.0.4
|
||||
com.android.tools.analytics-library:crash:30.2.1
|
||||
com.android.tools.analytics-library:crash:30.3.1
|
||||
com.android.tools.analytics-library:crash:30.4.2
|
||||
com.android.tools.analytics-library:crash:31.1.1
|
||||
com.android.tools.analytics-library:protos:26.0.1
|
||||
com.android.tools.analytics-library:protos:26.2.1
|
||||
@@ -182,6 +190,7 @@ com.android.tools.analytics-library:protos:27.1.0
|
||||
com.android.tools.analytics-library:protos:30.0.4
|
||||
com.android.tools.analytics-library:protos:30.2.1
|
||||
com.android.tools.analytics-library:protos:30.3.1
|
||||
com.android.tools.analytics-library:protos:30.4.2
|
||||
com.android.tools.analytics-library:protos:31.1.1
|
||||
com.android.tools.analytics-library:shared:26.0.1
|
||||
com.android.tools.analytics-library:shared:26.2.1
|
||||
@@ -190,6 +199,7 @@ com.android.tools.analytics-library:shared:27.1.0
|
||||
com.android.tools.analytics-library:shared:30.0.4
|
||||
com.android.tools.analytics-library:shared:30.2.1
|
||||
com.android.tools.analytics-library:shared:30.3.1
|
||||
com.android.tools.analytics-library:shared:30.4.2
|
||||
com.android.tools.analytics-library:shared:31.1.1
|
||||
com.android.tools.analytics-library:tracker:26.0.1
|
||||
com.android.tools.analytics-library:tracker:26.2.1
|
||||
@@ -198,6 +208,7 @@ com.android.tools.analytics-library:tracker:27.1.0
|
||||
com.android.tools.analytics-library:tracker:30.0.4
|
||||
com.android.tools.analytics-library:tracker:30.2.1
|
||||
com.android.tools.analytics-library:tracker:30.3.1
|
||||
com.android.tools.analytics-library:tracker:30.4.2
|
||||
com.android.tools.analytics-library:tracker:31.1.1
|
||||
com.android.tools.build.jetifier:jetifier-core:1.0.0-alpha10
|
||||
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04
|
||||
@@ -213,12 +224,14 @@ com.android.tools.build:aapt2-proto:4.1.0-6503028
|
||||
com.android.tools.build:aapt2-proto:7.0.4-7396180
|
||||
com.android.tools.build:aapt2-proto:7.2.1-7984345
|
||||
com.android.tools.build:aapt2-proto:7.3.1-8691043
|
||||
com.android.tools.build:aapt2-proto:7.4.2-8841542
|
||||
com.android.tools.build:aapt2-proto:8.1.1-10154469
|
||||
com.android.tools.build:aapt2:8.1.1-10154469
|
||||
com.android.tools.build:aaptcompiler:4.1.0
|
||||
com.android.tools.build:aaptcompiler:7.0.4
|
||||
com.android.tools.build:aaptcompiler:7.2.1
|
||||
com.android.tools.build:aaptcompiler:7.3.1
|
||||
com.android.tools.build:aaptcompiler:7.4.2
|
||||
com.android.tools.build:aaptcompiler:8.1.1
|
||||
com.android.tools.build:apksig:3.0.1
|
||||
com.android.tools.build:apksig:3.2.1
|
||||
@@ -227,6 +240,7 @@ com.android.tools.build:apksig:4.1.0
|
||||
com.android.tools.build:apksig:7.0.4
|
||||
com.android.tools.build:apksig:7.2.1
|
||||
com.android.tools.build:apksig:7.3.1
|
||||
com.android.tools.build:apksig:7.4.2
|
||||
com.android.tools.build:apksig:8.1.1
|
||||
com.android.tools.build:apkzlib:3.2.1
|
||||
com.android.tools.build:apkzlib:3.5.3
|
||||
@@ -234,6 +248,7 @@ com.android.tools.build:apkzlib:4.1.0
|
||||
com.android.tools.build:apkzlib:7.0.4
|
||||
com.android.tools.build:apkzlib:7.2.1
|
||||
com.android.tools.build:apkzlib:7.3.1
|
||||
com.android.tools.build:apkzlib:7.4.2
|
||||
com.android.tools.build:apkzlib:8.1.1
|
||||
com.android.tools.build:builder-model:1.3.1
|
||||
com.android.tools.build:builder-model:1.5.0
|
||||
@@ -244,6 +259,7 @@ com.android.tools.build:builder-model:4.1.0
|
||||
com.android.tools.build:builder-model:7.0.4
|
||||
com.android.tools.build:builder-model:7.2.1
|
||||
com.android.tools.build:builder-model:7.3.1
|
||||
com.android.tools.build:builder-model:7.4.2
|
||||
com.android.tools.build:builder-model:8.1.1
|
||||
com.android.tools.build:builder-test-api:1.3.1
|
||||
com.android.tools.build:builder-test-api:1.5.0
|
||||
@@ -254,6 +270,7 @@ com.android.tools.build:builder-test-api:4.1.0
|
||||
com.android.tools.build:builder-test-api:7.0.4
|
||||
com.android.tools.build:builder-test-api:7.2.1
|
||||
com.android.tools.build:builder-test-api:7.3.1
|
||||
com.android.tools.build:builder-test-api:7.4.2
|
||||
com.android.tools.build:builder-test-api:8.1.1
|
||||
com.android.tools.build:builder:1.3.1
|
||||
com.android.tools.build:builder:1.5.0
|
||||
@@ -264,6 +281,7 @@ com.android.tools.build:builder:4.1.0
|
||||
com.android.tools.build:builder:7.0.4
|
||||
com.android.tools.build:builder:7.2.1
|
||||
com.android.tools.build:builder:7.3.1
|
||||
com.android.tools.build:builder:7.4.2
|
||||
com.android.tools.build:builder:8.1.1
|
||||
com.android.tools.build:bundletool:0.5.0
|
||||
com.android.tools.build:bundletool:0.9.0
|
||||
@@ -271,6 +289,7 @@ com.android.tools.build:bundletool:0.14.0
|
||||
com.android.tools.build:bundletool:1.6.0
|
||||
com.android.tools.build:bundletool:1.8.2
|
||||
com.android.tools.build:bundletool:1.9.0
|
||||
com.android.tools.build:bundletool:1.11.4
|
||||
com.android.tools.build:bundletool:1.14.0
|
||||
com.android.tools.build:gradle-api:3.0.1
|
||||
com.android.tools.build:gradle-api:3.2.1
|
||||
@@ -279,10 +298,12 @@ com.android.tools.build:gradle-api:4.1.0
|
||||
com.android.tools.build:gradle-api:7.0.4
|
||||
com.android.tools.build:gradle-api:7.2.1
|
||||
com.android.tools.build:gradle-api:7.3.1
|
||||
com.android.tools.build:gradle-api:7.4.2
|
||||
com.android.tools.build:gradle-api:8.1.1
|
||||
com.android.tools.build:gradle-core:1.3.1
|
||||
com.android.tools.build:gradle-core:1.5.0
|
||||
com.android.tools.build:gradle-core:3.0.1
|
||||
com.android.tools.build:gradle-settings-api:7.4.2
|
||||
com.android.tools.build:gradle-settings-api:8.1.1
|
||||
com.android.tools.build:gradle:1.3.1
|
||||
com.android.tools.build:gradle:1.5.0
|
||||
@@ -293,6 +314,8 @@ com.android.tools.build:gradle:4.1.0
|
||||
com.android.tools.build:gradle:7.0.4
|
||||
com.android.tools.build:gradle:7.2.1
|
||||
com.android.tools.build:gradle:7.3.1
|
||||
com.android.tools.build:gradle:7.4.2
|
||||
com.android.tools.build:gradle:8.1.1
|
||||
com.android.tools.build:manifest-merger:24.3.1
|
||||
com.android.tools.build:manifest-merger:24.5.0
|
||||
com.android.tools.build:manifest-merger:26.0.1
|
||||
@@ -302,6 +325,7 @@ com.android.tools.build:manifest-merger:27.1.0
|
||||
com.android.tools.build:manifest-merger:30.0.4
|
||||
com.android.tools.build:manifest-merger:30.2.1
|
||||
com.android.tools.build:manifest-merger:30.3.1
|
||||
com.android.tools.build:manifest-merger:30.4.2
|
||||
com.android.tools.build:manifest-merger:31.1.1
|
||||
com.android.tools.build:transform-api:1.5.0
|
||||
com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api
|
||||
@@ -314,7 +338,9 @@ com.android.tools.ddms:ddmlib:27.1.0
|
||||
com.android.tools.ddms:ddmlib:30.0.4
|
||||
com.android.tools.ddms:ddmlib:30.2.1
|
||||
com.android.tools.ddms:ddmlib:30.3.1
|
||||
com.android.tools.ddms:ddmlib:30.4.2
|
||||
com.android.tools.ddms:ddmlib:31.1.1
|
||||
com.android.tools.emulator:proto:31.1.1
|
||||
com.android.tools.external.com-intellij:intellij-core:26.0.1
|
||||
com.android.tools.external.lombok:lombok-ast:0.2.3
|
||||
com.android.tools.external.org-jetbrains:uast:26.0.1
|
||||
@@ -329,6 +355,7 @@ com.android.tools.layoutlib:layoutlib-api:27.1.0
|
||||
com.android.tools.layoutlib:layoutlib-api:30.0.4
|
||||
com.android.tools.layoutlib:layoutlib-api:30.2.1
|
||||
com.android.tools.layoutlib:layoutlib-api:30.3.1
|
||||
com.android.tools.layoutlib:layoutlib-api:30.4.2
|
||||
com.android.tools.layoutlib:layoutlib-api:31.1.1
|
||||
com.android.tools.lint:lint-api:24.3.1
|
||||
com.android.tools.lint:lint-api:24.5.0
|
||||
@@ -343,37 +370,56 @@ com.android.tools.lint:lint-model:27.1.0
|
||||
com.android.tools.lint:lint-model:30.0.4
|
||||
com.android.tools.lint:lint-model:30.2.1
|
||||
com.android.tools.lint:lint-model:30.3.1
|
||||
com.android.tools.lint:lint-model:30.4.2
|
||||
com.android.tools.lint:lint-model:31.1.1
|
||||
com.android.tools.lint:lint-typedef-remover:30.2.1
|
||||
com.android.tools.lint:lint-typedef-remover:30.3.1
|
||||
com.android.tools.lint:lint-typedef-remover:30.4.2
|
||||
com.android.tools.lint:lint-typedef-remover:31.1.1
|
||||
com.android.tools.lint:lint:24.3.1
|
||||
com.android.tools.lint:lint:24.5.0
|
||||
com.android.tools.lint:lint:26.0.1
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:30.2.1
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:30.3.1
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:30.4.2
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:31.1.1
|
||||
com.android.tools.utp:android-device-provider-ddmlib:31.1.1
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:30.0.4
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:30.2.1
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:30.3.1
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:30.4.2
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:31.1.1
|
||||
com.android.tools.utp:android-device-provider-gradle:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:30.2.1
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:30.3.1
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:30.4.2
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:30.2.1
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:30.3.1
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:30.4.2
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-coverage:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-device-info-proto:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-device-info:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-logcat:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:30.0.4
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:30.2.1
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:30.3.1
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:30.4.2
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-host-retention:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:30.0.4
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:30.2.1
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:30.3.1
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:30.4.2
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.1.1
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle:31.1.1
|
||||
com.android.tools:annotations:24.3.1
|
||||
com.android.tools:annotations:24.5.0
|
||||
com.android.tools:annotations:26.0.1
|
||||
@@ -383,6 +429,7 @@ com.android.tools:annotations:27.1.0
|
||||
com.android.tools:annotations:30.0.4
|
||||
com.android.tools:annotations:30.2.1
|
||||
com.android.tools:annotations:30.3.1
|
||||
com.android.tools:annotations:30.4.2
|
||||
com.android.tools:annotations:31.1.1
|
||||
com.android.tools:common:24.3.1
|
||||
com.android.tools:common:24.5.0
|
||||
@@ -393,6 +440,7 @@ com.android.tools:common:27.1.0
|
||||
com.android.tools:common:30.0.4
|
||||
com.android.tools:common:30.2.1
|
||||
com.android.tools:common:30.3.1
|
||||
com.android.tools:common:30.4.2
|
||||
com.android.tools:common:31.1.1
|
||||
com.android.tools:dvlib:24.3.1
|
||||
com.android.tools:dvlib:24.5.0
|
||||
@@ -403,6 +451,7 @@ com.android.tools:dvlib:27.1.0
|
||||
com.android.tools:dvlib:30.0.4
|
||||
com.android.tools:dvlib:30.2.1
|
||||
com.android.tools:dvlib:30.3.1
|
||||
com.android.tools:dvlib:30.4.2
|
||||
com.android.tools:dvlib:31.1.1
|
||||
com.android.tools:repository:26.0.1
|
||||
com.android.tools:repository:26.2.1
|
||||
@@ -411,6 +460,7 @@ com.android.tools:repository:27.1.0
|
||||
com.android.tools:repository:30.0.4
|
||||
com.android.tools:repository:30.2.1
|
||||
com.android.tools:repository:30.3.1
|
||||
com.android.tools:repository:30.4.2
|
||||
com.android.tools:repository:31.1.1
|
||||
com.android.tools:sdklib:24.3.1
|
||||
com.android.tools:sdklib:24.5.0
|
||||
@@ -421,6 +471,7 @@ com.android.tools:sdklib:27.1.0
|
||||
com.android.tools:sdklib:30.0.4
|
||||
com.android.tools:sdklib:30.2.1
|
||||
com.android.tools:sdklib:30.3.1
|
||||
com.android.tools:sdklib:30.4.2
|
||||
com.android.tools:sdklib:31.1.1
|
||||
com.android.tools:sdk-common:24.3.1
|
||||
com.android.tools:sdk-common:24.5.0
|
||||
@@ -431,16 +482,19 @@ com.android.tools:sdk-common:27.1.0
|
||||
com.android.tools:sdk-common:30.0.4
|
||||
com.android.tools:sdk-common:30.2.1
|
||||
com.android.tools:sdk-common:30.3.1
|
||||
com.android.tools:sdk-common:30.4.2
|
||||
com.android.tools:sdk-common:31.1.1
|
||||
com.android:signflinger:4.1.0
|
||||
com.android:signflinger:7.0.4
|
||||
com.android:signflinger:7.2.1
|
||||
com.android:signflinger:7.3.1
|
||||
com.android:signflinger:7.4.2
|
||||
com.android:signflinger:8.1.1
|
||||
com.android:zipflinger:4.1.0
|
||||
com.android:zipflinger:7.0.4
|
||||
com.android:zipflinger:7.2.1
|
||||
com.android:zipflinger:7.3.1
|
||||
com.android:zipflinger:7.4.2
|
||||
com.android:zipflinger:8.1.1
|
||||
com.diffplug.durian:durian-collect:1.2.0
|
||||
com.diffplug.durian:durian-core:1.2.0
|
||||
@@ -511,6 +565,7 @@ com.github.status-im:function:0.0.1
|
||||
com.github.wix-playground:ahbottomnavigation:3.3.0
|
||||
com.github.wix-playground:reflow-animator:1.0.6
|
||||
com.github.yalantis:ucrop:2.2.6-native
|
||||
com.github.zacharee:AndroidPdfViewer:4.0.1
|
||||
com.googlecode.concurrent-trees:concurrent-trees:2.6.1
|
||||
com.googlecode.javaewah:JavaEWAH:1.1.12
|
||||
com.googlecode.javaewah:JavaEWAH:1.1.13
|
||||
@@ -532,6 +587,7 @@ com.google.code.gson:gson:2.8.0
|
||||
com.google.code.gson:gson:2.8.5
|
||||
com.google.code.gson:gson:2.8.6
|
||||
com.google.code.gson:gson:2.8.9
|
||||
com.google.code.gson:gson:2.9.1
|
||||
com.google.crypto.tink:tink:1.3.0-rc2
|
||||
com.google.crypto.tink:tink:1.7.0
|
||||
com.google.dagger:dagger:2.28.3
|
||||
@@ -541,6 +597,7 @@ com.google.errorprone:error_prone_annotations:2.3.1
|
||||
com.google.errorprone:error_prone_annotations:2.3.2
|
||||
com.google.errorprone:error_prone_annotations:2.3.4
|
||||
com.google.errorprone:error_prone_annotations:2.4.0
|
||||
com.google.errorprone:error_prone_annotations:2.7.1
|
||||
com.google.errorprone:error_prone_annotations:2.9.0
|
||||
com.google.errorprone:error_prone_annotations:2.11.0
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0
|
||||
@@ -552,6 +609,7 @@ com.google.guava:guava:27.0.1-jre
|
||||
com.google.guava:guava:28.1-jre
|
||||
com.google.guava:guava:29.0-jre
|
||||
com.google.guava:guava:30.1-jre
|
||||
com.google.guava:guava:31.0.1-jre
|
||||
com.google.guava:guava:31.1-jre
|
||||
com.google.guava:listenablefuture:1.0
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|
||||
@@ -568,9 +626,14 @@ com.google.protobuf:protobuf-java:3.4.0
|
||||
com.google.protobuf:protobuf-java:3.10.0
|
||||
com.google.protobuf:protobuf-java:3.17.2
|
||||
com.google.protobuf:protobuf-java:3.19.3
|
||||
com.google.testing.platform:android-device-provider-local:0.0.8-alpha08
|
||||
com.google.testing.platform:android-driver-instrumentation:0.0.8-alpha08
|
||||
com.google.testing.platform:android-test-plugin:0.0.8-alpha08
|
||||
com.google.testing.platform:core-proto:0.0.8-alpha04
|
||||
com.google.testing.platform:core-proto:0.0.8-alpha07
|
||||
com.google.testing.platform:core-proto:0.0.8-alpha08
|
||||
com.google.testing.platform:core:0.0.8-alpha08
|
||||
com.google.testing.platform:launcher:0.0.8-alpha08
|
||||
com.google.test.platform:core-proto:0.0.2-dev
|
||||
com.google.zxing:core:3.4.1
|
||||
com.ibm.icu:icu4j:53.1
|
||||
@@ -620,6 +683,7 @@ io.grpc:grpc-protobuf:1.45.1
|
||||
io.grpc:grpc-stub:1.21.1
|
||||
io.grpc:grpc-stub:1.39.0
|
||||
io.grpc:grpc-stub:1.45.1
|
||||
io.legere:pdfiumandroid:1.0.19
|
||||
io.netty:netty-buffer:4.1.34.Final
|
||||
io.netty:netty-buffer:4.1.52.Final
|
||||
io.netty:netty-buffer:4.1.72.Final
|
||||
@@ -742,6 +806,8 @@ org.glassfish.jaxb:jaxb-runtime:2.3.2
|
||||
org.glassfish.jaxb:txw2:2.2.11
|
||||
org.glassfish.jaxb:txw2:2.3.1
|
||||
org.glassfish.jaxb:txw2:2.3.2
|
||||
org.gradle.toolchains:foojay-resolver:0.5.0
|
||||
org.gradle:github-dependency-graph-gradle-plugin:1.3.1
|
||||
org.hamcrest:hamcrest-core:1.3
|
||||
org.hamcrest:hamcrest:2.2
|
||||
org.jacoco:org.jacoco.core:0.7.4.201502262128
|
||||
@@ -753,43 +819,66 @@ org.jetbrains.intellij.deps:trove4j:1.0.20200330
|
||||
org.jetbrains.kotlinx:atomicfu:0.16.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-annotations-jvm:1.3.72
|
||||
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.1.3-2
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.2.0
|
||||
@@ -798,15 +887,21 @@ org.jetbrains.kotlin:kotlin-reflect:1.3.72
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.4.32
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.5.31
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.7.10
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.8.20-RC2
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.2.71
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
|
||||
@@ -814,15 +909,20 @@ org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20-RC2
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.21
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.71
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.31
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.10
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20-RC2
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.21
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0
|
||||
@@ -831,6 +931,8 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20-RC2
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0
|
||||
@@ -841,17 +943,24 @@ org.jetbrains.kotlin:kotlin-stdlib:1.3.72
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.4.32
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.5.31
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.7.10
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.20-RC2
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.21
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.22
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-tooling-metadata:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.0
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.6.20
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.8.0
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.0
|
||||
org.jetbrains.trove4j:trove4j:20160824
|
||||
org.jetbrains:annotations:13.0
|
||||
org.jetbrains:annotations:23.0.0
|
||||
org.jetbrains:markdown-jvm:0.2.1
|
||||
org.jetbrains:markdown:0.2.1
|
||||
org.json:json:20180813
|
||||
@@ -909,20 +1018,8 @@ org.tensorflow:tensorflow-lite-metadata:0.1.0-rc1
|
||||
org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2
|
||||
xerces:xercesImpl:2.12.0
|
||||
xml-apis:xml-apis:1.4.01
|
||||
com.android.tools.build:gradle:1.3.1
|
||||
com.squareup.okio:okio:1.13.0
|
||||
com.squareup.okio:okio:1.15.0
|
||||
com.squareup.okhttp3:okhttp:3.12.1
|
||||
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.7.22
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2
|
||||
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.9.0
|
||||
org.gradle.toolchains.foojay-resolver-convention:org.gradle.toolchains.foojay-resolver-convention.gradle.plugin:0.5.0
|
||||
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.8.0
|
||||
com.android.tools.build:gradle:8.1.1
|
||||
com.google.errorprone:error_prone_annotations:2.7.1
|
||||
com.android.tools.lint:lint-gradle:31.1.1
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0
|
||||
com.android.tools.build:gradle:3.5.4
|
||||
androidx.annotation:annotation:1.6.0
|
||||
androidx.annotation:annotation-jvm:1.6.0
|
||||
com.android.tools.lint:lint-gradle:31.1.1
|
||||
com.facebook.react:hermes-android:0.73.5
|
||||
+116
-66
@@ -52,6 +52,7 @@ https://dl.google.com/dl/android/maven2/androidx/core/core-ktx/1.2.0/core-ktx-1.
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core-ktx/1.6.0/core-ktx-1.6.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core-ktx/1.8.0/core-ktx-1.8.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core-ktx/1.9.0/core-ktx-1.9.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core-ktx/1.12.0/core-ktx-1.12.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core-splashscreen/1.0.0/core-splashscreen-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.0.0/core-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.0.1/core-1.0.1.pom
|
||||
@@ -65,6 +66,7 @@ https://dl.google.com/dl/android/maven2/androidx/core/core/1.5.0/core-1.5.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.6.0/core-1.6.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.8.0/core-1.8.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.9.0/core-1.9.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.12.0/core-1.12.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapter/1.0.0/cursoradapter-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/customview/customview/1.0.0/customview-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.2.1/databinding-common-3.2.1.pom
|
||||
@@ -74,6 +76,7 @@ https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.0.4/databinding-common-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.2.1/databinding-common-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.3.1/databinding-common-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.4.2/databinding-common-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/8.1.1/databinding-common-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.2.1/databinding-compiler-common-3.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.5.3/databinding-compiler-common-3.5.3.pom
|
||||
@@ -82,6 +85,7 @@ https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compile
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/7.0.4/databinding-compiler-common-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/7.2.1/databinding-compiler-common-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/7.3.1/databinding-compiler-common-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/7.4.2/databinding-compiler-common-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/8.1.1/databinding-compiler-common-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/documentfile/documentfile/1.0.0/documentfile-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/drawerlayout/drawerlayout/1.0.0/drawerlayout-1.0.0.pom
|
||||
@@ -188,12 +192,14 @@ https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/4.1.
|
||||
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/7.0.4/baseLibrary-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/7.2.1/baseLibrary-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/7.3.1/baseLibrary-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/7.4.2/baseLibrary-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/8.1.1/baseLibrary-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCommon/3.0.1/compilerCommon-3.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/signflinger/4.1.0/signflinger-4.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/signflinger/7.0.4/signflinger-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/signflinger/7.2.1/signflinger-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/signflinger/7.3.1/signflinger-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/signflinger/7.4.2/signflinger-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/signflinger/8.1.1/signflinger-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-drawable/26.0.2/animated-vector-drawable-26.0.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-drawable/27.0.1/animated-vector-drawable-27.0.1.pom
|
||||
@@ -222,6 +228,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/cras
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/30.0.4/crash-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/30.2.1/crash-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/30.3.1/crash-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/30.4.2/crash-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/31.1.1/crash-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.0.1/protos-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.2.1/protos-26.2.1.pom
|
||||
@@ -231,6 +238,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/prot
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/30.0.4/protos-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/30.2.1/protos-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/30.3.1/protos-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/30.4.2/protos-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/31.1.1/protos-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.0.1/shared-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.2.1/shared-26.2.1.pom
|
||||
@@ -240,6 +248,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shar
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/30.0.4/shared-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/30.2.1/shared-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/30.3.1/shared-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/30.4.2/shared-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/31.1.1/shared-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.0.1/tracker-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.2.1/tracker-26.2.1.pom
|
||||
@@ -249,6 +258,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/trac
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/30.0.4/tracker-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/30.2.1/tracker-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/30.3.1/tracker-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/30.4.2/tracker-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/31.1.1/tracker-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.1/annotations-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.2.1/annotations-26.2.1.pom
|
||||
@@ -258,6 +268,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/annotations/27.1.0/ann
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/30.0.4/annotations-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/30.2.1/annotations-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/30.3.1/annotations-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/30.4.2/annotations-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/31.1.1/annotations-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/0.3.1/aapt2-proto-0.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/0.4.0/aapt2-proto-0.4.0.pom
|
||||
@@ -268,12 +279,14 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/7.0.
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/7.2.1-7984345/aapt2-proto-7.2.1-7984345.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/7.3.0-alpha07-8248216/aapt2-proto-7.3.0-alpha07-8248216.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/7.3.1-8691043/aapt2-proto-7.3.1-8691043.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/7.4.2-8841542/aapt2-proto-7.4.2-8841542.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/8.1.1-10154469/aapt2-proto-8.1.1-10154469.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/8.1.1-10154469/aapt2-8.1.1-10154469.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aaptcompiler/4.1.0/aaptcompiler-4.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aaptcompiler/7.0.4/aaptcompiler-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aaptcompiler/7.2.1/aaptcompiler-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aaptcompiler/7.3.1/aaptcompiler-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aaptcompiler/7.4.2/aaptcompiler-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/aaptcompiler/8.1.1/aaptcompiler-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.1/apksig-3.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.2.1/apksig-3.2.1.pom
|
||||
@@ -283,6 +296,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/4.1.0/apk
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.0.4/apksig-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.2.1/apksig-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.3.1/apksig-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.4.2/apksig-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/8.1.1/apksig-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.2.1/apkzlib-3.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.5.3/apkzlib-3.5.3.pom
|
||||
@@ -291,6 +305,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/4.1.0/ap
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.0.4/apkzlib-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.2.1/apkzlib-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.3.1/apkzlib-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.4.2/apkzlib-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/8.1.1/apkzlib-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.0.1/builder-model-3.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.2.1/builder-model-3.2.1.pom
|
||||
@@ -300,6 +315,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/4.
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7.0.4/builder-model-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7.2.1/builder-model-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7.3.1/builder-model-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7.4.2/builder-model-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/8.1.1/builder-model-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.0.1/builder-test-api-3.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.2.1/builder-test-api-3.2.1.pom
|
||||
@@ -309,6 +325,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/7.0.4/builder-test-api-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/7.2.1/builder-test-api-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/7.3.1/builder-test-api-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/7.4.2/builder-test-api-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/8.1.1/builder-test-api-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.1/builder-3.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.2.1/builder-3.2.1.pom
|
||||
@@ -318,6 +335,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/4.1.0/bu
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.0.4/builder-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.2.1/builder-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.3.1/builder-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.4.2/builder-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/8.1.1/builder-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.5.0/bundletool-0.5.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.9.0/bundletool-0.9.0.pom
|
||||
@@ -325,6 +343,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.14.
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.6.0/bundletool-1.6.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.8.2/bundletool-1.8.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.9.0/bundletool-1.9.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.11.4/bundletool-1.11.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.14.0/bundletool-1.14.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.0.1/gradle-api-3.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.2.1/gradle-api-3.2.1.pom
|
||||
@@ -334,8 +353,10 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/4.1.0
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/7.0.4/gradle-api-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/7.2.1/gradle-api-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/7.3.1/gradle-api-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/7.4.2/gradle-api-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/8.1.1/gradle-api-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core/3.0.1/gradle-core-3.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-settings-api/7.4.2/gradle-settings-api-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-settings-api/8.1.1/gradle-settings-api-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.1/gradle-3.2.1.pom
|
||||
@@ -345,6 +366,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/4.1.0/gra
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.0.4/gradle-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.2.1/gradle-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.3.1/gradle-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.4.2/gradle-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/8.1.1/gradle-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-alpha10/jetifier-core-1.0.0-alpha10.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04.pom
|
||||
@@ -362,6 +384,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/30.0.4/manifest-merger-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/30.2.1/manifest-merger-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/30.3.1/manifest-merger-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/30.4.2/manifest-merger-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/31.1.1/manifest-merger-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/common-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.2.1/common-26.2.1.pom
|
||||
@@ -371,6 +394,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/common/27.1.0/common-2
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/common/30.0.4/common-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/common/30.2.1/common-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/common/30.3.1/common-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/common/30.4.2/common-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/common/31.1.1/common-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.1/ddmlib-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1.pom
|
||||
@@ -380,6 +404,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/27.1.0/ddm
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.0.4/ddmlib-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.2.1/ddmlib-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.3.1/ddmlib-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.4.2/ddmlib-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/31.1.1/ddmlib-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvlib-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.pom
|
||||
@@ -389,7 +414,9 @@ https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/27.1.0/dvlib-27.
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/30.0.4/dvlib-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/30.2.1/dvlib-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/30.3.1/dvlib-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/30.4.2/dvlib-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/31.1.1/dvlib-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/emulator/proto/31.1.1/proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/external/com-intellij/intellij-core/26.0.1/intellij-core-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/external/com-intellij/intellij-core/31.1.1/intellij-core-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/external/com-intellij/kotlin-compiler/31.1.1/kotlin-compiler-31.1.1.pom
|
||||
@@ -403,6 +430,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-ap
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.0.4/layoutlib-api-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.2.1/layoutlib-api-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.3.1/layoutlib-api-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.4.2/layoutlib-api-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/31.1.1/layoutlib-api-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.0.1/lint-api-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/31.1.1/lint-api-31.1.1.pom
|
||||
@@ -417,9 +445,11 @@ https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-model/27.1.0
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-model/30.0.4/lint-model-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-model/30.2.1/lint-model-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-model/30.3.1/lint-model-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-model/30.4.2/lint-model-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-model/31.1.1/lint-model-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-typedef-remover/30.2.1/lint-typedef-remover-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-typedef-remover/30.3.1/lint-typedef-remover-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-typedef-remover/30.4.2/lint-typedef-remover-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-typedef-remover/31.1.1/lint-typedef-remover-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.0.1/lint-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/31.1.1/lint-31.1.1.pom
|
||||
@@ -432,6 +462,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/repository/27.1.0/repo
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.0.4/repository-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.2.1/repository-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.3.1/repository-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.4.2/repository-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/repository/31.1.1/repository-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdklib-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.pom
|
||||
@@ -441,6 +472,7 @@ https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/27.1.0/sdklib-2
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.0.4/sdklib-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.2.1/sdklib-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.3.1/sdklib-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.4.2/sdklib-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/31.1.1/sdklib-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1/sdk-common-26.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.2.1/sdk-common-26.2.1.pom
|
||||
@@ -450,42 +482,66 @@ https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/27.1.0/sdk-
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/30.0.4/sdk-common-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/30.2.1/sdk-common-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/30.3.1/sdk-common-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/30.4.2/sdk-common-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/31.1.1/sdk-common-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-ddmlib-proto/30.2.1/android-device-provider-ddmlib-proto-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-ddmlib-proto/30.3.1/android-device-provider-ddmlib-proto-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-ddmlib-proto/30.4.2/android-device-provider-ddmlib-proto-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-ddmlib-proto/31.1.1/android-device-provider-ddmlib-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-ddmlib/31.1.1/android-device-provider-ddmlib-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-gradle-proto/30.0.4/android-device-provider-gradle-proto-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-gradle-proto/30.2.1/android-device-provider-gradle-proto-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-gradle-proto/30.3.1/android-device-provider-gradle-proto-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-gradle-proto/30.4.2/android-device-provider-gradle-proto-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-gradle-proto/31.1.1/android-device-provider-gradle-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-device-provider-gradle/31.1.1/android-device-provider-gradle-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-additional-test-output-proto/30.2.1/android-test-plugin-host-additional-test-output-proto-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-additional-test-output-proto/30.3.1/android-test-plugin-host-additional-test-output-proto-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-additional-test-output-proto/30.4.2/android-test-plugin-host-additional-test-output-proto-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-additional-test-output-proto/31.1.1/android-test-plugin-host-additional-test-output-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-additional-test-output/31.1.1/android-test-plugin-host-additional-test-output-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-apk-installer-proto/31.1.1/android-test-plugin-host-apk-installer-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-apk-installer/31.1.1/android-test-plugin-host-apk-installer-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-coverage-proto/30.2.1/android-test-plugin-host-coverage-proto-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-coverage-proto/30.3.1/android-test-plugin-host-coverage-proto-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-coverage-proto/30.4.2/android-test-plugin-host-coverage-proto-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-coverage-proto/31.1.1/android-test-plugin-host-coverage-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-coverage/31.1.1/android-test-plugin-host-coverage-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-device-info-proto/31.1.1/android-test-plugin-host-device-info-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-device-info/31.1.1/android-test-plugin-host-device-info-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-emulator-control-proto/31.1.1/android-test-plugin-host-emulator-control-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-emulator-control/31.1.1/android-test-plugin-host-emulator-control-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-logcat-proto/31.1.1/android-test-plugin-host-logcat-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-logcat/31.1.1/android-test-plugin-host-logcat-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-retention-proto/30.0.4/android-test-plugin-host-retention-proto-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-retention-proto/30.2.1/android-test-plugin-host-retention-proto-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-retention-proto/30.3.1/android-test-plugin-host-retention-proto-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-retention-proto/30.4.2/android-test-plugin-host-retention-proto-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-retention-proto/31.1.1/android-test-plugin-host-retention-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-host-retention/31.1.1/android-test-plugin-host-retention-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-result-listener-gradle-proto/30.0.4/android-test-plugin-result-listener-gradle-proto-30.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-result-listener-gradle-proto/30.2.1/android-test-plugin-result-listener-gradle-proto-30.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-result-listener-gradle-proto/30.3.1/android-test-plugin-result-listener-gradle-proto-30.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-result-listener-gradle-proto/30.4.2/android-test-plugin-result-listener-gradle-proto-30.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-result-listener-gradle-proto/31.1.1/android-test-plugin-result-listener-gradle-proto-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/tools/utp/android-test-plugin-result-listener-gradle/31.1.1/android-test-plugin-result-listener-gradle-31.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/zipflinger/4.1.0/zipflinger-4.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/zipflinger/7.0.4/zipflinger-7.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/zipflinger/7.2.1/zipflinger-7.2.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/zipflinger/7.3.1/zipflinger-7.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/zipflinger/7.4.2/zipflinger-7.4.2.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/zipflinger/8.1.1/zipflinger-8.1.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.0.0/material-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.2.0-alpha03/material-1.2.0-alpha03.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/prefab/cli/2.0.0/cli-2.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/testing/platform/android-device-provider-local/0.0.8-alpha08/android-device-provider-local-0.0.8-alpha08.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/testing/platform/android-driver-instrumentation/0.0.8-alpha08/android-driver-instrumentation-0.0.8-alpha08.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/testing/platform/android-test-plugin/0.0.8-alpha08/android-test-plugin-0.0.8-alpha08.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/testing/platform/core-proto/0.0.8-alpha04/core-proto-0.0.8-alpha04.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/testing/platform/core-proto/0.0.8-alpha07/core-proto-0.0.8-alpha07.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/testing/platform/core-proto/0.0.8-alpha08/core-proto-0.0.8-alpha08.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/testing/platform/core/0.0.8-alpha08/core-0.0.8-alpha08.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/testing/platform/launcher/0.0.8-alpha08/launcher-0.0.8-alpha08.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/test/platform/core-proto/0.0.2-dev/core-proto-0.0.2-dev.pom
|
||||
https://jitpack.io/com/github/Dimezis/BlurView/version-2.0.4/BlurView-version-2.0.4.pom
|
||||
https://jitpack.io/com/github/status-im/function/0.0.1/function-0.0.1.pom
|
||||
@@ -494,7 +550,9 @@ https://jitpack.io/com/github/status-im/status-keycard-java/lib/3.1.1/lib-3.1.1.
|
||||
https://jitpack.io/com/github/wix-playground/ahbottomnavigation/3.3.0/ahbottomnavigation-3.3.0.pom
|
||||
https://jitpack.io/com/github/wix-playground/reflow-animator/1.0.6/reflow-animator-1.0.6.pom
|
||||
https://jitpack.io/com/github/yalantis/ucrop/2.2.6-native/ucrop-2.2.6-native.pom
|
||||
https://jitpack.io/com/github/zacharee/AndroidPdfViewer/4.0.1/AndroidPdfViewer-4.0.1.pom
|
||||
https://plugins.gradle.org/m2/com/adarshr/gradle-test-logger-plugin/2.0.0/gradle-test-logger-plugin-2.0.0.pom
|
||||
https://plugins.gradle.org/m2/org/gradle/github-dependency-graph-gradle-plugin/1.3.1/github-dependency-graph-gradle-plugin-1.3.1.pom
|
||||
https://plugins.gradle.org/m2/org/gradle/toolchains/foojay-resolver-convention/org.gradle.toolchains.foojay-resolver-convention.gradle.plugin/0.5.0/org.gradle.toolchains.foojay-resolver-convention.gradle.plugin-0.5.0.pom
|
||||
https://plugins.gradle.org/m2/org/gradle/toolchains/foojay-resolver/0.5.0/foojay-resolver-0.5.0.pom
|
||||
https://repo.maven.apache.org/maven2/antlr/antlr/2.7.1/antlr-2.7.1.pom
|
||||
@@ -506,7 +564,7 @@ https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.10/commons-co
|
||||
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.11/commons-codec-1.11.pom
|
||||
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.17.1/commons-codec-1.17.1.pom
|
||||
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.pom
|
||||
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.16.1/commons-io-2.16.1.pom
|
||||
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.17.0/commons-io-2.17.0.pom
|
||||
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.pom
|
||||
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.pom
|
||||
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.3.4/commons-logging-1.3.4.pom
|
||||
@@ -609,25 +667,25 @@ https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.10.1/soloa
|
||||
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.10.5/soloader-0.10.5.pom
|
||||
https://repo.maven.apache.org/maven2/com/facebook/yoga/proguard-annotations/1.19.0/proguard-annotations-1.19.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.1/jackson-annotations-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.18.0/jackson-annotations-2.18.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.1/jackson-core-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-core/2.18.0/jackson-core-2.18.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.11.1/jackson-databind-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.18.0/jackson-databind-2.18.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.11.1/jackson-dataformat-xml-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-base/2.11.1/jackson-base-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-base/2.17.2/jackson-base-2.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-base/2.18.0/jackson-base-2.18.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-bom/2.11.1/jackson-bom-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-bom/2.17.2/jackson-bom-2.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-bom/2.18.0/jackson-bom-2.18.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-parent/2.11/jackson-parent-2.11.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-parent/2.17/jackson-parent-2.17.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/jackson-parent/2.18/jackson-parent-2.18.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-modules-base/2.11.1/jackson-modules-base-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-modules-base/2.17.2/jackson-modules-base-2.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-modules-base/2.18.0/jackson-modules-base-2.18.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.11.1/jackson-module-jaxb-annotations-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.17.2/jackson-module-jaxb-annotations-2.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.18.0/jackson-module-jaxb-annotations-2.18.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-module-kotlin/2.11.1/jackson-module-kotlin-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/oss-parent/38/oss-parent-38.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/oss-parent/58/oss-parent-58.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/oss-parent/61/oss-parent-61.pom
|
||||
https://repo.maven.apache.org/maven2/com/fasterxml/woodstox/woodstox-core/6.2.1/woodstox-core-6.2.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/annotations/4.12.0/annotations-4.12.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/compiler/4.12.0/compiler-4.12.0.pom
|
||||
@@ -693,7 +751,7 @@ https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotatio
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.27.0/error_prone_annotations-2.27.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.31.0/error_prone_annotations-2.31.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.35.1/error_prone_annotations-2.35.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.18/error_prone_parent-2.0.18.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1.pom
|
||||
@@ -706,7 +764,7 @@ https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.10.0/error_prone_parent-2.10.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.11.0/error_prone_parent-2.11.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.27.0/error_prone_parent-2.27.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.31.0/error_prone_parent-2.31.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.35.1/error_prone_parent-2.35.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/flatbuffers/flatbuffers-java/1.12.0/flatbuffers-java-1.12.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom
|
||||
@@ -723,8 +781,8 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/30.1-jre/guav
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/31.0.1-android/guava-parent-31.0.1-android.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/31.0.1-jre/guava-parent-31.0.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/31.1-jre/guava-parent-31.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/33.3.0-jre/guava-parent-33.3.0-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/33.3.0-jre/guava-testlib-33.3.0-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/33.3.1-jre/guava-parent-33.3.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/33.3.1-jre/guava-testlib-33.3.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/17.0/guava-17.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/23.0/guava-23.0.pom
|
||||
@@ -737,7 +795,7 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava/30.1-jre/guava-30.1-
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/31.0.1-android/guava-31.0.1-android.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/31.1-jre/guava-31.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/33.3.0-jre/guava-33.3.0-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/33.3.1-jre/guava-33.3.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/1.0/listenablefuture-1.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.pom
|
||||
@@ -751,7 +809,7 @@ https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/3.13.0/pro
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/3.17.2/protobuf-bom-3.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/3.19.2/protobuf-bom-3.19.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/3.19.3/protobuf-bom-3.19.3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/4.28.0/protobuf-bom-4.28.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/4.29.0-RC2/protobuf-bom-4.29.0-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-javalite/3.17.2/protobuf-javalite-3.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util/3.4.0/protobuf-java-util-3.4.0.pom
|
||||
@@ -768,7 +826,7 @@ https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.13.0/pr
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.17.2/protobuf-java-3.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.19.2/protobuf-java-3.19.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.19.3/protobuf-java-3.19.3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/4.28.0/protobuf-java-4.28.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/4.29.0-RC2/protobuf-java-4.29.0-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-lite/3.0.1/protobuf-lite-3.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.0.0/protobuf-parent-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.4.0/protobuf-parent-3.4.0.pom
|
||||
@@ -779,7 +837,7 @@ https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.13.0/
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.17.2/protobuf-parent-3.17.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.19.2/protobuf-parent-3.19.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.19.3/protobuf-parent-3.19.3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/4.28.0/protobuf-parent-4.28.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/4.29.0-RC2/protobuf-parent-4.29.0-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/truth/truth-parent/1.4.4/truth-parent-1.4.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/truth/truth/1.4.4/truth-1.4.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/zxing/core/3.4.1/core-3.4.1.pom
|
||||
@@ -800,17 +858,13 @@ https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/4.11.0/okhttp-4
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.9.1/parent-3.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.2.0/okio-jvm-3.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.9.0/okio-jvm-3.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.13.0/okio-parent-1.13.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.9.1/okio-jvm-3.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.17.4/okio-parent-1.17.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.13.0/okio-1.13.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.15.0/okio-1.15.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.17.4/okio-1.17.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.8.0/okio-2.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.9.0/okio-2.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.2.0/okio-3.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.9.0/okio-3.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.9.1/okio-3.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.1/all-1.2.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.2/all-1.2.2.pom
|
||||
@@ -877,6 +931,7 @@ https://repo.maven.apache.org/maven2/io/grpc/grpc-protobuf/1.45.1/grpc-protobuf-
|
||||
https://repo.maven.apache.org/maven2/io/grpc/grpc-stub/1.21.1/grpc-stub-1.21.1.pom
|
||||
https://repo.maven.apache.org/maven2/io/grpc/grpc-stub/1.39.0/grpc-stub-1.39.0.pom
|
||||
https://repo.maven.apache.org/maven2/io/grpc/grpc-stub/1.45.1/grpc-stub-1.45.1.pom
|
||||
https://repo.maven.apache.org/maven2/io/legere/pdfiumandroid/1.0.19/pdfiumandroid-1.0.19.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-buffer/4.1.34.Final/netty-buffer-4.1.34.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-buffer/4.1.52.Final/netty-buffer-4.1.52.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-buffer/4.1.72.Final/netty-buffer-4.1.72.Final.pom
|
||||
@@ -942,6 +997,7 @@ https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.
|
||||
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api-parent/2.3.1/jaxb-api-parent-2.3.1.pom
|
||||
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api-parent/2.4.0-b180830.0359/jaxb-api-parent-2.4.0-b180830.0359.pom
|
||||
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jaxb-api-2.2.12-b140109.1041.pom
|
||||
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.2.12/jaxb-api-2.2.12.pom
|
||||
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.pom
|
||||
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.4.0-b180830.0359/jaxb-api-2.4.0-b180830.0359.pom
|
||||
https://repo.maven.apache.org/maven2/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.pom
|
||||
@@ -950,15 +1006,15 @@ https://repo.maven.apache.org/maven2/junit/junit/4.13.2/junit-4.13.2.pom
|
||||
https://repo.maven.apache.org/maven2/me/zhanghai/android/materialprogressbar/library/1.4.2/library-1.4.2.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.13/byte-buddy-agent-1.11.13.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.19/byte-buddy-agent-1.11.19.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.15.0/byte-buddy-agent-1.15.0.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.15.4/byte-buddy-agent-1.15.4.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.13/byte-buddy-parent-1.11.13.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.19/byte-buddy-parent-1.11.19.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.14.18/byte-buddy-parent-1.14.18.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.15.0/byte-buddy-parent-1.15.0.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.15.4/byte-buddy-parent-1.15.4.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.13/byte-buddy-1.11.13.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.19/byte-buddy-1.11.19.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.14.18/byte-buddy-1.14.18.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.15.0/byte-buddy-1.15.0.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.15.4/byte-buddy-1.15.4.pom
|
||||
https://repo.maven.apache.org/maven2/net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/net/java/dev/jna/jna/5.6.0/jna-5.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1.pom
|
||||
@@ -1002,7 +1058,6 @@ https://repo.maven.apache.org/maven2/org/apache/apache/16/apache-16.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/apache/18/apache-18.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/apache/21/apache-21.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/apache/23/apache-23.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/apache/31/apache-31.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/apache/32/apache-32.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/apache/33/apache-33.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.pom
|
||||
@@ -1023,9 +1078,9 @@ https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/39/common
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/42/commons-parent-42.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/48/commons-parent-48.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/52/commons-parent-52.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/69/commons-parent-69.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/71/commons-parent-71.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/72/commons-parent-72.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/74/commons-parent-74.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/httpclient-4.2.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2.pom
|
||||
@@ -1080,7 +1135,7 @@ https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.8.1/che
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.46.0/checker-qual-3.46.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.48.1/checker-qual-3.48.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.pom
|
||||
https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-xml/3.0.9/groovy-xml-3.0.9.pom
|
||||
https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-xml/3.0.10/groovy-xml-3.0.10.pom
|
||||
@@ -1146,6 +1201,7 @@ https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.8.12/org.jacoc
|
||||
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262128/org.jacoco.report-0.7.4.201502262128.pom
|
||||
https://repo.maven.apache.org/maven2/org/jdom/jdom2/2.0.6/jdom2-2.0.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/annotations/23.0.0/annotations-23.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/dokka/dokka-core/1.4.32/dokka-core-1.4.32.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20200330/trove4j-1.0.20200330.pom
|
||||
@@ -1153,79 +1209,70 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/atomicfu-jvm/0.16.3/a
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/atomicfu/0.16.3/atomicfu-0.16.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-android/1.5.2/kotlinx-coroutines-android-1.5.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-android/1.6.1/kotlinx-coroutines-android-1.6.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-android/1.7.3/kotlinx-coroutines-android-1.7.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-bom/1.6.1/kotlinx-coroutines-bom-1.6.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-bom/1.6.3/kotlinx-coroutines-bom-1.6.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-bom/1.7.3/kotlinx-coroutines-bom-1.7.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.4.1/kotlinx-coroutines-core-jvm-1.4.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.5.0/kotlinx-coroutines-core-jvm-1.5.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.5.2/kotlinx-coroutines-core-jvm-1.5.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.6.1/kotlinx-coroutines-core-jvm-1.6.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.6.3/kotlinx-coroutines-core-jvm-1.6.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.7.3/kotlinx-coroutines-core-jvm-1.7.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.4.1/kotlinx-coroutines-core-1.4.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.5.2/kotlinx-coroutines-core-1.5.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.6.1/kotlinx-coroutines-core-1.6.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.6.3/kotlinx-coroutines-core-1.6.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.7.3/kotlinx-coroutines-core-1.7.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.1.0/kotlinx-metadata-jvm-0.1.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/1.7.22/org.jetbrains.kotlin.jvm.gradle.plugin-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/1.8.0/org.jetbrains.kotlin.jvm.gradle.plugin-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/1.9.0/org.jetbrains.kotlin.jvm.gradle.plugin-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-android-extensions/1.6.20/kotlin-android-extensions-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-android-extensions/1.7.22/kotlin-android-extensions-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-android-extensions/1.8.0/kotlin-android-extensions-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-android-extensions/1.9.0/kotlin-android-extensions-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-annotations-jvm/1.3.72/kotlin-annotations-jvm-1.3.72.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-annotation-processing-gradle/1.6.20/kotlin-annotation-processing-gradle-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-annotation-processing-gradle/1.7.22/kotlin-annotation-processing-gradle-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-annotation-processing-gradle/1.8.0/kotlin-annotation-processing-gradle-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-build-common/1.6.20/kotlin-build-common-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-build-common/1.7.22/kotlin-build-common-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-build-common/1.8.0/kotlin-build-common-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-build-common/1.9.0/kotlin-build-common-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-build-tools-api/1.9.0/kotlin-build-tools-api-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-build-tools-impl/1.9.0/kotlin-build-tools-impl-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.6.20/kotlin-compiler-embeddable-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.7.22/kotlin-compiler-embeddable-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.8.0/kotlin-compiler-embeddable-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.9.0/kotlin-compiler-embeddable-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-runner/1.6.20/kotlin-compiler-runner-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-runner/1.7.22/kotlin-compiler-runner-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-runner/1.8.0/kotlin-compiler-runner-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-runner/1.9.0/kotlin-compiler-runner-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-client/1.6.20/kotlin-daemon-client-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-client/1.7.22/kotlin-daemon-client-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-client/1.8.0/kotlin-daemon-client-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-client/1.9.0/kotlin-daemon-client-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.6.20/kotlin-daemon-embeddable-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.7.22/kotlin-daemon-embeddable-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.8.0/kotlin-daemon-embeddable-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.9.0/kotlin-daemon-embeddable-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugins-bom/1.9.0/kotlin-gradle-plugins-bom-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-annotations/1.9.0/kotlin-gradle-plugin-annotations-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1.6.20/kotlin-gradle-plugin-api-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1.7.22/kotlin-gradle-plugin-api-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1.8.0/kotlin-gradle-plugin-api-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1.9.0/kotlin-gradle-plugin-api-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-idea-proto/1.7.22/kotlin-gradle-plugin-idea-proto-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-idea-proto/1.8.0/kotlin-gradle-plugin-idea-proto-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-idea-proto/1.9.0/kotlin-gradle-plugin-idea-proto-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-idea/1.7.22/kotlin-gradle-plugin-idea-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-idea/1.8.0/kotlin-gradle-plugin-idea-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-idea/1.9.0/kotlin-gradle-plugin-idea-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-model/1.6.20/kotlin-gradle-plugin-model-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-model/1.7.22/kotlin-gradle-plugin-model-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-model/1.8.0/kotlin-gradle-plugin-model-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-model/1.9.0/kotlin-gradle-plugin-model-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.6.20/kotlin-gradle-plugin-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.7.22/kotlin-gradle-plugin-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.8.0/kotlin-gradle-plugin-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.9.0/kotlin-gradle-plugin-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-klib-commonizer-api/1.6.20/kotlin-klib-commonizer-api-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-klib-commonizer-api/1.7.22/kotlin-klib-commonizer-api-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-klib-commonizer-api/1.8.0/kotlin-klib-commonizer-api-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-klib-commonizer-api/1.9.0/kotlin-klib-commonizer-api-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-klib-commonizer-embeddable/1.8.0/kotlin-klib-commonizer-embeddable-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-klib-commonizer-embeddable/1.9.0/kotlin-klib-commonizer-embeddable-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-native-utils/1.6.20/kotlin-native-utils-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-native-utils/1.7.22/kotlin-native-utils-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-native-utils/1.8.0/kotlin-native-utils-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-native-utils/1.9.0/kotlin-native-utils-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1.6.20/kotlin-project-model-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1.7.22/kotlin-project-model-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1.8.0/kotlin-project-model-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1.9.0/kotlin-project-model-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/kotlin-reflect-1.1.3-2.pom
|
||||
@@ -1236,27 +1283,22 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.32/
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.5.31/kotlin-reflect-1.5.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.6.10/kotlin-reflect-1.6.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.6.20/kotlin-reflect-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.7.22/kotlin-reflect-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.7.10/kotlin-reflect-1.7.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.8.20-RC2/kotlin-reflect-1.8.20-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/2.0.20/kotlin-reflect-2.0.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/2.1.0-Beta2/kotlin-reflect-2.1.0-Beta2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.6.20/kotlin-scripting-common-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.7.22/kotlin-scripting-common-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.8.0/kotlin-scripting-common-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.9.0/kotlin-scripting-common-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/1.6.20/kotlin-scripting-compiler-embeddable-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/1.7.22/kotlin-scripting-compiler-embeddable-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/1.8.0/kotlin-scripting-compiler-embeddable-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/1.9.0/kotlin-scripting-compiler-embeddable-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-impl-embeddable/1.6.20/kotlin-scripting-compiler-impl-embeddable-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-impl-embeddable/1.7.22/kotlin-scripting-compiler-impl-embeddable-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-impl-embeddable/1.8.0/kotlin-scripting-compiler-impl-embeddable-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-impl-embeddable/1.9.0/kotlin-scripting-compiler-impl-embeddable-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-jvm/1.6.20/kotlin-scripting-jvm-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-jvm/1.7.22/kotlin-scripting-jvm-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-jvm/1.8.0/kotlin-scripting-jvm-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-jvm/1.9.0/kotlin-scripting-jvm-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.6.20/kotlin-script-runtime-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.7.22/kotlin-script-runtime-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.8.0/kotlin-script-runtime-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.9.0/kotlin-script-runtime-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.71/kotlin-stdlib-common-1.2.71.pom
|
||||
@@ -1279,11 +1321,13 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.6.20/kotlin-stdlib-common-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.6.21/kotlin-stdlib-common-1.6.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.10/kotlin-stdlib-common-1.7.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.22/kotlin-stdlib-common-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.0/kotlin-stdlib-common-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.20-RC2/kotlin-stdlib-common-1.8.20-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.20/kotlin-stdlib-common-1.8.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.21/kotlin-stdlib-common-1.8.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.8.22/kotlin-stdlib-common-1.8.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.0/kotlin-stdlib-common-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.22/kotlin-stdlib-common-1.9.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50/kotlin-stdlib-jdk7-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.72/kotlin-stdlib-jdk7-1.3.72.pom
|
||||
@@ -1295,8 +1339,11 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.5
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.0/kotlin-stdlib-jdk7-1.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.10/kotlin-stdlib-jdk7-1.6.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.20/kotlin-stdlib-jdk7-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.21/kotlin-stdlib-jdk7-1.6.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7.10/kotlin-stdlib-jdk7-1.7.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0/kotlin-stdlib-jdk7-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.20-RC2/kotlin-stdlib-jdk7-1.8.20-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.20/kotlin-stdlib-jdk7-1.8.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.21/kotlin-stdlib-jdk7-1.8.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.0/kotlin-stdlib-jdk7-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71.pom
|
||||
@@ -1310,8 +1357,11 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.5
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.0/kotlin-stdlib-jdk8-1.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.10/kotlin-stdlib-jdk8-1.6.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.20/kotlin-stdlib-jdk8-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.21/kotlin-stdlib-jdk8-1.6.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.7.10/kotlin-stdlib-jdk8-1.7.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0/kotlin-stdlib-jdk8-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.20-RC2/kotlin-stdlib-jdk8-1.8.20-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.20/kotlin-stdlib-jdk8-1.8.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.21/kotlin-stdlib-jdk8-1.8.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.9.0/kotlin-stdlib-jdk8-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/kotlin-stdlib-1.1.3-2.pom
|
||||
@@ -1337,23 +1387,22 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.6.10/k
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.6.20/kotlin-stdlib-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.6.21/kotlin-stdlib-1.6.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.7.10/kotlin-stdlib-1.7.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.7.22/kotlin-stdlib-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.8.0/kotlin-stdlib-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.8.20-RC2/kotlin-stdlib-1.8.20-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.8.20/kotlin-stdlib-1.8.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.8.21/kotlin-stdlib-1.8.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.8.22/kotlin-stdlib-1.8.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.9.0/kotlin-stdlib-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.9.21/kotlin-stdlib-1.9.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.0.20/kotlin-stdlib-2.0.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-tooling-core/1.7.22/kotlin-tooling-core-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.9.22/kotlin-stdlib-1.9.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.9.25/kotlin-stdlib-1.9.25.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.1.0-Beta2/kotlin-stdlib-2.1.0-Beta2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-tooling-core/1.8.0/kotlin-tooling-core-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-tooling-core/1.9.0/kotlin-tooling-core-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-tooling-metadata/1.6.20/kotlin-tooling-metadata-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.6.20/kotlin-util-io-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.7.22/kotlin-util-io-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.8.0/kotlin-util-io-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.9.0/kotlin-util-io-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-klib/1.6.20/kotlin-util-klib-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-klib/1.7.22/kotlin-util-klib-1.7.22.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-klib/1.8.0/kotlin-util-klib-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-klib/1.9.0/kotlin-util-klib-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/markdown-jvm/0.2.1/markdown-jvm-0.2.1.pom
|
||||
@@ -1363,14 +1412,14 @@ https://repo.maven.apache.org/maven2/org/json/json/20180813/json-20180813.pom
|
||||
https://repo.maven.apache.org/maven2/org/json/json/20240303/json-20240303.pom
|
||||
https://repo.maven.apache.org/maven2/org/jsoup/jsoup/1.13.1/jsoup-1.13.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jspecify/jspecify/1.0.0/jspecify-1.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.11.0/junit-bom-5.11.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.11.3/junit-bom-5.11.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.pom
|
||||
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/2.1.0/stax-ex-2.1.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/3.12.4/mockito-core-3.12.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/4.0.0/mockito-core-4.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/5.13.0/mockito-core-5.13.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/5.14.2/mockito-core-5.14.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/mockito/mockito-inline/4.0.0/mockito-inline-4.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.2/objenesis-parent-3.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.3/objenesis-parent-3.3.pom
|
||||
@@ -1385,14 +1434,14 @@ https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/7.0/asm-analysis-7
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/8.0.1/asm-analysis-8.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/9.1/asm-analysis-9.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/9.2/asm-analysis-9.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-bom/9.7/asm-bom-9.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-bom/9.7.1/asm-bom-9.7.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/6.0/asm-commons-6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/8.0.1/asm-commons-8.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.1/asm-commons-9.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.2/asm-commons-9.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.7/asm-commons-9.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.7.1/asm-commons-9.7.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-debug-all/5.0.1/asm-debug-all-5.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-debug-all/6.0_BETA/asm-debug-all-6.0_BETA.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.1/asm-parent-5.0.1.pom
|
||||
@@ -1407,7 +1456,7 @@ https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/8.0.1/asm-tree-8.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.1/asm-tree-9.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.2/asm-tree-9.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.7/asm-tree-9.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.7.1/asm-tree-9.7.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/6.0/asm-util-6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/7.0/asm-util-7.0.pom
|
||||
@@ -1421,6 +1470,7 @@ https://repo.maven.apache.org/maven2/org/ow2/asm/asm/7.0/asm-7.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/8.0.1/asm-8.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.1/asm-9.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.2/asm-9.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.7.1/asm-9.7.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.7/asm-9.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/ow2/1.5.1/ow2-1.5.1.pom
|
||||
|
||||
@@ -42,22 +42,10 @@ function gen_deps_list() {
|
||||
# https://github.com/status-im/status-mobile/issues/15447
|
||||
function add_deps_hack() {
|
||||
echo -n \
|
||||
'com.android.tools.build:gradle:1.3.1
|
||||
com.squareup.okio:okio:1.13.0
|
||||
com.squareup.okio:okio:1.15.0
|
||||
com.squareup.okhttp3:okhttp:3.12.1
|
||||
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.7.22
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2
|
||||
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.9.0
|
||||
org.gradle.toolchains.foojay-resolver-convention:org.gradle.toolchains.foojay-resolver-convention.gradle.plugin:0.5.0
|
||||
'org.gradle.toolchains.foojay-resolver-convention:org.gradle.toolchains.foojay-resolver-convention.gradle.plugin:0.5.0
|
||||
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.8.0
|
||||
com.android.tools.build:gradle:8.1.1
|
||||
com.google.errorprone:error_prone_annotations:2.7.1
|
||||
com.android.tools.lint:lint-gradle:31.1.1
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0
|
||||
com.android.tools.build:gradle:3.5.4
|
||||
androidx.annotation:annotation:1.6.0
|
||||
androidx.annotation:annotation-jvm:1.6.0
|
||||
com.android.tools.lint:lint-gradle:31.1.1
|
||||
com.facebook.react:hermes-android:0.73.5' \
|
||||
>> "${DEPS_LIST}"
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
set -Eeuo pipefail
|
||||
|
||||
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
|
||||
GRADLE_REPORTS_DIR="${GIT_ROOT}/android/build/reports/dependency-graph-snapshots"
|
||||
# Gradle needs to be run in 'android' subfolder.
|
||||
cd "${GIT_ROOT}/android"
|
||||
|
||||
@@ -15,23 +16,11 @@ GRADLE_LOG_FILE='/tmp/gradle.log'
|
||||
function show_gradle_log() { cat "${GRADLE_LOG_FILE}" >&2; }
|
||||
trap show_gradle_log ERR
|
||||
|
||||
# Run the gradle command for a project:
|
||||
# - ':buildEnvironment' to get build tools
|
||||
# - ':dependencies' to get direct deps limited those by
|
||||
# implementation config to avoid test dependencies
|
||||
DEPS=("${@}")
|
||||
declare -a BUILD_DEPS
|
||||
declare -a NORMAL_DEPS
|
||||
for i in "${!DEPS[@]}"; do
|
||||
BUILD_DEPS[${i}]="${DEPS[${i}]}:buildEnvironment"
|
||||
NORMAL_DEPS[${i}]="${DEPS[${i}]}:dependencies"
|
||||
done
|
||||
./gradlew -I init.gradle \
|
||||
--dependency-verification=off \
|
||||
--no-configuration-cache --no-configure-on-demand \
|
||||
:ForceDependencyResolutionPlugin_resolveAllDependencies > "${GRADLE_LOG_FILE}" 2>&1
|
||||
|
||||
# And clean up the output using AWK script.
|
||||
AWK_SCRIPT="${GIT_ROOT}/nix/deps/gradle/gradle_parser.awk"
|
||||
|
||||
./gradlew --no-daemon --console plain \
|
||||
"${BUILD_DEPS[@]}" \
|
||||
"${NORMAL_DEPS[@]}" \
|
||||
| tee "${GRADLE_LOG_FILE}" \
|
||||
| awk -f "${AWK_SCRIPT}"
|
||||
# skip org.webkit:android-jsc, its provided by react-native
|
||||
# remove when new architecture is enabled
|
||||
jq -r '.[].dependency | select(startswith("org.webkit:android-jsc") | not)' "${GRADLE_REPORTS_DIR}/dependency-resolution.json"
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
# This script parses the AWFUL Gradle output of :dependencies calls
|
||||
# and outputs just the names of the packages in the Maven format:
|
||||
# <groupId>:<artifactId>:<version>
|
||||
|
||||
function findPackage(line, regex) {
|
||||
rval = match(line, regex, matches)
|
||||
if (rval != 0) {
|
||||
dep = sprintf("%s:%s:%s", matches[1], matches[2], matches[3])
|
||||
if (deps[dep] == nil) {
|
||||
deps[dep] = 1
|
||||
}
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
# Gradle outputs dependencies in groups defined by configurations.
|
||||
# Those configurations are words followed by a dash and a description.
|
||||
# There's also a special 'classpath' configuration we want.
|
||||
/^(classpath|[a-zA-Z0-9]+)( - .*)?$/ {
|
||||
# Ignore configurations starting with 'test'
|
||||
if (tolower($1) ~ /^test/) {
|
||||
next
|
||||
}
|
||||
|
||||
# Lines after configuration name list packages
|
||||
for (getline line; line != ""; getline line) {
|
||||
|
||||
# JavaScript Core (JSC) is provided by node_modules
|
||||
if (line ~ "org.webkit:android-jsc") { continue }
|
||||
|
||||
# Example: +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.50
|
||||
if (findPackage(line, "--- ([^ :]+):([^ :]+):([^ :]+)$")) {
|
||||
continue
|
||||
}
|
||||
|
||||
# Example: +--- androidx.lifecycle:lifecycle-common:{strictly 2.0.0} -> 2.0.0 (c)
|
||||
if (findPackage(line, "--- ([^ :]+):([^ :]+):[^:]+ -> ([^ :]+) ?(\\([*c]\\))?$")) {
|
||||
continue
|
||||
}
|
||||
|
||||
# Example: +--- com.android.support:appcompat-v7:28.0.0 -> androidx.appcompat:appcompat:1.0.2
|
||||
if (findPackage(line, "--- [^ :]+:[^ :]+:[^ ]+ -> ([^ :]+):([^ :]+):([^ :]+)$")) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
END{
|
||||
# It's nicer to sort it
|
||||
asorti(deps, sorted)
|
||||
for (i in sorted) {
|
||||
print sorted[i]
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ react-native-lottie-splash-screen
|
||||
react-native-navigation
|
||||
react-native-nfc-manager
|
||||
react-native-orientation-locker
|
||||
react-native-pdf
|
||||
react-native-permissions
|
||||
react-native-reanimated
|
||||
react-native-shake
|
||||
|
||||
+1
-2
@@ -51,13 +51,12 @@ in {
|
||||
};
|
||||
|
||||
# Package version adjustments
|
||||
gradle = super.gradle_8.override { java = super.openjdk17_headless; };
|
||||
nodejs = super.nodejs_20;
|
||||
ruby = super.ruby_3_1;
|
||||
yarn = super.yarn.override { nodejs = super.nodejs_20; };
|
||||
openjdk = super.openjdk17_headless;
|
||||
xcodeWrapper = callPackage ./pkgs/xcodeenv/compose-xcodewrapper.nix { } {
|
||||
versions = ["15.1" "15.2" "15.3" "15.4"];
|
||||
versions = ["15.1" "15.2" "15.3" "15.4" "16.0"];
|
||||
};
|
||||
go = super.go_1_21;
|
||||
clang = super.clang_15;
|
||||
|
||||
+18
-2
@@ -6,8 +6,16 @@ let
|
||||
# For testing local version of nixpkgs
|
||||
#nixpkgsSrc = (import <nixpkgs> { }).lib.cleanSource "/home/jakubgs/work/nixpkgs";
|
||||
|
||||
# We use a commit from the unstable channel of nixpkgs for gradle 8.8
|
||||
# We follow release 24-05 of nixpkgs
|
||||
# https://github.com/NixOS/nixpkgs/releases/tag/24.05
|
||||
nixpkgsSrc = builtins.fetchTarball {
|
||||
url = "https://github.com/NixOS/nixpkgs/archive/df27247e6f3e636c119e2610bf12d38b5e98cc79.tar.gz";
|
||||
sha256 = "sha256:0bbvimk7xb7akrx106mmsiwf9nzxnssisqmqffla03zz51d0kz2n";
|
||||
};
|
||||
|
||||
# FIXME: remove this additional source when nixpkgs includes gradle 8.8 in stable channel
|
||||
# We use a commit from the unstable channel of nixpkgs for gradle 8.8
|
||||
gradleNixpkgsSrc = builtins.fetchTarball {
|
||||
url = "https://github.com/NixOS/nixpkgs/archive/48d567fc7b299de90f70a48e4263e31f690ba03e.tar.gz";
|
||||
sha256 = "sha256:0zynbk52khdfhg4qfv26h3r5156xff5p0cga2cin7b07i7lqminh";
|
||||
};
|
||||
@@ -21,6 +29,14 @@ let
|
||||
# Override some packages and utilities
|
||||
pkgsOverlay = import ./overlay.nix;
|
||||
|
||||
# FIXME: remove this additional source when nixpkgs includes gradle 8.8 in stable channel
|
||||
gradleOverlay = final: prev: {
|
||||
gradle = (import gradleNixpkgsSrc {
|
||||
inherit (prev) system;
|
||||
config = defaultConfig // config;
|
||||
}).gradle_8.override { java = prev.openjdk17_headless; };
|
||||
};
|
||||
|
||||
# Fix for lack of Android SDK for M1 Macs.
|
||||
systemOverride = let
|
||||
inherit (builtins) currentSystem getEnv;
|
||||
@@ -35,5 +51,5 @@ in
|
||||
(import nixpkgsSrc) {
|
||||
config = defaultConfig // config;
|
||||
system = systemOverride;
|
||||
overlays = [ pkgsOverlay ];
|
||||
overlays = [ pkgsOverlay gradleOverlay ];
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{ lib, stdenv, meta, source, buildGoPackage }:
|
||||
{ lib, stdenv, meta, source, buildGoPackage,
|
||||
go-bindata, mockgen, protoc-gen-go, protobuf3_20 }:
|
||||
|
||||
buildGoPackage {
|
||||
pname = source.repo;
|
||||
@@ -7,6 +8,10 @@ buildGoPackage {
|
||||
inherit meta;
|
||||
inherit (source) src goPackagePath;
|
||||
|
||||
nativeBuildInputs = [
|
||||
go-bindata mockgen protoc-gen-go protobuf3_20
|
||||
];
|
||||
|
||||
phases = ["unpackPhase" "configurePhase" "buildPhase"];
|
||||
|
||||
# https://pkg.go.dev/net#hdr-Name_Resolution
|
||||
@@ -22,6 +27,7 @@ buildGoPackage {
|
||||
preBuild = ''
|
||||
pushd go/src/$goPackagePath
|
||||
go run cmd/library/*.go > $NIX_BUILD_TOP/main.go
|
||||
make generate SHELL=$SHELL GO111MODULE=on GO_GENERATE_CMD='go generate'
|
||||
popd
|
||||
'';
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{ callPackage, lib, buildGoPackage
|
||||
, androidPkgs, openjdk, gomobile, xcodeWrapper, removeReferencesTo
|
||||
, go-bindata, mockgen, protobuf3_20, protoc-gen-go
|
||||
, meta
|
||||
, source
|
||||
, platform ? "android"
|
||||
@@ -15,7 +16,7 @@ let
|
||||
isAndroid = platform == "android";
|
||||
enforceXCodeAvailable = callPackage ./enforceXCodeAvailable.nix { };
|
||||
|
||||
in buildGoPackage {
|
||||
in buildGoPackage rec {
|
||||
pname = source.repo;
|
||||
version = "${source.cleanVersion}-${source.shortRev}-${platform}";
|
||||
|
||||
@@ -27,8 +28,9 @@ in buildGoPackage {
|
||||
__noChroot = isIOS;
|
||||
|
||||
extraSrcPaths = [ gomobile ];
|
||||
nativeBuildInputs = [ gomobile removeReferencesTo ]
|
||||
++ optional isAndroid openjdk
|
||||
nativeBuildInputs = [
|
||||
gomobile removeReferencesTo go-bindata mockgen protoc-gen-go protobuf3_20
|
||||
] ++ optional isAndroid openjdk
|
||||
++ optional isIOS xcodeWrapper;
|
||||
|
||||
ldflags = goBuildLdFlags;
|
||||
@@ -44,6 +46,13 @@ in buildGoPackage {
|
||||
# TODO: try removing when go is upgraded to 1.22
|
||||
GODEBUG = "netdns=cgo+2";
|
||||
|
||||
preBuild = ''
|
||||
echo 'Generate static files'
|
||||
pushd go/src/$goPackagePath
|
||||
make generate SHELL=$SHELL GO111MODULE=on GO_GENERATE_CMD='go generate'
|
||||
popd
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
echo -e "\nBuilding $pname for: ${concatStringsSep "," targets}"
|
||||
|
||||
+2
-1
@@ -51,13 +51,14 @@
|
||||
"react-native-get-random-values": "^1.11.0",
|
||||
"react-native-gifted-charts": "^1.3.2",
|
||||
"react-native-hole-view": "^3.0.0-alpha4",
|
||||
"react-native-image-crop-picker": "0.40.0",
|
||||
"react-native-image-crop-picker": "0.41.2",
|
||||
"react-native-image-resizer": "^1.2.3",
|
||||
"react-native-keychain": "8.1.2",
|
||||
"react-native-linear-gradient": "3.0.0-alpha.1",
|
||||
"react-native-lottie-splash-screen": "^1.0.1",
|
||||
"react-native-navigation": "7.39.0",
|
||||
"react-native-orientation-locker": "^1.5.0",
|
||||
"react-native-pdf": "^6.7.5",
|
||||
"react-native-permissions": "4.1.5",
|
||||
"react-native-reanimated": "3.6.1",
|
||||
"react-native-redash": "18.1.0",
|
||||
|
||||
@@ -180,17 +180,17 @@
|
||||
},
|
||||
"shards.staging": {
|
||||
"tcp/p2p/waku/boot": {
|
||||
"boot-01.do-ams3.shards.staging": "/dns4/boot-01.do-ams3.shards.staging.status.im/tcp/30303/p2p/16Uiu2HAmEqqio4UR1SWqAc7KY19t6qyDvtmyjreZpzUBJvb4u65R",
|
||||
"boot-01.do-ams3.shards.staging": "/dns4/boot-01.do-ams3.shards.staging.status.im/tcp/30303/p2p/16Uiu2HAmQE7FXQc6iZHdBzYfw3qCSDa9dLc1wsBJKoP4aZvztq2d",
|
||||
"boot-01.gc-us-central1-a.shards.staging": "/dns4/boot-01.gc-us-central1-a.shards.staging.status.im/tcp/30303/p2p/16Uiu2HAmGAA54bBTE78MYidSy3P7Q9yAWFNTAEReJYD69VRvtL5r",
|
||||
"boot-01.ac-cn-hongkong-c.shards.staging": "/dns4/boot-01.ac-cn-hongkong-c.shards.staging.status.im/tcp/30303/p2p/16Uiu2HAmNTpGnyZ8W1BK2sXEmgSCNWiyDKgRU3NBR2DXST2HzxRU"
|
||||
},
|
||||
"enr/p2p/waku/boot": {
|
||||
"boot-01.do-ams3.shards.staging": "enr:-QEQuEDsh6FgAb_36cReaX7W4gWx_7_GNpsUki7bXMoMrrrWij5pDEyV3guR-urDW_6GJTAzpQiJV61F-CfNn_NxPbY-AYJpZIJ2NIJpcISPxvrpim11bHRpYWRkcnO4YAAtNihib290LTAxLmRvLWFtczMuc2hhcmRzLnN0YWdpbmcuc3RhdHVzLmltBnZfAC82KGJvb3QtMDEuZG8tYW1zMy5zaGFyZHMuc3RhZ2luZy5zdGF0dXMuaW0GAbveA4Jyc40AEAUAAQAgAEAAgAEAiXNlY3AyNTZrMaEDIH8BcuEzgnmwPQTu7BPYyg4u4om7K9qekKA2gT_H2wSDdGNwgnZfg3VkcIIjKIV3YWt1Mg0",
|
||||
"boot-01.do-ams3.shards.staging": "enr:-QEQuEBuiQgFlJNcv255042zwyl4pOBOivakX8N30Dr9vaaEU2q8-7N4GVY4Hk87iEKELjlIXTpE9Wj6EQq1lrBuc7ayAYJpZIJ2NIJpcISPxvrpim11bHRpYWRkcnO4YAAtNihib290LTAxLmRvLWFtczMuc3RhdHVzLnN0YWdpbmcuc3RhdHVzLmltBnZfAC82KGJvb3QtMDEuZG8tYW1zMy5zdGF0dXMuc3RhZ2luZy5zdGF0dXMuaW0GAbveA4Jyc40AEAUAAQAgAEAAgAEAiXNlY3AyNTZrMaEDq-yGgpuoUG6NKkbIDRmrMiT-bEVzFlpWLEK_rF3yKUaDdGNwgnZfg3VkcIIjKIV3YWt1Mg0",
|
||||
"boot-01.gc-us-central1-a.shards.staging": "enr:-QEiuECWCuk1CoefbPYUV_cff27t-471k_QhJ_MvgOUQmRE4vgI6h9fD4LgXy7TZNSFXeBBP9haWJB7lx8Wujx-LPmhrAYJpZIJ2NIJpcIRoxQVgim11bHRpYWRkcnO4cgA2NjFib290LTAxLmdjLXVzLWNlbnRyYWwxLWEuc2hhcmRzLnN0YWdpbmcuc3RhdHVzLmltBnZfADg2MWJvb3QtMDEuZ2MtdXMtY2VudHJhbDEtYS5zaGFyZHMuc3RhZ2luZy5zdGF0dXMuaW0GAbveA4Jyc40AEAUAAQAgAEAAgAEAiXNlY3AyNTZrMaEDNAvlGjekD1YV4WpmjwArGAH2g9kHFJnMRfgUhcIkoA2DdGNwgnZfg3VkcIIjKIV3YWt1Mg0",
|
||||
"boot-01.ac-cn-hongkong-c.shards.staging": "enr:-QEiuEAcHWW7aNBtJhigTCAnKu9-H1b98SWpBJkGm3PAxth5QjJA0kdiabOfou4HgCD6RuyZEnFE5L8ymahouw3kWRiWAYJpZIJ2NIJpcIQvTKi6im11bHRpYWRkcnO4cgA2NjFib290LTAxLmFjLWNuLWhvbmdrb25nLWMuc2hhcmRzLnN0YWdpbmcuc3RhdHVzLmltBnZfADg2MWJvb3QtMDEuYWMtY24taG9uZ2tvbmctYy5zaGFyZHMuc3RhZ2luZy5zdGF0dXMuaW0GAbveA4Jyc40AEAUAAQAgAEAAgAEAiXNlY3AyNTZrMaEDkbgV7oqPNmFtX5FzSPi9WH8kkmrPB1R3n9xRXge91M-DdGNwgnZfg3VkcIIjKIV3YWt1Mg0"
|
||||
},
|
||||
"wss/p2p/waku/boot": {
|
||||
"boot-01.do-ams3.shards.staging": "/dns4/boot-01.do-ams3.shards.staging.status.im/tcp/443/wss/p2p/16Uiu2HAmEqqio4UR1SWqAc7KY19t6qyDvtmyjreZpzUBJvb4u65R",
|
||||
"boot-01.do-ams3.shards.staging": "/dns4/boot-01.do-ams3.shards.staging.status.im/tcp/443/wss/p2p/16Uiu2HAmQE7FXQc6iZHdBzYfw3qCSDa9dLc1wsBJKoP4aZvztq2d",
|
||||
"boot-01.gc-us-central1-a.shards.staging": "/dns4/boot-01.gc-us-central1-a.shards.staging.status.im/tcp/443/wss/p2p/16Uiu2HAmGAA54bBTE78MYidSy3P7Q9yAWFNTAEReJYD69VRvtL5r",
|
||||
"boot-01.ac-cn-hongkong-c.shards.staging": "/dns4/boot-01.ac-cn-hongkong-c.shards.staging.status.im/tcp/443/wss/p2p/16Uiu2HAmNTpGnyZ8W1BK2sXEmgSCNWiyDKgRU3NBR2DXST2HzxRU"
|
||||
},
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 999 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
+62
-55
@@ -51,55 +51,60 @@
|
||||
;; the target files (a.k.a hot reload). When false, you can manually
|
||||
;; reload by calling `shadow.cljs.devtools.api/watch-compile-all!`.
|
||||
:devtools {:autobuild #shadow/env ["SHADOW_AUTOBUILD_ENABLED" :default true :as :bool]}
|
||||
:dev {:devtools {:before-load-async status-im.setup.hot-reload/before-reload
|
||||
:after-load-async status-im.setup.hot-reload/reload
|
||||
:build-notify status-im.setup.hot-reload/build-notify
|
||||
:preloads [;; The official recommendation is to
|
||||
;; load the debugger preload first.
|
||||
flow-storm.api
|
||||
re-frisk-remote.preload
|
||||
status-im.setup.schema-preload
|
||||
;; In order to use component test helpers in the REPL we
|
||||
;; need to preload namespaces that are not normally required
|
||||
;; by production code, such as
|
||||
;; @testing-library/react-native.
|
||||
test-helpers.component]}
|
||||
:closure-defines
|
||||
{status-im.config/POKT_TOKEN #shadow/env "POKT_TOKEN"
|
||||
status-im.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN"
|
||||
status-im.config/STATUS_BUILD_PROXY_USER #shadow/env "STATUS_BUILD_PROXY_USER"
|
||||
status-im.config/STATUS_BUILD_PROXY_PASSWORD #shadow/env "STATUS_BUILD_PROXY_PASSWORD"
|
||||
status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID"
|
||||
status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN"
|
||||
status-im.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY"
|
||||
status-im.config/RARIBLE_MAINNET_API_KEY #shadow/env "RARIBLE_MAINNET_API_KEY"
|
||||
status-im.config/RARIBLE_TESTNET_API_KEY #shadow/env "RARIBLE_TESTNET_API_KEY"
|
||||
status-im.config/ALCHEMY_ETHEREUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ETHEREUM_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_ETHEREUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ETHEREUM_GOERLI_TOKEN"
|
||||
status-im.config/ALCHEMY_ETHEREUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ETHEREUM_SEPOLIA_TOKEN"
|
||||
status-im.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_ARBITRUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ARBITRUM_GOERLI_TOKEN"
|
||||
status-im.config/ALCHEMY_ARBITRUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ARBITRUM_SEPOLIA_TOKEN"
|
||||
status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_OPTIMISM_GOERLI_TOKEN #shadow/env "ALCHEMY_OPTIMISM_GOERLI_TOKEN"
|
||||
status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"}
|
||||
:compiler-options {:output-feature-set :es5
|
||||
;; We disable `:fn-deprecated` warnings because we
|
||||
;; are managing deprecation via clj-kondo and we
|
||||
;; don't want the terminal output to be littered
|
||||
;; with warnings on every code reload.
|
||||
:warnings {:fn-deprecated false}
|
||||
:closure-defines {re-frame.trace/trace-enabled? true}
|
||||
:source-map false
|
||||
;; This seems to be necessary while using the REPL,
|
||||
;; otherwise sometimes you'll get weird errors when
|
||||
;; instrumenting functions.
|
||||
:static-fns false
|
||||
:infer-externs true}
|
||||
;; if you want to use a real device, set your local ip
|
||||
;; in the SHADOW_HOST env variable to make sure that
|
||||
;; it will use the right interface
|
||||
:local-ip #shadow/env "SHADOW_HOST"}
|
||||
:dev
|
||||
{:devtools {:before-load-async status-im.setup.hot-reload/before-reload
|
||||
:after-load-async status-im.setup.hot-reload/reload
|
||||
:build-notify status-im.setup.hot-reload/build-notify
|
||||
:preloads [;; The official recommendation is to
|
||||
;; load the debugger preload first.
|
||||
flow-storm.api
|
||||
re-frisk-remote.preload
|
||||
status-im.setup.schema-preload
|
||||
;; In order to use component test helpers in the REPL we need to
|
||||
;; preload namespaces that are not normally required by
|
||||
;; production code, such as @testing-library/react-native.
|
||||
test-helpers.component]}
|
||||
:closure-defines
|
||||
{status-im.config/POKT_TOKEN #shadow/env "POKT_TOKEN"
|
||||
status-im.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN"
|
||||
status-im.config/STATUS_BUILD_PROXY_USER #shadow/env "STATUS_BUILD_PROXY_USER"
|
||||
status-im.config/STATUS_BUILD_PROXY_PASSWORD #shadow/env "STATUS_BUILD_PROXY_PASSWORD"
|
||||
status-im.config/STATUS_BACKEND_SERVER_ENABLED #shadow/env "STATUS_BACKEND_SERVER_ENABLED"
|
||||
status-im.config/STATUS_BACKEND_SERVER_HOST #shadow/env "STATUS_BACKEND_SERVER_HOST"
|
||||
status-im.config/STATUS_BACKEND_SERVER_ROOT_DATA_DIR #shadow/env
|
||||
"STATUS_BACKEND_SERVER_ROOT_DATA_DIR"
|
||||
status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID"
|
||||
status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN"
|
||||
status-im.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY"
|
||||
status-im.config/RARIBLE_MAINNET_API_KEY #shadow/env "RARIBLE_MAINNET_API_KEY"
|
||||
status-im.config/RARIBLE_TESTNET_API_KEY #shadow/env "RARIBLE_TESTNET_API_KEY"
|
||||
status-im.config/ALCHEMY_ETHEREUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ETHEREUM_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_ETHEREUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ETHEREUM_GOERLI_TOKEN"
|
||||
status-im.config/ALCHEMY_ETHEREUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ETHEREUM_SEPOLIA_TOKEN"
|
||||
status-im.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_ARBITRUM_GOERLI_TOKEN #shadow/env "ALCHEMY_ARBITRUM_GOERLI_TOKEN"
|
||||
status-im.config/ALCHEMY_ARBITRUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ARBITRUM_SEPOLIA_TOKEN"
|
||||
status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_OPTIMISM_GOERLI_TOKEN #shadow/env "ALCHEMY_OPTIMISM_GOERLI_TOKEN"
|
||||
status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"}
|
||||
:compiler-options {:output-feature-set :es5
|
||||
;; We disable `:fn-deprecated` warnings because we
|
||||
;; are managing deprecation via clj-kondo and we
|
||||
;; don't want the terminal output to be littered
|
||||
;; with warnings on every code reload.
|
||||
:warnings {:fn-deprecated false}
|
||||
:closure-defines {re-frame.trace/trace-enabled? true}
|
||||
:source-map false
|
||||
;; This seems to be necessary while using the REPL,
|
||||
;; otherwise sometimes you'll get weird errors when
|
||||
;; instrumenting functions.
|
||||
:static-fns false
|
||||
:infer-externs true
|
||||
:reader-features #{:mobile}}
|
||||
;; if you want to use a real device, set your local ip
|
||||
;; in the SHADOW_HOST env variable to make sure that
|
||||
;; it will use the right interface
|
||||
:local-ip #shadow/env "SHADOW_HOST"}
|
||||
:chunks {:fleets legacy.status-im.fleet.default-fleet/default-fleets}
|
||||
:release
|
||||
{:closure-defines
|
||||
@@ -129,7 +134,8 @@
|
||||
:static-fns true
|
||||
:fn-invoke-direct true
|
||||
:optimizations :advanced
|
||||
:js-options {:js-provider :closure}}}}
|
||||
:js-options {:js-provider :closure}
|
||||
:reader-features #{:mobile}}}}
|
||||
;; the tests are ran with node, react-native dependencies are mocked
|
||||
;; by using node --require override.js, which uses the node-library
|
||||
;; produced by the target :mocks below and redefines node require
|
||||
@@ -169,12 +175,13 @@
|
||||
{;; needed because we override require and it
|
||||
;; messes with source-map which reports callstack
|
||||
;; exceeded exceptions instead of real issues
|
||||
:source-map false
|
||||
:source-map false
|
||||
;; needed because we use deref in tests
|
||||
:static-fns false
|
||||
:optimizations :simple
|
||||
:warnings {:fn-deprecated false}
|
||||
:infer-externs true}}
|
||||
:static-fns false
|
||||
:optimizations :simple
|
||||
:warnings {:fn-deprecated false}
|
||||
:infer-externs true
|
||||
:reader-features #{:mobile}}}
|
||||
|
||||
;; mock.js-dependencies is mocking the react-native libraries
|
||||
;; we build it as a node library so that it can be required by
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
import { useDerivedValue, withTiming, interpolate } from 'react-native-reanimated';
|
||||
|
||||
export function navigationHeaderOpacity(distanceFromListTop, isAllLoaded, isCalculationsComplete, startPosition) {
|
||||
return useDerivedValue(function () {
|
||||
'worklet';
|
||||
const isCalculationsCompleteValue = isCalculationsComplete.value;
|
||||
if (distanceFromListTop.value < startPosition && isAllLoaded.value) {
|
||||
return isCalculationsCompleteValue ? withTiming(0) : 0;
|
||||
} else {
|
||||
return isCalculationsCompleteValue ? withTiming(1) : 1;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export function navigationHeaderPosition(distanceFromListTop, isAllLoaded, topBarHeight, startPosition) {
|
||||
return useDerivedValue(function () {
|
||||
'worklet';
|
||||
return distanceFromListTop.value < startPosition && isAllLoaded.value ? withTiming(topBarHeight) : withTiming(0);
|
||||
});
|
||||
}
|
||||
|
||||
export function navigationButtonsCompleteOpacity(isCalculationComplete) {
|
||||
return useDerivedValue(function () {
|
||||
'worklet';
|
||||
return isCalculationComplete.value ? withTiming(1) : 0;
|
||||
});
|
||||
}
|
||||
|
||||
export function interpolateNavigationViewOpacity(props) {
|
||||
return useDerivedValue(function () {
|
||||
'worklet';
|
||||
const {
|
||||
'all-loaded?': isAllLoaded,
|
||||
'end-position': endPosition,
|
||||
'start-position': startPosition,
|
||||
'distance-from-list-top': distanceFromListTop,
|
||||
} = props;
|
||||
if (isAllLoaded.value) {
|
||||
return interpolate(distanceFromListTop.value, [startPosition, endPosition], [0, 1], {
|
||||
extrapolateLeft: 'clamp',
|
||||
extrapolateRight: 'clamp',
|
||||
});
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
import { useDerivedValue } from 'react-native-reanimated';
|
||||
|
||||
export function placeholderOpacity(isCalculationsComplete) {
|
||||
return useDerivedValue(function () {
|
||||
'worklet';
|
||||
return isCalculationsComplete.value ? 0 : 1;
|
||||
});
|
||||
}
|
||||
|
||||
export function placeholderZIndex(isCalculationsComplete) {
|
||||
return useDerivedValue(function () {
|
||||
'worklet';
|
||||
return isCalculationsComplete.value ? 0 : 2;
|
||||
});
|
||||
}
|
||||
@@ -256,9 +256,10 @@
|
||||
{:events [:pairing/pair-and-sync]}
|
||||
[cofx installation-id]
|
||||
{:fx [[:json-rpc/call
|
||||
[{:method "wakuext_enableInstallationAndSync"
|
||||
:params [{:installationId installation-id}]
|
||||
:on-success #(log/debug "successfully synced devices")}]]]})
|
||||
[{:method "wakuext_enableInstallationAndSync"
|
||||
:params [{:installationId installation-id}]
|
||||
:js-response true
|
||||
:on-success [:sanitize-messages-and-process-response]}]]]})
|
||||
|
||||
(rf/defn enable-installation-success
|
||||
{:events [:pairing.callback/enable-installation-success]}
|
||||
|
||||
@@ -371,6 +371,8 @@
|
||||
:LineChart #js {}
|
||||
:LineChartBicolor #js {}})
|
||||
|
||||
(def react-native-pdf #js {:default {}})
|
||||
|
||||
(def worklet-factory
|
||||
#js {:applyAnimationsToStyle (fn [])})
|
||||
|
||||
@@ -421,6 +423,7 @@
|
||||
"react-native-transparent-video" react-native-transparent-video
|
||||
"react-native-orientation-locker" react-native-orientation-locker
|
||||
"react-native-gifted-charts" react-native-gifted-charts
|
||||
"react-native-pdf" react-native-pdf
|
||||
"@walletconnect/react-native-compat" #js {}
|
||||
"../resources/data/emojis/en.json" (js/JSON.parse
|
||||
(slurp
|
||||
|
||||
@@ -79,6 +79,12 @@
|
||||
(types/clj->json request)
|
||||
#(callback (types/json->clj %))))
|
||||
|
||||
(defn accept-terms
|
||||
([]
|
||||
(native-utils/promisify-native-module-call accept-terms))
|
||||
([callback]
|
||||
(.acceptTerms ^js (account-manager) callback)))
|
||||
|
||||
(defn prepare-dir-and-update-config
|
||||
[key-uid config callback]
|
||||
(log/debug "[native-module] prepare-dir-and-update-config")
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
(ns quo.components.buttons.wallet-ctas.style)
|
||||
(ns quo.components.buttons.wallet-ctas.style
|
||||
(:require [quo.foundations.colors :as colors]))
|
||||
|
||||
(def inner-container
|
||||
{:flex-direction :row
|
||||
@@ -10,3 +11,9 @@
|
||||
:width 77.75
|
||||
:justify-content :center
|
||||
:align-items :center})
|
||||
|
||||
(defn action-button-text
|
||||
[theme disabled?]
|
||||
(cond-> {:margin-top 4
|
||||
:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)}
|
||||
disabled? (assoc :opacity 0.5)))
|
||||
|
||||
@@ -3,28 +3,28 @@
|
||||
[quo.components.buttons.wallet-button.view :as wallet-button]
|
||||
[quo.components.buttons.wallet-ctas.style :as style]
|
||||
[quo.components.markdown.text :as text]
|
||||
[quo.foundations.colors :as colors]
|
||||
[quo.theme :as quo.theme]
|
||||
[react-native.core :as rn]
|
||||
[utils.i18n :as i18n]))
|
||||
|
||||
|
||||
(defn action-button
|
||||
[{:keys [icon text on-press theme accessibility-label]}]
|
||||
[{:keys [icon text on-press theme accessibility-label disabled?]}]
|
||||
[rn/view
|
||||
{:style style/button-container
|
||||
:accessibility-label accessibility-label}
|
||||
[wallet-button/view
|
||||
{:icon icon
|
||||
:on-press on-press}]
|
||||
{:icon icon
|
||||
:disabled? disabled?
|
||||
:on-press on-press}]
|
||||
[text/text
|
||||
{:weight :medium
|
||||
:size :paragraph-2
|
||||
:style {:margin-top 4
|
||||
:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)}} text]])
|
||||
:style (style/action-button-text theme disabled?)} text]])
|
||||
|
||||
(defn view
|
||||
[{:keys [buy-action send-action receive-action bridge-action swap-action container-style]}]
|
||||
[{:keys [buy-action send-action receive-action bridge-action swap-action bridge-disabled?
|
||||
swap-disabled? container-style]}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
[rn/view {:style container-style}
|
||||
[rn/view {:style style/inner-container}
|
||||
@@ -48,14 +48,16 @@
|
||||
:accessibility-label :receive}]
|
||||
(when swap-action
|
||||
[action-button
|
||||
{:icon :i/swap
|
||||
{:icon :i/transaction
|
||||
:text (i18n/label :t/swap)
|
||||
:on-press swap-action
|
||||
:theme theme
|
||||
:disabled? swap-disabled?
|
||||
:accessibility-label :swap}])
|
||||
[action-button
|
||||
{:icon :i/bridge
|
||||
:text (i18n/label :t/bridge)
|
||||
:on-press bridge-action
|
||||
:theme theme
|
||||
:disabled? bridge-disabled?
|
||||
:accessibility-label :bridge}]]]))
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
:type type
|
||||
:include-button? include-button?})
|
||||
style)}
|
||||
[icons/icon icon
|
||||
[icons/icon (or icon :i/info)
|
||||
{:color (style/get-color-by-type theme type :icon)
|
||||
:no-color no-icon-color?
|
||||
:size (or icon-size 16)
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
:seed :i/seed
|
||||
:key :i/password
|
||||
nil)
|
||||
:color :neutral
|
||||
:blur? true
|
||||
:border? true}]
|
||||
[rn/view
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
(ns quo.components.list-items.network-list.view
|
||||
(:require
|
||||
[clojure.string :as string]
|
||||
[quo.components.icon :as icon]
|
||||
[quo.components.list-items.network-list.style :as style]
|
||||
[quo.components.markdown.text :as text]
|
||||
[quo.theme :as quo.theme]
|
||||
@@ -42,8 +43,8 @@
|
||||
[:map {:closed true}
|
||||
[:network-image :int]
|
||||
[:label :string]
|
||||
[:fiat-value :string]
|
||||
[:token-value :string]
|
||||
[:fiat-value {:optional true} [:maybe :string]]
|
||||
[:token-value {:optional true} [:maybe :string]]
|
||||
[:container-style {:optional true} [:maybe :map]]
|
||||
[:customization-color {:optional true} [:maybe :schema.common/customization-color]]
|
||||
[:state {:optional true} [:enum :pressed :active :disabled :default]]
|
||||
@@ -51,7 +52,7 @@
|
||||
:any])
|
||||
|
||||
(defn- view-internal
|
||||
[{:keys [on-press container-style state customization-color]
|
||||
[{:keys [fiat-value token-value on-press container-style state customization-color]
|
||||
:as props
|
||||
:or {customization-color :blue}}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
@@ -67,6 +68,8 @@
|
||||
:on-press (when-not (= state :disabled) on-press)
|
||||
:accessibility-label :network-list}
|
||||
[info props]
|
||||
[values props]]))
|
||||
(if (or token-value fiat-value)
|
||||
[values props]
|
||||
[icon/icon :i/chevron-right])]))
|
||||
|
||||
(def view (schema/instrument #'view-internal ?schema))
|
||||
|
||||
@@ -4,12 +4,10 @@
|
||||
[container-style]
|
||||
(merge container-style
|
||||
{:flex-direction :row
|
||||
:flex 1
|
||||
:align-items :flex-start}))
|
||||
|
||||
(def index
|
||||
{:margin-left 5})
|
||||
|
||||
(def text-container
|
||||
{:margin-left 8
|
||||
:flex 1})
|
||||
{:margin-left 8})
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
[rn/pressable
|
||||
(when-not disabled?
|
||||
{:on-press on-press
|
||||
:allow-multiple-presses? true})
|
||||
:allow-multiple-presses? true
|
||||
:hit-slop 12})
|
||||
[rn/view
|
||||
{:style outer-styles
|
||||
:needs-offscreen-alpha-compositing true
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
:customization-color :blue
|
||||
:token-value "100"
|
||||
:token-symbol "SNT"}])
|
||||
(h/is-truthy (h/get-by-translation-text :t/approve-amount-symbol {:amount "100" :symbol "SNT"})))
|
||||
(h/is-truthy (h/get-by-translation-text :t/approve-amount-symbol
|
||||
{:token-amount "100" :token-symbol "SNT"})))
|
||||
|
||||
(h/test "with :approving status"
|
||||
(h/render-with-theme-provider
|
||||
@@ -19,7 +20,8 @@
|
||||
:customization-color :blue
|
||||
:token-value "50"
|
||||
:token-symbol "DAI"}])
|
||||
(h/is-truthy (h/get-by-translation-text :t/approving-amount-symbol {:amount "50" :symbol "DAI"})))
|
||||
(h/is-truthy (h/get-by-translation-text :t/approving-amount-symbol
|
||||
{:token-amount "50" :token-symbol "DAI"})))
|
||||
|
||||
(h/test "with :approved status"
|
||||
(h/render-with-theme-provider
|
||||
@@ -28,7 +30,8 @@
|
||||
:customization-color :blue
|
||||
:token-value "5"
|
||||
:token-symbol "ETH"}])
|
||||
(h/is-truthy (h/get-by-translation-text :t/approved-amount-symbol {:amount "5" :symbol "ETH"})))
|
||||
(h/is-truthy (h/get-by-translation-text :t/approved-amount-symbol
|
||||
{:token-amount "5" :token-symbol "ETH"})))
|
||||
|
||||
(h/test "on-press event is called when button is pressed"
|
||||
(let [mock-fn (h/mock-fn)]
|
||||
|
||||
@@ -54,8 +54,8 @@
|
||||
{:size :paragraph-2
|
||||
:style (style/message theme)}
|
||||
(i18n/label (status-message status)
|
||||
{:amount token-value
|
||||
:symbol token-symbol})]]
|
||||
{:token-amount token-value
|
||||
:token-symbol token-symbol})]]
|
||||
(when (and button-props
|
||||
(or (= status :approve)
|
||||
(and (not= status :approve) show-view-button?)))
|
||||
|
||||
@@ -60,7 +60,8 @@
|
||||
|
||||
(defn- view-internal
|
||||
[{:keys [type account-props token-props networks? values]}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
address (or (:address account-props) (:address token-props))]
|
||||
[rn/view
|
||||
{:style (style/container networks? theme)}
|
||||
[rn/view
|
||||
@@ -89,12 +90,13 @@
|
||||
(get-in account-props [:status-account :name])]
|
||||
[rn/view
|
||||
{:style (style/dot-divider theme)}]])
|
||||
[text/text
|
||||
{:size (when (not= type :account) :paragraph-2)
|
||||
:weight (when (= type :account) :semi-bold)
|
||||
:style {:color (when (not= type :account)
|
||||
(colors/theme-colors colors/neutral-50 colors/neutral-40 theme))}}
|
||||
(or (:address account-props) (:address token-props))]]]]
|
||||
(when address
|
||||
[text/text
|
||||
{:size (when (not= type :account) :paragraph-2)
|
||||
:weight (when (= type :account) :semi-bold)
|
||||
:style {:color (when (not= type :account)
|
||||
(colors/theme-colors colors/neutral-50 colors/neutral-40 theme))}}
|
||||
address])]]]
|
||||
(when networks?
|
||||
[:<>
|
||||
[rn/view
|
||||
|
||||
@@ -75,3 +75,16 @@
|
||||
|
||||
(def fiat-amount
|
||||
{:color colors/neutral-50})
|
||||
|
||||
(def gradient-common
|
||||
{:width 64
|
||||
:position :absolute
|
||||
:top 0
|
||||
:bottom 0
|
||||
:z-index 1})
|
||||
|
||||
(def gradient-start
|
||||
(assoc gradient-common :left 0))
|
||||
|
||||
(def gradient-end
|
||||
(assoc gradient-common :right 0))
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
[quo.foundations.colors :as colors]
|
||||
quo.theme
|
||||
[react-native.core :as rn]
|
||||
[react-native.linear-gradient :as linear-gradient]
|
||||
[schema.core :as schema]))
|
||||
|
||||
(def ?schema
|
||||
@@ -18,6 +19,7 @@
|
||||
[:catn
|
||||
[:props
|
||||
[:map {:closed true}
|
||||
[:get-ref {:optional true} [:maybe fn?]]
|
||||
[:type {:optional true} [:maybe [:enum :pay :receive]]]
|
||||
[:status {:optional true} [:maybe [:enum :default :typing :disabled :loading]]]
|
||||
[:token {:optional true} [:maybe :string]]
|
||||
@@ -42,26 +44,65 @@
|
||||
[:container-style {:optional true} [:maybe :map]]]]]
|
||||
:any])
|
||||
|
||||
(def icon-size 32)
|
||||
(def container-padding (* 2 (:padding (style/row-1 false))))
|
||||
(def max-cursor-position 5)
|
||||
|
||||
(defn view-internal
|
||||
[{:keys [type status token value fiat-value show-approval-label? error? network-tag-props
|
||||
approval-label-props default-value auto-focus? input-disabled? enable-swap?
|
||||
currency-symbol on-change-text show-keyboard?
|
||||
currency-symbol on-change-text show-keyboard? get-ref
|
||||
container-style on-swap-press on-token-press on-max-press on-input-focus]}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
pay? (= type :pay)
|
||||
disabled? (= status :disabled)
|
||||
loading? (= status :loading)
|
||||
typing? (= status :typing)
|
||||
controlled-input? (some? value)
|
||||
input-ref (rn/use-ref-atom nil)
|
||||
set-input-ref (rn/use-callback (fn [ref] (reset! input-ref ref)) [])
|
||||
focus-input (rn/use-callback (fn []
|
||||
(some-> @input-ref
|
||||
(oops/ocall "focus")))
|
||||
[input-ref])]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
pay? (= type :pay)
|
||||
disabled? (= status :disabled)
|
||||
loading? (= status :loading)
|
||||
typing? (= status :typing)
|
||||
controlled-input? (some? value)
|
||||
[container-width
|
||||
set-container-width] (rn/use-state)
|
||||
[overflow?
|
||||
set-overflow?] (rn/use-state false)
|
||||
[cursor-close-to-start?
|
||||
set-cursor-close-to-start?] (rn/use-state false)
|
||||
[label-width
|
||||
set-label-width] (rn/use-state 0)
|
||||
input-ref (rn/use-ref-atom nil)
|
||||
set-input-ref (rn/use-callback (fn [ref]
|
||||
(reset! input-ref ref)
|
||||
(when get-ref (get-ref ref)))
|
||||
[])
|
||||
focus-input (rn/use-callback (fn []
|
||||
(some-> @input-ref
|
||||
(oops/ocall "focus")))
|
||||
[input-ref])
|
||||
on-layout-container (rn/use-callback
|
||||
(fn [e]
|
||||
(let [width (oops/oget e "nativeEvent.layout.width")]
|
||||
(set-container-width width))))
|
||||
on-layout-text-input (rn/use-callback
|
||||
(fn [e]
|
||||
(let [width (oops/oget e "nativeEvent.layout.width")
|
||||
max-width (- container-width
|
||||
icon-size
|
||||
container-padding
|
||||
(* label-width 2))]
|
||||
(set-overflow? (> width max-width))))
|
||||
[container-width label-width])
|
||||
on-layout-label (rn/use-callback
|
||||
(fn [e]
|
||||
(let [width (oops/oget e "nativeEvent.layout.width")]
|
||||
(set-label-width width))))
|
||||
on-selection-change (rn/use-callback
|
||||
(fn [e]
|
||||
(let [selection-start (oops/oget e
|
||||
"nativeEvent.selection.start")]
|
||||
(set-cursor-close-to-start?
|
||||
(< selection-start max-cursor-position)))))]
|
||||
[rn/view
|
||||
{:style container-style
|
||||
:accessibility-label :swap-input}
|
||||
:accessibility-label :swap-input
|
||||
:on-layout on-layout-container}
|
||||
[rn/view {:style (style/content typing? theme)}
|
||||
[rn/view
|
||||
{:style (style/row-1 loading?)}
|
||||
@@ -75,25 +116,43 @@
|
||||
[rn/pressable
|
||||
{:style style/input-container
|
||||
:on-press focus-input}
|
||||
[rn/text-input
|
||||
(cond-> {:ref set-input-ref
|
||||
:style (style/input disabled? error? theme)
|
||||
:placeholder-text-color (colors/theme-colors colors/neutral-40
|
||||
colors/neutral-50
|
||||
theme)
|
||||
:keyboard-type :numeric
|
||||
:editable (not input-disabled?)
|
||||
:auto-focus auto-focus?
|
||||
:on-focus on-input-focus
|
||||
:on-change-text on-change-text
|
||||
:show-soft-input-on-focus show-keyboard?
|
||||
:default-value default-value
|
||||
:placeholder "0"}
|
||||
controlled-input? (assoc :value value))]
|
||||
[rn/view {:style {:flex-shrink 1}}
|
||||
(when (and overflow? typing? (not cursor-close-to-start?))
|
||||
[linear-gradient/linear-gradient
|
||||
{:start {:x 0 :y 0}
|
||||
:end {:x 1 :y 0}
|
||||
:colors [(colors/theme-colors colors/white colors/neutral-100 theme)
|
||||
(colors/theme-colors colors/white-opa-10 colors/neutral-100-opa-10 theme)]
|
||||
:style style/gradient-start}])
|
||||
(when (and overflow? disabled?)
|
||||
[linear-gradient/linear-gradient
|
||||
{:start {:x 0 :y 0}
|
||||
:end {:x 1 :y 0}
|
||||
:colors [(colors/theme-colors colors/white-opa-10 colors/neutral-100-opa-10 theme)
|
||||
(colors/theme-colors colors/white colors/neutral-100 theme)]
|
||||
:style style/gradient-end}])
|
||||
[rn/text-input
|
||||
(cond-> {:ref set-input-ref
|
||||
:style (style/input disabled? error? theme)
|
||||
:placeholder-text-color (colors/theme-colors colors/neutral-40
|
||||
colors/neutral-50
|
||||
theme)
|
||||
:keyboard-type :numeric
|
||||
:editable (not input-disabled?)
|
||||
:auto-focus auto-focus?
|
||||
:on-focus on-input-focus
|
||||
:on-change-text on-change-text
|
||||
:on-layout on-layout-text-input
|
||||
:on-selection-change on-selection-change
|
||||
:show-soft-input-on-focus show-keyboard?
|
||||
:default-value default-value
|
||||
:placeholder "0"}
|
||||
controlled-input? (assoc :value value))]]
|
||||
[text/text
|
||||
{:size :paragraph-2
|
||||
:weight :semi-bold
|
||||
:style (style/token-symbol theme)}
|
||||
{:size :paragraph-2
|
||||
:weight :semi-bold
|
||||
:style (style/token-symbol theme)
|
||||
:on-layout on-layout-label}
|
||||
token]]
|
||||
(when (and pay? enable-swap?)
|
||||
[buttons/button
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
(def transaction-icon
|
||||
{:send :i/send
|
||||
:swap :i/swap
|
||||
:swap :i/transaction
|
||||
:bridge :i/bridge})
|
||||
|
||||
(defn transaction-header
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
(def transaction-icon
|
||||
{:receive :i/receive
|
||||
:send :i/send
|
||||
:swap :i/swap
|
||||
:swap :i/transaction
|
||||
:bridge :i/bridge
|
||||
:buy :i/buy
|
||||
:destroy :i/destroy
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
(ns react-native.pdf-viewer
|
||||
(:require
|
||||
["react-native-pdf" :default rn-pdf]
|
||||
[reagent.core :as reagent]))
|
||||
|
||||
(def view (reagent/adapt-react-class rn-pdf))
|
||||
@@ -5,6 +5,7 @@
|
||||
[react-native.core :as rn]
|
||||
[reagent.core :as reagent]
|
||||
[status-im.common.confirmation-drawer.style :as style]
|
||||
[status-im.constants :as constants]
|
||||
[utils.i18n :as i18n]
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
@@ -35,11 +36,12 @@
|
||||
close-button-text]}]
|
||||
(let [extra-action-selected? (reagent/atom false)]
|
||||
(fn []
|
||||
(let [{:keys [group-chat chat-id public-key color
|
||||
(let [{:keys [group-chat chat-id public-key color chat-type
|
||||
profile-picture name]} context
|
||||
id (or chat-id public-key)
|
||||
theme (quo.theme/use-theme)
|
||||
[primary-name _] (when-not group-chat
|
||||
[primary-name _] (when-not (or group-chat
|
||||
(= chat-type constants/public-chat-type))
|
||||
(rf/sub [:contacts/contact-two-names-by-identity id]))
|
||||
display-name (cond
|
||||
(= primary-name "Unknown")
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
(take 7)))
|
||||
|
||||
(defn recovery-phrase-screen
|
||||
[{:keys [banner-offset initial-insets keypair title recovering-keypair? render-controls]}]
|
||||
[{:keys [banner-offset initial-insets keypair title on-success render-controls]}]
|
||||
(reagent/with-let [keyboard-shown? (reagent/atom false)
|
||||
keyboard-show-listener (.addListener rn/keyboard
|
||||
"keyboardDidShow"
|
||||
@@ -120,14 +120,20 @@
|
||||
(reset! seed-phrase new-phrase))
|
||||
on-submit (fn []
|
||||
(swap! seed-phrase clean-seed-phrase)
|
||||
(if recovering-keypair?
|
||||
(rf/dispatch [:wallet/seed-phrase-entered
|
||||
(security/mask-data
|
||||
@seed-phrase)
|
||||
set-invalid-seed-phrase])
|
||||
(rf/dispatch [:onboarding/seed-phrase-entered
|
||||
(security/mask-data @seed-phrase)
|
||||
set-invalid-seed-phrase])))]
|
||||
(rf/dispatch
|
||||
[:profile.recover/validate-recovery-phrase
|
||||
(security/mask-data @seed-phrase)
|
||||
{:on-success (fn [mnemonic key-uid]
|
||||
(if on-success
|
||||
(on-success
|
||||
{:key-uid key-uid
|
||||
:phrase mnemonic
|
||||
:on-error
|
||||
set-invalid-seed-phrase})
|
||||
(rf/dispatch
|
||||
[:onboarding/seed-phrase-validated
|
||||
mnemonic key-uid])))
|
||||
:on-error set-invalid-seed-phrase}]))]
|
||||
(let [words-coll (mnemonic/passphrase->words @seed-phrase)
|
||||
last-word (peek words-coll)
|
||||
pick-suggested-word (fn [pressed-word]
|
||||
@@ -191,7 +197,7 @@
|
||||
[rn/view {:style style/keyboard-container}
|
||||
[quo/predictive-keyboard
|
||||
{:type suggestions-state
|
||||
:blur? (not recovering-keypair?)
|
||||
:blur? (not on-success)
|
||||
:text suggestions-text
|
||||
:words (keyboard-suggestions last-word)
|
||||
:on-press pick-suggested-word}]])])
|
||||
@@ -200,7 +206,7 @@
|
||||
(.remove keyboard-hide-listener))))
|
||||
|
||||
(defn screen
|
||||
[{:keys [title keypair navigation-icon recovering-keypair? render-controls]}]
|
||||
[{:keys [title keypair navigation-icon on-success render-controls]}]
|
||||
(let [[insets _] (rn/use-state (safe-area/get-insets))
|
||||
banner-offset (rf/sub [:alert-banners/top-margin])]
|
||||
[rn/view {:style style/full-layout}
|
||||
@@ -209,21 +215,22 @@
|
||||
{:margin-top (:top insets)
|
||||
:background :blur
|
||||
:icon-name (or navigation-icon
|
||||
(if recovering-keypair? :i/close :i/arrow-left))
|
||||
(if on-success :i/close :i/arrow-left))
|
||||
:on-press #(rf/dispatch [:navigate-back])}]
|
||||
[recovery-phrase-screen
|
||||
{:title title
|
||||
:keypair keypair
|
||||
:render-controls render-controls
|
||||
:banner-offset banner-offset
|
||||
:initial-insets insets
|
||||
:recovering-keypair? recovering-keypair?}]]]))
|
||||
{:title title
|
||||
:keypair keypair
|
||||
:render-controls render-controls
|
||||
:banner-offset banner-offset
|
||||
:initial-insets insets
|
||||
:on-success on-success}]]]))
|
||||
|
||||
(defn view
|
||||
[]
|
||||
(let [{:keys [recovering-keypair?]} (rf/sub [:get-screen-params])]
|
||||
(let [{:keys [on-success]} (rf/sub [:get-screen-params])]
|
||||
(rn/use-unmount
|
||||
#(rf/dispatch [:onboarding/clear-navigated-to-enter-seed-phrase-from-screen]))
|
||||
(when-not on-success
|
||||
#(rf/dispatch [:onboarding/clear-navigated-to-enter-seed-phrase-from-screen])))
|
||||
[screen
|
||||
{:title (i18n/label :t/use-recovery-phrase)
|
||||
:recovering-keypair? recovering-keypair?}]))
|
||||
{:title (i18n/label :t/use-recovery-phrase)
|
||||
:on-success on-success}]))
|
||||
|
||||
@@ -232,12 +232,11 @@
|
||||
:sub-label nil
|
||||
:chevron? false})))
|
||||
|
||||
;; TODO(OmarBasem): Requires design input.
|
||||
(defn edit-name-image-entry
|
||||
[]
|
||||
[chat-id]
|
||||
(entry {:icon :i/edit
|
||||
:label (i18n/label :t/edit-name-and-image)
|
||||
:on-press #(js/alert "TODO: to be implemented, requires design input")
|
||||
:on-press #(rf/dispatch [:open-modal :screen/group-update chat-id])
|
||||
:danger? false
|
||||
:accessibility-label :edit-name-and-image
|
||||
:sub-label nil
|
||||
@@ -359,7 +358,7 @@
|
||||
(rf/dispatch [:chats-list/load-chat chat-id])
|
||||
(rf/dispatch [:pin-message/load-pin-messages chat-id])
|
||||
(rf/dispatch [:hide-bottom-sheet])
|
||||
(rf/dispatch [:navigate-to :group-details chat-id]))
|
||||
(rf/dispatch [:navigate-to :screen/group-details chat-id]))
|
||||
:danger? false
|
||||
:accessibility-label :group-details
|
||||
:sub-label nil
|
||||
@@ -369,18 +368,17 @@
|
||||
[chat-id admin?]
|
||||
(entry {:icon :i/add-user
|
||||
:label (i18n/label (if admin? :t/manage-members :t/add-members))
|
||||
:on-press #(rf/dispatch [:open-modal :group-add-manage-members chat-id])
|
||||
:on-press #(rf/dispatch [:open-modal :screen/group-add-manage-members chat-id])
|
||||
:danger? false
|
||||
:accessibility-label :manage-members
|
||||
:sub-label nil
|
||||
:chevron? false}))
|
||||
|
||||
;; TODO(OmarBasem): to be implemented.
|
||||
(defn edit-group-entry
|
||||
[]
|
||||
[chat-id]
|
||||
(entry {:icon :i/edit
|
||||
:label (i18n/label :t/edit-name-and-image)
|
||||
:on-press #(js/alert "TODO: to be implemented")
|
||||
:on-press #(rf/dispatch [:open-modal :screen/group-update chat-id])
|
||||
:danger? false
|
||||
:accessibility-label :edit-group
|
||||
:sub-label nil
|
||||
@@ -398,10 +396,11 @@
|
||||
:chevron? false}))
|
||||
|
||||
(defn destructive-actions
|
||||
[{:keys [group-chat] :as item} inside-chat?]
|
||||
[{:keys [group-chat chat-type] :as item} inside-chat?]
|
||||
[(when (not group-chat)
|
||||
(close-chat-entry item inside-chat? (not group-chat)))
|
||||
(clear-history-entry item group-chat)
|
||||
(close-chat-entry item inside-chat? (not= chat-type constants/public-chat-type)))
|
||||
(when-not (= chat-type constants/public-chat-type)
|
||||
(clear-history-entry item group-chat))
|
||||
(when group-chat
|
||||
(leave-group-entry item nil))])
|
||||
|
||||
@@ -425,8 +424,7 @@
|
||||
(when inside-chat?
|
||||
(add-manage-members-entry chat-id admin?))
|
||||
(when (and admin? inside-chat?)
|
||||
(when config/show-not-implemented-features?
|
||||
(edit-group-entry)))
|
||||
(edit-group-entry chat-id))
|
||||
(when (and admin? inside-chat?)
|
||||
(when config/show-not-implemented-features?
|
||||
(group-privacy-entry)))]))
|
||||
@@ -438,6 +436,11 @@
|
||||
(notification-actions item inside-chat? true)
|
||||
(destructive-actions item inside-chat?)]])
|
||||
|
||||
(defn public-chat-actions
|
||||
[item inside-chat?]
|
||||
[quo/action-drawer
|
||||
[(destructive-actions item inside-chat?)]])
|
||||
|
||||
(defn private-group-chat-actions
|
||||
[item inside-chat?]
|
||||
[quo/action-drawer
|
||||
@@ -473,6 +476,8 @@
|
||||
[one-to-one-actions chat inside-chat?]
|
||||
constants/private-group-chat-type
|
||||
[private-group-chat-actions chat inside-chat?]
|
||||
constants/public-chat-type
|
||||
[public-chat-actions chat inside-chat?]
|
||||
constants/community-chat-type
|
||||
[communities-chat-actions/actions chat inside-chat? hide-show-members?]
|
||||
nil))
|
||||
@@ -480,13 +485,12 @@
|
||||
(chat-actions chat inside-chat? nil)))
|
||||
|
||||
(defn group-details-actions
|
||||
[{:keys [admins] :as group}]
|
||||
[{:keys [chat-id admins] :as group}]
|
||||
(let [current-pub-key (rf/sub [:multiaccount/public-key])
|
||||
admin? (get admins current-pub-key)]
|
||||
[quo/action-drawer
|
||||
[(when admin?
|
||||
[(when config/show-not-implemented-features?
|
||||
(edit-name-image-entry))])
|
||||
[(edit-name-image-entry chat-id)])
|
||||
[(when config/show-not-implemented-features?
|
||||
(notifications-entry admin?))]
|
||||
(destructive-actions group false)]]))
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
(ns status-im.common.pdf-viewer.view
|
||||
(:require
|
||||
[quo.core :as quo]
|
||||
[react-native.core :as rn]
|
||||
[react-native.pdf-viewer :as pdf-viewer]
|
||||
[status-im.common.events-helper :as events-helper]
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
(defn view
|
||||
[]
|
||||
(let [{:keys [uri pdf-viewer-props]} (rf/sub [:get-screen-params])]
|
||||
[rn/view {:style {:flex 1}}
|
||||
[quo/page-nav
|
||||
{:icon-name :i/close
|
||||
:on-press events-helper/navigate-back
|
||||
:accessibility-label :pdf-viewer-nav}]
|
||||
[pdf-viewer/view
|
||||
(merge {:source {:uri uri}
|
||||
:style {:flex 1}}
|
||||
pdf-viewer-props)]]))
|
||||
@@ -17,6 +17,7 @@
|
||||
:generate-keys1 (js/require "../resources/images/ui2/generating-keys-1.png")
|
||||
:ethereum-address (js/require "../resources/images/ui2/ethereum-address.png")
|
||||
:use-keycard (js/require "../resources/images/ui2/keycard.png")
|
||||
:check-your-keycard (js/require "../resources/images/ui2/check-your-keycard.png")
|
||||
:onboarding-illustration (js/require "../resources/images/ui2/onboarding_illustration.png")
|
||||
:qr-code (js/require "../resources/images/ui2/qr-code.png")
|
||||
:keycard-logo (js/require "../resources/images/ui2/keycard-logo.png")
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
(defn enabled? [v] (= "1" v))
|
||||
|
||||
(goog-define INFURA_TOKEN "62f3cee52dbb484198e7339837e263f3")
|
||||
(goog-define INFURA_TOKEN "")
|
||||
(goog-define POKT_TOKEN "3ef2018191814b7e1009b8d9")
|
||||
(goog-define STATUS_BUILD_PROXY_USER "")
|
||||
(goog-define STATUS_BUILD_PROXY_PASSWORD "")
|
||||
@@ -134,3 +134,14 @@
|
||||
;; Alert banners are disabled for debug builds because alert banners overlay
|
||||
;; interfere with react-native debug tools, such as inspector and Perf monitor
|
||||
(def enable-alert-banner? (enabled? (get-config :ENABLE_ALERT_BANNER "0")))
|
||||
|
||||
;; enable using status backend server or not, otherwise it will use built-in status-go library
|
||||
;; see doc/use-status-backend-server.md for more details
|
||||
(goog-define STATUS_BACKEND_SERVER_ENABLED "0")
|
||||
;; The host should contain an IP address and a port separated by a colon.
|
||||
;; The port comes from your running status backend server.
|
||||
;; If you run it by PORT=60000 make run-status-backend , then host will likely be 127.0.0.1:60000
|
||||
(goog-define STATUS_BACKEND_SERVER_HOST "")
|
||||
;; /path/to/root/data/dir
|
||||
;; make sure it exists, it should be in absolute path
|
||||
(goog-define STATUS_BACKEND_SERVER_ROOT_DATA_DIR "")
|
||||
|
||||
@@ -566,6 +566,7 @@
|
||||
(def ^:const bridge-name-erc-1155-transfer "ERC1155Transfer")
|
||||
(def ^:const bridge-name-hop "Hop")
|
||||
(def ^:const bridge-name-paraswap "Paraswap")
|
||||
(def ^:const bridge-name-celer "CBridge")
|
||||
|
||||
(def ^:const bridge-assets #{"ETH" "USDT" "USDC" "DAI"})
|
||||
|
||||
@@ -619,3 +620,12 @@
|
||||
(def router-error-code-not-enough-liquidity "WPP-038")
|
||||
(def router-error-code-price-impact-too-high "WPP-039")
|
||||
(def router-error-code-not-enough-native-balance "WR-002")
|
||||
|
||||
(def ^:const wallet-transaction-estimation
|
||||
{:unknown 0
|
||||
:less-than-one-minute 1
|
||||
:less-than-three-minutes 2
|
||||
:less-than-five-minutes 3
|
||||
:more-than-five-minutes 4})
|
||||
|
||||
(def ^:const wallet-connect-transaction-refresh-interval-ms 10000)
|
||||
|
||||
@@ -14,10 +14,13 @@
|
||||
|
||||
(defn centralized-metrics-interceptor
|
||||
[context]
|
||||
(when-let [event (tracking/tracked-event (interceptor/get-coeffect context :event))]
|
||||
(log/debug "tracking event" event)
|
||||
(when (push-event? (interceptor/get-coeffect context :db))
|
||||
(native-module/add-centralized-metric event)))
|
||||
(when (push-event? (interceptor/get-coeffect context :db))
|
||||
(when-let [event (tracking/metrics-event (interceptor/get-coeffect context :event))]
|
||||
(log/debug "tracking event" event)
|
||||
(if (or (seq? event) (vector? event))
|
||||
(doseq [e event]
|
||||
(native-module/add-centralized-metric e))
|
||||
(native-module/add-centralized-metric event))))
|
||||
context)
|
||||
|
||||
(def interceptor
|
||||
@@ -45,3 +48,15 @@
|
||||
#(rf/dispatch [:profile.login/login-with-biometric-if-available
|
||||
(get-in db [:profile/login :key-uid])]))
|
||||
:shell? true}]]]})))
|
||||
|
||||
(rf/reg-fx :effects.centralized-metrics/track
|
||||
(fn [event]
|
||||
(native-module/add-centralized-metric event)))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:centralized-metrics/track
|
||||
(fn [{:keys [db]} [event-name data]]
|
||||
(let [event-id (name event-name)]
|
||||
(when (push-event? db)
|
||||
{:fx [[:effects.centralized-metrics/track
|
||||
(tracking/key-value-event event-id data)]]}))))
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
(deftest centralized-metrics-interceptor-test
|
||||
(testing "processes context correctly"
|
||||
(with-redefs [tracking/tracked-event (fn [_] {:metric "mocked-event"})
|
||||
(with-redefs [tracking/metrics-event (fn [_] {:metric "mocked-event"})
|
||||
events/push-event? (fn [_] true)]
|
||||
(let [context {:coeffects {:event [:some-event]
|
||||
:db {:centralized-metrics/enabled? true}}}]
|
||||
|
||||
@@ -1,23 +1,35 @@
|
||||
(ns status-im.contexts.centralized-metrics.tracking
|
||||
(:require
|
||||
[clojure.string]
|
||||
[legacy.status-im.utils.build :as build]
|
||||
[react-native.platform :as platform]))
|
||||
[react-native.platform :as platform]
|
||||
[status-im.navigation.screens :as screens]))
|
||||
|
||||
(defn key-value-event
|
||||
[event-name val-key value]
|
||||
[event-name event-value]
|
||||
{:metric
|
||||
{:eventName event-name
|
||||
:platform platform/os
|
||||
:appVersion build/app-short-version
|
||||
:eventValue {val-key value}}})
|
||||
:eventValue event-value}})
|
||||
|
||||
(defn user-journey-event
|
||||
[action]
|
||||
(key-value-event "user-journey" :action action))
|
||||
(key-value-event "user-journey" {:action action}))
|
||||
|
||||
(defn navigation-event
|
||||
[view-id]
|
||||
(key-value-event "navigation" :viewId view-id))
|
||||
(key-value-event "navigation" {:viewId view-id}))
|
||||
|
||||
(defn screen-event
|
||||
[screen event-data]
|
||||
(let [screen-id (:name screen)
|
||||
view-id (get-in screen [:metrics :alias-id] screen-id)]
|
||||
{:metric
|
||||
{:eventName "navigation"
|
||||
:platform platform/os
|
||||
:appVersion build/app-short-version
|
||||
:eventValue (assoc event-data :viewId (name view-id))}}))
|
||||
|
||||
(def ^:const app-started-event "app-started")
|
||||
|
||||
@@ -25,41 +37,38 @@
|
||||
#{;; Tabs
|
||||
:communities-stack
|
||||
:chats-stack
|
||||
:wallet-stack
|
||||
|
||||
;; Onboarding
|
||||
:screen/onboarding.intro
|
||||
:screen/onboarding.new-to-status
|
||||
:screen/onboarding.sync-or-recover-profile
|
||||
:screen/onboarding.enter-seed-phrase
|
||||
:screen/onboarding.create-profile
|
||||
:screen/onboarding.create-profile-password
|
||||
:screen/onboarding.enable-biometrics
|
||||
:screen/onboarding.generating-keys
|
||||
:screen/onboarding.enable-notifications
|
||||
:screen/onboarding.preparing-status
|
||||
:screen/onboarding.sign-in-intro
|
||||
:screen/onboarding.sign-in
|
||||
:screen/onboarding.syncing-progress
|
||||
:screen/onboarding.syncing-progress-intro
|
||||
:screen/onboarding.syncing-results
|
||||
:screen/onboarding.welcome})
|
||||
:wallet-stack})
|
||||
|
||||
(defn track-view-id-event
|
||||
[view-id]
|
||||
(when (contains? view-ids-to-track view-id)
|
||||
(navigation-event (name view-id))))
|
||||
(if-let [screen (get screens/screens-by-name view-id)]
|
||||
(when (get-in screen [:metrics :track?])
|
||||
(screen-event screen {}))
|
||||
(when (contains? view-ids-to-track view-id)
|
||||
(navigation-event (name view-id)))))
|
||||
|
||||
(defn tracked-event
|
||||
[[event-name second-parameter]]
|
||||
(case event-name
|
||||
(defn navigated-to-collectibles-tab-event
|
||||
[location]
|
||||
(key-value-event "navigated-to-collectibles-tab" {:location location}))
|
||||
|
||||
(defn metrics-event
|
||||
[[rf-event-name rf-event-parameter]]
|
||||
(case rf-event-name
|
||||
:profile/get-profiles-overview-success
|
||||
(user-journey-event app-started-event)
|
||||
|
||||
:centralized-metrics/toggle-centralized-metrics
|
||||
(key-value-event "events.metrics-enabled" :enabled second-parameter)
|
||||
(key-value-event "events.metrics-enabled" {:enabled rf-event-parameter})
|
||||
|
||||
:set-view-id
|
||||
(track-view-id-event second-parameter)
|
||||
(track-view-id-event rf-event-parameter)
|
||||
|
||||
:wallet/select-account-tab
|
||||
(when (= rf-event-parameter :collectibles)
|
||||
(navigated-to-collectibles-tab-event :account))
|
||||
|
||||
:wallet/select-home-tab
|
||||
(when (= rf-event-parameter :collectibles)
|
||||
(navigated-to-collectibles-tab-event :home))
|
||||
|
||||
nil))
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
:platform platform-os
|
||||
:appVersion app-version
|
||||
:eventValue {val-key value}}}]
|
||||
(is (= expected (tracking/key-value-event event-name val-key value))))))
|
||||
(is (= expected (tracking/key-value-event event-name {val-key value}))))))
|
||||
|
||||
(deftest user-journey-event-test
|
||||
(testing "creates correct user journey event"
|
||||
@@ -52,7 +52,7 @@
|
||||
{:eventName "navigation"
|
||||
:platform platform-os
|
||||
:appVersion app-version
|
||||
:eventValue {:viewId "onboarding.create-profile"}}}
|
||||
:eventValue {:viewId "onboarding.create-profile-info"}}}
|
||||
(tracking/track-view-id-event :screen/onboarding.create-profile)))
|
||||
(is (nil? (tracking/track-view-id-event :unknown-stack)))))
|
||||
|
||||
@@ -63,17 +63,23 @@
|
||||
:platform platform-os
|
||||
:appVersion app-version
|
||||
:eventValue {:action tracking/app-started-event}}}
|
||||
(tracking/tracked-event [:profile/get-profiles-overview-success])))
|
||||
(tracking/metrics-event [:profile/get-profiles-overview-success])))
|
||||
(is (= {:metric
|
||||
{:eventName "events.metrics-enabled"
|
||||
:platform platform-os
|
||||
:appVersion app-version
|
||||
:eventValue {:enabled true}}}
|
||||
(tracking/tracked-event [:centralized-metrics/toggle-centralized-metrics true])))
|
||||
(tracking/metrics-event [:centralized-metrics/toggle-centralized-metrics true])))
|
||||
(is (= {:metric
|
||||
{:eventName "navigation"
|
||||
:platform platform-os
|
||||
:appVersion app-version
|
||||
:eventValue {:viewId "wallet-stack"}}}
|
||||
(tracking/tracked-event [:set-view-id :wallet-stack])))
|
||||
(is (nil? (tracking/tracked-event [:unknown-event])))))
|
||||
(tracking/metrics-event [:set-view-id :wallet-stack])))
|
||||
(is (nil? (tracking/metrics-event [:unknown-event])))
|
||||
(is (= {:metric
|
||||
{:eventName "navigation"
|
||||
:platform platform-os
|
||||
:appVersion app-version
|
||||
:eventValue {:viewId "onboarding.intro"}}}
|
||||
(tracking/metrics-event [:set-view-id :screen/onboarding.intro])))))
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
[status-im.constants :as constants]
|
||||
[status-im.contexts.chat.contacts.events :as contacts-store]
|
||||
status-im.contexts.chat.effects
|
||||
status-im.contexts.chat.group-create.events
|
||||
status-im.contexts.chat.group.events
|
||||
[status-im.contexts.chat.messenger.composer.link-preview.events :as link-preview]
|
||||
status-im.contexts.chat.messenger.messages.content.reactions.events
|
||||
[status-im.contexts.chat.messenger.messages.delete-message-for-me.events :as delete-for-me]
|
||||
@@ -33,8 +33,8 @@
|
||||
(multi-user-chat? (get-chat cofx chat-id))))
|
||||
|
||||
(defn public-chat?
|
||||
([chat]
|
||||
(:public? chat))
|
||||
([{:keys [chat-type]}]
|
||||
(= chat-type constants/public-chat-type))
|
||||
([cofx chat-id]
|
||||
(public-chat? (get-chat cofx chat-id))))
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
(defn group-chat?
|
||||
([chat]
|
||||
(and (multi-user-chat? chat)
|
||||
(not (public-chat? chat))))
|
||||
(not (:public? chat))))
|
||||
([cofx chat-id]
|
||||
(group-chat? (get-chat cofx chat-id))))
|
||||
|
||||
|
||||
+32
-35
@@ -1,13 +1,11 @@
|
||||
(ns status-im.contexts.chat.group-create.view
|
||||
(:require [clojure.string :as string]
|
||||
[quo.core :as quo]
|
||||
[quo.foundations.colors :as colors]
|
||||
(ns status-im.contexts.chat.group.common.group-edit
|
||||
(:require [quo.core :as quo]
|
||||
[quo.theme]
|
||||
[react-native.core :as rn]
|
||||
[status-im.common.avatar-picture-picker.view :as avatar-picture-picker]
|
||||
[status-im.common.floating-button-page.view :as floating-button-page]
|
||||
[status-im.constants :as constants]
|
||||
[status-im.contexts.chat.group-create.style :as style]
|
||||
[status-im.contexts.chat.group.common.style :as style]
|
||||
[status-im.contexts.profile.utils :as profile.utils]
|
||||
[utils.debounce :as debounce]
|
||||
utils.emojilib
|
||||
@@ -41,35 +39,28 @@
|
||||
:i/camera]]))
|
||||
|
||||
(defn view
|
||||
[]
|
||||
[{:keys [default-group-name default-group-color default-group-image contacts
|
||||
submit-button-label submit-event back-button-icon chat-id close on-success editing-group?]}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
{window-width :width} (rn/get-window)
|
||||
profile (rf/sub [:profile/profile-with-image])
|
||||
contacts (rf/sub [:selected-group-contacts])
|
||||
contacts-count (count contacts)
|
||||
default-value (rn/use-memo
|
||||
(fn []
|
||||
(let [contact-string (string/join ", "
|
||||
(map
|
||||
profile.utils/displayed-name
|
||||
contacts))]
|
||||
(subs contact-string
|
||||
0
|
||||
(min (count contact-string)
|
||||
constants/max-group-chat-name-length))))
|
||||
[])
|
||||
[group-name set-group-name] (rn/use-state default-value)
|
||||
[group-name set-group-name] (rn/use-state default-group-name)
|
||||
[error-message
|
||||
set-error-message] (rn/use-state nil)
|
||||
group-name-empty? (not (and (string? group-name) (not-empty group-name)))
|
||||
[group-color set-group-color] (rn/use-state (rand-nth colors/account-colors))
|
||||
[group-image set-group-image] (rn/use-state nil)
|
||||
create-group-on-press (rn/use-callback #(debounce/throttle-and-dispatch
|
||||
[:group-chat/create group-name group-color
|
||||
group-image]
|
||||
[group-color set-group-color] (rn/use-state default-group-color)
|
||||
[group-image set-group-image] (rn/use-state default-group-image)
|
||||
on-submit (rn/use-callback #(debounce/throttle-and-dispatch
|
||||
[submit-event
|
||||
{:group-name group-name
|
||||
:group-color group-color
|
||||
:group-image (when (not= group-image
|
||||
default-group-image)
|
||||
group-image)
|
||||
:chat-id chat-id
|
||||
:on-success on-success}]
|
||||
300)
|
||||
[group-name group-color group-image])
|
||||
back-on-press (rn/use-callback #(rf/dispatch [:navigate-back]))
|
||||
on-change-text (rn/use-callback
|
||||
(fn [text]
|
||||
(if (boolean (re-find utils.emojilib/emoji-regex text))
|
||||
@@ -77,7 +68,13 @@
|
||||
{:check (i18n/label
|
||||
:t/emojis)}))
|
||||
(set-error-message nil))
|
||||
(set-group-name text)))]
|
||||
(set-group-name text)))
|
||||
disabled? (or group-name-empty?
|
||||
error-message
|
||||
(and editing-group?
|
||||
(= group-name default-group-name)
|
||||
(= group-color default-group-color)
|
||||
(= group-image default-group-image)))]
|
||||
[floating-button-page/view
|
||||
{:customization-color group-color
|
||||
:gradient-cover? true
|
||||
@@ -85,13 +82,13 @@
|
||||
:header [quo/page-nav
|
||||
{:background :photo
|
||||
:type :no-title
|
||||
:icon-name :i/arrow-left
|
||||
:on-press back-on-press}]
|
||||
:icon-name back-button-icon
|
||||
:on-press close}]
|
||||
:footer [quo/button
|
||||
{:customization-color group-color
|
||||
:disabled? (boolean (or group-name-empty? error-message))
|
||||
:on-press create-group-on-press}
|
||||
(i18n/label :t/create-group-chat)]}
|
||||
:disabled? disabled?
|
||||
:on-press on-submit}
|
||||
submit-button-label]}
|
||||
[:<>
|
||||
[avatar
|
||||
{:customization-color group-color
|
||||
@@ -99,7 +96,7 @@
|
||||
:set-group-image set-group-image}]
|
||||
[quo/title-input
|
||||
{:on-change-text on-change-text
|
||||
:default-value default-value
|
||||
:default-value default-group-name
|
||||
:container-style {:padding-horizontal 20 :padding-top 12 :padding-bottom (if error-message 0 16)}
|
||||
:placeholder (i18n/label :t/name-your-group)
|
||||
:max-length constants/max-group-chat-name-length}]
|
||||
@@ -126,9 +123,9 @@
|
||||
:padding-left (responsiveness/iphone-11-Pro-20-pixel-from-width
|
||||
window-width)}}]]
|
||||
[quo/divider-label
|
||||
(i18n/label :t/n-m-people {:n (inc contacts-count) :m constants/max-group-chat-participants})]
|
||||
(i18n/label :t/n-m-people {:n contacts-count :m constants/max-group-chat-participants})]
|
||||
[rn/view {:style style/tags}
|
||||
(for [contact (conj contacts profile)]
|
||||
(for [contact contacts]
|
||||
^{:key contact}
|
||||
[quo/context-tag
|
||||
{:container-style style/tag
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
(ns status-im.contexts.chat.group-create.style
|
||||
(ns status-im.contexts.chat.group.common.style
|
||||
(:require [quo.foundations.colors :as colors]))
|
||||
|
||||
(def avatar {:width 88 :margin-top 12 :margin-left 20})
|
||||
@@ -0,0 +1,27 @@
|
||||
(ns status-im.contexts.chat.group.create.view
|
||||
(:require
|
||||
[clojure.string :as string]
|
||||
[quo.foundations.colors :as colors]
|
||||
[status-im.constants :as constants]
|
||||
[status-im.contexts.chat.group.common.group-edit :as group-edit]
|
||||
[status-im.contexts.profile.utils :as profile.utils]
|
||||
[utils.i18n :as i18n]
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
(defn view
|
||||
[{:keys [close]}]
|
||||
(let [contacts (rf/sub [:selected-group-contacts])
|
||||
contact-string (string/join ", " (map profile.utils/displayed-name contacts))
|
||||
default-group-name (subs contact-string
|
||||
0
|
||||
(min (count contact-string) constants/max-group-chat-name-length))
|
||||
profile (rf/sub [:profile/profile-with-image])
|
||||
contacts (conj contacts profile)]
|
||||
[group-edit/view
|
||||
{:default-group-name default-group-name
|
||||
:default-group-color (rand-nth colors/account-colors)
|
||||
:contacts contacts
|
||||
:submit-button-label (i18n/label :t/create-group-chat)
|
||||
:submit-event :group-chat/create
|
||||
:back-button-icon :i/arrow-left
|
||||
:close close}]))
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
(ns status-im.contexts.chat.group-details.style
|
||||
(ns status-im.contexts.chat.group.details.style
|
||||
(:require
|
||||
[quo.foundations.colors :as colors]))
|
||||
|
||||
+7
-6
@@ -1,4 +1,4 @@
|
||||
(ns status-im.contexts.chat.group-details.view
|
||||
(ns status-im.contexts.chat.group.details.view
|
||||
(:require
|
||||
[quo.core :as quo]
|
||||
[quo.foundations.colors :as colors]
|
||||
@@ -11,7 +11,7 @@
|
||||
[status-im.common.contact-list.view :as contact-list]
|
||||
[status-im.common.home.actions.view :as actions]
|
||||
[status-im.constants :as constants]
|
||||
[status-im.contexts.chat.group-details.style :as style]
|
||||
[status-im.contexts.chat.group.details.style :as style]
|
||||
[status-im.feature-flags :as ff]
|
||||
[utils.i18n :as i18n]
|
||||
[utils.re-frame :as rf]))
|
||||
@@ -54,7 +54,7 @@
|
||||
(let [theme (quo.theme/use-theme)
|
||||
selected-participants (rf/sub [:group-chat/selected-participants])
|
||||
deselected-members (rf/sub [:group-chat/deselected-members])
|
||||
chat-id (rf/sub [:get-screen-params :group-add-manage-members])
|
||||
chat-id (rf/sub [:get-screen-params :screen/group-add-manage-members])
|
||||
{:keys [admins] :as group} (rf/sub [:chats/chat-by-id chat-id])
|
||||
current-pk (rf/sub [:multiaccount/public-key])
|
||||
admin? (get admins current-pk)]
|
||||
@@ -123,9 +123,9 @@
|
||||
[_]
|
||||
[rn/view {:style {:height 8}}])
|
||||
|
||||
(defn group-details
|
||||
(defn view
|
||||
[]
|
||||
(let [chat-id (rf/sub [:get-screen-params :group-details])
|
||||
(let [chat-id (rf/sub [:get-screen-params :screen/group-details])
|
||||
{:keys [admins chat-id chat-name color muted contacts image]
|
||||
:as group} (rf/sub [:chats/chat-by-id chat-id])
|
||||
members (rf/sub [:contacts/group-members-sections chat-id])
|
||||
@@ -176,7 +176,8 @@
|
||||
:icon :i/add-user
|
||||
:label (i18n/label (if admin? :t/manage-members :t/add-members))
|
||||
:counter-value (count contacts)
|
||||
:on-press #(rf/dispatch [:open-modal :group-add-manage-members
|
||||
:on-press #(rf/dispatch [:open-modal
|
||||
:screen/group-add-manage-members
|
||||
chat-id])}]}]
|
||||
[rn/section-list
|
||||
{:key-fn :title
|
||||
+16
-18
@@ -1,12 +1,12 @@
|
||||
(ns status-im.contexts.chat.group-create.events
|
||||
(ns status-im.contexts.chat.group.events
|
||||
(:require [clojure.string :as string]
|
||||
[legacy.status-im.data-store.chats :as data-store.chats]
|
||||
[oops.core :as oops]
|
||||
[re-frame.core :as rf]
|
||||
[status-im.common.avatar-picture-picker.view :as avatar-picture-picker]))
|
||||
[status-im.common.avatar-picture-picker.view :as avatar-picture-picker]
|
||||
[taoensso.timbre :as log]))
|
||||
|
||||
(rf/reg-event-fx :group-chat/create
|
||||
(fn [{:keys [db]} [group-name color image]]
|
||||
(fn [{:keys [db]} [{:keys [group-name group-color group-image]}]]
|
||||
(let [selected-contacts (:group/selected-contacts db)]
|
||||
{:json-rpc/call [{:method "wakuext_createGroupChatWithMembers"
|
||||
:params [nil group-name (into [] selected-contacts)]
|
||||
@@ -17,25 +17,23 @@
|
||||
(oops/oget :id))]
|
||||
(rf/dispatch [:chat-updated response])
|
||||
(rf/dispatch [:group-chat/edit
|
||||
{:chat-id chat-id
|
||||
:group-name group-name
|
||||
:color color
|
||||
:image image}])))}]})))
|
||||
|
||||
(rf/reg-event-fx :group-chat/edit-success
|
||||
(fn [{:keys [db]} [{:keys [chat-id name color image]}]]
|
||||
(let [new-chat {:name name :color color :image image}]
|
||||
{:db (update-in db [:chats chat-id] #(merge % new-chat))})))
|
||||
{:chat-id chat-id
|
||||
:group-name group-name
|
||||
:group-color group-color
|
||||
:group-image group-image}])))}]})))
|
||||
|
||||
(rf/reg-event-fx :group-chat/edit
|
||||
(fn [_ [{:keys [chat-id group-name color image]}]]
|
||||
(fn [_ [{:keys [chat-id group-name group-color group-image on-success]}]]
|
||||
{:json-rpc/call [{:method "chat_editChat"
|
||||
:params ["" chat-id group-name (name color)
|
||||
{:imagePath (when image (string/replace-first image #"file://" ""))
|
||||
:params ["" chat-id group-name (name group-color)
|
||||
{:imagePath (when group-image
|
||||
(string/replace-first group-image #"file://" ""))
|
||||
:x 0
|
||||
:y 0
|
||||
:width avatar-picture-picker/crop-size
|
||||
:height avatar-picture-picker/crop-size}]
|
||||
:js-response true
|
||||
:on-success #(rf/dispatch [:group-chat/edit-success
|
||||
(data-store.chats/<-rpc-js %)])}]}))
|
||||
:on-error #(log/error "failed to edit group" {:error %})
|
||||
:on-success (fn [response]
|
||||
(rf/dispatch [:chat-updated response true])
|
||||
(when on-success (on-success)))}]}))
|
||||
@@ -0,0 +1,23 @@
|
||||
(ns status-im.contexts.chat.group.update.view
|
||||
(:require
|
||||
[status-im.contexts.chat.group.common.group-edit :as group-edit]
|
||||
[utils.i18n :as i18n]
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
(defn view
|
||||
[{:keys [close]}]
|
||||
(let [chat-id (rf/sub [:get-screen-params :screen/group-update])
|
||||
{:keys [chat-name color image]} (rf/sub [:chats/chat-by-id chat-id])
|
||||
contacts (rf/sub [:contacts/contacts-by-chat chat-id])]
|
||||
[group-edit/view
|
||||
{:default-group-name chat-name
|
||||
:default-group-color color
|
||||
:default-group-image image
|
||||
:contacts contacts
|
||||
:submit-button-label (i18n/label :t/update-group-chat)
|
||||
:submit-event :group-chat/edit
|
||||
:back-button-icon :i/close
|
||||
:chat-id chat-id
|
||||
:close close
|
||||
:on-success close
|
||||
:editing-group? true}]))
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user