From a406646f9ce186f06facbf3f04d64a7dbeaaf854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Rodriguez=20Ve=CC=81lez?= Date: Wed, 16 Jan 2019 14:47:23 -0500 Subject: [PATCH 01/15] Fixed files in order to have a successful android build --- android/app/app.iml | 68 +++++++++++-------- android/app/build.gradle | 56 +++++++-------- .../java/com/bluewallet/MainActivity.java | 2 +- .../bluewallet/MainApplication.java | 1 - android/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- 6 files changed, 68 insertions(+), 66 deletions(-) delete mode 120000 android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java diff --git a/android/app/app.iml b/android/app/app.iml index b6f942341..a9beee774 100644 --- a/android/app/app.iml +++ b/android/app/app.iml @@ -23,12 +23,12 @@ - - + + - + @@ -36,7 +36,7 @@ - + @@ -85,19 +85,28 @@ - + + + - + + - + + - + + + + + + - + @@ -108,56 +117,55 @@ - + - - - + - - - - + + + + + - - - + + - + - - + - + + + - + - - - + + + + + - - diff --git a/android/app/build.gradle b/android/app/build.gradle index f5c388a7c..48689f97b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -108,16 +108,10 @@ android { abiFilters "armeabi-v7a", "x86" } } - // signingConfigs { - // release { - // if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { - // storeFile file(MYAPP_RELEASE_STORE_FILE) - // storePassword MYAPP_RELEASE_STORE_PASSWORD - // keyAlias MYAPP_RELEASE_KEY_ALIAS - // keyPassword MYAPP_RELEASE_KEY_PASSWORD - // } - // } - // } +// signingConfigs { +// release { +// } +// } splits { abi { reset() @@ -126,13 +120,13 @@ android { include "armeabi-v7a", "x86" } } - // buildTypes { - // release { - // minifyEnabled enableProguardInReleaseBuilds - // proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - // signingConfig signingConfigs.release - // } - // } +// buildTypes { +// release { +// minifyEnabled enableProguardInReleaseBuilds +// proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" +// signingConfig signingConfigs.release +// } +// } // applicationVariants are e.g. debug, release applicationVariants.all { variant -> variant.outputs.each { output -> @@ -149,19 +143,19 @@ android { } dependencies { - compile project(':react-native-webview') - compile project(':react-native-camera') - compile project(':react-native-fs') - compile project(':react-native-gesture-handler') - compile project(':react-native-vector-icons') - compile project(':react-native-svg') - compile project(':react-native-sentry') - compile project(':react-native-randombytes') - compile project(':react-native-prompt-android') - compile project(':react-native-linear-gradient') - compile project(':react-native-haptic-feedback') - compile project(':react-native-google-analytics-bridge') - compile project(':react-native-device-info') + implementation project(':react-native-webview') + implementation project(':react-native-camera') + implementation project(':react-native-fs') + implementation project(':react-native-gesture-handler') + implementation project(':react-native-vector-icons') + implementation project(':react-native-svg') + implementation project(':react-native-sentry') + implementation project(':react-native-randombytes') + implementation project(':react-native-prompt-android') + implementation project(':react-native-linear-gradient') + implementation project(':react-native-haptic-feedback') + implementation project(':react-native-google-analytics-bridge') + implementation project(':react-native-device-info') implementation (project(':react-native-camera')) { exclude group: "com.android.support" } @@ -173,6 +167,6 @@ dependencies { // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { - from configurations.compile + from configurations.implementation into 'libs' } diff --git a/android/app/src/main/java/com/bluewallet/MainActivity.java b/android/app/src/main/java/com/bluewallet/MainActivity.java index 323c5b832..8b6c6b507 100644 --- a/android/app/src/main/java/com/bluewallet/MainActivity.java +++ b/android/app/src/main/java/com/bluewallet/MainActivity.java @@ -1,4 +1,4 @@ -package io.bluewallet.bluewallet; +package com.bluewallet; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java deleted file mode 120000 index 93dacb59d..000000000 --- a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../.././android/app/src/main/java/com/bluewallet/MainApplication.java \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 9c54cfcd0..802f027c4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - buildToolsVersion = "27.0.3" + buildToolsVersion = "28.0.3" minSdkVersion = 16 compileSdkVersion = 27 targetSdkVersion = 26 @@ -13,7 +13,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.4' + classpath 'com.android.tools.build:gradle:3.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index b6517bb1d..e9b9ac74b 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Wed Jan 16 14:12:19 EST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip From 6bc4b2d7410745641f8cbedb0e88f018156871c4 Mon Sep 17 00:00:00 2001 From: Overtorment Date: Thu, 17 Jan 2019 03:25:35 +0000 Subject: [PATCH 02/15] REL: andr ver bump --- android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 48689f97b..00a3e7629 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -103,7 +103,7 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 17 - versionName "3.5.7" + versionName "3.6.0" ndk { abiFilters "armeabi-v7a", "x86" } From f045b96090ac513f089c40521dc0e2132d508ee5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Rodriguez=20Ve=CC=81lez?= Date: Thu, 17 Jan 2019 00:22:11 -0500 Subject: [PATCH 03/15] OPS: Lowered iOS minimum target version --- ios/BlueWallet.xcodeproj/project.pbxproj | 16 ++++++++-------- package-lock.json | 23 ++++++++--------------- package.json | 4 ++-- screen/settings/about.js | 2 +- 4 files changed, 19 insertions(+), 26 deletions(-) diff --git a/ios/BlueWallet.xcodeproj/project.pbxproj b/ios/BlueWallet.xcodeproj/project.pbxproj index e965cd706..6466f973a 100644 --- a/ios/BlueWallet.xcodeproj/project.pbxproj +++ b/ios/BlueWallet.xcodeproj/project.pbxproj @@ -58,9 +58,10 @@ 96CC4BF79B174A478DF9C378 /* libRNVectorIcons-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CC4FCEA18F7E4033B6EF3D70 /* libRNVectorIcons-tvOS.a */; }; 9F810B06D93D45B983F70B74 /* libRNSentry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B5A6242DF4B645AAB539D2E4 /* libRNSentry.a */; }; A00EA31D54E74AB4BABF8755 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4C1AD00A4FDD42BEB62AFCF5 /* FontAwesome5_Brands.ttf */; }; - A2C00245B747440ABEB7D316 /* libRNCWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 81EDDF247D484BC38EBCE565 /* libRNCWebView.a */; }; A89DFA8A97B642D0AFD63AA2 /* libRNDeviceInfo-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 96C3F4E26841456EBF625D82 /* libRNDeviceInfo-tvOS.a */; }; ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; + B4F7F0B721F0431E00AFD87C /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B4F3B4F521A906D000548A69 /* libRNCamera.a */; }; + B4F7F0B821F0451000AFD87C /* libRNCWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B4F7F0B521E99B5B00AFD87C /* libRNCWebView.a */; }; B86E02D094DF455C990432D2 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BD7B6C6FFF1E4646860703CA /* Foundation.ttf */; }; C031BDE1E9544216A73A4321 /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6037CD1CCED34A7E980149E6 /* libRNSVG.a */; }; CB65331B95F8467390AC8BF0 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F84697F33A394B419D56ED30 /* libRNVectorIcons.a */; }; @@ -71,7 +72,6 @@ EA537EBFD04A4EEBA3D7166F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CCDBD1516FF4AD492C1226C /* SystemConfiguration.framework */; }; EDC6FF8621D64E31924EDC57 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = C2433A8567374E78ACA76F08 /* libz.tbd */; }; F0182C8D1F194D66AA25FCFC /* libBVLinearGradient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B2AB1C624E24C1BA95FBFED /* libBVLinearGradient.a */; }; - F439E4EEAE42446B8AE33E3F /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F5B1CA51964493093282D8E /* libRNCamera.a */; }; F6AA297664414342AC23B529 /* libRNFS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F9F01E9C22C243A9AB48A90A /* libRNFS.a */; }; F97F051969164CCBA5336FC2 /* libRNRandomBytes.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 907C87020BD04956A5253DEB /* libRNRandomBytes.a */; }; FDE69393B0DE46149DDB7E3C /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C0708F2D346B415C84383510 /* FontAwesome5_Solid.ttf */; }; @@ -596,6 +596,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B4F7F0B821F0451000AFD87C /* libRNCWebView.a in Frameworks */, + B4F7F0B721F0431E00AFD87C /* libRNCamera.a in Frameworks */, ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, 146834051AC3E58100842450 /* libReact.a in Frameworks */, @@ -623,9 +625,7 @@ F0182C8D1F194D66AA25FCFC /* libBVLinearGradient.a in Frameworks */, F97F051969164CCBA5336FC2 /* libRNRandomBytes.a in Frameworks */, 6FEBC8E7AA7D4744A2EEE87B /* libRNGestureHandler.a in Frameworks */, - F439E4EEAE42446B8AE33E3F /* libRNCamera.a in Frameworks */, F6AA297664414342AC23B529 /* libRNFS.a in Frameworks */, - A2C00245B747440ABEB7D316 /* libRNCWebView.a in Frameworks */, 228DCD6BAF1B4DF181C5A307 /* libRNRate.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1959,12 +1959,12 @@ "$(SRCROOT)/../node_modules/react-native-rate/ios", ); INFOPLIST_FILE = BlueWallet/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( - "$(inherited)", "-ObjC", "-lc++", + "$(inherited)", ); PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet; PRODUCT_NAME = BlueWallet; @@ -1998,12 +1998,12 @@ "$(SRCROOT)/../node_modules/react-native-rate/ios", ); INFOPLIST_FILE = BlueWallet/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.2; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( - "$(inherited)", "-ObjC", "-lc++", + "$(inherited)", ); PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet; PRODUCT_NAME = BlueWallet; diff --git a/package-lock.json b/package-lock.json index c9b7c86f7..59390a7e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8651,11 +8651,6 @@ "sha.js": "^2.4.8" } }, - "pegjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -9339,9 +9334,9 @@ } }, "react-native-device-info": { - "version": "0.24.3", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.24.3.tgz", - "integrity": "sha512-usW00Wk6DoXH1eRSMt07j0uYvuka3SIEnJ9girlddAacyqwfa1QMVTN4eYmtaBzuMd/avhis8iHZQ3cLaR9CMA==" + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.0.tgz", + "integrity": "sha512-5egYoRhO6OE4VHC2RZtjNYxuXtwR2oexoI1GwvAiYzyGEc2pkMaC59xN2W0NX0mDxhkfaDsMzc+WArLqSg62xA==" }, "react-native-elements": { "version": "0.19.1", @@ -9497,13 +9492,11 @@ } }, "react-native-svg": { - "version": "8.0.10", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-8.0.10.tgz", - "integrity": "sha512-gsG5GUdvlox67+ohLnq3tZSqiYBmz4M5lKKeUfnJZ8EPrMMS5ZgaVj7Zcccee1VvINS5xQaoenUJdha/GEo34w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.0.0.tgz", + "integrity": "sha512-HOmQ94XNdvo19SQp60MgEmF4scyhtR/78Oqr5vsMxNgnVRt9oaEfJygtfdhiUslYs4zHbCvKvPo4k+BJhh0pfA==", "requires": { - "color": "^2.0.1", - "lodash": "^4.16.6", - "pegjs": "^0.10.0" + "color": "^2.0.1" } }, "react-native-tab-view": { @@ -9557,7 +9550,7 @@ "dependencies": { "core-js": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" }, "fbjs": { diff --git a/package.json b/package.json index 6e78bbb60..51c4236f0 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "react-native": "^0.57.8", "react-native-camera": "^1.8.0", "react-native-custom-qr-codes": "^2.0.0", - "react-native-device-info": "^0.24.3", + "react-native-device-info": "^0.25.0", "react-native-elements": "^0.19.0", "react-native-flexi-radio-button": "^0.2.2", "react-native-fs": "^2.13.3", @@ -80,7 +80,7 @@ "react-native-sentry": "^0.40.2", "react-native-snap-carousel": "^3.7.4", "react-native-sortable-list": "0.0.22", - "react-native-svg": "^8.0.10", + "react-native-svg": "^9.0.0", "react-native-vector-icons": "^6.0.2", "react-native-webview": "^3.1.2", "react-navigation": "^3.0.9", diff --git a/screen/settings/about.js b/screen/settings/about.js index dc373da87..50e9de08a 100644 --- a/screen/settings/about.js +++ b/screen/settings/about.js @@ -109,7 +109,7 @@ export default class About extends Component { }; Rate.rate(options, success => { if (success) { - console.warn('User Rated.'); + console.log('User Rated.'); } }); }} From 6b2cd60be26e273c3f0b163883496f9bc6dd06f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Rodriguez=20Ve=CC=81lez?= Date: Thu, 17 Jan 2019 00:28:28 -0500 Subject: [PATCH 04/15] Fixes for android build --- android/app/app.iml | 1 + android/app/build.gradle | 23 +++- .../java/com/bluewallet/MainApplication.java | 5 +- .../bluewallet/MainApplication.java | 83 ++++++++++++ .../com/android/support/group-index.xml | 93 -------------- .../lint-cache/maven.google/master-index.xml | 120 ------------------ android/settings.gradle | 22 ++++ 7 files changed, 126 insertions(+), 221 deletions(-) create mode 100644 android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java delete mode 100644 android/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml delete mode 100644 android/build/intermediates/lint-cache/maven.google/master-index.xml diff --git a/android/app/app.iml b/android/app/app.iml index a9beee774..419b13eba 100644 --- a/android/app/app.iml +++ b/android/app/app.iml @@ -91,6 +91,7 @@ + diff --git a/android/app/build.gradle b/android/app/build.gradle index 00a3e7629..bd0c757c1 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -120,13 +120,13 @@ android { include "armeabi-v7a", "x86" } } -// buildTypes { -// release { -// minifyEnabled enableProguardInReleaseBuilds -// proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + buildTypes { + release { + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" // signingConfig signingConfigs.release -// } -// } + } + } // applicationVariants are e.g. debug, release applicationVariants.all { variant -> variant.outputs.each { output -> @@ -143,6 +143,17 @@ android { } dependencies { + compile project(':react-native-sentry') + compile project(':react-native-randombytes') + compile project(':react-native-prompt-android') + compile project(':react-native-linear-gradient') + compile project(':react-native-haptic-feedback') + compile project(':react-native-google-analytics-bridge') + compile project(':react-native-gesture-handler') + compile project(':react-native-fs') + compile project(':react-native-webview') + compile project(':react-native-device-info') + compile project(':react-native-camera') implementation project(':react-native-webview') implementation project(':react-native-camera') implementation project(':react-native-fs') diff --git a/android/app/src/main/java/com/bluewallet/MainApplication.java b/android/app/src/main/java/com/bluewallet/MainApplication.java index 667c0f131..ea6b60a29 100644 --- a/android/app/src/main/java/com/bluewallet/MainApplication.java +++ b/android/app/src/main/java/com/bluewallet/MainApplication.java @@ -1,8 +1,9 @@ -package io.bluewallet.bluewallet; +package com.bluewallet; import android.app.Application; import com.facebook.react.ReactApplication; +import com.facebook.react.BuildConfig; import com.reactnativecommunity.webview.RNCWebViewPackage; import com.oblador.vectoricons.VectorIconsPackage; import com.horcrux.svg.SvgPackage; @@ -24,7 +25,7 @@ import com.rnfs.RNFSPackage; import java.util.Arrays; import java.util.List; -public class MainApplication extends Application implements ReactApplication { +public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java new file mode 100644 index 000000000..2f8ffaf88 --- /dev/null +++ b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java @@ -0,0 +1,83 @@ +package io.bluewallet.bluewallet; + +import android.app.Application; + +import com.facebook.react.ReactApplication; +import io.sentry.RNSentryPackage; +import com.bitgo.randombytes.RandomBytesPackage; +import im.shimo.react.prompt.RNPromptPackage; +import com.BV.LinearGradient.LinearGradientPackage; +import com.mkuczera.RNReactNativeHapticFeedbackPackage; +import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; +import com.reactnativecommunity.webview.RNCWebViewPackage; +import com.oblador.vectoricons.VectorIconsPackage; +import com.horcrux.svg.SvgPackage; +import io.sentry.RNSentryPackage; +import com.bitgo.randombytes.RandomBytesPackage; +import im.shimo.react.prompt.RNPromptPackage; +import com.BV.LinearGradient.LinearGradientPackage; +import com.mkuczera.RNReactNativeHapticFeedbackPackage; +import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; +import com.learnium.RNDeviceInfo.RNDeviceInfo; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.shell.MainReactPackage; +import com.facebook.soloader.SoLoader; +import org.reactnative.camera.RNCameraPackage; +import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; +import com.rnfs.RNFSPackage; + +import java.util.Arrays; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new RNSentryPackage(), + new RandomBytesPackage(), + new RNPromptPackage(), + new LinearGradientPackage(), + new RNReactNativeHapticFeedbackPackage(), + new GoogleAnalyticsBridgePackage(), + new RNCWebViewPackage(), + new RNFSPackage() , + new VectorIconsPackage(), + new SvgPackage(), + new RNSentryPackage(), + new RandomBytesPackage(), + new RNPromptPackage(), + new LinearGradientPackage(), + new RNReactNativeHapticFeedbackPackage(), + new GoogleAnalyticsBridgePackage(), + new RNDeviceInfo(), + new RNCameraPackage(), + new RNGestureHandlerPackage() + ); + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + } +} diff --git a/android/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml b/android/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml deleted file mode 100644 index c2e0c79c2..000000000 --- a/android/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/build/intermediates/lint-cache/maven.google/master-index.xml b/android/build/intermediates/lint-cache/maven.google/master-index.xml deleted file mode 100644 index 67cca333a..000000000 --- a/android/build/intermediates/lint-cache/maven.google/master-index.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/settings.gradle b/android/settings.gradle index 11636f24e..f713eed6c 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,4 +1,26 @@ rootProject.name = 'BlueWallet' +include ':react-native-sentry' +project(':react-native-sentry').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sentry/android') +include ':react-native-randombytes' +project(':react-native-randombytes').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-randombytes/android') +include ':react-native-prompt-android' +project(':react-native-prompt-android').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-prompt-android/android') +include ':react-native-linear-gradient' +project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') +include ':react-native-haptic-feedback' +project(':react-native-haptic-feedback').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-haptic-feedback/android') +include ':react-native-google-analytics-bridge' +project(':react-native-google-analytics-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-analytics-bridge/android') +include ':react-native-gesture-handler' +project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') +include ':react-native-fs' +project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') +include ':react-native-webview' +project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') +include ':react-native-device-info' +project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') +include ':react-native-camera' +project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') include ':react-native-webview' project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') include ':react-native-camera' From b44c4cb0d7e9e79896b59fb2bc6a89955fb68c9f Mon Sep 17 00:00:00 2001 From: tukac <45404964+tukac@users.noreply.github.com> Date: Thu, 17 Jan 2019 19:54:13 +0100 Subject: [PATCH 05/15] Update hr_HR.js --- loc/hr_HR.js | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/loc/hr_HR.js b/loc/hr_HR.js index 29164b7f4..7248f58ff 100644 --- a/loc/hr_HR.js +++ b/loc/hr_HR.js @@ -4,8 +4,8 @@ module.exports = { enter_password: 'Unesi lozinku', bad_password: 'Kriva lozinka, pokušaj ponovo', never: 'nikad', - continue: 'Continue', - ok: 'OK', + continue: 'Nastavi', + ok: 'U redu', }, wallets: { select_wallet: 'Odaberi volet', @@ -13,7 +13,7 @@ module.exports = { list: { app_name: 'Blue Wallet', title: 'Voleti', - header: 'Volet je par privatnog ključa (tajna!) i javne adrese' + 'koju slobodno možete dijeliti kada primate novce.', + header: 'Volet je par privatnog ključa (tajna!) i javne adrese ' + 'koju slobodno možete dijeliti kada primate novce.', add: 'Dodaj volet', create_a_wallet: 'Stvori novi volet', create_a_wallet1: 'Ne košta ništa i možete', @@ -33,10 +33,10 @@ module.exports = { create: 'Stvori', label_new_segwit: 'Novi SegWit', label_new_lightning: 'Novi Lightning', - wallet_name: 'ime voleta', - wallet_type: 'tip', + wallet_name: 'ime voleta:', + wallet_type: 'tip:', or: 'ili', - import_wallet: 'Unesi volet', + import_wallet: 'Unesi vanjski volet', imported: 'Unešeno', coming_soon: 'Dolazi uskoro', lightning: 'Lightning', @@ -53,10 +53,10 @@ module.exports = { yes_delete: 'Da, briši', no_cancel: 'Ne, otiaži', delete: 'Obriši', - save: 'Pohrani', + save: 'Spremi', delete_this_wallet: 'Obriši ovaj volet', export_backup: 'Izvoz / bekap', - buy_bitcoin: 'Kupi Bitcoin', + buy_bitcoin: 'Kupovina Bitcoina', show_xpub: 'Prikaži voletov XPUB', }, export: { @@ -147,22 +147,22 @@ module.exports = { satoshi_per_byte: 'Satoshi / byte', memo: 'Bilješka', broadcast: 'Objavi', - not_enough_fee: 'Trošak slanja je premal. Povećaj ga.', + not_enough_fee: 'Trošak slanja je premalen. Povećaj ga.', }, }, receive: { - header: 'Primanje', + header: 'Primi', details: { title: 'Pokaži ovu adresu platitelju', - share: 'pokaži', + share: 'podijeli', copiedToClipboard: 'Kopirano u međuspremnik.', label: 'Opis', - create: 'Create', + create: 'Stvori', setAmount: 'Odredi iznos za primiti', }, }, buyBitcoin: { - header: 'Kupi Bitcoin', + header: 'Kupovina Bitcoina', tap_your_address: 'Klikni na adresu za spremanje u međuspremnik:', copied: 'Spremljeno u međuspremnik!', }, @@ -176,26 +176,26 @@ module.exports = { retype_password: 'Ponovi lozinku', passwords_do_not_match: 'Lozinke su različite', encrypt_storage: 'Kriptiraj spremnik', - lightning_settings: 'Lightning settings', + lightning_settings: 'Lightning postavke', lightning_settings_explain: - 'To connect to your own LND node please install LndHub' + - ' and put its URL here in settings. Leave blank to use default ' + + 'Za spajanje na tvoj vlastiti LND čvor trebaš instalirati LndHub' + + ' i upisati njegov URL ovdje. Ostavi prazno za standardni ' + 'ndHub\n (lndhub.io)', - save: 'save', - about: 'Iznos', + save: 'Spremi', + about: 'Informacije', language: 'Jezik', currency: 'Valuta', }, plausibledeniability: { title: 'Fejk volet', help: - 'U iznimnim okolnostima netko gadan (pa još ako drži oklagiju) te' + - 'može neljubazno pritisnuti da mu otkriješ lozinku za ovaj volet.' + - 'BlueWallet ti čuva leđa buraz. Nemaš brige. Gledaj.' + - 'Stvoriti ćemo dupli volet sa drugačijom lozinkom. Haha, žišku?' + - 'Pa kad se ovaj počne pjeniti a ti vidiš da je vrag odnio šalu' + - 'ti mu podvali ovaj drugi volet. Eto mu ga. Nek si cucla.', - help2: 'Novi spremnik će biti posve funkcionalan, možeš pohraniti koliko' + 'misliš da je potrebno da izgleda uvjerljivo.', + 'Pazi. Netko gadan te može u iznimnim okolnostima (pljačka, prijevremeni izbori, itd.) ' + + 'brutalno pritisnuti da mu otkriješ lozinku za svoj volet. ' + + 'BlueWallet ti čuva leđa buraz. Nemaš brige. Gledaj, ' + + 'stvoriti ćemo fejk volet sa drugačijom lozinkom. Haha, žišku? ' + + 'Pa kad se ovaj počne pjeniti, a ti vidiš da je vrag odnio šalu, ' + + 'samo mu podvali lozinku za ovaj drugi volet. Eto mu ga. Nek si cucla. ', + help2: 'Novi spremnik će biti posve funkcionalan, možeš pohraniti koliko ' + 'misliš da je potrebno da izgleda uvjerljivo.', create_fake_storage: 'Stvori fejk enkriptirani spremnik', go_back: 'Povratak', create_password: 'Unesi lozinku', @@ -212,6 +212,6 @@ module.exports = { refill: 'Dopuni', withdraw: 'Isprazni', expired: 'Isteklo', - sameWalletAsInvoiceError: 'Ne možeš platiti račun s istim voletom s kojim si račun stvorio, ono.', + sameWalletAsInvoiceError: 'Buraz! Ne možeš platiti račun s istim voletom s kojim si račun stvorio, ono.', }, }; From 51c8fc837e8b20ce71c08947543aba2ae516e43a Mon Sep 17 00:00:00 2001 From: Pablo Castellanos Date: Fri, 18 Jan 2019 00:09:43 -0600 Subject: [PATCH 06/15] added Mexican Peso (MXN) as new fiatUnit --- models/fiatUnit.js | 1 + 1 file changed, 1 insertion(+) diff --git a/models/fiatUnit.js b/models/fiatUnit.js index 03c6c7e5c..17a7a03b9 100644 --- a/models/fiatUnit.js +++ b/models/fiatUnit.js @@ -9,6 +9,7 @@ export const FiatUnit = Object.freeze({ HRK: { endPointKey: 'HRK', symbol: 'HRK', locale: 'hr-HR' }, INR: { endPointKey: 'INR', symbol: '₹', locale: 'hi-HN' }, JPY: { endPointKey: 'JPY', symbol: '¥', locale: 'ja-JP' }, + MXN: { endPointKey: 'MXN', symbol: '$', locale: 'es-MX' }, PLN: { endPointKey: 'PLN', symbol: 'zł', locale: 'pl-PL' }, RUB: { endPointKey: 'RUB', symbol: '₽', locale: 'ru-RU' }, SGD: { endPointKey: 'SGD', symbol: 'S$', locale: 'zh-SG' }, From 14aaa4cc5ef29d706f773da62eeab1cb64a9e05a Mon Sep 17 00:00:00 2001 From: Bruno Sette Date: Sat, 19 Jan 2019 19:16:50 -0300 Subject: [PATCH 07/15] added Brazilian Real (BRL) as new fiatUnit --- models/fiatUnit.js | 1 + 1 file changed, 1 insertion(+) diff --git a/models/fiatUnit.js b/models/fiatUnit.js index 03c6c7e5c..3896b7131 100644 --- a/models/fiatUnit.js +++ b/models/fiatUnit.js @@ -1,6 +1,7 @@ export const FiatUnit = Object.freeze({ USD: { endPointKey: 'USD', symbol: '$', locale: 'en-US' }, AUD: { endPointKey: 'AUD', symbol: '$', locale: 'en-AU' }, + BRL: { endPointKey: 'BRL', symbol: 'R$', locale: 'pt-BR' }, CAD: { endPointKey: 'CAD', symbol: '$', locale: 'en-CA' }, CZK: { endPointKey: 'CZK', symbol: 'Kč', locale: 'cs-CZ' }, CNY: { endPointKey: 'CNY', symbol: '¥', locale: 'zh-CN' }, From 27dda65596ce125a2366acc980a50bf2542e6675 Mon Sep 17 00:00:00 2001 From: Igor Korsakov Date: Mon, 21 Jan 2019 13:21:48 +0000 Subject: [PATCH 08/15] REF: lapp-browser; OPS: build refactor --- .babelrc | 2 +- .buckconfig | 6 + .flowconfig | 75 +- .gitattributes | 1 + .gitignore | 55 +- .watchmanconfig | 2 +- android/app/app.iml | 94 +- android/app/build.gradle | 28 +- android/app/src/main/AndroidManifest.xml | 8 - .../java/com/bluewallet/MainApplication.java | 71 - .../bluewallet}/bluewallet/MainActivity.java | 0 .../bluewallet/MainApplication.java | 82 +- android/app/src/main/res/values/strings.xml | 2 +- android/build.gradle | 13 +- .../com/android/support/group-index.xml | 93 -- .../lint-cache/maven.google/master-index.xml | 120 -- .../gradle/wrapper/gradle-wrapper.properties | 3 +- android/settings.gradle | 6 +- app.json | 5 +- ios/BlueWallet.xcodeproj/project.pbxproj | 1309 +++++++++-------- .../xcschemes/BlueWallet-tvOS.xcscheme | 2 +- .../xcschemes/BlueWallet.xcscheme | 2 +- ios/BlueWallet/AppDelegate.m | 21 +- ios/BlueWallet/Info.plist | 4 +- ios/BlueWalletTests/Info.plist | 2 +- package-lock.json | 37 +- package.json | 6 +- screen/lnd/browser.js | 448 +++--- 28 files changed, 1290 insertions(+), 1207 deletions(-) create mode 100644 .buckconfig create mode 100644 .gitattributes delete mode 100644 android/app/src/main/java/com/bluewallet/MainApplication.java rename android/app/src/main/java/{com => io/bluewallet}/bluewallet/MainActivity.java (100%) mode change 120000 => 100644 android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java delete mode 100644 android/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml delete mode 100644 android/build/intermediates/lint-cache/maven.google/master-index.xml diff --git a/.babelrc b/.babelrc index 6408cbe11..d4b74b5be 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,3 @@ { "presets": ["module:metro-react-native-babel-preset"] -} \ No newline at end of file +} diff --git a/.buckconfig b/.buckconfig new file mode 100644 index 000000000..934256cb2 --- /dev/null +++ b/.buckconfig @@ -0,0 +1,6 @@ + +[android] + target = Google Inc.:Google APIs:23 + +[maven_repositories] + central = https://repo1.maven.org/maven2 diff --git a/.flowconfig b/.flowconfig index 5b1b23318..1043c82d7 100644 --- a/.flowconfig +++ b/.flowconfig @@ -2,74 +2,69 @@ ; We fork some components by platform .*/*[.]android.js -; Ignore templates for 'react-native init' -/node_modules/react-native/local-cli/templates/.* - -; Ignore RN jest -/node_modules/react-native/jest/.* - -; Ignore RNTester -/node_modules/react-native/RNTester/.* - -; Ignore the website subdir -/node_modules/react-native/website/.* - -; Ignore the Dangerfile -/node_modules/react-native/danger/dangerfile.js - -; Ignore Fbemitter -/node_modules/fbemitter/.* - ; Ignore "BUCK" generated dirs -/node_modules/react-native/\.buckd/ +/\.buckd/ ; Ignore unexpected extra "@providesModule" .*/node_modules/.*/node_modules/fbjs/.* -; Ignore polyfills -/node_modules/react-native/Libraries/polyfills/.* +; Ignore duplicate module providers +; For RN Apps installed via npm, "Libraries" folder is inside +; "node_modules/react-native" but in the source repo it is in the root +.*/Libraries/react-native/React.js -; Ignore various node_modules -/node_modules/react-native-gesture-handler/.* -/node_modules/expo/.* -/node_modules/react-navigation/.* -/node_modules/xdl/.* -/node_modules/reqwest/.* -/node_modules/metro-bundler/.* +; Ignore polyfills +.*/Libraries/polyfills/.* + +; Ignore metro +.*/node_modules/metro/.* [include] [libs] node_modules/react-native/Libraries/react-native/react-native-interface.js node_modules/react-native/flow/ -node_modules/expo/flow/ +node_modules/react-native/flow-github/ [options] emoji=true -module.system=haste +esproposal.optional_chaining=enable +esproposal.nullish_coalescing=enable -module.file_ext=.js -module.file_ext=.jsx -module.file_ext=.json -module.file_ext=.ios.js +module.system=haste +module.system.haste.use_name_reducers=true +# get basename +module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1' +# strip .js or .js.flow suffix +module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1' +# strip .ios suffix +module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1' +module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1' +module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1' +module.system.haste.paths.blacklist=.*/__tests__/.* +module.system.haste.paths.blacklist=.*/__mocks__/.* +module.system.haste.paths.blacklist=/node_modules/react-native/Libraries/Animated/src/polyfills/.* +module.system.haste.paths.whitelist=/node_modules/react-native/Libraries/.* munge_underscores=true module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' +module.file_ext=.js +module.file_ext=.jsx +module.file_ext=.json +module.file_ext=.native.js + suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FlowFixMeProps suppress_type=$FlowFixMeState -suppress_type=$FixMe -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native_oss[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(5[0-6]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native_oss[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError -unsafe.enable_getters_and_setters=true - [version] -^0.56.0 +^0.78.0 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..d42ff1835 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.pbxproj -text diff --git a/.gitignore b/.gitignore index 1aa144258..5d647565f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,29 +1,10 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -/node_modules -node_modules/ -# misc -.env.local -.env.development.local -.env.test.local -.env.production.local -.idea/ - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -class/constants.js - -# OSX# OSX +# OSX # .DS_Store # Xcode # build/ -ios/build/* *.pbxuser !default.pbxuser *.mode1v3 @@ -39,13 +20,37 @@ DerivedData *.hmap *.ipa *.xcuserstate -# +project.xcworkspace -# Android +# Android/IntelliJ # -android/local.properties -android/app/bluewallet-release-key.keystore +build/ .idea .gradle +local.properties *.iml -build/ + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# BUCK +buck-out/ +\.buckd/ +*.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots + +# Bundle artifact +*.jsbundle diff --git a/.watchmanconfig b/.watchmanconfig index 0967ef424..9e26dfeeb 100644 --- a/.watchmanconfig +++ b/.watchmanconfig @@ -1 +1 @@ -{} +{} \ No newline at end of file diff --git a/android/app/app.iml b/android/app/app.iml index b6f942341..ae0bb4250 100644 --- a/android/app/app.iml +++ b/android/app/app.iml @@ -23,12 +23,11 @@ - - + + - @@ -36,7 +35,6 @@ - @@ -85,18 +83,35 @@ + + + + + + + + + + + + + + + + + @@ -105,59 +120,62 @@ - - - + + + + + + + + + - - - - - + + - - - - - - + + + + - - - - - - - - + + + + - + - - - - + + + + - + + - + - + + - - + + + + + + + + - - diff --git a/android/app/build.gradle b/android/app/build.gradle index fc31b9961..9f6d7c428 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -77,7 +77,6 @@ project.ext.react = [ ] apply from: "../../node_modules/react-native/react.gradle" -apply from: "../../node_modules/react-native-sentry/sentry.gradle" /** * Set this to true to create two separate APKs instead of one: @@ -102,22 +101,12 @@ android { applicationId "io.bluewallet.bluewallet" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 18 - versionName "3.6.0" + versionCode 1 + versionName "3.6.2" ndk { abiFilters "armeabi-v7a", "x86" } } - signingConfigs { - release { - if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { - storeFile file(MYAPP_RELEASE_STORE_FILE) - storePassword MYAPP_RELEASE_STORE_PASSWORD - keyAlias MYAPP_RELEASE_KEY_ALIAS - keyPassword MYAPP_RELEASE_KEY_PASSWORD - } - } - } splits { abi { reset() @@ -130,7 +119,6 @@ android { release { minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - signingConfig signingConfigs.release } } // applicationVariants are e.g. debug, release @@ -150,21 +138,21 @@ android { dependencies { compile project(':react-native-webview') - compile project(':react-native-camera') - compile project(':react-native-fs') - compile project(':react-native-gesture-handler') compile project(':react-native-vector-icons') compile project(':react-native-svg') + compile project(':react-native-camera') compile project(':react-native-sentry') compile project(':react-native-randombytes') compile project(':react-native-prompt-android') compile project(':react-native-linear-gradient') compile project(':react-native-haptic-feedback') compile project(':react-native-google-analytics-bridge') + compile project(':react-native-gesture-handler') + compile project(':react-native-fs') compile project(':react-native-device-info') - implementation (project(':react-native-camera')) { - exclude group: "com.android.support" - } + implementation "com.android.support:exifinterface:+" + implementation "com.android.support:support-annotations:+" + implementation "com.android.support:support-v4:27.1.1" implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" implementation "com.facebook.react:react-native:+" // From node_modules diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index bb0369755..8e0deabd0 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -3,7 +3,6 @@ - - - - - - - - diff --git a/android/app/src/main/java/com/bluewallet/MainApplication.java b/android/app/src/main/java/com/bluewallet/MainApplication.java deleted file mode 100644 index 667c0f131..000000000 --- a/android/app/src/main/java/com/bluewallet/MainApplication.java +++ /dev/null @@ -1,71 +0,0 @@ -package io.bluewallet.bluewallet; - -import android.app.Application; - -import com.facebook.react.ReactApplication; -import com.reactnativecommunity.webview.RNCWebViewPackage; -import com.oblador.vectoricons.VectorIconsPackage; -import com.horcrux.svg.SvgPackage; -import io.sentry.RNSentryPackage; -import com.bitgo.randombytes.RandomBytesPackage; -import im.shimo.react.prompt.RNPromptPackage; -import com.BV.LinearGradient.LinearGradientPackage; -import com.mkuczera.RNReactNativeHapticFeedbackPackage; -import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; -import com.learnium.RNDeviceInfo.RNDeviceInfo; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.shell.MainReactPackage; -import com.facebook.soloader.SoLoader; -import org.reactnative.camera.RNCameraPackage; -import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; -import com.rnfs.RNFSPackage; - -import java.util.Arrays; -import java.util.List; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - return Arrays.asList( - new MainReactPackage(), - new RNCWebViewPackage(), - new RNFSPackage() , - new VectorIconsPackage(), - new SvgPackage(), - new RNSentryPackage(), - new RandomBytesPackage(), - new RNPromptPackage(), - new LinearGradientPackage(), - new RNReactNativeHapticFeedbackPackage(), - new GoogleAnalyticsBridgePackage(), - new RNDeviceInfo(), - new RNCameraPackage(), - new RNGestureHandlerPackage() - ); - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - } -} diff --git a/android/app/src/main/java/com/bluewallet/MainActivity.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java similarity index 100% rename from android/app/src/main/java/com/bluewallet/MainActivity.java rename to android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java deleted file mode 120000 index 93dacb59d..000000000 --- a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../.././android/app/src/main/java/com/bluewallet/MainApplication.java \ No newline at end of file diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java new file mode 100644 index 000000000..fa9fefd35 --- /dev/null +++ b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java @@ -0,0 +1,81 @@ +package io.bluewallet.bluewallet; + +import android.app.Application; + +import com.facebook.react.ReactApplication; +import com.reactnativecommunity.webview.RNCWebViewPackage; +import com.oblador.vectoricons.VectorIconsPackage; +import org.reactnative.camera.RNCameraPackage; +import io.sentry.RNSentryPackage; +import com.bitgo.randombytes.RandomBytesPackage; +import im.shimo.react.prompt.RNPromptPackage; +import com.BV.LinearGradient.LinearGradientPackage; +import com.mkuczera.RNReactNativeHapticFeedbackPackage; +import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; +import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; +import com.rnfs.RNFSPackage; +import com.learnium.RNDeviceInfo.RNDeviceInfo; +import org.reactnative.camera.RNCameraPackage; +import com.horcrux.svg.SvgPackage; +import io.sentry.RNSentryPackage; +import com.bitgo.randombytes.RandomBytesPackage; +import im.shimo.react.prompt.RNPromptPackage; +import com.BV.LinearGradient.LinearGradientPackage; +import com.mkuczera.RNReactNativeHapticFeedbackPackage; +import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; +import com.learnium.RNDeviceInfo.RNDeviceInfo; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.shell.MainReactPackage; +import com.facebook.soloader.SoLoader; +import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; +import com.rnfs.RNFSPackage; + +import java.util.Arrays; +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new RNCWebViewPackage(), + new SvgPackage(), + new RNCameraPackage(), + new RNSentryPackage(), + new RandomBytesPackage(), + new GoogleAnalyticsBridgePackage(), + new RNFSPackage(), + new RNDeviceInfo(), + new VectorIconsPackage(), + new RNPromptPackage(), + new LinearGradientPackage(), + new RNReactNativeHapticFeedbackPackage(), + new RNGestureHandlerPackage() + ); + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + } +} diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 6cf99bf9e..f0a8fbef3 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - Blue Wallet + BlueWallet diff --git a/android/build.gradle b/android/build.gradle index 9c54cfcd0..cfbb2b746 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -13,7 +13,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.4' + classpath 'com.android.tools.build:gradle:3.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -37,14 +37,3 @@ task wrapper(type: Wrapper) { gradleVersion = '4.4' distributionUrl = distributionUrl.replace("bin", "all") } - - subprojects { - project.configurations.all { - resolutionStrategy.eachDependency { details -> - if (details.requested.group == 'com.android.support' - && !details.requested.name.contains('multidex') ) { - details.useVersion "26.1.0" - } - } - } -} diff --git a/android/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml b/android/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml deleted file mode 100644 index c2e0c79c2..000000000 --- a/android/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/build/intermediates/lint-cache/maven.google/master-index.xml b/android/build/intermediates/lint-cache/maven.google/master-index.xml deleted file mode 100644 index 67cca333a..000000000 --- a/android/build/intermediates/lint-cache/maven.google/master-index.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index b6517bb1d..e4a6127b9 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Sat Jan 19 02:29:20 GMT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip diff --git a/android/settings.gradle b/android/settings.gradle index 11636f24e..3e900d60d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,16 +1,14 @@ rootProject.name = 'BlueWallet' include ':react-native-webview' project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') -include ':react-native-camera' -project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') +include ':react-native-svg' +project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android') include ':react-native-fs' project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') include ':react-native-gesture-handler' project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') include ':react-native-vector-icons' project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') -include ':react-native-svg' -project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android') include ':react-native-sentry' project(':react-native-sentry').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sentry/android') include ':react-native-randombytes' diff --git a/app.json b/app.json index faf509a9e..c501a12bb 100644 --- a/app.json +++ b/app.json @@ -1,7 +1,4 @@ { - "displayName": "Blue Wallet", "name": "BlueWallet", - "ios": { - "buildNumber": "118" - } + "displayName": "BlueWallet" } \ No newline at end of file diff --git a/ios/BlueWallet.xcodeproj/project.pbxproj b/ios/BlueWallet.xcodeproj/project.pbxproj index e965cd706..891a6f9f6 100644 --- a/ios/BlueWallet.xcodeproj/project.pbxproj +++ b/ios/BlueWallet.xcodeproj/project.pbxproj @@ -13,11 +13,17 @@ 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 00E356F31AD99517003FC87E /* BlueWalletTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* BlueWalletTests.m */; }; - 050943495F6A45DF961C7596 /* libRNReactNativeHapticFeedback.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C979953B425248FEA80F4F78 /* libRNReactNativeHapticFeedback.a */; }; - 06C80B90852E417F941BB03C /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F01CC934C46A40A19F1F8861 /* MaterialCommunityIcons.ttf */; }; - 071C1519F81B4BE29915C533 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CF6354B616F54426BCA4AF79 /* MaterialIcons.ttf */; }; - 0E9157D251334CFC800750D9 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29112C2F0D8340B3A3196DED /* CoreData.framework */; }; - 105C71E7736A4F20905497E3 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9079CACA902E4AAA91711414 /* FontAwesome5_Regular.ttf */; }; + 02595DE49CB242ADB35FFB19 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 85758216A4E74F649B4B1D83 /* FontAwesome5_Solid.ttf */; }; + 0263BA0C13C44BE6B630E0A9 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3C108365C46F43B981AA76A2 /* FontAwesome5_Regular.ttf */; }; + 028C3DFA2E1F4311AC52B1A7 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CC1C418B6E464077A8CB0103 /* MaterialCommunityIcons.ttf */; }; + 05182DA8005A401C8C0E6ABF /* libRCTGoogleAnalyticsBridge.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0AE2A7819A5F44EA87540B0F /* libRCTGoogleAnalyticsBridge.a */; }; + 055ADE6CC61141EDBA8FAEAA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 166E13BC37B249E392C6B2F9 /* libz.tbd */; }; + 078BF061C6364525ADBC9801 /* libRNReactNativeHapticFeedback.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 06537407AE1149A291D947A6 /* libRNReactNativeHapticFeedback.a */; }; + 08FC9048F804485789FBAF4C /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E4CFF6A80CB041188BFBE671 /* Entypo.ttf */; }; + 0FEEFBB461614579BBB4436E /* libRNSentry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88E7916103194ED38839F229 /* libRNSentry.a */; }; + 113F7AF7C7AF4E348B931A76 /* libRNRandomBytes.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A7CD30C32B7476AAFD7276B /* libRNRandomBytes.a */; }; + 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 122F9192CF8E45C2989EB8AB /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 756A0E83EE214C08AC02B267 /* MaterialIcons.ttf */; }; 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; @@ -27,10 +33,7 @@ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; - 1EF9306F31DC4D469F615F52 /* libReactNativePermissions.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FF3B2695A6A43B39CE4D2AF /* libReactNativePermissions.a */; }; - 228DCD6BAF1B4DF181C5A307 /* libRNRate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ED0418953CCE4F4FA0E0E60F /* libRNRate.a */; }; - 22F536E307DB4FBCB00DC76B /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ADB5553EACB44579700D6D4 /* libRNDeviceInfo.a */; }; - 2804B7DB54084F54A1C28DC6 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 51A88773DE2A456AA13E1814 /* Feather.ttf */; }; + 227E73C8585D407B918853C1 /* libRNSVG-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EE42F14225744494A308B85E /* libRNSVG-tvOS.a */; }; 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; @@ -42,39 +45,37 @@ 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; }; 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; }; 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; }; - 2DA69FD4D6264094A3ABE0F4 /* libRCTGoogleAnalyticsBridge.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CF3D00F82534DE796D11610 /* libRCTGoogleAnalyticsBridge.a */; }; 2DCD954D1E0B4F2C00145EB5 /* BlueWalletTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* BlueWalletTests.m */; }; 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; }; - 3ED26B1105834E44AECC99CE /* libRNRandomBytes-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B0661D5EE994C5887A656CC /* libRNRandomBytes-tvOS.a */; }; - 4A9494D3A1E04115B6F7D0D4 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1B3AD816E1A646799CA4E452 /* Ionicons.ttf */; }; - 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; - 6A95349CF0194548A175076B /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B5DED491BF6C49AE8AC4F530 /* Entypo.ttf */; }; - 6FEBC8E7AA7D4744A2EEE87B /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 01B7B7DF17B84765BE45F7F1 /* libRNGestureHandler.a */; }; - 79A0163DC7B34D1D8E4B6944 /* libRNSVG-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6553F26980BC47409FFB0F7C /* libRNSVG-tvOS.a */; }; - 7C1B264BF28B44C29BA00262 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5ED20A6C018043AE8185DD19 /* EvilIcons.ttf */; }; - 7C76B2A54AF3405FB041001E /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9BD18677AAD543C79A7CB577 /* FontAwesome.ttf */; }; - 7C83851C74EC41958D6AE8C6 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D914576230A34EF598917FA9 /* Zocial.ttf */; }; + 4C6BE27DFEAA4A408DB03E56 /* libRNRandomBytes-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78DF4F1B869947EAA3239546 /* libRNRandomBytes-tvOS.a */; }; + 5586C1585BA44EA6B545574A /* libBVLinearGradient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B0E4BE60376436EB155BEFB /* libBVLinearGradient.a */; }; + 5C0748AF12B5475183E670DA /* libRNVectorIcons-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EA20083B9DCA4F2D80ED8730 /* libRNVectorIcons-tvOS.a */; }; + 5DAA10F29B7A408592E8C43F /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BC0445653C29416DBF1BC823 /* libsqlite3.0.tbd */; }; + 66CF1719F73A4067A3C4EE18 /* libRNDeviceInfo-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C0D580C6B043AFBDD35884 /* libRNDeviceInfo-tvOS.a */; }; + 74A59188BE6D47FBA7F10AA7 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 19F54CF3B7EA447486B1580C /* Zocial.ttf */; }; 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; - 96CC4BF79B174A478DF9C378 /* libRNVectorIcons-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CC4FCEA18F7E4033B6EF3D70 /* libRNVectorIcons-tvOS.a */; }; - 9F810B06D93D45B983F70B74 /* libRNSentry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B5A6242DF4B645AAB539D2E4 /* libRNSentry.a */; }; - A00EA31D54E74AB4BABF8755 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4C1AD00A4FDD42BEB62AFCF5 /* FontAwesome5_Brands.ttf */; }; - A2C00245B747440ABEB7D316 /* libRNCWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 81EDDF247D484BC38EBCE565 /* libRNCWebView.a */; }; - A89DFA8A97B642D0AFD63AA2 /* libRNDeviceInfo-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 96C3F4E26841456EBF625D82 /* libRNDeviceInfo-tvOS.a */; }; + 873665C61F2F4689BF376440 /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AF3CB5617DC43DC988162A6 /* libRNCamera.a */; }; + 88F4BE5F5AB947C3A36156D8 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DFE9C685977A46399D13B25C /* EvilIcons.ttf */; }; + 8BCBCB6511CE402088217A4F /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CEC5BDCD7ADA4318B8ED1D00 /* Foundation.ttf */; }; + 9818EEC1EFCF4CF9B94D7B00 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16E6FB36AB7344F990105943 /* SystemConfiguration.framework */; }; + 985F870D88324026B44EF399 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F502E57F4DA54127A84DDAC1 /* SimpleLineIcons.ttf */; }; + 9CAE85C66891408D8F954796 /* libRNFS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55B51FEAD82B40C5A9599130 /* libRNFS.a */; }; + A1C6AA1F146D4BBEA120BA8D /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8766FB3BE0C94260B1A99F94 /* FontAwesome5_Brands.ttf */; }; + A38676B5C8FF402E96FE0D8B /* libRCTWKWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 30B8249F5D4448859D5116E2 /* libRCTWKWebView.a */; }; ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; - B86E02D094DF455C990432D2 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BD7B6C6FFF1E4646860703CA /* Foundation.ttf */; }; - C031BDE1E9544216A73A4321 /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6037CD1CCED34A7E980149E6 /* libRNSVG.a */; }; - CB65331B95F8467390AC8BF0 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F84697F33A394B419D56ED30 /* libRNVectorIcons.a */; }; - D37B51DB221D47B7996BE00D /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F9FC88F4A85F40E9ABACACB9 /* Octicons.ttf */; }; - E276BE46B82249E1B88A99C8 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 2DD69D8473C341528160682A /* libsqlite3.0.tbd */; }; - E4BBBC2D6D394E89B99A5C16 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D124361914C041219D903C3D /* SimpleLineIcons.ttf */; }; - E98E21D32735429C8E630B54 /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 97EF095ACCA1462FA6012B97 /* AntDesign.ttf */; }; - EA537EBFD04A4EEBA3D7166F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CCDBD1516FF4AD492C1226C /* SystemConfiguration.framework */; }; - EDC6FF8621D64E31924EDC57 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = C2433A8567374E78ACA76F08 /* libz.tbd */; }; - F0182C8D1F194D66AA25FCFC /* libBVLinearGradient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B2AB1C624E24C1BA95FBFED /* libBVLinearGradient.a */; }; - F439E4EEAE42446B8AE33E3F /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F5B1CA51964493093282D8E /* libRNCamera.a */; }; - F6AA297664414342AC23B529 /* libRNFS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F9F01E9C22C243A9AB48A90A /* libRNFS.a */; }; - F97F051969164CCBA5336FC2 /* libRNRandomBytes.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 907C87020BD04956A5253DEB /* libRNRandomBytes.a */; }; - FDE69393B0DE46149DDB7E3C /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C0708F2D346B415C84383510 /* FontAwesome5_Solid.ttf */; }; + AE5BE0616EF644D2A8583E16 /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C0166BDF81FA4A2F81702194 /* libRNSVG.a */; }; + B20D291028BA4442B963F109 /* libRNSentry-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0338C70E30CD4BF394871601 /* libRNSentry-tvOS.a */; }; + B414BE14BACE483F85247A1D /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EAB6EE282B654B6594C228BB /* Ionicons.ttf */; }; + B483C32E8B92447B9922637A /* libReactNativePermissions.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72F0D4F26EFC4864993EA274 /* libReactNativePermissions.a */; }; + B49A054BB8E743D59474EA95 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D52BC1ADE4C742FEBAB59A5A /* CoreData.framework */; }; + B56DD1A390C0411AA6B033C1 /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 050A5C238226461DB5C131FD /* AntDesign.ttf */; }; + B617E79B06774815997F5DC8 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E35B9F897A0C4DF6A88E08ED /* FontAwesome.ttf */; }; + C0CC1B295A544678A63CBD24 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A30C5D61F27B4EB0A5FA1098 /* Feather.ttf */; }; + CC7A1851EAB14457B1769BB8 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C43A4D44551E47BCA6853B4D /* Octicons.ttf */; }; + CD0F1C511C6E4687B751EA9F /* libRNRate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 854C34D4A47D447999953B24 /* libRNRate.a */; }; + D6EE754729E340309EE93251 /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BD9F9D46DD7F4D56AC6BB596 /* libRNGestureHandler.a */; }; + F26E5C3CC3CC4D4CA34E6B29 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18325ED98FD94340BB50926C /* libRNVectorIcons.a */; }; + FA33D783D8B54DFC9BDDE59E /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 708F724FA552428BAEB980DB /* libRNDeviceInfo.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -351,152 +352,152 @@ remoteGlobalIDString = 358F4ED71D1E81A9004DF814; remoteInfo = RCTBlob; }; - B48F20F5219E8A0800BA10A8 /* PBXContainerItemProxy */ = { + B4C5B8F521F2DF3000A845C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 87703C68A1014D0A8FDBAD00 /* RCTGoogleAnalyticsBridge.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A79185C61C30694E001236A6; - remoteInfo = RCTGoogleAnalyticsBridge; - }; - B48F20F8219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FDDDD64DF1014CDE82A5D7D9 /* ReactNativePermissions.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 9D23B34F1C767B80008B4819; - remoteInfo = ReactNativePermissions; - }; - B48F20FF219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 917199AF101244F5A9119C8C /* RNDeviceInfo.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = DA5891D81BA9A9FC002B4DB2; - remoteInfo = RNDeviceInfo; - }; - B48F2101219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 917199AF101244F5A9119C8C /* RNDeviceInfo.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E72EC1401F7ABB5A0001BC90; - remoteInfo = "RNDeviceInfo-tvOS"; - }; - B48F2104219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CA35307CBA624D81A15815D2 /* RNReactNativeHapticFeedback.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RNReactNativeHapticFeedback; - }; - B48F210A219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DDABC336B13E47398005736D /* RNSentry.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RNSentry; - }; - B48F210E219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C88A48E1C11140418478EC7F /* RNSVG.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C; - remoteInfo = RNSVG; - }; - B48F2110219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C88A48E1C11140418478EC7F /* RNSVG.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 94DDAC5C1F3D024300EED511; - remoteInfo = "RNSVG-tvOS"; - }; - B48F2114219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CF14D1AA406D4EDC85D3A61F /* RNVectorIcons.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 5DBEB1501B18CEA900B34395; - remoteInfo = RNVectorIcons; - }; - B48F2116219E8A0800BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CF14D1AA406D4EDC85D3A61F /* RNVectorIcons.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A39873CE1EA65EE60051E01A; - remoteInfo = "RNVectorIcons-tvOS"; - }; - B48F2161219E918C00BA10A8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5863F2E7B71740E3940BABD9 /* BVLinearGradient.xcodeproj */; + containerPortal = BC4E5B046FEB46BDB96ED877 /* BVLinearGradient.xcodeproj */; proxyType = 2; remoteGlobalIDString = 134814201AA4EA6300B7C361; remoteInfo = BVLinearGradient; }; - B48F2163219E918C00BA10A8 /* PBXContainerItemProxy */ = { + B4C5B8F721F2DF3000A845C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5863F2E7B71740E3940BABD9 /* BVLinearGradient.xcodeproj */; + containerPortal = BC4E5B046FEB46BDB96ED877 /* BVLinearGradient.xcodeproj */; proxyType = 2; remoteGlobalIDString = 64AA15081EF7F30100718508; remoteInfo = "BVLinearGradient-tvOS"; }; - B48F21E5219FC5E700BA10A8 /* PBXContainerItemProxy */ = { + B4C5B8FA21F2DF3000A845C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = DB512F57589B4F8A89CBE2AB /* RNRandomBytes.xcodeproj */; + containerPortal = 6C5AB6AEDF75403E99A6AA17 /* RCTGoogleAnalyticsBridge.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 73EEC9391BFE4B1D00D468EB; - remoteInfo = RNRandomBytes; + remoteGlobalIDString = A79185C61C30694E001236A6; + remoteInfo = RCTGoogleAnalyticsBridge; }; - B48F21E7219FC5E700BA10A8 /* PBXContainerItemProxy */ = { + B4C5B8FD21F2DF3000A845C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = DB512F57589B4F8A89CBE2AB /* RNRandomBytes.xcodeproj */; + containerPortal = F7152926CD0F4C90BE0A6980 /* ReactNativePermissions.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 163CDE4E2087CAD3001065FB; - remoteInfo = "RNRandomBytes-tvOS"; + remoteGlobalIDString = 9D23B34F1C767B80008B4819; + remoteInfo = ReactNativePermissions; }; - B4CE842321B4C0DD00E2E2A3 /* PBXContainerItemProxy */ = { + B4C5B90021F2DF3000A845C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = C0B6F9440F69425886845061 /* RNFS.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = F12AFB9B1ADAF8F800E0535D; - remoteInfo = RNFS; - }; - B4CE842521B4C0DD00E2E2A3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C0B6F9440F69425886845061 /* RNFS.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6456441F1EB8DA9100672408; - remoteInfo = "RNFS-tvOS"; - }; - B4F3B46D21A7D63400548A69 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAC908621D184867839621FE /* RNGestureHandler.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RNGestureHandler; - }; - B4F3B4F421A906D000548A69 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7F7225A9F01C4785B27FF490 /* RNCamera.xcodeproj */; + containerPortal = 3853DFD4C6D44BB8B17AEDF0 /* RNCamera.xcodeproj */; proxyType = 2; remoteGlobalIDString = 4107012F1ACB723B00C6AA39; remoteInfo = RNCamera; }; - B4F7F05921E8449B00AFD87C /* PBXContainerItemProxy */ = { + B4C5B90421F2DF3000A845C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D6051C6440444360BD29AFE4 /* RNRate.xcodeproj */; + containerPortal = 03D541ACCDD2451D9971158E /* RNDeviceInfo.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = DA5891D81BA9A9FC002B4DB2; + remoteInfo = RNDeviceInfo; + }; + B4C5B90621F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 03D541ACCDD2451D9971158E /* RNDeviceInfo.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E72EC1401F7ABB5A0001BC90; + remoteInfo = "RNDeviceInfo-tvOS"; + }; + B4C5B90A21F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = CDBF3F7F227D42128D305BA0 /* RNFS.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F12AFB9B1ADAF8F800E0535D; + remoteInfo = RNFS; + }; + B4C5B90C21F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = CDBF3F7F227D42128D305BA0 /* RNFS.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 6456441F1EB8DA9100672408; + remoteInfo = "RNFS-tvOS"; + }; + B4C5B90F21F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97E59C536A894751BC70A472 /* RNGestureHandler.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNGestureHandler; + }; + B4C5B91321F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 2AA985ED11E446A4A8ADAAA5 /* RNRandomBytes.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 73EEC9391BFE4B1D00D468EB; + remoteInfo = RNRandomBytes; + }; + B4C5B91521F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 2AA985ED11E446A4A8ADAAA5 /* RNRandomBytes.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 163CDE4E2087CAD3001065FB; + remoteInfo = "RNRandomBytes-tvOS"; + }; + B4C5B91821F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C817BBCA1879484C90C8FDA4 /* RNRate.xcodeproj */; proxyType = 2; remoteGlobalIDString = 134814201AA4EA6300B7C361; remoteInfo = RNRate; }; - B4F7F0AB21E9991000AFD87C /* PBXContainerItemProxy */ = { + B4C5B91B21F2DF3000A845C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = DDABC336B13E47398005736D /* RNSentry.xcodeproj */; + containerPortal = 0AD3549D2DDE42C694D6338C /* RNReactNativeHapticFeedback.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNReactNativeHapticFeedback; + }; + B4C5B91F21F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4A025859F71B464AA9100C41 /* RNSentry.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNSentry; + }; + B4C5B92121F2DF3000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4A025859F71B464AA9100C41 /* RNSentry.xcodeproj */; proxyType = 2; remoteGlobalIDString = 274692C321B4414400BF91A8; remoteInfo = "RNSentry-tvOS"; }; - B4F7F0B421E99B5B00AFD87C /* PBXContainerItemProxy */ = { + B4C5B97421F2E23E00A845C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 642C144246BF4C3EB350442F /* RNCWebView.xcodeproj */; + containerPortal = 6A53833BB9EC4CCEABBA5978 /* RNSVG.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RNCWebView; + remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C; + remoteInfo = RNSVG; + }; + B4C5B97621F2E23E00A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6A53833BB9EC4CCEABBA5978 /* RNSVG.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 94DDAC5C1F3D024300EED511; + remoteInfo = "RNSVG-tvOS"; + }; + B4C5BA2321F2E29000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4E7DA1BD76504DF686A0EDFE /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5DBEB1501B18CEA900B34395; + remoteInfo = RNVectorIcons; + }; + B4C5BA2521F2E29000A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4E7DA1BD76504DF686A0EDFE /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A39873CE1EA65EE60051E01A; + remoteInfo = "RNVectorIcons-tvOS"; + }; + B4C5BAB521F3708C00A845C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 79AAC92A715841209904022D /* RCTWKWebView.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 0974579A1D2A440A000D9368; + remoteInfo = RCTWKWebView; }; /* End PBXContainerItemProxy section */ @@ -510,8 +511,12 @@ 00E356EE1AD99517003FC87E /* BlueWalletTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlueWalletTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* BlueWalletTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BlueWalletTests.m; sourceTree = ""; }; - 01B7B7DF17B84765BE45F7F1 /* libRNGestureHandler.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNGestureHandler.a; sourceTree = ""; }; - 0A6C0341E36446BE93133B26 /* libRNSensors.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSensors.a; sourceTree = ""; }; + 0338C70E30CD4BF394871601 /* libRNSentry-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNSentry-tvOS.a"; sourceTree = ""; }; + 03D541ACCDD2451D9971158E /* RNDeviceInfo.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNDeviceInfo.xcodeproj; path = "../node_modules/react-native-device-info/ios/RNDeviceInfo.xcodeproj"; sourceTree = ""; }; + 050A5C238226461DB5C131FD /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; }; + 06537407AE1149A291D947A6 /* libRNReactNativeHapticFeedback.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNReactNativeHapticFeedback.a; sourceTree = ""; }; + 0AD3549D2DDE42C694D6338C /* RNReactNativeHapticFeedback.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNReactNativeHapticFeedback.xcodeproj; path = "../node_modules/react-native-haptic-feedback/ios/RNReactNativeHapticFeedback.xcodeproj"; sourceTree = ""; }; + 0AE2A7819A5F44EA87540B0F /* libRCTGoogleAnalyticsBridge.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTGoogleAnalyticsBridge.a; sourceTree = ""; }; 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* BlueWallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BlueWallet.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -522,65 +527,61 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = BlueWallet/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = BlueWallet/main.m; sourceTree = ""; }; 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; - 1B3AD816E1A646799CA4E452 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; - 29112C2F0D8340B3A3196DED /* CoreData.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - 2ADB5553EACB44579700D6D4 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNDeviceInfo.a; sourceTree = ""; }; + 166E13BC37B249E392C6B2F9 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 16E6FB36AB7344F990105943 /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 18325ED98FD94340BB50926C /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; + 19F54CF3B7EA447486B1580C /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; + 2AA985ED11E446A4A8ADAAA5 /* RNRandomBytes.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNRandomBytes.xcodeproj; path = "../node_modules/react-native-randombytes/RNRandomBytes.xcodeproj"; sourceTree = ""; }; 2D02E47B1E0B4A5D006451C7 /* BlueWallet-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "BlueWallet-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 2D02E4901E0B4A5D006451C7 /* BlueWallet-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "BlueWallet-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2DD69D8473C341528160682A /* libsqlite3.0.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; }; - 3B2AB1C624E24C1BA95FBFED /* libBVLinearGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBVLinearGradient.a; sourceTree = ""; }; - 3F5B1CA51964493093282D8E /* libRNCamera.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCamera.a; sourceTree = ""; }; - 4B0661D5EE994C5887A656CC /* libRNRandomBytes-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNRandomBytes-tvOS.a"; sourceTree = ""; }; - 4C1AD00A4FDD42BEB62AFCF5 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; - 51A88773DE2A456AA13E1814 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; - 5863F2E7B71740E3940BABD9 /* BVLinearGradient.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = BVLinearGradient.xcodeproj; path = "../node_modules/react-native-linear-gradient/BVLinearGradient.xcodeproj"; sourceTree = ""; }; + 30B8249F5D4448859D5116E2 /* libRCTWKWebView.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTWKWebView.a; sourceTree = ""; }; + 3853DFD4C6D44BB8B17AEDF0 /* RNCamera.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RNCamera.xcodeproj"; sourceTree = ""; }; + 3C108365C46F43B981AA76A2 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; + 4A025859F71B464AA9100C41 /* RNSentry.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSentry.xcodeproj; path = "../node_modules/react-native-sentry/ios/RNSentry.xcodeproj"; sourceTree = ""; }; + 4A7CD30C32B7476AAFD7276B /* libRNRandomBytes.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRandomBytes.a; sourceTree = ""; }; + 4B0E4BE60376436EB155BEFB /* libBVLinearGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBVLinearGradient.a; sourceTree = ""; }; + 4E7DA1BD76504DF686A0EDFE /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; + 55B51FEAD82B40C5A9599130 /* libRNFS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFS.a; sourceTree = ""; }; 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; - 5ED20A6C018043AE8185DD19 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; - 6037CD1CCED34A7E980149E6 /* libRNSVG.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSVG.a; sourceTree = ""; }; - 642C144246BF4C3EB350442F /* RNCWebView.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCWebView.xcodeproj; path = "../node_modules/react-native-webview/ios/RNCWebView.xcodeproj"; sourceTree = ""; }; - 6553F26980BC47409FFB0F7C /* libRNSVG-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNSVG-tvOS.a"; sourceTree = ""; }; - 6CCDBD1516FF4AD492C1226C /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 5F3DCC24027F4B1EAACBAE3C /* RNCWebView.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCWebView.xcodeproj; path = "../node_modules/react-native-webview/ios/RNCWebView.xcodeproj"; sourceTree = ""; }; + 6A53833BB9EC4CCEABBA5978 /* RNSVG.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSVG.xcodeproj; path = "../node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = ""; }; + 6AF3CB5617DC43DC988162A6 /* libRNCamera.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCamera.a; sourceTree = ""; }; + 6C5AB6AEDF75403E99A6AA17 /* RCTGoogleAnalyticsBridge.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTGoogleAnalyticsBridge.xcodeproj; path = "../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/RCTGoogleAnalyticsBridge.xcodeproj"; sourceTree = ""; }; + 708F724FA552428BAEB980DB /* libRNDeviceInfo.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNDeviceInfo.a; sourceTree = ""; }; + 718E12C659254420BF9D3F35 /* libRNCWebView.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCWebView.a; sourceTree = ""; }; + 72F0D4F26EFC4864993EA274 /* libReactNativePermissions.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libReactNativePermissions.a; sourceTree = ""; }; + 756A0E83EE214C08AC02B267 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; - 7F7225A9F01C4785B27FF490 /* RNCamera.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RNCamera.xcodeproj"; sourceTree = ""; }; - 81EDDF247D484BC38EBCE565 /* libRNCWebView.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCWebView.a; sourceTree = ""; }; + 78DF4F1B869947EAA3239546 /* libRNRandomBytes-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNRandomBytes-tvOS.a"; sourceTree = ""; }; + 79AAC92A715841209904022D /* RCTWKWebView.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTWKWebView.xcodeproj; path = "../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView.xcodeproj"; sourceTree = ""; }; 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; - 87703C68A1014D0A8FDBAD00 /* RCTGoogleAnalyticsBridge.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTGoogleAnalyticsBridge.xcodeproj; path = "../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/RCTGoogleAnalyticsBridge.xcodeproj"; sourceTree = ""; }; - 8C242FC657494F7FB41321D9 /* libRNAmplitudeSDK.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNAmplitudeSDK.a; sourceTree = ""; }; - 8CF3D00F82534DE796D11610 /* libRCTGoogleAnalyticsBridge.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTGoogleAnalyticsBridge.a; sourceTree = ""; }; - 9079CACA902E4AAA91711414 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; - 907C87020BD04956A5253DEB /* libRNRandomBytes.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRandomBytes.a; sourceTree = ""; }; - 917199AF101244F5A9119C8C /* RNDeviceInfo.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNDeviceInfo.xcodeproj; path = "../node_modules/react-native-device-info/ios/RNDeviceInfo.xcodeproj"; sourceTree = ""; }; - 96C3F4E26841456EBF625D82 /* libRNDeviceInfo-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNDeviceInfo-tvOS.a"; sourceTree = ""; }; - 97EF095ACCA1462FA6012B97 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; }; - 9BD18677AAD543C79A7CB577 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; - 9FF3B2695A6A43B39CE4D2AF /* libReactNativePermissions.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libReactNativePermissions.a; sourceTree = ""; }; + 854C34D4A47D447999953B24 /* libRNRate.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRate.a; sourceTree = ""; }; + 85758216A4E74F649B4B1D83 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; + 8766FB3BE0C94260B1A99F94 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; + 88E7916103194ED38839F229 /* libRNSentry.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSentry.a; sourceTree = ""; }; + 97E59C536A894751BC70A472 /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = ""; }; + A30C5D61F27B4EB0A5FA1098 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; - B5A6242DF4B645AAB539D2E4 /* libRNSentry.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSentry.a; sourceTree = ""; }; - B5DED491BF6C49AE8AC4F530 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; - BD7B6C6FFF1E4646860703CA /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; - C0708F2D346B415C84383510 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; - C0B6F9440F69425886845061 /* RNFS.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFS.xcodeproj; path = "../node_modules/react-native-fs/RNFS.xcodeproj"; sourceTree = ""; }; - C2433A8567374E78ACA76F08 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - C88A48E1C11140418478EC7F /* RNSVG.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSVG.xcodeproj; path = "../node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = ""; }; - C979953B425248FEA80F4F78 /* libRNReactNativeHapticFeedback.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNReactNativeHapticFeedback.a; sourceTree = ""; }; - CA35307CBA624D81A15815D2 /* RNReactNativeHapticFeedback.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNReactNativeHapticFeedback.xcodeproj; path = "../node_modules/react-native-haptic-feedback/ios/RNReactNativeHapticFeedback.xcodeproj"; sourceTree = ""; }; - CC4FCEA18F7E4033B6EF3D70 /* libRNVectorIcons-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNVectorIcons-tvOS.a"; sourceTree = ""; }; - CF14D1AA406D4EDC85D3A61F /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; - CF6354B616F54426BCA4AF79 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; - D124361914C041219D903C3D /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; - D6051C6440444360BD29AFE4 /* RNRate.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNRate.xcodeproj; path = "../node_modules/react-native-rate/ios/RNRate.xcodeproj"; sourceTree = ""; }; - D914576230A34EF598917FA9 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; - DAC908621D184867839621FE /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = ""; }; - DB512F57589B4F8A89CBE2AB /* RNRandomBytes.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNRandomBytes.xcodeproj; path = "../node_modules/react-native-randombytes/RNRandomBytes.xcodeproj"; sourceTree = ""; }; - DDABC336B13E47398005736D /* RNSentry.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSentry.xcodeproj; path = "../node_modules/react-native-sentry/ios/RNSentry.xcodeproj"; sourceTree = ""; }; - ED0418953CCE4F4FA0E0E60F /* libRNRate.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRate.a; sourceTree = ""; }; - F01CC934C46A40A19F1F8861 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; - F13B02B9DD2A4068B8201EAB /* libRCTCamera.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTCamera.a; sourceTree = ""; }; - F84697F33A394B419D56ED30 /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; - F9F01E9C22C243A9AB48A90A /* libRNFS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFS.a; sourceTree = ""; }; - F9FC88F4A85F40E9ABACACB9 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; - FDDDD64DF1014CDE82A5D7D9 /* ReactNativePermissions.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = ReactNativePermissions.xcodeproj; path = "../node_modules/react-native-permissions/ios/ReactNativePermissions.xcodeproj"; sourceTree = ""; }; + BC0445653C29416DBF1BC823 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; }; + BC4E5B046FEB46BDB96ED877 /* BVLinearGradient.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = BVLinearGradient.xcodeproj; path = "../node_modules/react-native-linear-gradient/BVLinearGradient.xcodeproj"; sourceTree = ""; }; + BD9F9D46DD7F4D56AC6BB596 /* libRNGestureHandler.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNGestureHandler.a; sourceTree = ""; }; + C0166BDF81FA4A2F81702194 /* libRNSVG.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSVG.a; sourceTree = ""; }; + C43A4D44551E47BCA6853B4D /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; + C817BBCA1879484C90C8FDA4 /* RNRate.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNRate.xcodeproj; path = "../node_modules/react-native-rate/ios/RNRate.xcodeproj"; sourceTree = ""; }; + CC1C418B6E464077A8CB0103 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; + CDBF3F7F227D42128D305BA0 /* RNFS.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFS.xcodeproj; path = "../node_modules/react-native-fs/RNFS.xcodeproj"; sourceTree = ""; }; + CEC5BDCD7ADA4318B8ED1D00 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; + D52BC1ADE4C742FEBAB59A5A /* CoreData.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + D9C0D580C6B043AFBDD35884 /* libRNDeviceInfo-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNDeviceInfo-tvOS.a"; sourceTree = ""; }; + DFE9C685977A46399D13B25C /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; + E35B9F897A0C4DF6A88E08ED /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; + E4CFF6A80CB041188BFBE671 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; + EA20083B9DCA4F2D80ED8730 /* libRNVectorIcons-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNVectorIcons-tvOS.a"; sourceTree = ""; }; + EAB6EE282B654B6594C228BB /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; + EE42F14225744494A308B85E /* libRNSVG-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNSVG-tvOS.a"; sourceTree = ""; }; + F502E57F4DA54127A84DDAC1 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; + F7152926CD0F4C90BE0A6980 /* ReactNativePermissions.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = ReactNativePermissions.xcodeproj; path = "../node_modules/react-native-permissions/ios/ReactNativePermissions.xcodeproj"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -597,9 +598,8 @@ buildActionMask = 2147483647; files = ( ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, - 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, + 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */, 146834051AC3E58100842450 /* libReact.a in Frameworks */, - 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, @@ -609,24 +609,24 @@ 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, - 9F810B06D93D45B983F70B74 /* libRNSentry.a in Frameworks */, - EDC6FF8621D64E31924EDC57 /* libz.tbd in Frameworks */, - 22F536E307DB4FBCB00DC76B /* libRNDeviceInfo.a in Frameworks */, - 2DA69FD4D6264094A3ABE0F4 /* libRCTGoogleAnalyticsBridge.a in Frameworks */, - 0E9157D251334CFC800750D9 /* CoreData.framework in Frameworks */, - EA537EBFD04A4EEBA3D7166F /* SystemConfiguration.framework in Frameworks */, - E276BE46B82249E1B88A99C8 /* libsqlite3.0.tbd in Frameworks */, - 050943495F6A45DF961C7596 /* libRNReactNativeHapticFeedback.a in Frameworks */, - 1EF9306F31DC4D469F615F52 /* libReactNativePermissions.a in Frameworks */, - C031BDE1E9544216A73A4321 /* libRNSVG.a in Frameworks */, - CB65331B95F8467390AC8BF0 /* libRNVectorIcons.a in Frameworks */, - F0182C8D1F194D66AA25FCFC /* libBVLinearGradient.a in Frameworks */, - F97F051969164CCBA5336FC2 /* libRNRandomBytes.a in Frameworks */, - 6FEBC8E7AA7D4744A2EEE87B /* libRNGestureHandler.a in Frameworks */, - F439E4EEAE42446B8AE33E3F /* libRNCamera.a in Frameworks */, - F6AA297664414342AC23B529 /* libRNFS.a in Frameworks */, - A2C00245B747440ABEB7D316 /* libRNCWebView.a in Frameworks */, - 228DCD6BAF1B4DF181C5A307 /* libRNRate.a in Frameworks */, + 873665C61F2F4689BF376440 /* libRNCamera.a in Frameworks */, + FA33D783D8B54DFC9BDDE59E /* libRNDeviceInfo.a in Frameworks */, + 9CAE85C66891408D8F954796 /* libRNFS.a in Frameworks */, + D6EE754729E340309EE93251 /* libRNGestureHandler.a in Frameworks */, + 05182DA8005A401C8C0E6ABF /* libRCTGoogleAnalyticsBridge.a in Frameworks */, + B49A054BB8E743D59474EA95 /* CoreData.framework in Frameworks */, + 9818EEC1EFCF4CF9B94D7B00 /* SystemConfiguration.framework in Frameworks */, + 055ADE6CC61141EDBA8FAEAA /* libz.tbd in Frameworks */, + 5DAA10F29B7A408592E8C43F /* libsqlite3.0.tbd in Frameworks */, + 078BF061C6364525ADBC9801 /* libRNReactNativeHapticFeedback.a in Frameworks */, + 5586C1585BA44EA6B545574A /* libBVLinearGradient.a in Frameworks */, + B483C32E8B92447B9922637A /* libReactNativePermissions.a in Frameworks */, + 113F7AF7C7AF4E348B931A76 /* libRNRandomBytes.a in Frameworks */, + CD0F1C511C6E4687B751EA9F /* libRNRate.a in Frameworks */, + 0FEEFBB461614579BBB4436E /* libRNSentry.a in Frameworks */, + AE5BE0616EF644D2A8583E16 /* libRNSVG.a in Frameworks */, + F26E5C3CC3CC4D4CA34E6B29 /* libRNVectorIcons.a in Frameworks */, + A38676B5C8FF402E96FE0D8B /* libRCTWKWebView.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -642,10 +642,11 @@ 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, - A89DFA8A97B642D0AFD63AA2 /* libRNDeviceInfo-tvOS.a in Frameworks */, - 79A0163DC7B34D1D8E4B6944 /* libRNSVG-tvOS.a in Frameworks */, - 96CC4BF79B174A478DF9C378 /* libRNVectorIcons-tvOS.a in Frameworks */, - 3ED26B1105834E44AECC99CE /* libRNRandomBytes-tvOS.a in Frameworks */, + 66CF1719F73A4067A3C4EE18 /* libRNDeviceInfo-tvOS.a in Frameworks */, + 4C6BE27DFEAA4A408DB03E56 /* libRNRandomBytes-tvOS.a in Frameworks */, + B20D291028BA4442B963F109 /* libRNSentry-tvOS.a in Frameworks */, + 227E73C8585D407B918853C1 /* libRNSVG-tvOS.a in Frameworks */, + 5C0748AF12B5475183E670DA /* libRNVectorIcons-tvOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -780,10 +781,10 @@ isa = PBXGroup; children = ( 2D16E6891FA4F8E400B85C8A /* libReact.a */, - C2433A8567374E78ACA76F08 /* libz.tbd */, - 29112C2F0D8340B3A3196DED /* CoreData.framework */, - 6CCDBD1516FF4AD492C1226C /* SystemConfiguration.framework */, - 2DD69D8473C341528160682A /* libsqlite3.0.tbd */, + D52BC1ADE4C742FEBAB59A5A /* CoreData.framework */, + 16E6FB36AB7344F990105943 /* SystemConfiguration.framework */, + 166E13BC37B249E392C6B2F9 /* libz.tbd */, + BC0445653C29416DBF1BC823 /* libsqlite3.0.tbd */, ); name = Frameworks; sourceTree = ""; @@ -797,28 +798,6 @@ name = Products; sourceTree = ""; }; - 5EFA168FDA4541DA9896D9C8 /* Resources */ = { - isa = PBXGroup; - children = ( - 97EF095ACCA1462FA6012B97 /* AntDesign.ttf */, - B5DED491BF6C49AE8AC4F530 /* Entypo.ttf */, - 5ED20A6C018043AE8185DD19 /* EvilIcons.ttf */, - 51A88773DE2A456AA13E1814 /* Feather.ttf */, - 9BD18677AAD543C79A7CB577 /* FontAwesome.ttf */, - 4C1AD00A4FDD42BEB62AFCF5 /* FontAwesome5_Brands.ttf */, - 9079CACA902E4AAA91711414 /* FontAwesome5_Regular.ttf */, - C0708F2D346B415C84383510 /* FontAwesome5_Solid.ttf */, - BD7B6C6FFF1E4646860703CA /* Foundation.ttf */, - 1B3AD816E1A646799CA4E452 /* Ionicons.ttf */, - F01CC934C46A40A19F1F8861 /* MaterialCommunityIcons.ttf */, - CF6354B616F54426BCA4AF79 /* MaterialIcons.ttf */, - F9FC88F4A85F40E9ABACACB9 /* Octicons.ttf */, - D124361914C041219D903C3D /* SimpleLineIcons.ttf */, - D914576230A34EF598917FA9 /* Zocial.ttf */, - ); - name = Resources; - sourceTree = ""; - }; 78C398B11ACF4ADC00677621 /* Products */ = { isa = PBXGroup; children = ( @@ -843,20 +822,21 @@ 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, - DDABC336B13E47398005736D /* RNSentry.xcodeproj */, - 917199AF101244F5A9119C8C /* RNDeviceInfo.xcodeproj */, - 87703C68A1014D0A8FDBAD00 /* RCTGoogleAnalyticsBridge.xcodeproj */, - CA35307CBA624D81A15815D2 /* RNReactNativeHapticFeedback.xcodeproj */, - FDDDD64DF1014CDE82A5D7D9 /* ReactNativePermissions.xcodeproj */, - C88A48E1C11140418478EC7F /* RNSVG.xcodeproj */, - CF14D1AA406D4EDC85D3A61F /* RNVectorIcons.xcodeproj */, - 5863F2E7B71740E3940BABD9 /* BVLinearGradient.xcodeproj */, - DB512F57589B4F8A89CBE2AB /* RNRandomBytes.xcodeproj */, - DAC908621D184867839621FE /* RNGestureHandler.xcodeproj */, - 7F7225A9F01C4785B27FF490 /* RNCamera.xcodeproj */, - C0B6F9440F69425886845061 /* RNFS.xcodeproj */, - 642C144246BF4C3EB350442F /* RNCWebView.xcodeproj */, - D6051C6440444360BD29AFE4 /* RNRate.xcodeproj */, + 3853DFD4C6D44BB8B17AEDF0 /* RNCamera.xcodeproj */, + 03D541ACCDD2451D9971158E /* RNDeviceInfo.xcodeproj */, + CDBF3F7F227D42128D305BA0 /* RNFS.xcodeproj */, + 97E59C536A894751BC70A472 /* RNGestureHandler.xcodeproj */, + 6C5AB6AEDF75403E99A6AA17 /* RCTGoogleAnalyticsBridge.xcodeproj */, + 0AD3549D2DDE42C694D6338C /* RNReactNativeHapticFeedback.xcodeproj */, + BC4E5B046FEB46BDB96ED877 /* BVLinearGradient.xcodeproj */, + F7152926CD0F4C90BE0A6980 /* ReactNativePermissions.xcodeproj */, + 2AA985ED11E446A4A8ADAAA5 /* RNRandomBytes.xcodeproj */, + C817BBCA1879484C90C8FDA4 /* RNRate.xcodeproj */, + 4A025859F71B464AA9100C41 /* RNSentry.xcodeproj */, + 6A53833BB9EC4CCEABBA5978 /* RNSVG.xcodeproj */, + 4E7DA1BD76504DF686A0EDFE /* RNVectorIcons.xcodeproj */, + 79AAC92A715841209904022D /* RCTWKWebView.xcodeproj */, + 5F3DCC24027F4B1EAACBAE3C /* RNCWebView.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -878,8 +858,8 @@ 00E356EF1AD99517003FC87E /* BlueWalletTests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, - B48F20B6219E8A0300BA10A8 /* Recovered References */, - 5EFA168FDA4541DA9896D9C8 /* Resources */, + B4C5B8B621F2DF2F00A845C4 /* Recovered References */, + FC7D399B1A1043C49023DC79 /* Resources */, ); indentWidth = 2; sourceTree = ""; @@ -906,153 +886,174 @@ name = Products; sourceTree = ""; }; - B48F20B6219E8A0300BA10A8 /* Recovered References */ = { + B4C5B8B621F2DF2F00A845C4 /* Recovered References */ = { isa = PBXGroup; children = ( - B5A6242DF4B645AAB539D2E4 /* libRNSentry.a */, - 8C242FC657494F7FB41321D9 /* libRNAmplitudeSDK.a */, - F13B02B9DD2A4068B8201EAB /* libRCTCamera.a */, - 2ADB5553EACB44579700D6D4 /* libRNDeviceInfo.a */, - C979953B425248FEA80F4F78 /* libRNReactNativeHapticFeedback.a */, - 9FF3B2695A6A43B39CE4D2AF /* libReactNativePermissions.a */, - 0A6C0341E36446BE93133B26 /* libRNSensors.a */, - 6037CD1CCED34A7E980149E6 /* libRNSVG.a */, - F84697F33A394B419D56ED30 /* libRNVectorIcons.a */, - 96C3F4E26841456EBF625D82 /* libRNDeviceInfo-tvOS.a */, - 6553F26980BC47409FFB0F7C /* libRNSVG-tvOS.a */, - CC4FCEA18F7E4033B6EF3D70 /* libRNVectorIcons-tvOS.a */, - 3B2AB1C624E24C1BA95FBFED /* libBVLinearGradient.a */, - 907C87020BD04956A5253DEB /* libRNRandomBytes.a */, - 4B0661D5EE994C5887A656CC /* libRNRandomBytes-tvOS.a */, - 01B7B7DF17B84765BE45F7F1 /* libRNGestureHandler.a */, - 3F5B1CA51964493093282D8E /* libRNCamera.a */, - F9F01E9C22C243A9AB48A90A /* libRNFS.a */, - 8CF3D00F82534DE796D11610 /* libRCTGoogleAnalyticsBridge.a */, - ED0418953CCE4F4FA0E0E60F /* libRNRate.a */, - 81EDDF247D484BC38EBCE565 /* libRNCWebView.a */, + 6AF3CB5617DC43DC988162A6 /* libRNCamera.a */, + 708F724FA552428BAEB980DB /* libRNDeviceInfo.a */, + 55B51FEAD82B40C5A9599130 /* libRNFS.a */, + BD9F9D46DD7F4D56AC6BB596 /* libRNGestureHandler.a */, + 0AE2A7819A5F44EA87540B0F /* libRCTGoogleAnalyticsBridge.a */, + 06537407AE1149A291D947A6 /* libRNReactNativeHapticFeedback.a */, + 4B0E4BE60376436EB155BEFB /* libBVLinearGradient.a */, + 72F0D4F26EFC4864993EA274 /* libReactNativePermissions.a */, + 4A7CD30C32B7476AAFD7276B /* libRNRandomBytes.a */, + 854C34D4A47D447999953B24 /* libRNRate.a */, + 88E7916103194ED38839F229 /* libRNSentry.a */, + D9C0D580C6B043AFBDD35884 /* libRNDeviceInfo-tvOS.a */, + 78DF4F1B869947EAA3239546 /* libRNRandomBytes-tvOS.a */, + 0338C70E30CD4BF394871601 /* libRNSentry-tvOS.a */, + C0166BDF81FA4A2F81702194 /* libRNSVG.a */, + EE42F14225744494A308B85E /* libRNSVG-tvOS.a */, + 718E12C659254420BF9D3F35 /* libRNCWebView.a */, + 18325ED98FD94340BB50926C /* libRNVectorIcons.a */, + EA20083B9DCA4F2D80ED8730 /* libRNVectorIcons-tvOS.a */, + 30B8249F5D4448859D5116E2 /* libRCTWKWebView.a */, ); name = "Recovered References"; sourceTree = ""; }; - B48F20DD219E8A0700BA10A8 /* Products */ = { + B4C5B8DD21F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F20F6219E8A0800BA10A8 /* libRCTGoogleAnalyticsBridge.a */, + B4C5B91421F2DF3000A845C4 /* libRNRandomBytes.a */, + B4C5B91621F2DF3000A845C4 /* libRNRandomBytes-tvOS.a */, ); name = Products; sourceTree = ""; }; - B48F20DF219E8A0700BA10A8 /* Products */ = { + B4C5B8DF21F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F20F9219E8A0800BA10A8 /* libReactNativePermissions.a */, + B4C5B92021F2DF3000A845C4 /* libRNSentry.a */, + B4C5B92221F2DF3000A845C4 /* libRNSentry-tvOS.a */, ); name = Products; sourceTree = ""; }; - B48F20E3219E8A0700BA10A8 /* Products */ = { + B4C5B8E121F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F2105219E8A0800BA10A8 /* libRNReactNativeHapticFeedback.a */, + B4C5B90121F2DF3000A845C4 /* libRNCamera.a */, ); name = Products; sourceTree = ""; }; - B48F20E5219E8A0700BA10A8 /* Products */ = { + B4C5B8E321F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F210B219E8A0800BA10A8 /* libRNSentry.a */, - B4F7F0AC21E9991000AFD87C /* libRNSentry-tvOS.a */, + B4C5B91C21F2DF3000A845C4 /* libRNReactNativeHapticFeedback.a */, ); name = Products; sourceTree = ""; }; - B48F20E7219E8A0800BA10A8 /* Products */ = { + B4C5B8E521F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F2115219E8A0800BA10A8 /* libRNVectorIcons.a */, - B48F2117219E8A0800BA10A8 /* libRNVectorIcons-tvOS.a */, + B4C5B90521F2DF3000A845C4 /* libRNDeviceInfo.a */, + B4C5B90721F2DF3000A845C4 /* libRNDeviceInfo-tvOS.a */, ); name = Products; sourceTree = ""; }; - B48F20ED219E8A0800BA10A8 /* Products */ = { + B4C5B8E721F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F2100219E8A0800BA10A8 /* libRNDeviceInfo.a */, - B48F2102219E8A0800BA10A8 /* libRNDeviceInfo-tvOS.a */, + B4C5B90B21F2DF3000A845C4 /* libRNFS.a */, + B4C5B90D21F2DF3000A845C4 /* libRNFS.a */, ); name = Products; sourceTree = ""; }; - B48F20EF219E8A0800BA10A8 /* Products */ = { + B4C5B8E921F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F210F219E8A0800BA10A8 /* libRNSVG.a */, - B48F2111219E8A0800BA10A8 /* libRNSVG-tvOS.a */, + B4C5B91021F2DF3000A845C4 /* libRNGestureHandler.a */, ); name = Products; sourceTree = ""; }; - B48F215D219E918C00BA10A8 /* Products */ = { + B4C5B8EB21F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F2162219E918C00BA10A8 /* libBVLinearGradient.a */, - B48F2164219E918C00BA10A8 /* libBVLinearGradient.a */, + B4C5B8FB21F2DF3000A845C4 /* libRCTGoogleAnalyticsBridge.a */, ); name = Products; sourceTree = ""; }; - B48F21E1219FC5E700BA10A8 /* Products */ = { + B4C5B8ED21F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B48F21E6219FC5E700BA10A8 /* libRNRandomBytes.a */, - B48F21E8219FC5E700BA10A8 /* libRNRandomBytes-tvOS.a */, + B4C5B8F621F2DF3000A845C4 /* libBVLinearGradient.a */, + B4C5B8F821F2DF3000A845C4 /* libBVLinearGradient.a */, ); name = Products; sourceTree = ""; }; - B4CE841F21B4C0DD00E2E2A3 /* Products */ = { + B4C5B8EF21F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B4CE842421B4C0DD00E2E2A3 /* libRNFS.a */, - B4CE842621B4C0DD00E2E2A3 /* libRNFS.a */, + B4C5B8FE21F2DF3000A845C4 /* libReactNativePermissions.a */, ); name = Products; sourceTree = ""; }; - B4F3B46A21A7D63400548A69 /* Products */ = { + B4C5B8F121F2DF3000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B4F3B46E21A7D63400548A69 /* libRNGestureHandler.a */, + B4C5B91921F2DF3000A845C4 /* libRNRate.a */, ); name = Products; sourceTree = ""; }; - B4F3B4F121A906D000548A69 /* Products */ = { + B4C5B97021F2E23E00A845C4 /* Products */ = { isa = PBXGroup; children = ( - B4F3B4F521A906D000548A69 /* libRNCamera.a */, + B4C5B97521F2E23E00A845C4 /* libRNSVG.a */, + B4C5B97721F2E23E00A845C4 /* libRNSVG-tvOS.a */, ); name = Products; sourceTree = ""; }; - B4F7F05621E8449B00AFD87C /* Products */ = { + B4C5BA1F21F2E29000A845C4 /* Products */ = { isa = PBXGroup; children = ( - B4F7F05A21E8449B00AFD87C /* libRNRate.a */, + B4C5BA2421F2E29000A845C4 /* libRNVectorIcons.a */, + B4C5BA2621F2E29000A845C4 /* libRNVectorIcons-tvOS.a */, ); name = Products; sourceTree = ""; }; - B4F7F0B121E99B5B00AFD87C /* Products */ = { + B4C5BAB221F3708C00A845C4 /* Products */ = { isa = PBXGroup; children = ( - B4F7F0B521E99B5B00AFD87C /* libRNCWebView.a */, + B4C5BAB621F3708C00A845C4 /* libRCTWKWebView.a */, ); name = Products; sourceTree = ""; }; + FC7D399B1A1043C49023DC79 /* Resources */ = { + isa = PBXGroup; + children = ( + 050A5C238226461DB5C131FD /* AntDesign.ttf */, + E4CFF6A80CB041188BFBE671 /* Entypo.ttf */, + DFE9C685977A46399D13B25C /* EvilIcons.ttf */, + A30C5D61F27B4EB0A5FA1098 /* Feather.ttf */, + E35B9F897A0C4DF6A88E08ED /* FontAwesome.ttf */, + 8766FB3BE0C94260B1A99F94 /* FontAwesome5_Brands.ttf */, + 3C108365C46F43B981AA76A2 /* FontAwesome5_Regular.ttf */, + 85758216A4E74F649B4B1D83 /* FontAwesome5_Solid.ttf */, + CEC5BDCD7ADA4318B8ED1D00 /* Foundation.ttf */, + EAB6EE282B654B6594C228BB /* Ionicons.ttf */, + CC1C418B6E464077A8CB0103 /* MaterialCommunityIcons.ttf */, + 756A0E83EE214C08AC02B267 /* MaterialIcons.ttf */, + C43A4D44551E47BCA6853B4D /* Octicons.ttf */, + F502E57F4DA54127A84DDAC1 /* SimpleLineIcons.ttf */, + 19F54CF3B7EA447486B1580C /* Zocial.ttf */, + ); + name = Resources; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1082,7 +1083,7 @@ 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 97FBF98104AA4C6EBADC06F0 /* Upload Debug Symbols to Sentry */, + B9B0C844E4364469A20FB477 /* Upload Debug Symbols to Sentry */, ); buildRules = ( ); @@ -1135,12 +1136,11 @@ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 610; + LastUpgradeCheck = 940; ORGANIZATIONNAME = Facebook; TargetAttributes = { 00E356ED1AD99517003FC87E = { CreatedOnToolsVersion = 6.2; - DevelopmentTeam = A7W54YZ4WU; TestTargetID = 13B07F861A680F5B00A75B9A; }; 13B07F861A680F5B00A75B9A = { @@ -1170,8 +1170,8 @@ projectDirPath = ""; projectReferences = ( { - ProductGroup = B48F215D219E918C00BA10A8 /* Products */; - ProjectRef = 5863F2E7B71740E3940BABD9 /* BVLinearGradient.xcodeproj */; + ProductGroup = B4C5B8ED21F2DF3000A845C4 /* Products */; + ProjectRef = BC4E5B046FEB46BDB96ED877 /* BVLinearGradient.xcodeproj */; }, { ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; @@ -1190,8 +1190,8 @@ ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; }, { - ProductGroup = B48F20DD219E8A0700BA10A8 /* Products */; - ProjectRef = 87703C68A1014D0A8FDBAD00 /* RCTGoogleAnalyticsBridge.xcodeproj */; + ProductGroup = B4C5B8EB21F2DF3000A845C4 /* Products */; + ProjectRef = 6C5AB6AEDF75403E99A6AA17 /* RCTGoogleAnalyticsBridge.xcodeproj */; }, { ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; @@ -1221,57 +1221,57 @@ ProductGroup = 139FDEE71B06529A00C62182 /* Products */; ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; }, + { + ProductGroup = B4C5BAB221F3708C00A845C4 /* Products */; + ProjectRef = 79AAC92A715841209904022D /* RCTWKWebView.xcodeproj */; + }, { ProductGroup = 146834001AC3E56700842450 /* Products */; ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; }, { - ProductGroup = B48F20DF219E8A0700BA10A8 /* Products */; - ProjectRef = FDDDD64DF1014CDE82A5D7D9 /* ReactNativePermissions.xcodeproj */; + ProductGroup = B4C5B8EF21F2DF3000A845C4 /* Products */; + ProjectRef = F7152926CD0F4C90BE0A6980 /* ReactNativePermissions.xcodeproj */; }, { - ProductGroup = B4F3B4F121A906D000548A69 /* Products */; - ProjectRef = 7F7225A9F01C4785B27FF490 /* RNCamera.xcodeproj */; + ProductGroup = B4C5B8E121F2DF3000A845C4 /* Products */; + ProjectRef = 3853DFD4C6D44BB8B17AEDF0 /* RNCamera.xcodeproj */; }, { - ProductGroup = B4F7F0B121E99B5B00AFD87C /* Products */; - ProjectRef = 642C144246BF4C3EB350442F /* RNCWebView.xcodeproj */; + ProductGroup = B4C5B8E521F2DF3000A845C4 /* Products */; + ProjectRef = 03D541ACCDD2451D9971158E /* RNDeviceInfo.xcodeproj */; }, { - ProductGroup = B48F20ED219E8A0800BA10A8 /* Products */; - ProjectRef = 917199AF101244F5A9119C8C /* RNDeviceInfo.xcodeproj */; + ProductGroup = B4C5B8E721F2DF3000A845C4 /* Products */; + ProjectRef = CDBF3F7F227D42128D305BA0 /* RNFS.xcodeproj */; }, { - ProductGroup = B4CE841F21B4C0DD00E2E2A3 /* Products */; - ProjectRef = C0B6F9440F69425886845061 /* RNFS.xcodeproj */; + ProductGroup = B4C5B8E921F2DF3000A845C4 /* Products */; + ProjectRef = 97E59C536A894751BC70A472 /* RNGestureHandler.xcodeproj */; }, { - ProductGroup = B4F3B46A21A7D63400548A69 /* Products */; - ProjectRef = DAC908621D184867839621FE /* RNGestureHandler.xcodeproj */; + ProductGroup = B4C5B8DD21F2DF3000A845C4 /* Products */; + ProjectRef = 2AA985ED11E446A4A8ADAAA5 /* RNRandomBytes.xcodeproj */; }, { - ProductGroup = B48F21E1219FC5E700BA10A8 /* Products */; - ProjectRef = DB512F57589B4F8A89CBE2AB /* RNRandomBytes.xcodeproj */; + ProductGroup = B4C5B8F121F2DF3000A845C4 /* Products */; + ProjectRef = C817BBCA1879484C90C8FDA4 /* RNRate.xcodeproj */; }, { - ProductGroup = B4F7F05621E8449B00AFD87C /* Products */; - ProjectRef = D6051C6440444360BD29AFE4 /* RNRate.xcodeproj */; + ProductGroup = B4C5B8E321F2DF3000A845C4 /* Products */; + ProjectRef = 0AD3549D2DDE42C694D6338C /* RNReactNativeHapticFeedback.xcodeproj */; }, { - ProductGroup = B48F20E3219E8A0700BA10A8 /* Products */; - ProjectRef = CA35307CBA624D81A15815D2 /* RNReactNativeHapticFeedback.xcodeproj */; + ProductGroup = B4C5B8DF21F2DF3000A845C4 /* Products */; + ProjectRef = 4A025859F71B464AA9100C41 /* RNSentry.xcodeproj */; }, { - ProductGroup = B48F20E5219E8A0700BA10A8 /* Products */; - ProjectRef = DDABC336B13E47398005736D /* RNSentry.xcodeproj */; + ProductGroup = B4C5B97021F2E23E00A845C4 /* Products */; + ProjectRef = 6A53833BB9EC4CCEABBA5978 /* RNSVG.xcodeproj */; }, { - ProductGroup = B48F20EF219E8A0800BA10A8 /* Products */; - ProjectRef = C88A48E1C11140418478EC7F /* RNSVG.xcodeproj */; - }, - { - ProductGroup = B48F20E7219E8A0800BA10A8 /* Products */; - ProjectRef = CF14D1AA406D4EDC85D3A61F /* RNVectorIcons.xcodeproj */; + ProductGroup = B4C5BA1F21F2E29000A845C4 /* Products */; + ProjectRef = 4E7DA1BD76504DF686A0EDFE /* RNVectorIcons.xcodeproj */; }, ); projectRoot = ""; @@ -1544,151 +1544,151 @@ remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - B48F20F6219E8A0800BA10A8 /* libRCTGoogleAnalyticsBridge.a */ = { + B4C5B8F621F2DF3000A845C4 /* libBVLinearGradient.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libBVLinearGradient.a; + remoteRef = B4C5B8F521F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B8F821F2DF3000A845C4 /* libBVLinearGradient.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libBVLinearGradient.a; + remoteRef = B4C5B8F721F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B8FB21F2DF3000A845C4 /* libRCTGoogleAnalyticsBridge.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; path = libRCTGoogleAnalyticsBridge.a; - remoteRef = B48F20F5219E8A0800BA10A8 /* PBXContainerItemProxy */; + remoteRef = B4C5B8FA21F2DF3000A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - B48F20F9219E8A0800BA10A8 /* libReactNativePermissions.a */ = { + B4C5B8FE21F2DF3000A845C4 /* libReactNativePermissions.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; path = libReactNativePermissions.a; - remoteRef = B48F20F8219E8A0800BA10A8 /* PBXContainerItemProxy */; + remoteRef = B4C5B8FD21F2DF3000A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - B48F2100219E8A0800BA10A8 /* libRNDeviceInfo.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNDeviceInfo.a; - remoteRef = B48F20FF219E8A0800BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F2102219E8A0800BA10A8 /* libRNDeviceInfo-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRNDeviceInfo-tvOS.a"; - remoteRef = B48F2101219E8A0800BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F2105219E8A0800BA10A8 /* libRNReactNativeHapticFeedback.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNReactNativeHapticFeedback.a; - remoteRef = B48F2104219E8A0800BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F210B219E8A0800BA10A8 /* libRNSentry.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNSentry.a; - remoteRef = B48F210A219E8A0800BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F210F219E8A0800BA10A8 /* libRNSVG.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNSVG.a; - remoteRef = B48F210E219E8A0800BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F2111219E8A0800BA10A8 /* libRNSVG-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRNSVG-tvOS.a"; - remoteRef = B48F2110219E8A0800BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F2115219E8A0800BA10A8 /* libRNVectorIcons.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNVectorIcons.a; - remoteRef = B48F2114219E8A0800BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F2117219E8A0800BA10A8 /* libRNVectorIcons-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRNVectorIcons-tvOS.a"; - remoteRef = B48F2116219E8A0800BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F2162219E918C00BA10A8 /* libBVLinearGradient.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libBVLinearGradient.a; - remoteRef = B48F2161219E918C00BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F2164219E918C00BA10A8 /* libBVLinearGradient.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libBVLinearGradient.a; - remoteRef = B48F2163219E918C00BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F21E6219FC5E700BA10A8 /* libRNRandomBytes.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNRandomBytes.a; - remoteRef = B48F21E5219FC5E700BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B48F21E8219FC5E700BA10A8 /* libRNRandomBytes-tvOS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRNRandomBytes-tvOS.a"; - remoteRef = B48F21E7219FC5E700BA10A8 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B4CE842421B4C0DD00E2E2A3 /* libRNFS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNFS.a; - remoteRef = B4CE842321B4C0DD00E2E2A3 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B4CE842621B4C0DD00E2E2A3 /* libRNFS.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNFS.a; - remoteRef = B4CE842521B4C0DD00E2E2A3 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B4F3B46E21A7D63400548A69 /* libRNGestureHandler.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNGestureHandler.a; - remoteRef = B4F3B46D21A7D63400548A69 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - B4F3B4F521A906D000548A69 /* libRNCamera.a */ = { + B4C5B90121F2DF3000A845C4 /* libRNCamera.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; path = libRNCamera.a; - remoteRef = B4F3B4F421A906D000548A69 /* PBXContainerItemProxy */; + remoteRef = B4C5B90021F2DF3000A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - B4F7F05A21E8449B00AFD87C /* libRNRate.a */ = { + B4C5B90521F2DF3000A845C4 /* libRNDeviceInfo.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNDeviceInfo.a; + remoteRef = B4C5B90421F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B90721F2DF3000A845C4 /* libRNDeviceInfo-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNDeviceInfo-tvOS.a"; + remoteRef = B4C5B90621F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B90B21F2DF3000A845C4 /* libRNFS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNFS.a; + remoteRef = B4C5B90A21F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B90D21F2DF3000A845C4 /* libRNFS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNFS.a; + remoteRef = B4C5B90C21F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B91021F2DF3000A845C4 /* libRNGestureHandler.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNGestureHandler.a; + remoteRef = B4C5B90F21F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B91421F2DF3000A845C4 /* libRNRandomBytes.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNRandomBytes.a; + remoteRef = B4C5B91321F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B91621F2DF3000A845C4 /* libRNRandomBytes-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNRandomBytes-tvOS.a"; + remoteRef = B4C5B91521F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B91921F2DF3000A845C4 /* libRNRate.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; path = libRNRate.a; - remoteRef = B4F7F05921E8449B00AFD87C /* PBXContainerItemProxy */; + remoteRef = B4C5B91821F2DF3000A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - B4F7F0AC21E9991000AFD87C /* libRNSentry-tvOS.a */ = { + B4C5B91C21F2DF3000A845C4 /* libRNReactNativeHapticFeedback.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNReactNativeHapticFeedback.a; + remoteRef = B4C5B91B21F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B92021F2DF3000A845C4 /* libRNSentry.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNSentry.a; + remoteRef = B4C5B91F21F2DF3000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B92221F2DF3000A845C4 /* libRNSentry-tvOS.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; path = "libRNSentry-tvOS.a"; - remoteRef = B4F7F0AB21E9991000AFD87C /* PBXContainerItemProxy */; + remoteRef = B4C5B92121F2DF3000A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - B4F7F0B521E99B5B00AFD87C /* libRNCWebView.a */ = { + B4C5B97521F2E23E00A845C4 /* libRNSVG.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; - path = libRNCWebView.a; - remoteRef = B4F7F0B421E99B5B00AFD87C /* PBXContainerItemProxy */; + path = libRNSVG.a; + remoteRef = B4C5B97421F2E23E00A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5B97721F2E23E00A845C4 /* libRNSVG-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNSVG-tvOS.a"; + remoteRef = B4C5B97621F2E23E00A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5BA2421F2E29000A845C4 /* libRNVectorIcons.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNVectorIcons.a; + remoteRef = B4C5BA2321F2E29000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5BA2621F2E29000A845C4 /* libRNVectorIcons-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNVectorIcons-tvOS.a"; + remoteRef = B4C5BA2521F2E29000A845C4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B4C5BAB621F3708C00A845C4 /* libRCTWKWebView.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTWKWebView.a; + remoteRef = B4C5BAB521F3708C00A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXReferenceProxy section */ @@ -1707,21 +1707,21 @@ files = ( 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, - E98E21D32735429C8E630B54 /* AntDesign.ttf in Resources */, - 6A95349CF0194548A175076B /* Entypo.ttf in Resources */, - 7C1B264BF28B44C29BA00262 /* EvilIcons.ttf in Resources */, - 2804B7DB54084F54A1C28DC6 /* Feather.ttf in Resources */, - 7C76B2A54AF3405FB041001E /* FontAwesome.ttf in Resources */, - A00EA31D54E74AB4BABF8755 /* FontAwesome5_Brands.ttf in Resources */, - 105C71E7736A4F20905497E3 /* FontAwesome5_Regular.ttf in Resources */, - FDE69393B0DE46149DDB7E3C /* FontAwesome5_Solid.ttf in Resources */, - B86E02D094DF455C990432D2 /* Foundation.ttf in Resources */, - 4A9494D3A1E04115B6F7D0D4 /* Ionicons.ttf in Resources */, - 06C80B90852E417F941BB03C /* MaterialCommunityIcons.ttf in Resources */, - 071C1519F81B4BE29915C533 /* MaterialIcons.ttf in Resources */, - D37B51DB221D47B7996BE00D /* Octicons.ttf in Resources */, - E4BBBC2D6D394E89B99A5C16 /* SimpleLineIcons.ttf in Resources */, - 7C83851C74EC41958D6AE8C6 /* Zocial.ttf in Resources */, + B56DD1A390C0411AA6B033C1 /* AntDesign.ttf in Resources */, + 08FC9048F804485789FBAF4C /* Entypo.ttf in Resources */, + 88F4BE5F5AB947C3A36156D8 /* EvilIcons.ttf in Resources */, + C0CC1B295A544678A63CBD24 /* Feather.ttf in Resources */, + B617E79B06774815997F5DC8 /* FontAwesome.ttf in Resources */, + A1C6AA1F146D4BBEA120BA8D /* FontAwesome5_Brands.ttf in Resources */, + 0263BA0C13C44BE6B630E0A9 /* FontAwesome5_Regular.ttf in Resources */, + 02595DE49CB242ADB35FFB19 /* FontAwesome5_Solid.ttf in Resources */, + 8BCBCB6511CE402088217A4F /* Foundation.ttf in Resources */, + B414BE14BACE483F85247A1D /* Ionicons.ttf in Resources */, + 028C3DFA2E1F4311AC52B1A7 /* MaterialCommunityIcons.ttf in Resources */, + 122F9192CF8E45C2989EB8AB /* MaterialIcons.ttf in Resources */, + CC7A1851EAB14457B1769BB8 /* Octicons.ttf in Resources */, + 985F870D88324026B44EF399 /* SimpleLineIcons.ttf in Resources */, + 74A59188BE6D47FBA7F10AA7 /* Zocial.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1755,7 +1755,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export SENTRY_PROPERTIES=sentry.properties\nexport NODE_BINARY=node\n../node_modules/@sentry/cli/bin/sentry-cli react-native xcode ../node_modules/react-native/scripts/react-native-xcode.sh\n"; + shellScript = "export SENTRY_PROPERTIES=sentry.properties\nexport NODE_BINARY=node\n../node_modules/@sentry/cli/bin/sentry-cli react-native xcode ../node_modules/react-native/scripts/react-native-xcode.sh"; }; 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { isa = PBXShellScriptBuildPhase; @@ -1771,7 +1771,7 @@ shellPath = /bin/sh; shellScript = "export SENTRY_PROPERTIES=sentry.properties\nexport NODE_BINARY=node\n../node_modules/@sentry/cli/bin/sentry-cli react-native xcode ../node_modules/react-native/scripts/react-native-xcode.sh"; }; - 97FBF98104AA4C6EBADC06F0 /* Upload Debug Symbols to Sentry */ = { + B9B0C844E4364469A20FB477 /* Upload Debug Symbols to Sentry */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1783,7 +1783,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export SENTRY_PROPERTIES=sentry.properties\n../node_modules/@sentry/cli/bin/sentry-cli upload-dsym\n"; + shellScript = "export SENTRY_PROPERTIES=sentry.properties\n../node_modules/@sentry/cli/bin/sentry-cli upload-dsym"; }; /* End PBXShellScriptBuildPhase section */ @@ -1854,40 +1854,61 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = A7W54YZ4WU; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", "$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fs/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", "$(SRCROOT)/../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/**", "$(SRCROOT)/../node_modules/react-native-haptic-feedback/ios", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-svg/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", "$(SRCROOT)/../node_modules/react-native-randombytes", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-fs/**", - "$(SRCROOT)/../node_modules/react-native-webview/ios", "$(SRCROOT)/../node_modules/react-native-rate/ios", + "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", ); INFOPLIST_FILE = BlueWalletTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BlueWallet.app/BlueWallet"; }; @@ -1898,36 +1919,57 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = A7W54YZ4WU; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", "$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fs/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", "$(SRCROOT)/../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/**", "$(SRCROOT)/../node_modules/react-native-haptic-feedback/ios", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-svg/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", "$(SRCROOT)/../node_modules/react-native-randombytes", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-fs/**", - "$(SRCROOT)/../node_modules/react-native-webview/ios", "$(SRCROOT)/../node_modules/react-native-rate/ios", + "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", ); INFOPLIST_FILE = BlueWalletTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BlueWallet.app/BlueWallet"; }; @@ -1942,31 +1984,32 @@ DEVELOPMENT_TEAM = A7W54YZ4WU; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", "$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fs/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", "$(SRCROOT)/../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/**", "$(SRCROOT)/../node_modules/react-native-haptic-feedback/ios", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-svg/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", "$(SRCROOT)/../node_modules/react-native-randombytes", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-fs/**", - "$(SRCROOT)/../node_modules/react-native-webview/ios", "$(SRCROOT)/../node_modules/react-native-rate/ios", + "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", ); INFOPLIST_FILE = BlueWallet/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet; + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = BlueWallet; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -1981,31 +2024,32 @@ DEVELOPMENT_TEAM = A7W54YZ4WU; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", "$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fs/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", "$(SRCROOT)/../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/**", "$(SRCROOT)/../node_modules/react-native-haptic-feedback/ios", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-svg/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", "$(SRCROOT)/../node_modules/react-native-randombytes", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-fs/**", - "$(SRCROOT)/../node_modules/react-native-webview/ios", "$(SRCROOT)/../node_modules/react-native-rate/ios", + "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", ); INFOPLIST_FILE = BlueWallet/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet; + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = BlueWallet; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -2026,27 +2070,48 @@ GCC_NO_COMMON_BLOCKS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", "$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fs/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", "$(SRCROOT)/../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/**", "$(SRCROOT)/../node_modules/react-native-haptic-feedback/ios", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-svg/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", "$(SRCROOT)/../node_modules/react-native-randombytes", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-fs/**", - "$(SRCROOT)/../node_modules/react-native-webview/ios", "$(SRCROOT)/../node_modules/react-native-rate/ios", + "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", ); INFOPLIST_FILE = "BlueWallet-tvOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); OTHER_LDFLAGS = ( "-ObjC", @@ -2074,27 +2139,48 @@ GCC_NO_COMMON_BLOCKS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", "$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fs/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", "$(SRCROOT)/../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/**", "$(SRCROOT)/../node_modules/react-native-haptic-feedback/ios", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-svg/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", "$(SRCROOT)/../node_modules/react-native-randombytes", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-fs/**", - "$(SRCROOT)/../node_modules/react-native-webview/ios", "$(SRCROOT)/../node_modules/react-native-rate/ios", + "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", ); INFOPLIST_FILE = "BlueWallet-tvOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); OTHER_LDFLAGS = ( "-ObjC", @@ -2121,27 +2207,48 @@ GCC_NO_COMMON_BLOCKS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", "$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fs/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", "$(SRCROOT)/../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/**", "$(SRCROOT)/../node_modules/react-native-haptic-feedback/ios", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-svg/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", "$(SRCROOT)/../node_modules/react-native-randombytes", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-fs/**", - "$(SRCROOT)/../node_modules/react-native-webview/ios", "$(SRCROOT)/../node_modules/react-native-rate/ios", + "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", ); INFOPLIST_FILE = "BlueWallet-tvOSTests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); OTHER_LDFLAGS = ( "-ObjC", @@ -2168,27 +2275,48 @@ GCC_NO_COMMON_BLOCKS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios", + "$(SRCROOT)/../node_modules/react-native-camera/ios/**", "$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo", + "$(SRCROOT)/../node_modules/react-native-fs/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", "$(SRCROOT)/../node_modules/react-native-google-analytics-bridge/ios/RCTGoogleAnalyticsBridge/**", "$(SRCROOT)/../node_modules/react-native-haptic-feedback/ios", - "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", - "$(SRCROOT)/../node_modules/react-native-svg/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", "$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient", + "$(SRCROOT)/../node_modules/react-native-permissions/ios/**", "$(SRCROOT)/../node_modules/react-native-randombytes", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-camera/ios/**", - "$(SRCROOT)/../node_modules/react-native-fs/**", - "$(SRCROOT)/../node_modules/react-native-webview/ios", "$(SRCROOT)/../node_modules/react-native-rate/ios", + "$(SRCROOT)/../node_modules/react-native-sentry/ios/**", + "$(SRCROOT)/../node_modules/react-native-svg/ios/**", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-webview/ios", ); INFOPLIST_FILE = "BlueWallet-tvOSTests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); OTHER_LDFLAGS = ( "-ObjC", @@ -2210,20 +2338,32 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -2236,7 +2376,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -2251,13 +2391,23 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -2265,13 +2415,14 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; diff --git a/ios/BlueWallet.xcodeproj/xcshareddata/xcschemes/BlueWallet-tvOS.xcscheme b/ios/BlueWallet.xcodeproj/xcshareddata/xcschemes/BlueWallet-tvOS.xcscheme index 545210b7a..2d3a1b72c 100644 --- a/ios/BlueWallet.xcodeproj/xcshareddata/xcschemes/BlueWallet-tvOS.xcscheme +++ b/ios/BlueWallet.xcodeproj/xcshareddata/xcschemes/BlueWallet-tvOS.xcscheme @@ -1,6 +1,6 @@ *)options { + return [RCTLinkingManager application:app openURL:url options:options]; } @end diff --git a/ios/BlueWallet/Info.plist b/ios/BlueWallet/Info.plist index de2b42a74..434dc4351 100644 --- a/ios/BlueWallet/Info.plist +++ b/ios/BlueWallet/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - Blue Wallet + BlueWallet CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.6.0 + 3.6.2 CFBundleSignature ???? CFBundleURLTypes diff --git a/ios/BlueWalletTests/Info.plist b/ios/BlueWalletTests/Info.plist index 886825ccc..ba72822e8 100644 --- a/ios/BlueWalletTests/Info.plist +++ b/ios/BlueWalletTests/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/package-lock.json b/package-lock.json index d77d0f420..53b6411e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "3.6.0", + "version": "3.6.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -9124,9 +9124,9 @@ } }, "react-native-device-info": { - "version": "0.24.3", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.24.3.tgz", - "integrity": "sha512-usW00Wk6DoXH1eRSMt07j0uYvuka3SIEnJ9girlddAacyqwfa1QMVTN4eYmtaBzuMd/avhis8iHZQ3cLaR9CMA==" + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.0.tgz", + "integrity": "sha512-5egYoRhO6OE4VHC2RZtjNYxuXtwR2oexoI1GwvAiYzyGEc2pkMaC59xN2W0NX0mDxhkfaDsMzc+WArLqSg62xA==" }, "react-native-elements": { "version": "0.19.1", @@ -9361,6 +9361,35 @@ } } }, + "react-native-wkwebview-reborn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-wkwebview-reborn/-/react-native-wkwebview-reborn-2.0.0.tgz", + "integrity": "sha512-upHQ471Wv4uV1/t6ZivYQVm05NyLRKZW8es/EdBl7UCdDoDVWD+1RBhu70ACPyW8EjX1DpMgK0SZvA4o0dt+8w==", + "requires": { + "fbjs": "^0.8.3" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, "react-navigation": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.0.9.tgz", diff --git a/package.json b/package.json index f52c81fdc..7c89d2278 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "3.6.0", + "version": "3.6.2", "devDependencies": { "babel-eslint": "^8.2.6", "babel-jest": "23.6.0", @@ -62,7 +62,7 @@ "react-native": "^0.57.8", "react-native-camera": "^1.8.0", "react-native-custom-qr-codes": "^2.0.0", - "react-native-device-info": "^0.24.3", + "react-native-device-info": "^0.25.0", "react-native-elements": "^0.19.0", "react-native-flexi-radio-button": "^0.2.2", "react-native-fs": "^2.13.3", @@ -83,13 +83,13 @@ "react-native-svg": "^8.0.10", "react-native-vector-icons": "^6.0.2", "react-native-webview": "2.8.0", + "react-native-wkwebview-reborn": "^2.0.0", "react-navigation": "^3.0.9", "react-test-render": "^1.1.1", "readable-stream": "^1.1.14", "request-promise-native": "^1.0.5", "secure-random": "^1.1.1", "stream-browserify": "^1.0.0", - "util": "^0.10.4", "wif": "^2.0.1" }, "react-native": { diff --git a/screen/lnd/browser.js b/screen/lnd/browser.js index f3c54847f..fbd866b75 100644 --- a/screen/lnd/browser.js +++ b/screen/lnd/browser.js @@ -1,6 +1,7 @@ import React, { Component } from 'react'; -import { TouchableOpacity, ActivityIndicator, View, Alert, Dimensions } from 'react-native'; +import { TouchableOpacity, ActivityIndicator, View, Platform, Alert, Dimensions } from 'react-native'; import { WebView } from 'react-native-webview'; +import WKWebView from 'react-native-wkwebview-reborn'; import { BlueNavigationStyle, SafeBlueArea } from '../../BlueComponents'; import { FormInput } from 'react-native-elements'; import Ionicons from 'react-native-vector-icons/Ionicons'; @@ -17,7 +18,7 @@ let bluewalletResponses = {}; // eslint-disable-next-line var webln = { enable: function() { - window.postMessage('enable'); + window.postMessage(JSON.stringify({ enable: true })); return new Promise(function(resolve, reject) { resolve(true); }); @@ -66,166 +67,8 @@ var webln = { /// ///////////////// /// ///////////////// -export default class Browser extends Component { - static navigationOptions = ({ navigation }) => ({ - ...BlueNavigationStyle(navigation, true), - title: 'Lapp Browser', - headerLeft: null, - }); - - constructor(props) { - super(props); - if (!props.navigation.getParam('fromSecret')) throw new Error('Invalid param'); - if (!props.navigation.getParam('fromWallet')) throw new Error('Invalid param'); - - this.state = { - url: 'https://bluewallet.io/marketplace/', - pageIsLoading: false, - fromSecret: props.navigation.getParam('fromSecret'), - fromWallet: props.navigation.getParam('fromWallet'), - }; - } - - render() { - return ( - - - { - this.webview.goBack(); - }} - > - - - - - - { - this.setState({ url: 'https://bluewallet.io/marketplace/' }); - }} - > - - - - { - this.webview.reload(); - }} - > - {(!this.state.pageIsLoading && ( - - )) || ( - - - - )} - - - - (this.webview = ref)} - source={{ uri: this.state.url }} - mixedContentMode={'compatibility'} - onMessage={e => { - // this is a handler which receives messages sent from within the browser - console.log('---- message from the bus:', e.nativeEvent.data); - let json = false; - try { - json = JSON.parse(e.nativeEvent.data); - } catch (_) {} - // message from browser has ln invoice - if (json && json.sendPayment) { - // checking that we do not trigger alert too often: - if (+new Date() - lastTimeTriedToPay < 3000) { - return; - } - lastTimeTriedToPay = +new Date(); - - // checking that already asked about this invoice: - if (processedInvoices[json.sendPayment]) { - return; - } else { - processedInvoices[json.sendPayment] = 1; - } - - Alert.alert( - 'Page', - 'This page asks for permission to pay an invoice', - [ - { text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel' }, - { - text: 'Pay', - onPress: () => { - console.log('OK Pressed'); - this.props.navigation.navigate({ - routeName: 'ScanLndInvoice', - params: { - uri: json.sendPayment, - fromSecret: this.state.fromSecret, - }, - }); - }, - }, - ], - { cancelable: false }, - ); - } - - if (json && json.makeInvoice) { - let amount = Math.max(+json.makeInvoice.minimumAmount, +json.makeInvoice.maximumAmount, +json.makeInvoice.defaultAmount); - Alert.alert( - 'Page', - 'This page wants to pay you ' + amount + ' sats (' + json.makeInvoice.defaultMemo + ')', - [ - { text: 'No thanks', onPress: () => console.log('Cancel Pressed'), style: 'cancel' }, - { - text: 'Accept', - onPress: async () => { - /** @type {LightningCustodianWallet} */ - const fromWallet = this.state.fromWallet; - const payreq = await fromWallet.addInvoice(amount, json.makeInvoice.defaultMemo || ' '); - this.webview.postMessage(JSON.stringify({ bluewalletResponse: { paymentRequest: payreq }, id: json.id })); - }, - }, - ], - { cancelable: false }, - ); - } - }} - injectedJavaScript={` +let alreadyInjected = false; +const injectedParadise = ` /* rules: no 'let', only 'var' @@ -251,7 +94,7 @@ bluewalletResponses = {}; webln = { enable : function () { - window.postMessage('enable'); + window.postMessage(JSON.stringify({'enable': true})); return new Promise(function(resolve, reject){ resolve(true); }) @@ -327,6 +170,7 @@ function tryToPay(invoice) { searching for all bolt11 manually */ setInterval(function() { +window.postMessage('interval'); var searchText = "lnbc"; @@ -362,14 +206,288 @@ setInterval(function() { }, 1000); - `} + `; + +export default class Browser extends Component { + static navigationOptions = ({ navigation }) => ({ + ...BlueNavigationStyle(navigation, true), + title: 'Lapp Browser', + headerLeft: null, + }); + + constructor(props) { + super(props); + if (!props.navigation.getParam('fromSecret')) throw new Error('Invalid param'); + if (!props.navigation.getParam('fromWallet')) throw new Error('Invalid param'); + + this.state = { + url: 'https://bluewallet.io/marketplace/', + pageIsLoading: false, + fromSecret: props.navigation.getParam('fromSecret'), + fromWallet: props.navigation.getParam('fromWallet'), + }; + } + + renderWebView = () => { + if (Platform.OS === 'android') { + return ( + (this.webview = ref)} + source={{ uri: this.state.url }} + onMessage={e => { + // this is a handler which receives messages sent from within the browser + console.log('---- message from the bus:', e.nativeEvent.data); + let json = false; + try { + json = JSON.parse(e.nativeEvent.data); + } catch (_) {} + // message from browser has ln invoice + if (json && json.sendPayment) { + // checking that already asked about this invoice: + if (processedInvoices[json.sendPayment]) { + return; + } else { + // checking that we do not trigger alert too often: + if (+new Date() - lastTimeTriedToPay < 3000) { + return; + } + lastTimeTriedToPay = +new Date(); + // + processedInvoices[json.sendPayment] = 1; + } + + Alert.alert( + 'Page', + 'This page asks for permission to pay an invoice', + [ + { text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel' }, + { + text: 'Pay', + onPress: () => { + console.log('OK Pressed'); + this.props.navigation.navigate({ + routeName: 'ScanLndInvoice', + params: { + uri: json.sendPayment, + fromSecret: this.state.fromSecret, + }, + }); + }, + }, + ], + { cancelable: false }, + ); + } + + if (json && json.makeInvoice) { + let amount = Math.max(+json.makeInvoice.minimumAmount, +json.makeInvoice.maximumAmount, +json.makeInvoice.defaultAmount); + Alert.alert( + 'Page', + 'This page wants to pay you ' + amount + ' sats (' + json.makeInvoice.defaultMemo + ')', + [ + { text: 'No thanks', onPress: () => console.log('Cancel Pressed'), style: 'cancel' }, + { + text: 'Accept', + onPress: async () => { + /** @type {LightningCustodianWallet} */ + const fromWallet = this.state.fromWallet; + const payreq = await fromWallet.addInvoice(amount, json.makeInvoice.defaultMemo || ' '); + this.webview.postMessage(JSON.stringify({ bluewalletResponse: { paymentRequest: payreq }, id: json.id })); + }, + }, + ], + { cancelable: false }, + ); + } + + if (json && json.enable) { + console.log('webln enabled'); + this.setState({ weblnEnabled: true }); + } + }} onLoadStart={e => { - this.setState({ pageIsLoading: true }); + alreadyInjected = false; + console.log('load start'); + this.setState({ pageIsLoading: true, weblnEnabled: false }); }} onLoadEnd={e => { + console.log('load end'); + this.setState({ url: e.nativeEvent.url, pageIsLoading: false }); + }} + onLoadProgress={e => { + console.log('progress:', e.nativeEvent.progress); + if (!alreadyInjected && e.nativeEvent.progress > 0.5) { + this.webview.injectJavaScript(injectedParadise); + alreadyInjected = true; + console.log('injected'); + } + }} + /> + ); + } else if (Platform.OS === 'ios') { + return ( + (this.webview = ref)} + source={{ uri: this.state.url }} + injectJavaScript={injectedParadise} + onMessage={e => { + // this is a handler which receives messages sent from within the browser + console.log('---- message from the bus:', e.nativeEvent.data); + let json = false; + try { + json = JSON.parse(e.nativeEvent.data); + } catch (_) {} + // message from browser has ln invoice + if (json && json.sendPayment) { + // checking that we do not trigger alert too often: + if (+new Date() - lastTimeTriedToPay < 3000) { + return; + } + lastTimeTriedToPay = +new Date(); + + // checking that already asked about this invoice: + if (processedInvoices[json.sendPayment]) { + return; + } else { + processedInvoices[json.sendPayment] = 1; + } + + Alert.alert( + 'Page', + 'This page asks for permission to pay an invoice', + [ + { text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel' }, + { + text: 'Pay', + onPress: () => { + console.log('OK Pressed'); + this.props.navigation.navigate({ + routeName: 'ScanLndInvoice', + params: { + uri: json.sendPayment, + fromSecret: this.state.fromSecret, + }, + }); + }, + }, + ], + { cancelable: false }, + ); + } + + if (json && json.makeInvoice) { + let amount = Math.max(+json.makeInvoice.minimumAmount, +json.makeInvoice.maximumAmount, +json.makeInvoice.defaultAmount); + Alert.alert( + 'Page', + 'This page wants to pay you ' + amount + ' sats (' + json.makeInvoice.defaultMemo + ')', + [ + { text: 'No thanks', onPress: () => console.log('Cancel Pressed'), style: 'cancel' }, + { + text: 'Accept', + onPress: async () => { + /** @type {LightningCustodianWallet} */ + const fromWallet = this.state.fromWallet; + const payreq = await fromWallet.addInvoice(amount, json.makeInvoice.defaultMemo || ' '); + this.webview.postMessage(JSON.stringify({ bluewalletResponse: { paymentRequest: payreq }, id: json.id })); + }, + }, + ], + { cancelable: false }, + ); + } + + if (json && json.enable) { + console.log('webln enabled'); + this.setState({ weblnEnabled: true }); + } + }} + onLoadStart={e => { + alreadyInjected = false; + console.log('load start'); + this.setState({ pageIsLoading: true, weblnEnabled: false }); + }} + onLoadEnd={e => { + console.log('load end'); this.setState({ url: e.nativeEvent.url, pageIsLoading: false }); }} /> + ); + } + }; + render() { + return ( + + + { + this.webview.goBack(); + }} + > + + + + + + { + processedInvoices = {}; + this.setState({ url: 'https://bluewallet.io/marketplace/' }); + }} + > + + + + { + let reloadUrl = this.state.url; + this.setState({ url: 'about:blank' }); + processedInvoices = {}; + setTimeout(() => this.setState({ url: reloadUrl }), 500); + // this.webview.reload(); + }} + > + {(!this.state.pageIsLoading && ( + + )) || ( + + + + )} + + + {this.renderWebView()} ); } From 3237c8c2c306f75cd13999d8f1dc6b17fa7759f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Rodriguez=20Ve=CC=81lez?= Date: Mon, 21 Jan 2019 08:55:39 -0500 Subject: [PATCH 09/15] ADD: Created BlueCopyTextToClipboard --- App.test.js | 46 +- App2.test.js | 16 +- BlueComponents.js | 50 ++ HDWallet.test.js | 144 ++-- LightningCustodianWallet.test.js | 42 +- package-lock.json | 774 ++++++++++++------ package.json | 24 +- .../lndViewAdditionalInvoiceInformation.js | 34 +- screen/lnd/lndViewInvoice.js | 38 +- screen/receive/details.js | 34 +- screen/receive/receiveAmount.js | 38 +- screen/wallets/buyBitcoin.js | 34 +- screen/wallets/xpub.js | 17 +- 13 files changed, 758 insertions(+), 533 deletions(-) diff --git a/App.test.js b/App.test.js index b5c8c685a..072984948 100644 --- a/App.test.js +++ b/App.test.js @@ -57,7 +57,7 @@ describe('unit - LegacyWallet', function() { let b = LegacyWallet.fromJson(key); assert(key === JSON.stringify(b)); - assert.equal(key, JSON.stringify(b)); + assert.strictEqual(key, JSON.stringify(b)); }); it('can validate addresses', () => { @@ -118,8 +118,8 @@ it('Appstorage - loadFromDisk works', async () => { let Storage2 = new AppStorage(); await Storage2.loadFromDisk(); - assert.equal(Storage2.wallets.length, 1); - assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); let isEncrypted = await Storage2.storageIsEncrypted(); assert.ok(!isEncrypted); @@ -146,7 +146,7 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(!isEncrypted); await Storage.encryptStorage('password'); isEncrypted = await Storage.storageIsEncrypted(); - assert.equal(Storage.cachedPassword, 'password'); + assert.strictEqual(Storage.cachedPassword, 'password'); assert.ok(isEncrypted); // saved, now trying to load, using good password @@ -156,8 +156,8 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); let loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.equal(Storage2.wallets.length, 1); - assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); // now trying to load, using bad password @@ -166,7 +166,7 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('passwordBAD'); assert.ok(!loadResult); - assert.equal(Storage2.wallets.length, 0); + assert.strictEqual(Storage2.wallets.length, 0); // now, trying case with adding data after decrypt. // saveToDisk should be handled correctly @@ -176,14 +176,14 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.equal(Storage2.wallets.length, 1); - assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); w = new SegwitP2SHWallet(); w.setLabel('testlabel2'); await w.generate(); Storage2.wallets.push(w); - assert.equal(Storage2.wallets.length, 2); - assert.equal(Storage2.wallets[1].getLabel(), 'testlabel2'); + assert.strictEqual(Storage2.wallets.length, 2); + assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); await Storage2.saveToDisk(); // saved to encrypted storage after load. next load should be successfull Storage2 = new AppStorage(); @@ -191,15 +191,15 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.equal(Storage2.wallets.length, 2); - assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); - assert.equal(Storage2.wallets[1].getLabel(), 'testlabel2'); + assert.strictEqual(Storage2.wallets.length, 2); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); // next, adding new `fake` storage which should be unlocked with `fake` password let createFakeStorageResult = await Storage2.createFakeStorage('fakePassword'); assert.ok(createFakeStorageResult); - assert.equal(Storage2.wallets.length, 0); - assert.equal(Storage2.cachedPassword, 'fakePassword'); + assert.strictEqual(Storage2.wallets.length, 0); + assert.strictEqual(Storage2.cachedPassword, 'fakePassword'); w = new SegwitP2SHWallet(); w.setLabel('fakewallet'); await w.generate(); @@ -210,14 +210,14 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { let Storage3 = new AppStorage(); loadResult = await Storage3.loadFromDisk('password'); assert.ok(loadResult); - assert.equal(Storage3.wallets.length, 2); - assert.equal(Storage3.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage3.wallets.length, 2); + assert.strictEqual(Storage3.wallets[0].getLabel(), 'testlabel'); // fake: Storage3 = new AppStorage(); loadResult = await Storage3.loadFromDisk('fakePassword'); assert.ok(loadResult); - assert.equal(Storage3.wallets.length, 1); - assert.equal(Storage3.wallets[0].getLabel(), 'fakewallet'); + assert.strictEqual(Storage3.wallets.length, 1); + assert.strictEqual(Storage3.wallets[0].getLabel(), 'fakewallet'); }); it('Wallet can fetch UTXO', async () => { @@ -245,7 +245,7 @@ it('Wallet can fetch TXs', async () => { let w = new LegacyWallet(); w._address = '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'; await w.fetchTransactions(); - assert.equal(w.getTransactions().length, 2); + assert.strictEqual(w.getTransactions().length, 2); let tx0 = w.getTransactions()[0]; let txExpected = { @@ -296,7 +296,7 @@ it('Wallet can fetch TXs', async () => { delete txExpected.confirmations; delete tx0.preference; // that bs is not always the same delete txExpected.preference; - assert.deepEqual(tx0, txExpected); + assert.deepStrictEqual(tx0, txExpected); }); describe('currency', () => { @@ -321,7 +321,7 @@ describe('currency', () => { await currency.setPrefferedCurrency(FiatUnit.EUR); await currency.startUpdater(); let preferred = await currency.getPreferredCurrency(); - assert.equal(preferred.endPointKey, 'EUR'); + assert.strictEqual(preferred.endPointKey, 'EUR'); cur = JSON.parse(AsyncStorage.storageCache[AppStorage.EXCHANGE_RATES]); assert.ok(cur['BTC_EUR'] > 0); }); diff --git a/App2.test.js b/App2.test.js index 90f7695d3..a817d57b4 100644 --- a/App2.test.js +++ b/App2.test.js @@ -14,7 +14,10 @@ it('bip38 decodes', async () => { { N: 1, r: 8, p: 8 }, // using non-default parameters to speed it up (not-bip38 compliant) ); - assert.equal(wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), '5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR'); + assert.strictEqual( + wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), + '5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR', + ); }); it('bip38 decodes slow', async () => { @@ -29,7 +32,10 @@ it('bip38 decodes slow', async () => { let encryptedKey = '6PnU5voARjBBykwSddwCdcn6Eu9EcsK24Gs5zWxbJbPZYW7eiYQP8XgKbN'; let decryptedKey = await bip38.decrypt(encryptedKey, 'qwerty', status => process.stdout.write(parseInt(status.percent) + '%\r')); - assert.equal(wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc'); + assert.strictEqual( + wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), + 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc', + ); }); describe('Watch only wallet', () => { @@ -46,16 +52,16 @@ describe('Watch only wallet', () => { w.setSecret('167zK5iZrs1U6piDqubD3FjRqUTM2CZnb8'); await w.fetchTransactions(); - assert.equal(w.getTransactions().length, 233); + assert.strictEqual(w.getTransactions().length, 233); w = new WatchOnlyWallet(); w.setSecret('1BiJW1jyUaxcJp2JWwbPLPzB1toPNWTFJV'); await w.fetchTransactions(); - assert.equal(w.getTransactions().length, 2); + assert.strictEqual(w.getTransactions().length, 2); // fetch again and make sure no duplicates await w.fetchTransactions(); - assert.equal(w.getTransactions().length, 2); + assert.strictEqual(w.getTransactions().length, 2); }); it('can fetch complex TXs', async () => { diff --git a/BlueComponents.js b/BlueComponents.js index f00a51ab8..2964bd325 100644 --- a/BlueComponents.js +++ b/BlueComponents.js @@ -16,6 +16,7 @@ import { SafeAreaView, Clipboard, Platform, + LayoutAnimation, TextInput, } from 'react-native'; import LinearGradient from 'react-native-linear-gradient'; @@ -193,6 +194,55 @@ export const BlueCopyToClipboardButton = ({ stringToCopy }) => { ); }; +export class BlueCopyTextToClipboard extends Component { + static propTypes = { + text: PropTypes.string, + }; + + static defaultProps = { + text: '', + }; + + state = { hasTappedText: false }; + + copyToClipboard = () => { + LayoutAnimation.configureNext(LayoutAnimation.Presets.spring, () => { + Clipboard.setString(this.props.text); + setTimeout(() => { + LayoutAnimation.configureNext(LayoutAnimation.Presets.spring); + this.setState({ hasTappedText: false }); + }, 1000); + }); + this.setState({ hasTappedText: true }); + }; + + render() { + return ( + + + + {this.props.text} + + {this.state.hasTappedText && ( + + {loc.wallets.xpub.copiedToClipboard} + + )} + + + ); + } +} + +const styleCopyTextToClipboard = StyleSheet.create({ + address: { + marginVertical: 32, + fontSize: 15, + color: '#9aa0aa', + textAlign: 'center', + }, +}); + export class SafeBlueArea extends Component { render() { return ( diff --git a/HDWallet.test.js b/HDWallet.test.js index 880cbcf0c..c60f73f31 100644 --- a/HDWallet.test.js +++ b/HDWallet.test.js @@ -6,13 +6,13 @@ let bitcoin = require('bitcoinjs-lib'); it('can convert witness to address', () => { let address = SegwitP2SHWallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8'); - assert.equal(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7'); + assert.strictEqual(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7'); address = SegwitBech32Wallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8'); - assert.equal(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv'); + assert.strictEqual(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv'); address = SegwitBech32Wallet.scriptPubKeyToAddress('00144d757460da5fcaf84cc22f3847faaa1078e84f6a'); - assert.equal(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7'); + assert.strictEqual(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7'); }); it('can create a Segwit HD (BIP49)', async function() { @@ -21,39 +21,39 @@ it('can create a Segwit HD (BIP49)', async function() { 'honey risk juice trip orient galaxy win situate shoot anchor bounce remind horse traffic exotic since escape mimic ramp skin judge owner topple erode'; let hd = new HDSegwitP2SHWallet(); hd.setSecret(mnemonic); - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); - assert.equal('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); - assert.equal('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); - assert.equal(true, hd.validateMnemonic()); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); + assert.strictEqual('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); + assert.strictEqual('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); + assert.strictEqual(true, hd.validateMnemonic()); await hd.fetchBalance(); - assert.equal(hd.getBalance(), 0); + assert.strictEqual(hd.getBalance(), 0); assert.ok(hd._lastTxFetch === 0); await hd.fetchTransactions(); assert.ok(hd._lastTxFetch > 0); - assert.equal(hd.transactions.length, 4); + assert.strictEqual(hd.transactions.length, 4); - assert.equal('L4MqtwJm6hkbACLG4ho5DF8GhcXdLEbbvpJnbzA9abfD6RDpbr2m', hd._getExternalWIFByIndex(0)); - assert.equal( + assert.strictEqual('L4MqtwJm6hkbACLG4ho5DF8GhcXdLEbbvpJnbzA9abfD6RDpbr2m', hd._getExternalWIFByIndex(0)); + assert.strictEqual( 'ypub6WhHmKBmHNjcrUVNCa3sXduH9yxutMipDcwiKW31vWjcMbfhQHjXdyx4rqXbEtVgzdbhFJ5mZJWmfWwnP4Vjzx97admTUYKQt6b9D7jjSCp', hd.getXpub(), ); // checking that internal pointer and async address getter return the same address let freeAddress = await hd.getAddressAsync(); - assert.equal(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); + assert.strictEqual(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); let freeChangeAddress = await hd.getChangeAddressAsync(); - assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), freeChangeAddress); + assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), freeChangeAddress); }); it('Segwit HD (BIP49) can generate addressess only via ypub', async function() { let ypub = 'ypub6WhHmKBmHNjcrUVNCa3sXduH9yxutMipDcwiKW31vWjcMbfhQHjXdyx4rqXbEtVgzdbhFJ5mZJWmfWwnP4Vjzx97admTUYKQt6b9D7jjSCp'; let hd = new HDSegwitP2SHWallet(); hd._xpub = ypub; - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); - assert.equal('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); - assert.equal('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); + assert.strictEqual('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); + assert.strictEqual('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); }); it('can generate Segwit HD (BIP49)', async () => { @@ -88,56 +88,56 @@ it('HD (BIP49) can create TX', async () => { await hd.getChangeAddressAsync(); // to refresh internal pointer to next free address await hd.getAddressAsync(); // to refresh internal pointer to next free address let txhex = hd.createTx(hd.utxo, 0.000014, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); - assert.equal( + assert.strictEqual( txhex, '010000000001029d98d81fe2b596fd79e845fa9f38d7e0b6fb73303c40fac604d04df1fa137aee00000000171600142f18e8406c9d210f30c901b24e5feeae78784eb7ffffffff67fb86f310df24e508d40fce9511c7fde4dd4ee91305fd08a074279a70e2cd22000000001716001468dde644410cc789d91a7f36b823f38369755a1cffffffff02780500000000000017a914a3a65daca3064280ae072b9d6773c027b30abace87dc0500000000000017a914850f4dbc255654de2c12c6f6d79cf9cb756cad038702483045022100dc8390a9fd34c31259fa47f9fc182f20d991110ecfd5b58af1cf542fe8de257a022004c2d110da7b8c4127675beccc63b46fd65c706951f090fd381fa3b21d3c5c08012102edd141c5a27a726dda66be10a38b0fd3ccbb40e7c380034aaa43a1656d5f4dd60247304402207c0aef8313d55e72474247daad955979f62e56d1cbac5f2d14b8b022c6ce112602205d9aa3804f04624b12ab8a5ab0214b529c531c2f71c27c6f18aba6502a6ea0a80121030db3c49461a5e539e97bab62ab2b8f88151d1c2376493cf73ef1d02ef60637fd00000000', ); txhex = hd.createTx(hd.utxo, 0.000005, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); var tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 1); - assert.equal(tx.outs.length, 2); - assert.equal(tx.outs[0].value, 500); - assert.equal(tx.outs[1].value, 400); + assert.strictEqual(tx.ins.length, 1); + assert.strictEqual(tx.outs.length, 2); + assert.strictEqual(tx.outs[0].value, 500); + assert.strictEqual(tx.outs[1].value, 400); let chunksIn = bitcoin.script.decompile(tx.outs[0].script); let toAddress = bitcoin.address.fromOutputScript(chunksIn); chunksIn = bitcoin.script.decompile(tx.outs[1].script); let changeAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); - assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); // txhex = hd.createTx(hd.utxo, 0.000015, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 2); - assert.equal(tx.outs.length, 2); + assert.strictEqual(tx.ins.length, 2); + assert.strictEqual(tx.outs.length, 2); // txhex = hd.createTx(hd.utxo, 0.00025, 0.00001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 7); - assert.equal(tx.outs.length, 1); + assert.strictEqual(tx.ins.length, 7); + assert.strictEqual(tx.outs.length, 1); chunksIn = bitcoin.script.decompile(tx.outs[0].script); toAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); // checking that change amount is at least 3x of fee, otherwise screw the change, just add it to fee. // theres 0.00003 on UTXOs, lets transfer (0.00003 - 100sat), soo fee is equal to change (100 sat) // which throws @dust error if broadcasted txhex = hd.createTx(hd.utxo, 0.000028, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 2); - assert.equal(tx.outs.length, 1); // only 1 output, which means change is neglected - assert.equal(tx.outs[0].value, 2800); + assert.strictEqual(tx.ins.length, 2); + assert.strictEqual(tx.outs.length, 1); // only 1 output, which means change is neglected + assert.strictEqual(tx.outs[0].value, 2800); }); it('Segwit HD (BIP49) can fetch UTXO', async function() { let hd = new HDSegwitP2SHWallet(); hd.usedAddresses = ['1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55', '1BiTCHeYzJNMxBLFCMkwYXNdFEdPJP53ZV']; // hacking internals await hd.fetchUtxo(); - assert.equal(hd.utxo.length, 11); + assert.strictEqual(hd.utxo.length, 11); assert.ok(typeof hd.utxo[0].confirmations === 'number'); assert.ok(hd.utxo[0].txid); assert.ok(hd.utxo[0].vout); @@ -168,7 +168,7 @@ it('can work with malformed mnemonic', () => { hd = new HDSegwitP2SHWallet(); hd.setSecret(mnemonic); let seed2 = hd.getMnemonicToSeedHex(); - assert.equal(seed1, seed2); + assert.strictEqual(seed1, seed2); assert.ok(hd.validateMnemonic()); }); @@ -182,28 +182,28 @@ it('can create a Legacy HD (BIP44)', async function() { let mnemonic = process.env.HD_MNEMONIC_BREAD; let hd = new HDLegacyP2PKHWallet(); hd.setSecret(mnemonic); - assert.equal(hd.validateMnemonic(), true); - assert.equal(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); - assert.equal(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); - assert.equal(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); - assert.equal(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); - assert.equal( + assert.strictEqual(hd.validateMnemonic(), true); + assert.strictEqual(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); + assert.strictEqual(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); + assert.strictEqual(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); + assert.strictEqual(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); + assert.strictEqual( hd.getXpub(), 'xpub6CQdfC3v9gU86eaSn7AhUFcBVxiGhdtYxdC5Cw2vLmFkfth2KXCMmYcPpvZviA89X6DXDs4PJDk5QVL2G2xaVjv7SM4roWHr1gR4xB3Z7Ps', ); - assert.equal(hd._getExternalWIFByIndex(0), 'L1hqNoJ26YuCdujMBJfWBNfgf4Jo7AcKFvcNcKLoMtoJDdDtRq7Q'); - assert.equal(hd._getExternalWIFByIndex(1), 'KyyH4h59iatJWwFfiYPnYkw39SP7cBwydC3xzszsBBXHpfwz9cKb'); - assert.equal(hd._getInternalWIFByIndex(0), 'Kx3QkrfemEEV49Mj5oWfb4bsWymboPdstta7eN3kAzop9apxYEFP'); - assert.equal(hd._getInternalWIFByIndex(1), 'Kwfg1EDjFapN9hgwafdNPEH22z3vkd4gtG785vXXjJ6uvVWAJGtr'); + assert.strictEqual(hd._getExternalWIFByIndex(0), 'L1hqNoJ26YuCdujMBJfWBNfgf4Jo7AcKFvcNcKLoMtoJDdDtRq7Q'); + assert.strictEqual(hd._getExternalWIFByIndex(1), 'KyyH4h59iatJWwFfiYPnYkw39SP7cBwydC3xzszsBBXHpfwz9cKb'); + assert.strictEqual(hd._getInternalWIFByIndex(0), 'Kx3QkrfemEEV49Mj5oWfb4bsWymboPdstta7eN3kAzop9apxYEFP'); + assert.strictEqual(hd._getInternalWIFByIndex(1), 'Kwfg1EDjFapN9hgwafdNPEH22z3vkd4gtG785vXXjJ6uvVWAJGtr'); await hd.fetchBalance(); - assert.equal(hd.balance, 0); + assert.strictEqual(hd.balance, 0); assert.ok(hd._lastTxFetch === 0); await hd.fetchTransactions(); assert.ok(hd._lastTxFetch > 0); - assert.equal(hd.transactions.length, 4); - assert.equal(hd.next_free_address_index, 1); - assert.equal(hd.next_free_change_address_index, 1); + assert.strictEqual(hd.transactions.length, 4); + assert.strictEqual(hd.next_free_address_index, 1); + assert.strictEqual(hd.next_free_change_address_index, 1); for (let tx of hd.getTransactions()) { assert.ok(tx.value === 1000 || tx.value === 1377 || tx.value === -1377 || tx.value === -1000); @@ -211,17 +211,17 @@ it('can create a Legacy HD (BIP44)', async function() { // checking that internal pointer and async address getter return the same address let freeAddress = await hd.getAddressAsync(); - assert.equal(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); + assert.strictEqual(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); }); it('Legacy HD (BIP44) can generate addressess based on xpub', async function() { let xpub = 'xpub6CQdfC3v9gU86eaSn7AhUFcBVxiGhdtYxdC5Cw2vLmFkfth2KXCMmYcPpvZviA89X6DXDs4PJDk5QVL2G2xaVjv7SM4roWHr1gR4xB3Z7Ps'; let hd = new HDLegacyP2PKHWallet(); hd._xpub = xpub; - assert.equal(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); - assert.equal(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); - assert.equal(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); - assert.equal(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); + assert.strictEqual(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); + assert.strictEqual(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); + assert.strictEqual(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); + assert.strictEqual(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); }); it('Legacy HD (BIP44) can create TX', async () => { @@ -239,38 +239,38 @@ it('Legacy HD (BIP44) can create TX', async () => { await hd.getAddressAsync(); // to refresh internal pointer to next free address let txhex = hd.createTx(hd.utxo, 0.0008, 0.000005, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); - assert.equal( + assert.strictEqual( txhex, '01000000045fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f030000006b4830450221009be5dbe37db5a8409ddce3570140c95d162a07651b1e48cf39a6a741892adc53022061a25b8024d8f3cb1b94f264245de0c6e9a103ea557ddeb66245b40ec8e9384b012102ad7b2216f3a2b38d56db8a7ee5c540fd12c4bbb7013106eff78cc2ace65aa002ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f000000006a47304402207106e9fa4e2e35d351fbccc9c0fad3356d85d0cd35a9d7e9cbcefce5440da1e5022073c1905b5927447378c0f660e62900c1d4b2691730799458889fb87d86f5159101210316e84a2556f30a199541633f5dda6787710ccab26771b7084f4c9e1104f47667ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f020000006a4730440220250b15094096c4d4fe6793da8e45fa118ed057cc2759a480c115e76e23590791022079cdbdc9e630d713395602071e2837ecc1d192a36a24d8ec71bc51d5e62b203b01210316e84a2556f30a199541633f5dda6787710ccab26771b7084f4c9e1104f47667ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f010000006b483045022100879da610e6ed12c84d55f12baf3bf6222d59b5282502b3c7f4db1d22152c16900220759a1c88583cbdaf7fde21c273ad985dfdf94a2fa85e42ee41dcea2fd69136fd012102ad7b2216f3a2b38d56db8a7ee5c540fd12c4bbb7013106eff78cc2ace65aa002ffffffff02803801000000000017a914a3a65daca3064280ae072b9d6773c027b30abace872c4c0000000000001976a9146ee5e3e66dc73587a3a2d77a1a6c8554fae21b8a88ac00000000', ); var tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 4); - assert.equal(tx.outs.length, 2); - assert.equal(tx.outs[0].value, 80000); // payee - assert.equal(tx.outs[1].value, 19500); // change + assert.strictEqual(tx.ins.length, 4); + assert.strictEqual(tx.outs.length, 2); + assert.strictEqual(tx.outs[0].value, 80000); // payee + assert.strictEqual(tx.outs[1].value, 19500); // change let chunksIn = bitcoin.script.decompile(tx.outs[0].script); let toAddress = bitcoin.address.fromOutputScript(chunksIn); chunksIn = bitcoin.script.decompile(tx.outs[1].script); let changeAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); - assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); // checking that change amount is at least 3x of fee, otherwise screw the change, just add it to fee. // theres 0.001 on UTXOs, lets transfer (0.001 - 100sat), soo fee is equal to change (100 sat) // which throws @dust error if broadcasted txhex = hd.createTx(hd.utxo, 0.000998, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 4); - assert.equal(tx.outs.length, 1); // only 1 output, which means change is neglected - assert.equal(tx.outs[0].value, 99800); + assert.strictEqual(tx.ins.length, 4); + assert.strictEqual(tx.outs.length, 1); // only 1 output, which means change is neglected + assert.strictEqual(tx.outs[0].value, 99800); }); it('Legacy HD (BIP44) can fetch UTXO', async function() { let hd = new HDLegacyP2PKHWallet(); hd.usedAddresses = ['1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55', '1BiTCHeYzJNMxBLFCMkwYXNdFEdPJP53ZV']; // hacking internals await hd.fetchUtxo(); - assert.equal(hd.utxo.length, 11); + assert.strictEqual(hd.utxo.length, 11); assert.ok(typeof hd.utxo[0].confirmations === 'number'); assert.ok(hd.utxo[0].txid); assert.ok(hd.utxo[0].vout); @@ -290,31 +290,31 @@ it('HD breadwallet works', async function() { let hdBread = new HDLegacyBreadwalletWallet(); hdBread.setSecret(process.env.HD_MNEMONIC_BREAD); - assert.equal(hdBread.validateMnemonic(), true); - assert.equal(hdBread._getExternalAddressByIndex(0), '1ARGkNMdsBE36fJhddSwf8PqBXG3s4d2KU'); - assert.equal(hdBread._getInternalAddressByIndex(0), '1JLvA5D7RpWgChb4A5sFcLNrfxYbyZdw3V'); + assert.strictEqual(hdBread.validateMnemonic(), true); + assert.strictEqual(hdBread._getExternalAddressByIndex(0), '1ARGkNMdsBE36fJhddSwf8PqBXG3s4d2KU'); + assert.strictEqual(hdBread._getInternalAddressByIndex(0), '1JLvA5D7RpWgChb4A5sFcLNrfxYbyZdw3V'); - assert.equal( + assert.strictEqual( hdBread.getXpub(), 'xpub68nLLEi3KERQY7jyznC9PQSpSjmekrEmN8324YRCXayMXaavbdEJsK4gEcX2bNf9vGzT4xRks9utZ7ot1CTHLtdyCn9udvv1NWvtY7HXroh', ); await hdBread.fetchBalance(); - assert.equal(hdBread.balance, 0); + assert.strictEqual(hdBread.balance, 0); assert.ok(hdBread._lastTxFetch === 0); await hdBread.fetchTransactions(); assert.ok(hdBread._lastTxFetch > 0); - assert.equal(hdBread.transactions.length, 177); + assert.strictEqual(hdBread.transactions.length, 177); for (let tx of hdBread.getTransactions()) { assert.ok(tx.confirmations); } - assert.equal(hdBread.next_free_address_index, 10); - assert.equal(hdBread.next_free_change_address_index, 118); + assert.strictEqual(hdBread.next_free_address_index, 10); + assert.strictEqual(hdBread.next_free_change_address_index, 118); // checking that internal pointer and async address getter return the same address let freeAddress = await hdBread.getAddressAsync(); - assert.equal(hdBread._getExternalAddressByIndex(hdBread.next_free_address_index), freeAddress); + assert.strictEqual(hdBread._getExternalAddressByIndex(hdBread.next_free_address_index), freeAddress); }); it('can convert blockchain.info TX to blockcypher TX format', () => { diff --git a/LightningCustodianWallet.test.js b/LightningCustodianWallet.test.js index d6623868c..e997b28a6 100644 --- a/LightningCustodianWallet.test.js +++ b/LightningCustodianWallet.test.js @@ -152,7 +152,7 @@ describe('LightningCustodianWallet', () => { } await l2.fetchTransactions(); - assert.equal(l2.transactions_raw.length, txLen + 1); + assert.strictEqual(l2.transactions_raw.length, txLen + 1); // transactions became more after paying an invoice // now, trying to pay duplicate invoice @@ -165,7 +165,7 @@ describe('LightningCustodianWallet', () => { } assert.ok(caughtError); await l2.fetchTransactions(); - assert.equal(l2.transactions_raw.length, txLen + 1); + assert.strictEqual(l2.transactions_raw.length, txLen + 1); // havent changed since last time end = +new Date(); if ((end - start) / 1000 > 9) { @@ -191,21 +191,21 @@ describe('LightningCustodianWallet', () => { await lNew.createAccount(true); await lNew.authorize(); await lNew.fetchBalance(); - assert.equal(lNew.balance, 0); + assert.strictEqual(lNew.balance, 0); let invoices = await lNew.getUserInvoices(); let invoice = await lNew.addInvoice(1, 'test memo'); let invoices2 = await lNew.getUserInvoices(); - assert.equal(invoices2.length, invoices.length + 1); + assert.strictEqual(invoices2.length, invoices.length + 1); assert.ok(invoices2[0].ispaid === false); assert.ok(invoices2[0].description); - assert.equal(invoices2[0].description, 'test memo'); + assert.strictEqual(invoices2[0].description, 'test memo'); assert.ok(invoices2[0].payment_request); assert.ok(invoices2[0].timestamp); assert.ok(invoices2[0].expire_time); - assert.equal(invoices2[0].amt, 1); + assert.strictEqual(invoices2[0].amt, 1); for (let inv of invoices2) { - assert.equal(inv.type, 'user_invoice'); + assert.strictEqual(inv.type, 'user_invoice'); } await lOld.fetchBalance(); @@ -225,11 +225,11 @@ describe('LightningCustodianWallet', () => { await lOld.fetchBalance(); await lNew.fetchBalance(); - assert.equal(oldBalance - lOld.balance, 1); - assert.equal(lNew.balance, 1); + assert.strictEqual(oldBalance - lOld.balance, 1); + assert.strictEqual(lNew.balance, 1); await lOld.fetchTransactions(); - assert.equal(lOld.transactions_raw.length, txLen + 1, 'internal invoice should also produce record in payer`s tx list'); + assert.strictEqual(lOld.transactions_raw.length, txLen + 1, 'internal invoice should also produce record in payer`s tx list'); let newTx = lOld.transactions_raw.slice().pop(); assert.ok(typeof newTx.fee !== 'undefined'); assert.ok(newTx.value); @@ -244,8 +244,8 @@ describe('LightningCustodianWallet', () => { await lNew.payInvoice(invoice); await lOld.fetchBalance(); await lNew.fetchBalance(); - assert.equal(lOld.balance - oldBalance, 1); - assert.equal(lNew.balance, 0); + assert.strictEqual(lOld.balance - oldBalance, 1); + assert.strictEqual(lNew.balance, 0); // now, paying same internal invoice. should fail: @@ -261,16 +261,16 @@ describe('LightningCustodianWallet', () => { assert.ok(coughtError); await lOld.fetchTransactions(); - assert.equal(txLen, lOld.transactions_raw.length, 'tx count should not be changed'); - assert.equal(invLen, (await lNew.getUserInvoices()).length, 'invoices count should not be changed'); + assert.strictEqual(txLen, lOld.transactions_raw.length, 'tx count should not be changed'); + assert.strictEqual(invLen, (await lNew.getUserInvoices()).length, 'invoices count should not be changed'); // testing how limiting works: - assert.equal(lNew.user_invoices_raw.length, 1); + assert.strictEqual(lNew.user_invoices_raw.length, 1); await lNew.addInvoice(666, 'test memo 2'); invoices = await lNew.getUserInvoices(1); - assert.equal(invoices.length, 2); - assert.equal(invoices[0].amt, 1); - assert.equal(invoices[1].amt, 666); + assert.strictEqual(invoices.length, 2); + assert.strictEqual(invoices[0].amt, 1); + assert.strictEqual(invoices[1].amt, 666); }); it('can pay free amount (tip) invoice', async function() { @@ -319,7 +319,7 @@ describe('LightningCustodianWallet', () => { let decoded = await l2.decodeInvoice(invoice); assert.ok(decoded.payment_hash); assert.ok(decoded.description); - assert.equal(+decoded.num_satoshis, 0); + assert.strictEqual(+decoded.num_satoshis, 0); await l2.checkRouteInvoice(invoice); @@ -342,10 +342,10 @@ describe('LightningCustodianWallet', () => { } await l2.fetchTransactions(); - assert.equal(l2.transactions_raw.length, txLen + 1); + assert.strictEqual(l2.transactions_raw.length, txLen + 1); // transactions became more after paying an invoice await l2.fetchBalance(); - assert.equal(oldBalance - l2.balance, 3); + assert.strictEqual(oldBalance - l2.balance, 3); }); }); diff --git a/package-lock.json b/package-lock.json index 33b917cb5..cc80004f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "3.6.1", + "version": "3.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1316,15 +1316,15 @@ } }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { @@ -2012,137 +2012,17 @@ } }, "babel-eslint": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", - "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/traverse": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", - "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0-beta.44" - } - }, - "@babel/generator": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", - "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44", - "jsesc": "^2.5.1", - "lodash": "^4.2.0", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", - "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.44", - "@babel/template": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", - "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", - "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/highlight": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", - "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^3.0.0" - } - }, - "@babel/template": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", - "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "lodash": "^4.2.0" - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", - "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/generator": "7.0.0-beta.44", - "@babel/helper-function-name": "7.0.0-beta.44", - "@babel/helper-split-export-declaration": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "debug": "^3.1.0", - "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.2.0" - } - }, - "@babel/types": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", - "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - } } }, "babel-generator": { @@ -2420,12 +2300,6 @@ } } }, - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -3876,66 +3750,173 @@ } }, "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", + "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "inquirer": "^6.1.0", + "js-yaml": "^3.12.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "acorn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", + "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", "dev": true }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3943,6 +3924,14 @@ "dev": true, "requires": { "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } } } } @@ -4056,10 +4045,23 @@ } }, "eslint-plugin-babel": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", - "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=", - "dev": true + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz", + "integrity": "sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "eslint-plugin-es": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", + "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "dev": true, + "requires": { + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" + } }, "eslint-plugin-import": { "version": "2.14.0", @@ -4107,15 +4109,25 @@ } }, "eslint-plugin-node": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", - "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", + "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", "dev": true, "requires": { - "ignore": "^3.3.6", + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", "minimatch": "^3.0.4", - "resolve": "^1.3.3", - "semver": "^5.4.1" + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "dependencies": { + "ignore": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.4.tgz", + "integrity": "sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==", + "dev": true + } } }, "eslint-plugin-prettier": { @@ -4128,9 +4140,9 @@ } }, "eslint-plugin-promise": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", - "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", "dev": true }, "eslint-plugin-react": { @@ -4153,6 +4165,12 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==" }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, "eslint-scope": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", @@ -4163,6 +4181,12 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, "eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", @@ -4350,9 +4374,9 @@ } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-diff": { @@ -6486,9 +6510,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify": { @@ -7328,9 +7352,9 @@ } }, "metro-react-native-babel-preset": { - "version": "0.49.2", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.49.2.tgz", - "integrity": "sha512-N0+4ramShYCHSAVEPUNWIZuKZskWj8/RDSoinhadHpdpHORMbMxLkexSOVHLluB+XFQ+DENLEx5oVPYwOlENBA==", + "version": "0.51.1", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz", + "integrity": "sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw==", "dev": true, "requires": { "@babel/plugin-proposal-class-properties": "^7.0.0", @@ -7366,14 +7390,14 @@ "@babel/plugin-transform-typescript": "^7.0.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "metro-babel7-plugin-react-transform": "0.49.2", + "metro-babel7-plugin-react-transform": "0.51.1", "react-transform-hmr": "^1.0.4" }, "dependencies": { "metro-babel7-plugin-react-transform": { - "version": "0.49.2", - "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.49.2.tgz", - "integrity": "sha512-LpJT8UvqF/tvVqEwiLUTMjRPhEGdI8e2dr3424XaRANba3j0nqmrbKdJQsPE8TrcqMWR4RHmfsXk0ti5QrEvJg==", + "version": "0.51.1", + "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz", + "integrity": "sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0" @@ -7796,6 +7820,14 @@ } } } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } } } }, @@ -8296,6 +8328,23 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==" }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + } + } + }, "parse-asn1": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.2.tgz", @@ -8507,9 +8556,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", - "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==" + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.0.tgz", + "integrity": "sha512-MCBCYeAuZfejUPdEpkleLWvpRBwLii/Sp5jQs0eb8Ul/drGIDjkL6tAU24tk6yCGf0KPV5rhPPPlczfBmN2pWQ==" }, "prettier-eslint": { "version": "8.8.2", @@ -8532,12 +8581,91 @@ "vue-eslint-parser": "^2.0.2" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, "pretty-format": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", @@ -8547,6 +8675,44 @@ "ansi-regex": "^3.0.0", "ansi-styles": "^3.2.0" } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } } } }, @@ -8576,6 +8742,24 @@ "yargs": "10.0.3" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "chalk": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", @@ -8587,12 +8771,85 @@ "supports-color": "^4.0.0" } }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -8602,6 +8859,24 @@ "symbol-observable": "1.0.1" } }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", @@ -8611,6 +8886,20 @@ "has-flag": "^2.0.0" } }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + }, "yargs": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", @@ -9077,9 +9366,9 @@ } }, "react-native-camera": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-1.8.0.tgz", - "integrity": "sha512-fJPSbCZ4ZWI+1kQ2Y41ed0fr3Bnw+qo6eb8uv3HcTkGzBJ1OCzLIcAhpXLhizyiyY9nwSuMy9asQKS3Tun8eXA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-1.9.0.tgz", + "integrity": "sha512-stvA9rWmN95DRr7a+eNr7LQlQLxP2Z7AJEoR8ctjcYx1EUMoL7qPFdz2JKmqZ/DEsW3ZKOC+ZCx68tscj9gDbQ==", "requires": { "prop-types": "^15.6.2" } @@ -9119,9 +9408,9 @@ } }, "react-native-device-info": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.0.tgz", - "integrity": "sha512-5egYoRhO6OE4VHC2RZtjNYxuXtwR2oexoI1GwvAiYzyGEc2pkMaC59xN2W0NX0mDxhkfaDsMzc+WArLqSg62xA==" + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.1.tgz", + "integrity": "sha512-KW4Mf0CVEy10sbWsrnP7dMiB+FhFa46r11+JPdXWu1hHoSy8B/DR5Cb29kHHZSCPftHPzEhfMDflRe4IOgHrVw==" }, "react-native-elements": { "version": "0.19.1", @@ -9159,9 +9448,9 @@ } }, "react-native-google-analytics-bridge": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/react-native-google-analytics-bridge/-/react-native-google-analytics-bridge-6.1.2.tgz", - "integrity": "sha512-QhBvtQb6/5ao0ubgjMRkJMnsAo05UYwTMJHPesMUT6GD9W0zneAUiCC3HtV8IsHZMSZ0HJxytLhnLtQhWzN7PQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-native-google-analytics-bridge/-/react-native-google-analytics-bridge-7.0.0.tgz", + "integrity": "sha512-PifW2VXYqH92u6GyJfEZAiZQYHmXuJvN7eouuC9ZWadfz+m4MFJbsVFAAsTQ1JzMiuo8B5KwK97hpY0cp7HD9w==" }, "react-native-haptic-feedback": { "version": "1.4.2", @@ -9332,35 +9621,6 @@ "escape-string-regexp": "^1.0.5", "fbjs": "^0.8.17" }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "react-native-wkwebview-reborn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-native-wkwebview-reborn/-/react-native-wkwebview-reborn-2.0.0.tgz", - "integrity": "sha512-upHQ471Wv4uV1/t6ZivYQVm05NyLRKZW8es/EdBl7UCdDoDVWD+1RBhu70ACPyW8EjX1DpMgK0SZvA4o0dt+8w==", - "requires": { - "fbjs": "^0.8.3" - }, "dependencies": { "core-js": { "version": "1.2.7", @@ -9605,9 +9865,9 @@ } }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "regexpu-core": { @@ -10501,11 +10761,13 @@ "dev": true }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", "dev": true, "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, @@ -10952,16 +11214,14 @@ "dev": true }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.1.tgz", + "integrity": "sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", "string-width": "^2.1.1" } }, @@ -11550,9 +11810,9 @@ "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "requires": { "inherits": "2.0.3" } diff --git a/package.json b/package.json index e0747004a..d760f146c 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "BlueWallet", - "version": "3.6.2", + "version": "3.6.0", "devDependencies": { - "babel-eslint": "^8.2.6", + "babel-eslint": "^10.0.1", "babel-jest": "23.6.0", - "eslint": "^4.19.1", - "eslint-plugin-babel": "^4.1.2", + "eslint": "^5.12.1", + "eslint-plugin-babel": "^5.3.0", "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^6.0.1", - "eslint-plugin-promise": "^3.8.0", + "eslint-plugin-node": "^8.0.1", + "eslint-plugin-promise": "^4.0.1", "eslint-plugin-react": "^7.12.3", "jest": "23.6.0", - "metro-react-native-babel-preset": "^0.49.1", + "metro-react-native-babel-preset": "^0.51.1", "prettier-eslint-cli": "^4.7.1", "react-test-renderer": "^16.7.0", "rn-nodeify": "github:tradle/rn-nodeify" @@ -54,20 +54,20 @@ "mocha": "^5.2.0", "node-libs-react-native": "^1.0.1", "path-browserify": "0.0.0", - "prettier": "^1.14.2", + "prettier": "^1.16.0", "process": "^0.11.10", "prop-types": "^15.6.2", "react": "^16.7.0", "react-localization": "^1.0.10", "react-native": "^0.57.8", - "react-native-camera": "^1.8.0", + "react-native-camera": "^1.9.0", "react-native-custom-qr-codes": "^2.0.0", - "react-native-device-info": "^0.25.0", + "react-native-device-info": "^0.25.1", "react-native-elements": "^0.19.0", "react-native-flexi-radio-button": "^0.2.2", "react-native-fs": "^2.13.3", "react-native-gesture-handler": "^1.0.12", - "react-native-google-analytics-bridge": "^6.1.2", + "react-native-google-analytics-bridge": "^7.0.0", "react-native-haptic-feedback": "^1.4.2", "react-native-level-fs": "^3.0.1", "react-native-linear-gradient": "^2.5.3", @@ -83,13 +83,13 @@ "react-native-svg": "^9.0.0", "react-native-vector-icons": "^6.0.2", "react-native-webview": "2.8.0", - "react-native-wkwebview-reborn": "^2.0.0", "react-navigation": "^3.0.9", "react-test-render": "^1.1.1", "readable-stream": "^1.1.14", "request-promise-native": "^1.0.5", "secure-random": "^1.1.1", "stream-browserify": "^1.0.0", + "util": "^0.11.1", "wif": "^2.0.1" }, "react-native": { diff --git a/screen/lnd/lndViewAdditionalInvoiceInformation.js b/screen/lnd/lndViewAdditionalInvoiceInformation.js index 02fffe7f1..3b8ec1ecb 100644 --- a/screen/lnd/lndViewAdditionalInvoiceInformation.js +++ b/screen/lnd/lndViewAdditionalInvoiceInformation.js @@ -1,7 +1,15 @@ /* global alert */ import React, { Component } from 'react'; -import { Animated, StyleSheet, View, TouchableOpacity, Clipboard, Share } from 'react-native'; -import { BlueLoading, SafeBlueArea, BlueButton, BlueNavigationStyle, BlueText, BlueSpacing20 } from '../../BlueComponents'; +import { View, Share } from 'react-native'; +import { + BlueLoading, + BlueCopyTextToClipboard, + SafeBlueArea, + BlueButton, + BlueNavigationStyle, + BlueText, + BlueSpacing20, +} from '../../BlueComponents'; import PropTypes from 'prop-types'; import { QRCode } from 'react-native-custom-qr-codes'; /** @type {AppStorage} */ @@ -16,13 +24,6 @@ export default class LNDViewAdditionalInvoiceInformation extends Component { state = { walletInfo: undefined }; - copyToClipboard = () => { - this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { - Clipboard.setString(this.state.walletInfo.uris[0]); - setTimeout(() => this.setState({ addressText: this.state.walletInfo.uris[0] }), 1000); - }); - }; - async componentDidMount() { const fromWallet = this.props.navigation.getParam('fromWallet'); try { @@ -56,11 +57,7 @@ export default class LNDViewAdditionalInvoiceInformation extends Component { /> Open direct channel with this node: - - - {this.state.addressText} - - + { - this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { - Clipboard.setString(this.state.invoice.payment_request); - setTimeout(() => this.setState({ addressText: this.state.invoice.payment_request }), 1000); - }); - }; - onLayout = () => { const { height } = Dimensions.get('window'); this.setState({ qrCodeHeight: height > width ? width - 20 : width / 2 }); @@ -181,12 +183,11 @@ export default class LNDViewInvoice extends Component { flex: 1, alignItems: 'center', marginTop: 8, - paddingHorizontal: 16, justifyContent: 'space-between', }} onLayout={this.onLayout} > - + {invoice && invoice.amt && Please pay {invoice.amt} sats} {invoice && invoice.description && For: {invoice.description}} - - - {this.state.addressText} - - + { - this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { - Clipboard.setString(this.state.address); - setTimeout(() => this.setState({ addressText: this.state.address }), 1000); - }); - }; - render() { console.log('render() receive/details, address,secret=', this.state.address, ',', this.state.secret); if (this.state.isLoading) { @@ -94,11 +95,7 @@ export default class ReceiveDetails extends Component { backgroundColor={BlueApp.settings.brandingColor} logo={require('../../img/qr-code.png')} /> - - - {this.state.addressText} - - + { - this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { - Clipboard.setString(this.state.bip21); - setTimeout(() => this.setState({ addressText: this.state.address }), 1000); - }); - }; - determineSize = () => { if (width > 312) { return width - 48; @@ -133,11 +114,7 @@ export default class ReceiveAmount extends Component { )} - - - {this.state.bip21} - - + ); @@ -181,12 +158,3 @@ export default class ReceiveAmount extends Component { ); } } - -const styles = StyleSheet.create({ - address: { - marginVertical: 32, - fontSize: 15, - color: '#9aa0aa', - textAlign: 'center', - }, -}); diff --git a/screen/wallets/buyBitcoin.js b/screen/wallets/buyBitcoin.js index 5fea92290..ef299d1b2 100644 --- a/screen/wallets/buyBitcoin.js +++ b/screen/wallets/buyBitcoin.js @@ -1,6 +1,14 @@ import React, { Component } from 'react'; -import { Animated, Linking, StyleSheet, View, TouchableOpacity, Clipboard } from 'react-native'; -import { BlueNavigationStyle, BlueLoading, SafeBlueArea, BlueButton, BlueText, BlueSpacing40 } from '../../BlueComponents'; +import { Linking, View } from 'react-native'; +import { + BlueNavigationStyle, + BlueCopyTextToClipboard, + BlueLoading, + SafeBlueArea, + BlueButton, + BlueText, + BlueSpacing40, +} from '../../BlueComponents'; import PropTypes from 'prop-types'; /** @type {AppStorage} */ let BlueApp = require('../../BlueApp'); @@ -58,13 +66,6 @@ export default class BuyBitcoin extends Component { } } - copyToClipboard = () => { - this.setState({ addressText: loc.buyBitcoin.copied }, () => { - Clipboard.setString(this.state.address); - setTimeout(() => this.setState({ addressText: this.state.address }), 1000); - }); - }; - render() { console.log('render() receive/details, address,secret=', this.state.address, ',', this.state.secret); if (this.state.isLoading) { @@ -77,11 +78,7 @@ export default class BuyBitcoin extends Component { {loc.buyBitcoin.tap_your_address} - - - {this.state.addressText} - - + { - this.setState({ xpubText: loc.wallets.xpub.copiedToClipboard }, () => { - Clipboard.setString(this.state.xpub); - setTimeout(() => this.setState({ xpubText: this.state.xpub }), 1000); - }); - }; - onLayout = () => { const { height } = Dimensions.get('window'); this.setState({ qrCodeHeight: height > width ? width - 40 : width / 2 }); @@ -110,11 +103,7 @@ export default class WalletXpub extends Component { } })()} - - - {this.state.xpubText} - - + ); From a12035aba212254f09b711183c5e47d3b189bf09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Rodriguez=20Ve=CC=81lez?= Date: Mon, 21 Jan 2019 08:58:21 -0500 Subject: [PATCH 10/15] FIX: Restored wkwebview --- package-lock.json | 29 +++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 30 insertions(+) diff --git a/package-lock.json b/package-lock.json index cc80004f6..585ee2b6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9643,6 +9643,35 @@ } } }, + "react-native-wkwebview-reborn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-native-wkwebview-reborn/-/react-native-wkwebview-reborn-2.0.0.tgz", + "integrity": "sha512-upHQ471Wv4uV1/t6ZivYQVm05NyLRKZW8es/EdBl7UCdDoDVWD+1RBhu70ACPyW8EjX1DpMgK0SZvA4o0dt+8w==", + "requires": { + "fbjs": "^0.8.3" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, "react-navigation": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.0.9.tgz", diff --git a/package.json b/package.json index d760f146c..9a1e92b80 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "react-native-svg": "^9.0.0", "react-native-vector-icons": "^6.0.2", "react-native-webview": "2.8.0", + "react-native-wkwebview-reborn": "^2.0.0", "react-navigation": "^3.0.9", "react-test-render": "^1.1.1", "readable-stream": "^1.1.14", From d762ab543b289f5c4eac537bcc1b5f2a0ad09e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Rodriguez=20V=C3=A9lez?= Date: Mon, 21 Jan 2019 09:29:41 -0500 Subject: [PATCH 11/15] REF: bugfixes --- App.test.js | 46 +- App2.test.js | 16 +- BlueComponents.js | 50 ++ HDWallet.test.js | 144 ++-- LightningCustodianWallet.test.js | 42 +- .../bluewallet/bluewallet/MainActivity.java | 2 +- .../bluewallet/MainApplication.java | 30 +- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle | 22 + ios/BlueWallet.xcodeproj/project.pbxproj | 26 + package-lock.json | 760 ++++++++++++------ package.json | 25 +- .../lndViewAdditionalInvoiceInformation.js | 34 +- screen/lnd/lndViewInvoice.js | 38 +- screen/receive/details.js | 34 +- screen/receive/receiveAmount.js | 38 +- screen/settings/about.js | 2 +- screen/wallets/buyBitcoin.js | 34 +- screen/wallets/xpub.js | 17 +- 20 files changed, 831 insertions(+), 533 deletions(-) diff --git a/App.test.js b/App.test.js index b5c8c685a..072984948 100644 --- a/App.test.js +++ b/App.test.js @@ -57,7 +57,7 @@ describe('unit - LegacyWallet', function() { let b = LegacyWallet.fromJson(key); assert(key === JSON.stringify(b)); - assert.equal(key, JSON.stringify(b)); + assert.strictEqual(key, JSON.stringify(b)); }); it('can validate addresses', () => { @@ -118,8 +118,8 @@ it('Appstorage - loadFromDisk works', async () => { let Storage2 = new AppStorage(); await Storage2.loadFromDisk(); - assert.equal(Storage2.wallets.length, 1); - assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); let isEncrypted = await Storage2.storageIsEncrypted(); assert.ok(!isEncrypted); @@ -146,7 +146,7 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(!isEncrypted); await Storage.encryptStorage('password'); isEncrypted = await Storage.storageIsEncrypted(); - assert.equal(Storage.cachedPassword, 'password'); + assert.strictEqual(Storage.cachedPassword, 'password'); assert.ok(isEncrypted); // saved, now trying to load, using good password @@ -156,8 +156,8 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); let loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.equal(Storage2.wallets.length, 1); - assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); // now trying to load, using bad password @@ -166,7 +166,7 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('passwordBAD'); assert.ok(!loadResult); - assert.equal(Storage2.wallets.length, 0); + assert.strictEqual(Storage2.wallets.length, 0); // now, trying case with adding data after decrypt. // saveToDisk should be handled correctly @@ -176,14 +176,14 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.equal(Storage2.wallets.length, 1); - assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets.length, 1); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); w = new SegwitP2SHWallet(); w.setLabel('testlabel2'); await w.generate(); Storage2.wallets.push(w); - assert.equal(Storage2.wallets.length, 2); - assert.equal(Storage2.wallets[1].getLabel(), 'testlabel2'); + assert.strictEqual(Storage2.wallets.length, 2); + assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); await Storage2.saveToDisk(); // saved to encrypted storage after load. next load should be successfull Storage2 = new AppStorage(); @@ -191,15 +191,15 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.equal(Storage2.wallets.length, 2); - assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); - assert.equal(Storage2.wallets[1].getLabel(), 'testlabel2'); + assert.strictEqual(Storage2.wallets.length, 2); + assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); // next, adding new `fake` storage which should be unlocked with `fake` password let createFakeStorageResult = await Storage2.createFakeStorage('fakePassword'); assert.ok(createFakeStorageResult); - assert.equal(Storage2.wallets.length, 0); - assert.equal(Storage2.cachedPassword, 'fakePassword'); + assert.strictEqual(Storage2.wallets.length, 0); + assert.strictEqual(Storage2.cachedPassword, 'fakePassword'); w = new SegwitP2SHWallet(); w.setLabel('fakewallet'); await w.generate(); @@ -210,14 +210,14 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { let Storage3 = new AppStorage(); loadResult = await Storage3.loadFromDisk('password'); assert.ok(loadResult); - assert.equal(Storage3.wallets.length, 2); - assert.equal(Storage3.wallets[0].getLabel(), 'testlabel'); + assert.strictEqual(Storage3.wallets.length, 2); + assert.strictEqual(Storage3.wallets[0].getLabel(), 'testlabel'); // fake: Storage3 = new AppStorage(); loadResult = await Storage3.loadFromDisk('fakePassword'); assert.ok(loadResult); - assert.equal(Storage3.wallets.length, 1); - assert.equal(Storage3.wallets[0].getLabel(), 'fakewallet'); + assert.strictEqual(Storage3.wallets.length, 1); + assert.strictEqual(Storage3.wallets[0].getLabel(), 'fakewallet'); }); it('Wallet can fetch UTXO', async () => { @@ -245,7 +245,7 @@ it('Wallet can fetch TXs', async () => { let w = new LegacyWallet(); w._address = '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'; await w.fetchTransactions(); - assert.equal(w.getTransactions().length, 2); + assert.strictEqual(w.getTransactions().length, 2); let tx0 = w.getTransactions()[0]; let txExpected = { @@ -296,7 +296,7 @@ it('Wallet can fetch TXs', async () => { delete txExpected.confirmations; delete tx0.preference; // that bs is not always the same delete txExpected.preference; - assert.deepEqual(tx0, txExpected); + assert.deepStrictEqual(tx0, txExpected); }); describe('currency', () => { @@ -321,7 +321,7 @@ describe('currency', () => { await currency.setPrefferedCurrency(FiatUnit.EUR); await currency.startUpdater(); let preferred = await currency.getPreferredCurrency(); - assert.equal(preferred.endPointKey, 'EUR'); + assert.strictEqual(preferred.endPointKey, 'EUR'); cur = JSON.parse(AsyncStorage.storageCache[AppStorage.EXCHANGE_RATES]); assert.ok(cur['BTC_EUR'] > 0); }); diff --git a/App2.test.js b/App2.test.js index 90f7695d3..a817d57b4 100644 --- a/App2.test.js +++ b/App2.test.js @@ -14,7 +14,10 @@ it('bip38 decodes', async () => { { N: 1, r: 8, p: 8 }, // using non-default parameters to speed it up (not-bip38 compliant) ); - assert.equal(wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), '5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR'); + assert.strictEqual( + wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), + '5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR', + ); }); it('bip38 decodes slow', async () => { @@ -29,7 +32,10 @@ it('bip38 decodes slow', async () => { let encryptedKey = '6PnU5voARjBBykwSddwCdcn6Eu9EcsK24Gs5zWxbJbPZYW7eiYQP8XgKbN'; let decryptedKey = await bip38.decrypt(encryptedKey, 'qwerty', status => process.stdout.write(parseInt(status.percent) + '%\r')); - assert.equal(wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc'); + assert.strictEqual( + wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), + 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc', + ); }); describe('Watch only wallet', () => { @@ -46,16 +52,16 @@ describe('Watch only wallet', () => { w.setSecret('167zK5iZrs1U6piDqubD3FjRqUTM2CZnb8'); await w.fetchTransactions(); - assert.equal(w.getTransactions().length, 233); + assert.strictEqual(w.getTransactions().length, 233); w = new WatchOnlyWallet(); w.setSecret('1BiJW1jyUaxcJp2JWwbPLPzB1toPNWTFJV'); await w.fetchTransactions(); - assert.equal(w.getTransactions().length, 2); + assert.strictEqual(w.getTransactions().length, 2); // fetch again and make sure no duplicates await w.fetchTransactions(); - assert.equal(w.getTransactions().length, 2); + assert.strictEqual(w.getTransactions().length, 2); }); it('can fetch complex TXs', async () => { diff --git a/BlueComponents.js b/BlueComponents.js index f00a51ab8..2964bd325 100644 --- a/BlueComponents.js +++ b/BlueComponents.js @@ -16,6 +16,7 @@ import { SafeAreaView, Clipboard, Platform, + LayoutAnimation, TextInput, } from 'react-native'; import LinearGradient from 'react-native-linear-gradient'; @@ -193,6 +194,55 @@ export const BlueCopyToClipboardButton = ({ stringToCopy }) => { ); }; +export class BlueCopyTextToClipboard extends Component { + static propTypes = { + text: PropTypes.string, + }; + + static defaultProps = { + text: '', + }; + + state = { hasTappedText: false }; + + copyToClipboard = () => { + LayoutAnimation.configureNext(LayoutAnimation.Presets.spring, () => { + Clipboard.setString(this.props.text); + setTimeout(() => { + LayoutAnimation.configureNext(LayoutAnimation.Presets.spring); + this.setState({ hasTappedText: false }); + }, 1000); + }); + this.setState({ hasTappedText: true }); + }; + + render() { + return ( + + + + {this.props.text} + + {this.state.hasTappedText && ( + + {loc.wallets.xpub.copiedToClipboard} + + )} + + + ); + } +} + +const styleCopyTextToClipboard = StyleSheet.create({ + address: { + marginVertical: 32, + fontSize: 15, + color: '#9aa0aa', + textAlign: 'center', + }, +}); + export class SafeBlueArea extends Component { render() { return ( diff --git a/HDWallet.test.js b/HDWallet.test.js index 880cbcf0c..c60f73f31 100644 --- a/HDWallet.test.js +++ b/HDWallet.test.js @@ -6,13 +6,13 @@ let bitcoin = require('bitcoinjs-lib'); it('can convert witness to address', () => { let address = SegwitP2SHWallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8'); - assert.equal(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7'); + assert.strictEqual(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7'); address = SegwitBech32Wallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8'); - assert.equal(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv'); + assert.strictEqual(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv'); address = SegwitBech32Wallet.scriptPubKeyToAddress('00144d757460da5fcaf84cc22f3847faaa1078e84f6a'); - assert.equal(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7'); + assert.strictEqual(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7'); }); it('can create a Segwit HD (BIP49)', async function() { @@ -21,39 +21,39 @@ it('can create a Segwit HD (BIP49)', async function() { 'honey risk juice trip orient galaxy win situate shoot anchor bounce remind horse traffic exotic since escape mimic ramp skin judge owner topple erode'; let hd = new HDSegwitP2SHWallet(); hd.setSecret(mnemonic); - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); - assert.equal('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); - assert.equal('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); - assert.equal(true, hd.validateMnemonic()); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); + assert.strictEqual('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); + assert.strictEqual('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); + assert.strictEqual(true, hd.validateMnemonic()); await hd.fetchBalance(); - assert.equal(hd.getBalance(), 0); + assert.strictEqual(hd.getBalance(), 0); assert.ok(hd._lastTxFetch === 0); await hd.fetchTransactions(); assert.ok(hd._lastTxFetch > 0); - assert.equal(hd.transactions.length, 4); + assert.strictEqual(hd.transactions.length, 4); - assert.equal('L4MqtwJm6hkbACLG4ho5DF8GhcXdLEbbvpJnbzA9abfD6RDpbr2m', hd._getExternalWIFByIndex(0)); - assert.equal( + assert.strictEqual('L4MqtwJm6hkbACLG4ho5DF8GhcXdLEbbvpJnbzA9abfD6RDpbr2m', hd._getExternalWIFByIndex(0)); + assert.strictEqual( 'ypub6WhHmKBmHNjcrUVNCa3sXduH9yxutMipDcwiKW31vWjcMbfhQHjXdyx4rqXbEtVgzdbhFJ5mZJWmfWwnP4Vjzx97admTUYKQt6b9D7jjSCp', hd.getXpub(), ); // checking that internal pointer and async address getter return the same address let freeAddress = await hd.getAddressAsync(); - assert.equal(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); + assert.strictEqual(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); let freeChangeAddress = await hd.getChangeAddressAsync(); - assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), freeChangeAddress); + assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), freeChangeAddress); }); it('Segwit HD (BIP49) can generate addressess only via ypub', async function() { let ypub = 'ypub6WhHmKBmHNjcrUVNCa3sXduH9yxutMipDcwiKW31vWjcMbfhQHjXdyx4rqXbEtVgzdbhFJ5mZJWmfWwnP4Vjzx97admTUYKQt6b9D7jjSCp'; let hd = new HDSegwitP2SHWallet(); hd._xpub = ypub; - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); - assert.equal('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); - assert.equal('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); + assert.strictEqual('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); + assert.strictEqual('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); }); it('can generate Segwit HD (BIP49)', async () => { @@ -88,56 +88,56 @@ it('HD (BIP49) can create TX', async () => { await hd.getChangeAddressAsync(); // to refresh internal pointer to next free address await hd.getAddressAsync(); // to refresh internal pointer to next free address let txhex = hd.createTx(hd.utxo, 0.000014, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); - assert.equal( + assert.strictEqual( txhex, '010000000001029d98d81fe2b596fd79e845fa9f38d7e0b6fb73303c40fac604d04df1fa137aee00000000171600142f18e8406c9d210f30c901b24e5feeae78784eb7ffffffff67fb86f310df24e508d40fce9511c7fde4dd4ee91305fd08a074279a70e2cd22000000001716001468dde644410cc789d91a7f36b823f38369755a1cffffffff02780500000000000017a914a3a65daca3064280ae072b9d6773c027b30abace87dc0500000000000017a914850f4dbc255654de2c12c6f6d79cf9cb756cad038702483045022100dc8390a9fd34c31259fa47f9fc182f20d991110ecfd5b58af1cf542fe8de257a022004c2d110da7b8c4127675beccc63b46fd65c706951f090fd381fa3b21d3c5c08012102edd141c5a27a726dda66be10a38b0fd3ccbb40e7c380034aaa43a1656d5f4dd60247304402207c0aef8313d55e72474247daad955979f62e56d1cbac5f2d14b8b022c6ce112602205d9aa3804f04624b12ab8a5ab0214b529c531c2f71c27c6f18aba6502a6ea0a80121030db3c49461a5e539e97bab62ab2b8f88151d1c2376493cf73ef1d02ef60637fd00000000', ); txhex = hd.createTx(hd.utxo, 0.000005, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); var tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 1); - assert.equal(tx.outs.length, 2); - assert.equal(tx.outs[0].value, 500); - assert.equal(tx.outs[1].value, 400); + assert.strictEqual(tx.ins.length, 1); + assert.strictEqual(tx.outs.length, 2); + assert.strictEqual(tx.outs[0].value, 500); + assert.strictEqual(tx.outs[1].value, 400); let chunksIn = bitcoin.script.decompile(tx.outs[0].script); let toAddress = bitcoin.address.fromOutputScript(chunksIn); chunksIn = bitcoin.script.decompile(tx.outs[1].script); let changeAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); - assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); // txhex = hd.createTx(hd.utxo, 0.000015, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 2); - assert.equal(tx.outs.length, 2); + assert.strictEqual(tx.ins.length, 2); + assert.strictEqual(tx.outs.length, 2); // txhex = hd.createTx(hd.utxo, 0.00025, 0.00001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 7); - assert.equal(tx.outs.length, 1); + assert.strictEqual(tx.ins.length, 7); + assert.strictEqual(tx.outs.length, 1); chunksIn = bitcoin.script.decompile(tx.outs[0].script); toAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); // checking that change amount is at least 3x of fee, otherwise screw the change, just add it to fee. // theres 0.00003 on UTXOs, lets transfer (0.00003 - 100sat), soo fee is equal to change (100 sat) // which throws @dust error if broadcasted txhex = hd.createTx(hd.utxo, 0.000028, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 2); - assert.equal(tx.outs.length, 1); // only 1 output, which means change is neglected - assert.equal(tx.outs[0].value, 2800); + assert.strictEqual(tx.ins.length, 2); + assert.strictEqual(tx.outs.length, 1); // only 1 output, which means change is neglected + assert.strictEqual(tx.outs[0].value, 2800); }); it('Segwit HD (BIP49) can fetch UTXO', async function() { let hd = new HDSegwitP2SHWallet(); hd.usedAddresses = ['1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55', '1BiTCHeYzJNMxBLFCMkwYXNdFEdPJP53ZV']; // hacking internals await hd.fetchUtxo(); - assert.equal(hd.utxo.length, 11); + assert.strictEqual(hd.utxo.length, 11); assert.ok(typeof hd.utxo[0].confirmations === 'number'); assert.ok(hd.utxo[0].txid); assert.ok(hd.utxo[0].vout); @@ -168,7 +168,7 @@ it('can work with malformed mnemonic', () => { hd = new HDSegwitP2SHWallet(); hd.setSecret(mnemonic); let seed2 = hd.getMnemonicToSeedHex(); - assert.equal(seed1, seed2); + assert.strictEqual(seed1, seed2); assert.ok(hd.validateMnemonic()); }); @@ -182,28 +182,28 @@ it('can create a Legacy HD (BIP44)', async function() { let mnemonic = process.env.HD_MNEMONIC_BREAD; let hd = new HDLegacyP2PKHWallet(); hd.setSecret(mnemonic); - assert.equal(hd.validateMnemonic(), true); - assert.equal(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); - assert.equal(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); - assert.equal(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); - assert.equal(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); - assert.equal( + assert.strictEqual(hd.validateMnemonic(), true); + assert.strictEqual(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); + assert.strictEqual(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); + assert.strictEqual(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); + assert.strictEqual(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); + assert.strictEqual( hd.getXpub(), 'xpub6CQdfC3v9gU86eaSn7AhUFcBVxiGhdtYxdC5Cw2vLmFkfth2KXCMmYcPpvZviA89X6DXDs4PJDk5QVL2G2xaVjv7SM4roWHr1gR4xB3Z7Ps', ); - assert.equal(hd._getExternalWIFByIndex(0), 'L1hqNoJ26YuCdujMBJfWBNfgf4Jo7AcKFvcNcKLoMtoJDdDtRq7Q'); - assert.equal(hd._getExternalWIFByIndex(1), 'KyyH4h59iatJWwFfiYPnYkw39SP7cBwydC3xzszsBBXHpfwz9cKb'); - assert.equal(hd._getInternalWIFByIndex(0), 'Kx3QkrfemEEV49Mj5oWfb4bsWymboPdstta7eN3kAzop9apxYEFP'); - assert.equal(hd._getInternalWIFByIndex(1), 'Kwfg1EDjFapN9hgwafdNPEH22z3vkd4gtG785vXXjJ6uvVWAJGtr'); + assert.strictEqual(hd._getExternalWIFByIndex(0), 'L1hqNoJ26YuCdujMBJfWBNfgf4Jo7AcKFvcNcKLoMtoJDdDtRq7Q'); + assert.strictEqual(hd._getExternalWIFByIndex(1), 'KyyH4h59iatJWwFfiYPnYkw39SP7cBwydC3xzszsBBXHpfwz9cKb'); + assert.strictEqual(hd._getInternalWIFByIndex(0), 'Kx3QkrfemEEV49Mj5oWfb4bsWymboPdstta7eN3kAzop9apxYEFP'); + assert.strictEqual(hd._getInternalWIFByIndex(1), 'Kwfg1EDjFapN9hgwafdNPEH22z3vkd4gtG785vXXjJ6uvVWAJGtr'); await hd.fetchBalance(); - assert.equal(hd.balance, 0); + assert.strictEqual(hd.balance, 0); assert.ok(hd._lastTxFetch === 0); await hd.fetchTransactions(); assert.ok(hd._lastTxFetch > 0); - assert.equal(hd.transactions.length, 4); - assert.equal(hd.next_free_address_index, 1); - assert.equal(hd.next_free_change_address_index, 1); + assert.strictEqual(hd.transactions.length, 4); + assert.strictEqual(hd.next_free_address_index, 1); + assert.strictEqual(hd.next_free_change_address_index, 1); for (let tx of hd.getTransactions()) { assert.ok(tx.value === 1000 || tx.value === 1377 || tx.value === -1377 || tx.value === -1000); @@ -211,17 +211,17 @@ it('can create a Legacy HD (BIP44)', async function() { // checking that internal pointer and async address getter return the same address let freeAddress = await hd.getAddressAsync(); - assert.equal(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); + assert.strictEqual(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); }); it('Legacy HD (BIP44) can generate addressess based on xpub', async function() { let xpub = 'xpub6CQdfC3v9gU86eaSn7AhUFcBVxiGhdtYxdC5Cw2vLmFkfth2KXCMmYcPpvZviA89X6DXDs4PJDk5QVL2G2xaVjv7SM4roWHr1gR4xB3Z7Ps'; let hd = new HDLegacyP2PKHWallet(); hd._xpub = xpub; - assert.equal(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); - assert.equal(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); - assert.equal(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); - assert.equal(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); + assert.strictEqual(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); + assert.strictEqual(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); + assert.strictEqual(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); + assert.strictEqual(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); }); it('Legacy HD (BIP44) can create TX', async () => { @@ -239,38 +239,38 @@ it('Legacy HD (BIP44) can create TX', async () => { await hd.getAddressAsync(); // to refresh internal pointer to next free address let txhex = hd.createTx(hd.utxo, 0.0008, 0.000005, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); - assert.equal( + assert.strictEqual( txhex, '01000000045fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f030000006b4830450221009be5dbe37db5a8409ddce3570140c95d162a07651b1e48cf39a6a741892adc53022061a25b8024d8f3cb1b94f264245de0c6e9a103ea557ddeb66245b40ec8e9384b012102ad7b2216f3a2b38d56db8a7ee5c540fd12c4bbb7013106eff78cc2ace65aa002ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f000000006a47304402207106e9fa4e2e35d351fbccc9c0fad3356d85d0cd35a9d7e9cbcefce5440da1e5022073c1905b5927447378c0f660e62900c1d4b2691730799458889fb87d86f5159101210316e84a2556f30a199541633f5dda6787710ccab26771b7084f4c9e1104f47667ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f020000006a4730440220250b15094096c4d4fe6793da8e45fa118ed057cc2759a480c115e76e23590791022079cdbdc9e630d713395602071e2837ecc1d192a36a24d8ec71bc51d5e62b203b01210316e84a2556f30a199541633f5dda6787710ccab26771b7084f4c9e1104f47667ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f010000006b483045022100879da610e6ed12c84d55f12baf3bf6222d59b5282502b3c7f4db1d22152c16900220759a1c88583cbdaf7fde21c273ad985dfdf94a2fa85e42ee41dcea2fd69136fd012102ad7b2216f3a2b38d56db8a7ee5c540fd12c4bbb7013106eff78cc2ace65aa002ffffffff02803801000000000017a914a3a65daca3064280ae072b9d6773c027b30abace872c4c0000000000001976a9146ee5e3e66dc73587a3a2d77a1a6c8554fae21b8a88ac00000000', ); var tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 4); - assert.equal(tx.outs.length, 2); - assert.equal(tx.outs[0].value, 80000); // payee - assert.equal(tx.outs[1].value, 19500); // change + assert.strictEqual(tx.ins.length, 4); + assert.strictEqual(tx.outs.length, 2); + assert.strictEqual(tx.outs[0].value, 80000); // payee + assert.strictEqual(tx.outs[1].value, 19500); // change let chunksIn = bitcoin.script.decompile(tx.outs[0].script); let toAddress = bitcoin.address.fromOutputScript(chunksIn); chunksIn = bitcoin.script.decompile(tx.outs[1].script); let changeAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); - assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); + assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); // checking that change amount is at least 3x of fee, otherwise screw the change, just add it to fee. // theres 0.001 on UTXOs, lets transfer (0.001 - 100sat), soo fee is equal to change (100 sat) // which throws @dust error if broadcasted txhex = hd.createTx(hd.utxo, 0.000998, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.equal(tx.ins.length, 4); - assert.equal(tx.outs.length, 1); // only 1 output, which means change is neglected - assert.equal(tx.outs[0].value, 99800); + assert.strictEqual(tx.ins.length, 4); + assert.strictEqual(tx.outs.length, 1); // only 1 output, which means change is neglected + assert.strictEqual(tx.outs[0].value, 99800); }); it('Legacy HD (BIP44) can fetch UTXO', async function() { let hd = new HDLegacyP2PKHWallet(); hd.usedAddresses = ['1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55', '1BiTCHeYzJNMxBLFCMkwYXNdFEdPJP53ZV']; // hacking internals await hd.fetchUtxo(); - assert.equal(hd.utxo.length, 11); + assert.strictEqual(hd.utxo.length, 11); assert.ok(typeof hd.utxo[0].confirmations === 'number'); assert.ok(hd.utxo[0].txid); assert.ok(hd.utxo[0].vout); @@ -290,31 +290,31 @@ it('HD breadwallet works', async function() { let hdBread = new HDLegacyBreadwalletWallet(); hdBread.setSecret(process.env.HD_MNEMONIC_BREAD); - assert.equal(hdBread.validateMnemonic(), true); - assert.equal(hdBread._getExternalAddressByIndex(0), '1ARGkNMdsBE36fJhddSwf8PqBXG3s4d2KU'); - assert.equal(hdBread._getInternalAddressByIndex(0), '1JLvA5D7RpWgChb4A5sFcLNrfxYbyZdw3V'); + assert.strictEqual(hdBread.validateMnemonic(), true); + assert.strictEqual(hdBread._getExternalAddressByIndex(0), '1ARGkNMdsBE36fJhddSwf8PqBXG3s4d2KU'); + assert.strictEqual(hdBread._getInternalAddressByIndex(0), '1JLvA5D7RpWgChb4A5sFcLNrfxYbyZdw3V'); - assert.equal( + assert.strictEqual( hdBread.getXpub(), 'xpub68nLLEi3KERQY7jyznC9PQSpSjmekrEmN8324YRCXayMXaavbdEJsK4gEcX2bNf9vGzT4xRks9utZ7ot1CTHLtdyCn9udvv1NWvtY7HXroh', ); await hdBread.fetchBalance(); - assert.equal(hdBread.balance, 0); + assert.strictEqual(hdBread.balance, 0); assert.ok(hdBread._lastTxFetch === 0); await hdBread.fetchTransactions(); assert.ok(hdBread._lastTxFetch > 0); - assert.equal(hdBread.transactions.length, 177); + assert.strictEqual(hdBread.transactions.length, 177); for (let tx of hdBread.getTransactions()) { assert.ok(tx.confirmations); } - assert.equal(hdBread.next_free_address_index, 10); - assert.equal(hdBread.next_free_change_address_index, 118); + assert.strictEqual(hdBread.next_free_address_index, 10); + assert.strictEqual(hdBread.next_free_change_address_index, 118); // checking that internal pointer and async address getter return the same address let freeAddress = await hdBread.getAddressAsync(); - assert.equal(hdBread._getExternalAddressByIndex(hdBread.next_free_address_index), freeAddress); + assert.strictEqual(hdBread._getExternalAddressByIndex(hdBread.next_free_address_index), freeAddress); }); it('can convert blockchain.info TX to blockcypher TX format', () => { diff --git a/LightningCustodianWallet.test.js b/LightningCustodianWallet.test.js index d6623868c..e997b28a6 100644 --- a/LightningCustodianWallet.test.js +++ b/LightningCustodianWallet.test.js @@ -152,7 +152,7 @@ describe('LightningCustodianWallet', () => { } await l2.fetchTransactions(); - assert.equal(l2.transactions_raw.length, txLen + 1); + assert.strictEqual(l2.transactions_raw.length, txLen + 1); // transactions became more after paying an invoice // now, trying to pay duplicate invoice @@ -165,7 +165,7 @@ describe('LightningCustodianWallet', () => { } assert.ok(caughtError); await l2.fetchTransactions(); - assert.equal(l2.transactions_raw.length, txLen + 1); + assert.strictEqual(l2.transactions_raw.length, txLen + 1); // havent changed since last time end = +new Date(); if ((end - start) / 1000 > 9) { @@ -191,21 +191,21 @@ describe('LightningCustodianWallet', () => { await lNew.createAccount(true); await lNew.authorize(); await lNew.fetchBalance(); - assert.equal(lNew.balance, 0); + assert.strictEqual(lNew.balance, 0); let invoices = await lNew.getUserInvoices(); let invoice = await lNew.addInvoice(1, 'test memo'); let invoices2 = await lNew.getUserInvoices(); - assert.equal(invoices2.length, invoices.length + 1); + assert.strictEqual(invoices2.length, invoices.length + 1); assert.ok(invoices2[0].ispaid === false); assert.ok(invoices2[0].description); - assert.equal(invoices2[0].description, 'test memo'); + assert.strictEqual(invoices2[0].description, 'test memo'); assert.ok(invoices2[0].payment_request); assert.ok(invoices2[0].timestamp); assert.ok(invoices2[0].expire_time); - assert.equal(invoices2[0].amt, 1); + assert.strictEqual(invoices2[0].amt, 1); for (let inv of invoices2) { - assert.equal(inv.type, 'user_invoice'); + assert.strictEqual(inv.type, 'user_invoice'); } await lOld.fetchBalance(); @@ -225,11 +225,11 @@ describe('LightningCustodianWallet', () => { await lOld.fetchBalance(); await lNew.fetchBalance(); - assert.equal(oldBalance - lOld.balance, 1); - assert.equal(lNew.balance, 1); + assert.strictEqual(oldBalance - lOld.balance, 1); + assert.strictEqual(lNew.balance, 1); await lOld.fetchTransactions(); - assert.equal(lOld.transactions_raw.length, txLen + 1, 'internal invoice should also produce record in payer`s tx list'); + assert.strictEqual(lOld.transactions_raw.length, txLen + 1, 'internal invoice should also produce record in payer`s tx list'); let newTx = lOld.transactions_raw.slice().pop(); assert.ok(typeof newTx.fee !== 'undefined'); assert.ok(newTx.value); @@ -244,8 +244,8 @@ describe('LightningCustodianWallet', () => { await lNew.payInvoice(invoice); await lOld.fetchBalance(); await lNew.fetchBalance(); - assert.equal(lOld.balance - oldBalance, 1); - assert.equal(lNew.balance, 0); + assert.strictEqual(lOld.balance - oldBalance, 1); + assert.strictEqual(lNew.balance, 0); // now, paying same internal invoice. should fail: @@ -261,16 +261,16 @@ describe('LightningCustodianWallet', () => { assert.ok(coughtError); await lOld.fetchTransactions(); - assert.equal(txLen, lOld.transactions_raw.length, 'tx count should not be changed'); - assert.equal(invLen, (await lNew.getUserInvoices()).length, 'invoices count should not be changed'); + assert.strictEqual(txLen, lOld.transactions_raw.length, 'tx count should not be changed'); + assert.strictEqual(invLen, (await lNew.getUserInvoices()).length, 'invoices count should not be changed'); // testing how limiting works: - assert.equal(lNew.user_invoices_raw.length, 1); + assert.strictEqual(lNew.user_invoices_raw.length, 1); await lNew.addInvoice(666, 'test memo 2'); invoices = await lNew.getUserInvoices(1); - assert.equal(invoices.length, 2); - assert.equal(invoices[0].amt, 1); - assert.equal(invoices[1].amt, 666); + assert.strictEqual(invoices.length, 2); + assert.strictEqual(invoices[0].amt, 1); + assert.strictEqual(invoices[1].amt, 666); }); it('can pay free amount (tip) invoice', async function() { @@ -319,7 +319,7 @@ describe('LightningCustodianWallet', () => { let decoded = await l2.decodeInvoice(invoice); assert.ok(decoded.payment_hash); assert.ok(decoded.description); - assert.equal(+decoded.num_satoshis, 0); + assert.strictEqual(+decoded.num_satoshis, 0); await l2.checkRouteInvoice(invoice); @@ -342,10 +342,10 @@ describe('LightningCustodianWallet', () => { } await l2.fetchTransactions(); - assert.equal(l2.transactions_raw.length, txLen + 1); + assert.strictEqual(l2.transactions_raw.length, txLen + 1); // transactions became more after paying an invoice await l2.fetchBalance(); - assert.equal(oldBalance - l2.balance, 3); + assert.strictEqual(oldBalance - l2.balance, 3); }); }); diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java index 323c5b832..8b6c6b507 100644 --- a/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java +++ b/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java @@ -1,4 +1,4 @@ -package io.bluewallet.bluewallet; +package com.bluewallet; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java index fa9fefd35..2f8ffaf88 100644 --- a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java +++ b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java @@ -3,19 +3,14 @@ package io.bluewallet.bluewallet; import android.app.Application; import com.facebook.react.ReactApplication; -import com.reactnativecommunity.webview.RNCWebViewPackage; -import com.oblador.vectoricons.VectorIconsPackage; -import org.reactnative.camera.RNCameraPackage; import io.sentry.RNSentryPackage; import com.bitgo.randombytes.RandomBytesPackage; import im.shimo.react.prompt.RNPromptPackage; import com.BV.LinearGradient.LinearGradientPackage; import com.mkuczera.RNReactNativeHapticFeedbackPackage; import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; -import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; -import com.rnfs.RNFSPackage; -import com.learnium.RNDeviceInfo.RNDeviceInfo; -import org.reactnative.camera.RNCameraPackage; +import com.reactnativecommunity.webview.RNCWebViewPackage; +import com.oblador.vectoricons.VectorIconsPackage; import com.horcrux.svg.SvgPackage; import io.sentry.RNSentryPackage; import com.bitgo.randombytes.RandomBytesPackage; @@ -28,6 +23,7 @@ import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; import com.facebook.soloader.SoLoader; +import org.reactnative.camera.RNCameraPackage; import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; import com.rnfs.RNFSPackage; @@ -46,18 +42,24 @@ public class MainApplication extends Application implements ReactApplication { protected List getPackages() { return Arrays.asList( new MainReactPackage(), - new RNCWebViewPackage(), - new SvgPackage(), - new RNCameraPackage(), new RNSentryPackage(), new RandomBytesPackage(), - new GoogleAnalyticsBridgePackage(), - new RNFSPackage(), - new RNDeviceInfo(), - new VectorIconsPackage(), new RNPromptPackage(), new LinearGradientPackage(), new RNReactNativeHapticFeedbackPackage(), + new GoogleAnalyticsBridgePackage(), + new RNCWebViewPackage(), + new RNFSPackage() , + new VectorIconsPackage(), + new SvgPackage(), + new RNSentryPackage(), + new RandomBytesPackage(), + new RNPromptPackage(), + new LinearGradientPackage(), + new RNReactNativeHapticFeedbackPackage(), + new GoogleAnalyticsBridgePackage(), + new RNDeviceInfo(), + new RNCameraPackage(), new RNGestureHandlerPackage() ); } diff --git a/android/build.gradle b/android/build.gradle index cfbb2b746..b6d4c5bb4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - buildToolsVersion = "27.0.3" + buildToolsVersion = "28.0.3" minSdkVersion = 16 compileSdkVersion = 27 targetSdkVersion = 26 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index e4a6127b9..e9b9ac74b 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Sat Jan 19 02:29:20 GMT 2019 +#Wed Jan 16 14:12:19 EST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/android/settings.gradle b/android/settings.gradle index 3e900d60d..85befb1c6 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,4 +1,26 @@ rootProject.name = 'BlueWallet' +include ':react-native-sentry' +project(':react-native-sentry').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sentry/android') +include ':react-native-randombytes' +project(':react-native-randombytes').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-randombytes/android') +include ':react-native-prompt-android' +project(':react-native-prompt-android').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-prompt-android/android') +include ':react-native-linear-gradient' +project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') +include ':react-native-haptic-feedback' +project(':react-native-haptic-feedback').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-haptic-feedback/android') +include ':react-native-google-analytics-bridge' +project(':react-native-google-analytics-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-analytics-bridge/android') +include ':react-native-gesture-handler' +project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') +include ':react-native-fs' +project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') +include ':react-native-webview' +project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') +include ':react-native-device-info' +project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') +include ':react-native-camera' +project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') include ':react-native-webview' project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') include ':react-native-svg' diff --git a/ios/BlueWallet.xcodeproj/project.pbxproj b/ios/BlueWallet.xcodeproj/project.pbxproj index 891a6f9f6..afd890b11 100644 --- a/ios/BlueWallet.xcodeproj/project.pbxproj +++ b/ios/BlueWallet.xcodeproj/project.pbxproj @@ -499,6 +499,13 @@ remoteGlobalIDString = 0974579A1D2A440A000D9368; remoteInfo = RCTWKWebView; }; + B4DA894521F6056C00A3CB6C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5F3DCC24027F4B1EAACBAE3C /* RNCWebView.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNCWebView; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -1032,6 +1039,14 @@ name = Products; sourceTree = ""; }; + B4DA891821F6056C00A3CB6C /* Products */ = { + isa = PBXGroup; + children = ( + B4DA894621F6056C00A3CB6C /* libRNCWebView.a */, + ); + name = Products; + sourceTree = ""; + }; FC7D399B1A1043C49023DC79 /* Resources */ = { isa = PBXGroup; children = ( @@ -1237,6 +1252,10 @@ ProductGroup = B4C5B8E121F2DF3000A845C4 /* Products */; ProjectRef = 3853DFD4C6D44BB8B17AEDF0 /* RNCamera.xcodeproj */; }, + { + ProductGroup = B4DA891821F6056C00A3CB6C /* Products */; + ProjectRef = 5F3DCC24027F4B1EAACBAE3C /* RNCWebView.xcodeproj */; + }, { ProductGroup = B4C5B8E521F2DF3000A845C4 /* Products */; ProjectRef = 03D541ACCDD2451D9971158E /* RNDeviceInfo.xcodeproj */; @@ -1691,6 +1710,13 @@ remoteRef = B4C5BAB521F3708C00A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + B4DA894621F6056C00A3CB6C /* libRNCWebView.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNCWebView.a; + remoteRef = B4DA894521F6056C00A3CB6C /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ diff --git a/package-lock.json b/package-lock.json index 53b6411e3..585ee2b6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "3.6.1", + "version": "3.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1316,15 +1316,15 @@ } }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { @@ -2012,137 +2012,17 @@ } }, "babel-eslint": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", - "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/traverse": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", - "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0-beta.44" - } - }, - "@babel/generator": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", - "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44", - "jsesc": "^2.5.1", - "lodash": "^4.2.0", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", - "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.44", - "@babel/template": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", - "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", - "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/highlight": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", - "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^3.0.0" - } - }, - "@babel/template": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", - "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "lodash": "^4.2.0" - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", - "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/generator": "7.0.0-beta.44", - "@babel/helper-function-name": "7.0.0-beta.44", - "@babel/helper-split-export-declaration": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "debug": "^3.1.0", - "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.2.0" - } - }, - "@babel/types": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", - "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - } } }, "babel-generator": { @@ -2420,12 +2300,6 @@ } } }, - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -3876,66 +3750,173 @@ } }, "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", + "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "inquirer": "^6.1.0", + "js-yaml": "^3.12.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "acorn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", + "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", "dev": true }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3943,6 +3924,14 @@ "dev": true, "requires": { "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } } } } @@ -4056,10 +4045,23 @@ } }, "eslint-plugin-babel": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", - "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=", - "dev": true + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz", + "integrity": "sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "eslint-plugin-es": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", + "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "dev": true, + "requires": { + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" + } }, "eslint-plugin-import": { "version": "2.14.0", @@ -4107,15 +4109,25 @@ } }, "eslint-plugin-node": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", - "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", + "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", "dev": true, "requires": { - "ignore": "^3.3.6", + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", "minimatch": "^3.0.4", - "resolve": "^1.3.3", - "semver": "^5.4.1" + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "dependencies": { + "ignore": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.4.tgz", + "integrity": "sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==", + "dev": true + } } }, "eslint-plugin-prettier": { @@ -4128,9 +4140,9 @@ } }, "eslint-plugin-promise": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", - "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", "dev": true }, "eslint-plugin-react": { @@ -4153,6 +4165,12 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==" }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, "eslint-scope": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", @@ -4163,6 +4181,12 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, "eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", @@ -4350,9 +4374,9 @@ } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-diff": { @@ -6486,9 +6510,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify": { @@ -7328,9 +7352,9 @@ } }, "metro-react-native-babel-preset": { - "version": "0.49.2", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.49.2.tgz", - "integrity": "sha512-N0+4ramShYCHSAVEPUNWIZuKZskWj8/RDSoinhadHpdpHORMbMxLkexSOVHLluB+XFQ+DENLEx5oVPYwOlENBA==", + "version": "0.51.1", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz", + "integrity": "sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw==", "dev": true, "requires": { "@babel/plugin-proposal-class-properties": "^7.0.0", @@ -7366,14 +7390,14 @@ "@babel/plugin-transform-typescript": "^7.0.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "metro-babel7-plugin-react-transform": "0.49.2", + "metro-babel7-plugin-react-transform": "0.51.1", "react-transform-hmr": "^1.0.4" }, "dependencies": { "metro-babel7-plugin-react-transform": { - "version": "0.49.2", - "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.49.2.tgz", - "integrity": "sha512-LpJT8UvqF/tvVqEwiLUTMjRPhEGdI8e2dr3424XaRANba3j0nqmrbKdJQsPE8TrcqMWR4RHmfsXk0ti5QrEvJg==", + "version": "0.51.1", + "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz", + "integrity": "sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0" @@ -7796,6 +7820,14 @@ } } } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } } } }, @@ -8296,6 +8328,23 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==" }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + } + } + }, "parse-asn1": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.2.tgz", @@ -8416,11 +8465,6 @@ "sha.js": "^2.4.8" } }, - "pegjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -8512,9 +8556,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", - "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==" + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.0.tgz", + "integrity": "sha512-MCBCYeAuZfejUPdEpkleLWvpRBwLii/Sp5jQs0eb8Ul/drGIDjkL6tAU24tk6yCGf0KPV5rhPPPlczfBmN2pWQ==" }, "prettier-eslint": { "version": "8.8.2", @@ -8537,12 +8581,91 @@ "vue-eslint-parser": "^2.0.2" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, "pretty-format": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", @@ -8552,6 +8675,44 @@ "ansi-regex": "^3.0.0", "ansi-styles": "^3.2.0" } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } } } }, @@ -8581,6 +8742,24 @@ "yargs": "10.0.3" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "chalk": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", @@ -8592,12 +8771,85 @@ "supports-color": "^4.0.0" } }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -8607,6 +8859,24 @@ "symbol-observable": "1.0.1" } }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", @@ -8616,6 +8886,20 @@ "has-flag": "^2.0.0" } }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + }, "yargs": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", @@ -9082,9 +9366,9 @@ } }, "react-native-camera": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-1.8.0.tgz", - "integrity": "sha512-fJPSbCZ4ZWI+1kQ2Y41ed0fr3Bnw+qo6eb8uv3HcTkGzBJ1OCzLIcAhpXLhizyiyY9nwSuMy9asQKS3Tun8eXA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-1.9.0.tgz", + "integrity": "sha512-stvA9rWmN95DRr7a+eNr7LQlQLxP2Z7AJEoR8ctjcYx1EUMoL7qPFdz2JKmqZ/DEsW3ZKOC+ZCx68tscj9gDbQ==", "requires": { "prop-types": "^15.6.2" } @@ -9124,9 +9408,9 @@ } }, "react-native-device-info": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.0.tgz", - "integrity": "sha512-5egYoRhO6OE4VHC2RZtjNYxuXtwR2oexoI1GwvAiYzyGEc2pkMaC59xN2W0NX0mDxhkfaDsMzc+WArLqSg62xA==" + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.1.tgz", + "integrity": "sha512-KW4Mf0CVEy10sbWsrnP7dMiB+FhFa46r11+JPdXWu1hHoSy8B/DR5Cb29kHHZSCPftHPzEhfMDflRe4IOgHrVw==" }, "react-native-elements": { "version": "0.19.1", @@ -9164,9 +9448,9 @@ } }, "react-native-google-analytics-bridge": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/react-native-google-analytics-bridge/-/react-native-google-analytics-bridge-6.1.2.tgz", - "integrity": "sha512-QhBvtQb6/5ao0ubgjMRkJMnsAo05UYwTMJHPesMUT6GD9W0zneAUiCC3HtV8IsHZMSZ0HJxytLhnLtQhWzN7PQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-native-google-analytics-bridge/-/react-native-google-analytics-bridge-7.0.0.tgz", + "integrity": "sha512-PifW2VXYqH92u6GyJfEZAiZQYHmXuJvN7eouuC9ZWadfz+m4MFJbsVFAAsTQ1JzMiuo8B5KwK97hpY0cp7HD9w==" }, "react-native-haptic-feedback": { "version": "1.4.2", @@ -9282,13 +9566,11 @@ } }, "react-native-svg": { - "version": "8.0.10", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-8.0.10.tgz", - "integrity": "sha512-gsG5GUdvlox67+ohLnq3tZSqiYBmz4M5lKKeUfnJZ8EPrMMS5ZgaVj7Zcccee1VvINS5xQaoenUJdha/GEo34w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.0.0.tgz", + "integrity": "sha512-HOmQ94XNdvo19SQp60MgEmF4scyhtR/78Oqr5vsMxNgnVRt9oaEfJygtfdhiUslYs4zHbCvKvPo4k+BJhh0pfA==", "requires": { - "color": "^2.0.1", - "lodash": "^4.16.6", - "pegjs": "^0.10.0" + "color": "^2.0.1" } }, "react-native-tab-view": { @@ -9612,9 +9894,9 @@ } }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "regexpu-core": { @@ -10508,11 +10790,13 @@ "dev": true }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", "dev": true, "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, @@ -10959,16 +11243,14 @@ "dev": true }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.1.tgz", + "integrity": "sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", "string-width": "^2.1.1" } }, @@ -11557,9 +11839,9 @@ "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "requires": { "inherits": "2.0.3" } diff --git a/package.json b/package.json index 7c89d2278..9a1e92b80 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "BlueWallet", - "version": "3.6.2", + "version": "3.6.0", "devDependencies": { - "babel-eslint": "^8.2.6", + "babel-eslint": "^10.0.1", "babel-jest": "23.6.0", - "eslint": "^4.19.1", - "eslint-plugin-babel": "^4.1.2", + "eslint": "^5.12.1", + "eslint-plugin-babel": "^5.3.0", "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^6.0.1", - "eslint-plugin-promise": "^3.8.0", + "eslint-plugin-node": "^8.0.1", + "eslint-plugin-promise": "^4.0.1", "eslint-plugin-react": "^7.12.3", "jest": "23.6.0", - "metro-react-native-babel-preset": "^0.49.1", + "metro-react-native-babel-preset": "^0.51.1", "prettier-eslint-cli": "^4.7.1", "react-test-renderer": "^16.7.0", "rn-nodeify": "github:tradle/rn-nodeify" @@ -54,20 +54,20 @@ "mocha": "^5.2.0", "node-libs-react-native": "^1.0.1", "path-browserify": "0.0.0", - "prettier": "^1.14.2", + "prettier": "^1.16.0", "process": "^0.11.10", "prop-types": "^15.6.2", "react": "^16.7.0", "react-localization": "^1.0.10", "react-native": "^0.57.8", - "react-native-camera": "^1.8.0", + "react-native-camera": "^1.9.0", "react-native-custom-qr-codes": "^2.0.0", - "react-native-device-info": "^0.25.0", + "react-native-device-info": "^0.25.1", "react-native-elements": "^0.19.0", "react-native-flexi-radio-button": "^0.2.2", "react-native-fs": "^2.13.3", "react-native-gesture-handler": "^1.0.12", - "react-native-google-analytics-bridge": "^6.1.2", + "react-native-google-analytics-bridge": "^7.0.0", "react-native-haptic-feedback": "^1.4.2", "react-native-level-fs": "^3.0.1", "react-native-linear-gradient": "^2.5.3", @@ -80,7 +80,7 @@ "react-native-sentry": "^0.40.2", "react-native-snap-carousel": "^3.7.4", "react-native-sortable-list": "0.0.22", - "react-native-svg": "^8.0.10", + "react-native-svg": "^9.0.0", "react-native-vector-icons": "^6.0.2", "react-native-webview": "2.8.0", "react-native-wkwebview-reborn": "^2.0.0", @@ -90,6 +90,7 @@ "request-promise-native": "^1.0.5", "secure-random": "^1.1.1", "stream-browserify": "^1.0.0", + "util": "^0.11.1", "wif": "^2.0.1" }, "react-native": { diff --git a/screen/lnd/lndViewAdditionalInvoiceInformation.js b/screen/lnd/lndViewAdditionalInvoiceInformation.js index 02fffe7f1..3b8ec1ecb 100644 --- a/screen/lnd/lndViewAdditionalInvoiceInformation.js +++ b/screen/lnd/lndViewAdditionalInvoiceInformation.js @@ -1,7 +1,15 @@ /* global alert */ import React, { Component } from 'react'; -import { Animated, StyleSheet, View, TouchableOpacity, Clipboard, Share } from 'react-native'; -import { BlueLoading, SafeBlueArea, BlueButton, BlueNavigationStyle, BlueText, BlueSpacing20 } from '../../BlueComponents'; +import { View, Share } from 'react-native'; +import { + BlueLoading, + BlueCopyTextToClipboard, + SafeBlueArea, + BlueButton, + BlueNavigationStyle, + BlueText, + BlueSpacing20, +} from '../../BlueComponents'; import PropTypes from 'prop-types'; import { QRCode } from 'react-native-custom-qr-codes'; /** @type {AppStorage} */ @@ -16,13 +24,6 @@ export default class LNDViewAdditionalInvoiceInformation extends Component { state = { walletInfo: undefined }; - copyToClipboard = () => { - this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { - Clipboard.setString(this.state.walletInfo.uris[0]); - setTimeout(() => this.setState({ addressText: this.state.walletInfo.uris[0] }), 1000); - }); - }; - async componentDidMount() { const fromWallet = this.props.navigation.getParam('fromWallet'); try { @@ -56,11 +57,7 @@ export default class LNDViewAdditionalInvoiceInformation extends Component { /> Open direct channel with this node: - - - {this.state.addressText} - - + { - this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { - Clipboard.setString(this.state.invoice.payment_request); - setTimeout(() => this.setState({ addressText: this.state.invoice.payment_request }), 1000); - }); - }; - onLayout = () => { const { height } = Dimensions.get('window'); this.setState({ qrCodeHeight: height > width ? width - 20 : width / 2 }); @@ -181,12 +183,11 @@ export default class LNDViewInvoice extends Component { flex: 1, alignItems: 'center', marginTop: 8, - paddingHorizontal: 16, justifyContent: 'space-between', }} onLayout={this.onLayout} > - + {invoice && invoice.amt && Please pay {invoice.amt} sats} {invoice && invoice.description && For: {invoice.description}} - - - {this.state.addressText} - - + { - this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { - Clipboard.setString(this.state.address); - setTimeout(() => this.setState({ addressText: this.state.address }), 1000); - }); - }; - render() { console.log('render() receive/details, address,secret=', this.state.address, ',', this.state.secret); if (this.state.isLoading) { @@ -94,11 +95,7 @@ export default class ReceiveDetails extends Component { backgroundColor={BlueApp.settings.brandingColor} logo={require('../../img/qr-code.png')} /> - - - {this.state.addressText} - - + { - this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { - Clipboard.setString(this.state.bip21); - setTimeout(() => this.setState({ addressText: this.state.address }), 1000); - }); - }; - determineSize = () => { if (width > 312) { return width - 48; @@ -133,11 +114,7 @@ export default class ReceiveAmount extends Component { )} - - - {this.state.bip21} - - + ); @@ -181,12 +158,3 @@ export default class ReceiveAmount extends Component { ); } } - -const styles = StyleSheet.create({ - address: { - marginVertical: 32, - fontSize: 15, - color: '#9aa0aa', - textAlign: 'center', - }, -}); diff --git a/screen/settings/about.js b/screen/settings/about.js index dc373da87..50e9de08a 100644 --- a/screen/settings/about.js +++ b/screen/settings/about.js @@ -109,7 +109,7 @@ export default class About extends Component { }; Rate.rate(options, success => { if (success) { - console.warn('User Rated.'); + console.log('User Rated.'); } }); }} diff --git a/screen/wallets/buyBitcoin.js b/screen/wallets/buyBitcoin.js index 5fea92290..ef299d1b2 100644 --- a/screen/wallets/buyBitcoin.js +++ b/screen/wallets/buyBitcoin.js @@ -1,6 +1,14 @@ import React, { Component } from 'react'; -import { Animated, Linking, StyleSheet, View, TouchableOpacity, Clipboard } from 'react-native'; -import { BlueNavigationStyle, BlueLoading, SafeBlueArea, BlueButton, BlueText, BlueSpacing40 } from '../../BlueComponents'; +import { Linking, View } from 'react-native'; +import { + BlueNavigationStyle, + BlueCopyTextToClipboard, + BlueLoading, + SafeBlueArea, + BlueButton, + BlueText, + BlueSpacing40, +} from '../../BlueComponents'; import PropTypes from 'prop-types'; /** @type {AppStorage} */ let BlueApp = require('../../BlueApp'); @@ -58,13 +66,6 @@ export default class BuyBitcoin extends Component { } } - copyToClipboard = () => { - this.setState({ addressText: loc.buyBitcoin.copied }, () => { - Clipboard.setString(this.state.address); - setTimeout(() => this.setState({ addressText: this.state.address }), 1000); - }); - }; - render() { console.log('render() receive/details, address,secret=', this.state.address, ',', this.state.secret); if (this.state.isLoading) { @@ -77,11 +78,7 @@ export default class BuyBitcoin extends Component { {loc.buyBitcoin.tap_your_address} - - - {this.state.addressText} - - + { - this.setState({ xpubText: loc.wallets.xpub.copiedToClipboard }, () => { - Clipboard.setString(this.state.xpub); - setTimeout(() => this.setState({ xpubText: this.state.xpub }), 1000); - }); - }; - onLayout = () => { const { height } = Dimensions.get('window'); this.setState({ qrCodeHeight: height > width ? width - 40 : width / 2 }); @@ -110,11 +103,7 @@ export default class WalletXpub extends Component { } })()} - - - {this.state.xpubText} - - + ); From f8d1e98dd82bd39fda2cec27e6b62561f42148af Mon Sep 17 00:00:00 2001 From: Igor Korsakov Date: Mon, 21 Jan 2019 14:33:49 +0000 Subject: [PATCH 12/15] Revert "REF: bugfixes" (#265) This reverts commit d762ab543b289f5c4eac537bcc1b5f2a0ad09e66. --- App.test.js | 46 +- App2.test.js | 16 +- BlueComponents.js | 50 -- HDWallet.test.js | 144 ++-- LightningCustodianWallet.test.js | 42 +- .../bluewallet/bluewallet/MainActivity.java | 2 +- .../bluewallet/MainApplication.java | 26 +- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle | 22 - ios/BlueWallet.xcodeproj/project.pbxproj | 26 - package-lock.json | 764 ++++++------------ package.json | 25 +- .../lndViewAdditionalInvoiceInformation.js | 34 +- screen/lnd/lndViewInvoice.js | 38 +- screen/receive/details.js | 34 +- screen/receive/receiveAmount.js | 38 +- screen/settings/about.js | 2 +- screen/wallets/buyBitcoin.js | 34 +- screen/wallets/xpub.js | 17 +- 20 files changed, 533 insertions(+), 831 deletions(-) diff --git a/App.test.js b/App.test.js index 072984948..b5c8c685a 100644 --- a/App.test.js +++ b/App.test.js @@ -57,7 +57,7 @@ describe('unit - LegacyWallet', function() { let b = LegacyWallet.fromJson(key); assert(key === JSON.stringify(b)); - assert.strictEqual(key, JSON.stringify(b)); + assert.equal(key, JSON.stringify(b)); }); it('can validate addresses', () => { @@ -118,8 +118,8 @@ it('Appstorage - loadFromDisk works', async () => { let Storage2 = new AppStorage(); await Storage2.loadFromDisk(); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage2.wallets.length, 1); + assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); let isEncrypted = await Storage2.storageIsEncrypted(); assert.ok(!isEncrypted); @@ -146,7 +146,7 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(!isEncrypted); await Storage.encryptStorage('password'); isEncrypted = await Storage.storageIsEncrypted(); - assert.strictEqual(Storage.cachedPassword, 'password'); + assert.equal(Storage.cachedPassword, 'password'); assert.ok(isEncrypted); // saved, now trying to load, using good password @@ -156,8 +156,8 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); let loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage2.wallets.length, 1); + assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); // now trying to load, using bad password @@ -166,7 +166,7 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('passwordBAD'); assert.ok(!loadResult); - assert.strictEqual(Storage2.wallets.length, 0); + assert.equal(Storage2.wallets.length, 0); // now, trying case with adding data after decrypt. // saveToDisk should be handled correctly @@ -176,14 +176,14 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 1); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage2.wallets.length, 1); + assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); w = new SegwitP2SHWallet(); w.setLabel('testlabel2'); await w.generate(); Storage2.wallets.push(w); - assert.strictEqual(Storage2.wallets.length, 2); - assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); + assert.equal(Storage2.wallets.length, 2); + assert.equal(Storage2.wallets[1].getLabel(), 'testlabel2'); await Storage2.saveToDisk(); // saved to encrypted storage after load. next load should be successfull Storage2 = new AppStorage(); @@ -191,15 +191,15 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { assert.ok(isEncrypted); loadResult = await Storage2.loadFromDisk('password'); assert.ok(loadResult); - assert.strictEqual(Storage2.wallets.length, 2); - assert.strictEqual(Storage2.wallets[0].getLabel(), 'testlabel'); - assert.strictEqual(Storage2.wallets[1].getLabel(), 'testlabel2'); + assert.equal(Storage2.wallets.length, 2); + assert.equal(Storage2.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage2.wallets[1].getLabel(), 'testlabel2'); // next, adding new `fake` storage which should be unlocked with `fake` password let createFakeStorageResult = await Storage2.createFakeStorage('fakePassword'); assert.ok(createFakeStorageResult); - assert.strictEqual(Storage2.wallets.length, 0); - assert.strictEqual(Storage2.cachedPassword, 'fakePassword'); + assert.equal(Storage2.wallets.length, 0); + assert.equal(Storage2.cachedPassword, 'fakePassword'); w = new SegwitP2SHWallet(); w.setLabel('fakewallet'); await w.generate(); @@ -210,14 +210,14 @@ it('Appstorage - encryptStorage & load encrypted storage works', async () => { let Storage3 = new AppStorage(); loadResult = await Storage3.loadFromDisk('password'); assert.ok(loadResult); - assert.strictEqual(Storage3.wallets.length, 2); - assert.strictEqual(Storage3.wallets[0].getLabel(), 'testlabel'); + assert.equal(Storage3.wallets.length, 2); + assert.equal(Storage3.wallets[0].getLabel(), 'testlabel'); // fake: Storage3 = new AppStorage(); loadResult = await Storage3.loadFromDisk('fakePassword'); assert.ok(loadResult); - assert.strictEqual(Storage3.wallets.length, 1); - assert.strictEqual(Storage3.wallets[0].getLabel(), 'fakewallet'); + assert.equal(Storage3.wallets.length, 1); + assert.equal(Storage3.wallets[0].getLabel(), 'fakewallet'); }); it('Wallet can fetch UTXO', async () => { @@ -245,7 +245,7 @@ it('Wallet can fetch TXs', async () => { let w = new LegacyWallet(); w._address = '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'; await w.fetchTransactions(); - assert.strictEqual(w.getTransactions().length, 2); + assert.equal(w.getTransactions().length, 2); let tx0 = w.getTransactions()[0]; let txExpected = { @@ -296,7 +296,7 @@ it('Wallet can fetch TXs', async () => { delete txExpected.confirmations; delete tx0.preference; // that bs is not always the same delete txExpected.preference; - assert.deepStrictEqual(tx0, txExpected); + assert.deepEqual(tx0, txExpected); }); describe('currency', () => { @@ -321,7 +321,7 @@ describe('currency', () => { await currency.setPrefferedCurrency(FiatUnit.EUR); await currency.startUpdater(); let preferred = await currency.getPreferredCurrency(); - assert.strictEqual(preferred.endPointKey, 'EUR'); + assert.equal(preferred.endPointKey, 'EUR'); cur = JSON.parse(AsyncStorage.storageCache[AppStorage.EXCHANGE_RATES]); assert.ok(cur['BTC_EUR'] > 0); }); diff --git a/App2.test.js b/App2.test.js index a817d57b4..90f7695d3 100644 --- a/App2.test.js +++ b/App2.test.js @@ -14,10 +14,7 @@ it('bip38 decodes', async () => { { N: 1, r: 8, p: 8 }, // using non-default parameters to speed it up (not-bip38 compliant) ); - assert.strictEqual( - wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), - '5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR', - ); + assert.equal(wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), '5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR'); }); it('bip38 decodes slow', async () => { @@ -32,10 +29,7 @@ it('bip38 decodes slow', async () => { let encryptedKey = '6PnU5voARjBBykwSddwCdcn6Eu9EcsK24Gs5zWxbJbPZYW7eiYQP8XgKbN'; let decryptedKey = await bip38.decrypt(encryptedKey, 'qwerty', status => process.stdout.write(parseInt(status.percent) + '%\r')); - assert.strictEqual( - wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), - 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc', - ); + assert.equal(wif.encode(0x80, decryptedKey.privateKey, decryptedKey.compressed), 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc'); }); describe('Watch only wallet', () => { @@ -52,16 +46,16 @@ describe('Watch only wallet', () => { w.setSecret('167zK5iZrs1U6piDqubD3FjRqUTM2CZnb8'); await w.fetchTransactions(); - assert.strictEqual(w.getTransactions().length, 233); + assert.equal(w.getTransactions().length, 233); w = new WatchOnlyWallet(); w.setSecret('1BiJW1jyUaxcJp2JWwbPLPzB1toPNWTFJV'); await w.fetchTransactions(); - assert.strictEqual(w.getTransactions().length, 2); + assert.equal(w.getTransactions().length, 2); // fetch again and make sure no duplicates await w.fetchTransactions(); - assert.strictEqual(w.getTransactions().length, 2); + assert.equal(w.getTransactions().length, 2); }); it('can fetch complex TXs', async () => { diff --git a/BlueComponents.js b/BlueComponents.js index 2964bd325..f00a51ab8 100644 --- a/BlueComponents.js +++ b/BlueComponents.js @@ -16,7 +16,6 @@ import { SafeAreaView, Clipboard, Platform, - LayoutAnimation, TextInput, } from 'react-native'; import LinearGradient from 'react-native-linear-gradient'; @@ -194,55 +193,6 @@ export const BlueCopyToClipboardButton = ({ stringToCopy }) => { ); }; -export class BlueCopyTextToClipboard extends Component { - static propTypes = { - text: PropTypes.string, - }; - - static defaultProps = { - text: '', - }; - - state = { hasTappedText: false }; - - copyToClipboard = () => { - LayoutAnimation.configureNext(LayoutAnimation.Presets.spring, () => { - Clipboard.setString(this.props.text); - setTimeout(() => { - LayoutAnimation.configureNext(LayoutAnimation.Presets.spring); - this.setState({ hasTappedText: false }); - }, 1000); - }); - this.setState({ hasTappedText: true }); - }; - - render() { - return ( - - - - {this.props.text} - - {this.state.hasTappedText && ( - - {loc.wallets.xpub.copiedToClipboard} - - )} - - - ); - } -} - -const styleCopyTextToClipboard = StyleSheet.create({ - address: { - marginVertical: 32, - fontSize: 15, - color: '#9aa0aa', - textAlign: 'center', - }, -}); - export class SafeBlueArea extends Component { render() { return ( diff --git a/HDWallet.test.js b/HDWallet.test.js index c60f73f31..880cbcf0c 100644 --- a/HDWallet.test.js +++ b/HDWallet.test.js @@ -6,13 +6,13 @@ let bitcoin = require('bitcoinjs-lib'); it('can convert witness to address', () => { let address = SegwitP2SHWallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8'); - assert.strictEqual(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7'); + assert.equal(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7'); address = SegwitBech32Wallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8'); - assert.strictEqual(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv'); + assert.equal(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv'); address = SegwitBech32Wallet.scriptPubKeyToAddress('00144d757460da5fcaf84cc22f3847faaa1078e84f6a'); - assert.strictEqual(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7'); + assert.equal(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7'); }); it('can create a Segwit HD (BIP49)', async function() { @@ -21,39 +21,39 @@ it('can create a Segwit HD (BIP49)', async function() { 'honey risk juice trip orient galaxy win situate shoot anchor bounce remind horse traffic exotic since escape mimic ramp skin judge owner topple erode'; let hd = new HDSegwitP2SHWallet(); hd.setSecret(mnemonic); - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); - assert.strictEqual('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); - assert.strictEqual('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); - assert.strictEqual(true, hd.validateMnemonic()); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); + assert.equal('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); + assert.equal('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); + assert.equal(true, hd.validateMnemonic()); await hd.fetchBalance(); - assert.strictEqual(hd.getBalance(), 0); + assert.equal(hd.getBalance(), 0); assert.ok(hd._lastTxFetch === 0); await hd.fetchTransactions(); assert.ok(hd._lastTxFetch > 0); - assert.strictEqual(hd.transactions.length, 4); + assert.equal(hd.transactions.length, 4); - assert.strictEqual('L4MqtwJm6hkbACLG4ho5DF8GhcXdLEbbvpJnbzA9abfD6RDpbr2m', hd._getExternalWIFByIndex(0)); - assert.strictEqual( + assert.equal('L4MqtwJm6hkbACLG4ho5DF8GhcXdLEbbvpJnbzA9abfD6RDpbr2m', hd._getExternalWIFByIndex(0)); + assert.equal( 'ypub6WhHmKBmHNjcrUVNCa3sXduH9yxutMipDcwiKW31vWjcMbfhQHjXdyx4rqXbEtVgzdbhFJ5mZJWmfWwnP4Vjzx97admTUYKQt6b9D7jjSCp', hd.getXpub(), ); // checking that internal pointer and async address getter return the same address let freeAddress = await hd.getAddressAsync(); - assert.strictEqual(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); + assert.equal(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); let freeChangeAddress = await hd.getChangeAddressAsync(); - assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), freeChangeAddress); + assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), freeChangeAddress); }); it('Segwit HD (BIP49) can generate addressess only via ypub', async function() { let ypub = 'ypub6WhHmKBmHNjcrUVNCa3sXduH9yxutMipDcwiKW31vWjcMbfhQHjXdyx4rqXbEtVgzdbhFJ5mZJWmfWwnP4Vjzx97admTUYKQt6b9D7jjSCp'; let hd = new HDSegwitP2SHWallet(); hd._xpub = ypub; - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); - assert.strictEqual('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); - assert.strictEqual('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', hd._getExternalAddressByIndex(0)); + assert.equal('35p5LwCAE7mH2css7onyQ1VuS1jgWtQ4U3', hd._getExternalAddressByIndex(1)); + assert.equal('32yn5CdevZQLk3ckuZuA8fEKBco8mEkLei', hd._getInternalAddressByIndex(0)); }); it('can generate Segwit HD (BIP49)', async () => { @@ -88,56 +88,56 @@ it('HD (BIP49) can create TX', async () => { await hd.getChangeAddressAsync(); // to refresh internal pointer to next free address await hd.getAddressAsync(); // to refresh internal pointer to next free address let txhex = hd.createTx(hd.utxo, 0.000014, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); - assert.strictEqual( + assert.equal( txhex, '010000000001029d98d81fe2b596fd79e845fa9f38d7e0b6fb73303c40fac604d04df1fa137aee00000000171600142f18e8406c9d210f30c901b24e5feeae78784eb7ffffffff67fb86f310df24e508d40fce9511c7fde4dd4ee91305fd08a074279a70e2cd22000000001716001468dde644410cc789d91a7f36b823f38369755a1cffffffff02780500000000000017a914a3a65daca3064280ae072b9d6773c027b30abace87dc0500000000000017a914850f4dbc255654de2c12c6f6d79cf9cb756cad038702483045022100dc8390a9fd34c31259fa47f9fc182f20d991110ecfd5b58af1cf542fe8de257a022004c2d110da7b8c4127675beccc63b46fd65c706951f090fd381fa3b21d3c5c08012102edd141c5a27a726dda66be10a38b0fd3ccbb40e7c380034aaa43a1656d5f4dd60247304402207c0aef8313d55e72474247daad955979f62e56d1cbac5f2d14b8b022c6ce112602205d9aa3804f04624b12ab8a5ab0214b529c531c2f71c27c6f18aba6502a6ea0a80121030db3c49461a5e539e97bab62ab2b8f88151d1c2376493cf73ef1d02ef60637fd00000000', ); txhex = hd.createTx(hd.utxo, 0.000005, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); var tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 1); - assert.strictEqual(tx.outs.length, 2); - assert.strictEqual(tx.outs[0].value, 500); - assert.strictEqual(tx.outs[1].value, 400); + assert.equal(tx.ins.length, 1); + assert.equal(tx.outs.length, 2); + assert.equal(tx.outs[0].value, 500); + assert.equal(tx.outs[1].value, 400); let chunksIn = bitcoin.script.decompile(tx.outs[0].script); let toAddress = bitcoin.address.fromOutputScript(chunksIn); chunksIn = bitcoin.script.decompile(tx.outs[1].script); let changeAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); - assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); // txhex = hd.createTx(hd.utxo, 0.000015, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 2); - assert.strictEqual(tx.outs.length, 2); + assert.equal(tx.ins.length, 2); + assert.equal(tx.outs.length, 2); // txhex = hd.createTx(hd.utxo, 0.00025, 0.00001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 7); - assert.strictEqual(tx.outs.length, 1); + assert.equal(tx.ins.length, 7); + assert.equal(tx.outs.length, 1); chunksIn = bitcoin.script.decompile(tx.outs[0].script); toAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); // checking that change amount is at least 3x of fee, otherwise screw the change, just add it to fee. // theres 0.00003 on UTXOs, lets transfer (0.00003 - 100sat), soo fee is equal to change (100 sat) // which throws @dust error if broadcasted txhex = hd.createTx(hd.utxo, 0.000028, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 2); - assert.strictEqual(tx.outs.length, 1); // only 1 output, which means change is neglected - assert.strictEqual(tx.outs[0].value, 2800); + assert.equal(tx.ins.length, 2); + assert.equal(tx.outs.length, 1); // only 1 output, which means change is neglected + assert.equal(tx.outs[0].value, 2800); }); it('Segwit HD (BIP49) can fetch UTXO', async function() { let hd = new HDSegwitP2SHWallet(); hd.usedAddresses = ['1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55', '1BiTCHeYzJNMxBLFCMkwYXNdFEdPJP53ZV']; // hacking internals await hd.fetchUtxo(); - assert.strictEqual(hd.utxo.length, 11); + assert.equal(hd.utxo.length, 11); assert.ok(typeof hd.utxo[0].confirmations === 'number'); assert.ok(hd.utxo[0].txid); assert.ok(hd.utxo[0].vout); @@ -168,7 +168,7 @@ it('can work with malformed mnemonic', () => { hd = new HDSegwitP2SHWallet(); hd.setSecret(mnemonic); let seed2 = hd.getMnemonicToSeedHex(); - assert.strictEqual(seed1, seed2); + assert.equal(seed1, seed2); assert.ok(hd.validateMnemonic()); }); @@ -182,28 +182,28 @@ it('can create a Legacy HD (BIP44)', async function() { let mnemonic = process.env.HD_MNEMONIC_BREAD; let hd = new HDLegacyP2PKHWallet(); hd.setSecret(mnemonic); - assert.strictEqual(hd.validateMnemonic(), true); - assert.strictEqual(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); - assert.strictEqual(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); - assert.strictEqual(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); - assert.strictEqual(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); - assert.strictEqual( + assert.equal(hd.validateMnemonic(), true); + assert.equal(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); + assert.equal(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); + assert.equal(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); + assert.equal(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); + assert.equal( hd.getXpub(), 'xpub6CQdfC3v9gU86eaSn7AhUFcBVxiGhdtYxdC5Cw2vLmFkfth2KXCMmYcPpvZviA89X6DXDs4PJDk5QVL2G2xaVjv7SM4roWHr1gR4xB3Z7Ps', ); - assert.strictEqual(hd._getExternalWIFByIndex(0), 'L1hqNoJ26YuCdujMBJfWBNfgf4Jo7AcKFvcNcKLoMtoJDdDtRq7Q'); - assert.strictEqual(hd._getExternalWIFByIndex(1), 'KyyH4h59iatJWwFfiYPnYkw39SP7cBwydC3xzszsBBXHpfwz9cKb'); - assert.strictEqual(hd._getInternalWIFByIndex(0), 'Kx3QkrfemEEV49Mj5oWfb4bsWymboPdstta7eN3kAzop9apxYEFP'); - assert.strictEqual(hd._getInternalWIFByIndex(1), 'Kwfg1EDjFapN9hgwafdNPEH22z3vkd4gtG785vXXjJ6uvVWAJGtr'); + assert.equal(hd._getExternalWIFByIndex(0), 'L1hqNoJ26YuCdujMBJfWBNfgf4Jo7AcKFvcNcKLoMtoJDdDtRq7Q'); + assert.equal(hd._getExternalWIFByIndex(1), 'KyyH4h59iatJWwFfiYPnYkw39SP7cBwydC3xzszsBBXHpfwz9cKb'); + assert.equal(hd._getInternalWIFByIndex(0), 'Kx3QkrfemEEV49Mj5oWfb4bsWymboPdstta7eN3kAzop9apxYEFP'); + assert.equal(hd._getInternalWIFByIndex(1), 'Kwfg1EDjFapN9hgwafdNPEH22z3vkd4gtG785vXXjJ6uvVWAJGtr'); await hd.fetchBalance(); - assert.strictEqual(hd.balance, 0); + assert.equal(hd.balance, 0); assert.ok(hd._lastTxFetch === 0); await hd.fetchTransactions(); assert.ok(hd._lastTxFetch > 0); - assert.strictEqual(hd.transactions.length, 4); - assert.strictEqual(hd.next_free_address_index, 1); - assert.strictEqual(hd.next_free_change_address_index, 1); + assert.equal(hd.transactions.length, 4); + assert.equal(hd.next_free_address_index, 1); + assert.equal(hd.next_free_change_address_index, 1); for (let tx of hd.getTransactions()) { assert.ok(tx.value === 1000 || tx.value === 1377 || tx.value === -1377 || tx.value === -1000); @@ -211,17 +211,17 @@ it('can create a Legacy HD (BIP44)', async function() { // checking that internal pointer and async address getter return the same address let freeAddress = await hd.getAddressAsync(); - assert.strictEqual(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); + assert.equal(hd._getExternalAddressByIndex(hd.next_free_address_index), freeAddress); }); it('Legacy HD (BIP44) can generate addressess based on xpub', async function() { let xpub = 'xpub6CQdfC3v9gU86eaSn7AhUFcBVxiGhdtYxdC5Cw2vLmFkfth2KXCMmYcPpvZviA89X6DXDs4PJDk5QVL2G2xaVjv7SM4roWHr1gR4xB3Z7Ps'; let hd = new HDLegacyP2PKHWallet(); hd._xpub = xpub; - assert.strictEqual(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); - assert.strictEqual(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); - assert.strictEqual(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); - assert.strictEqual(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); + assert.equal(hd._getExternalAddressByIndex(0), '12eQ9m4sgAwTSQoNXkRABKhCXCsjm2jdVG'); + assert.equal(hd._getInternalAddressByIndex(0), '1KZjqYHm7a1DjhjcdcjfQvYfF2h6PqatjX'); + assert.equal(hd._getExternalAddressByIndex(1), '1QDCFcpnrZ4yrAQxmbvSgeUC9iZZ8ehcR5'); + assert.equal(hd._getInternalAddressByIndex(1), '13CW9WWBsWpDUvLtbFqYziWBWTYUoQb4nU'); }); it('Legacy HD (BIP44) can create TX', async () => { @@ -239,38 +239,38 @@ it('Legacy HD (BIP44) can create TX', async () => { await hd.getAddressAsync(); // to refresh internal pointer to next free address let txhex = hd.createTx(hd.utxo, 0.0008, 0.000005, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); - assert.strictEqual( + assert.equal( txhex, '01000000045fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f030000006b4830450221009be5dbe37db5a8409ddce3570140c95d162a07651b1e48cf39a6a741892adc53022061a25b8024d8f3cb1b94f264245de0c6e9a103ea557ddeb66245b40ec8e9384b012102ad7b2216f3a2b38d56db8a7ee5c540fd12c4bbb7013106eff78cc2ace65aa002ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f000000006a47304402207106e9fa4e2e35d351fbccc9c0fad3356d85d0cd35a9d7e9cbcefce5440da1e5022073c1905b5927447378c0f660e62900c1d4b2691730799458889fb87d86f5159101210316e84a2556f30a199541633f5dda6787710ccab26771b7084f4c9e1104f47667ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f020000006a4730440220250b15094096c4d4fe6793da8e45fa118ed057cc2759a480c115e76e23590791022079cdbdc9e630d713395602071e2837ecc1d192a36a24d8ec71bc51d5e62b203b01210316e84a2556f30a199541633f5dda6787710ccab26771b7084f4c9e1104f47667ffffffff5fbc74110c2d6fcf4d1161a59913fbcd2b6ab3c5a9eb4d0dc0859515cbc8654f010000006b483045022100879da610e6ed12c84d55f12baf3bf6222d59b5282502b3c7f4db1d22152c16900220759a1c88583cbdaf7fde21c273ad985dfdf94a2fa85e42ee41dcea2fd69136fd012102ad7b2216f3a2b38d56db8a7ee5c540fd12c4bbb7013106eff78cc2ace65aa002ffffffff02803801000000000017a914a3a65daca3064280ae072b9d6773c027b30abace872c4c0000000000001976a9146ee5e3e66dc73587a3a2d77a1a6c8554fae21b8a88ac00000000', ); var tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 4); - assert.strictEqual(tx.outs.length, 2); - assert.strictEqual(tx.outs[0].value, 80000); // payee - assert.strictEqual(tx.outs[1].value, 19500); // change + assert.equal(tx.ins.length, 4); + assert.equal(tx.outs.length, 2); + assert.equal(tx.outs[0].value, 80000); // payee + assert.equal(tx.outs[1].value, 19500); // change let chunksIn = bitcoin.script.decompile(tx.outs[0].script); let toAddress = bitcoin.address.fromOutputScript(chunksIn); chunksIn = bitcoin.script.decompile(tx.outs[1].script); let changeAddress = bitcoin.address.fromOutputScript(chunksIn); - assert.strictEqual('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); - assert.strictEqual(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); + assert.equal('3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK', toAddress); + assert.equal(hd._getInternalAddressByIndex(hd.next_free_change_address_index), changeAddress); // checking that change amount is at least 3x of fee, otherwise screw the change, just add it to fee. // theres 0.001 on UTXOs, lets transfer (0.001 - 100sat), soo fee is equal to change (100 sat) // which throws @dust error if broadcasted txhex = hd.createTx(hd.utxo, 0.000998, 0.000001, '3GcKN7q7gZuZ8eHygAhHrvPa5zZbG5Q1rK'); tx = bitcoin.Transaction.fromHex(txhex); - assert.strictEqual(tx.ins.length, 4); - assert.strictEqual(tx.outs.length, 1); // only 1 output, which means change is neglected - assert.strictEqual(tx.outs[0].value, 99800); + assert.equal(tx.ins.length, 4); + assert.equal(tx.outs.length, 1); // only 1 output, which means change is neglected + assert.equal(tx.outs[0].value, 99800); }); it('Legacy HD (BIP44) can fetch UTXO', async function() { let hd = new HDLegacyP2PKHWallet(); hd.usedAddresses = ['1Ez69SnzzmePmZX3WpEzMKTrcBF2gpNQ55', '1BiTCHeYzJNMxBLFCMkwYXNdFEdPJP53ZV']; // hacking internals await hd.fetchUtxo(); - assert.strictEqual(hd.utxo.length, 11); + assert.equal(hd.utxo.length, 11); assert.ok(typeof hd.utxo[0].confirmations === 'number'); assert.ok(hd.utxo[0].txid); assert.ok(hd.utxo[0].vout); @@ -290,31 +290,31 @@ it('HD breadwallet works', async function() { let hdBread = new HDLegacyBreadwalletWallet(); hdBread.setSecret(process.env.HD_MNEMONIC_BREAD); - assert.strictEqual(hdBread.validateMnemonic(), true); - assert.strictEqual(hdBread._getExternalAddressByIndex(0), '1ARGkNMdsBE36fJhddSwf8PqBXG3s4d2KU'); - assert.strictEqual(hdBread._getInternalAddressByIndex(0), '1JLvA5D7RpWgChb4A5sFcLNrfxYbyZdw3V'); + assert.equal(hdBread.validateMnemonic(), true); + assert.equal(hdBread._getExternalAddressByIndex(0), '1ARGkNMdsBE36fJhddSwf8PqBXG3s4d2KU'); + assert.equal(hdBread._getInternalAddressByIndex(0), '1JLvA5D7RpWgChb4A5sFcLNrfxYbyZdw3V'); - assert.strictEqual( + assert.equal( hdBread.getXpub(), 'xpub68nLLEi3KERQY7jyznC9PQSpSjmekrEmN8324YRCXayMXaavbdEJsK4gEcX2bNf9vGzT4xRks9utZ7ot1CTHLtdyCn9udvv1NWvtY7HXroh', ); await hdBread.fetchBalance(); - assert.strictEqual(hdBread.balance, 0); + assert.equal(hdBread.balance, 0); assert.ok(hdBread._lastTxFetch === 0); await hdBread.fetchTransactions(); assert.ok(hdBread._lastTxFetch > 0); - assert.strictEqual(hdBread.transactions.length, 177); + assert.equal(hdBread.transactions.length, 177); for (let tx of hdBread.getTransactions()) { assert.ok(tx.confirmations); } - assert.strictEqual(hdBread.next_free_address_index, 10); - assert.strictEqual(hdBread.next_free_change_address_index, 118); + assert.equal(hdBread.next_free_address_index, 10); + assert.equal(hdBread.next_free_change_address_index, 118); // checking that internal pointer and async address getter return the same address let freeAddress = await hdBread.getAddressAsync(); - assert.strictEqual(hdBread._getExternalAddressByIndex(hdBread.next_free_address_index), freeAddress); + assert.equal(hdBread._getExternalAddressByIndex(hdBread.next_free_address_index), freeAddress); }); it('can convert blockchain.info TX to blockcypher TX format', () => { diff --git a/LightningCustodianWallet.test.js b/LightningCustodianWallet.test.js index e997b28a6..d6623868c 100644 --- a/LightningCustodianWallet.test.js +++ b/LightningCustodianWallet.test.js @@ -152,7 +152,7 @@ describe('LightningCustodianWallet', () => { } await l2.fetchTransactions(); - assert.strictEqual(l2.transactions_raw.length, txLen + 1); + assert.equal(l2.transactions_raw.length, txLen + 1); // transactions became more after paying an invoice // now, trying to pay duplicate invoice @@ -165,7 +165,7 @@ describe('LightningCustodianWallet', () => { } assert.ok(caughtError); await l2.fetchTransactions(); - assert.strictEqual(l2.transactions_raw.length, txLen + 1); + assert.equal(l2.transactions_raw.length, txLen + 1); // havent changed since last time end = +new Date(); if ((end - start) / 1000 > 9) { @@ -191,21 +191,21 @@ describe('LightningCustodianWallet', () => { await lNew.createAccount(true); await lNew.authorize(); await lNew.fetchBalance(); - assert.strictEqual(lNew.balance, 0); + assert.equal(lNew.balance, 0); let invoices = await lNew.getUserInvoices(); let invoice = await lNew.addInvoice(1, 'test memo'); let invoices2 = await lNew.getUserInvoices(); - assert.strictEqual(invoices2.length, invoices.length + 1); + assert.equal(invoices2.length, invoices.length + 1); assert.ok(invoices2[0].ispaid === false); assert.ok(invoices2[0].description); - assert.strictEqual(invoices2[0].description, 'test memo'); + assert.equal(invoices2[0].description, 'test memo'); assert.ok(invoices2[0].payment_request); assert.ok(invoices2[0].timestamp); assert.ok(invoices2[0].expire_time); - assert.strictEqual(invoices2[0].amt, 1); + assert.equal(invoices2[0].amt, 1); for (let inv of invoices2) { - assert.strictEqual(inv.type, 'user_invoice'); + assert.equal(inv.type, 'user_invoice'); } await lOld.fetchBalance(); @@ -225,11 +225,11 @@ describe('LightningCustodianWallet', () => { await lOld.fetchBalance(); await lNew.fetchBalance(); - assert.strictEqual(oldBalance - lOld.balance, 1); - assert.strictEqual(lNew.balance, 1); + assert.equal(oldBalance - lOld.balance, 1); + assert.equal(lNew.balance, 1); await lOld.fetchTransactions(); - assert.strictEqual(lOld.transactions_raw.length, txLen + 1, 'internal invoice should also produce record in payer`s tx list'); + assert.equal(lOld.transactions_raw.length, txLen + 1, 'internal invoice should also produce record in payer`s tx list'); let newTx = lOld.transactions_raw.slice().pop(); assert.ok(typeof newTx.fee !== 'undefined'); assert.ok(newTx.value); @@ -244,8 +244,8 @@ describe('LightningCustodianWallet', () => { await lNew.payInvoice(invoice); await lOld.fetchBalance(); await lNew.fetchBalance(); - assert.strictEqual(lOld.balance - oldBalance, 1); - assert.strictEqual(lNew.balance, 0); + assert.equal(lOld.balance - oldBalance, 1); + assert.equal(lNew.balance, 0); // now, paying same internal invoice. should fail: @@ -261,16 +261,16 @@ describe('LightningCustodianWallet', () => { assert.ok(coughtError); await lOld.fetchTransactions(); - assert.strictEqual(txLen, lOld.transactions_raw.length, 'tx count should not be changed'); - assert.strictEqual(invLen, (await lNew.getUserInvoices()).length, 'invoices count should not be changed'); + assert.equal(txLen, lOld.transactions_raw.length, 'tx count should not be changed'); + assert.equal(invLen, (await lNew.getUserInvoices()).length, 'invoices count should not be changed'); // testing how limiting works: - assert.strictEqual(lNew.user_invoices_raw.length, 1); + assert.equal(lNew.user_invoices_raw.length, 1); await lNew.addInvoice(666, 'test memo 2'); invoices = await lNew.getUserInvoices(1); - assert.strictEqual(invoices.length, 2); - assert.strictEqual(invoices[0].amt, 1); - assert.strictEqual(invoices[1].amt, 666); + assert.equal(invoices.length, 2); + assert.equal(invoices[0].amt, 1); + assert.equal(invoices[1].amt, 666); }); it('can pay free amount (tip) invoice', async function() { @@ -319,7 +319,7 @@ describe('LightningCustodianWallet', () => { let decoded = await l2.decodeInvoice(invoice); assert.ok(decoded.payment_hash); assert.ok(decoded.description); - assert.strictEqual(+decoded.num_satoshis, 0); + assert.equal(+decoded.num_satoshis, 0); await l2.checkRouteInvoice(invoice); @@ -342,10 +342,10 @@ describe('LightningCustodianWallet', () => { } await l2.fetchTransactions(); - assert.strictEqual(l2.transactions_raw.length, txLen + 1); + assert.equal(l2.transactions_raw.length, txLen + 1); // transactions became more after paying an invoice await l2.fetchBalance(); - assert.strictEqual(oldBalance - l2.balance, 3); + assert.equal(oldBalance - l2.balance, 3); }); }); diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java index 8b6c6b507..323c5b832 100644 --- a/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java +++ b/android/app/src/main/java/io/bluewallet/bluewallet/MainActivity.java @@ -1,4 +1,4 @@ -package com.bluewallet; +package io.bluewallet.bluewallet; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; diff --git a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java index 2f8ffaf88..fa9fefd35 100644 --- a/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java +++ b/android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java @@ -3,14 +3,19 @@ package io.bluewallet.bluewallet; import android.app.Application; import com.facebook.react.ReactApplication; +import com.reactnativecommunity.webview.RNCWebViewPackage; +import com.oblador.vectoricons.VectorIconsPackage; +import org.reactnative.camera.RNCameraPackage; import io.sentry.RNSentryPackage; import com.bitgo.randombytes.RandomBytesPackage; import im.shimo.react.prompt.RNPromptPackage; import com.BV.LinearGradient.LinearGradientPackage; import com.mkuczera.RNReactNativeHapticFeedbackPackage; import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; -import com.reactnativecommunity.webview.RNCWebViewPackage; -import com.oblador.vectoricons.VectorIconsPackage; +import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; +import com.rnfs.RNFSPackage; +import com.learnium.RNDeviceInfo.RNDeviceInfo; +import org.reactnative.camera.RNCameraPackage; import com.horcrux.svg.SvgPackage; import io.sentry.RNSentryPackage; import com.bitgo.randombytes.RandomBytesPackage; @@ -23,7 +28,6 @@ import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; import com.facebook.soloader.SoLoader; -import org.reactnative.camera.RNCameraPackage; import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; import com.rnfs.RNFSPackage; @@ -42,24 +46,18 @@ public class MainApplication extends Application implements ReactApplication { protected List getPackages() { return Arrays.asList( new MainReactPackage(), - new RNSentryPackage(), - new RandomBytesPackage(), - new RNPromptPackage(), - new LinearGradientPackage(), - new RNReactNativeHapticFeedbackPackage(), - new GoogleAnalyticsBridgePackage(), new RNCWebViewPackage(), - new RNFSPackage() , - new VectorIconsPackage(), new SvgPackage(), + new RNCameraPackage(), new RNSentryPackage(), new RandomBytesPackage(), + new GoogleAnalyticsBridgePackage(), + new RNFSPackage(), + new RNDeviceInfo(), + new VectorIconsPackage(), new RNPromptPackage(), new LinearGradientPackage(), new RNReactNativeHapticFeedbackPackage(), - new GoogleAnalyticsBridgePackage(), - new RNDeviceInfo(), - new RNCameraPackage(), new RNGestureHandlerPackage() ); } diff --git a/android/build.gradle b/android/build.gradle index b6d4c5bb4..cfbb2b746 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - buildToolsVersion = "28.0.3" + buildToolsVersion = "27.0.3" minSdkVersion = 16 compileSdkVersion = 27 targetSdkVersion = 26 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index e9b9ac74b..e4a6127b9 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Wed Jan 16 14:12:19 EST 2019 +#Sat Jan 19 02:29:20 GMT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/android/settings.gradle b/android/settings.gradle index 85befb1c6..3e900d60d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,26 +1,4 @@ rootProject.name = 'BlueWallet' -include ':react-native-sentry' -project(':react-native-sentry').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sentry/android') -include ':react-native-randombytes' -project(':react-native-randombytes').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-randombytes/android') -include ':react-native-prompt-android' -project(':react-native-prompt-android').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-prompt-android/android') -include ':react-native-linear-gradient' -project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') -include ':react-native-haptic-feedback' -project(':react-native-haptic-feedback').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-haptic-feedback/android') -include ':react-native-google-analytics-bridge' -project(':react-native-google-analytics-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-analytics-bridge/android') -include ':react-native-gesture-handler' -project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') -include ':react-native-fs' -project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') -include ':react-native-webview' -project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') -include ':react-native-device-info' -project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') -include ':react-native-camera' -project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') include ':react-native-webview' project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') include ':react-native-svg' diff --git a/ios/BlueWallet.xcodeproj/project.pbxproj b/ios/BlueWallet.xcodeproj/project.pbxproj index afd890b11..891a6f9f6 100644 --- a/ios/BlueWallet.xcodeproj/project.pbxproj +++ b/ios/BlueWallet.xcodeproj/project.pbxproj @@ -499,13 +499,6 @@ remoteGlobalIDString = 0974579A1D2A440A000D9368; remoteInfo = RCTWKWebView; }; - B4DA894521F6056C00A3CB6C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F3DCC24027F4B1EAACBAE3C /* RNCWebView.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RNCWebView; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -1039,14 +1032,6 @@ name = Products; sourceTree = ""; }; - B4DA891821F6056C00A3CB6C /* Products */ = { - isa = PBXGroup; - children = ( - B4DA894621F6056C00A3CB6C /* libRNCWebView.a */, - ); - name = Products; - sourceTree = ""; - }; FC7D399B1A1043C49023DC79 /* Resources */ = { isa = PBXGroup; children = ( @@ -1252,10 +1237,6 @@ ProductGroup = B4C5B8E121F2DF3000A845C4 /* Products */; ProjectRef = 3853DFD4C6D44BB8B17AEDF0 /* RNCamera.xcodeproj */; }, - { - ProductGroup = B4DA891821F6056C00A3CB6C /* Products */; - ProjectRef = 5F3DCC24027F4B1EAACBAE3C /* RNCWebView.xcodeproj */; - }, { ProductGroup = B4C5B8E521F2DF3000A845C4 /* Products */; ProjectRef = 03D541ACCDD2451D9971158E /* RNDeviceInfo.xcodeproj */; @@ -1710,13 +1691,6 @@ remoteRef = B4C5BAB521F3708C00A845C4 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - B4DA894621F6056C00A3CB6C /* libRNCWebView.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNCWebView.a; - remoteRef = B4DA894521F6056C00A3CB6C /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ diff --git a/package-lock.json b/package-lock.json index 585ee2b6b..53b6411e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "3.6.0", + "version": "3.6.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1316,15 +1316,15 @@ } }, "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -2012,17 +2012,137 @@ } }, "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", + "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } + }, + "@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "^4.2.0" + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" + } + }, + "@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + } } }, "babel-generator": { @@ -2300,6 +2420,12 @@ } } }, + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -3750,173 +3876,66 @@ } }, "eslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", - "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", + "eslint-scope": "^3.7.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.0", - "esquery": "^1.0.1", + "espree": "^3.5.4", + "esquery": "^1.0.0", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "globals": "^11.0.1", + "ignore": "^3.3.3", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" }, "dependencies": { - "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "espree": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", - "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", - "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", - "dev": true, - "requires": { - "ansi-regex": "^4.0.0" - } - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3924,14 +3943,6 @@ "dev": true, "requires": { "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } } } } @@ -4045,23 +4056,10 @@ } }, "eslint-plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz", - "integrity": "sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "eslint-plugin-es": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", - "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", - "dev": true, - "requires": { - "eslint-utils": "^1.3.0", - "regexpp": "^2.0.1" - } + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", + "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=", + "dev": true }, "eslint-plugin-import": { "version": "2.14.0", @@ -4109,25 +4107,15 @@ } }, "eslint-plugin-node": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", - "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", + "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", "dev": true, "requires": { - "eslint-plugin-es": "^1.3.1", - "eslint-utils": "^1.3.1", - "ignore": "^5.0.2", + "ignore": "^3.3.6", "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" - }, - "dependencies": { - "ignore": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.4.tgz", - "integrity": "sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==", - "dev": true - } + "resolve": "^1.3.3", + "semver": "^5.4.1" } }, "eslint-plugin-prettier": { @@ -4140,9 +4128,9 @@ } }, "eslint-plugin-promise": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", - "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", "dev": true }, "eslint-plugin-react": { @@ -4165,12 +4153,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==" }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true - }, "eslint-scope": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", @@ -4181,12 +4163,6 @@ "estraverse": "^4.1.1" } }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, "eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", @@ -4374,9 +4350,9 @@ } }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "fast-diff": { @@ -6510,9 +6486,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, "json-stable-stringify": { @@ -7352,9 +7328,9 @@ } }, "metro-react-native-babel-preset": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz", - "integrity": "sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw==", + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.49.2.tgz", + "integrity": "sha512-N0+4ramShYCHSAVEPUNWIZuKZskWj8/RDSoinhadHpdpHORMbMxLkexSOVHLluB+XFQ+DENLEx5oVPYwOlENBA==", "dev": true, "requires": { "@babel/plugin-proposal-class-properties": "^7.0.0", @@ -7390,14 +7366,14 @@ "@babel/plugin-transform-typescript": "^7.0.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", - "metro-babel7-plugin-react-transform": "0.51.1", + "metro-babel7-plugin-react-transform": "0.49.2", "react-transform-hmr": "^1.0.4" }, "dependencies": { "metro-babel7-plugin-react-transform": { - "version": "0.51.1", - "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz", - "integrity": "sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw==", + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.49.2.tgz", + "integrity": "sha512-LpJT8UvqF/tvVqEwiLUTMjRPhEGdI8e2dr3424XaRANba3j0nqmrbKdJQsPE8TrcqMWR4RHmfsXk0ti5QrEvJg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0" @@ -7820,14 +7796,6 @@ } } } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "requires": { - "inherits": "2.0.3" - } } } }, @@ -8328,23 +8296,6 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==" }, - "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", - "dev": true - } - } - }, "parse-asn1": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.2.tgz", @@ -8465,6 +8416,11 @@ "sha.js": "^2.4.8" } }, + "pegjs": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -8556,9 +8512,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.0.tgz", - "integrity": "sha512-MCBCYeAuZfejUPdEpkleLWvpRBwLii/Sp5jQs0eb8Ul/drGIDjkL6tAU24tk6yCGf0KPV5rhPPPlczfBmN2pWQ==" + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.3.tgz", + "integrity": "sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==" }, "prettier-eslint": { "version": "8.8.2", @@ -8581,91 +8537,12 @@ "vue-eslint-parser": "^2.0.2" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, "pretty-format": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", @@ -8675,44 +8552,6 @@ "ansi-regex": "^3.0.0", "ansi-styles": "^3.2.0" } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } } } }, @@ -8742,24 +8581,6 @@ "yargs": "10.0.3" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "chalk": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", @@ -8771,85 +8592,12 @@ "supports-color": "^4.0.0" } }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, "rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -8859,24 +8607,6 @@ "symbol-observable": "1.0.1" } }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", @@ -8886,20 +8616,6 @@ "has-flag": "^2.0.0" } }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, "yargs": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", @@ -9366,9 +9082,9 @@ } }, "react-native-camera": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-1.9.0.tgz", - "integrity": "sha512-stvA9rWmN95DRr7a+eNr7LQlQLxP2Z7AJEoR8ctjcYx1EUMoL7qPFdz2JKmqZ/DEsW3ZKOC+ZCx68tscj9gDbQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-1.8.0.tgz", + "integrity": "sha512-fJPSbCZ4ZWI+1kQ2Y41ed0fr3Bnw+qo6eb8uv3HcTkGzBJ1OCzLIcAhpXLhizyiyY9nwSuMy9asQKS3Tun8eXA==", "requires": { "prop-types": "^15.6.2" } @@ -9408,9 +9124,9 @@ } }, "react-native-device-info": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.1.tgz", - "integrity": "sha512-KW4Mf0CVEy10sbWsrnP7dMiB+FhFa46r11+JPdXWu1hHoSy8B/DR5Cb29kHHZSCPftHPzEhfMDflRe4IOgHrVw==" + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.25.0.tgz", + "integrity": "sha512-5egYoRhO6OE4VHC2RZtjNYxuXtwR2oexoI1GwvAiYzyGEc2pkMaC59xN2W0NX0mDxhkfaDsMzc+WArLqSg62xA==" }, "react-native-elements": { "version": "0.19.1", @@ -9448,9 +9164,9 @@ } }, "react-native-google-analytics-bridge": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/react-native-google-analytics-bridge/-/react-native-google-analytics-bridge-7.0.0.tgz", - "integrity": "sha512-PifW2VXYqH92u6GyJfEZAiZQYHmXuJvN7eouuC9ZWadfz+m4MFJbsVFAAsTQ1JzMiuo8B5KwK97hpY0cp7HD9w==" + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/react-native-google-analytics-bridge/-/react-native-google-analytics-bridge-6.1.2.tgz", + "integrity": "sha512-QhBvtQb6/5ao0ubgjMRkJMnsAo05UYwTMJHPesMUT6GD9W0zneAUiCC3HtV8IsHZMSZ0HJxytLhnLtQhWzN7PQ==" }, "react-native-haptic-feedback": { "version": "1.4.2", @@ -9566,11 +9282,13 @@ } }, "react-native-svg": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.0.0.tgz", - "integrity": "sha512-HOmQ94XNdvo19SQp60MgEmF4scyhtR/78Oqr5vsMxNgnVRt9oaEfJygtfdhiUslYs4zHbCvKvPo4k+BJhh0pfA==", + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-8.0.10.tgz", + "integrity": "sha512-gsG5GUdvlox67+ohLnq3tZSqiYBmz4M5lKKeUfnJZ8EPrMMS5ZgaVj7Zcccee1VvINS5xQaoenUJdha/GEo34w==", "requires": { - "color": "^2.0.1" + "color": "^2.0.1", + "lodash": "^4.16.6", + "pegjs": "^0.10.0" } }, "react-native-tab-view": { @@ -9894,9 +9612,9 @@ } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", "dev": true }, "regexpu-core": { @@ -10790,13 +10508,11 @@ "dev": true }, "slice-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", - "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" } }, @@ -11243,14 +10959,16 @@ "dev": true }, "table": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.1.tgz", - "integrity": "sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "^6.6.1", - "lodash": "^4.17.11", - "slice-ansi": "2.0.0", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", "string-width": "^2.1.1" } }, @@ -11839,9 +11557,9 @@ "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" }, "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "requires": { "inherits": "2.0.3" } diff --git a/package.json b/package.json index 9a1e92b80..7c89d2278 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "BlueWallet", - "version": "3.6.0", + "version": "3.6.2", "devDependencies": { - "babel-eslint": "^10.0.1", + "babel-eslint": "^8.2.6", "babel-jest": "23.6.0", - "eslint": "^5.12.1", - "eslint-plugin-babel": "^5.3.0", + "eslint": "^4.19.1", + "eslint-plugin-babel": "^4.1.2", "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^8.0.1", - "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-node": "^6.0.1", + "eslint-plugin-promise": "^3.8.0", "eslint-plugin-react": "^7.12.3", "jest": "23.6.0", - "metro-react-native-babel-preset": "^0.51.1", + "metro-react-native-babel-preset": "^0.49.1", "prettier-eslint-cli": "^4.7.1", "react-test-renderer": "^16.7.0", "rn-nodeify": "github:tradle/rn-nodeify" @@ -54,20 +54,20 @@ "mocha": "^5.2.0", "node-libs-react-native": "^1.0.1", "path-browserify": "0.0.0", - "prettier": "^1.16.0", + "prettier": "^1.14.2", "process": "^0.11.10", "prop-types": "^15.6.2", "react": "^16.7.0", "react-localization": "^1.0.10", "react-native": "^0.57.8", - "react-native-camera": "^1.9.0", + "react-native-camera": "^1.8.0", "react-native-custom-qr-codes": "^2.0.0", - "react-native-device-info": "^0.25.1", + "react-native-device-info": "^0.25.0", "react-native-elements": "^0.19.0", "react-native-flexi-radio-button": "^0.2.2", "react-native-fs": "^2.13.3", "react-native-gesture-handler": "^1.0.12", - "react-native-google-analytics-bridge": "^7.0.0", + "react-native-google-analytics-bridge": "^6.1.2", "react-native-haptic-feedback": "^1.4.2", "react-native-level-fs": "^3.0.1", "react-native-linear-gradient": "^2.5.3", @@ -80,7 +80,7 @@ "react-native-sentry": "^0.40.2", "react-native-snap-carousel": "^3.7.4", "react-native-sortable-list": "0.0.22", - "react-native-svg": "^9.0.0", + "react-native-svg": "^8.0.10", "react-native-vector-icons": "^6.0.2", "react-native-webview": "2.8.0", "react-native-wkwebview-reborn": "^2.0.0", @@ -90,7 +90,6 @@ "request-promise-native": "^1.0.5", "secure-random": "^1.1.1", "stream-browserify": "^1.0.0", - "util": "^0.11.1", "wif": "^2.0.1" }, "react-native": { diff --git a/screen/lnd/lndViewAdditionalInvoiceInformation.js b/screen/lnd/lndViewAdditionalInvoiceInformation.js index 3b8ec1ecb..02fffe7f1 100644 --- a/screen/lnd/lndViewAdditionalInvoiceInformation.js +++ b/screen/lnd/lndViewAdditionalInvoiceInformation.js @@ -1,15 +1,7 @@ /* global alert */ import React, { Component } from 'react'; -import { View, Share } from 'react-native'; -import { - BlueLoading, - BlueCopyTextToClipboard, - SafeBlueArea, - BlueButton, - BlueNavigationStyle, - BlueText, - BlueSpacing20, -} from '../../BlueComponents'; +import { Animated, StyleSheet, View, TouchableOpacity, Clipboard, Share } from 'react-native'; +import { BlueLoading, SafeBlueArea, BlueButton, BlueNavigationStyle, BlueText, BlueSpacing20 } from '../../BlueComponents'; import PropTypes from 'prop-types'; import { QRCode } from 'react-native-custom-qr-codes'; /** @type {AppStorage} */ @@ -24,6 +16,13 @@ export default class LNDViewAdditionalInvoiceInformation extends Component { state = { walletInfo: undefined }; + copyToClipboard = () => { + this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { + Clipboard.setString(this.state.walletInfo.uris[0]); + setTimeout(() => this.setState({ addressText: this.state.walletInfo.uris[0] }), 1000); + }); + }; + async componentDidMount() { const fromWallet = this.props.navigation.getParam('fromWallet'); try { @@ -57,7 +56,11 @@ export default class LNDViewAdditionalInvoiceInformation extends Component { /> Open direct channel with this node: - + + + {this.state.addressText} + + { + this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { + Clipboard.setString(this.state.invoice.payment_request); + setTimeout(() => this.setState({ addressText: this.state.invoice.payment_request }), 1000); + }); + }; + onLayout = () => { const { height } = Dimensions.get('window'); this.setState({ qrCodeHeight: height > width ? width - 20 : width / 2 }); @@ -183,11 +181,12 @@ export default class LNDViewInvoice extends Component { flex: 1, alignItems: 'center', marginTop: 8, + paddingHorizontal: 16, justifyContent: 'space-between', }} onLayout={this.onLayout} > - + {invoice && invoice.amt && Please pay {invoice.amt} sats} {invoice && invoice.description && For: {invoice.description}} - + + + {this.state.addressText} + + { + this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { + Clipboard.setString(this.state.address); + setTimeout(() => this.setState({ addressText: this.state.address }), 1000); + }); + }; + render() { console.log('render() receive/details, address,secret=', this.state.address, ',', this.state.secret); if (this.state.isLoading) { @@ -95,7 +94,11 @@ export default class ReceiveDetails extends Component { backgroundColor={BlueApp.settings.brandingColor} logo={require('../../img/qr-code.png')} /> - + + + {this.state.addressText} + + { + this.setState({ addressText: loc.receive.details.copiedToClipboard }, () => { + Clipboard.setString(this.state.bip21); + setTimeout(() => this.setState({ addressText: this.state.address }), 1000); + }); + }; + determineSize = () => { if (width > 312) { return width - 48; @@ -114,7 +133,11 @@ export default class ReceiveAmount extends Component { )} - + + + {this.state.bip21} + + ); @@ -158,3 +181,12 @@ export default class ReceiveAmount extends Component { ); } } + +const styles = StyleSheet.create({ + address: { + marginVertical: 32, + fontSize: 15, + color: '#9aa0aa', + textAlign: 'center', + }, +}); diff --git a/screen/settings/about.js b/screen/settings/about.js index 50e9de08a..dc373da87 100644 --- a/screen/settings/about.js +++ b/screen/settings/about.js @@ -109,7 +109,7 @@ export default class About extends Component { }; Rate.rate(options, success => { if (success) { - console.log('User Rated.'); + console.warn('User Rated.'); } }); }} diff --git a/screen/wallets/buyBitcoin.js b/screen/wallets/buyBitcoin.js index ef299d1b2..5fea92290 100644 --- a/screen/wallets/buyBitcoin.js +++ b/screen/wallets/buyBitcoin.js @@ -1,14 +1,6 @@ import React, { Component } from 'react'; -import { Linking, View } from 'react-native'; -import { - BlueNavigationStyle, - BlueCopyTextToClipboard, - BlueLoading, - SafeBlueArea, - BlueButton, - BlueText, - BlueSpacing40, -} from '../../BlueComponents'; +import { Animated, Linking, StyleSheet, View, TouchableOpacity, Clipboard } from 'react-native'; +import { BlueNavigationStyle, BlueLoading, SafeBlueArea, BlueButton, BlueText, BlueSpacing40 } from '../../BlueComponents'; import PropTypes from 'prop-types'; /** @type {AppStorage} */ let BlueApp = require('../../BlueApp'); @@ -66,6 +58,13 @@ export default class BuyBitcoin extends Component { } } + copyToClipboard = () => { + this.setState({ addressText: loc.buyBitcoin.copied }, () => { + Clipboard.setString(this.state.address); + setTimeout(() => this.setState({ addressText: this.state.address }), 1000); + }); + }; + render() { console.log('render() receive/details, address,secret=', this.state.address, ',', this.state.secret); if (this.state.isLoading) { @@ -78,7 +77,11 @@ export default class BuyBitcoin extends Component { {loc.buyBitcoin.tap_your_address} - + + + {this.state.addressText} + + { + this.setState({ xpubText: loc.wallets.xpub.copiedToClipboard }, () => { + Clipboard.setString(this.state.xpub); + setTimeout(() => this.setState({ xpubText: this.state.xpub }), 1000); + }); + }; + onLayout = () => { const { height } = Dimensions.get('window'); this.setState({ qrCodeHeight: height > width ? width - 40 : width / 2 }); @@ -103,7 +110,11 @@ export default class WalletXpub extends Component { } })()} - + + + {this.state.xpubText} + + ); From a2df729b64e8ba0c6a1c11cac3de3e4b58fe6f73 Mon Sep 17 00:00:00 2001 From: Overtorment Date: Mon, 21 Jan 2019 14:55:24 +0000 Subject: [PATCH 13/15] REL: bump ver --- android/app/build.gradle | 2 +- ios/BlueWallet/Info.plist | 2 +- package-lock.json | 6 ++++-- package.json | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 9f6d7c428..31af60181 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -102,7 +102,7 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 - versionName "3.6.2" + versionName "3.6.3" ndk { abiFilters "armeabi-v7a", "x86" } diff --git a/ios/BlueWallet/Info.plist b/ios/BlueWallet/Info.plist index 434dc4351..70170fa80 100644 --- a/ios/BlueWallet/Info.plist +++ b/ios/BlueWallet/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.6.2 + 3.6.3 CFBundleSignature ???? CFBundleURLTypes diff --git a/package-lock.json b/package-lock.json index 53b6411e3..b8fd9ab8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "3.6.1", + "version": "3.6.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -7502,6 +7502,7 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -7510,7 +7511,8 @@ "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "optional": true } } }, diff --git a/package.json b/package.json index 7c89d2278..15baf9602 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "BlueWallet", - "version": "3.6.2", + "version": "3.6.3", "devDependencies": { "babel-eslint": "^8.2.6", "babel-jest": "23.6.0", From 352f691a2dc5de591969b02b469393e7842b8ab4 Mon Sep 17 00:00:00 2001 From: Overtorment Date: Sat, 19 Jan 2019 21:18:19 +0000 Subject: [PATCH 14/15] ADD: support for bip11-lightning (closes #257) --- screen/lnd/scanLndInvoice.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/screen/lnd/scanLndInvoice.js b/screen/lnd/scanLndInvoice.js index 4ad236aee..e8a216c3d 100644 --- a/screen/lnd/scanLndInvoice.js +++ b/screen/lnd/scanLndInvoice.js @@ -85,6 +85,12 @@ export default class ScanLndInvoice extends React.Component { return this.props.navigation.goBack(); } + // handling BIP21 w/BOLT11 support + let ind = data.indexOf('lightning='); + if (ind !== -1) { + data = data.substring(ind + 10).split('&')[0]; + } + data = data.replace('LIGHTNING:', '').replace('lightning:', ''); console.log(data); From da57133a273d9be22ca72a6f3db52db43bd57cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Rodriguez=20Ve=CC=81lez?= Date: Mon, 21 Jan 2019 18:15:14 -0500 Subject: [PATCH 15/15] ADD: NSMicrophoneUsageDescription in info.plist --- ios/BlueWallet/Info.plist | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ios/BlueWallet/Info.plist b/ios/BlueWallet/Info.plist index 70170fa80..3e2d98c32 100644 --- a/ios/BlueWallet/Info.plist +++ b/ios/BlueWallet/Info.plist @@ -56,7 +56,7 @@ NSCalendarsUsageDescription This alert should not show up as we do not require this data NSCameraUsageDescription - In order to quickly scan the recipient's address, we need your permission to use the camera to scan their QR Code. + In order to quickly scan the recipient's address, we need your permission to use the camera to scan their QR Code. NSLocationWhenInUseUsageDescription This alert should not show up as we do not require this data NSMotionUsageDescription @@ -67,6 +67,8 @@ This alert should not show up as we do not require this data NSSpeechRecognitionUsageDescription This alert should not show up as we do not require this data + NSMicrophoneUsageDescription + This alert should not show up as we do not require this data UIAppFonts AntDesign.ttf