Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a870eb7c55 | ||
|
|
168afba00b | ||
|
|
f135a76551 | ||
|
|
617051cba4 | ||
|
|
7832a3a24d | ||
|
|
e22b6dd88a | ||
|
|
9c90775a1d | ||
|
|
4d0c29f72d | ||
|
|
3ed35a023f | ||
|
|
8fe8bafc2c | ||
|
|
d22b8e03c8 | ||
|
|
3b1b4a989c | ||
|
|
34e5b8b426 |
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.18'
|
||||
library 'status-jenkins-lib@v1.9.17'
|
||||
|
||||
/* 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.18'
|
||||
library 'status-jenkins-lib@v1.9.17'
|
||||
|
||||
import groovy.json.JsonBuilder
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.18'
|
||||
library 'status-jenkins-lib@v1.9.17'
|
||||
|
||||
pipeline {
|
||||
agent { label 'linux' }
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env groovy
|
||||
library 'status-jenkins-lib@v1.9.18'
|
||||
library 'status-jenkins-lib@v1.9.17'
|
||||
|
||||
/* 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.18'
|
||||
library 'status-jenkins-lib@v1.9.17'
|
||||
|
||||
/* Options section can't access functions in objects. */
|
||||
def isPRBuild = utils.isPRBuild()
|
||||
|
||||
+2
-2
@@ -920,7 +920,7 @@ PODS:
|
||||
- glog
|
||||
- RCT-Folly (= 2022.05.16.00)
|
||||
- React-Core
|
||||
- react-native-compat (2.17.3):
|
||||
- react-native-compat (2.11.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2022.05.16.00)
|
||||
- React-Core
|
||||
@@ -1536,7 +1536,7 @@ SPEC CHECKSUMS:
|
||||
react-native-blob-util: 600972b1782380a5a7d5db61a3817ea32349dae9
|
||||
react-native-blur: b2b140d3d65077a1d5d26be62d9415f895592344
|
||||
react-native-cameraroll: af8eec1e585d053ff485d98ec837f9a8a11b5745
|
||||
react-native-compat: fd639220cca206df6c74b95df56a1809d78ba5a3
|
||||
react-native-compat: 3af9add14d349701306d3d052638435f6795ac2c
|
||||
react-native-config: 5330c8258265c1e5fdb8c009d2cabd6badd96727
|
||||
react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06
|
||||
react-native-hole-view: 6935448993bac79f2b5a4ad7e9741094cf810679
|
||||
|
||||
-10
@@ -35,11 +35,6 @@ class LogManager(private val reactContext: ReactApplicationContext) : ReactConte
|
||||
return File(pubDirectory, gethLogFileName)
|
||||
}
|
||||
|
||||
private fun getPreLoginLogFile(): File {
|
||||
val pubDirectory = utils.getPublicStorageDirectory()
|
||||
return File(pubDirectory, preLoginLogFileName)
|
||||
}
|
||||
|
||||
fun prepareLogsFile(context: Context): File? {
|
||||
val logFile = getGethLogFile()
|
||||
|
||||
@@ -161,7 +156,6 @@ class LogManager(private val reactContext: ReactApplicationContext) : ReactConte
|
||||
val statusLogFile = File(logsTempDir, statusLogFileName)
|
||||
val gethLogFile = getGethLogFile()
|
||||
val requestLogFile = getRequestLogFile()
|
||||
val preLoginLogFile = getPreLoginLogFile()
|
||||
|
||||
try {
|
||||
if (zipFile.exists() || zipFile.createNewFile()) {
|
||||
@@ -181,9 +175,6 @@ class LogManager(private val reactContext: ReactApplicationContext) : ReactConte
|
||||
if (requestLogFile.exists()) {
|
||||
filesToZip.add(requestLogFile)
|
||||
}
|
||||
if (preLoginLogFile.exists()) {
|
||||
filesToZip.add(preLoginLogFile)
|
||||
}
|
||||
val zipped = zip(filesToZip.toTypedArray(), zipFile, errorList)
|
||||
if (zipped && zipFile.exists()) {
|
||||
zipFile.setReadable(true, false)
|
||||
@@ -214,7 +205,6 @@ class LogManager(private val reactContext: ReactApplicationContext) : ReactConte
|
||||
private const val gethLogFileName = "geth.log"
|
||||
private const val statusLogFileName = "Status.log"
|
||||
private const val requestsLogFileName = "api.log"
|
||||
private const val preLoginLogFileName = "pre_login.log"
|
||||
private const val logsZipFileName = "Status-debug-logs.zip"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ RCT_EXPORT_METHOD(sendLogs:(NSString *)dbJson
|
||||
|
||||
NSURL *mainGethLogsFile = [rootUrl URLByAppendingPathComponent:@"geth.log"];
|
||||
NSURL *mainLogsFile = [logsFolderName URLByAppendingPathComponent:@"geth.log"];
|
||||
NSURL *preLoginLogFile = [rootUrl URLByAppendingPathComponent:@"pre_login.log"];
|
||||
|
||||
NSURL *requestsLogFile = [rootUrl URLByAppendingPathComponent:@"api.log"];
|
||||
|
||||
@@ -47,10 +46,6 @@ RCT_EXPORT_METHOD(sendLogs:(NSString *)dbJson
|
||||
if ([fileManager fileExistsAtPath:requestsLogFile.path]) {
|
||||
[fileManager copyItemAtPath:requestsLogFile.path toPath:[logsFolderName URLByAppendingPathComponent:@"api.log"].path error:nil];
|
||||
}
|
||||
|
||||
if ([fileManager fileExistsAtPath:preLoginLogFile.path]) {
|
||||
[fileManager copyItemAtPath:preLoginLogFile.path toPath:[logsFolderName URLByAppendingPathComponent:@"pre_login.log"].path error:nil];
|
||||
}
|
||||
|
||||
[SSZipArchive createZipFileAtPath:zipFile.path withContentsOfDirectory:logsFolderName.path];
|
||||
[fileManager removeItemAtPath:logsFolderName.path error:nil];
|
||||
|
||||
+270
-229
@@ -8838,8 +8838,8 @@
|
||||
"repo": "https://jitpack.io",
|
||||
"files": {
|
||||
"reflow-animator-1.0.6.pom": {
|
||||
"sha1": "d2c5089ae74a366676d9432c401e373b4895858e",
|
||||
"sha256": "sha256-uanUNC0CwC2YnlQ4rpZBMdp+Is6UF36Y/Iwn6YLLHno="
|
||||
"sha1": "4fe3d33c764beebdc477d93a590f63dfa38a5f6b",
|
||||
"sha256": "sha256-MEINlM+8v6LDFGREWswamEl17l26xa4eQHeKPcxbSI8="
|
||||
},
|
||||
"reflow-animator-1.0.6.aar": {
|
||||
"sha1": "36074a3fcb77c2ba12bd2de7dde81441e0c7504f",
|
||||
@@ -8898,20 +8898,20 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/gradle/github-dependency-graph-gradle-plugin/1.3.2",
|
||||
"path": "org/gradle/github-dependency-graph-gradle-plugin/1.3.1",
|
||||
"repo": "https://plugins.gradle.org/m2",
|
||||
"files": {
|
||||
"github-dependency-graph-gradle-plugin-1.3.2.pom": {
|
||||
"sha1": "0740a44f4c99d3e2d9fbc2c89afcb195ec66dbdf",
|
||||
"sha256": "sha256-xaVDODswVgtoaoIAtgCELvnd8IAx8AYdJA+FE3a0Jxs="
|
||||
"github-dependency-graph-gradle-plugin-1.3.1.pom": {
|
||||
"sha1": "5d95862731c88c1e9190fa27a7bd2ffe3ab549d7",
|
||||
"sha256": "sha256-Zk7PNeEBetpWAp4e2rN5A+zn0NDsG3G5kU62uPssiJo="
|
||||
},
|
||||
"github-dependency-graph-gradle-plugin-1.3.2.jar": {
|
||||
"sha1": "ba3d0995475c6aa79048e865d7923bbed20f36a0",
|
||||
"sha256": "sha256-VdNKG2xBu75P6hSlZaERE3ZxOSSwAaPMjD2EnGSejQA="
|
||||
"github-dependency-graph-gradle-plugin-1.3.1.jar": {
|
||||
"sha1": "c905642b753938ef0fa1cda1fc330fae1c4016aa",
|
||||
"sha256": "sha256-0uYWjgzaasT18c62W6IElG2jW1Oe+X0O/4dflT5E61k="
|
||||
},
|
||||
"github-dependency-graph-gradle-plugin-1.3.2.module": {
|
||||
"sha1": "879866cccedf304d8c484d3bb70eb6d699e9e118",
|
||||
"sha256": "sha256-nBqz4Xbqelt3YhEAEG9aPzYC0+2MBcM1M+1Ys5PumhQ="
|
||||
"github-dependency-graph-gradle-plugin-1.3.1.module": {
|
||||
"sha1": "818778b46a93f8d60f11cfa83c7ecbb2481706d8",
|
||||
"sha256": "sha256-agfZPNoTEZDEU5USp5slvtvCfm5OxZucX7XuZ9xugzU="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -9052,16 +9052,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "commons-codec/commons-codec/1.18.0",
|
||||
"path": "commons-codec/commons-codec/1.17.1",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"commons-codec-1.18.0.pom": {
|
||||
"sha1": "2aa7395e4e4d63be2fd4439da7a01527235f76bf",
|
||||
"sha256": "sha256-dLkW2ksDhMYZ5t1MGN7+iqQ4f3lSBSU8+0u7L0WM3c4="
|
||||
"commons-codec-1.17.1.pom": {
|
||||
"sha1": "d187e2d50ab520895df0dcb9d88980ffea50bfa3",
|
||||
"sha256": "sha256-f6DbTYFQ2vkylYuK6onuJKu00Y4jFqXeU1J4/BMVEqA="
|
||||
},
|
||||
"commons-codec-1.18.0.jar": {
|
||||
"sha1": "ee45d1cf6ec2cc2b809ff04b4dc7aec858e0df8f",
|
||||
"sha256": "sha256-ugBfMEzvkqPe3iSjitWsm4r8zw2PdYOdbBM4Y0z39uQ="
|
||||
"commons-codec-1.17.1.jar": {
|
||||
"sha1": "973638b7149d333563584137ebf13a691bb60579",
|
||||
"sha256": "sha256-+fbLED8t3DyZqdgK2irnvwaFER/Wv/zLcgM9HaTm/yM="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -9135,20 +9135,20 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "commons-logging/commons-logging/1.3.5",
|
||||
"path": "commons-logging/commons-logging/1.3.4",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"commons-logging-1.3.5.pom": {
|
||||
"sha1": "378e7ead6461eabd50a97f6503d061cad0dcae9d",
|
||||
"sha256": "sha256-zPSjA0b1AnuUlqvVYpCsJtFZq/K+ZN8SZWEdyUALnWg="
|
||||
"commons-logging-1.3.4.pom": {
|
||||
"sha1": "e919eab34a66d31a9bbe15ddc563d7d2e6770826",
|
||||
"sha256": "sha256-1L2jSJKqzL9PrTP8MjqKqQfvnXmYRlnaJJRMCoa/CGU="
|
||||
},
|
||||
"commons-logging-1.3.5-api.jar": {
|
||||
"sha1": "2e234baf9b0fd82e4e2f0db3b9083900fbfe2f36",
|
||||
"sha256": "sha256-6WjRzl2r6cQzxHbTd+ZSJzD2FttdtdKO2sfEWMtVMdw="
|
||||
"commons-logging-1.3.4-api.jar": {
|
||||
"sha1": "de4050262dfa7522365a9e3c76ed8cf4683fcffa",
|
||||
"sha256": "sha256-X1zVkiUzQHDbaxctBaaFuEei+tY+WxjtAjqqpeErgh8="
|
||||
},
|
||||
"commons-logging-1.3.5.jar": {
|
||||
"sha1": "a3fcc5d3c29b2b03433aa2d2f2d2c1b1638924a1",
|
||||
"sha256": "sha256-bXp0TkAnZJ+7UIld+Ul9EJ+Yx2amNwYv6NLqu7MUC6Q="
|
||||
"commons-logging-1.3.4.jar": {
|
||||
"sha1": "b9fc14968d63a8b8a8a2c1885fe3e90564239708",
|
||||
"sha256": "sha256-vC3+MvHvBlCeagZRRMGt97Qg6r8RqH8wvRJ/j6ozIBY="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -11836,12 +11836,12 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/code/gson/gson-parent/2.12.1",
|
||||
"path": "com/google/code/gson/gson-parent/2.11.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"gson-parent-2.12.1.pom": {
|
||||
"sha1": "660107b2e76095ef86bbd15c503afe11e5260bfb",
|
||||
"sha256": "sha256-yeewt+Mb574iaEl5wGgAHGUssRPE5u2JTjm2Q97gf8E="
|
||||
"gson-parent-2.11.0.pom": {
|
||||
"sha1": "b32d3bc5c89c852efe4c176df6c3fdeccbe150ef",
|
||||
"sha256": "sha256-issfO3Km8CaRasBzW62aqwKT1Sftt7NlMn3vE6k2e3o="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -11967,24 +11967,24 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/code/gson/gson/2.12.1",
|
||||
"path": "com/google/code/gson/gson/2.11.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"gson-2.12.1.pom": {
|
||||
"sha1": "d2c3993ff96e5da39a57e5e0b695eda560949b57",
|
||||
"sha256": "sha256-C1c17IX0UoLx4sdpd5gAQnsVCoFj9AUJOpKAtxyrGXg="
|
||||
"gson-2.11.0.pom": {
|
||||
"sha1": "55796dd7cc329027df79e96c4e6631e3c02c93c5",
|
||||
"sha256": "sha256-wOVHvqmYiI5uJcWIapDnYicryItSdTQ90sBd7Wyi42A="
|
||||
},
|
||||
"gson-2.12.1.buildinfo": {
|
||||
"sha1": "c2e219d4a63eebf78ce409ee8303eb930248f486",
|
||||
"sha256": "sha256-fNm4d7ep72MLsQq/BeBRdEuam/9hzGJafTURb48yeuY="
|
||||
"gson-2.11.0.buildinfo": {
|
||||
"sha1": "4d1c42ee3c07943d8e07fab98bf0491877b4c0c6",
|
||||
"sha256": "sha256-d6O/J0uIwA+ieS0kkb+yLkeL3OUzOMUcMBHW7nDr0pI="
|
||||
},
|
||||
"gson-2.12.1.buildinfo.asc": {
|
||||
"sha1": "01ba63402708ab4efbd2fa2f4dc5ee7f136b9479",
|
||||
"sha256": "sha256-M+At44sk0y+mblm7UnhRzYzeO36NPGTpP3rTID/wJjU="
|
||||
"gson-2.11.0.buildinfo.asc": {
|
||||
"sha1": "ba50162dd390a51e11a706d62ef9a5d120138337",
|
||||
"sha256": "sha256-blLhhVcT0w8htC6V6rrqU+CZ3egMLBv5AgE76D+zGIY="
|
||||
},
|
||||
"gson-2.12.1.jar": {
|
||||
"sha1": "4e773a317740b83b43cfc3d652962856041697cb",
|
||||
"sha256": "sha256-6+4T1ft0d81/HMAQ4MNW34yoBwlxUkjal/eeNcy0++w="
|
||||
"gson-2.11.0.jar": {
|
||||
"sha1": "527175ca6d81050b53bdd4c457a6d6e017626b0e",
|
||||
"sha256": "sha256-V5KNblpu3rKr03cKj5W6RNzkXzsjt6ncKzCcWBVSp4s="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12199,6 +12199,21 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/errorprone/error_prone_annotations/2.27.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"error_prone_annotations-2.27.0.pom": {
|
||||
"sha1": "85103026aa50b0e4efafee8f486e3ecd9ebfde31",
|
||||
"sha256": "sha256-TKWjXWEjXhZUmsNG0eNFUc3w/ifoSqV+A8vrJV6k5do="
|
||||
},
|
||||
"error_prone_annotations-2.27.0.jar": {
|
||||
"sha1": "91b2c29d8a6148b5e2e4930f070d4840e2e48e34",
|
||||
"sha256": "sha256-JMkjNyxY410LnxagKJKbua7cd1IYZ8J08r0HNd9bofU="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/errorprone/error_prone_annotations/2.36.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -12335,6 +12350,17 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/errorprone/error_prone_parent/2.27.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"error_prone_parent-2.27.0.pom": {
|
||||
"sha1": "336f77abf2668b10cae4ab136ea0c8258875de00",
|
||||
"sha256": "sha256-+oGCnQSVWd9pJ/nJpv1rvQn4tQ5tRzaucsgwC2w9dlQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/errorprone/error_prone_parent/2.36.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -12535,27 +12561,27 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/guava/guava-parent/33.4.0-jre",
|
||||
"path": "com/google/guava/guava-parent/33.3.1-jre",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"guava-parent-33.4.0-jre.pom": {
|
||||
"sha1": "ee79b87abc4ef9b3591db13c59de368c7b03dc79",
|
||||
"sha256": "sha256-Okme00oNnuDxvMOSMAIaHNTi990EJqtoRPWFRl1B3Nc="
|
||||
"guava-parent-33.3.1-jre.pom": {
|
||||
"sha1": "94729a0ed1dc35f623edd13afa6c1c2fe9a15d7c",
|
||||
"sha256": "sha256-VUQdsn6Iad/v4FMFm99Hi9x+lVhWQr85HwAjNF/VYoc="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/guava/guava-testlib/33.4.0-jre",
|
||||
"path": "com/google/guava/guava-testlib/33.3.1-jre",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"guava-testlib-33.4.0-jre.pom": {
|
||||
"sha1": "f92730965d606702deb41eca3afb47396b7a5c6a",
|
||||
"sha256": "sha256-p+EQNjDV99XYCN3NnbnVhLvVldRW2UxpHOwJDQ7qZ/A="
|
||||
"guava-testlib-33.3.1-jre.pom": {
|
||||
"sha1": "12fbde61e46674436b0ec48f9b54fbd5f78f8256",
|
||||
"sha256": "sha256-4n6bu2lrvSCUeAF1YUO9EazSCFBFSnEILoceA+27PSw="
|
||||
},
|
||||
"guava-testlib-33.4.0-jre.jar": {
|
||||
"sha1": "e849ea71846b5ca96387d543c7ac862f18fe2513",
|
||||
"sha256": "sha256-JF+agJa8uth2DSga3QKf4klh/pOZ3f6as3srsLCe7WI="
|
||||
"guava-testlib-33.3.1-jre.jar": {
|
||||
"sha1": "a2eeefe29ae8a5b2b6d3a318295fa9a1925bdc61",
|
||||
"sha256": "sha256-j943uKx8GbgmwhbfKvPXEd9JRb/baLPx5qHD9KUng1w="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12741,20 +12767,20 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/guava/guava/33.4.0-jre",
|
||||
"path": "com/google/guava/guava/33.3.1-jre",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"guava-33.4.0-jre.pom": {
|
||||
"sha1": "5c671f0be7aa66b15ed0ec2e1afb4ee99c8c78e8",
|
||||
"sha256": "sha256-+pTbQAIt38d1r57PsTDM5RW5b3QNr4LyCvhG2VBUE0s="
|
||||
"guava-33.3.1-jre.pom": {
|
||||
"sha1": "5a5628b34628748abcb73144a909ddbea2265ed9",
|
||||
"sha256": "sha256-MTtn/BPrOwY07acVoSKZcfXem4GIvCgHYoFbg6J18ZM="
|
||||
},
|
||||
"guava-33.4.0-jre.jar": {
|
||||
"sha1": "03fcc0a259f724c7de54a6a55ea7e26d3d5c0cac",
|
||||
"sha256": "sha256-uRjJin5E2+lOvZ/j5Azdqttak+anjrYAi0LfI3JB5Tg="
|
||||
"guava-33.3.1-jre.jar": {
|
||||
"sha1": "852f8b363da0111e819460021ca693cacca3e8db",
|
||||
"sha256": "sha256-S/Dixa+ORSXJbo/eF6T3MH+X+EePEcTI41oOMpiuTpA="
|
||||
},
|
||||
"guava-33.4.0-jre.module": {
|
||||
"sha1": "edaf59b47aef1afba209dfafe1481ed86ff07f04",
|
||||
"sha256": "sha256-gg6BfobEk6p6/9bLuZHuYJJbbIt0VB90LLIgcPbyBFk="
|
||||
"guava-33.3.1-jre.module": {
|
||||
"sha1": "c99293bbf166d01849489fc6f94a101f79072aa7",
|
||||
"sha256": "sha256-QYWMhHU/2WprfFESL8zvOVWMkcwIJk4IUGvPIODmNzM="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12927,12 +12953,12 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/protobuf/protobuf-bom/4.30.0-RC1",
|
||||
"path": "com/google/protobuf/protobuf-bom/4.29.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"protobuf-bom-4.30.0-RC1.pom": {
|
||||
"sha1": "da26e5286a508eb4c29c3294f34d2fb932916cce",
|
||||
"sha256": "sha256-Gs5LZwG6EhofKfwcjoPgc9pKFKCgex2GkjeMwK+GDYM="
|
||||
"protobuf-bom-4.29.0.pom": {
|
||||
"sha1": "5542df7ac3708da8bf30756f4ee6d804d04b8c9b",
|
||||
"sha256": "sha256-3L/Apl6DmDAE0HFOmL8NIGBwEUVbYhk5cowAkmvIyZk="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -13178,16 +13204,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/protobuf/protobuf-java/4.30.0-RC1",
|
||||
"path": "com/google/protobuf/protobuf-java/4.29.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"protobuf-java-4.30.0-RC1.pom": {
|
||||
"sha1": "9b1a4031569c7b624e2e7e0d7bb12fd752f37e39",
|
||||
"sha256": "sha256-3A0yPW415z4X6ICF0obJblY2xk8N8WcLCULsC8MYass="
|
||||
"protobuf-java-4.29.0.pom": {
|
||||
"sha1": "27c4abe9c47f4aed31cf7acff86853a05f7e85f0",
|
||||
"sha256": "sha256-7cHftEVG5yel+sU/CQUGv6aN2DB65vEHbv+tVy+S16Q="
|
||||
},
|
||||
"protobuf-java-4.30.0-RC1.jar": {
|
||||
"sha1": "fe024780d64bf9edeb16d33974fd06799758a9e5",
|
||||
"sha256": "sha256-ywRRWEELxFcCkN+AagbwIbYvLB4m7X4dtlczp8PzXoU="
|
||||
"protobuf-java-4.29.0.jar": {
|
||||
"sha1": "ffea90ab158435d68de76951857ef5f8b0f98365",
|
||||
"sha256": "sha256-FpAYUevl6J/oiqrTwmhmNzaVvC4wYnu4kyhH4vX8LnY="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -13307,12 +13333,12 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/google/protobuf/protobuf-parent/4.30.0-RC1",
|
||||
"path": "com/google/protobuf/protobuf-parent/4.29.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"protobuf-parent-4.30.0-RC1.pom": {
|
||||
"sha1": "bfd3c39ebcb48274c73c80b82a2925b26a2aea80",
|
||||
"sha256": "sha256-vBZlQhUkJXKX06FCuoKNYc5/hD86HDSonJ4agltkvxQ="
|
||||
"protobuf-parent-4.29.0.pom": {
|
||||
"sha1": "c35e0844930aea715cc8f4335fee49223b1fe35c",
|
||||
"sha256": "sha256-jU6O2nh45revZuPCtvWHE839P7bNsHGS3My2HN0uSTA="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -13626,20 +13652,20 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okio/okio-jvm/3.10.2",
|
||||
"path": "com/squareup/okio/okio-jvm/3.9.1",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"okio-jvm-3.10.2.pom": {
|
||||
"sha1": "bf3c29f09bf646535ba5a72206280bd5d9631d90",
|
||||
"sha256": "sha256-AP000Iv0YxNiofVSLKpXyuKMosfpOS76My72Vs/anUM="
|
||||
"okio-jvm-3.9.1.pom": {
|
||||
"sha1": "32a1fc013a444bd5d7c45346973c102d02dbeb1e",
|
||||
"sha256": "sha256-VXZInO8kBTNoAPxt6VhUU18zVxpO/lpa0OybmwkNIdU="
|
||||
},
|
||||
"okio-jvm-3.10.2.jar": {
|
||||
"sha1": "6a2cc3acd5a83e66075a2f6c5b0608b6043fa34c",
|
||||
"sha256": "sha256-/Qp+dsZzHwDpILe8EcBdgjqTIEVDGt1Ujgld4CCmnt4="
|
||||
"okio-jvm-3.9.1.jar": {
|
||||
"sha1": "79696e3f4ff05d41ba2b3dc68adb5808a2e5dc53",
|
||||
"sha256": "sha256-/m/pE3j5v6ewjDhkgozkGABc8orMoS6IR+tlxWXDdQA="
|
||||
},
|
||||
"okio-jvm-3.10.2.module": {
|
||||
"sha1": "e1125ef565c7f5fd6fbf0f925188c81febe1d0ee",
|
||||
"sha256": "sha256-p4CkJMVx4odVASiuADMjVibf/iFsuNs7ICRkmWrZaPA="
|
||||
"okio-jvm-3.9.1.module": {
|
||||
"sha1": "470544322c29b112668d2018c05fd94107b05e26",
|
||||
"sha256": "sha256-sK+pGSxC18Rj3jjWMlk2xpAdnjtxSXNf/RihHfMQNKs="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -13732,20 +13758,20 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okio/okio/3.10.2",
|
||||
"path": "com/squareup/okio/okio/3.9.1",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"okio-3.10.2.pom": {
|
||||
"sha1": "3d4a51279ef5bc796682828afd74ef3ab54ad543",
|
||||
"sha256": "sha256-7lbAIUoPqfER2nExxVDo3ICvDL9WCVbBzNosZtdQa0E="
|
||||
"okio-3.9.1.pom": {
|
||||
"sha1": "1cd169f2bbe6215607a62447b9e4b64a125b5e56",
|
||||
"sha256": "sha256-06DDd+epr8zbsCqrXgUNwhL/2pQNvUcOo5cSpDQt8I4="
|
||||
},
|
||||
"okio-3.10.2.jar": {
|
||||
"sha1": "5117e7c820a89b5722cc37fc9152d54131d4cd36",
|
||||
"sha256": "sha256-3iJdy5APSY2cdVGHpEx043V2vYk62pa4bbYRDiellRM="
|
||||
"okio-3.9.1.jar": {
|
||||
"sha1": "3f1067fc8f61b89e013ea121198c49c991d74cbb",
|
||||
"sha256": "sha256-mcjrvEmV8p3ViwXXVYP8yLlX2yHu64xdiXM/DTSVWJc="
|
||||
},
|
||||
"okio-3.10.2.module": {
|
||||
"sha1": "0e038c29ef477f04b63b0f29847815c52decf3be",
|
||||
"sha256": "sha256-P94fn79yxsMm1eiktTL0/Z/aLdDLFEK8pODHl9FBI4c="
|
||||
"okio-3.9.1.module": {
|
||||
"sha1": "eaa18fe21ddaef8640880e11315ef39757fbc75f",
|
||||
"sha256": "sha256-m5C0J0pa1gLdV01tS0iQNmOy3ppgufw0AiSCk9hD4SE="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15233,16 +15259,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "io/netty/netty-tcnative-classes/2.0.70.Final",
|
||||
"path": "io/netty/netty-tcnative-classes/2.0.69.Final",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"netty-tcnative-classes-2.0.70.Final.pom": {
|
||||
"sha1": "c1e1a8fdfb72675d90886ad28a6949529f798b1a",
|
||||
"sha256": "sha256-QRtGiEv20l66H2RTU5HsWxCH6Rjg5T0iTkIgoE+zJnU="
|
||||
"netty-tcnative-classes-2.0.69.Final.pom": {
|
||||
"sha1": "ee65d639d3c5312a4b6369f0d59504ad0c8dfe0b",
|
||||
"sha256": "sha256-WdoPlJ4r7on1cR6z4Mb9jPeRTmtwwAfza56waIJDAVw="
|
||||
},
|
||||
"netty-tcnative-classes-2.0.70.Final.jar": {
|
||||
"sha1": "5f75accc769e69f2e6c1e56ba3a08b6c4bcc25f8",
|
||||
"sha256": "sha256-p5wVeTE9StSKPswdAaJdoG0i1kScO8w2nCMYdJvPVbw="
|
||||
"netty-tcnative-classes-2.0.69.Final.jar": {
|
||||
"sha1": "0f018f36b688bafabe4573af230a8b59cf3c0713",
|
||||
"sha256": "sha256-C7woSMsJnrP29Ow2UBs2AOGChFfNpB1TMGh/YB7gS+8="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15259,12 +15285,12 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "io/netty/netty-tcnative-parent/2.0.70.Final",
|
||||
"path": "io/netty/netty-tcnative-parent/2.0.69.Final",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"netty-tcnative-parent-2.0.70.Final.pom": {
|
||||
"sha1": "b5573ffca02a2c092bdb0f7e5efb7da495523ea4",
|
||||
"sha256": "sha256-gHWl5UlncBGgcXXZuNqWOli4hLMujhAbdeeBUhc/3DU="
|
||||
"netty-tcnative-parent-2.0.69.Final.pom": {
|
||||
"sha1": "ba3c1cc69d48f0196ee84ecd3c5157c52a987931",
|
||||
"sha256": "sha256-KVMCcZZjdhDIlPMr2nBQk82HaDFcnxpXOVGnXxeGmvw="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15742,16 +15768,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/bytebuddy/byte-buddy-agent/1.15.11",
|
||||
"path": "net/bytebuddy/byte-buddy-agent/1.15.4",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"byte-buddy-agent-1.15.11.pom": {
|
||||
"sha1": "4015ca3530951c4336155d578de83f0e6b900f8c",
|
||||
"sha256": "sha256-tfoTlvFHl7jYCIJ+d0O6il8gO0iJvjLklj1EvV7XWag="
|
||||
"byte-buddy-agent-1.15.4.pom": {
|
||||
"sha1": "9440b88e2dfa9fb64979d9150453e5535c45e7d3",
|
||||
"sha256": "sha256-UJEHS07O1v8WbjlDlHRk/0Lac5Y4BC34aDuj6MIJ51U="
|
||||
},
|
||||
"byte-buddy-agent-1.15.11.jar": {
|
||||
"sha1": "a38b16385e867f59a641330f0362ebe742788ed8",
|
||||
"sha256": "sha256-MW0sB5XCpNTEdW8ub5NJg3x0MKw04Ed+rYdNBfXMGeU="
|
||||
"byte-buddy-agent-1.15.4.jar": {
|
||||
"sha1": "58e850dde88f3cf20f41f659440bef33f6c4fe02",
|
||||
"sha256": "sha256-HXbe/RWaVkuct6lo0N6ic2e4tw6951qWjn7xkhvHXuQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15778,6 +15804,17 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/bytebuddy/byte-buddy-parent/1.15.4",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"byte-buddy-parent-1.15.4.pom": {
|
||||
"sha1": "d8cc6c53d8cda7c416764d4e4a74183546e1e5a2",
|
||||
"sha256": "sha256-lwLCIT4/23CHv9M0tjQ80F9EUIqT64+Uqn2mVKwftI8="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/bytebuddy/byte-buddy-parent/1.15.10",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -15789,17 +15826,6 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/bytebuddy/byte-buddy-parent/1.15.11",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"byte-buddy-parent-1.15.11.pom": {
|
||||
"sha1": "80e27b5d9cf8ba40dfd0b8ee8f7915d7237aec6d",
|
||||
"sha256": "sha256-jcUZ16PnkhEqfNhB6vvsTwDbxjPQha3SDEXwq0dspJY="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/bytebuddy/byte-buddy/1.11.13",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -15830,6 +15856,21 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/bytebuddy/byte-buddy/1.15.4",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"byte-buddy-1.15.4.pom": {
|
||||
"sha1": "1bab74a93db543cc550920d0cd7d58d8734bda4d",
|
||||
"sha256": "sha256-L7uet+1bcChb8EOXvnjcKoUdDcLnSGXYFJfGGomOIb0="
|
||||
},
|
||||
"byte-buddy-1.15.4.jar": {
|
||||
"sha1": "e8bd42992701720649765383ff570f415190b83f",
|
||||
"sha256": "sha256-Smg9g/8hnyDUTzXKMC2CHgxoQuP6j58e6RPrFvSc7Gw="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/bytebuddy/byte-buddy/1.15.10",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -15845,21 +15886,6 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/bytebuddy/byte-buddy/1.15.11",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"byte-buddy-1.15.11.pom": {
|
||||
"sha1": "c625e547e59a502e99eba31c1a5b1c514e8c64f5",
|
||||
"sha256": "sha256-IFuLJUGWcX6B2tZyu4aacZr8lt8pf5fYEe/+H0NlPa4="
|
||||
},
|
||||
"byte-buddy-1.15.11.jar": {
|
||||
"sha1": "f61886478e0f9ee4c21d09574736f0ff45e0a46c",
|
||||
"sha256": "sha256-+giZiq4ee9roO94HEsUOhETXHA4MGWuyJHrejUrQ65A="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "net/java/dev/jna/jna-platform/5.6.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -16433,6 +16459,17 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/apache/32",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"apache-32.pom": {
|
||||
"sha1": "2e08f841a6fbc946452701faaf5e39a17ac97ef3",
|
||||
"sha256": "sha256-z9hywOwn9Trmj0PbwP7N7YrddzB5pTr705DkB7Qs5y8="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/apache/33",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -16666,6 +16703,28 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/commons/commons-parent/71",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"commons-parent-71.pom": {
|
||||
"sha1": "91d35791f5037779fb320d054ed09cb14925dc32",
|
||||
"sha256": "sha256-lbe+cPMWrkyiL2+90I3iGC6HzYdKZQ3nw9M4anR6gqM="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/commons/commons-parent/72",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"commons-parent-72.pom": {
|
||||
"sha1": "cdfbaff82e756be4cb74d3f09b8fbf8f6b06c79d",
|
||||
"sha256": "sha256-Q0Xev8dnsa6saKvdcvxn0YtSHUs5A3KhG2P/DFhrIyA="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/commons/commons-parent/78",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -16677,28 +16736,6 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/commons/commons-parent/79",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"commons-parent-79.pom": {
|
||||
"sha1": "a2f13e0fa1f22588976e02c39b840653986ba685",
|
||||
"sha256": "sha256-Yo3zAUis08SRz8trc8euS1mJ5VJqsTovQo3qXUrRDXo="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/commons/commons-parent/81",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"commons-parent-81.pom": {
|
||||
"sha1": "4a342190fb243a221636ac0e0b02d3eed07a9908",
|
||||
"sha256": "sha256-NI1OfBMb5hFMhUpxnOekQwenw5vTZghJd7JP0prQ7bQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/httpcomponents/httpclient/4.1.1",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -17434,20 +17471,20 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/checkerframework/checker-qual/3.49.0",
|
||||
"path": "org/checkerframework/checker-qual/3.48.2",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"checker-qual-3.49.0.pom": {
|
||||
"sha1": "d13e380978f7ccc023bfef031f9d664d52c3877e",
|
||||
"sha256": "sha256-yEUftI7+1jgbMpFG1PrvtvTYq/E79XLCaosawoCW54A="
|
||||
"checker-qual-3.48.2.pom": {
|
||||
"sha1": "95acb8356a028eeb22171b7330f7bb78cf0f9506",
|
||||
"sha256": "sha256-Sk+LlzEYgyx4SrUIpzAJ2tAt5Nq/0dFJLWa45MC6HRE="
|
||||
},
|
||||
"checker-qual-3.49.0.jar": {
|
||||
"sha1": "54be36cb42c9b991c109e467e2bfa82af4cda44e",
|
||||
"sha256": "sha256-i52aNuqvfA/CZQPIPNl9jJwPnikTzCpukqwmxzXU3L4="
|
||||
"checker-qual-3.48.2.jar": {
|
||||
"sha1": "2a4797df796b23026b8215545b0d2936bacc52af",
|
||||
"sha256": "sha256-ryPyDJlbL+3jWx66gRd6mmaUTsZ7jk3uGapMwLcQxrU="
|
||||
},
|
||||
"checker-qual-3.49.0.module": {
|
||||
"sha1": "b6e4941f8d6af0d46a496f72d1b8944e0ed8fd5d",
|
||||
"sha256": "sha256-YA0Z+9XjfemEh8OYBF4UCmUc9brRx5xcl88MyYRMQuQ="
|
||||
"checker-qual-3.48.2.module": {
|
||||
"sha1": "cdf30d8d4b97e12fc85e65e1bd55210a1a084b10",
|
||||
"sha256": "sha256-D2RjlMmz5KL1aitsZ6C0NAkqxrq3pJvC/wGtjKf08NU="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -19864,16 +19901,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-reflect/2.1.20-Beta2",
|
||||
"path": "org/jetbrains/kotlin/kotlin-reflect/2.1.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"kotlin-reflect-2.1.20-Beta2.pom": {
|
||||
"sha1": "1f22f7def1b72d86f0122e94963556693dcd9054",
|
||||
"sha256": "sha256-TSmv4VZwoDfXO+C2ohrnzhcbhR5hQPWOERDtz2j/Djo="
|
||||
"kotlin-reflect-2.1.0.pom": {
|
||||
"sha1": "6c72cb76dbf12249eec091d5a7d6ea27a27fcc87",
|
||||
"sha256": "sha256-nNhLPU9xfJYjXkujtydolcz/1V3kEcfOCz97q1Yu/kI="
|
||||
},
|
||||
"kotlin-reflect-2.1.20-Beta2.jar": {
|
||||
"sha1": "9747e5ae1b3b47d83f7a810fbdd603c90cd5b0ad",
|
||||
"sha256": "sha256-MsWsLXYMzUpOX6IMg2JMSqx4DN7upMURajx3sgHgs4E="
|
||||
"kotlin-reflect-2.1.0.jar": {
|
||||
"sha1": "dc3753b59b67d79b7d2f546d51e22a0ec1f082d8",
|
||||
"sha256": "sha256-tfYI7fqYqM+iNyzBLRitqXS+HFbBCT7/BswGH0/AiLI="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -21514,6 +21551,33 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib/1.9.25",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"kotlin-stdlib-1.9.25.pom": {
|
||||
"sha1": "cd80842137758a376e09fd243351e10abb0fa13c",
|
||||
"sha256": "sha256-fcMxikdte5AtDSevm1b2Y+jMQmOi0zrQUMertlpbZ6E="
|
||||
},
|
||||
"kotlin-stdlib-1.9.25-all.jar": {
|
||||
"sha1": "6c69e7b26179394dafd3c90e630ef763b8c1a267",
|
||||
"sha256": "sha256-zsOLwzAucqiq+c3kNrWpBx7gMx4q0F6E2LuJczTX6dQ="
|
||||
},
|
||||
"kotlin-stdlib-1.9.25-common.jar": {
|
||||
"sha1": "4c7276a1529397ee6389483a408c57a9c6d4ca7d",
|
||||
"sha256": "sha256-zBF0wWk6JC3Wy8gWpSfEU+BBhJTjbFDNxleL9AFxrNs="
|
||||
},
|
||||
"kotlin-stdlib-1.9.25.jar": {
|
||||
"sha1": "f700a2f2b8f0d6d0fde48f56d894dc722fb029d7",
|
||||
"sha256": "sha256-+c3Nv/H13oU4CuUml35oNybCqkLbHtbm5Qronklulf0="
|
||||
},
|
||||
"kotlin-stdlib-1.9.25.module": {
|
||||
"sha1": "b36cccb05e35f533bf4a44ce7ba25dca4d356a2b",
|
||||
"sha256": "sha256-Q+BqZsO3XKPkxcswSWjqg1ImJHuj9WExK9Gepi3oRqc="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib/2.1.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -21537,29 +21601,6 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib/2.1.20-Beta2",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"kotlin-stdlib-2.1.20-Beta2.pom": {
|
||||
"sha1": "4f06272e28b5e94f321d4f5e999110a95d93ea05",
|
||||
"sha256": "sha256-MO2EkKrOoo71CWbghKGSZ/P1JqCL87tkkKUHe7fIgn4="
|
||||
},
|
||||
"kotlin-stdlib-2.1.20-Beta2-all.jar": {
|
||||
"sha1": "919751264e79f13e6ec79f4eef1d5222e6520d31",
|
||||
"sha256": "sha256-geB9406Esp4U8/3vkC9LxM8dXalZuGffaD++HMVM4eE="
|
||||
},
|
||||
"kotlin-stdlib-2.1.20-Beta2.jar": {
|
||||
"sha1": "98e06078584a3b816315d9baee83d04022f3271c",
|
||||
"sha256": "sha256-dDREYP6u8bxGO6aeUtUOfbAEn3E4uECxzz+yKom8/Vk="
|
||||
},
|
||||
"kotlin-stdlib-2.1.20-Beta2.module": {
|
||||
"sha1": "42afc0b12293bb6474c45f25c4da99ae6fb16103",
|
||||
"sha256": "sha256-SnA8ORhx/5f6h1qdImY6A3werSKT5SZ+CDK7U2pMHrY="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-tooling-core/1.8.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -21760,16 +21801,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/json/json/20250107",
|
||||
"path": "org/json/json/20240303",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"json-20250107.pom": {
|
||||
"sha1": "91b62e77c1b5a92b6dc79f8c0c154311e1477c85",
|
||||
"sha256": "sha256-ph+87jbeXMAb7ZMEYseLwEvBZBCwHZtfEABq8UoRvFY="
|
||||
"json-20240303.pom": {
|
||||
"sha1": "78c0fa2a26888461731e26603ef4b19cc53239ca",
|
||||
"sha256": "sha256-mUuvXYm/TKpc6WjkxOqxNcj5eD7PTSt7Dp0cik3fHk8="
|
||||
},
|
||||
"json-20250107.jar": {
|
||||
"sha1": "a1b5f0b5a1ce018b93a691c57ffc7d141b3a10f1",
|
||||
"sha256": "sha256-hdTBqxktMRf9Asf/8ewP5jreRc9W3vf+lQ7wYM8G6Z8="
|
||||
"json-20240303.jar": {
|
||||
"sha1": "0ebb88e8fb5122b7506d5cf1d69f1ccdb790d22a",
|
||||
"sha256": "sha256-PPbNaJLjLitMHDng9S9SSKL1s3ZG/fu3mma0a2GEFO0="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -21809,16 +21850,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/junit/junit-bom/5.12.0-RC2",
|
||||
"path": "org/junit/junit-bom/5.11.3",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"junit-bom-5.12.0-RC2.pom": {
|
||||
"sha1": "f7f31a9a73bd214137a5e22c45da37aa8fa893a1",
|
||||
"sha256": "sha256-9H9ulor+J1iVBQAkFvwfbn78IHHc1HMNSDTUUp/XY+E="
|
||||
"junit-bom-5.11.3.pom": {
|
||||
"sha1": "ff35120d66bcbdd05c8b94b57b08b9d30f15c343",
|
||||
"sha256": "sha256-8T3y5Mrx/rzlZ2Z+fDeBAaAzHVPRMk1uLf467Psfd3Q="
|
||||
},
|
||||
"junit-bom-5.12.0-RC2.module": {
|
||||
"sha1": "49aa327f7c618b489654a7ac980a5647adf95be4",
|
||||
"sha256": "sha256-5S09WIMqPhrcc3ky5x9gjbj5lefgLRpDmNjdhKDH/2o="
|
||||
"junit-bom-5.11.3.module": {
|
||||
"sha1": "cbe8d3c987c55bc57869f232f052c0df0042c32b",
|
||||
"sha256": "sha256-S/D1PO6nx5D9+9JNujyeBM3FGGQnnuv8V6qkc+vKA4A="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -21914,16 +21955,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/mockito/mockito-core/5.15.2",
|
||||
"path": "org/mockito/mockito-core/5.14.2",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"mockito-core-5.15.2.pom": {
|
||||
"sha1": "199967c4a9531dd9b29ed2ef72fc4b427192466c",
|
||||
"sha256": "sha256-/tgS0qLznJhHSyoUxjxl+PRxeDtggtyGfAwbYFPGlIA="
|
||||
"mockito-core-5.14.2.pom": {
|
||||
"sha1": "2f6476e2e7da6a275ebac685ed983d3f7bee84e3",
|
||||
"sha256": "sha256-Y45Wpo9JaHm8ig9Tz735xMw5pFtuQ4ozOl6oPAnunP0="
|
||||
},
|
||||
"mockito-core-5.15.2.jar": {
|
||||
"sha1": "87be4b1e0cc5febc07ab3197a8ff3ede56b37a79",
|
||||
"sha256": "sha256-v0i3Ny2UkdXsiuu0zdGH0VZjkxWZwPvnQQFmzg4eWP8="
|
||||
"mockito-core-5.14.2.jar": {
|
||||
"sha1": "f7bf936008d7664e2002c3faf0c02071c8d10e7c",
|
||||
"sha256": "sha256-IpYUHB4fLhrjXAjTapq0Vj7NZuA1M/6CYwp2TnqkkYI="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -807,7 +807,7 @@ 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.2
|
||||
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
|
||||
@@ -1021,5 +1021,5 @@ xml-apis:xml-apis:1.4.01
|
||||
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:3.5.4
|
||||
com.facebook.react:hermes-android:0.73.5
|
||||
com.android.tools.lint:lint-gradle:31.1.1
|
||||
com.facebook.react:hermes-android:0.73.5
|
||||
+29
-26
@@ -552,7 +552,7 @@ https://jitpack.io/com/github/wix-playground/reflow-animator/1.0.6/reflow-animat
|
||||
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.2/github-dependency-graph-gradle-plugin-1.3.2.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
|
||||
@@ -562,12 +562,12 @@ https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.6/commons-cod
|
||||
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.9/commons-codec-1.9.pom
|
||||
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.10/commons-codec-1.10.pom
|
||||
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.18.0/commons-codec-1.18.0.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.18.0/commons-io-2.18.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.5/commons-logging-1.3.5.pom
|
||||
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.3.4/commons-logging-1.3.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/adobe/xmp/xmpcore/6.1.11/xmpcore-6.1.11.pom
|
||||
https://repo.maven.apache.org/maven2/com/afollestad/material-dialogs/commons/0.9.6.0/commons-0.9.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/afollestad/material-dialogs/core/0.9.6.0/core-0.9.6.0.pom
|
||||
@@ -726,7 +726,7 @@ https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.5/gson
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.6/gson-parent-2.8.6.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.9/gson-parent-2.8.9.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.9.1/gson-parent-2.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.12.1/gson-parent-2.12.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.11.0/gson-parent-2.11.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.2.4/gson-2.2.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.3/gson-2.3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7.pom
|
||||
@@ -735,7 +735,7 @@ https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.5/gson-2.8.5.
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.9.1/gson-2.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.12.1/gson-2.12.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.11.0/gson-2.11.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/crypto/tink/tink/1.3.0-rc2/tink-1.3.0-rc2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/crypto/tink/tink/1.7.0/tink-1.7.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/dagger/dagger/2.28.3/dagger-2.28.3.pom
|
||||
@@ -750,6 +750,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.9.0/error_prone_annotations-2.9.0.pom
|
||||
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.36.0/error_prone_annotations-2.36.0.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
|
||||
@@ -762,6 +763,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.9.0/error_prone_parent-2.9.0.pom
|
||||
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.36.0/error_prone_parent-2.36.0.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
|
||||
@@ -779,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.4.0-jre/guava-parent-33.4.0-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/33.4.0-jre/guava-testlib-33.4.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
|
||||
@@ -793,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.4.0-jre/guava-33.4.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
|
||||
@@ -807,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.30.0-RC1/protobuf-bom-4.30.0-RC1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/4.29.0/protobuf-bom-4.29.0.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
|
||||
@@ -824,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.30.0-RC1/protobuf-java-4.30.0-RC1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/4.29.0/protobuf-java-4.29.0.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
|
||||
@@ -835,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.30.0-RC1/protobuf-parent-4.30.0-RC1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/4.29.0/protobuf-parent-4.29.0.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
|
||||
@@ -856,13 +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.10.2/okio-jvm-3.10.2.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.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.10.2/okio-3.10.2.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
|
||||
@@ -969,9 +971,9 @@ https://repo.maven.apache.org/maven2/io/netty/netty-resolver/4.1.52.Final/netty-
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-resolver/4.1.72.Final/netty-resolver-4.1.72.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-resolver/5.0.0.Alpha2/netty-resolver-5.0.0.Alpha2.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-classes/2.0.46.Final/netty-tcnative-classes-2.0.46.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-classes/2.0.70.Final/netty-tcnative-classes-2.0.70.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-classes/2.0.69.Final/netty-tcnative-classes-2.0.69.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-parent/2.0.46.Final/netty-tcnative-parent-2.0.46.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-parent/2.0.70.Final/netty-tcnative-parent-2.0.70.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-parent/2.0.69.Final/netty-tcnative-parent-2.0.69.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-transport/4.1.34.Final/netty-transport-4.1.34.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-transport/4.1.52.Final/netty-transport-4.1.52.Final.pom
|
||||
https://repo.maven.apache.org/maven2/io/netty/netty-transport/4.1.72.Final/netty-transport-4.1.72.Final.pom
|
||||
@@ -1004,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.11/byte-buddy-agent-1.15.11.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.15.4/byte-buddy-parent-1.15.4.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.15.10/byte-buddy-parent-1.15.10.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.15.11/byte-buddy-parent-1.15.11.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.15.4/byte-buddy-1.15.4.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.15.10/byte-buddy-1.15.10.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.15.11/byte-buddy-1.15.11.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
|
||||
@@ -1056,6 +1058,7 @@ 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/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
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.12/commons-compress-1.12.pom
|
||||
@@ -1075,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/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/78/commons-parent-78.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/79/commons-parent-79.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/81/commons-parent-81.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
|
||||
@@ -1132,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.49.0/checker-qual-3.49.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.48.2/checker-qual-3.48.2.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
|
||||
@@ -1282,7 +1285,7 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.6.10/
|
||||
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.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.1.20-Beta2/kotlin-reflect-2.1.20-Beta2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/2.1.0/kotlin-reflect-2.1.0.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.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
|
||||
@@ -1391,8 +1394,8 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.8.21/k
|
||||
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.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/kotlin-stdlib-2.1.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.1.20-Beta2/kotlin-stdlib-2.1.20-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
|
||||
@@ -1406,17 +1409,17 @@ https://repo.maven.apache.org/maven2/org/jetbrains/markdown-jvm/0.2.1/markdown-j
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/markdown/0.2.1/markdown-0.2.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
|
||||
https://repo.maven.apache.org/maven2/org/json/json/20180813/json-20180813.pom
|
||||
https://repo.maven.apache.org/maven2/org/json/json/20250107/json-20250107.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.12.0-RC2/junit-bom-5.12.0-RC2.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.15.2/mockito-core-5.15.2.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
|
||||
|
||||
@@ -6,7 +6,6 @@ readonly FOOJAY_FALLBACK="0.5.0"
|
||||
readonly KOTLIN_FALLBACK="1.8.0"
|
||||
readonly TOOLS_FALLBACK="3.5.4"
|
||||
readonly HERMES_FALLBACK="0.73.5"
|
||||
readonly GRADLE_LINT_FALLBACK="31.1.1"
|
||||
|
||||
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
|
||||
cd "${GIT_ROOT}"
|
||||
@@ -26,28 +25,15 @@ get_version() {
|
||||
echo "$version"
|
||||
}
|
||||
|
||||
# https://github.com/googlesamples/android-custom-lint-rules/blob/be672cd747ecf13844918e1afccadb935f856a72/docs/api-guide/example.md.html#L112-L129
|
||||
get_gradle_lint_version() {
|
||||
gradlePluginVersion=$(get_version "./nix/pkgs/aapt2/default.nix" "version =" $GRADLE_LINT_FALLBACK)
|
||||
major=$(echo "$gradlePluginVersion" | grep -o "^[0-9]*")
|
||||
# lintVersion = gradlePluginVersion + 23.0.0
|
||||
major=$((major + 23))
|
||||
minor=$(echo "$gradlePluginVersion" | grep -o "\.[0-9]*\." | grep -o "[0-9]*")
|
||||
patch=$(echo "$gradlePluginVersion" | grep -o "[0-9]*$")
|
||||
|
||||
echo "$major.$minor.$patch"
|
||||
}
|
||||
|
||||
foojay_version=$(get_version "./node_modules/@react-native/gradle-plugin/settings.gradle.kts" "foojay.*version" "$FOOJAY_FALLBACK")
|
||||
kotlin_version=$(get_version "./node_modules/@react-native/gradle-plugin/gradle/libs.versions.toml" "kotlin =" "$KOTLIN_FALLBACK")
|
||||
tools_version=$(get_version "./patches/BlurView-build.gradle.patch" "gradle:" "$TOOLS_FALLBACK")
|
||||
hermes_version=$(get_version "./node_modules/react-native/ReactAndroid/gradle.properties" "VERSION_NAME" "$HERMES_FALLBACK")
|
||||
lint_version=$(get_gradle_lint_version)
|
||||
|
||||
|
||||
cat << EOF
|
||||
org.gradle.toolchains.foojay-resolver-convention:org.gradle.toolchains.foojay-resolver-convention.gradle.plugin:$foojay_version
|
||||
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:$kotlin_version
|
||||
com.android.tools.build:gradle:$tools_version
|
||||
com.facebook.react:hermes-android:$hermes_version
|
||||
com.android.tools.lint:lint-gradle:$lint_version
|
||||
EOF
|
||||
|
||||
@@ -41,7 +41,7 @@ function gen_deps_list() {
|
||||
# FIXME: Fix for missing packages.
|
||||
# https://github.com/status-im/status-mobile/issues/15447
|
||||
function add_deps_hack() {
|
||||
"${CUR_DIR}/deps_hack.sh" >> "${DEPS_LIST}"
|
||||
"${CUR_DIR}/deps_versions.sh" >> "${DEPS_LIST}"
|
||||
}
|
||||
|
||||
# Find download URLs for each dependency.
|
||||
|
||||
+17
-6
@@ -53,14 +53,25 @@ in {
|
||||
xcodeWrapper = callPackage ./pkgs/xcodeenv/compose-xcodewrapper.nix { } {
|
||||
versions = ["16.0" "16.1" "16.2"];
|
||||
};
|
||||
go = super.go_1_22;
|
||||
go = super.go_1_21;
|
||||
clang = super.clang_15;
|
||||
buildGoPackage = super.buildGo122Package;
|
||||
buildGoModule = super.buildGo122Module;
|
||||
gomobile = callPackage ./pkgs/gomobile {
|
||||
#FIXME: No Android SDK packages for aarch64-darwin.
|
||||
androidPkgs = self.androidEnvCustom.compose;
|
||||
buildGoPackage = super.buildGo121Package;
|
||||
buildGoModule = super.buildGo121Module;
|
||||
gomobile = (super.gomobile.overrideAttrs (old: {
|
||||
patches = [
|
||||
(self.fetchurl { # https://github.com/golang/mobile/pull/84
|
||||
url = "https://github.com/golang/mobile/commit/f20e966e05b8f7e06bed500fa0da81cf6ebca307.patch";
|
||||
sha256 = "sha256-TZ/Yhe8gMRQUZFAs9G5/cf2b9QGtTHRSObBFD5Pbh7Y=";
|
||||
})
|
||||
(self.fetchurl { # https://github.com/golang/go/issues/58426
|
||||
url = "https://github.com/golang/mobile/commit/406ed3a7b8e44dc32844953647b49696d8847d51.patch";
|
||||
sha256 = "sha256-dqbYukHkQEw8npOkKykOAzMC3ot/Y4DEuh7fE+ptlr8=";
|
||||
})
|
||||
];
|
||||
})).override {
|
||||
# FIXME: No Android SDK packages for aarch64-darwin.
|
||||
withAndroidPkgs = stdenv.system != "aarch64-darwin";
|
||||
androidPkgs = self.androidEnvCustom.compose;
|
||||
};
|
||||
|
||||
# Android environment
|
||||
|
||||
@@ -10,7 +10,6 @@ let
|
||||
|
||||
pname = "aapt2";
|
||||
# Warning: This must be the same as gradlePluginVersion android/gradle.properties
|
||||
# also referenced in nix/deps/gradle/deps_hack.sh
|
||||
version = "8.1.1-10154469";
|
||||
|
||||
pkgPath = "com/android/tools/build/aapt2";
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
fetchgit,
|
||||
fetchurl,
|
||||
buildGo122Module,
|
||||
zlib,
|
||||
makeWrapper,
|
||||
xcodeenv,
|
||||
androidenv,
|
||||
xcodeWrapperArgs ? { },
|
||||
xcodeWrapper ? xcodeenv.composeXcodeWrapper xcodeWrapperArgs,
|
||||
withAndroidPkgs ? stdenv.system != "aarch64-darwin",
|
||||
androidPkgs ? (
|
||||
androidenv.composeAndroidPackages {
|
||||
includeNDK = true;
|
||||
}
|
||||
),
|
||||
}:
|
||||
buildGo122Module {
|
||||
pname = "gomobile";
|
||||
version = "0-unstable-2024-12-13";
|
||||
|
||||
src = fetchgit {
|
||||
name = "gomobile";
|
||||
url = "https://go.googlesource.com/mobile";
|
||||
rev = "a87c1cf6cf463f0d4476cfe0fcf67c2953d76e7c";
|
||||
hash = "sha256-7j4rdmCZMC8tn4vAsC9x/mMNkom/+Tl7uAY+5gkSvfY=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-6ycxEDEE0/i6Lxo0gb8wq3U2U7Q49AJj+PdzSl57wwI=";
|
||||
|
||||
CGO_ENABLED = "1";
|
||||
|
||||
subPackages = [
|
||||
"bind"
|
||||
"cmd/gobind"
|
||||
"cmd/gomobile"
|
||||
];
|
||||
|
||||
# Fails with: go: cannot find GOROOT directory
|
||||
doCheck = false;
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcodeWrapper ];
|
||||
|
||||
# Prevent a non-deterministic temporary directory from polluting the resulting object files
|
||||
postPatch = ''
|
||||
substituteInPlace cmd/gomobile/env.go --replace-quiet \
|
||||
'tmpdir, err = ioutil.TempDir("", "gomobile-work-")' \
|
||||
'tmpdir = filepath.Join(os.Getenv("NIX_BUILD_TOP"), "gomobile-work")'
|
||||
substituteInPlace cmd/gomobile/init.go --replace-quiet \
|
||||
'tmpdir, err = ioutil.TempDir(gomobilepath, "work-")' \
|
||||
'tmpdir = filepath.Join(os.Getenv("NIX_BUILD_TOP"), "work")'
|
||||
|
||||
# To fix unable to import bind: no Go package in golang.org/x/mobile/bind
|
||||
substituteInPlace cmd/gomobile/init.go --replace \
|
||||
'golang.org/x/mobile/cmd/gobind@latest' \
|
||||
'golang.org/x/mobile/cmd/gobind'
|
||||
'';
|
||||
|
||||
# Necessary for GOPATH when using gomobile.
|
||||
postInstall = ''
|
||||
mkdir -p $out/src/golang.org/x
|
||||
ln -s $src $out/src/golang.org/x/mobile
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
for prog in gomobile gobind; do
|
||||
wrapProgram $out/bin/$prog \
|
||||
--suffix GOPATH : $out \
|
||||
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ zlib ]}" \
|
||||
${lib.optionalString withAndroidPkgs ''
|
||||
--prefix PATH : "${androidPkgs.androidsdk}/bin" \
|
||||
--set-default ANDROID_HOME "${androidPkgs.androidsdk}/libexec/android-sdk"
|
||||
''}
|
||||
done
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Tool for building and running mobile apps written in Go";
|
||||
homepage = "https://pkg.go.dev/golang.org/x/mobile/cmd/gomobile";
|
||||
license = with lib.licenses; [ bsd3 ];
|
||||
maintainers = with lib.maintainers; [ jakubgs ];
|
||||
};
|
||||
}
|
||||
+18
-26
@@ -89,11 +89,7 @@
|
||||
status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"
|
||||
status-im.config/ALCHEMY_BASE_MAINNET_TOKEN #shadow/env "ALCHEMY_BASE_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_BASE_SEPOLIA_TOKEN #shadow/env "ALCHEMY_BASE_SEPOLIA_TOKEN"
|
||||
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_USER #shadow/env "STATUS_BUILD_ETH_RPC_PROXY_USER"
|
||||
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_PASSWORD #shadow/env
|
||||
"STATUS_BUILD_ETH_RPC_PROXY_PASSWORD"
|
||||
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_URL #shadow/env "STATUS_BUILD_ETH_RPC_PROXY_URL"}
|
||||
status-im.config/ALCHEMY_BASE_SEPOLIA_TOKEN #shadow/env "ALCHEMY_BASE_SEPOLIA_TOKEN"}
|
||||
:compiler-options {:output-feature-set :es5
|
||||
;; We disable `:fn-deprecated` warnings because we
|
||||
;; are managing deprecation via clj-kondo and we
|
||||
@@ -115,27 +111,23 @@
|
||||
:chunks {:fleets legacy.status-im.fleet.default-fleet/default-fleets}
|
||||
:release
|
||||
{: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/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY"
|
||||
status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID"
|
||||
status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN"
|
||||
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_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_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_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"
|
||||
status-im.config/ALCHEMY_BASE_MAINNET_TOKEN #shadow/env "ALCHEMY_BASE_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_BASE_SEPOLIA_TOKEN #shadow/env "ALCHEMY_BASE_SEPOLIA_TOKEN"
|
||||
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_USER #shadow/env "STATUS_BUILD_ETH_RPC_PROXY_USER"
|
||||
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_PASSWORD #shadow/env
|
||||
"STATUS_BUILD_ETH_RPC_PROXY_PASSWORD"
|
||||
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_URL #shadow/env "STATUS_BUILD_ETH_RPC_PROXY_URL"}
|
||||
{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/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY"
|
||||
status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID"
|
||||
status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN"
|
||||
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_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_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_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"
|
||||
status-im.config/ALCHEMY_BASE_MAINNET_TOKEN #shadow/env "ALCHEMY_BASE_MAINNET_TOKEN"
|
||||
status-im.config/ALCHEMY_BASE_SEPOLIA_TOKEN #shadow/env "ALCHEMY_BASE_SEPOLIA_TOKEN"}
|
||||
:compiler-options {:output-feature-set :es6
|
||||
;;disable for android build as there
|
||||
;;is an intermittent warning with deftype
|
||||
|
||||
@@ -6,17 +6,28 @@
|
||||
[{:keys [status theme blur?]}]
|
||||
{:flex-direction :row
|
||||
:align-self :flex-start
|
||||
:background-color (when (= status :error)
|
||||
(colors/theme-colors
|
||||
(colors/override-color :danger 10 50)
|
||||
(colors/override-color :danger 10 60)
|
||||
theme))
|
||||
:background-color (cond (= status :error)
|
||||
(colors/theme-colors
|
||||
(colors/override-color :danger 10 50)
|
||||
(colors/override-color :danger 10 60)
|
||||
theme)
|
||||
(= status :warning)
|
||||
(colors/theme-colors
|
||||
(colors/override-color :warning 10 50)
|
||||
(colors/override-color :warning 10 60)
|
||||
theme))
|
||||
:border-width 1
|
||||
:border-color (cond (= status :error)
|
||||
(colors/theme-colors
|
||||
(colors/override-color :danger 20 50)
|
||||
(colors/override-color :danger 20 60)
|
||||
theme)
|
||||
|
||||
(= status :warning)
|
||||
(colors/theme-colors
|
||||
(colors/override-color :warning 20 50)
|
||||
(colors/override-color :warning 20 60)
|
||||
theme)
|
||||
(and blur? (= status :default)) (colors/theme-colors
|
||||
colors/neutral-80-opa-5
|
||||
colors/white-opa-5
|
||||
@@ -35,5 +46,7 @@
|
||||
[{:keys [status theme networks-shown?]}]
|
||||
{:padding-left (if networks-shown? 4 0)
|
||||
:margin-top -1
|
||||
:color (when (= status :error)
|
||||
(colors/resolve-color :danger theme))})
|
||||
:color (cond (= status :error)
|
||||
(colors/resolve-color :danger theme)
|
||||
(= status :warning)
|
||||
(colors/resolve-color :warning theme))})
|
||||
|
||||
@@ -9,38 +9,35 @@
|
||||
[{:keys [db]} {:keys [type action data error] :as event}]
|
||||
(log/info "local pairing signal received"
|
||||
{:event event})
|
||||
(let [{:keys [account password chatKey]} data
|
||||
role (get-in db [:syncing :role])
|
||||
receiver? (= role constants/local-pairing-role-receiver)
|
||||
sender? (= role constants/local-pairing-role-sender)
|
||||
connection-success? (and (= type
|
||||
constants/local-pairing-event-connection-success)
|
||||
(= action
|
||||
constants/local-pairing-action-connect))
|
||||
connection-error? (= type
|
||||
constants/local-pairing-event-connection-error)
|
||||
error-on-pairing? (contains? constants/local-pairing-event-errors type)
|
||||
completed-pairing? (and (= type
|
||||
constants/local-pairing-event-transfer-success)
|
||||
(= action
|
||||
constants/local-pairing-action-pairing-installation))
|
||||
received-account? (and (= type
|
||||
constants/local-pairing-event-received-account)
|
||||
(= action
|
||||
constants/local-pairing-action-pairing-account)
|
||||
(and (some? account) (some? password)))
|
||||
multiaccount-data (when received-account?
|
||||
(merge account
|
||||
{:password password
|
||||
:whisper-private-key chatKey}))
|
||||
navigate-to-syncing-devices? (and (or connection-success? connection-error?) receiver?)
|
||||
user-in-syncing-devices-screen? (or (= (:view-id db) :screen/onboarding.syncing-progress)
|
||||
(= (:view-id db) :screen/profile.profiles)
|
||||
(= (:view-id db)
|
||||
:screen/onboarding.syncing-progress-intro))
|
||||
user-in-sign-in-intro-screen? (= (:view-id db) :screen/onboarding.sign-in-intro)
|
||||
keystore-files-transfer-action? (= action
|
||||
constants/local-pairing-action-keystore-files-transfer)]
|
||||
(let [{:keys [account password]} data
|
||||
role (get-in db [:syncing :role])
|
||||
receiver? (= role constants/local-pairing-role-receiver)
|
||||
sender? (= role constants/local-pairing-role-sender)
|
||||
connection-success? (and (= type
|
||||
constants/local-pairing-event-connection-success)
|
||||
(= action
|
||||
constants/local-pairing-action-connect))
|
||||
connection-error? (= type
|
||||
constants/local-pairing-event-connection-error)
|
||||
error-on-pairing? (contains? constants/local-pairing-event-errors type)
|
||||
completed-pairing? (and (= type
|
||||
constants/local-pairing-event-transfer-success)
|
||||
(= action
|
||||
constants/local-pairing-action-pairing-installation))
|
||||
received-account? (and (= type
|
||||
constants/local-pairing-event-received-account)
|
||||
(= action
|
||||
constants/local-pairing-action-pairing-account)
|
||||
(and (some? account) (some? password)))
|
||||
multiaccount-data (when received-account?
|
||||
(merge account {:password password}))
|
||||
navigate-to-syncing-devices? (and (or connection-success? connection-error?) receiver?)
|
||||
user-in-syncing-devices-screen? (or (= (:view-id db) :screen/onboarding.syncing-progress)
|
||||
(= (:view-id db) :screen/profile.profiles)
|
||||
(= (:view-id db) :screen/onboarding.syncing-progress-intro))
|
||||
user-in-sign-in-intro-screen? (= (:view-id db) :screen/onboarding.sign-in-intro)
|
||||
keystore-files-transfer-action? (= action
|
||||
constants/local-pairing-action-keystore-files-transfer)]
|
||||
(merge {:db (cond-> db
|
||||
connection-success?
|
||||
(assoc-in [:syncing :pairing-status] :connected)
|
||||
|
||||
@@ -10,35 +10,16 @@
|
||||
[utils.re-frame :as rf]
|
||||
[utils.security.core :as security]))
|
||||
|
||||
(defn- partially-operable-accounts?
|
||||
[accounts]
|
||||
(->> accounts
|
||||
vals
|
||||
(some #(= :partially (:operable %)))
|
||||
boolean))
|
||||
|
||||
(rf/reg-event-fx :standard-auth/migrate-partially-operable-accounts
|
||||
(fn [{:keys [db]} [{:keys [masked-password on-success]}]]
|
||||
(let [on-auth-success-callback #(on-success masked-password)
|
||||
has-partially-operable-accounts? (-> (get-in db [:wallet :accounts])
|
||||
partially-operable-accounts?)]
|
||||
{:fx [(if has-partially-operable-accounts?
|
||||
[:dispatch
|
||||
[:wallet/make-partially-operable-accounts-fully-operable
|
||||
{:password masked-password
|
||||
:on-success on-auth-success-callback
|
||||
:on-error on-auth-success-callback}]]
|
||||
[:effects.standard-auth/on-auth-success on-auth-success-callback])]})))
|
||||
|
||||
(defn- handle-password-success
|
||||
[{:keys [migrate-partially-operable-accounts? on-auth-success masked-password]}]
|
||||
[has-partially-operable-accounts? on-auth-success masked-password]
|
||||
(let [on-auth-success-callback #(on-auth-success masked-password)]
|
||||
(rf/dispatch [:standard-auth/set-success true])
|
||||
(rf/dispatch [:standard-auth/reset-login-password])
|
||||
(if migrate-partially-operable-accounts?
|
||||
(rf/dispatch [:standard-auth/migrate-partially-operable-accounts
|
||||
{:masked-password masked-password
|
||||
:on-success on-auth-success}])
|
||||
(if has-partially-operable-accounts?
|
||||
(rf/dispatch [:wallet/make-partially-operable-accounts-fully-operable
|
||||
{:password masked-password
|
||||
:on-success on-auth-success-callback
|
||||
:on-error on-auth-success-callback}])
|
||||
(on-auth-success-callback))))
|
||||
|
||||
(defn authorize
|
||||
@@ -61,10 +42,9 @@
|
||||
{:pin pin
|
||||
:on-success (fn [{:keys [encryption-public-key]}]
|
||||
(rf/dispatch [:keycard/disconnect])
|
||||
(handle-password-success {:migrate-partially-operable-accounts? false
|
||||
:on-auth-success on-auth-success
|
||||
:masked-password (security/mask-data
|
||||
encryption-public-key)}))
|
||||
(handle-password-success false
|
||||
on-auth-success
|
||||
(security/mask-data encryption-public-key)))
|
||||
:on-failure #(rf/dispatch [:keycard/on-action-with-pin-error
|
||||
%])}]))}]))}]]
|
||||
[:effects.biometric/check-if-available
|
||||
@@ -105,12 +85,7 @@
|
||||
keycard? (get-in db [:profile/profile :keycard-pairing])]
|
||||
{:fx [(if keycard?
|
||||
[:keychain/get-keycard-keys [key-uid on-auth-success]]
|
||||
[:keychain/get-user-password
|
||||
[key-uid
|
||||
(fn [masked-password]
|
||||
(rf/dispatch [:standard-auth/migrate-partially-operable-accounts
|
||||
{:masked-password masked-password
|
||||
:on-success on-auth-success}]))]])
|
||||
[:keychain/get-user-password [key-uid on-auth-success]])
|
||||
[:dispatch [:standard-auth/set-success true]]
|
||||
[:dispatch [:standard-auth/reset-login-password]]]}))
|
||||
|
||||
@@ -133,14 +108,15 @@
|
||||
(defn- bottom-sheet-password-view
|
||||
[{:keys [on-press-biometric on-auth-success auth-button-icon-left auth-button-label]}]
|
||||
(fn []
|
||||
[enter-password/view
|
||||
{:on-enter-password #(handle-password-success {:migrate-partially-operable-accounts? true
|
||||
:on-auth-success on-auth-success
|
||||
:masked-password (security/hash-masked-password
|
||||
%)})
|
||||
:on-press-biometrics on-press-biometric
|
||||
:button-icon-left auth-button-icon-left
|
||||
:button-label auth-button-label}]))
|
||||
(let [has-partially-operable-accounts? (rf/sub [:wallet/has-partially-operable-accounts?])]
|
||||
[enter-password/view
|
||||
{:on-enter-password #(handle-password-success
|
||||
has-partially-operable-accounts?
|
||||
on-auth-success
|
||||
(security/hash-masked-password %))
|
||||
:on-press-biometrics on-press-biometric
|
||||
:button-icon-left auth-button-icon-left
|
||||
:button-label auth-button-label}])))
|
||||
|
||||
(defn authorize-with-keycard
|
||||
[_ [{:keys [on-complete]}]]
|
||||
@@ -179,12 +155,6 @@
|
||||
(when on-close
|
||||
(on-close success?))))
|
||||
|
||||
(rf/reg-fx
|
||||
:effects.standard-auth/on-auth-success
|
||||
(fn [on-auth-success]
|
||||
(when on-auth-success
|
||||
(on-auth-success))))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:standard-auth/close
|
||||
(fn [{:keys [db]} [on-close]]
|
||||
|
||||
@@ -28,9 +28,6 @@
|
||||
(goog-define WALLET_CONNECT_PROJECT_ID "87815d72a81d739d2a7ce15c2cfdefb3")
|
||||
(goog-define MIXPANEL_APP_ID "3350627")
|
||||
(goog-define MIXPANEL_TOKEN "5c73bda2d36a9f688a5ee45641fb6775")
|
||||
(goog-define STATUS_BUILD_ETH_RPC_PROXY_USER "")
|
||||
(goog-define STATUS_BUILD_ETH_RPC_PROXY_PASSWORD "")
|
||||
(goog-define STATUS_BUILD_ETH_RPC_PROXY_URL "")
|
||||
|
||||
(def mainnet-rpc-url (str "https://eth-archival.rpc.grove.city/v1/" POKT_TOKEN))
|
||||
(def sepolia-rpc-url (str "https://sepolia-archival.rpc.grove.city/v1/" POKT_TOKEN))
|
||||
|
||||
@@ -94,8 +94,7 @@
|
||||
(rf/reg-fx :effects.keycard/login-with-keycard
|
||||
(fn [{:keys [key-uid password whisper-private-key]}]
|
||||
(native-module/login-account
|
||||
(assoc (merge (profile.config/login)
|
||||
(profile.config/fix-node-config-migration))
|
||||
(assoc (profile.config/login)
|
||||
:keyUid key-uid
|
||||
:password password
|
||||
:keycardWhisperPrivateKey whisper-private-key))))
|
||||
|
||||
@@ -27,7 +27,5 @@
|
||||
:callback
|
||||
(fn [{:keys [error]}]
|
||||
(if (string/blank? error)
|
||||
(do
|
||||
(rf/dispatch [:biometric/disable])
|
||||
(rf/dispatch [:navigate-to :screen/keycard.migrate.success]))
|
||||
(rf/dispatch [:navigate-to :screen/keycard.migrate.success])
|
||||
(rf/dispatch [:navigate-to :screen/keycard.migrate.fail])))}]]})))
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
[{:type :select
|
||||
:key :status
|
||||
:options [{:key :error}
|
||||
{:key :warning}
|
||||
{:key :default}]}
|
||||
{:type :text
|
||||
:key :title}
|
||||
|
||||
@@ -11,9 +11,6 @@
|
||||
{;; Temporary fix until https://github.com/status-im/status-go/issues/3024 is resolved
|
||||
:wakuV2Nameserver "8.8.8.8"
|
||||
:kdfIterations 3200
|
||||
:ethRpcProxyUser config/STATUS_BUILD_ETH_RPC_PROXY_USER
|
||||
:ethRpcProxyPassword config/STATUS_BUILD_ETH_RPC_PROXY_PASSWORD
|
||||
:ethRpcProxyUrl config/STATUS_BUILD_ETH_RPC_PROXY_URL
|
||||
:statusProxyEnabled config/status-proxy-enabled?
|
||||
:statusProxyStageName config/status-proxy-stage-name
|
||||
:statusProxyMarketUser config/STATUS_BUILD_PROXY_USER
|
||||
@@ -34,35 +31,28 @@
|
||||
:alchemyBaseMainnetToken config/ALCHEMY_BASE_MAINNET_TOKEN
|
||||
:alchemyBaseSepoliaToken config/ALCHEMY_BASE_SEPOLIA_TOKEN})
|
||||
|
||||
(defn- common-config
|
||||
[]
|
||||
{:verifyTransactionURL config/verify-transaction-url
|
||||
:verifyENSURL config/verify-ens-url
|
||||
:verifyENSContractAddress config/verify-ens-contract-address
|
||||
:verifyTransactionChainID config/verify-transaction-chain-id
|
||||
:wakuV2LightClient true
|
||||
:wakuV2EnableMissingMessageVerification true
|
||||
:wakuV2EnableStoreConfirmationForMessagesSent false})
|
||||
|
||||
(defn fix-node-config-migration
|
||||
[]
|
||||
(common-config))
|
||||
|
||||
(defn create
|
||||
[]
|
||||
(let [log-enabled? (boolean (not-empty config/log-level))]
|
||||
(merge
|
||||
(assoc
|
||||
(login)
|
||||
(common-config)
|
||||
{:deviceName (native-module/get-installation-name)
|
||||
:rootDataDir (native-module/backup-disabled-data-dir)
|
||||
:rootKeystoreDir (native-module/keystore-dir)
|
||||
:logLevel (when log-enabled? config/log-level)
|
||||
:logEnabled log-enabled?
|
||||
:logFilePath (native-module/log-file-directory)
|
||||
:wakuV2Fleet config/fleet
|
||||
:previewPrivacy config/blank-preview?
|
||||
:testNetworksEnabled config/test-networks-enabled?})))
|
||||
:deviceName (native-module/get-installation-name)
|
||||
:rootDataDir (native-module/backup-disabled-data-dir)
|
||||
:rootKeystoreDir (native-module/keystore-dir)
|
||||
:logLevel (when log-enabled? config/log-level)
|
||||
:logEnabled log-enabled?
|
||||
:logFilePath (native-module/log-file-directory)
|
||||
:verifyTransactionURL config/verify-transaction-url
|
||||
:verifyENSURL config/verify-ens-url
|
||||
:verifyENSContractAddress config/verify-ens-contract-address
|
||||
:verifyTransactionChainID config/verify-transaction-chain-id
|
||||
:wakuV2LightClient true
|
||||
:wakuV2Fleet config/fleet
|
||||
;; NOTE: https://github.com/status-im/status-go/pull/5570#discussion_r1690794119
|
||||
:wakuV2EnableMissingMessageVerification true
|
||||
:wakuV2EnableStoreConfirmationForMessagesSent false
|
||||
:previewPrivacy config/blank-preview?
|
||||
:testNetworksEnabled config/test-networks-enabled?)))
|
||||
|
||||
(defn strip-file-prefix
|
||||
[path]
|
||||
|
||||
@@ -8,10 +8,7 @@
|
||||
(fn [[key-uid hashed-password]]
|
||||
;;"node.login" signal will be triggered as a callback
|
||||
(native-module/login-account
|
||||
(assoc (merge (profile.config/login)
|
||||
(profile.config/fix-node-config-migration))
|
||||
:keyUid key-uid
|
||||
:password hashed-password))))
|
||||
(assoc (profile.config/login) :keyUid key-uid :password hashed-password))))
|
||||
|
||||
(rf/reg-fx :effects.profile/enable-local-notifications
|
||||
(fn []
|
||||
|
||||
@@ -26,22 +26,16 @@
|
||||
|
||||
(rf/reg-event-fx :profile.login/local-paired-user
|
||||
(fn [{:keys [db]}]
|
||||
(let [{:keys [key-uid password keycard-pairing
|
||||
whisper-private-key]} (get-in db [:syncing :profile])
|
||||
login-sha3-password (get-in db [:syncing :login-sha3-password])
|
||||
password (if-not (nil? login-sha3-password) ;; already logged in
|
||||
login-sha3-password
|
||||
password)
|
||||
masked-password (security/mask-data password)]
|
||||
{:db (-> db
|
||||
(assoc-in [:onboarding/profile :password] masked-password)
|
||||
(assoc-in [:onboarding/profile :syncing?] true))
|
||||
:fx [(if keycard-pairing
|
||||
[:effects.keycard/login-with-keycard
|
||||
{:password password
|
||||
:whisper-private-key whisper-private-key
|
||||
:key-uid key-uid}]
|
||||
[:effects.profile/login [key-uid password]])]})))
|
||||
(let [{:keys [key-uid password]} (get-in db [:syncing :profile])
|
||||
login-sha3-password (get-in db [:syncing :login-sha3-password])
|
||||
password (if-not (nil? login-sha3-password) ;; already logged in
|
||||
login-sha3-password
|
||||
password)
|
||||
masked-password (security/mask-data password)]
|
||||
{:db (-> db
|
||||
(assoc-in [:onboarding/profile :password] masked-password)
|
||||
(assoc-in [:onboarding/profile :syncing?] true))
|
||||
:effects.profile/login [key-uid password]})))
|
||||
|
||||
;; login phase 1: we want to load and show chats faster, so we split login into 2 phases
|
||||
(rf/reg-event-fx :profile.login/login-existing-profile
|
||||
|
||||
+1
-1
@@ -144,9 +144,9 @@
|
||||
on-change-text (rn/use-callback
|
||||
(fn [new-value]
|
||||
(let [trimmed-value (string/trim new-value)]
|
||||
(set-error (validate (string/lower-case trimmed-value)))
|
||||
(set-address-or-ens trimmed-value)
|
||||
(set-ens-address "")
|
||||
(set-error (validate (string/lower-case trimmed-value)))
|
||||
(when (validation/ens-name? trimmed-value)
|
||||
(debounce/debounce-and-dispatch
|
||||
[:wallet/resolve-ens
|
||||
|
||||
@@ -154,15 +154,3 @@
|
||||
{:db (update-in db [:wallet :ui] dissoc :saved-address)})
|
||||
|
||||
(rf/reg-event-fx :wallet/clear-address-to-save clear-address-to-save)
|
||||
|
||||
(defn check-remaining-capacity-for-saved-addresses
|
||||
[{:keys [db]} [{:keys [on-success on-error]}]]
|
||||
(let [test-networks-enabled? (boolean (get-in db [:profile/profile :test-networks-enabled?]))]
|
||||
{:fx [[:json-rpc/call
|
||||
[{:method "wakuext_remainingCapacityForSavedAddresses"
|
||||
:params [test-networks-enabled?]
|
||||
:on-success on-success
|
||||
:on-error on-error}]]]}))
|
||||
|
||||
(rf/reg-event-fx :wallet/check-remaining-capacity-for-saved-addresses
|
||||
check-remaining-capacity-for-saved-addresses)
|
||||
|
||||
@@ -103,13 +103,7 @@
|
||||
|
||||
(defn- add-address-to-save
|
||||
[]
|
||||
(rf/dispatch [:wallet/check-remaining-capacity-for-saved-addresses
|
||||
{:on-success #(rf/dispatch [:open-modal :screen/settings.add-address-to-save])
|
||||
:on-error #(rf/dispatch [:toasts/upsert
|
||||
{:type :negative
|
||||
:theme :dark
|
||||
:text (i18n/label
|
||||
:t/saved-addresses-limit-reached-toast)}])}]))
|
||||
(rf/dispatch [:open-modal :screen/settings.add-address-to-save]))
|
||||
|
||||
(defn view
|
||||
[]
|
||||
|
||||
+3
-7
@@ -64,7 +64,7 @@
|
||||
[button (assoc params :word (second options))]])
|
||||
|
||||
(defn- complete-backup-sheet
|
||||
[on-success on-try-again]
|
||||
[on-success]
|
||||
(let [customization-color (rf/sub [:profile/customization-color])
|
||||
[checked? set-checked] (rn/use-state false)]
|
||||
[:<>
|
||||
@@ -88,10 +88,7 @@
|
||||
:button-two-label (i18n/label :t/cancel)
|
||||
:button-two-props {:type :grey
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:hide-bottom-sheet])
|
||||
(when on-try-again
|
||||
(rf/dispatch [:navigate-back])
|
||||
(on-try-again)))}}]]))
|
||||
(rf/dispatch [:hide-bottom-sheet]))}}]]))
|
||||
|
||||
(defn view
|
||||
[]
|
||||
@@ -126,8 +123,7 @@
|
||||
{:theme theme
|
||||
:shell? shell?
|
||||
:content (fn [] [complete-backup-sheet
|
||||
on-success
|
||||
on-try-again])}])))
|
||||
on-success])}])))
|
||||
(do
|
||||
(when (> @incorrect-count 0)
|
||||
(rf/dispatch [:show-bottom-sheet
|
||||
|
||||
@@ -35,12 +35,13 @@
|
||||
chain-ids (chain/chain-ids db)
|
||||
params [[address] chain-ids (create-default-filters) limit-per-request]]
|
||||
{:db (-> db
|
||||
(update-in [:wallet :activities] dissoc address)
|
||||
(update-in [:wallet :ui :activity-tab :request] dissoc :request-id)
|
||||
(update-in [:wallet :ui :activity-tab :request]
|
||||
assoc
|
||||
:address address
|
||||
:loading? true
|
||||
:remove-all-previous-activites? true))
|
||||
:address address
|
||||
:loading? true
|
||||
:initial-request? true))
|
||||
:fx [[:json-rpc/call
|
||||
[{:method "wallet_startActivityFilterSessionV2"
|
||||
:params params
|
||||
@@ -68,8 +69,7 @@
|
||||
has-more? (get-in db [:wallet :ui :activity-tab :request :has-more?])
|
||||
params [session-id limit-per-request]]
|
||||
(when (and session-id has-more?)
|
||||
{:db (assoc-in db [:wallet :ui :activity-tab :request :remove-all-existing-activities?] false)
|
||||
:fx [[:json-rpc/call
|
||||
{:fx [[:json-rpc/call
|
||||
[{:method "wallet_getMoreForActivityFilterSession"
|
||||
:params params
|
||||
:on-error [:wallet/log-rpc-error
|
||||
@@ -80,7 +80,7 @@
|
||||
:wallet/reset-activities-filter-session
|
||||
(fn [{:keys [db]}]
|
||||
(when-let [session-id (get-in db [:wallet :ui :activity-tab :request :request-id])]
|
||||
{:db (assoc-in db [:wallet :ui :activity-tab :request :remove-all-existing-activities?] true)
|
||||
{:db (assoc-in db [:wallet :ui :activity-tab :request :initial-request?] true)
|
||||
:fx [[:json-rpc/call
|
||||
[{:method "wallet_resetActivityFilterSession"
|
||||
:params [session-id limit-per-request]
|
||||
@@ -91,22 +91,21 @@
|
||||
(rf/reg-event-fx
|
||||
:wallet/activity-filtering-for-current-account-done
|
||||
(fn [{:keys [db]} [{:keys [message]}]]
|
||||
(let [{:keys [address
|
||||
remove-all-existing-activities?]} (get-in db [:wallet :ui :activity-tab :request])
|
||||
{:keys [activities offset hasMore]} (transforms/json->clj message)
|
||||
new-activities (->> activities
|
||||
(cske/transform-keys
|
||||
transforms/->kebab-case-keyword)
|
||||
(collection/index-by :key))
|
||||
existing-activities (get-in db [:wallet :activities address])
|
||||
updated-activities (if remove-all-existing-activities?
|
||||
new-activities
|
||||
(nested-merge existing-activities new-activities))]
|
||||
(let [{:keys [address initial-request?]} (get-in db [:wallet :ui :activity-tab :request])
|
||||
{:keys [activities offset hasMore]} (transforms/json->clj message)
|
||||
new-activities (->> activities
|
||||
(cske/transform-keys transforms/->kebab-case-keyword)
|
||||
(collection/index-by :key))
|
||||
existing-activities (get-in db [:wallet :activities address])
|
||||
updated-activities (if initial-request?
|
||||
new-activities
|
||||
(nested-merge existing-activities new-activities))]
|
||||
{:db (-> db
|
||||
(assoc-in [:wallet :activities address] updated-activities)
|
||||
(assoc-in [:wallet :ui :activity-tab :request :offset] offset)
|
||||
(assoc-in [:wallet :ui :activity-tab :request :has-more?] hasMore)
|
||||
(assoc-in [:wallet :ui :activity-tab :request :loading?] false))})))
|
||||
(assoc-in [:wallet :ui :activity-tab :request :loading?] false)
|
||||
(assoc-in [:wallet :ui :activity-tab :request :initial-request?] false))})))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/activities-filtering-entries-updated
|
||||
|
||||
@@ -31,20 +31,11 @@
|
||||
on-end-reached (rn/use-callback
|
||||
#(rf/dispatch
|
||||
[:wallet/get-more-for-activities-filter-session]))]
|
||||
(cond
|
||||
(and (empty? activity-list) loading?)
|
||||
[quo/skeleton-list
|
||||
{:content :messages
|
||||
:parent-height (:height (rn/get-window))
|
||||
:animated? false}]
|
||||
|
||||
(and (empty? activity-list) (false? loading?))
|
||||
(if (and (and (some? loading?) (false? loading?)) (empty? activity-list))
|
||||
[empty-tab/view
|
||||
{:title (i18n/label :t/no-activity)
|
||||
:description (i18n/label :t/empty-tab-description)
|
||||
:image (resources/get-themed-image :no-activity theme)}]
|
||||
|
||||
:else
|
||||
[rn/section-list
|
||||
{:sections activity-list
|
||||
:sticky-section-headers-enabled false
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
[clojure.string :as string]
|
||||
[status-im.constants :as constants]
|
||||
[status-im.contexts.wallet.collectible.utils :as collectible-utils]
|
||||
[status-im.contexts.wallet.send.transaction-settings.core :as transaction-settings]
|
||||
[status-im.contexts.wallet.common.utils.networks :as network-utils]
|
||||
[status-im.contexts.wallet.send.utils :as send-utils]
|
||||
[utils.collection :as utils.collection]
|
||||
[utils.money :as money]
|
||||
@@ -165,7 +165,10 @@
|
||||
|
||||
(defn- add-keys-to-saved-address
|
||||
[saved-address]
|
||||
(assoc saved-address :ens? (not (string/blank? (:ens saved-address)))))
|
||||
(-> saved-address
|
||||
(assoc :network-preferences-names
|
||||
(network-utils/network-preference-prefix->network-names (:chain-short-names saved-address)))
|
||||
(assoc :ens? (not (string/blank? (:ens saved-address))))))
|
||||
|
||||
(defn rpc->saved-address
|
||||
[saved-address]
|
||||
@@ -228,8 +231,20 @@
|
||||
|
||||
(def ^:private precision 6)
|
||||
|
||||
(defn from-wei
|
||||
[wei-amount]
|
||||
(send-utils/convert-to-gwei wei-amount precision))
|
||||
|
||||
(defn new->old-route-path
|
||||
[new-path]
|
||||
(tap> {:in :new->old-route-path
|
||||
:new-path new-path
|
||||
:suggested-tx-nonce (-> new-path
|
||||
:suggested-tx-nonce
|
||||
money/from-hex
|
||||
money/to-string
|
||||
js/parseInt)
|
||||
:suggested-tx-gas-amount (:suggested-tx-gas-amount new-path)})
|
||||
(let [to-bignumber (fn [k] (-> new-path k money/bignumber))
|
||||
suggested-levels-for-max-fees-per-gas (:suggested-levels-for-max-fees-per-gas new-path)]
|
||||
{:approval-fee (to-bignumber :approval-fee)
|
||||
@@ -241,33 +256,26 @@
|
||||
:amount-in (:amount-in new-path)
|
||||
:max-amount-in (:max-amount-in new-path)
|
||||
:gas-fees {:gas-price "0"
|
||||
:base-fee (send-utils/convert-to-gwei (:tx-base-fee
|
||||
new-path)
|
||||
precision)
|
||||
:max-priority-fee-per-gas (send-utils/convert-to-gwei (:tx-priority-fee
|
||||
new-path)
|
||||
precision)
|
||||
:l-1-gas-fee (send-utils/convert-to-gwei (:tx-l-1-fee
|
||||
new-path)
|
||||
precision)
|
||||
:base-fee (from-wei (:tx-base-fee new-path))
|
||||
:tx-priority-fee (from-wei (:tx-priority-fee new-path))
|
||||
:l-1-gas-fee (from-wei (:tx-l-1-fee new-path))
|
||||
:eip-1559-enabled true
|
||||
:tx-max-fees-per-gas (send-utils/convert-to-gwei
|
||||
(:tx-max-fees-per-gas
|
||||
new-path)
|
||||
precision)
|
||||
:tx-max-fees-per-gas (from-wei (:tx-max-fees-per-gas new-path))
|
||||
:current-base-fee (from-wei (:current-base-fee new-path))
|
||||
:suggested-min-priority-fee (from-wei (:suggested-min-priority-fee
|
||||
new-path))
|
||||
:suggested-max-priority-fee (from-wei (:suggested-max-priority-fee
|
||||
new-path))
|
||||
:suggested-gas-fees-for-setting
|
||||
{:tx-fee-mode/normal (send-utils/convert-to-gwei
|
||||
(:low
|
||||
suggested-levels-for-max-fees-per-gas)
|
||||
precision)
|
||||
:tx-fee-mode/fast (send-utils/convert-to-gwei
|
||||
(:medium
|
||||
suggested-levels-for-max-fees-per-gas)
|
||||
precision)
|
||||
:tx-fee-mode/urgent (send-utils/convert-to-gwei
|
||||
(:high
|
||||
suggested-levels-for-max-fees-per-gas)
|
||||
precision)}}
|
||||
{:transaction-setting/normal (from-wei
|
||||
(:low
|
||||
suggested-levels-for-max-fees-per-gas))
|
||||
:transaction-setting/fast (from-wei
|
||||
(:medium
|
||||
suggested-levels-for-max-fees-per-gas))
|
||||
:transaction-setting/urgent (from-wei
|
||||
(:high
|
||||
suggested-levels-for-max-fees-per-gas))}}
|
||||
:bridge-name (:processor-name new-path)
|
||||
:amount-out (:amount-out new-path)
|
||||
:approval-contract-address (:approval-contract-address new-path)
|
||||
@@ -275,11 +283,19 @@
|
||||
:estimated-time (:estimated-time new-path)
|
||||
:to (:to-chain new-path)
|
||||
:approval-amount-required (:approval-amount-required new-path)
|
||||
;; :cost () ;; tbd not used on desktop
|
||||
:gas-amount (:tx-gas-amount new-path)
|
||||
:router-input-params-uuid (:router-input-params-uuid new-path)
|
||||
:tx-fee-mode (transaction-settings/gas-rate->tx-fee-mode (:tx-gas-fee-mode
|
||||
new-path))}))
|
||||
:nonce (-> new-path
|
||||
:tx-nonce
|
||||
money/from-hex
|
||||
money/to-string
|
||||
js/parseInt)
|
||||
:suggested-tx-nonce (-> new-path
|
||||
:suggested-tx-nonce
|
||||
money/from-hex
|
||||
money/to-string
|
||||
js/parseInt)
|
||||
:suggested-tx-gas-amount (:suggested-tx-gas-amount new-path)}))
|
||||
|
||||
(defn tokens-never-loaded?
|
||||
[db]
|
||||
|
||||
@@ -57,10 +57,11 @@
|
||||
|
||||
(rf/reg-event-fx :wallet/select-account-tab
|
||||
(fn [{:keys [db]} [tab]]
|
||||
{:db (assoc-in db [:wallet :ui :account-page :active-tab] tab)
|
||||
:fx [(if (= tab :activity)
|
||||
[:dispatch [:wallet/fetch-activities-for-current-account]]
|
||||
[:dispatch [:wallet/stop-activity-filter-session]])]}))
|
||||
(let [activity-tab-selected? (= tab :activity)]
|
||||
{:db (assoc-in db [:wallet :ui :account-page :active-tab] tab)
|
||||
:fx [(if activity-tab-selected?
|
||||
[:dispatch [:wallet/fetch-activities-for-current-account]]
|
||||
[:dispatch [:wallet/stop-activity-filter-session]])]})))
|
||||
|
||||
(rf/reg-event-fx :wallet/select-home-tab
|
||||
(fn [{:keys [db]} [tab]]
|
||||
@@ -435,16 +436,14 @@
|
||||
(rf/reg-event-fx
|
||||
:wallet/start-bridge
|
||||
(fn [{:keys [db]}]
|
||||
{:db (assoc-in db [:wallet :ui :send :tx-type] :tx/bridge)
|
||||
:fx [[:dispatch
|
||||
[:wallet/wizard-navigate-forward
|
||||
{:start-flow? true
|
||||
:flow-id :wallet-bridge-flow}]]]}))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/set-send-tx-type
|
||||
(fn [{:keys [db]} [type]]
|
||||
{:db (assoc-in db [:wallet :ui :send :tx-type] type)}))
|
||||
(let [view-id (:view-id db)]
|
||||
(cond-> {:db (assoc-in db [:wallet :ui :send :tx-type] :tx/bridge)}
|
||||
(= view-id :screen/wallet.accounts)
|
||||
(assoc :fx
|
||||
[[:dispatch
|
||||
[:wallet/wizard-navigate-forward
|
||||
{:start-flow? true
|
||||
:flow-id :wallet-bridge-flow}]]])))))
|
||||
|
||||
(rf/reg-event-fx :wallet/select-bridge-network
|
||||
(fn [{:keys [db]} [{:keys [network-chain-id stack-id]}]]
|
||||
|
||||
@@ -91,16 +91,12 @@
|
||||
{:content buy-token/view}]))
|
||||
on-bridge-press (rn/use-callback
|
||||
(fn []
|
||||
;; For a single account, it starts the bridge flow immediately. For
|
||||
;; multiple accounts, it sets the transaction type and starts the
|
||||
;; bridge flow after account selection.
|
||||
(rf/dispatch [:wallet/clean-send-data])
|
||||
(when-not multiple-accounts?
|
||||
(rf/dispatch [:wallet/switch-current-viewing-account
|
||||
first-account-address])
|
||||
(rf/dispatch [:wallet/start-bridge]))
|
||||
first-account-address]))
|
||||
(rf/dispatch [:wallet/start-bridge])
|
||||
(when multiple-accounts?
|
||||
(rf/dispatch [:wallet/set-send-tx-type :tx/bridge])
|
||||
(rf/dispatch [:open-modal :screen/wallet.select-from])))
|
||||
[multiple-accounts? first-account-address])
|
||||
on-swap-press (rn/use-callback
|
||||
|
||||
@@ -92,7 +92,8 @@
|
||||
:receiver-network-values receiver-network-values
|
||||
:network-links network-links
|
||||
:loading-suggested-routes? false
|
||||
:enough-assets? true)}))))
|
||||
:enough-assets? true)
|
||||
:fx [#_[:dispatch [:wallet/clear-user-tx-settings]]]}))))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/suggested-routes-error
|
||||
@@ -664,10 +665,7 @@
|
||||
:wallet/handle-suggested-routes
|
||||
(fn [{:keys [db]} [data]]
|
||||
(let [{send :send swap? :swap} (-> db :wallet :ui)
|
||||
skip-processing-routes? (:skip-processing-suggested-routes? send)
|
||||
clean-user-tx-settings? (get-in db
|
||||
[:wallet :ui :send :custom-tx-settings
|
||||
:delete-on-routes-update?])]
|
||||
skip-processing-routes? (:skip-processing-suggested-routes? send)]
|
||||
(when (or swap? (not skip-processing-routes?))
|
||||
(let [{error-code :code
|
||||
:as error} (:ErrorResponse data)
|
||||
@@ -678,16 +676,13 @@
|
||||
(log/error "failed to get suggested routes (async)"
|
||||
{:event :wallet/handle-suggested-routes
|
||||
:error error-message}))
|
||||
(merge
|
||||
(when clean-user-tx-settings?
|
||||
{:db (update-in db [:wallet :ui :send] dissoc :custom-tx-settings)})
|
||||
{:fx [[:dispatch
|
||||
(cond
|
||||
(and failure? swap?) [:wallet/swap-proposal-error error]
|
||||
failure? [:wallet/suggested-routes-error error-message]
|
||||
swap? [:wallet/swap-proposal-success (fix-routes data)]
|
||||
:else [:wallet/suggested-routes-success (fix-routes data)
|
||||
enough-assets?])]]}))))))
|
||||
{:fx [[:dispatch
|
||||
(cond
|
||||
(and failure? swap?) [:wallet/swap-proposal-error error]
|
||||
failure? [:wallet/suggested-routes-error error-message]
|
||||
swap? [:wallet/swap-proposal-success (fix-routes data)]
|
||||
:else [:wallet/suggested-routes-success (fix-routes data)
|
||||
enough-assets?])]]})))))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/transaction-success
|
||||
@@ -845,67 +840,64 @@
|
||||
:fx [[:dispatch [:navigate-back]]]})))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/init-tx-settings
|
||||
:wallet/clear-user-tx-settings
|
||||
(fn [{db :db}]
|
||||
{:db (-> db
|
||||
(assoc-in [:wallet :ui :send :custom-tx-settings]
|
||||
{:max-base-fee {:low 5
|
||||
:current 8.2
|
||||
:high 9}
|
||||
:priority-fee {:low 0.6
|
||||
:high 5.1
|
||||
:current 1.1}
|
||||
:max-gas-amount {:low 30000
|
||||
:current 31000}
|
||||
:nonce {:last-transaction 21
|
||||
:current 22}}))}))
|
||||
{:db (update-in db [:wallet :ui :send] dissoc :user-tx-settings)}))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/set-max-base-fee
|
||||
(fn [{db :db} [value]]
|
||||
{:db (assoc-in db [:wallet :ui :send :custom-tx-settings :max-base-fee :current] value)}))
|
||||
{:db (assoc-in db [:wallet :ui :send :user-tx-settings :max-base-fee] value)}))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/set-priority-fee
|
||||
(fn [{db :db} [value]]
|
||||
{:db (assoc-in db [:wallet :ui :send :custom-tx-settings :priority-fee :current] value)}))
|
||||
{:db (assoc-in db [:wallet :ui :send :user-tx-settings :priority-fee] value)}))
|
||||
(rf/reg-event-fx
|
||||
|
||||
:wallet/set-max-gas-amount
|
||||
(fn [{db :db} [value]]
|
||||
{:db (assoc-in db [:wallet :ui :send :custom-tx-settings :max-gas-amount :current] value)}))
|
||||
{:db (assoc-in db [:wallet :ui :send :user-tx-settings :gas-amount] value)}))
|
||||
|
||||
(rf/reg-event-fx
|
||||
:wallet/set-nonce
|
||||
(fn [{db :db} [value]]
|
||||
{:db (assoc-in db [:wallet :ui :send :tx-settings :nonce :current] value)}))
|
||||
{:db (assoc-in db [:wallet :ui :send :user-tx-settings :nonce] value)}))
|
||||
|
||||
(rf/reg-event-fx :wallet/quick-fee-mode-confirmed
|
||||
(fn [{db :db} [fee-mode]]
|
||||
(let [gas-rate (transaction-settings/tx-fee-mode->gas-rate fee-mode)
|
||||
(rf/reg-event-fx :wallet/quick-transaction-settings-confirmed
|
||||
(fn [{db :db} [confirmed-setting]]
|
||||
(let [gas-rate (transaction-settings/transaction-setting->gas-rate confirmed-setting)
|
||||
route (first (get-in db [:wallet :ui :send :route]))
|
||||
path-tx-identity (send-utils/path-identity route)
|
||||
params [path-tx-identity gas-rate]]
|
||||
{:db (assoc-in db [:wallet :ui :send :custom-tx-settings :tx-fee-mode] fee-mode)
|
||||
:fx [[:json-rpc/call
|
||||
[{:method "wallet_setFeeMode"
|
||||
:params params
|
||||
:on-error (fn [error]
|
||||
(log/error "failed to set quick transaction settings"
|
||||
{:event :wallet/quick-fee-mode-confirmed
|
||||
:error (:message error)
|
||||
:params params}))}]]
|
||||
[:dispatch [:wallet/mark-user-tx-settings-for-deletion]]]})))
|
||||
{:db (assoc-in db [:wallet :ui :send :confirmed-quick-tx-setting] confirmed-setting)
|
||||
:json-rpc/call [{:method "wallet_setFeeMode"
|
||||
:params params
|
||||
:on-error (fn [error]
|
||||
(log/error "failed to set quick transaction settings"
|
||||
{:event :wallet/quick-transaction-settings-confirmed
|
||||
:error (:message error)
|
||||
:params params}))}]})))
|
||||
|
||||
|
||||
;; There is a delay between the moment when user selected
|
||||
;; custom settings and the moment when new route arrived
|
||||
;; with those settings applied. During this delay
|
||||
;; we should keep user settings for ui. After new route
|
||||
;; arrived we should clean the settings.
|
||||
(rf/reg-event-fx :wallet/mark-user-tx-settings-for-deletion
|
||||
|
||||
(rf/reg-event-fx :wallet/custom-transaction-settings-confirmed
|
||||
(fn [{db :db}]
|
||||
{:db (assoc-in db [:wallet :ui :send :custom-tx-settings :delete-on-routes-update?] true)}))
|
||||
(let [route (first (get-in db [:wallet :ui :send :route]))
|
||||
user-tx-settings (get-in db [:wallet :ui :send :user-tx-settings])
|
||||
path-tx-identity (send-utils/path-identity route)
|
||||
custom-tx-params (send-utils/path-tx-custom-params user-tx-settings route)
|
||||
params [path-tx-identity custom-tx-params]]
|
||||
(tap> {:in :wallet/custom-transaction-settings-confirmed
|
||||
:custom-tx-params custom-tx-params})
|
||||
{:json-rpc/call [{:method "wallet_setCustomTxDetails"
|
||||
:params params
|
||||
:on-error (fn [error]
|
||||
(log/error "failed to set custom tx settings"
|
||||
{:event :wallet/custom-transaction-settings-confirmed
|
||||
:error (:message error)
|
||||
:params params}))}]}))
|
||||
)
|
||||
|
||||
|
||||
(rf/reg-event-fx :wallet.send/set-sign-transactions-callback-fx
|
||||
|
||||
@@ -65,9 +65,8 @@
|
||||
:to {:chain-id 1
|
||||
:native-currency-symbol "ETH"}
|
||||
:gas-amount "23487"
|
||||
:gas-fees {:base-fee "32.325296406"
|
||||
:max-priority-fee-per-gas "0.011000001"
|
||||
:eip1559-enabled true}}]
|
||||
:gas-fees {:base-fee "32.325296406"
|
||||
:eip1559-enabled true}}]
|
||||
:wallet/wallet-send-suggested-routes nil
|
||||
:wallet/wallet-send-receiver-networks [1]
|
||||
:view-id :screen/wallet.send-input-amount
|
||||
|
||||
@@ -182,17 +182,18 @@
|
||||
[rn/activity-indicator {:style {:flex 1}}]
|
||||
route-loaded?
|
||||
[:<>
|
||||
[quo/button
|
||||
{:icon-only? true
|
||||
:type :outline
|
||||
:size 32
|
||||
:inner-style {:opacity 1}
|
||||
:accessibility-label :advanced-button
|
||||
:container-style {:margin-right 8}
|
||||
:on-press #(rf/dispatch
|
||||
[:show-bottom-sheet
|
||||
{:content transaction-settings/settings-sheet}])}
|
||||
:i/advanced]
|
||||
(when (ff/enabled? ::ff/wallet.transaction-params)
|
||||
[quo/button
|
||||
{:icon-only? true
|
||||
:type :outline
|
||||
:size 32
|
||||
:inner-style {:opacity 1}
|
||||
:accessibility-label :advanced-button
|
||||
:container-style {:margin-right 8}
|
||||
:on-press #(rf/dispatch
|
||||
[:show-bottom-sheet
|
||||
{:content transaction-settings/settings-sheet}])}
|
||||
:i/advanced])
|
||||
[data-item
|
||||
{:title (i18n/label :t/est-time)
|
||||
:subtitle (i18n/label :t/time-in-mins {:minutes (str estimated-time-min)})}]
|
||||
@@ -246,10 +247,6 @@
|
||||
biometric-auth? (= (rf/sub [:auth-method]) constants/auth-method-biometric)
|
||||
biometric-type (rf/sub [:biometrics/supported-type])]
|
||||
(hot-reload/use-safe-unmount #(rf/dispatch [:wallet/clean-route-data-for-collectible-tx]))
|
||||
(rn/use-mount
|
||||
(fn []
|
||||
(when (ff/enabled? ::ff/wallet.transaction-params)
|
||||
(rf/dispatch [:wallet/init-tx-settings]))))
|
||||
[rn/view {:style {:flex 1}}
|
||||
[floating-button-page/view
|
||||
{:footer-container-padding 0
|
||||
|
||||
@@ -2,22 +2,13 @@
|
||||
(:require
|
||||
[status-im.constants :as constants]))
|
||||
|
||||
(def default-transaction-setting :tx-fee-mode/fast)
|
||||
(def default-transaction-setting :transaction-setting/fast)
|
||||
|
||||
(defn tx-fee-mode->gas-rate
|
||||
[tx-fee-mode]
|
||||
(case tx-fee-mode
|
||||
:tx-fee-mode/normal constants/gas-rate-low
|
||||
:tx-fee-mode/fast constants/gas-rate-medium
|
||||
:tx-fee-mode/urgent constants/gas-rate-high
|
||||
:tx-fee-mode/custom constants/gas-rate-custom
|
||||
(defn transaction-setting->gas-rate
|
||||
[transaction-setting]
|
||||
(case transaction-setting
|
||||
:transaction-setting/normal constants/gas-rate-low
|
||||
:transaction-setting/fast constants/gas-rate-medium
|
||||
:transaction-setting/urgent constants/gas-rate-high
|
||||
:transaction-setting/custom constants/gas-rate-custom
|
||||
constants/gas-rate-medium))
|
||||
|
||||
(defn gas-rate->tx-fee-mode
|
||||
[gas-rate]
|
||||
(condp = gas-rate
|
||||
constants/gas-rate-low :tx-fee-mode/normal
|
||||
constants/gas-rate-medium :tx-fee-mode/fast
|
||||
constants/gas-rate-high :tx-fee-mode/urgent
|
||||
constants/gas-rate-custom :tx-fee-mode/custom
|
||||
:tx-fee-mode/fast))
|
||||
|
||||
@@ -6,25 +6,36 @@
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
(defn gas-amount-hint-text
|
||||
[{:keys [current]} lower-limit-exceeded? _upper-limit-exceeded?]
|
||||
[current {:keys [low high]} _entered-value lower-limit-exceeded? upper-limit-exceeded?]
|
||||
(cond
|
||||
lower-limit-exceeded? (i18n/label :t/gas-amount-lower {:current current})
|
||||
lower-limit-exceeded? (i18n/label :t/gas-amount-lower {:low low})
|
||||
upper-limit-exceeded? (i18n/label :t/gas-amount-higher {:high high})
|
||||
:else (i18n/label :t/current-units {:current current})))
|
||||
|
||||
(defn gas-amount-hint-status
|
||||
[_entered-value lower-limit-exceeded? upper-limit-exceeded?]
|
||||
(if (or lower-limit-exceeded? upper-limit-exceeded?)
|
||||
:error
|
||||
:default))
|
||||
|
||||
(defn view
|
||||
[]
|
||||
(let [suggested-values (rf/sub [:wallet/tx-settings-max-gas-amount])
|
||||
hint-text (partial gas-amount-hint-text suggested-values)]
|
||||
(let [spectrum {:low 21000
|
||||
:high 7920027}
|
||||
current (rf/sub [:wallet/tx-settings-gas-amount])
|
||||
hint-text (partial gas-amount-hint-text current spectrum)]
|
||||
[transaction-settings/custom-setting-screen
|
||||
{:screen-title (i18n/label :t/max-gas-amount)
|
||||
:token-symbol :units
|
||||
:hint-text-fn hint-text
|
||||
:suggested-values suggested-values
|
||||
:info-title (i18n/label :t/gas-amount)
|
||||
:info-content (i18n/label :t/about-gas-amount)
|
||||
:on-save (fn [new-val]
|
||||
(rf/dispatch [:wallet/set-max-gas-amount new-val])
|
||||
(rf/dispatch [:navigate-back])
|
||||
(rf/dispatch [:show-bottom-sheet
|
||||
{:content transaction-settings/custom-settings-sheet}]))
|
||||
:with-decimals? false}]))
|
||||
{:screen-title (i18n/label :t/max-gas-amount)
|
||||
:token-symbol :units
|
||||
:hint-text-fn hint-text
|
||||
:status-fn gas-amount-hint-status
|
||||
:current current
|
||||
:spectrum spectrum
|
||||
:info-title (i18n/label :t/gas-amount)
|
||||
:info-content (i18n/label :t/about-gas-amount)
|
||||
:on-save (fn [new-val]
|
||||
(rf/dispatch [:wallet/set-max-gas-amount new-val])
|
||||
(rf/dispatch [:navigate-back])
|
||||
(rf/dispatch [:show-bottom-sheet
|
||||
{:content transaction-settings/custom-settings-sheet}]))
|
||||
:with-decimals? false}]))
|
||||
|
||||
@@ -6,25 +6,36 @@
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
(defn max-base-fee-hint-text
|
||||
[current lower-limit-exceeded? upper-limit-exceeded?]
|
||||
[max-base-fee priority-fee _entered-value lower-limit-exceeded? upper-limit-exceeded?]
|
||||
(cond
|
||||
upper-limit-exceeded? (i18n/label :t/max-base-fee-higher {:current current})
|
||||
lower-limit-exceeded? (i18n/label :t/max-base-fee-lower {:current current})
|
||||
:else (i18n/label :t/fee-current-gwei {:current current})))
|
||||
upper-limit-exceeded? (i18n/label :t/max-base-fee-higher {:current max-base-fee})
|
||||
lower-limit-exceeded? (i18n/label :t/max-base-fee-lower {:priority-fee priority-fee})
|
||||
:else (i18n/label :t/max-base-fee-current {:current max-base-fee})))
|
||||
|
||||
(defn input-status
|
||||
[_entered-value lower-limit-exceeded? upper-limit-exceeded?]
|
||||
(cond
|
||||
upper-limit-exceeded? :warning
|
||||
lower-limit-exceeded? :error
|
||||
:else :default))
|
||||
|
||||
(defn view
|
||||
[]
|
||||
(let [suggested-values (rf/sub [:wallet/tx-settings-max-base-fee])
|
||||
hint-text (partial max-base-fee-hint-text (:current suggested-values))]
|
||||
(let [max-base-fee (rf/sub [:wallet/tx-settings-max-base-fee])
|
||||
priority-fee (rf/sub [:wallet/tx-settings-priority-fee])
|
||||
hint-text (partial max-base-fee-hint-text max-base-fee priority-fee)]
|
||||
[transaction-settings/custom-setting-screen
|
||||
{:screen-title (i18n/label :t/max-base-fee)
|
||||
:token-sybmol :gwei
|
||||
:hint-text-fn hint-text
|
||||
:suggested-values suggested-values
|
||||
:info-title (i18n/label :t/max-base-fee)
|
||||
:info-content (i18n/label :t/about-max-base-fee)
|
||||
:on-save (fn [new-val]
|
||||
(rf/dispatch [:wallet/set-max-base-fee new-val])
|
||||
(rf/dispatch [:navigate-back])
|
||||
(rf/dispatch [:show-bottom-sheet
|
||||
{:content transaction-settings/custom-settings-sheet}]))}]))
|
||||
{:screen-title (i18n/label :t/max-base-fee)
|
||||
:token-sybmol :gwei
|
||||
:hint-text-fn hint-text
|
||||
:status-fn input-status
|
||||
:current max-base-fee
|
||||
:spectrum {:high max-base-fee
|
||||
:low priority-fee}
|
||||
:info-title (i18n/label :t/max-base-fee)
|
||||
:info-content (i18n/label :t/about-max-base-fee)
|
||||
:on-save (fn [new-val]
|
||||
(rf/dispatch [:wallet/set-max-base-fee new-val])
|
||||
(rf/dispatch [:navigate-back])
|
||||
(rf/dispatch [:show-bottom-sheet
|
||||
{:content transaction-settings/custom-settings-sheet}]))}]))
|
||||
|
||||
@@ -11,14 +11,15 @@
|
||||
|
||||
(defn view
|
||||
[]
|
||||
(let [{:keys [last-transaction current]} (rf/sub [:wallet/tx-settings-nonce])
|
||||
suggested-nonce (inc last-transaction)
|
||||
[input-state set-input-state] (rn/use-state (controlled-input/set-value-numeric
|
||||
controlled-input/init-state
|
||||
current))
|
||||
input-value (controlled-input/input-value input-state)
|
||||
warning? (> (controlled-input/value-numeric input-state)
|
||||
suggested-nonce)]
|
||||
(let [current (rf/sub [:wallet/tx-settings-nonce])
|
||||
suggested-nonce (rf/sub [:wallet/tx-settings-suggested-nonce])
|
||||
last-tx-nonce (dec suggested-nonce)
|
||||
[input-state set-input-state] (rn/use-state (controlled-input/set-value-numeric
|
||||
controlled-input/init-state
|
||||
current))
|
||||
input-value (controlled-input/input-value input-state)
|
||||
warning? (> (controlled-input/value-numeric input-state)
|
||||
current)]
|
||||
[rn/view
|
||||
{:style {:flex 1}}
|
||||
[quo/page-nav
|
||||
@@ -41,7 +42,10 @@
|
||||
[quo/input
|
||||
{:type :text
|
||||
:label (i18n/label :t/type-nonce)
|
||||
:label-right (i18n/label :t/last-transaction-is {:number last-transaction})
|
||||
:label-right (i18n/label :t/last-transaction-is
|
||||
{:number (if (< last-tx-nonce 0)
|
||||
"-"
|
||||
last-tx-nonce)})
|
||||
:editable false
|
||||
:default-value input-value
|
||||
:clearable? true
|
||||
|
||||
@@ -6,25 +6,62 @@
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
(defn priority-fee-hint-text
|
||||
[{:keys [current low high]} lower-limit-exceeded? upper-limit-exceeded?]
|
||||
[priority-fee spectrum max-base-fee entered-value lower-limit-exceeded? upper-limit-exceeded?]
|
||||
(cond
|
||||
upper-limit-exceeded? (i18n/label :t/priority-fee-higher {:low low :high high})
|
||||
lower-limit-exceeded? (i18n/label :t/priority-fee-lower {:low low :high high})
|
||||
:else (i18n/label :t/fee-current-gwei {:current current})))
|
||||
(and upper-limit-exceeded? (> entered-value max-base-fee))
|
||||
(i18n/label :t/priority-fee-higher-max-base {:max-base-fee max-base-fee})
|
||||
|
||||
upper-limit-exceeded?
|
||||
(i18n/label :t/priority-fee-higher spectrum)
|
||||
|
||||
lower-limit-exceeded?
|
||||
(i18n/label :t/priority-fee-lower spectrum)
|
||||
|
||||
:else
|
||||
(i18n/label :t/priority-fee-current {:current priority-fee})))
|
||||
|
||||
(defn priority-fee-hint-status
|
||||
[max-base-fee entered-value lower-limit-exceeded? upper-limit-exceeded?]
|
||||
(cond
|
||||
(and upper-limit-exceeded? (> entered-value max-base-fee))
|
||||
:error
|
||||
|
||||
upper-limit-exceeded?
|
||||
:warning
|
||||
|
||||
lower-limit-exceeded?
|
||||
:warning
|
||||
|
||||
:else
|
||||
:default))
|
||||
|
||||
(comment
|
||||
(rf/sub [:wallet/tx-settings-gas-fees])
|
||||
(rf/sub [:wallet/tx-settings-priority-fee])
|
||||
(rf/sub [:wallet/send-route])
|
||||
(:gas-fees (first (rf/sub [:wallet/send-route])))
|
||||
(rf/dispatch [:navigate-back])
|
||||
)
|
||||
|
||||
(defn view
|
||||
[]
|
||||
(let [suggested-values (rf/sub [:wallet/tx-settings-priority-fee])
|
||||
hint-text (partial priority-fee-hint-text suggested-values)]
|
||||
(let [priority-fee (rf/sub [:wallet/tx-settings-priority-fee])
|
||||
max-base-fee (rf/sub [:wallet/tx-settings-max-base-fee])
|
||||
spectrum {:low (rf/sub [:wallet/tx-settings-suggested-min-priority-fee])
|
||||
:high (rf/sub [:wallet/tx-settings-suggested-max-priority-fee])}
|
||||
hint-text (partial priority-fee-hint-text priority-fee spectrum max-base-fee)
|
||||
hint-status (partial priority-fee-hint-status max-base-fee)]
|
||||
[transaction-settings/custom-setting-screen
|
||||
{:screen-title (i18n/label :t/priority-fee)
|
||||
:token-sybmol :gwei
|
||||
:hint-text-fn hint-text
|
||||
:suggested-values suggested-values
|
||||
:info-title (i18n/label :t/priority-fee)
|
||||
:info-content (i18n/label :t/about-priority-fee)
|
||||
:on-save (fn [new-val]
|
||||
(rf/dispatch [:wallet/set-priority-fee new-val])
|
||||
(rf/dispatch [:navigate-back])
|
||||
(rf/dispatch [:show-bottom-sheet
|
||||
{:content transaction-settings/custom-settings-sheet}]))}]))
|
||||
{:screen-title (i18n/label :t/priority-fee)
|
||||
:token-sybmol :gwei
|
||||
:hint-text-fn hint-text
|
||||
:status-fn hint-status
|
||||
:current priority-fee
|
||||
:spectrum spectrum
|
||||
:info-title (i18n/label :t/priority-fee)
|
||||
:info-content (i18n/label :t/about-priority-fee)
|
||||
:on-save (fn [new-val]
|
||||
(rf/dispatch [:wallet/set-priority-fee new-val])
|
||||
(rf/dispatch [:navigate-back])
|
||||
(rf/dispatch [:show-bottom-sheet
|
||||
{:content transaction-settings/custom-settings-sheet}]))}]))
|
||||
|
||||
@@ -5,18 +5,16 @@
|
||||
[react-native.platform :as platform]
|
||||
[react-native.safe-area :as safe-area]
|
||||
[status-im.common.controlled-input.utils :as controlled-input]
|
||||
[status-im.feature-flags :as ff]
|
||||
[utils.i18n :as i18n]
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
|
||||
(defn custom-settings-sheet
|
||||
[_]
|
||||
(let [max-base-fee (:current (rf/sub [:wallet/tx-settings-max-base-fee]))
|
||||
priority-fee (:current (rf/sub [:wallet/tx-settings-priority-fee]))
|
||||
max-gas-amount (:current (rf/sub [:wallet/tx-settings-max-gas-amount]))
|
||||
nonce (:current (rf/sub [:wallet/tx-settings-nonce]))
|
||||
account-color (rf/sub [:wallet/current-viewing-account-color])]
|
||||
(let [max-base-fee (rf/sub [:wallet/tx-settings-max-base-fee])
|
||||
priority-fee (rf/sub [:wallet/tx-settings-priority-fee])
|
||||
max-gas-amount (rf/sub [:wallet/tx-settings-gas-amount])
|
||||
nonce (rf/sub [:wallet/tx-settings-nonce])]
|
||||
[rn/view
|
||||
[quo/drawer-top
|
||||
{:title (i18n/label :t/custom)}]
|
||||
@@ -64,18 +62,15 @@
|
||||
:preview-size :size-32}]}]
|
||||
[quo/bottom-actions
|
||||
{:actions :one-action
|
||||
:button-one-props {:on-press #(rf/dispatch [:hide-bottom-sheet])
|
||||
:customization-color account-color}
|
||||
:button-one-props {:on-press (fn []
|
||||
(rf/dispatch [:wallet/custom-transaction-settings-confirmed])
|
||||
(rf/dispatch [:hide-bottom-sheet]))}
|
||||
:button-one-label (i18n/label :t/confirm)}]]))
|
||||
|
||||
(defn settings-sheet
|
||||
[]
|
||||
(let [current-transaction-setting (rf/sub [:wallet/tx-fee-mode])
|
||||
account-color (rf/sub [:wallet/current-viewing-account-color])
|
||||
[transaction-setting set-transaction-setting] (rn/use-state current-transaction-setting)
|
||||
set-normal #(set-transaction-setting :tx-fee-mode/normal)
|
||||
set-fast #(set-transaction-setting :tx-fee-mode/fast)
|
||||
set-urgent #(set-transaction-setting :tx-fee-mode/urgent)]
|
||||
(let [current-transaction-setting (rf/sub [:wallet/confirmed-quick-tx-setting])
|
||||
[transaction-setting set-transaction-setting] (rn/use-state current-transaction-setting)]
|
||||
[rn/view
|
||||
[quo/drawer-top
|
||||
{:title (i18n/label :t/transaction-settings)}]
|
||||
@@ -84,77 +79,63 @@
|
||||
:data [{:title (str (i18n/label :t/normal) "~60s")
|
||||
:image-props "🍿"
|
||||
:description-props {:text (rf/sub [:wallet/wallet-send-transaction-setting-fiat-formatted
|
||||
:tx-fee-mode/normal])}
|
||||
:transaction-setting/normal])}
|
||||
:image :emoji
|
||||
:description :text
|
||||
:action :selector
|
||||
:action-props {:type :radio
|
||||
:checked? (= :tx-fee-mode/normal transaction-setting)
|
||||
:customization-color account-color
|
||||
;; there is an UI isssue in quo/category, it has :on-press event
|
||||
;; and child radio button has own :on-change. If they are not set
|
||||
;; to the same action then we are getting inconsistent behaviour
|
||||
;; when user can click on settings item but cant on radio itself.
|
||||
;; So duplication is to prevent that until general fix is applied
|
||||
;; to quo/category
|
||||
:on-change set-normal}
|
||||
:on-press set-normal
|
||||
:action-props {:type :radio
|
||||
:checked? (= :transaction-setting/normal transaction-setting)}
|
||||
:on-press #(set-transaction-setting :transaction-setting/normal)
|
||||
:label :text
|
||||
:preview-size :size-32}
|
||||
{:title (str (i18n/label :t/fast) "~40s")
|
||||
:image-props "🚗"
|
||||
:description-props {:text (rf/sub [:wallet/wallet-send-transaction-setting-fiat-formatted
|
||||
:tx-fee-mode/fast])}
|
||||
:transaction-setting/fast])}
|
||||
:image :emoji
|
||||
:description :text
|
||||
:action :selector
|
||||
:action-props {:type :radio
|
||||
:checked? (= :tx-fee-mode/fast transaction-setting)
|
||||
:on-change set-fast
|
||||
:customization-color account-color}
|
||||
:on-press set-fast
|
||||
:action-props {:type :radio
|
||||
:checked? (= :transaction-setting/fast transaction-setting)}
|
||||
:on-press #(set-transaction-setting :transaction-setting/fast)
|
||||
:label :text
|
||||
:preview-size :size-32}
|
||||
{:title (str (i18n/label :t/urgent) "~15s")
|
||||
:image-props "🚀"
|
||||
:description-props {:text (rf/sub [:wallet/wallet-send-transaction-setting-fiat-formatted
|
||||
:tx-fee-mode/urgent])}
|
||||
:transaction-setting/urgent])}
|
||||
:image :emoji
|
||||
:description :text
|
||||
:action :selector
|
||||
:action-props {:type :radio
|
||||
:checked? (= :tx-fee-mode/urgent transaction-setting)
|
||||
:customization-color account-color
|
||||
:on-change set-urgent}
|
||||
:on-press set-urgent
|
||||
:action-props {:type :radio
|
||||
:checked? (= :transaction-setting/urgent transaction-setting)}
|
||||
:on-press #(set-transaction-setting :transaction-setting/urgent)
|
||||
:label :text
|
||||
:preview-size :size-32}
|
||||
(when (ff/enabled? ::ff/wallet.transaction-params)
|
||||
{:title (i18n/label :t/custom)
|
||||
:image-props :i/edit
|
||||
:description-props {:text "Set your own fees and nonce"}
|
||||
:image :icon
|
||||
:description :text
|
||||
:action :arrow
|
||||
:on-press #(rf/dispatch
|
||||
[:show-bottom-sheet
|
||||
{:content custom-settings-sheet}])
|
||||
:label :text
|
||||
:preview-size :size-32})]}]
|
||||
{:title (i18n/label :t/custom)
|
||||
:image-props :i/edit
|
||||
:description-props {:text "Set your own fees and nonce"}
|
||||
:image :icon
|
||||
:description :text
|
||||
:action :arrow
|
||||
:on-press #(rf/dispatch
|
||||
[:show-bottom-sheet
|
||||
{:content custom-settings-sheet}])
|
||||
:label :text
|
||||
:preview-size :size-32}]}]
|
||||
[quo/bottom-actions
|
||||
{:actions :one-action
|
||||
:button-one-props {:on-press (fn []
|
||||
(rf/dispatch [:wallet/quick-fee-mode-confirmed
|
||||
transaction-setting])
|
||||
(rf/dispatch [:hide-bottom-sheet]))
|
||||
:customization-color account-color}
|
||||
:button-one-props {:on-press (fn []
|
||||
(rf/dispatch [:wallet/quick-transaction-settings-confirmed
|
||||
transaction-setting])
|
||||
(rf/dispatch [:hide-bottom-sheet]))}
|
||||
:button-one-label (i18n/label :t/confirm)}]]))
|
||||
|
||||
(defn- hint
|
||||
[{:keys [error? text]}]
|
||||
[{:keys [status text]}]
|
||||
[quo/network-tags
|
||||
{:title text
|
||||
:status (when error? :error)}])
|
||||
:status status}])
|
||||
|
||||
(defn info-sheet
|
||||
[info-title info-content]
|
||||
@@ -175,23 +156,33 @@
|
||||
(i18n/label :t/read-more)]]])
|
||||
|
||||
(defn custom-setting-screen
|
||||
[{:keys [screen-title token-symbol hint-text-fn suggested-values info-title info-content on-save
|
||||
[{:keys [screen-title token-symbol hint-text-fn status-fn current spectrum info-title info-content
|
||||
on-save
|
||||
with-decimals?]
|
||||
:or {with-decimals? true}}]
|
||||
(let [[input-state set-input-state] (rn/use-state (controlled-input/set-value-numeric
|
||||
controlled-input/init-state
|
||||
(:current suggested-values)))
|
||||
current))
|
||||
input-value (controlled-input/input-value input-state)
|
||||
out-of-limits? (controlled-input/input-error input-state)
|
||||
valid-input? (not (or (controlled-input/empty-value? input-state)
|
||||
out-of-limits?))]
|
||||
(rn/use-mount
|
||||
status (when status-fn
|
||||
(status-fn
|
||||
input-value
|
||||
(controlled-input/lower-limit-exceeded? input-state)
|
||||
(controlled-input/upper-limit-exceeded? input-state)))
|
||||
hint-text (when hint-text-fn
|
||||
(hint-text-fn
|
||||
input-value
|
||||
(controlled-input/lower-limit-exceeded? input-state)
|
||||
(controlled-input/upper-limit-exceeded? input-state)))]
|
||||
(tap> {:in :custom-setting-screen
|
||||
:spectrum spectrum})
|
||||
(rn/use-effect
|
||||
(fn []
|
||||
|
||||
(set-input-state (fn [state]
|
||||
(-> state
|
||||
(controlled-input/set-upper-limit (:high suggested-values))
|
||||
(controlled-input/set-lower-limit (:low suggested-values)))))))
|
||||
(controlled-input/set-upper-limit (:high spectrum))
|
||||
(controlled-input/set-lower-limit (:low spectrum))))))
|
||||
[spectrum])
|
||||
[rn/view
|
||||
{:style {:flex 1}}
|
||||
[quo/page-nav
|
||||
@@ -212,18 +203,16 @@
|
||||
:swappable? false
|
||||
:show-token-icon? false
|
||||
:value input-value
|
||||
:error? out-of-limits?
|
||||
:error? (= status :error)
|
||||
:currency-symbol token-symbol
|
||||
:hint-component [hint
|
||||
{:error? out-of-limits?
|
||||
:text (hint-text-fn
|
||||
(controlled-input/lower-limit-exceeded? input-state)
|
||||
(controlled-input/upper-limit-exceeded? input-state))}]}]
|
||||
{:status status
|
||||
:text hint-text}]}]
|
||||
[rn/view {:style {:flex 1}}]
|
||||
[quo/bottom-actions
|
||||
{:actions :one-action
|
||||
:button-one-label (i18n/label :t/save-changes)
|
||||
:button-one-props {:disabled? (not valid-input?)
|
||||
:button-one-props {:disabled? (= status :error)
|
||||
:on-press #(on-save (controlled-input/value-numeric input-state))}}]
|
||||
[quo/numbered-keyboard
|
||||
{:container-style {:padding-bottom (safe-area/get-bottom)}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
(ns status-im.contexts.wallet.send.utils
|
||||
(:require
|
||||
[native-module.core :as native-module]
|
||||
[status-im.constants :as constants]
|
||||
[status-im.contexts.wallet.common.utils.networks :as network-utils]
|
||||
[utils.money :as money]))
|
||||
@@ -250,6 +251,18 @@
|
||||
[path]
|
||||
{:routerInputParamsUuid (:router-input-params-uuid path)
|
||||
:pathName (:bridge-name path)
|
||||
:chainID (get-in path [:from :chain-id])
|
||||
:isApprovalTx (:approval-required path)
|
||||
:communityID nil})
|
||||
:chainID (get-in path [:to :chain-id])
|
||||
:isApprovalTx (:approval-required path)})
|
||||
|
||||
(defn path-tx-custom-params
|
||||
[user-tx-settings route]
|
||||
(let [nonce (or (:nonce user-tx-settings) (:nonce route))
|
||||
gas-amount (or (:gas-amount user-tx-settings) (:gas-amount route))
|
||||
priority-fee (or (:priority-fee user-tx-settings) (get-in route [:gas-fees :tx-priority-fee]))
|
||||
max-base-fee (or (:max-base-fee user-tx-settings) (get-in route [:gas-fees :current-base-fee]))]
|
||||
{:gasFeeMode constants/gas-rate-custom
|
||||
:nonce nonce
|
||||
:gasAmount gas-amount
|
||||
:maxFeesPerGas (money/to-hex (money/->wei :gwei (money/add max-base-fee priority-fee)))
|
||||
:priorityFee (money/to-hex (money/->wei :gwei priority-fee))}))
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
(ns status-im.contexts.wallet.swap.setup-swap.style
|
||||
(:require [quo.foundations.colors :as colors]))
|
||||
(ns status-im.contexts.wallet.swap.setup-swap.style)
|
||||
|
||||
(def container
|
||||
{:flex 1})
|
||||
@@ -41,22 +40,3 @@
|
||||
{:height :auto
|
||||
:min-height 40
|
||||
:max-height 62})
|
||||
|
||||
(defn exchange-rate-loader
|
||||
[theme]
|
||||
{:margin-top 16
|
||||
:width 72
|
||||
:height 14
|
||||
:border-radius 6
|
||||
:background-color (colors/theme-colors colors/neutral-5 colors/neutral-90 theme)})
|
||||
|
||||
(def exchange-rate-container
|
||||
{:margin-top 16
|
||||
:flex-direction :row})
|
||||
|
||||
(def exchange-rate-crypto-label
|
||||
{:color colors/neutral-50})
|
||||
|
||||
(defn exchange-rate-fiat-label
|
||||
[theme]
|
||||
{:color (colors/theme-colors colors/neutral-40 colors/neutral-60 theme)})
|
||||
|
||||
@@ -343,33 +343,6 @@
|
||||
(= (:symbol token)
|
||||
(:symbol asset-to-pay)))}]))
|
||||
|
||||
(defn- swap-exchange-rate-view
|
||||
[]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
asset-to-pay (rf/sub [:wallet/swap-asset-to-pay])
|
||||
asset-to-receive (rf/sub [:wallet/swap-asset-to-receive])
|
||||
swap-exchange-rate-crypto (rf/sub [:wallet/swap-exchange-rate-crypto])
|
||||
swap-exchange-rate-fiat (rf/sub [:wallet/swap-exchange-rate-fiat])
|
||||
loading-swap-proposal? (rf/sub [:wallet/swap-loading-swap-proposal?])]
|
||||
(cond
|
||||
loading-swap-proposal?
|
||||
[rn/view {:style (style/exchange-rate-loader theme)}]
|
||||
swap-exchange-rate-crypto
|
||||
[rn/view {:style style/exchange-rate-container}
|
||||
[quo/text
|
||||
{:weight :medium
|
||||
:size :paragraph-2
|
||||
:style style/exchange-rate-crypto-label}
|
||||
(i18n/label :t/swap-exchange-rate-in-crypto
|
||||
{:receive-token-symbol (:symbol asset-to-receive)
|
||||
:exchange-rate swap-exchange-rate-crypto
|
||||
:pay-token-symbol (:symbol asset-to-pay)})]
|
||||
[quo/text
|
||||
{:weight :medium
|
||||
:size :paragraph-2
|
||||
:style (style/exchange-rate-fiat-label theme)}
|
||||
(str " (" swap-exchange-rate-fiat ")")]])))
|
||||
|
||||
(defn view
|
||||
[]
|
||||
(let [[pay-input-state set-pay-input-state] (rn/use-state controlled-input/init-state)
|
||||
@@ -522,7 +495,7 @@
|
||||
:params {:show-account-balances? true
|
||||
:asset-symbol (:symbol asset-to-pay)
|
||||
:network network}}]
|
||||
[rn/scroll-view {:style style/inputs-container}
|
||||
[rn/view {:style style/inputs-container}
|
||||
[pay-token-input
|
||||
{:input-state pay-input-state
|
||||
:on-max-press on-max-press
|
||||
@@ -541,8 +514,7 @@
|
||||
[receive-token-input
|
||||
{:input-focused? (not pay-input-focused?)
|
||||
:on-token-press #(rf/dispatch [:show-bottom-sheet {:content receive-token-bottom-sheet}])
|
||||
:on-input-focus #(set-pay-input-focused? false)}]
|
||||
[swap-exchange-rate-view]]
|
||||
:on-input-focus #(set-pay-input-focused? false)}]]
|
||||
[rn/view {:style style/footer-container}
|
||||
(when-not loading-swap-proposal? [alert-banner {:pay-input-error? pay-input-error?}])
|
||||
(when (or loading-swap-proposal? swap-proposal)
|
||||
|
||||
@@ -167,6 +167,7 @@
|
||||
(when
|
||||
(= (:chain-id network) bridge-to-chain-id)
|
||||
network))
|
||||
|
||||
networks))))
|
||||
|
||||
(rf/reg-sub
|
||||
@@ -207,38 +208,87 @@
|
||||
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/custom-tx-settings
|
||||
:wallet/confirmed-quick-tx-setting
|
||||
:<- [:wallet/wallet-send]
|
||||
:-> :custom-tx-settings)
|
||||
(fn [send-data]
|
||||
(or (:confirmed-quick-tx-setting send-data) :transaction-setting/fast)))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-fee-mode-user
|
||||
:<- [:wallet/custom-tx-settings]
|
||||
:-> :tx-fee-mode)
|
||||
:wallet/user-tx-settings
|
||||
:<- [:wallet/wallet-send]
|
||||
:-> :user-tx-settings)
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-max-base-fee
|
||||
:<- [:wallet/custom-tx-settings]
|
||||
:wallet/tx-settings-max-base-fee-user
|
||||
:<- [:wallet/user-tx-settings]
|
||||
:-> :max-base-fee)
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-priority-fee
|
||||
:<- [:wallet/custom-tx-settings]
|
||||
:wallet/tx-settings-priority-fee-user
|
||||
:<- [:wallet/user-tx-settings]
|
||||
:-> :priority-fee)
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-max-gas-amount
|
||||
:<- [:wallet/custom-tx-settings]
|
||||
:-> :max-gas-amount)
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-nonce
|
||||
:<- [:wallet/custom-tx-settings]
|
||||
:wallet/tx-settings-nonce-user
|
||||
:<- [:wallet/user-tx-settings]
|
||||
:-> :nonce)
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-fee-mode
|
||||
:wallet/tx-settings-gas-amount-user
|
||||
:<- [:wallet/user-tx-settings]
|
||||
:-> :gas-amount)
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-gas-amount
|
||||
:<- [:wallet/send-route]
|
||||
:<- [:wallet/tx-settings-fee-mode-user]
|
||||
:<- [:wallet/tx-settings-gas-amount-user]
|
||||
(fn [[route value-set-by-user]]
|
||||
(or value-set-by-user (:tx-fee-mode (first route)))))
|
||||
(or value-set-by-user (:gas-amount (first route)))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-nonce
|
||||
:<- [:wallet/send-route]
|
||||
:<- [:wallet/tx-settings-nonce-user]
|
||||
(fn [[route value-set-by-user]]
|
||||
(or value-set-by-user (:nonce (first route)))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-gas-fees
|
||||
:<- [:wallet/send-route]
|
||||
(fn [route]
|
||||
(:gas-fees (first route))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-suggested-nonce
|
||||
:<- [:wallet/send-route]
|
||||
(fn [route]
|
||||
(:suggested-tx-nonce (first route))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-priority-fee
|
||||
:<- [:wallet/tx-settings-gas-fees]
|
||||
:<- [:wallet/tx-settings-priority-fee-user]
|
||||
(fn [[gas-fees value-set-by-user]]
|
||||
(or value-set-by-user (:tx-priority-fee gas-fees))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-max-base-fee
|
||||
:<- [:wallet/tx-settings-gas-fees]
|
||||
:<- [:wallet/tx-settings-max-base-fee-user]
|
||||
(fn [[gas-fees value-set-by-user]]
|
||||
(or value-set-by-user (:current-base-fee gas-fees))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-suggested-max-priority-fee
|
||||
:<- [:wallet/tx-settings-gas-fees]
|
||||
:<- [:wallet/tx-settings-max-base-fee-user]
|
||||
(fn [[gas-fees value-set-by-user]]
|
||||
(or value-set-by-user (:suggested-max-priority-fee gas-fees))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/tx-settings-suggested-min-priority-fee
|
||||
:<- [:wallet/tx-settings-gas-fees]
|
||||
:<- [:wallet/tx-settings-max-base-fee-user]
|
||||
(fn [[gas-fees value-set-by-user]]
|
||||
(or value-set-by-user (:suggested-min-priority-fee gas-fees))))
|
||||
|
||||
|
||||
@@ -333,43 +333,3 @@
|
||||
:token token-for-fees
|
||||
:prices-per-token prices-per-token})]
|
||||
fee-in-fiat)))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/swap-exchange-rate-crypto
|
||||
:<- [:wallet/swap-proposal-amount-in]
|
||||
:<- [:wallet/swap-asset-to-pay]
|
||||
:<- [:wallet/swap-proposal-amount-out]
|
||||
:<- [:wallet/swap-asset-to-receive]
|
||||
(fn [[amount-in asset-to-pay amount-out asset-to-receive]]
|
||||
(let [pay-token-decimals (:decimals asset-to-pay)
|
||||
receive-token-decimals (:decimals asset-to-receive)
|
||||
amount-in-num (some-> amount-in
|
||||
(number/hex->whole pay-token-decimals)
|
||||
(number/to-fixed pay-token-decimals)
|
||||
(money/->bignumber))
|
||||
amount-out-num (some-> amount-out
|
||||
(number/hex->whole receive-token-decimals)
|
||||
(number/to-fixed receive-token-decimals)
|
||||
(money/->bignumber))
|
||||
exchange-rate (when (and amount-in-num amount-out-num)
|
||||
(money/div amount-in-num amount-out-num))
|
||||
display-decimals (min pay-token-decimals
|
||||
constants/min-token-decimals-to-display)]
|
||||
(when exchange-rate
|
||||
(number/to-fixed exchange-rate display-decimals)))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/swap-exchange-rate-fiat
|
||||
:<- [:wallet/swap-exchange-rate-crypto]
|
||||
:<- [:wallet/swap-asset-to-pay]
|
||||
:<- [:profile/currency]
|
||||
:<- [:profile/currency-symbol]
|
||||
:<- [:wallet/prices-per-token]
|
||||
(fn [[swap-exchange-rate asset-to-pay currency currency-symbol prices-per-token]]
|
||||
(when swap-exchange-rate
|
||||
(let [fiat-value (utils/calculate-token-fiat-value
|
||||
{:currency currency
|
||||
:balance swap-exchange-rate
|
||||
:token asset-to-pay
|
||||
:prices-per-token prices-per-token})]
|
||||
(utils/fiat-formatted-for-ui currency-symbol fiat-value)))))
|
||||
|
||||
@@ -901,6 +901,14 @@
|
||||
fee-in-fiat)]
|
||||
fee-formatted)))))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/has-partially-operable-accounts?
|
||||
:<- [:wallet/accounts]
|
||||
(fn [accounts]
|
||||
(->> accounts
|
||||
(some #(= :partially (:operable %)))
|
||||
boolean)))
|
||||
|
||||
(rf/reg-sub
|
||||
:wallet/accounts-names
|
||||
:<- [:wallet/accounts]
|
||||
|
||||
@@ -941,6 +941,20 @@
|
||||
|
||||
(is (match? (rf/sub [sub-name]) "$0.20"))))
|
||||
|
||||
(h/deftest-sub :wallet/has-partially-operable-accounts?
|
||||
[sub-name]
|
||||
(testing "returns false if there are no partially operable accounts"
|
||||
(swap! rf-db/app-db
|
||||
#(assoc-in % [:wallet :accounts] accounts))
|
||||
(is (false? (rf/sub [sub-name]))))
|
||||
|
||||
(testing "returns true if there are partially operable accounts"
|
||||
(swap! rf-db/app-db
|
||||
#(assoc-in %
|
||||
[:wallet :accounts]
|
||||
(update accounts "0x2" assoc :operable :partially)))
|
||||
(is (true? (rf/sub [sub-name])))))
|
||||
|
||||
(h/deftest-sub :wallet/zero-balance-in-all-non-watched-accounts?
|
||||
[sub-name]
|
||||
(testing "returns true if the balance is zero in all non-watched accounts"
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
|
||||
(defn auth-success-fixtures
|
||||
[]
|
||||
(rf/reg-fx :effects.standard-auth/on-auth-success
|
||||
(fn [on-auth-success] (on-auth-success)))
|
||||
(rf/reg-fx :effects.biometric/check-if-available
|
||||
(fn [{:keys [on-success]}] (on-success)))
|
||||
(rf/reg-event-fx :biometric/authenticate
|
||||
@@ -34,7 +32,7 @@
|
||||
(let [on-success-called? (atom false)
|
||||
args (assoc default-args :on-auth-success #(reset! on-success-called? true))]
|
||||
(rf/dispatch [:standard-auth/authorize args])
|
||||
(rf-test/wait-for [:standard-auth/migrate-partially-operable-accounts]
|
||||
(rf-test/wait-for [:standard-auth/on-biometric-success]
|
||||
(is @on-success-called?))))))
|
||||
|
||||
(defn auth-cancel-fixtures
|
||||
|
||||
@@ -143,7 +143,8 @@
|
||||
|
||||
(defn to-hex
|
||||
[^js bn]
|
||||
(str "0x" (to-string bn 16)))
|
||||
(when bn
|
||||
(str "0x" (to-string bn 16))))
|
||||
|
||||
(defn from-hex
|
||||
[hex-str]
|
||||
@@ -195,8 +196,9 @@
|
||||
(greater-than-or-equals balance amount)))
|
||||
|
||||
(defn- add*
|
||||
[bn1 n2]
|
||||
(.add ^js bn1 n2))
|
||||
[n1 n2]
|
||||
(when-let [[^js bn1 ^js bn2] (->bignumbers n1 n2)]
|
||||
(.add ^js bn1 bn2)))
|
||||
|
||||
(def add
|
||||
"Add with defaults, this version is able to receive `nil` and takes them as 0."
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"_comment": "Instead use: scripts/update-status-go.sh <rev>",
|
||||
"owner": "status-im",
|
||||
"repo": "status-go",
|
||||
"version": "chore/bridge-estimated-gas-increase",
|
||||
"commit-sha1": "5e356ce505da6ca427366ff171733f0317ce3cfe",
|
||||
"src-sha256": "189k997g3n7kg3bxb2jbyk70wh3d1h01nlxhzq0k9c59b5bvlhab"
|
||||
"version": "feat/tx-path-new-props",
|
||||
"commit-sha1": "d2c220fe60bb7817753167184ba70e9b47cfa5be",
|
||||
"src-sha256": "10n4kf7lb0rm57b3llyalpgv70dp3k560nxxfpb7f0gcc5kpl97q"
|
||||
}
|
||||
|
||||
+197
-3
@@ -1,15 +1,209 @@
|
||||
import datetime
|
||||
import re
|
||||
import time
|
||||
|
||||
import pytest
|
||||
from _pytest.outcomes import Failed
|
||||
from selenium.common import NoSuchElementException, TimeoutException
|
||||
|
||||
from base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers
|
||||
from tests import marks
|
||||
from support.api.network_api import NetworkApi
|
||||
from tests import marks, run_in_parallel
|
||||
from users import transaction_senders
|
||||
from views.sign_in_view import SignInView
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="new_four_2")
|
||||
@marks.nightly
|
||||
@marks.secured
|
||||
@marks.smoke
|
||||
class TestWalletMultipleDevice(MultipleSharedDeviceTestCase):
|
||||
|
||||
def prepare_devices(self):
|
||||
self.network_api = NetworkApi()
|
||||
self.drivers, self.loop = create_shared_drivers(2)
|
||||
self.sign_in_1, self.sign_in_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
self.sender, self.receiver = transaction_senders['ETH_1'], transaction_senders['ETH_2']
|
||||
self.sender['wallet_address'] = '0x' + self.sender['address']
|
||||
self.receiver['wallet_address'] = '0x' + self.receiver['address']
|
||||
self.loop.run_until_complete(
|
||||
run_in_parallel(((self.sign_in_1.recover_access, {'passphrase': self.sender['passphrase']}),
|
||||
(self.sign_in_2.recover_access, {'passphrase': self.receiver['passphrase']}))))
|
||||
self.home_1, self.home_2 = self.sign_in_1.get_home_view(), self.sign_in_2.get_home_view()
|
||||
self.sender_username, self.receiver_username = self.home_1.get_username(), self.home_2.get_username()
|
||||
self.wallet_1, self.wallet_2 = self.sign_in_1.get_wallet_view(), self.sign_in_2.get_wallet_view()
|
||||
self.wallet_1.wallet_tab.click()
|
||||
self.wallet_2.wallet_tab.click()
|
||||
self.network = "Arbitrum"
|
||||
|
||||
def _get_balances_before_tx(self):
|
||||
# ToDo: Arbiscan API is down, looking for analogue
|
||||
# sender_balance = self.network_api.get_balance(self.sender['wallet_address'])
|
||||
# receiver_balance = self.network_api.get_balance(self.receiver['wallet_address'])
|
||||
self.wallet_1.just_fyi("Getting ETH amount in the wallet of the sender before transaction")
|
||||
self.wallet_1.get_account_element().click()
|
||||
eth_amount_sender = self.wallet_1.get_asset(asset_name='Ether').get_amount()
|
||||
self.wallet_2.just_fyi("Getting ETH amount in the wallet of the receiver before transaction")
|
||||
self.wallet_2.get_account_element().click()
|
||||
eth_amount_receiver = self.wallet_2.get_asset(asset_name='Ether').get_amount()
|
||||
# return sender_balance, receiver_balance, eth_amount_sender, eth_amount_receiver
|
||||
return eth_amount_sender, eth_amount_receiver
|
||||
|
||||
def _check_balances_after_tx(self, amount_to_send, sender_balance, receiver_balance, eth_amount_sender,
|
||||
eth_amount_receiver):
|
||||
# ToDo: Arbiscan API is down, looking for analogue
|
||||
# try:
|
||||
# self.network_api.wait_for_balance_to_be(address=self.sender['wallet_address'],
|
||||
# expected_balance=sender_balance - amount_to_send)
|
||||
# except TimeoutException as e:
|
||||
# self.errors.append("Sender " + e.msg)
|
||||
# try:
|
||||
# self.network_api.wait_for_balance_to_be(address=self.receiver['wallet_address'],
|
||||
# expected_balance=receiver_balance + amount_to_send)
|
||||
# except TimeoutException as e:
|
||||
# self.errors.append("Receiver " + e.msg)
|
||||
|
||||
def wait_for_wallet_balance_to_update(wallet_view, user_name, initial_eth_amount):
|
||||
wallet_view.just_fyi("Getting ETH amount in the wallet of the %s after transaction" % user_name)
|
||||
if user_name == self.sender_username:
|
||||
exp_amount = round(initial_eth_amount - amount_to_send, 4)
|
||||
else:
|
||||
exp_amount = round(initial_eth_amount + amount_to_send, 4)
|
||||
|
||||
# for _ in range(12): # ToDo: 120 sec wait time, enable when autoupdate feature is ready
|
||||
new_eth_amount = round(wallet_view.get_asset(asset_name='Ether').get_amount(), 4)
|
||||
if user_name == self.sender_username and new_eth_amount <= exp_amount:
|
||||
return
|
||||
if user_name == self.receiver_username and new_eth_amount >= exp_amount:
|
||||
return
|
||||
self.errors.append(wallet_view,
|
||||
"Eth amount in the %s's wallet is %s but should be %s" % (
|
||||
user_name, new_eth_amount, exp_amount))
|
||||
|
||||
# ToDo: disable relogin when autoupdate feature is ready
|
||||
self.home_1.just_fyi("Relogin for getting an updated balance")
|
||||
self.home_2.just_fyi("Relogin for getting an updated balance")
|
||||
for _ in range(6): # just waiting 1 minute here to be sure that balances are updated
|
||||
self.wallet_1.wallet_tab.is_element_displayed()
|
||||
self.wallet_2.wallet_tab.is_element_displayed()
|
||||
time.sleep(10)
|
||||
self.loop.run_until_complete(
|
||||
run_in_parallel(((self.home_1.reopen_app, {'user_name': self.sender_username}),
|
||||
(self.home_2.reopen_app, {'user_name': self.receiver_username}))))
|
||||
self.wallet_1.wallet_tab.wait_and_click()
|
||||
self.wallet_2.wallet_tab.wait_and_click()
|
||||
self.wallet_1.set_network_in_wallet(network_name=self.network)
|
||||
self.wallet_2.set_network_in_wallet(network_name=self.network)
|
||||
self.loop.run_until_complete(
|
||||
run_in_parallel(((wait_for_wallet_balance_to_update, {'wallet_view': self.wallet_1,
|
||||
'user_name': self.sender_username,
|
||||
'initial_eth_amount': eth_amount_sender}),
|
||||
(wait_for_wallet_balance_to_update, {'wallet_view': self.wallet_2,
|
||||
'user_name': self.receiver_username,
|
||||
'initial_eth_amount': eth_amount_receiver}))))
|
||||
|
||||
def _check_last_transaction_in_activity(self, wallet_view, device_time, amount_to_send, sender=True):
|
||||
wallet_view.get_account_element().click()
|
||||
wallet_view.activity_tab.click()
|
||||
wallet_view.just_fyi("Checking the transaction in the activity tab")
|
||||
current_time = datetime.datetime.strptime(device_time, "%Y-%m-%dT%H:%M:%S%z")
|
||||
expected_time = "Today %s" % current_time.strftime('%-I:%M %p')
|
||||
possible_times = [expected_time,
|
||||
"Today %s" % (current_time + datetime.timedelta(minutes=1)).strftime('%-I:%M %p')]
|
||||
sender_address_short = self.sender['wallet_address'].replace(self.sender['wallet_address'][5:-3], '...').lower()
|
||||
receiver_address_short = self.receiver['wallet_address'].replace(self.receiver['wallet_address'][5:-3],
|
||||
'...').lower()
|
||||
activity_element = wallet_view.get_activity_element()
|
||||
try:
|
||||
if not all((activity_element.header == 'Send' if sender else 'Receive',
|
||||
activity_element.timestamp in possible_times,
|
||||
activity_element.amount == '%s ETH' % amount_to_send,
|
||||
activity_element.from_text == sender_address_short,
|
||||
activity_element.to_text == receiver_address_short)):
|
||||
self.errors.append(
|
||||
wallet_view,
|
||||
"The last transaction is not listed in activity for the %s, expected timestamp is %s" %
|
||||
('sender' if sender else 'receiver', expected_time))
|
||||
except NoSuchElementException:
|
||||
self.errors.append(wallet_view,
|
||||
"Can't find the last transaction for the %s" % ('sender' if sender else 'receiver'))
|
||||
finally:
|
||||
wallet_view.close_account_button.click_until_presence_of_element(wallet_view.show_qr_code_button)
|
||||
|
||||
@marks.testrail_id(727229)
|
||||
def test_wallet_send_eth(self):
|
||||
self.wallet_1.set_network_in_wallet(network_name=self.network)
|
||||
self.wallet_2.set_network_in_wallet(network_name=self.network)
|
||||
# sender_balance, receiver_balance, eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
|
||||
eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
|
||||
|
||||
self.wallet_2.close_account_button.click()
|
||||
self.wallet_2.chats_tab.click()
|
||||
|
||||
self.wallet_1.just_fyi("Sending funds from wallet")
|
||||
amount_to_send = 0.0001
|
||||
device_time_before_sending = self.wallet_1.driver.device_time
|
||||
self.wallet_1.send_asset(address='arb1:' + self.receiver['wallet_address'],
|
||||
asset_name='Ether',
|
||||
amount=f"{amount_to_send:.4f}",
|
||||
network_name=self.network)
|
||||
# ToDo: Arbiscan API is down, looking for analogue
|
||||
# self.network_api.wait_for_confirmation_of_transaction(address=self.sender['wallet_address'],
|
||||
# tx_time=device_time_before_sending)
|
||||
|
||||
device_time_after_sending = self.wallet_1.driver.device_time
|
||||
|
||||
# self._check_balances_after_tx(amount_to_send, sender_balance, receiver_balance, eth_amount_sender,
|
||||
# eth_amount_receiver)
|
||||
self._check_balances_after_tx(amount_to_send, None, None, eth_amount_sender, eth_amount_receiver)
|
||||
|
||||
# ToDo: enable when issues 20807 and 20808 are fixed
|
||||
# self.loop.run_until_complete(
|
||||
# run_in_parallel(((self._check_last_transaction_in_activity, {'wallet_view': self.wallet_1,
|
||||
# 'device_time': device_time,
|
||||
# 'amount_to_send': amount_to_send}),
|
||||
# (self._check_last_transaction_in_activity, {'wallet_view': self.wallet_2,
|
||||
# 'device_time': device_time,
|
||||
# 'amount_to_send': amount_to_send,
|
||||
# 'sender': False}))))
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(727230)
|
||||
def test_wallet_send_asset_from_drawer(self):
|
||||
self.wallet_1.navigate_back_to_wallet_view()
|
||||
# sender_balance, receiver_balance, eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
|
||||
eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
|
||||
self.wallet_2.close_account_button.click_if_shown()
|
||||
self.wallet_2.chats_tab.click()
|
||||
|
||||
self.wallet_1.just_fyi("Sending asset from drawer")
|
||||
amount_to_send = 0.0001
|
||||
device_time_before_sending = self.wallet_1.driver.device_time
|
||||
self.wallet_1.send_asset_from_drawer(address='arb1:' + self.receiver['wallet_address'],
|
||||
asset_name='Ether',
|
||||
amount=f"{amount_to_send:.4f}",
|
||||
network_name=self.network)
|
||||
# ToDo: Arbiscan API is down, looking for analogue
|
||||
# self.network_api.wait_for_confirmation_of_transaction(address=self.sender['wallet_address'],
|
||||
# tx_time=device_time_before_sending)
|
||||
device_time_after_sending = self.wallet_1.driver.device_time
|
||||
|
||||
# self._check_balances_after_tx(amount_to_send, sender_balance, receiver_balance, eth_amount_sender,
|
||||
# eth_amount_receiver)
|
||||
self._check_balances_after_tx(amount_to_send, None, None, eth_amount_sender, eth_amount_receiver)
|
||||
|
||||
# ToDo: enable when issues 20807 and 20808 are fixed
|
||||
# self.loop.run_until_complete(
|
||||
# run_in_parallel(((self._check_last_transaction_in_activity, {'wallet_view': self.wallet_1,
|
||||
# 'device_time': device_time,
|
||||
# 'amount_to_send': amount_to_send}),
|
||||
# (self._check_last_transaction_in_activity, {'wallet_view': self.wallet_2,
|
||||
# 'device_time': device_time,
|
||||
# 'amount_to_send': amount_to_send,
|
||||
# 'sender': False}))))
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="new_one_2")
|
||||
@marks.nightly
|
||||
@marks.secured
|
||||
@@ -142,7 +336,7 @@ class TestWalletOneDevice(MultipleSharedDeviceTestCase):
|
||||
|
||||
self.wallet_view.slide_button_track.slide()
|
||||
if not self.wallet_view.password_input.is_element_displayed():
|
||||
self.errors.append(self.wallet_view, "%s on %s: can't confirm transaction" % (asset, network))
|
||||
self.errors.append("%s on %s: can't confirm transaction" % (asset, network))
|
||||
self.wallet_view.click_system_back_button_until_presence_of_element(
|
||||
element=self.wallet_view.element_by_text('Select token'), attempts=4)
|
||||
self.wallet_view.click_system_back_button_until_presence_of_element(
|
||||
@@ -343,7 +537,7 @@ class TestWalletOneDevice(MultipleSharedDeviceTestCase):
|
||||
network_from, network_to, key))
|
||||
self.wallet_view.slide_button_track.slide()
|
||||
if not self.wallet_view.password_input.is_element_displayed():
|
||||
self.errors.append(self.wallet_view, "%s to %s: can't confirm bridge" % (network_from, network_to))
|
||||
self.errors.append("%s to %s: can't confirm bridge" % (network_from, network_to))
|
||||
self.wallet_view.click_system_back_button(times=5)
|
||||
self.wallet_view.click_system_back_button_until_presence_of_element(
|
||||
element=self.wallet_view.add_account_button, attempts=6)
|
||||
@@ -1,185 +0,0 @@
|
||||
import re
|
||||
import time
|
||||
|
||||
import pytest
|
||||
from selenium.common import TimeoutException
|
||||
|
||||
from base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers
|
||||
from tests import marks
|
||||
from users import transaction_senders
|
||||
from views.sign_in_view import SignInView
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="new_one_2")
|
||||
@marks.nightly
|
||||
@marks.secured
|
||||
@marks.smoke
|
||||
class TestWalletCollectibles(MultipleSharedDeviceTestCase):
|
||||
|
||||
def prepare_devices(self):
|
||||
self.drivers, self.loop = create_shared_drivers(1)
|
||||
self.sign_in_view = SignInView(self.drivers[0])
|
||||
self.sender, self.receiver = transaction_senders['ETH_1'], transaction_senders['ETH_2']
|
||||
self.sender['wallet_address'] = '0x' + self.sender['address']
|
||||
self.receiver['wallet_address'] = '0x' + self.receiver['address']
|
||||
self.sign_in_view.recover_access(passphrase=self.sender['passphrase'])
|
||||
|
||||
self.home_view = self.sign_in_view.get_home_view()
|
||||
self.sender_username = self.home_view.get_username()
|
||||
self.profile_view = self.home_view.profile_button.click()
|
||||
self.profile_view.switch_network()
|
||||
self.sign_in_view.sign_in(user_name=self.sender_username)
|
||||
self.home_view.wallet_tab.click()
|
||||
self.wallet_view = self.home_view.get_wallet_view()
|
||||
self.account_name = 'Account 1'
|
||||
self.sender_short_address = self.sender['wallet_address'].replace(self.sender['wallet_address'][6:-3],
|
||||
'…').lower()
|
||||
self.receiver_short_address = self.receiver['wallet_address'].replace(self.receiver['wallet_address'][6:-3],
|
||||
'…').lower()
|
||||
|
||||
@marks.testrail_id(741839)
|
||||
def test_wallet_collectibles_balance(self):
|
||||
self.wallet_view.collectibles_tab.click()
|
||||
self.wallet_view.set_network_in_wallet('Base')
|
||||
collectibles = {
|
||||
"BVL": {"quantity": 2,
|
||||
"info": {"Account": "Account 1",
|
||||
"Network": "Base",
|
||||
"category": "Football Player",
|
||||
"rank": "Star",
|
||||
"type": "Modric"}},
|
||||
"Glitch Punks": {"quantity": 1,
|
||||
"info": {"Account": "Account 1",
|
||||
"Network": "Base",
|
||||
"Race": "Skull Blue",
|
||||
"Mouth": "Lipstick Green",
|
||||
"Eyes": "Femme Shade Eyes Variant 3",
|
||||
"Face": "Pipe",
|
||||
"Ear Accessory": "Silver Stud Cross Combo",
|
||||
"Nose": "Bot Nose 3",
|
||||
"Eye Accessory": "Nouns",
|
||||
"Head": "Double Spike"}}
|
||||
}
|
||||
for collectible_name, data in collectibles.items():
|
||||
self.wallet_view.just_fyi("Check %s collectible info and image" % collectible_name)
|
||||
try:
|
||||
element = self.wallet_view.get_collectible_element(collectible_name)
|
||||
element.wait_for_element()
|
||||
except TimeoutException:
|
||||
self.errors.append(self.wallet_view, "Collectible '%s' is not displayed" % collectible_name)
|
||||
continue
|
||||
if element.image_element.is_element_differs_from_template(
|
||||
'%s_collectible_image_template.png' % collectible_name):
|
||||
self.errors.append(self.wallet_view, "%s image doesn't match expected template" % collectible_name)
|
||||
if element.quantity != data['quantity']:
|
||||
self.errors.append(self.wallet_view, "%s quantity %s doesn't match expected %s" % (
|
||||
collectible_name, element.quantity, data['quantity']))
|
||||
self.wallet_view.just_fyi("Check %s collectible expanded info" % collectible_name)
|
||||
element.click()
|
||||
if self.wallet_view.expanded_collectible_image.is_element_differs_from_template(
|
||||
'%s_expanded_collectible_image_template.png' % collectible_name):
|
||||
self.errors.append(self.wallet_view,
|
||||
"%s expanded image doesn't match expected template" % collectible_name)
|
||||
self.wallet_view.driver.swipe(500, 2000, 500, 300)
|
||||
for item, expected_text in data['info'].items():
|
||||
try:
|
||||
text = self.wallet_view.get_data_item_element_text(item)
|
||||
if text != expected_text:
|
||||
self.errors.append(self.wallet_view, "%s: shown %s text '%s' doesn't match expected '%s'" % (
|
||||
collectible_name, item, text, expected_text))
|
||||
except TimeoutException:
|
||||
self.errors.append(self.wallet_view, "%s: %s data item is not shown" % (collectible_name, item))
|
||||
self.wallet_view.click_system_back_button()
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(741840)
|
||||
def test_wallet_send_collectible(self):
|
||||
self.wallet_view.reopen_app(user_name=self.sender_username)
|
||||
self.wallet_view.send_button.click()
|
||||
self.wallet_view.address_text_input.send_keys(self.receiver['wallet_address'])
|
||||
self.wallet_view.continue_button.click()
|
||||
self.wallet_view.collectibles_tab_on_select_token_view.click()
|
||||
time.sleep(5)
|
||||
self.wallet_view.get_collectible_element('BVL').click()
|
||||
self.wallet_view.amount_input_increase_button.click()
|
||||
self.wallet_view.confirm_button.click()
|
||||
expected_text = '2 BVL #47'
|
||||
for text in [self.account_name, self.sender_short_address, expected_text]:
|
||||
if not self.wallet_view.from_data_container.get_child_element_by_text(text).is_element_displayed():
|
||||
self.errors.append(self.wallet_view,
|
||||
"Text %s is not shown in 'From' container on the Review Send page" % text)
|
||||
for text in [self.receiver_short_address, expected_text]:
|
||||
if not self.wallet_view.to_data_container.get_child_element_by_text(text).is_element_displayed():
|
||||
self.errors.append(self.wallet_view,
|
||||
"Text %s is not shown in 'To' container on the Review Send page" % text)
|
||||
data_to_check = {
|
||||
'Est. time': ' min',
|
||||
'Max fees': r"[$]\d+.\d+",
|
||||
'Recipient gets': '2 '
|
||||
}
|
||||
for key, expected_value in data_to_check.items():
|
||||
try:
|
||||
text = self.wallet_view.get_data_item_element_text(data_item_name=key)
|
||||
if key == 'Max fees':
|
||||
if not re.findall(expected_value, text):
|
||||
self.errors.append(self.wallet_view,
|
||||
"Max fee is not a number - %s on the Review Send page" % text)
|
||||
else:
|
||||
if text != expected_value:
|
||||
self.errors.append(
|
||||
self.wallet_view,
|
||||
"%s text %s doesn't match expected %s on the Review Send page" % (
|
||||
key, text, expected_value))
|
||||
except TimeoutException:
|
||||
self.errors.append(self.wallet_view, "%s is not shown on the Review Send page" % key)
|
||||
|
||||
self.wallet_view.slide_button_track.slide()
|
||||
if not self.wallet_view.password_input.is_element_displayed():
|
||||
self.errors.append(self.wallet_view, "Can't confirm transaction")
|
||||
|
||||
self.wallet_view.click_system_back_button(times=6)
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(741841)
|
||||
def test_wallet_collectible_send_from_expanded_info_view(self):
|
||||
# self.wallet_view.reopen_app(user_name=self.sender_username)
|
||||
self.wallet_view.collectibles_tab.click()
|
||||
self.wallet_view.get_collectible_element('Glitch Punks').wait_for_element().click()
|
||||
self.wallet_view.send_from_collectible_info_button.click()
|
||||
self.wallet_view.address_text_input.send_keys(self.receiver['wallet_address'])
|
||||
self.wallet_view.continue_button.click()
|
||||
expected_text = '1 Glitch Punks #3422'
|
||||
for text in [self.account_name, self.sender_short_address, expected_text]:
|
||||
if not self.wallet_view.from_data_container.get_child_element_by_text(text).is_element_displayed():
|
||||
self.errors.append(self.wallet_view,
|
||||
"Text %s is not shown in 'From' container on the Review Send page" % text)
|
||||
for text in [self.receiver_short_address, expected_text]:
|
||||
if not self.wallet_view.to_data_container.get_child_element_by_text(text).is_element_displayed():
|
||||
self.errors.append(self.wallet_view,
|
||||
"Text %s is not shown in 'To' container on the Review Send page" % text)
|
||||
data_to_check = {
|
||||
'Est. time': ' min',
|
||||
'Max fees': r"[$]\d+.\d+",
|
||||
'Recipient gets': '1 '
|
||||
}
|
||||
for key, expected_value in data_to_check.items():
|
||||
try:
|
||||
text = self.wallet_view.get_data_item_element_text(data_item_name=key)
|
||||
if key == 'Max fees':
|
||||
if not re.findall(expected_value, text):
|
||||
self.errors.append(self.wallet_view,
|
||||
"Max fee is not a number - %s on the Review Send page" % text)
|
||||
else:
|
||||
if text != expected_value:
|
||||
self.errors.append(
|
||||
self.wallet_view,
|
||||
"'%s' text '%s' doesn't match expected '%s' on the Review Send page" % (
|
||||
key, text, expected_value))
|
||||
except TimeoutException:
|
||||
self.errors.append(self.wallet_view, "%s is not shown on the Review Send page" % key)
|
||||
|
||||
self.wallet_view.slide_button_track.slide()
|
||||
if not self.wallet_view.password_input.is_element_displayed():
|
||||
self.errors.append(self.wallet_view, "Can't confirm transaction")
|
||||
|
||||
self.errors.verify_no_errors()
|
||||
@@ -1,202 +0,0 @@
|
||||
import datetime
|
||||
import time
|
||||
|
||||
import pytest
|
||||
from selenium.common import NoSuchElementException
|
||||
|
||||
from base_test_case import MultipleSharedDeviceTestCase, create_shared_drivers
|
||||
from support.api.network_api import NetworkApi
|
||||
from tests import marks, run_in_parallel
|
||||
from users import transaction_senders
|
||||
from views.sign_in_view import SignInView
|
||||
|
||||
|
||||
@pytest.mark.xdist_group(name="new_four_2")
|
||||
@marks.nightly
|
||||
@marks.secured
|
||||
@marks.smoke
|
||||
class TestWalletMultipleDevice(MultipleSharedDeviceTestCase):
|
||||
|
||||
def prepare_devices(self):
|
||||
self.network_api = NetworkApi()
|
||||
self.drivers, self.loop = create_shared_drivers(2)
|
||||
self.sign_in_1, self.sign_in_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
||||
self.sender, self.receiver = transaction_senders['ETH_1'], transaction_senders['ETH_2']
|
||||
self.sender['wallet_address'] = '0x' + self.sender['address']
|
||||
self.receiver['wallet_address'] = '0x' + self.receiver['address']
|
||||
self.loop.run_until_complete(
|
||||
run_in_parallel(((self.sign_in_1.recover_access, {'passphrase': self.sender['passphrase']}),
|
||||
(self.sign_in_2.recover_access, {'passphrase': self.receiver['passphrase']}))))
|
||||
self.home_1, self.home_2 = self.sign_in_1.get_home_view(), self.sign_in_2.get_home_view()
|
||||
self.sender_username, self.receiver_username = self.home_1.get_username(), self.home_2.get_username()
|
||||
self.wallet_1, self.wallet_2 = self.sign_in_1.get_wallet_view(), self.sign_in_2.get_wallet_view()
|
||||
self.wallet_1.wallet_tab.click()
|
||||
self.wallet_2.wallet_tab.click()
|
||||
self.network = "Arbitrum"
|
||||
|
||||
def _get_balances_before_tx(self):
|
||||
# ToDo: Arbiscan API is down, looking for analogue
|
||||
# sender_balance = self.network_api.get_balance(self.sender['wallet_address'])
|
||||
# receiver_balance = self.network_api.get_balance(self.receiver['wallet_address'])
|
||||
self.wallet_1.just_fyi("Getting ETH amount in the wallet of the sender before transaction")
|
||||
self.wallet_1.get_account_element().click()
|
||||
eth_amount_sender = self.wallet_1.get_asset(asset_name='Ether').get_amount()
|
||||
self.wallet_2.just_fyi("Getting ETH amount in the wallet of the receiver before transaction")
|
||||
self.wallet_2.get_account_element().click()
|
||||
eth_amount_receiver = self.wallet_2.get_asset(asset_name='Ether').get_amount()
|
||||
# return sender_balance, receiver_balance, eth_amount_sender, eth_amount_receiver
|
||||
return eth_amount_sender, eth_amount_receiver
|
||||
|
||||
def _check_balances_after_tx(self, amount_to_send, sender_balance, receiver_balance, eth_amount_sender,
|
||||
eth_amount_receiver):
|
||||
# ToDo: Arbiscan API is down, looking for analogue
|
||||
# try:
|
||||
# self.network_api.wait_for_balance_to_be(address=self.sender['wallet_address'],
|
||||
# expected_balance=sender_balance - amount_to_send)
|
||||
# except TimeoutException as e:
|
||||
# self.errors.append("Sender " + e.msg)
|
||||
# try:
|
||||
# self.network_api.wait_for_balance_to_be(address=self.receiver['wallet_address'],
|
||||
# expected_balance=receiver_balance + amount_to_send)
|
||||
# except TimeoutException as e:
|
||||
# self.errors.append("Receiver " + e.msg)
|
||||
|
||||
def wait_for_wallet_balance_to_update(wallet_view, user_name, initial_eth_amount):
|
||||
wallet_view.just_fyi("Getting ETH amount in the wallet of the %s after transaction" % user_name)
|
||||
if user_name == self.sender_username:
|
||||
exp_amount = round(initial_eth_amount - amount_to_send, 4)
|
||||
else:
|
||||
exp_amount = round(initial_eth_amount + amount_to_send, 4)
|
||||
|
||||
# for _ in range(12): # ToDo: 120 sec wait time, enable when autoupdate feature is ready
|
||||
new_eth_amount = round(wallet_view.get_asset(asset_name='Ether').get_amount(), 4)
|
||||
if user_name == self.sender_username and new_eth_amount <= exp_amount:
|
||||
return
|
||||
if user_name == self.receiver_username and new_eth_amount >= exp_amount:
|
||||
return
|
||||
self.errors.append(wallet_view,
|
||||
"Eth amount in the %s's wallet is %s but should be %s" % (
|
||||
user_name, new_eth_amount, exp_amount))
|
||||
|
||||
# ToDo: disable relogin when autoupdate feature is ready
|
||||
self.home_1.just_fyi("Relogin for getting an updated balance")
|
||||
self.home_2.just_fyi("Relogin for getting an updated balance")
|
||||
for _ in range(6): # just waiting 1 minute here to be sure that balances are updated
|
||||
self.wallet_1.wallet_tab.is_element_displayed()
|
||||
self.wallet_2.wallet_tab.is_element_displayed()
|
||||
time.sleep(10)
|
||||
self.loop.run_until_complete(
|
||||
run_in_parallel(((self.home_1.reopen_app, {'user_name': self.sender_username}),
|
||||
(self.home_2.reopen_app, {'user_name': self.receiver_username}))))
|
||||
self.wallet_1.wallet_tab.wait_and_click()
|
||||
self.wallet_2.wallet_tab.wait_and_click()
|
||||
self.wallet_1.set_network_in_wallet(network_name=self.network)
|
||||
self.wallet_2.set_network_in_wallet(network_name=self.network)
|
||||
self.loop.run_until_complete(
|
||||
run_in_parallel(((wait_for_wallet_balance_to_update, {'wallet_view': self.wallet_1,
|
||||
'user_name': self.sender_username,
|
||||
'initial_eth_amount': eth_amount_sender}),
|
||||
(wait_for_wallet_balance_to_update, {'wallet_view': self.wallet_2,
|
||||
'user_name': self.receiver_username,
|
||||
'initial_eth_amount': eth_amount_receiver}))))
|
||||
|
||||
def _check_last_transaction_in_activity(self, wallet_view, device_time, amount_to_send, sender=True):
|
||||
wallet_view.get_account_element().click()
|
||||
wallet_view.activity_tab.click()
|
||||
wallet_view.just_fyi("Checking the transaction in the activity tab")
|
||||
current_time = datetime.datetime.strptime(device_time, "%Y-%m-%dT%H:%M:%S%z")
|
||||
expected_time = "Today %s" % current_time.strftime('%-I:%M %p')
|
||||
possible_times = [expected_time,
|
||||
"Today %s" % (current_time + datetime.timedelta(minutes=1)).strftime('%-I:%M %p')]
|
||||
sender_address_short = self.sender['wallet_address'].replace(self.sender['wallet_address'][5:-3], '...').lower()
|
||||
receiver_address_short = self.receiver['wallet_address'].replace(self.receiver['wallet_address'][5:-3],
|
||||
'...').lower()
|
||||
activity_element = wallet_view.get_activity_element()
|
||||
try:
|
||||
if not all((activity_element.header == 'Send' if sender else 'Receive',
|
||||
activity_element.timestamp in possible_times,
|
||||
activity_element.amount == '%s ETH' % amount_to_send,
|
||||
activity_element.from_text == sender_address_short,
|
||||
activity_element.to_text == receiver_address_short)):
|
||||
self.errors.append(
|
||||
wallet_view,
|
||||
"The last transaction is not listed in activity for the %s, expected timestamp is %s" %
|
||||
('sender' if sender else 'receiver', expected_time))
|
||||
except NoSuchElementException:
|
||||
self.errors.append(wallet_view,
|
||||
"Can't find the last transaction for the %s" % ('sender' if sender else 'receiver'))
|
||||
finally:
|
||||
wallet_view.close_account_button.click_until_presence_of_element(wallet_view.show_qr_code_button)
|
||||
|
||||
@marks.testrail_id(727229)
|
||||
def test_wallet_send_eth(self):
|
||||
self.wallet_1.set_network_in_wallet(network_name=self.network)
|
||||
self.wallet_2.set_network_in_wallet(network_name=self.network)
|
||||
# sender_balance, receiver_balance, eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
|
||||
eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
|
||||
|
||||
self.wallet_2.close_account_button.click()
|
||||
self.wallet_2.chats_tab.click()
|
||||
|
||||
self.wallet_1.just_fyi("Sending funds from wallet")
|
||||
amount_to_send = 0.0001
|
||||
device_time_before_sending = self.wallet_1.driver.device_time
|
||||
self.wallet_1.send_asset(address='arb1:' + self.receiver['wallet_address'],
|
||||
asset_name='Ether',
|
||||
amount=f"{amount_to_send:.4f}",
|
||||
network_name=self.network)
|
||||
# ToDo: Arbiscan API is down, looking for analogue
|
||||
# self.network_api.wait_for_confirmation_of_transaction(address=self.sender['wallet_address'],
|
||||
# tx_time=device_time_before_sending)
|
||||
|
||||
device_time_after_sending = self.wallet_1.driver.device_time
|
||||
|
||||
# self._check_balances_after_tx(amount_to_send, sender_balance, receiver_balance, eth_amount_sender,
|
||||
# eth_amount_receiver)
|
||||
self._check_balances_after_tx(amount_to_send, None, None, eth_amount_sender, eth_amount_receiver)
|
||||
|
||||
# ToDo: enable when issues 20807 and 20808 are fixed
|
||||
# self.loop.run_until_complete(
|
||||
# run_in_parallel(((self._check_last_transaction_in_activity, {'wallet_view': self.wallet_1,
|
||||
# 'device_time': device_time,
|
||||
# 'amount_to_send': amount_to_send}),
|
||||
# (self._check_last_transaction_in_activity, {'wallet_view': self.wallet_2,
|
||||
# 'device_time': device_time,
|
||||
# 'amount_to_send': amount_to_send,
|
||||
# 'sender': False}))))
|
||||
self.errors.verify_no_errors()
|
||||
|
||||
@marks.testrail_id(727230)
|
||||
def test_wallet_send_asset_from_drawer(self):
|
||||
self.wallet_1.navigate_back_to_wallet_view()
|
||||
# sender_balance, receiver_balance, eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
|
||||
eth_amount_sender, eth_amount_receiver = self._get_balances_before_tx()
|
||||
self.wallet_2.close_account_button.click_if_shown()
|
||||
self.wallet_2.chats_tab.click()
|
||||
|
||||
self.wallet_1.just_fyi("Sending asset from drawer")
|
||||
amount_to_send = 0.0001
|
||||
device_time_before_sending = self.wallet_1.driver.device_time
|
||||
self.wallet_1.send_asset_from_drawer(address='arb1:' + self.receiver['wallet_address'],
|
||||
asset_name='Ether',
|
||||
amount=f"{amount_to_send:.4f}",
|
||||
network_name=self.network)
|
||||
# ToDo: Arbiscan API is down, looking for analogue
|
||||
# self.network_api.wait_for_confirmation_of_transaction(address=self.sender['wallet_address'],
|
||||
# tx_time=device_time_before_sending)
|
||||
device_time_after_sending = self.wallet_1.driver.device_time
|
||||
|
||||
# self._check_balances_after_tx(amount_to_send, sender_balance, receiver_balance, eth_amount_sender,
|
||||
# eth_amount_receiver)
|
||||
self._check_balances_after_tx(amount_to_send, None, None, eth_amount_sender, eth_amount_receiver)
|
||||
|
||||
# ToDo: enable when issues 20807 and 20808 are fixed
|
||||
# self.loop.run_until_complete(
|
||||
# run_in_parallel(((self._check_last_transaction_in_activity, {'wallet_view': self.wallet_1,
|
||||
# 'device_time': device_time,
|
||||
# 'amount_to_send': amount_to_send}),
|
||||
# (self._check_last_transaction_in_activity, {'wallet_view': self.wallet_2,
|
||||
# 'device_time': device_time,
|
||||
# 'amount_to_send': amount_to_send,
|
||||
# 'sender': False}))))
|
||||
self.errors.verify_no_errors()
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 329 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 8.8 KiB |
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 21 KiB |
@@ -1,7 +1,6 @@
|
||||
import time
|
||||
|
||||
import pytest
|
||||
from selenium.common import NoSuchElementException
|
||||
|
||||
from tests import common_password
|
||||
from views.base_element import Button, EditBox, Text, BaseElement
|
||||
@@ -31,24 +30,6 @@ class AssetElement(Button):
|
||||
pytest.fail("Cannot get %s amount" % self.asset_name)
|
||||
|
||||
|
||||
class CollectibleItemElement(Button):
|
||||
|
||||
def __init__(self, driver, collectible_name):
|
||||
self.collectible_name = collectible_name
|
||||
self.locator = "//*[@content-desc='collectible-list-item']//*[contains(@text,'%s')]/../.." % collectible_name
|
||||
super().__init__(driver=driver, xpath=self.locator)
|
||||
self.image_element = BaseElement(self.driver, xpath=self.locator + "//android.widget.ImageView")
|
||||
|
||||
@property
|
||||
def quantity(self):
|
||||
counter_element = BaseElement(
|
||||
self.driver, xpath=self.locator + "//*[@content-desc='collectible-counter']/android.widget.TextView")
|
||||
try:
|
||||
return int(counter_element.text.strip('x'))
|
||||
except NoSuchElementException:
|
||||
return 1
|
||||
|
||||
|
||||
class ActivityElement(BaseElement):
|
||||
def __init__(self, driver, index: int):
|
||||
self.locator = "(//*[@content-desc='wallet-activity'])[%s]" % index
|
||||
@@ -130,13 +111,11 @@ class WalletView(BaseView):
|
||||
|
||||
# Sending transaction
|
||||
self.address_text_input = EditBox(self.driver, accessibility_id='address-text-input')
|
||||
self.collectibles_tab_on_select_token_view = Button(self.driver, accessibility_id='Collectibles')
|
||||
self.amount_input = EditBox(self.driver, xpath="//android.widget.EditText")
|
||||
self.from_network_text = Text(
|
||||
self.driver, xpath="(//*[@content-desc='loading']/following-sibling::android.widget.TextView)[1]")
|
||||
self.confirm_button = Button(self.driver, accessibility_id='button-one')
|
||||
self.done_button = Button(self.driver, accessibility_id='done')
|
||||
self.amount_input_increase_button = Button(self.driver, accessibility_id='amount-input-inc-button')
|
||||
|
||||
# Review Send and Review Bridge screens
|
||||
self.from_data_container = ConfirmationViewInfoContainer(self.driver, label_name='from')
|
||||
@@ -174,11 +153,6 @@ class WalletView(BaseView):
|
||||
self.passphrase_word_number_container = Text(
|
||||
self.driver, xpath="//*[@content-desc='number-container']/android.widget.TextView")
|
||||
|
||||
# Collectible view
|
||||
self.expanded_collectible_image = BaseElement(
|
||||
self.driver, xpath="//*[@content-desc='expanded-collectible']//android.widget.ImageView")
|
||||
self.send_from_collectible_info_button = Button(self.driver, accessibility_id="icon, Send")
|
||||
|
||||
def set_network_in_wallet(self, network_name: str):
|
||||
self.network_drop_down.click()
|
||||
Button(self.driver, accessibility_id="%s, label-component" % network_name.capitalize()).click()
|
||||
@@ -192,9 +166,6 @@ class WalletView(BaseView):
|
||||
element.scroll_to_element(down_start_y=0.89, down_end_y=0.8)
|
||||
return element
|
||||
|
||||
def get_collectible_element(self, collectible_name: str):
|
||||
return CollectibleItemElement(driver=self.driver, collectible_name=collectible_name)
|
||||
|
||||
def select_asset(self, asset_name: str):
|
||||
Button(driver=self.driver,
|
||||
xpath="//*[@content-desc='token-network']/android.widget.TextView[@text='%s']" % asset_name).click()
|
||||
|
||||
+13
-10
@@ -4,11 +4,11 @@
|
||||
"about-gas-amount": "AKA gas limit. Refers to the maximum number of computational steps (or units of gas) that a transaction can consume. It represents the complexity or amount of work required to execute a transaction or smart contract.\n\nThe gas limit is a cap on how much work the transaction can do on the blockchain. If the gas limit is set too low, the transaction may fail due to insufficient gas.",
|
||||
"about-key-storage-content": "Status will never access your private key. Be sure to backup your seed phrase. If you lose your phone it is the only way to access your keys.",
|
||||
"about-key-storage-title": "About key storage",
|
||||
"about-max-base-fee": "When your transaction gets included in the block, any difference between your max base fee and the actual base fee will be refunded.",
|
||||
"about-max-base-fee": "When your transaction gets included in the block, any difference between your max base fee and the actual base fee will be refunded.\n\nNote: the ETH amount shown for this value is calculated: max base fee (in GWEI) * max gas amount.",
|
||||
"about-names-content": "No one can pretend to be you! You’re anonymous by default and never have to reveal your real name. You can register a custom name for a small fee.",
|
||||
"about-names-title": "Names can’t be changed",
|
||||
"about-nonce": "Transaction counter ensuring transactions from your account are processed in the correct order and can’t be replayed. Each new transaction increments the nonce by 1, ensuring uniqueness and preventing double-spending.\n\nIf a transaction with a lower nonce is pending, higher nonce transactions will remain in the queue until the earlier one is confirmed.",
|
||||
"about-priority-fee": "AKA miner tip. A voluntary fee you can add to incentivise miners or validators to prioritise your transaction.\n\nThe higher the tip, the faster your transaction is likely to be processed, especially curing periods of higher network congestion.",
|
||||
"about-priority-fee": "AKA miner tip. A voluntary fee you can add to incentivise miners or validators to prioritise your transaction.\n\nThe higher the tip, the faster your transaction is likely to be processed, especially during periods of higher network congestion.\n\nNote: the ETH amount shown for this value is calculated: Priority fee (in GWEI) * Max gas amount",
|
||||
"about-sharing-data": "About sharing data",
|
||||
"accent-colour": "Accent colour",
|
||||
"accent-colour-updated": "Accent colour updated",
|
||||
@@ -1111,7 +1111,9 @@
|
||||
"from-label": "From",
|
||||
"gas-amount": "Gas amount",
|
||||
"gas-amount-limit": "Gas amount limit",
|
||||
"gas-amount-lower": "Too low. Recommended: {{current}} UNITS",
|
||||
"gas-amount-lower": "Too low. Minimum: {{low}}",
|
||||
"gas-amount-higher": "Too high. Maximum: {{high}}",
|
||||
"gas-amount-current": "Current: {{current}}",
|
||||
"gas-limit": "Gas limit",
|
||||
"gas-price": "Gas price",
|
||||
"gas-used": "Gas used",
|
||||
@@ -1591,9 +1593,10 @@
|
||||
"master-account": "Master account",
|
||||
"max": "Max: {{number}}",
|
||||
"max-2-decimals": "Max. 2 decimals",
|
||||
"max-base-fee": "Max base fee",
|
||||
"max-base-fee-higher": "Higher than necessary. Current: {{current}} GWEI",
|
||||
"max-base-fee-lower": "Too low. Current: {{current}} GWEI ",
|
||||
"max-base-fee": "Max base fee",
|
||||
"max-base-fee-current": "Current: {{current}}",
|
||||
"max-base-fee-higher": "Higher than necessary (current: {{current}})",
|
||||
"max-base-fee-lower": "Lower than priority fee: {{priority-fee}}",
|
||||
"max-fee": "Max fee",
|
||||
"max-fees": "Max fees",
|
||||
"max-gas-amount": "Max gas amount",
|
||||
@@ -2068,8 +2071,10 @@
|
||||
"principles": "Principles",
|
||||
"priority": "Priority",
|
||||
"priority-fee": "Priority fee",
|
||||
"priority-fee-higher": "More than necessary. Current: {{low}} - {{high}} GWEI",
|
||||
"priority-fee-lower": "Too low. Current: {{low}} - {{high}} GWEI",
|
||||
"priority-fee-higher": "Higher than necessary: {{low}} - {{high}}",
|
||||
"priority-fee-higher-max-base": "Higher than max base fee: {{max-base-fee}}",
|
||||
"priority-fee-lower": "Lower than suggested: {{low}} - {{high}}",
|
||||
"priority-fee-current": "Current: {{current}}",
|
||||
"privacy": "Privacy",
|
||||
"privacy-and-security": "Privacy and security",
|
||||
"privacy-photos": "Profile Photo Privacy",
|
||||
@@ -2279,7 +2284,6 @@
|
||||
"saved-address-network-preference-selection-description": "Only change if you know which networks the address owner is happy to to receive funds on",
|
||||
"saved-address-removed": "Saved address removed",
|
||||
"saved-addresses": "Saved addresses",
|
||||
"saved-addresses-limit-reached-toast": "Limit of 20 saved addresses reached. Remove a saved address to add a new one.",
|
||||
"saving-keys-to-device": "Saving keys to device...",
|
||||
"say-hi": "Say hi",
|
||||
"scan-an-account-qr-code": "Scan an account QR code",
|
||||
@@ -2567,7 +2571,6 @@
|
||||
"sun": "Sun",
|
||||
"swap": "Swap",
|
||||
"swap-details": "Swap details",
|
||||
"swap-exchange-rate-in-crypto": "1 {{receive-token-symbol}} ≈ {{exchange-rate}} {{pay-token-symbol}}",
|
||||
"swap-failed": "Swap failed",
|
||||
"swapped-to": "Swapped {{pay-amount}} {{pay-token-symbol}} to {{receive-amount}} {{receive-token-symbol}}",
|
||||
"swapping-to": "Swapping {{pay-amount}} {{pay-token-symbol}} to {{receive-amount}} {{receive-token-symbol}}",
|
||||
|
||||
Reference in New Issue
Block a user