diff --git a/.travis.yml b/.travis.yml index a5b94f89d..b41e15e93 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,7 +51,7 @@ install: - echo y | sdkmanager --no_https "system-images;android-$API;$EMU_FLAVOR;$ABI" >/dev/null # install our emulator # Set up KVM on linux for hardware acceleration. Manually here so it only happens for emulator tests, takes ~30s - - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install bridge-utils libpulse0 libvirt-bin qemu-kvm virtinst ubuntu-vm-builder + - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install bridge-utils libpulse0 libvirt-bin libxcursor1 qemu-kvm virtinst ubuntu-vm-builder - sudo adduser $USER libvirt - sudo adduser $USER kvm @@ -99,4 +99,4 @@ cache: directories: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ - - node_modules/ \ No newline at end of file + - node_modules/ diff --git a/RELEASE.md b/RELEASE.md index 56d607ed3..21067dc3a 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -2,12 +2,12 @@ ## Apple -* test the build on real device. its imperative that you run selftest and it gives you OK +* test the build on a real device. It is imperative that you run selftest and it gives you OK * if necessary, up version number in all relevant files (you can use `./edit-version-number.sh`) * run `./release-notes.sh` - it prints changelog between latest tag and now, put this output under new version in file `ios/fastlane/metadata/en-US/release_notes.txt` (on top); if file got too big delete the oldest version from the bottom of the file -* now is a good time to commit ver bump and release notes changes +* now is a good time to commit a ver bump and release notes changes * create this release version in App Store Connect (iTunes) and attach appropriate build. note last 4 digits of the build and announce it - this is now a RC. no need to fill release notes yet * `cd ios/` and then run `DELIVER_USERNAME="my_itunes_email@example.com" DELIVER_PASSWORD="my_itunes_password" fastlane deliver --force --skip_binary_upload --skip_screenshots --ignore_language_directory_validation -a io.bluewallet.bluewallet --app_version "6.6.6"` @@ -20,8 +20,9 @@ where `76ed479` is a latest commit in this version. replace the version as well. ## Android * do android after ios usually -* test the build on real device. its imperative that you run selftest and it gives you OK. note which build you are testing +* test the build on a real device. We hace accounts with browserstack where you can do so. +* its imperative that you run selftest and it gives you OK. note which build you are testing * go to appcenter.ms, find this exact build under `master` builds, and press `Distribute` -> `Store` -> `Production`. -in `Release notes` write `Bug fixes and performance improvements`, this field is to small to include actual changelog -* wait till appcenter displays message that it is succesfully distributed -* noice! \ No newline at end of file +in `Release notes` write the release, this field is to smaller than iOS, so you need to keep it bellow 500 characters. +* now just wait till appcenter displays a message that it is succesfully distributed +* noice! diff --git a/android/app/build.gradle b/android/app/build.gradle index 8ef733ec0..9c125c2eb 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -140,7 +140,7 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 - versionName "5.2.2" + versionName "5.3.1" multiDexEnabled true missingDimensionStrategy 'react-native-camera', 'general' testBuildType System.getProperty('testBuildType', 'debug') // This will later be used to control the test apk build type diff --git a/class/app-storage.js b/class/app-storage.js index d319fee05..d168e9f6c 100644 --- a/class/app-storage.js +++ b/class/app-storage.js @@ -302,8 +302,15 @@ export class AppStorage { await this.saveToDisk(); }; await WatchConnectivity.shared.sendWalletsToWatch(); - DeviceQuickActions.setWallets(this.wallets); - DeviceQuickActions.setQuickActions(); + + const isStorageEncrypted = await this.storageIsEncrypted(); + if (isStorageEncrypted) { + DeviceQuickActions.clearShortcutItems(); + DeviceQuickActions.removeAllWallets(); + } else { + DeviceQuickActions.setWallets(this.wallets); + DeviceQuickActions.setQuickActions(); + } return true; } else { return false; // failed loading data or loading/decryptin data diff --git a/ios/BlueWallet/Info.plist b/ios/BlueWallet/Info.plist index 8626305be..9b7b9ff5c 100644 --- a/ios/BlueWallet/Info.plist +++ b/ios/BlueWallet/Info.plist @@ -48,7 +48,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 5.2.2 + 5.3.1 CFBundleSignature ???? CFBundleURLTypes diff --git a/ios/BlueWalletWatch Extension/Info.plist b/ios/BlueWalletWatch Extension/Info.plist index 9175066f0..ea9cfe02d 100644 --- a/ios/BlueWalletWatch Extension/Info.plist +++ b/ios/BlueWalletWatch Extension/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 5.2.2 + 5.3.1 CFBundleVersion 239 CLKComplicationPrincipalClass diff --git a/ios/BlueWalletWatch/Info.plist b/ios/BlueWalletWatch/Info.plist index 1b51a6400..2531cce24 100644 --- a/ios/BlueWalletWatch/Info.plist +++ b/ios/BlueWalletWatch/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 5.2.2 + 5.3.1 CFBundleVersion 239 UISupportedInterfaceOrientations diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 586b59d3f..6db8d05e9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -194,13 +194,13 @@ PODS: - React - react-native-blur (0.8.0): - React - - react-native-camera (3.17.0): + - react-native-camera (3.19.1): - React - - react-native-camera/RCT (= 3.17.0) - - react-native-camera/RN (= 3.17.0) - - react-native-camera/RCT (3.17.0): + - react-native-camera/RCT (= 3.19.1) + - react-native-camera/RN (= 3.19.1) + - react-native-camera/RCT (3.19.1): - React - - react-native-camera/RN (3.17.0): + - react-native-camera/RN (3.19.1): - React - react-native-document-picker (3.2.0): - React @@ -497,7 +497,7 @@ SPEC CHECKSUMS: React-jsinspector: fa0ecc501688c3c4c34f28834a76302233e29dc0 react-native-biometrics: c892904948a32295b128f633bcc11eda020645c5 react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c - react-native-camera: 4ead7a30a89f275f531d80aa720cc69363c38135 + react-native-camera: 2eb144a4572d9342bddc946f4c0c3bc2b50e374e react-native-document-picker: e3516aff0dcf65ee0785d9bcf190eb10e2261154 react-native-image-picker: 3637d63fef7e32a230141ab4660d3ceb773c824f react-native-randombytes: 991545e6eaaf700b4ee384c291ef3d572e0b2ca8 diff --git a/ios/TodayExtension/Info.plist b/ios/TodayExtension/Info.plist index b76c15381..bae8e83db 100644 --- a/ios/TodayExtension/Info.plist +++ b/ios/TodayExtension/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 5.2.2 + 5.3.1 CFBundleVersion 1 NSExtension diff --git a/ios/fastlane/metadata/en-US/release_notes.txt b/ios/fastlane/metadata/en-US/release_notes.txt index 77987b32c..01f61b405 100644 --- a/ios/fastlane/metadata/en-US/release_notes.txt +++ b/ios/fastlane/metadata/en-US/release_notes.txt @@ -1,3 +1,21 @@ +v5.3.0 +====== + +* ADD: Open clipboard modal if address is detected at launch +* ADD: Copy from clipboard on actionsheet +* ADD: support for Electrum Personal Server and Electrs (disable protocol batching) +* ADD: avatars in HodlHodl offers list +* ADD: Long Press on Send. More optins to come +* FIX: Remove quick actions if storage is encrypted (improves plausible deniability) +* FIX: allow copy to clipboard on watch-only wallets +* FIX: electrum connection status now updates realtime +* FIX: import single-address bech32 wallet from WIF (closes #911) +* FIX: duplicate input detected error (closes #912) +* FIX: Error in back button - Marketplace #922 +* FIX: Don't display clipboard modal if content is from a lightning wallet +* REF: some love to the about section + + v5.2.0 ====== @@ -47,23 +65,3 @@ v4.9.4 * FIX: Handle both chains * FIX: deeplinking (safello etc) * DEL: Remove alerts from main list - -v4.9.2 -====== - -* ADD: Swipe to Scan -* ADD: Handle clipboard content with both bitcoin: and lightning: -* ADD: Ask user if they have backed up their seed phrase -* ADD: Export screen allows copying to clipboard if its a LNDHub wallet -* ADD: Show LNDHub backup when creating lnd wallet -* ADD: CLP Fiat -* FIX: TX Time visual glitch -* FIX: Show an alert when theres a fetch transactions error -* FIX: TX list uses whole canvas area -* FIX: Don't allow empty wallet labels -* FIX: Wallet type selecion clipping on advanced mode -* FIX: Receive address was not being rendered -* FIX: Don't show wallet export warning if wallet was imported -* REF: Reworked Import wallet flow -* REF: BIP49 to use electrum -* REF: Custom receive \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 77e6d2174..4fafd3b1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "bluewallet", - "version": "5.2.2", + "version": "5.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -18,11 +18,11 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.6.tgz", - "integrity": "sha512-CurCIKPTkS25Mb8mz267vU95vy+TyUpnctEX2lV33xWNmHAfjruztgiPBbXZRh3xZZy1CYvGx6XfxyTVS+sk7Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } @@ -267,6 +267,11 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -641,13 +646,39 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" + }, + "dependencies": { + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-modules-commonjs": { @@ -662,23 +693,75 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" + }, + "dependencies": { + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -848,12 +931,12 @@ } }, "@babel/preset-env": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz", - "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.7.tgz", + "integrity": "sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==", "requires": { - "@babel/compat-data": "^7.8.4", - "@babel/helper-compilation-targets": "^7.8.4", + "@babel/compat-data": "^7.8.6", + "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-proposal-async-generator-functions": "^7.8.3", @@ -876,13 +959,13 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-classes": "^7.8.6", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.4", + "@babel/plugin-transform-for-of": "^7.8.6", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", @@ -893,9 +976,9 @@ "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.4", + "@babel/plugin-transform-parameters": "^7.8.7", "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", "@babel/plugin-transform-reserved-words": "^7.8.3", "@babel/plugin-transform-shorthand-properties": "^7.8.3", "@babel/plugin-transform-spread": "^7.8.3", @@ -903,7 +986,7 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.3", + "@babel/types": "^7.8.7", "browserslist": "^4.8.5", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", @@ -3066,14 +3149,14 @@ } }, "browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", + "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", "requires": { - "caniuse-lite": "^1.0.30001035", - "electron-to-chromium": "^1.3.378", - "node-releases": "^1.1.52", - "pkg-up": "^3.1.0" + "caniuse-lite": "^1.0.30001038", + "electron-to-chromium": "^1.3.390", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "bs58": { @@ -3233,9 +3316,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001035", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001035.tgz", - "integrity": "sha512-C1ZxgkuA4/bUEdMbU5WrGY4+UhMFFiXrgNAfxiMIqWgFTWfv/xsZCS2xEHT2LMq7xAZfuAnu6mcqyDl0ZR6wLQ==" + "version": "1.0.30001040", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001040.tgz", + "integrity": "sha512-Ep0tEPeI5wCvmJNrXjE3etgfI+lkl1fTDU6Y3ZH1mhrjkPlVI9W4pcKbMo+BQLpEWKVYYp2EmYaRsqpPC3k7lQ==" }, "capture-exit": { "version": "2.0.0", @@ -3938,9 +4021,9 @@ } }, "dayjs": { - "version": "1.8.20", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.20.tgz", - "integrity": "sha512-mH0MCDxw6UCGJYxVN78h8ugWycZAO8thkj3bW6vApL5tS0hQplIDdAQcmbvl7n35H0AKdCJQaArTrIQw2xt4Qg==" + "version": "1.8.23", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.23.tgz", + "integrity": "sha512-NmYHMFONftoZbeOhVz6jfiXI4zSiPN6NoVWJgC0aZQfYVwzy/ZpESPHuCcI0B8BUMpSJQ08zenHDbofOLKq8hQ==" }, "debounce": { "version": "1.2.0", @@ -4102,9 +4185,9 @@ "dev": true }, "detox": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/detox/-/detox-16.0.0.tgz", - "integrity": "sha512-arlcCWFhl3A+SNx6ehlVpGMrBH1FPHu38QdJGnVgnMSol84Vt85aPC4m+CkcLtfApXeow1uXadhjOrzPS0AuJQ==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/detox/-/detox-16.1.1.tgz", + "integrity": "sha512-0f0PFOcx/w4Gcm0KQHgJTnrLvrB+4DBu95VdBgd/z/6SyGPmU8+tgCIdshHvePStUfi7i2EBj4zpYMGE30sLFw==", "dev": true, "requires": { "@babel/core": "^7.4.5", @@ -4369,9 +4452,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.379", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.379.tgz", - "integrity": "sha512-NK9DBBYEBb5f9D7zXI0hiE941gq3wkBeQmXs1ingigA/jnTg5mhwY2Z5egwA+ZI8OLGKCx0h1Cl8/xeuIBuLlg==" + "version": "1.3.402", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.402.tgz", + "integrity": "sha512-gaCDfX7IUH0s3JmBiHCDPrvVcdnTTP1r4WLJc2dHkYYbLmXZ2XHiJCcGQ9Balf91aKTvuCKCyu2JjJYRykoI1w==" }, "electrum-client": { "version": "git+https://github.com/BlueWallet/rn-electrum-client.git#2a5bb11dd9a8d89f328049d9ed59bce49d88a15d", @@ -9438,19 +9521,9 @@ } }, "node-releases": { - "version": "1.1.52", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz", - "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==" }, "node-version": { "version": "1.2.0", @@ -10127,11 +10200,51 @@ } }, "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", "requires": { - "find-up": "^3.0.0" + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + } } }, "plist": { diff --git a/package.json b/package.json index 44b00166b..90698e948 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bluewallet", - "version": "5.2.2", + "version": "5.3.1", "license": "MIT", "devDependencies": { "@babel/core": "^7.6.2", @@ -10,7 +10,7 @@ "babel-eslint": "^10.0.2", "babel-jest": "^24.9.0", "babel-preset-flow": "^6.23.0", - "detox": "16.0.0", + "detox": "16.1.1", "eslint": "^6.5.1", "eslint-plugin-babel": "^5.3.0", "eslint-plugin-import": "^2.18.0", @@ -57,7 +57,7 @@ ] }, "dependencies": { - "@babel/preset-env": "7.8.4", + "@babel/preset-env": "7.8.7", "@react-native-community/async-storage": "1.7.1", "@react-native-community/blur": "3.4.1", "@react-native-community/slider": "2.0.8", @@ -76,7 +76,7 @@ "buffer-reverse": "1.0.1", "coinselect": "3.1.11", "crypto-js": "3.1.9-1", - "dayjs": "1.8.20", + "dayjs": "1.8.23", "ecurve": "1.0.6", "electrum-client": "git+https://github.com/BlueWallet/rn-electrum-client.git#2a5bb11dd9a8d89f328049d9ed59bce49d88a15d", "eslint-config-prettier": "6.10.0", diff --git a/screen/lnd/scanLndInvoice.js b/screen/lnd/scanLndInvoice.js index 17e5b440a..bf7e7ffb9 100644 --- a/screen/lnd/scanLndInvoice.js +++ b/screen/lnd/scanLndInvoice.js @@ -1,15 +1,6 @@ /* global alert */ import React from 'react'; -import { - Text, - ActivityIndicator, - Platform, - KeyboardAvoidingView, - View, - TouchableWithoutFeedback, - TouchableOpacity, - Keyboard, -} from 'react-native'; +import { Text, ActivityIndicator, KeyboardAvoidingView, View, TouchableOpacity, Keyboard, ScrollView } from 'react-native'; import PropTypes from 'prop-types'; import { BlueButton, @@ -222,7 +213,7 @@ export default class ScanLndInvoice extends React.Component { renderWalletSelectionButton = () => { if (this.state.renderWalletSelectionButtonHidden) return; return ( - + {!this.state.isLoading && ( {this.state.fromWallet.getLabel()} - + {loc.formatBalanceWithoutSuffix(this.state.fromWallet.getBalance(), BitcoinUnit.SATS, false)} @@ -265,10 +256,10 @@ export default class ScanLndInvoice extends React.Component { return ; } return ( - - - - + + + + - {this.renderWalletSelectionButton()} - - - - + + + + ); } } @@ -361,4 +351,4 @@ ScanLndInvoice.propTypes = { }), }), }), -}; +}; \ No newline at end of file diff --git a/screen/wallets/add.js b/screen/wallets/add.js index 6ded7ea4a..e500b565a 100644 --- a/screen/wallets/add.js +++ b/screen/wallets/add.js @@ -20,11 +20,9 @@ import { BlueFormLabel, BlueButton, SafeBlueArea, - BlueFormInput, BlueNavigationStyle, BlueButtonLink, BlueSpacing20, - BlueSpacing10, } from '../../BlueComponents'; import { RadioGroup, RadioButton } from 'react-native-flexi-radio-button'; import PropTypes from 'prop-types'; @@ -94,10 +92,10 @@ export default class WalletsAdd extends Component { } return ( - - - {loc.wallets.add.wallet_name} - + + + + {loc.wallets.add.wallet_name} - - {loc.wallets.add.wallet_type} + {loc.wallets.add.wallet_type} - - { - Keyboard.dismiss(); - this.setState({ - activeBitcoin: true, - activeLightning: false, - }); - }} - style={{ - width: '45%', - height: 88, - }} - /> - - {loc.wallets.add.or} - - { - Keyboard.dismiss(); - this.setState({ - activeBitcoin: false, - activeLightning: true, - }); - }} - style={{ - width: '45%', - height: 88, - }} - /> - - - - {(() => { - if (this.state.activeBitcoin && this.state.isAdvancedOptionsEnabled) { - return ( - - - {loc.settings.advanced_options} - this.onSelect(index, value)} selectedIndex={0}> - - {HDSegwitBech32Wallet.typeReadable} - Multiple addresses - - - {SegwitP2SHWallet.typeReadable} - Single address - - - {HDSegwitP2SHWallet.typeReadable} - Multiple addresses - - - - ); - } else if (this.state.activeLightning && this.state.isAdvancedOptionsEnabled) { - return ( - - - {loc.settings.advanced_options} - - Connect to your LNDHub - { - this.setState({ walletBaseURI: text }); - }} - onSubmitEditing={Keyboard.dismiss} - placeholder="your node address" - clearButtonMode="while-editing" - autoCapitalize="none" - /> - - ); - } else if (this.state.activeBitcoin === undefined && this.state.isAdvancedOptionsEnabled) { - return ; - } - })()} - {!this.state.isLoading ? ( - { - this.setState({ isLoading: true }, async () => { - let w; + { + Keyboard.dismiss(); + this.setState({ + activeBitcoin: true, + activeLightning: false, + }); + }} + style={{ + width: '45%', + height: 88, + }} + /> + + {loc.wallets.add.or} + + { + Keyboard.dismiss(); + this.setState({ + activeBitcoin: false, + activeLightning: true, + }); + }} + style={{ + width: '45%', + height: 88, + }} + /> + - if (this.state.activeLightning) { - // eslint-disable-next-line + + {(() => { + if (this.state.activeBitcoin && this.state.isAdvancedOptionsEnabled) { + return ( + + + {loc.settings.advanced_options} + this.onSelect(index, value)} selectedIndex={0}> + + {HDSegwitBech32Wallet.typeReadable} - Multiple addresses + + + {SegwitP2SHWallet.typeReadable} - Single address + + + {HDSegwitP2SHWallet.typeReadable} - Multiple addresses + + + + ); + } else if (this.state.activeLightning && this.state.isAdvancedOptionsEnabled) { + return ( + + + {loc.settings.advanced_options} + + Connect to your LNDHub + + { + this.setState({ walletBaseURI: text }); + }} + onSubmitEditing={Keyboard.dismiss} + placeholder="your node address" + clearButtonMode="while-editing" + autoCapitalize="none" + placeholderTextColor="#81868e" + style={{ flex: 1, marginHorizontal: 8, color: '#81868e' }} + editable={!this.state.isLoading} + underlineColorAndroid="transparent" + /> + + + ); + } else if (this.state.activeBitcoin === undefined && this.state.isAdvancedOptionsEnabled) { + return ; + } + })()} + + {!this.state.isLoading ? ( + { + this.setState({ isLoading: true }, async () => { + let w; - this.createLightningWallet = async () => { - w = new LightningCustodianWallet(); - w.setLabel(this.state.label || loc.wallets.details.title); + if (this.state.activeLightning) { + // eslint-disable-next-line - try { - let lndhub = - this.state.walletBaseURI.trim().length > 0 - ? this.state.walletBaseURI - : LightningCustodianWallet.defaultBaseUri; - if (lndhub) { - const isValidNodeAddress = await LightningCustodianWallet.isValidNodeAddress(lndhub); - if (isValidNodeAddress) { - w.setBaseURI(lndhub); - w.init(); - } else { - throw new Error('The provided node address is not valid LNDHub node.'); + this.createLightningWallet = async () => { + w = new LightningCustodianWallet(); + w.setLabel(this.state.label || loc.wallets.details.title); + + try { + let lndhub = + this.state.walletBaseURI.trim().length > 0 + ? this.state.walletBaseURI + : LightningCustodianWallet.defaultBaseUri; + if (lndhub) { + const isValidNodeAddress = await LightningCustodianWallet.isValidNodeAddress(lndhub); + if (isValidNodeAddress) { + w.setBaseURI(lndhub); + w.init(); + } else { + throw new Error('The provided node address is not valid LNDHub node.'); + } } + await w.createAccount(); + await w.authorize(); + } catch (Err) { + this.setState({ isLoading: false }); + console.warn('lnd create failure', Err); + return alert(Err); + // giving app, not adding anything } - await w.createAccount(); - await w.authorize(); - } catch (Err) { - this.setState({ isLoading: false }); - console.warn('lnd create failure', Err); - return alert(Err); - // giving app, not adding anything - } - A(A.ENUM.CREATED_LIGHTNING_WALLET); + A(A.ENUM.CREATED_LIGHTNING_WALLET); + await w.generate(); + BlueApp.wallets.push(w); + await BlueApp.saveToDisk(); + EV(EV.enum.WALLETS_COUNT_CHANGED); + A(A.ENUM.CREATED_WALLET); + ReactNativeHapticFeedback.trigger('notificationSuccess', { ignoreAndroidSystemSettings: false }); + this.props.navigation.navigate('PleaseBackupLNDHub', { + wallet: w, + }); + }; + this.createLightningWallet(); + } else if (this.state.selectedIndex === 2) { + // zero index radio - HD segwit + w = new HDSegwitP2SHWallet(); + w.setLabel(this.state.label || loc.wallets.details.title); + } else if (this.state.selectedIndex === 1) { + // btc was selected + // index 1 radio - segwit single address + w = new SegwitP2SHWallet(); + w.setLabel(this.state.label || loc.wallets.details.title); + } else { + // btc was selected + // index 2 radio - hd bip84 + w = new HDSegwitBech32Wallet(); + w.setLabel(this.state.label || loc.wallets.details.title); + } + if (this.state.activeBitcoin) { await w.generate(); BlueApp.wallets.push(w); await BlueApp.saveToDisk(); EV(EV.enum.WALLETS_COUNT_CHANGED); A(A.ENUM.CREATED_WALLET); ReactNativeHapticFeedback.trigger('notificationSuccess', { ignoreAndroidSystemSettings: false }); - this.props.navigation.navigate('PleaseBackupLNDHub', { - wallet: w, - }); - }; - this.createLightningWallet(); - } else if (this.state.selectedIndex === 2) { - // zero index radio - HD segwit - w = new HDSegwitP2SHWallet(); - w.setLabel(this.state.label || loc.wallets.details.title); - } else if (this.state.selectedIndex === 1) { - // btc was selected - // index 1 radio - segwit single address - w = new SegwitP2SHWallet(); - w.setLabel(this.state.label || loc.wallets.details.title); - } else { - // btc was selected - // index 2 radio - hd bip84 - w = new HDSegwitBech32Wallet(); - w.setLabel(this.state.label || loc.wallets.details.title); - } - if (this.state.activeBitcoin) { - await w.generate(); - BlueApp.wallets.push(w); - await BlueApp.saveToDisk(); - EV(EV.enum.WALLETS_COUNT_CHANGED); - A(A.ENUM.CREATED_WALLET); - ReactNativeHapticFeedback.trigger('notificationSuccess', { ignoreAndroidSystemSettings: false }); - if (w.type === HDSegwitP2SHWallet.type || w.type === HDSegwitBech32Wallet.type) { - this.props.navigation.navigate('PleaseBackup', { - secret: w.getSecret(), - }); - } else { - this.props.navigation.dismiss(); + if (w.type === HDSegwitP2SHWallet.type || w.type === HDSegwitBech32Wallet.type) { + this.props.navigation.navigate('PleaseBackup', { + secret: w.getSecret(), + }); + } else { + this.props.navigation.dismiss(); + } } - } - }); - }} - /> - ) : ( - - )} + }); + }} + /> + ) : ( + + )} + + { + this.props.navigation.navigate('ImportWallet'); + }} + /> - - { - this.props.navigation.navigate('ImportWallet'); - }} - /> - - + + ); }