Browse Source

Merge branch 'master' of github.com:BlueWallet/BlueWallet

feesheet
Overtorment 6 years ago
parent
commit
cfef1704e1
  1. 2
      android/app/build.gradle
  2. 2
      android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java
  3. 4
      android/build.gradle
  4. 2
      android/gradle/wrapper/gradle-wrapper.properties
  5. 2
      android/settings.gradle
  6. 144
      ios/BlueWallet.xcodeproj/project.pbxproj
  7. 2
      ios/BlueWallet/Info.plist
  8. 3256
      package-lock.json
  9. 64
      package.json
  10. 299
      screen/lnd/browser.js
  11. 2
      screen/send/details.js

2
android/app/build.gradle

@ -107,6 +107,7 @@ android {
abiFilters "armeabi-v7a", "x86"
}
multiDexEnabled true
missingDimensionStrategy 'react-native-camera', 'general'
}
splits {
abi {
@ -138,6 +139,7 @@ android {
}
dependencies {
implementation project(':@react-native-community_slider')
implementation project(':react-native-obscure')
implementation project(':react-native-tcp')
implementation project(':@remobile_react-native-qrcode-local-image')

2
android/app/src/main/java/io/bluewallet/bluewallet/MainApplication.java

@ -3,6 +3,7 @@ package io.bluewallet.bluewallet;
import android.app.Application;
import com.facebook.react.ReactApplication;
import com.reactnativecommunity.slider.ReactSliderPackage;
import com.diegofhg.obscure.ObscurePackage;
import com.peel.react.TcpSocketsModule;
import com.remobile.qrcodeLocalImage.RCTQRCodeLocalImagePackage;
@ -57,6 +58,7 @@ public class MainApplication extends Application implements ReactApplication {
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new ReactSliderPackage(),
new ObscurePackage(),
new TcpSocketsModule(),
new RCTQRCodeLocalImagePackage(),

4
android/build.gradle

@ -2,7 +2,7 @@
buildscript {
ext {
buildToolsVersion = "28.0.2"
buildToolsVersion = "28.0.3"
minSdkVersion = 16
compileSdkVersion = 28
targetSdkVersion = 27
@ -13,7 +13,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.android.tools.build:gradle:3.3.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

2
android/gradle/wrapper/gradle-wrapper.properties

@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

2
android/settings.gradle

@ -1,4 +1,6 @@
rootProject.name = 'BlueWallet'
include ':@react-native-community_slider'
project(':@react-native-community_slider').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/slider/android')
include ':react-native-obscure'
project(':react-native-obscure').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-obscure/android')
include ':react-native-tcp'

144
ios/BlueWallet.xcodeproj/project.pbxproj

@ -14,8 +14,8 @@
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
00E356F31AD99517003FC87E /* BlueWalletTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* BlueWalletTests.m */; };
01AB943FA0794E91B65F0BFE /* libRCTPrivacySnapshot.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FC63C7054F1C4FDFB7A830E5 /* libRCTPrivacySnapshot.a */; };
02DEC1C9F61B405E8E357B2E /* libRCTWKWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E7078D2FED444DA4B0BD57F9 /* libRCTWKWebView.a */; };
034FE828CEF14A6CBCF9073E /* libRNFS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8637D4B5E14D443A9031DA95 /* libRNFS.a */; };
09C0911C2C014C8C87F192C9 /* libRNCSlider.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B4D3235A177F4580BA52F2F9 /* libRNCSlider.a */; };
0AF37AC0E67044038B49FB3B /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D746BBE67E84684848246E2 /* SimpleLineIcons.ttf */; };
0B2C4EBFB4CB4960AAD777BC /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 44BC9E3EE0E9476A830CCCB9 /* Entypo.ttf */; };
11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
@ -67,6 +67,7 @@
B058E2132B704E9E874BDB29 /* libRNRandomBytes-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 253243E162CE4822BF3A3B7D /* libRNRandomBytes-tvOS.a */; };
B1102FDCF41C4D008352748B /* libRNReactNativeHapticFeedback.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AB2325650CE04F018697ACFE /* libRNReactNativeHapticFeedback.a */; };
B44D665E562B4F289F09D327 /* libRNSVG-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1F51A83D044F3BB26A35FC /* libRNSVG-tvOS.a */; };
B4E923F92251B32100ABC850 /* libRNCWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B40FE68321FAD78F005D5578 /* libRNCWebView.a */; };
C1056BF235EE4E23AAF21975 /* libRCTQRCodeLocalImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B642AFB13483418CAB6FF25E /* libRCTQRCodeLocalImage.a */; };
C10C13E4CC4445C5861B1A3A /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD7977067E1A496F94D8B1B7 /* libRNDeviceInfo.a */; };
C41EC263DBE649299C99B9A5 /* libRNRate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BBA99996E6FA4B49ACE0BEFA /* libRNRate.a */; };
@ -514,13 +515,6 @@
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RNCWebView;
};
B40FE6DC21FAD7A8005D5578 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = E7173EC6B95B4981AD3D4C70 /* RCTWKWebView.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 0974579A1D2A440A000D9368;
remoteInfo = RCTWKWebView;
};
B4327EF221FC137D00F7ADFA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1A03CFBC35DD4AC28FA4A619 /* RNImagePicker.xcodeproj */;
@ -549,6 +543,20 @@
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = TcpSockets;
};
B4E923C32251B1CF00ABC850 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 178483985D8A4250A4794DA7 /* RNGestureHandler.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = B5C32A36220C603B000FFB8D;
remoteInfo = "RNGestureHandler-tvOS";
};
B4E923D52251B1CF00ABC850 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C41AE1DD23384D5CA09A0F90 /* RNCSlider.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 28C79A09220DC4CC0061DE82;
remoteInfo = RNCSlider;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
@ -618,11 +626,13 @@
A9166D490AEF4938BD6621CF /* 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 = "<group>"; };
AB2325650CE04F018697ACFE /* libRNReactNativeHapticFeedback.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNReactNativeHapticFeedback.a; sourceTree = "<group>"; };
ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = "<group>"; };
B4D3235A177F4580BA52F2F9 /* libRNCSlider.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCSlider.a; sourceTree = "<group>"; };
B642AFB13483418CAB6FF25E /* libRCTQRCodeLocalImage.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTQRCodeLocalImage.a; sourceTree = "<group>"; };
B9D9B3A7B2CB4255876B67AF /* 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; };
BBA99996E6FA4B49ACE0BEFA /* libRNRate.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRate.a; sourceTree = "<group>"; };
BCBEC3BDE968405183D1ABAD /* 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 = "<group>"; };
C0B8F0536B07482281FA173E /* 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 = "<group>"; };
C41AE1DD23384D5CA09A0F90 /* RNCSlider.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCSlider.xcodeproj; path = "../node_modules/@react-native-community/slider/ios/RNCSlider.xcodeproj"; sourceTree = "<group>"; };
C4496FB303574862B40A878A /* 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 = "<group>"; };
CA741BA794714D3F80251AC9 /* 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 = "<group>"; };
CD746B955C55410793BB72C0 /* libRNGestureHandler.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNGestureHandler.a; sourceTree = "<group>"; };
@ -633,8 +643,6 @@
D6EC5B694E664FD7B02EDD2F /* libRNSentry.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSentry.a; sourceTree = "<group>"; };
E432C66239704518B4C8719B /* 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 = "<group>"; };
E6B44173A8854B6D85D7F933 /* libRNVectorIcons-tvOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = "libRNVectorIcons-tvOS.a"; sourceTree = "<group>"; };
E7078D2FED444DA4B0BD57F9 /* libRCTWKWebView.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTWKWebView.a; sourceTree = "<group>"; };
E7173EC6B95B4981AD3D4C70 /* 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 = "<group>"; };
E8E8CE89B3D142C6A8A56C34 /* 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 = "<group>"; };
EAEF0F27730C4742B0F3AB99 /* 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 = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
@ -660,6 +668,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
B4E923F92251B32100ABC850 /* libRNCWebView.a in Frameworks */,
ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */,
ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */,
11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */,
@ -690,13 +699,13 @@
C70F52A820614622A16EAF23 /* libRNSentry.a in Frameworks */,
6D9E44529B3C463AB9E6CA39 /* libRNVectorIcons.a in Frameworks */,
1FE70B15FB724CE3927C7541 /* libRNSVG.a in Frameworks */,
02DEC1C9F61B405E8E357B2E /* libRCTWKWebView.a in Frameworks */,
A6E5EEC7A4B54F5A9C9D92FC /* libRNImagePicker.a in Frameworks */,
C1056BF235EE4E23AAF21975 /* libRCTQRCodeLocalImage.a in Frameworks */,
34582CAA4AD140F7B80C961A /* libTcpSockets.a in Frameworks */,
C98BD93429374073A736EFBD /* libToolTipMenu.a in Frameworks */,
16763847ED654C79A4B4BBD5 /* ToolTipMenuTests.xctest in Frameworks */,
01AB943FA0794E91B65F0BFE /* libRCTPrivacySnapshot.a in Frameworks */,
09C0911C2C014C8C87F192C9 /* libRNCSlider.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -931,12 +940,12 @@
9EA3788F4C6643B7B0182587 /* RNVectorIcons.xcodeproj */,
3BC85BBCB16D42A4BAC73161 /* RNSVG.xcodeproj */,
2509F6D4DBD14FECBAD3EAC6 /* RNCWebView.xcodeproj */,
E7173EC6B95B4981AD3D4C70 /* RCTWKWebView.xcodeproj */,
1A03CFBC35DD4AC28FA4A619 /* RNImagePicker.xcodeproj */,
7EA61BC8FF6E4AD2A67F1557 /* RCTQRCodeLocalImage.xcodeproj */,
910283A2A9EB4D00902DE78E /* TcpSockets.xcodeproj */,
151034F9C66E464B8A6581DA /* ToolTipMenu.xcodeproj */,
CEF75317A8A047AB85BF0FC9 /* RCTPrivacySnapshot.xcodeproj */,
C41AE1DD23384D5CA09A0F90 /* RNCSlider.xcodeproj */,
);
name = Libraries;
sourceTree = "<group>";
@ -1016,13 +1025,13 @@
94565BFC6A0C4235B3EC7B01 /* libRNSVG.a */,
9F1F51A83D044F3BB26A35FC /* libRNSVG-tvOS.a */,
A7C4B1FDAD264618BAF8C335 /* libRNCWebView.a */,
E7078D2FED444DA4B0BD57F9 /* libRCTWKWebView.a */,
FC98DC24A81A463AB8B2E6B1 /* libRNImagePicker.a */,
B642AFB13483418CAB6FF25E /* libRCTQRCodeLocalImage.a */,
9DF4E6C040764E4BA1ACC1EB /* libTcpSockets.a */,
90F86BC5194548CA87D729A9 /* libToolTipMenu.a */,
8448882949434D41A054C0B2 /* ToolTipMenuTests.xctest */,
FC63C7054F1C4FDFB7A830E5 /* libRCTPrivacySnapshot.a */,
B4D3235A177F4580BA52F2F9 /* libRNCSlider.a */,
);
name = "Recovered References";
sourceTree = "<group>";
@ -1074,6 +1083,7 @@
isa = PBXGroup;
children = (
B40FE56C21FAD229005D5578 /* libRNGestureHandler.a */,
B4E923C42251B1CF00ABC850 /* libRNGestureHandler-tvOS.a */,
);
name = Products;
sourceTree = "<group>";
@ -1146,14 +1156,6 @@
name = Products;
sourceTree = "<group>";
};
B40FE6D921FAD7A7005D5578 /* Products */ = {
isa = PBXGroup;
children = (
B40FE6DD21FAD7A8005D5578 /* libRCTWKWebView.a */,
);
name = Products;
sourceTree = "<group>";
};
B4327EEF21FC137D00F7ADFA /* Products */ = {
isa = PBXGroup;
children = (
@ -1186,6 +1188,14 @@
name = Products;
sourceTree = "<group>";
};
B4E923D22251B1CF00ABC850 /* Products */ = {
isa = PBXGroup;
children = (
B4E923D62251B1CF00ABC850 /* libRNCSlider.a */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -1296,6 +1306,7 @@
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
English,
en,
Base,
);
@ -1363,10 +1374,6 @@
ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
},
{
ProductGroup = B40FE6D921FAD7A7005D5578 /* Products */;
ProjectRef = E7173EC6B95B4981AD3D4C70 /* RCTWKWebView.xcodeproj */;
},
{
ProductGroup = 146834001AC3E56700842450 /* Products */;
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
@ -1379,6 +1386,10 @@
ProductGroup = B40FE53D21FAD229005D5578 /* Products */;
ProjectRef = BCBEC3BDE968405183D1ABAD /* RNCamera.xcodeproj */;
},
{
ProductGroup = B4E923D22251B1CF00ABC850 /* Products */;
ProjectRef = C41AE1DD23384D5CA09A0F90 /* RNCSlider.xcodeproj */;
},
{
ProductGroup = B40FE67F21FAD78F005D5578 /* Products */;
ProjectRef = 2509F6D4DBD14FECBAD3EAC6 /* RNCWebView.xcodeproj */;
@ -1856,13 +1867,6 @@
remoteRef = B40FE68221FAD78F005D5578 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
B40FE6DD21FAD7A8005D5578 /* libRCTWKWebView.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTWKWebView.a;
remoteRef = B40FE6DC21FAD7A8005D5578 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
B4327EF321FC137D00F7ADFA /* libRNImagePicker.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@ -1891,6 +1895,20 @@
remoteRef = B47720652202510900DD0E81 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
B4E923C42251B1CF00ABC850 /* libRNGestureHandler-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRNGestureHandler-tvOS.a";
remoteRef = B4E923C32251B1CF00ABC850 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
B4E923D62251B1CF00ABC850 /* libRNCSlider.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRNCSlider.a;
remoteRef = B4E923D52251B1CF00ABC850 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
@ -2061,22 +2079,17 @@
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-webview/ios",
"$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView",
"$(SRCROOT)/../node_modules/react-native-image-picker/ios",
"$(SRCROOT)/../node_modules/@remobile/react-native-qrcode-local-image/ios/RCTQRCodeLocalImage",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-tooltip/ToolTipMenu",
"$(SRCROOT)/../node_modules/react-native-privacy-snapshot/RCTPrivacySnapshot",
"$(SRCROOT)/../node_modules/@react-native-community/slider/ios",
);
INFOPLIST_FILE = BlueWalletTests/Info.plist;
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)\"",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
@ -2109,22 +2122,17 @@
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-webview/ios",
"$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView",
"$(SRCROOT)/../node_modules/react-native-image-picker/ios",
"$(SRCROOT)/../node_modules/@remobile/react-native-qrcode-local-image/ios/RCTQRCodeLocalImage",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-tooltip/ToolTipMenu",
"$(SRCROOT)/../node_modules/react-native-privacy-snapshot/RCTPrivacySnapshot",
"$(SRCROOT)/../node_modules/@react-native-community/slider/ios",
);
INFOPLIST_FILE = BlueWalletTests/Info.plist;
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)\"",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
@ -2158,15 +2166,15 @@
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-webview/ios",
"$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView",
"$(SRCROOT)/../node_modules/react-native-image-picker/ios",
"$(SRCROOT)/../node_modules/@remobile/react-native-qrcode-local-image/ios/RCTQRCodeLocalImage",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-tooltip/ToolTipMenu",
"$(SRCROOT)/../node_modules/react-native-privacy-snapshot/RCTPrivacySnapshot",
"$(SRCROOT)/../node_modules/@react-native-community/slider/ios",
);
INFOPLIST_FILE = BlueWallet/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
@ -2202,15 +2210,15 @@
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-webview/ios",
"$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView",
"$(SRCROOT)/../node_modules/react-native-image-picker/ios",
"$(SRCROOT)/../node_modules/@remobile/react-native-qrcode-local-image/ios/RCTQRCodeLocalImage",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-tooltip/ToolTipMenu",
"$(SRCROOT)/../node_modules/react-native-privacy-snapshot/RCTPrivacySnapshot",
"$(SRCROOT)/../node_modules/@react-native-community/slider/ios",
);
INFOPLIST_FILE = BlueWallet/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
@ -2253,21 +2261,16 @@
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-webview/ios",
"$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView",
"$(SRCROOT)/../node_modules/react-native-image-picker/ios",
"$(SRCROOT)/../node_modules/@remobile/react-native-qrcode-local-image/ios/RCTQRCodeLocalImage",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-tooltip/ToolTipMenu",
"$(SRCROOT)/../node_modules/react-native-privacy-snapshot/RCTPrivacySnapshot",
"$(SRCROOT)/../node_modules/@react-native-community/slider/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)\"",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
@ -2309,21 +2312,16 @@
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-webview/ios",
"$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView",
"$(SRCROOT)/../node_modules/react-native-image-picker/ios",
"$(SRCROOT)/../node_modules/@remobile/react-native-qrcode-local-image/ios/RCTQRCodeLocalImage",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-tooltip/ToolTipMenu",
"$(SRCROOT)/../node_modules/react-native-privacy-snapshot/RCTPrivacySnapshot",
"$(SRCROOT)/../node_modules/@react-native-community/slider/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)\"",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
@ -2364,21 +2362,16 @@
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-webview/ios",
"$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView",
"$(SRCROOT)/../node_modules/react-native-image-picker/ios",
"$(SRCROOT)/../node_modules/@remobile/react-native-qrcode-local-image/ios/RCTQRCodeLocalImage",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-tooltip/ToolTipMenu",
"$(SRCROOT)/../node_modules/react-native-privacy-snapshot/RCTPrivacySnapshot",
"$(SRCROOT)/../node_modules/@react-native-community/slider/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)\"",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
@ -2419,21 +2412,16 @@
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-webview/ios",
"$(SRCROOT)/../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView",
"$(SRCROOT)/../node_modules/react-native-image-picker/ios",
"$(SRCROOT)/../node_modules/@remobile/react-native-qrcode-local-image/ios/RCTQRCodeLocalImage",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-tooltip/ToolTipMenu",
"$(SRCROOT)/../node_modules/react-native-privacy-snapshot/RCTPrivacySnapshot",
"$(SRCROOT)/../node_modules/@react-native-community/slider/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)\"",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",

2
ios/BlueWallet/Info.plist

@ -56,7 +56,7 @@
<key>NSCalendarsUsageDescription</key>
<string>This alert should not show up as we do not require this data</string>
<key>NSCameraUsageDescription</key>
<string>In order to quickly scan the recipient's address, we need your permission to use the camera to scan their QR Code.</string>
<string>In order to quickly scan the recipient&apos;s address, we need your permission to use the camera to scan their QR Code.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This alert should not show up as we do not require this data</string>
<key>NSLocationAlwaysUsageDescription</key>

3256
package-lock.json

File diff suppressed because it is too large

64
package.json

@ -3,17 +3,17 @@
"version": "3.9.4",
"devDependencies": {
"babel-eslint": "^10.0.1",
"babel-jest": "^24.0.0",
"eslint": "^5.13.0",
"babel-jest": "^24.7.1",
"eslint": "^5.16.0",
"eslint-plugin-babel": "^5.3.0",
"eslint-plugin-import": "^2.15.0",
"eslint-plugin-node": "^8.0.1",
"eslint-plugin-promise": "^4.0.1",
"eslint-plugin-promise": "^4.1.1",
"eslint-plugin-react": "^7.12.3",
"jest": "^24.0.0",
"metro-react-native-babel-preset": "^0.51.1",
"jest": "^24.7.1",
"metro-react-native-babel-preset": "^0.53.1",
"prettier-eslint-cli": "^4.7.1",
"react-test-renderer": "^16.7.0",
"react-test-renderer": "^16.8.6",
"rn-nodeify": "github:tradle/rn-nodeify"
},
"scripts": {
@ -36,45 +36,46 @@
}
},
"dependencies": {
"@babel/preset-env": "7.3.1",
"@babel/preset-env": "7.4.3",
"@react-native-community/slider": "1.0.4",
"@remobile/react-native-qrcode-local-image": "1.0.4",
"bignumber.js": "8.0.2",
"bignumber.js": "8.1.1",
"bip21": "2.0.2",
"bip39": "2.5.0",
"bitcoinjs-lib": "3.3.2",
"buffer": "5.2.1",
"buffer-reverse": "1.0.1",
"crypto-js": "3.1.9-1",
"dayjs": "1.8.6",
"dayjs": "1.8.12",
"electrum-client": "git+https://github.com/Overtorment/node-electrum-client.git",
"eslint-config-prettier": "4.0.0",
"eslint-config-prettier": "4.1.0",
"eslint-config-standard": "12.0.0",
"eslint-config-standard-react": "7.0.2",
"eslint-plugin-prettier": "3.0.1",
"eslint-plugin-standard": "4.0.0",
"frisbee": "2.0.5",
"frisbee": "2.0.8",
"intl": "1.2.5",
"mocha": "5.2.0",
"node-libs-react-native": "1.0.1",
"node-libs-react-native": "1.0.3",
"path-browserify": "1.0.0",
"prettier": "1.16.3",
"prettier": "1.16.4",
"process": "0.11.10",
"prop-types": "15.6.2",
"react": "16.7.0",
"react-localization": "1.0.10",
"react-native": "0.58.6",
"react-native-camera": "1.10.0",
"react-native-device-info": "^0.26.4",
"prop-types": "15.7.2",
"react": "16.8.6",
"react-localization": "1.0.13",
"react-native": "0.59.3",
"react-native-camera": "2.2.1",
"react-native-device-info": "1.4.2",
"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.15",
"react-native-google-analytics-bridge": "7.0.0",
"react-native-haptic-feedback": "^1.6.0",
"react-native-image-picker": "0.28.0",
"react-native-gesture-handler": "1.1.0",
"react-native-google-analytics-bridge": "7.1.0",
"react-native-haptic-feedback": "1.6.0",
"react-native-image-picker": "0.28.1",
"react-native-level-fs": "3.0.1",
"react-native-linear-gradient": "2.5.3",
"react-native-modal": "7.0.2",
"react-native-linear-gradient": "2.5.4",
"react-native-modal": "9.0.0",
"react-native-obscure": "1.2.1",
"react-native-permissions": "1.1.1",
"react-native-popup-menu-android": "1.0.3",
@ -83,18 +84,17 @@
"react-native-qrcode-svg": "5.1.2",
"react-native-randombytes": "3.5.2",
"react-native-rate": "1.1.6",
"react-native-sentry": "0.41.1",
"react-native-sentry": "0.42.0",
"react-native-snap-carousel": "3.7.5",
"react-native-sortable-list": "0.0.22",
"react-native-svg": "9.1.1",
"react-native-svg": "9.3.7",
"react-native-tcp": "3.3.0",
"react-native-tooltip": "git+https://github.com/marcosrdz/react-native-tooltip.git",
"react-native-vector-icons": "6.2.0",
"react-native-webview": "4.1.0",
"react-native-wkwebview-reborn": "2.0.0",
"react-navigation": "^3.3.2",
"react-native-vector-icons": "6.4.2",
"react-native-webview": "5.6.2",
"react-navigation": "3.6.1",
"react-test-render": "1.1.1",
"readable-stream": "3.1.1",
"readable-stream": "3.3.0",
"secure-random": "1.1.1",
"stream-browserify": "2.0.2",
"util": "0.11.1",

299
screen/lnd/browser.js

@ -1,7 +1,6 @@
import React, { Component } from 'react';
import { TouchableOpacity, ActivityIndicator, TextInput, Keyboard, BackHandler, View, Platform, Alert } from 'react-native';
import { TouchableOpacity, ActivityIndicator, TextInput, Keyboard, BackHandler, View, Alert } from 'react-native';
import { WebView } from 'react-native-webview';
import WKWebView from 'react-native-wkwebview-reborn';
import { BlueNavigationStyle, SafeBlueArea } from '../../BlueComponents';
import Ionicons from 'react-native-vector-icons/Ionicons';
import PropTypes from 'prop-types';
@ -16,19 +15,19 @@ let bluewalletResponses = {};
// eslint-disable-next-line
var webln = {
enable: function() {
window.postMessage(JSON.stringify({ enable: true }));
window.ReactNativeWebView.postMessage(JSON.stringify({ enable: true }));
return new Promise(function(resolve, reject) {
resolve(true);
});
},
getInfo: function() {
window.postMessage('getInfo');
window.ReactNativeWebView.postMessage('getInfo');
return new Promise(function(resolve, reject) {
reject(new Error('not implemented'));
});
},
sendPayment: function(paymentRequest) {
window.postMessage(JSON.stringify({ sendPayment: paymentRequest }));
window.ReactNativeWebView.postMessage(JSON.stringify({ sendPayment: paymentRequest }));
return new Promise(function(resolve, reject) {
/* nop. intentionally, forever hang promise.
lapp page usually asynchroniously checks payment itself, via ajax,
@ -38,7 +37,7 @@ var webln = {
},
makeInvoice: function(RequestInvoiceArgs) {
var id = Math.random();
window.postMessage(JSON.stringify({ makeInvoice: RequestInvoiceArgs, id: id }));
window.ReactNativeWebView.postMessage(JSON.stringify({ makeInvoice: RequestInvoiceArgs, id: id }));
return new Promise(function(resolve, reject) {
var interval = setInterval(function() {
if (bluewalletResponses[id]) {
@ -49,13 +48,13 @@ var webln = {
});
},
signMessage: function() {
window.postMessage('signMessage');
window.ReactNativeWebView.postMessage('signMessage');
return new Promise(function(resolve, reject) {
reject(new Error('not implemented'));
});
},
verifyMessage: function() {
window.postMessage('verifyMessage');
window.ReactNativeWebView.postMessage('verifyMessage');
return new Promise(function(resolve, reject) {
reject(new Error('not implemented'));
});
@ -92,19 +91,19 @@ bluewalletResponses = {};
webln = {
enable : function () {
window.postMessage(JSON.stringify({'enable': true}));
window.ReactNativeWebView.postMessage(JSON.stringify({'enable': true}));
return new Promise(function(resolve, reject){
resolve(true);
})
},
getInfo : function () {
window.postMessage('getInfo');
window.ReactNativeWebView.postMessage('getInfo');
return new Promise(function(resolve, reject){
reject('not implemented');
})
},
sendPayment: function(paymentRequest) {
window.postMessage(JSON.stringify({ sendPayment: paymentRequest }));
window.ReactNativeWebView.postMessage(JSON.stringify({ sendPayment: paymentRequest }));
return new Promise(function(resolve, reject) {
/* nop. intentionally, forever hang promise.
lapp page usually asynchroniously checks payment itself, via ajax,
@ -114,7 +113,7 @@ webln = {
},
makeInvoice: function (RequestInvoiceArgs) {
var id = Math.random();
window.postMessage(JSON.stringify({makeInvoice: RequestInvoiceArgs, id: id}));
window.ReactNativeWebView.postMessage(JSON.stringify({makeInvoice: RequestInvoiceArgs, id: id}));
return new Promise(function(resolve, reject) {
var interval = setInterval(function () {
if (bluewalletResponses[id]) {
@ -125,13 +124,13 @@ webln = {
});
},
signMessage: function () {
window.postMessage('signMessage');
window.ReactNativeWebView.postMessage('signMessage');
return new Promise(function(resolve, reject){
reject('not implemented');
})
},
verifyMessage: function () {
window.postMessage('verifyMessage');
window.ReactNativeWebView.postMessage('verifyMessage');
return new Promise(function(resolve, reject){
reject('not implemented');
})
@ -143,7 +142,7 @@ webln = {
/* listening to events that might come from RN: */
document.addEventListener("message", function(event) {
window.postMessage("inside webview, received post message: " + event.data);
window.ReactNativeWebView.postMessage("inside webview, received post message: " + event.data);
var json;
try {
json = JSON.parse(event.data);
@ -161,14 +160,14 @@ document.addEventListener("message", function(event) {
function tryToPay(invoice) {
window.postMessage(JSON.stringify({sendPayment:invoice}));
window.ReactNativeWebView.postMessage(JSON.stringify({sendPayment:invoice}));
}
/* for non-webln compatible pages we do it oldschool,
searching for all bolt11 manually */
setInterval(function() {
window.postMessage('interval');
window.ReactNativeWebView.postMessage('interval');
var searchText = "lnbc";
@ -243,193 +242,103 @@ export default class Browser extends Component {
};
renderWebView = () => {
if (Platform.OS === 'android') {
return (
<WebView
onNavigationStateChange={this._onNavigationStateChange}
ref={ref => (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 => {
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 (
<WKWebView
ref={ref => (this.webview = ref)}
source={{ uri: this.state.url }}
injectJavaScript={injectedParadise}
onNavigationStateChange={this._onNavigationStateChange}
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) {
return (
<WebView
onNavigationStateChange={this._onNavigationStateChange}
ref={ref => (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();
// 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 },
);
//
processedInvoices[json.sendPayment] = 1;
}
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 }));
},
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.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 });
}}
/>
);
}
},
],
{ 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 });
}}
onLoadProgress={e => {
console.log('progress:', e.nativeEvent.progress);
if (!alreadyInjected && e.nativeEvent.progress > 0.5) {
this.webview.injectJavaScript(injectedParadise);
alreadyInjected = true;
console.log('injected');
}
}}
/>
);
};
render() {
return (
<SafeBlueArea>

2
screen/send/details.js

@ -11,7 +11,6 @@ import {
TouchableWithoutFeedback,
StyleSheet,
Platform,
Slider,
AsyncStorage,
Text,
} from 'react-native';
@ -24,6 +23,7 @@ import {
BlueDismissKeyboardInputAccessory,
BlueLoading,
} from '../../BlueComponents';
import Slider from '@react-native-community/slider';
import PropTypes from 'prop-types';
import Modal from 'react-native-modal';
import NetworkTransactionFees, { NetworkTransactionFee } from '../../models/networkTransactionFees';

Loading…
Cancel
Save