diff --git a/android/app/build.gradle b/android/app/build.gradle
index 4acb8ed..e59996b 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -200,6 +200,7 @@ android {
}
dependencies {
+ implementation project(':react-native-svg')
// Add v8-android - prebuilt libv8android.so into APK
implementation 'org.chromium:v8-android:+'
implementation project(':react-native-randombytes')
diff --git a/android/app/src/main/java/com/sifir/MainApplication.java b/android/app/src/main/java/com/sifir/MainApplication.java
index 9229a63..c420573 100644
--- a/android/app/src/main/java/com/sifir/MainApplication.java
+++ b/android/app/src/main/java/com/sifir/MainApplication.java
@@ -4,6 +4,7 @@
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
+import com.horcrux.svg.SvgPackage;
import com.bitgo.randombytes.RandomBytesPackage;
import cl.json.RNSharePackage;
import com.facebook.react.ReactNativeHost;
diff --git a/android/settings.gradle b/android/settings.gradle
index 657a105..b100672 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -1,4 +1,6 @@
rootProject.name = 'Sifir'
+include ':react-native-svg'
+project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android')
include ':watermelondb'
project(':watermelondb').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android')
include ':react-native-randombytes', ':gopenpgp'
diff --git a/babel.config.js b/babel.config.js
index ae9d761..cdc41c5 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -17,6 +17,7 @@ module.exports = {
'@helpers': './src/helpers',
'@types': './src/store/types',
'@screens': './src/components/screens',
+ '@structures': './src/components/structures',
},
},
],
diff --git a/ios/Podfile b/ios/Podfile
index e1f5841..d1f6afc 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -44,6 +44,8 @@ target 'Sifir' do
pod 'react-native-randombytes', :path => '../node_modules/react-native-randombytes'
+ pod 'RNSVG', :path => '../node_modules/react-native-svg'
+
target 'SifirTests' do
inherit! :search_paths
# Pods for testing
diff --git a/package-lock.json b/package-lock.json
index 482496d..9708f3a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,26 +5,26 @@
"requires": true,
"dependencies": {
"@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
+ "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
"requires": {
- "@babel/highlight": "^7.8.3"
+ "@babel/highlight": "^7.10.1"
}
},
"@babel/core": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz",
- "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==",
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.0",
- "@babel/helper-module-transforms": "^7.9.0",
- "@babel/helpers": "^7.9.0",
- "@babel/parser": "^7.9.0",
- "@babel/template": "^7.8.6",
- "@babel/traverse": "^7.9.0",
- "@babel/types": "^7.9.0",
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz",
+ "integrity": "sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==",
+ "requires": {
+ "@babel/code-frame": "^7.10.1",
+ "@babel/generator": "^7.10.2",
+ "@babel/helper-module-transforms": "^7.10.1",
+ "@babel/helpers": "^7.10.1",
+ "@babel/parser": "^7.10.2",
+ "@babel/template": "^7.10.1",
+ "@babel/traverse": "^7.10.1",
+ "@babel/types": "^7.10.2",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.1",
@@ -51,333 +51,333 @@
}
},
"@babel/generator": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
- "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz",
+ "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==",
"requires": {
- "@babel/types": "^7.9.5",
+ "@babel/types": "^7.10.2",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-annotate-as-pure": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
- "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz",
+ "integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==",
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
- "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz",
+ "integrity": "sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw==",
"requires": {
- "@babel/helper-explode-assignable-expression": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/helper-explode-assignable-expression": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-builder-react-jsx": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz",
- "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz",
+ "integrity": "sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/types": "^7.9.0"
+ "@babel/helper-annotate-as-pure": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-builder-react-jsx-experimental": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz",
- "integrity": "sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz",
+ "integrity": "sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/types": "^7.9.5"
+ "@babel/helper-annotate-as-pure": "^7.10.1",
+ "@babel/helper-module-imports": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.5.tgz",
- "integrity": "sha512-IipaxGaQmW4TfWoXdqjY0TzoXQ1HRS0kPpEgvjosb3u7Uedcq297xFqDQiCcQtRRwzIMif+N1MLVI8C5a4/PAA==",
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz",
+ "integrity": "sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ==",
"requires": {
- "@babel/helper-function-name": "^7.9.5",
- "@babel/helper-member-expression-to-functions": "^7.8.3",
- "@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-replace-supers": "^7.8.6",
- "@babel/helper-split-export-declaration": "^7.8.3"
+ "@babel/helper-function-name": "^7.10.1",
+ "@babel/helper-member-expression-to-functions": "^7.10.1",
+ "@babel/helper-optimise-call-expression": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-replace-supers": "^7.10.1",
+ "@babel/helper-split-export-declaration": "^7.10.1"
}
},
"@babel/helper-create-regexp-features-plugin": {
- "version": "7.8.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz",
- "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz",
+ "integrity": "sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-regex": "^7.8.3",
+ "@babel/helper-annotate-as-pure": "^7.10.1",
+ "@babel/helper-regex": "^7.10.1",
"regexpu-core": "^4.7.0"
}
},
"@babel/helper-define-map": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
- "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz",
+ "integrity": "sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg==",
"requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/types": "^7.8.3",
+ "@babel/helper-function-name": "^7.10.1",
+ "@babel/types": "^7.10.1",
"lodash": "^4.17.13"
}
},
"@babel/helper-explode-assignable-expression": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
- "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz",
+ "integrity": "sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg==",
"requires": {
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/traverse": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-function-name": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
- "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
+ "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
"requires": {
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.9.5"
+ "@babel/helper-get-function-arity": "^7.10.1",
+ "@babel/template": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
- "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
+ "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
- "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz",
+ "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==",
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-module-imports": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
- "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz",
+ "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==",
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.1"
}
},
"@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",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz",
+ "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.10.1",
+ "@babel/helper-replace-supers": "^7.10.1",
+ "@babel/helper-simple-access": "^7.10.1",
+ "@babel/helper-split-export-declaration": "^7.10.1",
+ "@babel/template": "^7.10.1",
+ "@babel/types": "^7.10.1",
"lodash": "^4.17.13"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
- "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz",
+ "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==",
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
- "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
+ "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
},
"@babel/helper-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
- "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.1.tgz",
+ "integrity": "sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==",
"requires": {
"lodash": "^4.17.13"
}
},
"@babel/helper-remap-async-to-generator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
- "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz",
+ "integrity": "sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-wrap-function": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/helper-annotate-as-pure": "^7.10.1",
+ "@babel/helper-wrap-function": "^7.10.1",
+ "@babel/template": "^7.10.1",
+ "@babel/traverse": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-replace-supers": {
- "version": "7.8.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz",
- "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz",
+ "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==",
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.8.3",
- "@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/traverse": "^7.8.6",
- "@babel/types": "^7.8.6"
+ "@babel/helper-member-expression-to-functions": "^7.10.1",
+ "@babel/helper-optimise-call-expression": "^7.10.1",
+ "@babel/traverse": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-simple-access": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
- "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz",
+ "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==",
"requires": {
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/template": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz",
+ "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==",
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.1"
}
},
"@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=="
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
+ "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
},
"@babel/helper-wrap-function": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
- "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz",
+ "integrity": "sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==",
"requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/helper-function-name": "^7.10.1",
+ "@babel/template": "^7.10.1",
+ "@babel/traverse": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/helpers": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz",
- "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz",
+ "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==",
"requires": {
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.9.0",
- "@babel/types": "^7.9.0"
+ "@babel/template": "^7.10.1",
+ "@babel/traverse": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/highlight": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
- "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
+ "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
"requires": {
- "@babel/helper-validator-identifier": "^7.9.0",
+ "@babel/helper-validator-identifier": "^7.10.1",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.9.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
- "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA=="
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz",
+ "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ=="
},
"@babel/plugin-external-helpers": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.8.3.tgz",
- "integrity": "sha512-mx0WXDDiIl5DwzMtzWGRSPugXi9BxROS05GQrhLNbEamhBiicgn994ibwkyiBH+6png7bm/yA7AUsvHyCXi4Vw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.10.1.tgz",
+ "integrity": "sha512-xFXc/Ts/gsgCrkh3waZbVdkzmhtnlw1L972gx96pmj8hXvloHnPTDgZ07vTDve9ilpe9TcrIMWLU7rg6FqnAWA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-proposal-class-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz",
- "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz",
+ "integrity": "sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-create-class-features-plugin": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-proposal-decorators": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz",
- "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.1.tgz",
+ "integrity": "sha512-xBfteh352MTke2U1NpclzMDmAmCdQ2fBZjhZQQfGTjXw6qcRYMkt528sA1U8o0ThDCSeuETXIj5bOGdxN+5gkw==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-decorators": "^7.8.3"
+ "@babel/helper-create-class-features-plugin": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/plugin-syntax-decorators": "^7.10.1"
}
},
"@babel/plugin-proposal-export-default-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz",
- "integrity": "sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.10.1.tgz",
+ "integrity": "sha512-Xfc1CfHapIkwZ/+AI+j4Ha3g233ol0EEdy6SmnUuQQiZX78SfQXHd8tmntc5zqCkwPnIHoiZa6l6p0OAvxYXHw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-export-default-from": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/plugin-syntax-export-default-from": "^7.10.1"
}
},
"@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz",
+ "integrity": "sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz",
- "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz",
+ "integrity": "sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-transform-parameters": "^7.9.5"
+ "@babel/plugin-transform-parameters": "^7.10.1"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz",
+ "integrity": "sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
}
},
"@babel/plugin-proposal-optional-chaining": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz",
- "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz",
+ "integrity": "sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.1",
"@babel/plugin-syntax-optional-chaining": "^7.8.0"
}
},
"@babel/plugin-syntax-class-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz",
- "integrity": "sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz",
+ "integrity": "sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-syntax-decorators": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz",
- "integrity": "sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz",
+ "integrity": "sha512-a9OAbQhKOwSle1Vr0NJu/ISg1sPfdEkfRKWpgPuzhnWWzForou2gIeUIIwjAMHRekhhpJ7eulZlYs0H14Cbi+g==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-syntax-dynamic-import": {
@@ -389,27 +389,27 @@
}
},
"@babel/plugin-syntax-export-default-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz",
- "integrity": "sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.10.1.tgz",
+ "integrity": "sha512-+rcL4S/mN1Ss4zhSCbxzv1Wsf12eauvgTjWi0krXEeX1zd6qSxYnJoniE5Ssr5w2WPt61oUCJyXIFQIqO/29zw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-syntax-flow": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz",
- "integrity": "sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.1.tgz",
+ "integrity": "sha512-b3pWVncLBYoPP60UOTc7NMlbtsHQ6ITim78KQejNHK6WJ2mzV5kCcg4mIWpasAfJEgwVTibwo2e+FU7UEIKQUg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-syntax-jsx": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz",
- "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz",
+ "integrity": "sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-syntax-nullish-coalescing-operator": {
@@ -445,218 +445,218 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz",
- "integrity": "sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.1.tgz",
+ "integrity": "sha512-X/d8glkrAtra7CaQGMiGs/OGa6XgUzqPcBXCIGFCpCqnfGlT0Wfbzo/B89xHhnInTaItPK8LALblVXcUOEh95Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-arrow-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
- "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz",
+ "integrity": "sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
- "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz",
+ "integrity": "sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==",
"requires": {
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-remap-async-to-generator": "^7.8.3"
+ "@babel/helper-module-imports": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-remap-async-to-generator": "^7.10.1"
}
},
"@babel/plugin-transform-block-scoped-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
- "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz",
+ "integrity": "sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
- "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz",
+ "integrity": "sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.1",
"lodash": "^4.17.13"
}
},
"@babel/plugin-transform-classes": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz",
- "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-define-map": "^7.8.3",
- "@babel/helper-function-name": "^7.9.5",
- "@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-replace-supers": "^7.8.6",
- "@babel/helper-split-export-declaration": "^7.8.3",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz",
+ "integrity": "sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.10.1",
+ "@babel/helper-define-map": "^7.10.1",
+ "@babel/helper-function-name": "^7.10.1",
+ "@babel/helper-optimise-call-expression": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-replace-supers": "^7.10.1",
+ "@babel/helper-split-export-declaration": "^7.10.1",
"globals": "^11.1.0"
}
},
"@babel/plugin-transform-computed-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
- "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz",
+ "integrity": "sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz",
- "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz",
+ "integrity": "sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-exponentiation-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
- "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz",
+ "integrity": "sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==",
"requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-flow-strip-types": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz",
- "integrity": "sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.1.tgz",
+ "integrity": "sha512-i4o0YwiJBIsIx7/liVCZ3Q2WkWr1/Yu39PksBOnh/khW2SwIFsGa5Ze+MSon5KbDfrEHP9NeyefAgvUSXzaEkw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-flow": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/plugin-syntax-flow": "^7.10.1"
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz",
- "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz",
+ "integrity": "sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
- "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz",
+ "integrity": "sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==",
"requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-function-name": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
- "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz",
+ "integrity": "sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-member-expression-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz",
- "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz",
+ "integrity": "sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz",
- "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz",
+ "integrity": "sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==",
"requires": {
- "@babel/helper-module-transforms": "^7.9.0",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-simple-access": "^7.8.3",
- "babel-plugin-dynamic-import-node": "^2.3.0"
+ "@babel/helper-module-transforms": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-simple-access": "^7.10.1",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-object-assign": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.8.3.tgz",
- "integrity": "sha512-i3LuN8tPDqUCRFu3dkzF2r1Nx0jp4scxtm7JxtIqI9he9Vk20YD+/zshdzR9JLsoBMlJlNR82a62vQExNEVx/Q==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.10.1.tgz",
+ "integrity": "sha512-poBEVwzcTjv6p92ZcnWBUftzyXFCy/Zg/eCQsayu5/ot2+qwnasNvCCKPwdgprgDRzbHVUhh/fzI9rCoFOHLbg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-object-super": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
- "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz",
+ "integrity": "sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-replace-supers": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-replace-supers": "^7.10.1"
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz",
- "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz",
+ "integrity": "sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==",
"requires": {
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-get-function-arity": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-property-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz",
- "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz",
+ "integrity": "sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-react-display-name": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz",
- "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz",
+ "integrity": "sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-react-jsx": {
- "version": "7.9.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz",
- "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz",
+ "integrity": "sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw==",
"requires": {
- "@babel/helper-builder-react-jsx": "^7.9.0",
- "@babel/helper-builder-react-jsx-experimental": "^7.9.0",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-jsx": "^7.8.3"
+ "@babel/helper-builder-react-jsx": "^7.10.1",
+ "@babel/helper-builder-react-jsx-experimental": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/plugin-syntax-jsx": "^7.10.1"
}
},
"@babel/plugin-transform-react-jsx-source": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz",
- "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz",
+ "integrity": "sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-jsx": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/plugin-syntax-jsx": "^7.10.1"
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.8.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz",
- "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz",
+ "integrity": "sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw==",
"requires": {
"regenerator-transform": "^0.14.2"
}
},
"@babel/plugin-transform-runtime": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz",
- "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz",
+ "integrity": "sha512-4w2tcglDVEwXJ5qxsY++DgWQdNJcCCsPxfT34wCUwIf2E7dI7pMpH8JczkMBbgBTNzBX62SZlNJ9H+De6Zebaw==",
"requires": {
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-module-imports": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1",
"resolve": "^1.8.1",
"semver": "^5.5.1"
},
@@ -669,62 +669,62 @@
}
},
"@babel/plugin-transform-shorthand-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
- "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz",
+ "integrity": "sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
- "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz",
+ "integrity": "sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-sticky-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
- "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz",
+ "integrity": "sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-regex": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-regex": "^7.10.1"
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
- "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz",
+ "integrity": "sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-annotate-as-pure": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/plugin-transform-typescript": {
- "version": "7.9.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.4.tgz",
- "integrity": "sha512-yeWeUkKx2auDbSxRe8MusAG+n4m9BFY/v+lPjmQDgOFX5qnySkUY5oXzkp6FwPdsYqnKay6lorXYdC0n3bZO7w==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.1.tgz",
+ "integrity": "sha512-v+QWKlmCnsaimLeqq9vyCsVRMViZG1k2SZTlcZvB+TqyH570Zsij8nvVUZzOASCRiQFUxkLrn9Wg/kH0zgy5OQ==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-typescript": "^7.8.3"
+ "@babel/helper-create-class-features-plugin": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/plugin-syntax-typescript": "^7.10.1"
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
- "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz",
+ "integrity": "sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==",
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-create-regexp-features-plugin": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.1"
}
},
"@babel/register": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.9.0.tgz",
- "integrity": "sha512-Tv8Zyi2J2VRR8g7pC5gTeIN8Ihultbmk0ocyNz8H2nEZbmhp1N6q0A1UGsQbDvGP/sNinQKUHf3SqXwqjtFv4Q==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.1.tgz",
+ "integrity": "sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg==",
"requires": {
"find-cache-dir": "^2.0.0",
"lodash": "^4.17.13",
@@ -734,34 +734,34 @@
}
},
"@babel/runtime": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
- "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz",
+ "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"@babel/template": {
- "version": "7.8.6",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
- "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
+ "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
"requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/parser": "^7.8.6",
- "@babel/types": "^7.8.6"
+ "@babel/code-frame": "^7.10.1",
+ "@babel/parser": "^7.10.1",
+ "@babel/types": "^7.10.1"
}
},
"@babel/traverse": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
- "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.9.5",
- "@babel/helper-function-name": "^7.9.5",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.9.0",
- "@babel/types": "^7.9.5",
+ "version": "7.10.1",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
+ "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "requires": {
+ "@babel/code-frame": "^7.10.1",
+ "@babel/generator": "^7.10.1",
+ "@babel/helper-function-name": "^7.10.1",
+ "@babel/helper-split-export-declaration": "^7.10.1",
+ "@babel/parser": "^7.10.1",
+ "@babel/types": "^7.10.1",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
@@ -778,11 +778,11 @@
}
},
"@babel/types": {
- "version": "7.9.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
- "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz",
+ "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==",
"requires": {
- "@babel/helper-validator-identifier": "^7.9.5",
+ "@babel/helper-validator-identifier": "^7.10.1",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -1041,9 +1041,9 @@
}
},
"@nozbe/watermelondb": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/@nozbe/watermelondb/-/watermelondb-0.16.0.tgz",
- "integrity": "sha512-WzV7YL8iPUVZ6KLQqzY9z1g913z3laFt4ZWCejcIZMWon89kZ8K9NlniufNUBkTCKrt007U4HSJw6bmTHrDnQA==",
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@nozbe/watermelondb/-/watermelondb-0.16.2.tgz",
+ "integrity": "sha512-LLOEl13bVCiLsZf8QCHt5KUmuks7QnMtsXuhBB2rSb1vBDjc3mG2HmkH/eTzbgJnGIdFzH/XtoVUHlS/ll7Log==",
"requires": {
"lodash.clonedeep": "^4.5.0",
"lokijs": "git+https://github.com/Nozbe/LokiJS.git#d08f660",
@@ -1063,9 +1063,9 @@
}
},
"@react-native-community/async-storage": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/async-storage/-/async-storage-1.9.0.tgz",
- "integrity": "sha512-TlGMr02JcmY4huH1P7Mt7p6wJecosPpW+09+CwCFLn875IhpRqU2XiVA+BQppZOYfQdHUfUzIKyCBeXOlCEbEg==",
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@react-native-community/async-storage/-/async-storage-1.11.0.tgz",
+ "integrity": "sha512-Pq9LlmvtCEKAGdkyrgTcRxNh2fnHFykEj2qnRYijOl1pDIl2MkD5IxaXu5eOL0wgOtAl4U//ff4z40Td6XR5rw==",
"requires": {
"deep-assign": "^3.0.0"
}
@@ -1169,9 +1169,9 @@
},
"dependencies": {
"mime": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
- "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA=="
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
}
}
},
@@ -1200,36 +1200,37 @@
}
},
"@react-native-community/masked-view": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.7.tgz",
- "integrity": "sha512-9KbP7LTLFz9dx1heURJbO6nuVMdSjDez8znlrUzaB1nUwKVsTTwlKRuHxGUYIIkReLWrJQeCv9tidy+84z2eCw=="
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.10.tgz",
+ "integrity": "sha512-rk4sWFsmtOw8oyx8SD3KSvawwaK7gRBSEIy2TAwURyGt+3TizssXP1r8nx3zY+R7v2vYYHXZ+k2/GULAT/bcaQ=="
},
"@react-navigation/core": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.3.3.tgz",
- "integrity": "sha512-YCrDIcvbuT++8RJA11gwv4qJTvsrwlp+4J1mWonGlHQnPMuB+uHvxqV8/VaHJ6FmzL11tSE6EzzdO0obm7JwIA==",
- "requires": {
- "@react-navigation/routers": "^5.3.0",
- "escape-string-regexp": "^2.0.0",
- "nanoid": "^3.0.2",
- "query-string": "^6.12.0",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.10.0.tgz",
+ "integrity": "sha512-cVQTj5FtZHWuymjZMP50RVXYpkQUbo1zQPjxJl+UfBUh7u9nKexknajBhjYbZq61uDE4MmPE8qAqIEJHKeR4Hg==",
+ "requires": {
+ "@react-navigation/routers": "^5.4.7",
+ "escape-string-regexp": "^4.0.0",
+ "nanoid": "^3.1.5",
+ "query-string": "^6.12.1",
"react-is": "^16.13.0",
"use-subscription": "^1.4.0"
},
"dependencies": {
"escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
}
}
},
"@react-navigation/native": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.1.5.tgz",
- "integrity": "sha512-LP8Z8YIXS5HrGJM8CR683pLBSU5MilGRQRZYCmvp8f77oKJm2o1ETZPaOPLav8gMrtcJ2B9T02HQSP1Kz/iIxQ==",
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.5.1.tgz",
+ "integrity": "sha512-5pzsfvLdnvqfrWgTMCLDFaGK6Sj30p7tAMhUGneV2oGlx0OIbhgc6/04UUMpKEmAS2PaC/GZa1LQIsSVWDewvw==",
"requires": {
- "@react-navigation/core": "^5.3.3"
+ "@react-navigation/core": "^5.10.0",
+ "nanoid": "^3.1.9"
}
},
"@react-navigation/native-stack": {
@@ -1238,17 +1239,17 @@
"integrity": "sha512-gzBwX0tVLUFSBudLV1BxwcyOJ8FZ0+fzWiK9BjFkamUCXE7Vi9mA5PIgoXW69X3tnATTM3+7VA3d+/UcflpJow=="
},
"@react-navigation/routers": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.3.0.tgz",
- "integrity": "sha512-hU9ize/NPHS5wWR5KVx/cgN9DH29Y9iHa+SxUd3IJmBnK8ujj0rM8xz3hihY4yfu0kOvTFOPHojoBwnpH5cs+g==",
+ "version": "5.4.7",
+ "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.4.7.tgz",
+ "integrity": "sha512-J+lQYDbEsyhAjcPpWY6ZJYEkGiZcPX62hNtySruShjbIEnI9gm3rC+BHdcrP/lufeWxWGFhI8CN7NSJGgP/Nmg==",
"requires": {
- "nanoid": "^3.0.2"
+ "nanoid": "^3.1.5"
}
},
"@react-navigation/stack": {
- "version": "5.2.10",
- "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.2.10.tgz",
- "integrity": "sha512-QOx+ak+nLox9h4iwxL6+eJ6ndo4C43BVibN8/EWLydvcHB078eqSCKB77PS6XsohGGe0xbD/+jTOYbvPpfpjGw==",
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.5.1.tgz",
+ "integrity": "sha512-oU2FEm+Ba6jMd5VA2WnuNfCO2HlZmGhrEX9yjBCyFj7fFCG1SB7WJdKLhZShtx3KxG/qWKphICeTLlYvkHdSpQ==",
"requires": {
"color": "^3.1.2",
"react-native-iphone-x-helper": "^1.2.1"
@@ -1264,9 +1265,9 @@
}
},
"@types/babel__core": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz",
- "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==",
+ "version": "7.1.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.8.tgz",
+ "integrity": "sha512-KXBiQG2OXvaPWFPDS1rD8yV9vO0OuWIqAEqLsbfX0oU2REN5KuoMnZ1gClWcBhO5I3n6oTVAmrMufOvRqdmFTQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
@@ -1296,9 +1297,9 @@
}
},
"@types/babel__traverse": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.10.tgz",
- "integrity": "sha512-74fNdUGrWsgIB/V9kTO5FGHPWYY6Eqn+3Z7L6Hc4e/BxjYV7puvBqp5HwsVYYfLm6iURYBNCx4Ut37OF9yitCw==",
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.12.tgz",
+ "integrity": "sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA==",
"dev": true,
"requires": {
"@babel/types": "^7.3.0"
@@ -1329,9 +1330,9 @@
"integrity": "sha512-7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ=="
},
"@types/istanbul-lib-coverage": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
- "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg=="
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
+ "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw=="
},
"@types/istanbul-lib-report": {
"version": "3.0.0",
@@ -1342,24 +1343,30 @@
}
},
"@types/istanbul-reports": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
- "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz",
+ "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==",
"requires": {
"@types/istanbul-lib-coverage": "*",
"@types/istanbul-lib-report": "*"
}
},
"@types/json-schema": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz",
- "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
+ "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==",
+ "dev": true
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
"dev": true
},
"@types/node": {
- "version": "13.11.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.1.tgz",
- "integrity": "sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g=="
+ "version": "14.0.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz",
+ "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA=="
},
"@types/prop-types": {
"version": "15.7.3",
@@ -1367,18 +1374,18 @@
"integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw=="
},
"@types/react": {
- "version": "16.9.34",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.34.tgz",
- "integrity": "sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow==",
+ "version": "16.9.37",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.37.tgz",
+ "integrity": "sha512-ZqnAXallQiZ08LTSqMfWMNvAfJEzRLOxdlbbbCIJlYGjU98BEU6bE2uBpKPGeWn+v3hIgCraHKtqUcKZBzMP/Q==",
"requires": {
"@types/prop-types": "*",
"csstype": "^2.2.0"
}
},
"@types/react-native": {
- "version": "0.62.2",
- "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.62.2.tgz",
- "integrity": "sha512-oIUIbqZNN9vRnGKWHYbTVp/GyTqdaM5mfy1s4zsi6BYvHAaFOPZ32IrhIHno/A5XOv4wuGfE7g5fliDk/H0+/Q==",
+ "version": "0.62.13",
+ "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.62.13.tgz",
+ "integrity": "sha512-hs4/tSABhcJx+J8pZhVoXHrOQD89WFmbs8QiDLNSA9zNrD46pityAuBWuwk1aMjPk9I3vC5ewkJroVRHgRIfdg==",
"requires": {
"@types/react": "*"
}
@@ -1398,9 +1405,9 @@
"integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw=="
},
"@types/yargs": {
- "version": "13.0.8",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz",
- "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==",
+ "version": "13.0.9",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
+ "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==",
"requires": {
"@types/yargs-parser": "*"
}
@@ -1507,9 +1514,9 @@
}
},
"acorn": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
- "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
+ "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA=="
},
"acorn-globals": {
"version": "4.3.4",
@@ -1552,9 +1559,9 @@
}
},
"acorn-walk": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz",
- "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ=="
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
},
"agent-base": {
"version": "4.2.1",
@@ -1565,9 +1572,9 @@
}
},
"ajv": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
- "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -1835,9 +1842,9 @@
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
- "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
+ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
},
"axios": {
"version": "0.19.2",
@@ -1889,9 +1896,9 @@
}
},
"babel-plugin-dynamic-import-node": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
- "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
"requires": {
"object.assign": "^4.1.0"
}
@@ -2138,9 +2145,9 @@
}
},
"bech32": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.3.tgz",
- "integrity": "sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg=="
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+ "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
},
"big-integer": {
"version": "1.6.48",
@@ -2196,9 +2203,9 @@
}
},
"bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
},
"body-parser": {
"version": "1.19.0",
@@ -2257,6 +2264,11 @@
"secp256k1": "^3.4.0"
}
},
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+ },
"bplist-creator": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz",
@@ -2452,17 +2464,41 @@
}
},
"browserify-sign": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
- "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz",
+ "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==",
"requires": {
- "bn.js": "^4.1.1",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.2",
- "elliptic": "^6.0.0",
- "inherits": "^2.0.1",
- "parse-asn1": "^5.0.0"
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.2",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
+ "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ }
}
},
"browserify-zlib": {
@@ -2508,11 +2544,30 @@
"ieee754": "^1.1.4"
}
},
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
+ },
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
},
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
+ },
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -2657,9 +2712,9 @@
"integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w=="
},
"cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="
},
"cliui": {
"version": "3.2.0",
@@ -2773,9 +2828,9 @@
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
},
"colorette": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz",
- "integrity": "sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.0.tgz",
+ "integrity": "sha512-soRSroY+OF/8OdA3PTQXwaDJeMc7TfknKKrxeSCencL2a4+Tx5zhxmmv7hdpCjhKBjehzp8+bwe/T68K0hpIjw=="
},
"combine-source-map": {
"version": "0.8.0",
@@ -2804,9 +2859,9 @@
}
},
"command-exists": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz",
- "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw=="
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="
},
"commander": {
"version": "2.20.3",
@@ -3053,6 +3108,43 @@
"randomfill": "^1.0.3"
}
},
+ "crypto-js": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz",
+ "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg=="
+ },
+ "css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.39",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
+ "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
+ "requires": {
+ "mdn-data": "2.0.6",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "css-what": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz",
+ "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg=="
+ },
"cssom": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
@@ -3084,8 +3176,8 @@
}
},
"cyphernode-js-sdk-transports": {
- "version": "git+https://github.com/gabidi/cyphernode-js-sdk-transports.git#7701da2e457db025b496c47847ee4472a433dc20",
- "from": "git+https://github.com/gabidi/cyphernode-js-sdk-transports.git#feature/rn",
+ "version": "git+https://git@github.com/gabidi/cyphernode-js-sdk-transports.git#f5c3d67200420737f11da2837dcac1665c08587f",
+ "from": "git+https://git@github.com/gabidi/cyphernode-js-sdk-transports.git#feature/rn",
"requires": {
"async": "^3.1.0",
"body-parser": "^1.19.0",
@@ -3111,6 +3203,80 @@
}
}
},
+ "d3-array": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.4.0.tgz",
+ "integrity": "sha512-KQ41bAF2BMakf/HdKT865ALd4cgND6VcIztVQZUTt0+BH3RWy6ZYnHghVXf6NFjt2ritLr8H1T8LreAAlfiNcw=="
+ },
+ "d3-collection": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
+ "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
+ },
+ "d3-color": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
+ "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
+ },
+ "d3-format": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz",
+ "integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw=="
+ },
+ "d3-interpolate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
+ "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
+ "requires": {
+ "d3-color": "1"
+ }
+ },
+ "d3-interpolate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/d3-interpolate-path/-/d3-interpolate-path-2.0.0.tgz",
+ "integrity": "sha1-ywMnMU/tsU5uoXiat+CVoWwvirI=",
+ "requires": {
+ "d3-interpolate": "^1.1.1"
+ }
+ },
+ "d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+ },
+ "d3-scale": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.1.tgz",
+ "integrity": "sha512-huz5byJO/6MPpz6Q8d4lg7GgSpTjIZW/l+1MQkzKfu2u8P6hjaXaStOpmyrD6ymKoW87d2QVFCKvSjLwjzx/rA==",
+ "requires": {
+ "d3-array": "1.2.0 - 2",
+ "d3-format": "1",
+ "d3-interpolate": "^1.2.0",
+ "d3-time": "1",
+ "d3-time-format": "2"
+ }
+ },
+ "d3-shape": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+ "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+ "requires": {
+ "d3-path": "1"
+ }
+ },
+ "d3-time": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
+ "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
+ },
+ "d3-time-format": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz",
+ "integrity": "sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA==",
+ "requires": {
+ "d3-time": "1"
+ }
+ },
"dash-ast": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
@@ -3154,14 +3320,9 @@
}
},
"dayjs": {
- "version": "1.8.24",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.24.tgz",
- "integrity": "sha512-bImQZbBv86zcOWOq6fLg7r4aqMx8fScdmykA7cSh+gH1Yh8AM0Dbw0gHYrsOrza6oBBnkK+/OaR+UAa9UsMrDw=="
- },
- "debounce": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz",
- "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg=="
+ "version": "1.8.28",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.28.tgz",
+ "integrity": "sha512-ccnYgKC0/hPSGXxj7Ju6AV/BP4HUkXC2u15mikXT5mX9YorEaoi1bEKOmAqdkJHN4EEkmAf97SpH66Try5Mbeg=="
},
"debug": {
"version": "2.6.9",
@@ -3358,6 +3519,11 @@
"randombytes": "^2.0.0"
}
},
+ "dijkstrajs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz",
+ "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs="
+ },
"doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -3367,11 +3533,32 @@
"esutils": "^2.0.2"
}
},
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="
+ }
+ }
+ },
"domain-browser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
"integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
},
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+ },
"domexception": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
@@ -3381,6 +3568,15 @@
"webidl-conversions": "^4.0.2"
}
},
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
"drbg.js": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz",
@@ -3462,10 +3658,15 @@
"once": "^1.4.0"
}
},
+ "entities": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
+ "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ=="
+ },
"envinfo": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.0.tgz",
- "integrity": "sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ=="
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.1.tgz",
+ "integrity": "sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ=="
},
"error-ex": {
"version": "1.3.2",
@@ -3485,22 +3686,22 @@
}
},
"es-abstract": {
- "version": "1.17.5",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
- "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "version": "1.17.6",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
+ "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
"dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1",
- "is-callable": "^1.1.5",
- "is-regex": "^1.0.5",
+ "is-callable": "^1.2.0",
+ "is-regex": "^1.1.0",
"object-inspect": "^1.7.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.0",
- "string.prototype.trimleft": "^2.1.1",
- "string.prototype.trimright": "^2.1.1"
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
}
},
"es-to-primitive": {
@@ -3538,9 +3739,9 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"escodegen": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
- "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.2.tgz",
+ "integrity": "sha512-InuOIiKk8wwuOFg6x9BQXbzjrQhtyXh46K9bqVTPzSo2FnyMBaYGBMC6PhQy7yxxil9vIedFBweQBMK74/7o8A==",
"requires": {
"esprima": "^4.0.1",
"estraverse": "^4.2.0",
@@ -3690,9 +3891,9 @@
"dev": true
},
"eslint-scope": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
- "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz",
+ "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==",
"dev": true,
"requires": {
"esrecurse": "^4.1.0",
@@ -3751,9 +3952,9 @@
}
},
"inquirer": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
- "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.2.0.tgz",
+ "integrity": "sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ==",
"dev": true,
"requires": {
"ansi-escapes": "^4.2.1",
@@ -3875,9 +4076,9 @@
}
},
"eslint-import-resolver-node": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz",
- "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==",
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz",
+ "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==",
"dev": true,
"requires": {
"debug": "^2.6.9",
@@ -3955,9 +4156,9 @@
}
},
"eslint-plugin-eslint-comments": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz",
- "integrity": "sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
+ "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
"dev": true,
"requires": {
"escape-string-regexp": "^1.0.5",
@@ -3974,23 +4175,24 @@
}
},
"eslint-plugin-import": {
- "version": "2.20.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz",
- "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==",
+ "version": "2.21.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz",
+ "integrity": "sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA==",
"dev": true,
"requires": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
+ "array-includes": "^3.1.1",
+ "array.prototype.flat": "^1.2.3",
"contains-path": "^0.1.0",
"debug": "^2.6.9",
"doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.2",
- "eslint-module-utils": "^2.4.1",
+ "eslint-import-resolver-node": "^0.3.3",
+ "eslint-module-utils": "^2.6.0",
"has": "^1.0.3",
"minimatch": "^3.0.4",
- "object.values": "^1.1.0",
+ "object.values": "^1.1.1",
"read-pkg-up": "^2.0.0",
- "resolve": "^1.12.0"
+ "resolve": "^1.17.0",
+ "tsconfig-paths": "^3.9.0"
},
"dependencies": {
"doctrine": {
@@ -4077,9 +4279,9 @@
}
},
"eslint-visitor-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
- "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz",
+ "integrity": "sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==",
"dev": true
},
"espree": {
@@ -4099,18 +4301,18 @@
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
},
"esquery": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz",
- "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
+ "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
"dev": true,
"requires": {
- "estraverse": "^5.0.0"
+ "estraverse": "^5.1.0"
},
"dependencies": {
"estraverse": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz",
- "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz",
+ "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==",
"dev": true
}
}
@@ -4381,9 +4583,9 @@
}
},
"fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"fast-diff": {
"version": "1.2.0",
@@ -4680,487 +4882,13 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
- "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"optional": true,
"requires": {
"bindings": "^1.5.0",
- "nan": "^2.12.1",
- "node-pre-gyp": "*"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "bundled": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "debug": {
- "version": "3.2.6",
- "bundled": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "bundled": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "bundled": true,
- "optional": true
- },
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "0.5.3",
- "bundled": true,
- "optional": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.3",
- "bundled": true,
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.14.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4.4.2"
- }
- },
- "nopt": {
- "version": "4.0.3",
- "bundled": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.8",
- "bundled": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "bundled": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "optional": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "bundled": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "yallist": {
- "version": "3.1.1",
- "bundled": true,
- "optional": true
- }
+ "nan": "^2.12.1"
}
},
"ftp": {
@@ -5283,9 +5011,9 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
},
"graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
},
"growly": {
"version": "1.3.0",
@@ -5363,20 +5091,38 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
"requires": {
- "is-buffer": "^1.1.5"
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
}
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
}
}
},
- "hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
"hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
@@ -5526,9 +5272,9 @@
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"ignore": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
- "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
+ "version": "5.1.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
"dev": true
},
"image-size": {
@@ -5682,9 +5428,9 @@
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"is-callable": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
- "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
"dev": true
},
"is-ci": {
@@ -5803,18 +5549,13 @@
"isobject": "^3.0.1"
}
},
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
- },
"is-regex": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
- "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
"dev": true,
"requires": {
- "has": "^1.0.3"
+ "has-symbols": "^1.0.1"
}
},
"is-stream": {
@@ -6795,9 +6536,9 @@
}
},
"jetifier": {
- "version": "1.6.5",
- "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.5.tgz",
- "integrity": "sha512-T7yzBSu9PR+DqjYt+I0KVO1XTb1QhAfHnXV5Nd3xpbXM6Xg4e3vP60Q4qkNU8Fh6PHC2PivPUNN3rY7G2MxcDQ=="
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.6.tgz",
+ "integrity": "sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ=="
},
"js-tokens": {
"version": "4.0.0",
@@ -6805,9 +6546,9 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
+ "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -6951,12 +6692,12 @@
}
},
"jsx-ast-utils": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
- "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
+ "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==",
"dev": true,
"requires": {
- "array-includes": "^3.0.3",
+ "array-includes": "^3.1.1",
"object.assign": "^4.1.0"
}
},
@@ -7217,9 +6958,9 @@
}
},
"loglevel": {
- "version": "1.6.7",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.7.tgz",
- "integrity": "sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A=="
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
+ "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA=="
},
"lokijs": {
"version": "git+https://github.com/Nozbe/LokiJS.git#d08f660794be558529f5ba049fe2868d4f243ec4",
@@ -7311,6 +7052,11 @@
"safe-buffer": "^5.1.2"
}
},
+ "mdn-data": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
+ "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA=="
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -7674,16 +7420,16 @@
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"mime-db": {
- "version": "1.43.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
- "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
},
"mime-types": {
- "version": "2.1.26",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
- "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
"requires": {
- "mime-db": "1.43.0"
+ "mime-db": "1.44.0"
}
},
"mimic-fn": {
@@ -7742,9 +7488,9 @@
}
},
"mkdirp-classic": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz",
- "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g=="
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
},
"module-deps": {
"version": "6.2.2",
@@ -7769,9 +7515,9 @@
}
},
"moment": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
- "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz",
+ "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw=="
},
"morgan": {
"version": "1.10.0",
@@ -7803,14 +7549,14 @@
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
},
"nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
+ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="
},
"nanoid": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.0.2.tgz",
- "integrity": "sha512-WOjyy/xu3199NlQiQWlx7VbspSFlGtOxa1bRX9ebmXOnp1fje4bJfjPs1wLQ8jZbJUfD+yceJmw879ZSaVJkdQ=="
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.10.tgz",
+ "integrity": "sha512-iZFMXKeXWkxzlfmMfM91gw7YhN2sdJtixY+eZh9V6QWJWTOiurhpKhBMgr82pfzgSqglQgqYSCowEYsz8D++6w=="
},
"nanomatch": {
"version": "1.2.13",
@@ -7862,11 +7608,12 @@
"integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs="
},
"node-libs-react-native": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/node-libs-react-native/-/node-libs-react-native-1.0.3.tgz",
- "integrity": "sha512-2X/M/DMB4hij2L0tsnJOiDhYR2N0YtetIhb/eN5+5vksLxjXwaFgLbSXWT3XExnGJpISDn8dYuYz6yvdndjjkg==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/node-libs-react-native/-/node-libs-react-native-1.2.0.tgz",
+ "integrity": "sha512-D+g8Mj9OfsOYYFWZoSz4bmr/8g/QWOwUgDmi3Ux0EPU9Q41OvGsdzAzr0IGJmtuSAfyOTfnKx1XRQR9id8/EEw==",
"requires": {
"assert": "^1.4.1",
+ "base-64": "^0.1.0",
"browserify-zlib": "^0.2.0",
"buffer": "^5.0.6",
"console-browserify": "^1.1.0",
@@ -7932,6 +7679,14 @@
}
}
},
+ "node-localstorage": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz",
+ "integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==",
+ "requires": {
+ "write-file-atomic": "^1.1.4"
+ }
+ },
"node-modules-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
@@ -7990,6 +7745,14 @@
"path-key": "^2.0.0"
}
},
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
"nullthrows": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz",
@@ -8248,9 +8011,32 @@
}
},
"opencollective-postinstall": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
- "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw=="
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+ "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="
+ },
+ "openpgp": {
+ "version": "4.10.4",
+ "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-4.10.4.tgz",
+ "integrity": "sha512-JMceIvDDE9Qko2AsMpVgf4YM7h7zPt3sZT0qnOIvwynuDuTs+wL5ht37t894hirgzSHr2d+64nEnKbBtwoYwSQ==",
+ "requires": {
+ "asn1.js": "^5.0.0",
+ "node-fetch": "^2.1.2",
+ "node-localstorage": "~1.3.0"
+ },
+ "dependencies": {
+ "asn1.js": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.3.0.tgz",
+ "integrity": "sha512-WHnQJFcOrIWT1RLOkFFBQkFVvyt9BPOOrH+Dp152Zk4R993rSzXUGPmkybIcUFhHE2d/iHH+nCaOWVCDbO8fgA==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ }
+ }
+ }
},
"opn": {
"version": "4.0.2",
@@ -8555,9 +8341,9 @@
}
},
"pbkdf2": {
- "version": "3.0.17",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
- "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+ "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
"requires": {
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
@@ -8754,6 +8540,11 @@
"integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
"dev": true
},
+ "pngjs": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
+ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
+ },
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -8771,20 +8562,20 @@
"dev": true
},
"pretty-format": {
- "version": "25.3.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.3.0.tgz",
- "integrity": "sha512-wToHwF8bkQknIcFkBqNfKu4+UZqnrLn/Vr+wwKQwwvPzkBfDDKp/qIabFqdgtoi5PEnM8LFByVsOrHoa3SpTVA==",
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz",
+ "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==",
"requires": {
- "@jest/types": "^25.3.0",
+ "@jest/types": "^25.5.0",
"ansi-regex": "^5.0.0",
"ansi-styles": "^4.0.0",
"react-is": "^16.12.0"
},
"dependencies": {
"@jest/types": {
- "version": "25.3.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.3.0.tgz",
- "integrity": "sha512-UkaDNewdqXAmCDbN2GlUM6amDKS78eCqiw/UmF5nE0mmLTd6moJkiZJML/X52Ke3LH7Swhw883IRXq8o9nWjVw==",
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz",
+ "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==",
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
@@ -8793,9 +8584,9 @@
}
},
"@types/yargs": {
- "version": "15.0.4",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz",
- "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==",
+ "version": "15.0.5",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz",
+ "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==",
"requires": {
"@types/yargs-parser": "*"
}
@@ -8997,10 +8788,136 @@
"bitcoin-ops": "^1.3.0"
}
},
- "qr.js": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz",
- "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8="
+ "qrcode": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz",
+ "integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==",
+ "requires": {
+ "buffer": "^5.4.3",
+ "buffer-alloc": "^1.2.0",
+ "buffer-from": "^1.1.1",
+ "dijkstrajs": "^1.0.1",
+ "isarray": "^2.0.1",
+ "pngjs": "^3.3.0",
+ "yargs": "^13.2.4"
+ },
+ "dependencies": {
+ "buffer": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
+ "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
},
"qs": {
"version": "6.7.0",
@@ -9008,9 +8925,9 @@
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
"query-string": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.12.0.tgz",
- "integrity": "sha512-aoiFW9ZU7jP8Itjqfpw80Qe7RoyCIhFrW522sdsp9LG92pat6CCG3d8qNZBaUi71FsEjIfLjx9Ky347FtVoqXA==",
+ "version": "6.13.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.1.tgz",
+ "integrity": "sha512-RfoButmcK+yCta1+FuU8REvisx1oEzhMKwhLUNcepQTPGcNMp1sIqjnfCtfnvGSQZQEhaBHvccujtWoUV3TTbA==",
"requires": {
"decode-uri-component": "^0.2.0",
"split-on-first": "^1.0.0",
@@ -9192,6 +9109,11 @@
}
}
},
+ "react-native-androw": {
+ "version": "0.0.34",
+ "resolved": "https://registry.npmjs.org/react-native-androw/-/react-native-androw-0.0.34.tgz",
+ "integrity": "sha512-YuW0GxYNzABvPPe6k+JdLUF5CAzKSW5R6IxxA/+fg5gc+4avE1tZgLmnRfNtXJCbW9r90YLYp33S9Uu2pe//fg=="
+ },
"react-native-animatable": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/react-native-animatable/-/react-native-animatable-1.3.3.tgz",
@@ -9201,9 +9123,9 @@
}
},
"react-native-camera": {
- "version": "3.22.1",
- "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-3.22.1.tgz",
- "integrity": "sha512-KMi/pagWz9ssODghHHKXypukTFpM14T62ZNbd/UriZZSnvdQxXrddJhwQpH3cnZS2kl03Jupu52vi4AvT36Feg==",
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/react-native-camera/-/react-native-camera-3.30.0.tgz",
+ "integrity": "sha512-rZorpBHXnc4MT9N6ddV4iC7h9dSUx4umtXvAKMkdYr3ZONlZcEfWxup7YCeAZ5wu4x43SvhSiTfYd8g0q+V0wg==",
"requires": {
"prop-types": "^15.6.2"
}
@@ -9292,14 +9214,14 @@
"integrity": "sha512-t5BOIMRU5vMzMOtuUUuYxd59ipwRe8v1H7NTk8Z0elvBf8hCwYSsnRFDIYk35k/ZbbKZcODmd74P4x1zLTsDyA=="
},
"react-native-permissions": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-2.0.10.tgz",
- "integrity": "sha512-oQmWgm4tqUYyWmMNtYzNO7U/+6+WHyKiRd5cwNeE1FCJTGh8cJ5HapjHw3d6ZVfhSLzNwWqgJy1P4NpTANYa/g=="
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-2.1.5.tgz",
+ "integrity": "sha512-b9KO/4UEV9qddl+kcSybmdk8nlAifclSDBR2rSvc5KZM06vIaJWJNIzK2ZwPXqDQ5yD3CJLuKTRj7Fz+jM9qyQ=="
},
"react-native-qrcode-scanner": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/react-native-qrcode-scanner/-/react-native-qrcode-scanner-1.4.0.tgz",
- "integrity": "sha512-W6wLJNbPQ/SQSRaVcAaGDN919me0LQQyHx7xzx3d/bB8NBya1RJ/bn7zUdnPUhSrp5OVDkGhW9BvRZBoX7xHPw==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/react-native-qrcode-scanner/-/react-native-qrcode-scanner-1.4.1.tgz",
+ "integrity": "sha512-QODC1bgfyx/v4OaFGMKMyhKU2SRHBosVxCi29b0T3QDWBZmzn5BN4QGKDxJvKfMo5UPyU2BNIn1KfapySfJx7g==",
"requires": {
"@react-native-community/async-storage": "^1.6.1",
"opencollective": "^1.0.3",
@@ -9308,6 +9230,15 @@
"react-native-permissions": "^2.0.2"
}
},
+ "react-native-qrcode-svg": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/react-native-qrcode-svg/-/react-native-qrcode-svg-6.0.6.tgz",
+ "integrity": "sha512-b+/teD+xj17VDujJzf956U2+9mX+gKwVJss2aqmhEIyjP7+TVOuE08D3UkzfOCWXE8gppcUTTz5gkY1NXgfwyQ==",
+ "requires": {
+ "prop-types": "^15.5.10",
+ "qrcode": "^1.3.2"
+ }
+ },
"react-native-randombytes": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/react-native-randombytes/-/react-native-randombytes-3.5.3.tgz",
@@ -9329,14 +9260,6 @@
}
}
},
- "react-native-range-slider": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/react-native-range-slider/-/react-native-range-slider-0.1.2.tgz",
- "integrity": "sha512-EZLOtcnhOcOv4yZtPT826jZknqn+h3zbqM08tc3dFbakBFMoK4aN5GAuHP2RJ3PhMtwzl2h6HzOeFilq8cKaXQ==",
- "requires": {
- "prop-types": "^15.5.10"
- }
- },
"react-native-ratings": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/react-native-ratings/-/react-native-ratings-6.5.0.tgz",
@@ -9347,9 +9270,9 @@
}
},
"react-native-reanimated": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.8.0.tgz",
- "integrity": "sha512-vGTt94lE5fsZmfMwERWFIsCr5LHsyllOESeNvlKryLgAg7h4cnJ5XSmVSy4L3qogdgFYCL6HEgY+s7tQmKXiiQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.9.0.tgz",
+ "integrity": "sha512-Aj+spgIHRiVv7ezGADxnSH1EoKrQRD2+XaSiGY0MiB/pvRNNrZPSJ+3NVpvLwWf9lZMOP7dwqqyJIzoZgBDt8w==",
"requires": {
"fbjs": "^1.0.0"
}
@@ -9360,12 +9283,9 @@
"integrity": "sha512-9Uqu1vlXPi+2cKW/CW6OnHxA76mWC4kF3wvlqzq4DY8hn37AeiXtLFs2WkxH4yXQRrnJdP6ivc65Lz+MqwRZAA=="
},
"react-native-screens": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-2.4.0.tgz",
- "integrity": "sha512-7GcXlaj7IIrM4l5Ub7BPTkNQJ2slHGt2bhmfWmW73NTXEv+7pjHlp+JpQO32Yn+O8UQGPFf0rsesfYUdER7ppQ==",
- "requires": {
- "debounce": "^1.2.0"
- }
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-2.8.0.tgz",
+ "integrity": "sha512-fUCIQLZX+5XB0ypWX038P3zso54IFFjTsQUZJWEsjC3pp5rPItAt5SzqtJn+uVjcJaczZ+dpIuvj6IFLqkWLZQ=="
},
"react-native-sensitive-info": {
"version": "5.5.5",
@@ -9430,6 +9350,48 @@
"resolved": "https://registry.npmjs.org/react-native-status-bar-height/-/react-native-status-bar-height-2.5.0.tgz",
"integrity": "sha512-sYBCPYA/NapBSHkdm/IVL4ID3LLlIuLqINi2FBDyMkc2BU9pfSGOtkz9yfxoK39mYJuTrlTOQ7mManARUsYDSA=="
},
+ "react-native-svg": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-12.1.0.tgz",
+ "integrity": "sha512-1g9qBRci7man8QsHoXn6tP3DhCDiypGgc6+AOWq+Sy+PmP6yiyf8VmvKuoqrPam/tf5x+ZaBT2KI0gl7bptZ7w==",
+ "requires": {
+ "css-select": "^2.1.0",
+ "css-tree": "^1.0.0-alpha.39"
+ }
+ },
+ "react-native-svg-charts": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/react-native-svg-charts/-/react-native-svg-charts-5.4.0.tgz",
+ "integrity": "sha512-5TaIGSihJaHCGFj32Tc07hZrqqTpvdyAx89PIrW2nLf2tijd61+3UE3jtsiHOvfeAyDgSTWjv6s9qG9d2di7Pw==",
+ "requires": {
+ "d3-array": "^1.2.0",
+ "d3-interpolate-path": "2.0.0",
+ "d3-scale": "^1.0.6",
+ "d3-shape": "^1.0.6",
+ "prop-types": "^15.6.0"
+ },
+ "dependencies": {
+ "d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+ },
+ "d3-scale": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz",
+ "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==",
+ "requires": {
+ "d3-array": "^1.2.0",
+ "d3-collection": "1",
+ "d3-color": "1",
+ "d3-format": "1",
+ "d3-interpolate": "1",
+ "d3-time": "1",
+ "d3-time-format": "2"
+ }
+ }
+ }
+ },
"react-native-swipe-up-down": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/react-native-swipe-up-down/-/react-native-swipe-up-down-1.0.7.tgz",
@@ -9445,6 +9407,11 @@
"react-tween-state": "^0.1.5"
}
},
+ "react-native-tab-view": {
+ "version": "2.14.4",
+ "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-2.14.4.tgz",
+ "integrity": "sha512-oqkCflPFuZwDTbyY2WaN0377akSsmcttuYACR9LT7htZfO/tKR2Z/ynj1tbv2cz2esGuVICoga9cetN1lPimog=="
+ },
"react-native-v8": {
"version": "0.61.5-patch.3",
"resolved": "https://registry.npmjs.org/react-native-v8/-/react-native-v8-0.61.5-patch.3.tgz",
@@ -9584,9 +9551,9 @@
}
},
"react-refresh": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.2.tgz",
- "integrity": "sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ=="
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz",
+ "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA=="
},
"react-tween-state": {
"version": "0.1.5",
@@ -9692,6 +9659,11 @@
"util.promisify": "^1.0.0"
}
},
+ "reanimated-bottom-sheet": {
+ "version": "1.0.0-alpha.20",
+ "resolved": "https://registry.npmjs.org/reanimated-bottom-sheet/-/reanimated-bottom-sheet-1.0.0-alpha.20.tgz",
+ "integrity": "sha512-bcXVkmJLL6SOoIPWU2dIJnT7+78a5tDi9eaE6ESsEewZ10lpfJhjfCCFrngPZKPhatQ6mjCJSYEAL+fwbXCiJw=="
+ },
"redux": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
@@ -9714,9 +9686,9 @@
"integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
},
"regenerate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
- "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
+ "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A=="
},
"regenerate-unicode-properties": {
"version": "8.2.0",
@@ -9769,9 +9741,9 @@
}
},
"regjsgen": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
- "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg=="
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
+ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
},
"regjsparser": {
"version": "0.6.4",
@@ -9884,9 +9856,9 @@
"dev": true
},
"resolve": {
- "version": "1.15.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
- "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
"requires": {
"path-parse": "^1.0.6"
}
@@ -9947,12 +9919,9 @@
"integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA=="
},
"run-async": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
- "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
- "requires": {
- "is-promise": "^2.1.0"
- }
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
},
"rx": {
"version": "4.1.0",
@@ -10191,8 +10160,14 @@
"integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww=="
},
"sifir-js-sdk": {
- "version": "git+https://github.com/Sifir-io/sifir-js-sdk.git#f860e9b2fac8dbb52606b0fadc41977f70350ce8",
- "from": "git+https://github.com/Sifir-io/sifir-js-sdk.git#feature/rn"
+ "version": "git+https://git@github.com/Sifir-io/sifir-js-sdk.git#2037aed1594eaaf5519f03a67ccecbdcead3054d",
+ "from": "git+https://git@github.com/Sifir-io/sifir-js-sdk.git#master",
+ "requires": {
+ "crypto-js": "^4.0.0",
+ "openpgp": "^4.10.4",
+ "superagent": "^5.2.2",
+ "superagent-proxy": "^2.0.0"
+ }
},
"signal-exit": {
"version": "3.0.3",
@@ -10398,9 +10373,9 @@
}
},
"source-map-support": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
- "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -10419,23 +10394,23 @@
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
},
"spdx-correct": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
- "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
},
"spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
@@ -10491,9 +10466,9 @@
"integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA=="
},
"stacktrace-parser": {
- "version": "0.1.9",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.9.tgz",
- "integrity": "sha512-DRy03ljj0367Ud3OAJHD6eVS/+CvMK2u/djVYuU37fHYcYHoZ8tkFyhbRf7PNG1h3bWLsw+SNTSXrPFe07A7aQ==",
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
+ "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
"requires": {
"type-fest": "^0.7.1"
}
@@ -10552,14 +10527,14 @@
}
},
"stream-http": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz",
- "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz",
+ "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==",
"requires": {
"builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^3.0.6",
- "xtend": "^4.0.0"
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "xtend": "^4.0.2"
},
"dependencies": {
"readable-stream": {
@@ -10638,28 +10613,6 @@
"es-abstract": "^1.17.5"
}
},
- "string.prototype.trimleft": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
- "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5",
- "string.prototype.trimstart": "^1.0.0"
- }
- },
- "string.prototype.trimright": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
- "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5",
- "string.prototype.trimend": "^1.0.0"
- }
- },
"string.prototype.trimstart": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
@@ -10718,9 +10671,9 @@
}
},
"sudo-prompt": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz",
- "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA=="
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz",
+ "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw=="
},
"superagent": {
"version": "5.2.2",
@@ -10751,15 +10704,15 @@
}
},
"mime": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
- "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==",
"optional": true
},
"qs": {
- "version": "6.9.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz",
- "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==",
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
+ "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==",
"optional": true
},
"readable-stream": {
@@ -10802,6 +10755,11 @@
"has-flag": "^3.0.0"
}
},
+ "svg-path-properties": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/svg-path-properties/-/svg-path-properties-1.0.4.tgz",
+ "integrity": "sha512-yoiTZOP37EFt6GetaQlN4IIqUWZSn3i+pMztDg3OtTNwoU0a+0+o7os3PK+UT2nsS115vr02VG4HIzMEVcTzFg=="
+ },
"symbol-observable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
@@ -11106,10 +11064,33 @@
}
}
},
+ "tsconfig-paths": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
+ "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
+ "dev": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.0",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
"tslib": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
- "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA=="
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
},
"tsutils": {
"version": "3.17.1",
@@ -11401,9 +11382,9 @@
"integrity": "sha512-YtJEYC4cEr/EJjCAllQN1T+PX+XtcrCCBXJv+dLdzxxRtVKkHlf8kAxyriXUOtGmiMtgzlz+d8hQugVPdq8ZfA=="
},
"v8-compile-cache": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
- "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
+ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
"dev": true
},
"validate-npm-package-license": {
diff --git a/package.json b/package.json
index 935c5e2..419aff3 100644
--- a/package.json
+++ b/package.json
@@ -28,12 +28,13 @@
"base-64": "^0.1.0",
"bolt11": "^1.2.7",
"browserify": "^16.5.0",
- "cyphernode-js-sdk-transports": "git+https://github.com/gabidi/cyphernode-js-sdk-transports.git#feature/rn",
+ "cyphernode-js-sdk-transports": "git+https://git@github.com/gabidi/cyphernode-js-sdk-transports.git#feature/rn",
+ "d3-scale": "^3.2.1",
"moment": "^2.24.0",
"node-libs-react-native": "^1.0.3",
- "qr.js": "^0.0.0",
"react": "16.9.0",
"react-native": "0.61.5",
+ "react-native-androw": "0.0.34",
"react-native-animatable": "^1.3.3",
"react-native-camera": "^3.17.0",
"react-native-crypto": "^2.2.0",
@@ -44,7 +45,7 @@
"react-native-nav": "^2.0.2",
"react-native-permissions": "^2.0.3",
"react-native-qrcode-scanner": "^1.2.3",
- "react-native-range-slider": "^0.1.2",
+ "react-native-qrcode-svg": "^6.0.6",
"react-native-reanimated": "^1.7.0",
"react-native-safe-area-context": "^0.7.3",
"react-native-screens": "^2.0.0",
@@ -52,15 +53,20 @@
"react-native-share": "^2.0.0",
"react-native-slider": "^0.11.0",
"react-native-sliding-up-down-panels": "^1.0.0",
+ "react-native-svg": "^12.1.0",
+ "react-native-svg-charts": "^5.4.0",
"react-native-swipe-up-down": "^1.0.7",
"react-native-swipeout": "^2.3.6",
+ "react-native-tab-view": "^2.14.0",
"react-native-v8": "^0.61.5-patch.2",
"react-native-vector-icons": "^6.6.0",
"react-navigation-transitions": "^1.0.12",
"react-redux": "^7.1.1",
+ "reanimated-bottom-sheet": "^1.0.0-alpha.20",
"redux": "^4.0.4",
"redux-thunk": "^2.3.0",
- "sifir-js-sdk": "git+https://github.com/Sifir-io/sifir-js-sdk.git#feature/rn",
+ "sifir-js-sdk": "git+https://git@github.com/Sifir-io/sifir-js-sdk.git#master",
+ "svg-path-properties": "^1.0.4",
"uuid": "^3.4.0",
"vm-browserify": "^1.1.2"
},
diff --git a/src/assets/images/arrowupArrow.png b/src/assets/images/arrowupArrow.png
new file mode 100644
index 0000000..85767fe
Binary files /dev/null and b/src/assets/images/arrowupArrow.png differ
diff --git a/src/assets/images/arrowupArrow@2x.png b/src/assets/images/arrowupArrow@2x.png
new file mode 100644
index 0000000..c2a9e05
Binary files /dev/null and b/src/assets/images/arrowupArrow@2x.png differ
diff --git a/src/assets/images/arrowupArrow@3x.png b/src/assets/images/arrowupArrow@3x.png
new file mode 100644
index 0000000..358bea0
Binary files /dev/null and b/src/assets/images/arrowupArrow@3x.png differ
diff --git a/src/assets/images/bitcoinWhiteOutlined.png b/src/assets/images/bitcoinWhiteOutlined.png
new file mode 100644
index 0000000..29bbae8
Binary files /dev/null and b/src/assets/images/bitcoinWhiteOutlined.png differ
diff --git a/src/assets/images/bitcoinWhiteOutlined@2x.png b/src/assets/images/bitcoinWhiteOutlined@2x.png
new file mode 100644
index 0000000..aeaf1f3
Binary files /dev/null and b/src/assets/images/bitcoinWhiteOutlined@2x.png differ
diff --git a/src/assets/images/bitcoinWhiteOutlined@3x.png b/src/assets/images/bitcoinWhiteOutlined@3x.png
new file mode 100644
index 0000000..4956c43
Binary files /dev/null and b/src/assets/images/bitcoinWhiteOutlined@3x.png differ
diff --git a/src/assets/images/confirmed.png b/src/assets/images/confirmed.png
new file mode 100644
index 0000000..0ab8fc5
Binary files /dev/null and b/src/assets/images/confirmed.png differ
diff --git a/src/assets/images/confirmed@2x.png b/src/assets/images/confirmed@2x.png
new file mode 100644
index 0000000..69da342
Binary files /dev/null and b/src/assets/images/confirmed@2x.png differ
diff --git a/src/assets/images/confirmed@3x.png b/src/assets/images/confirmed@3x.png
new file mode 100644
index 0000000..9196906
Binary files /dev/null and b/src/assets/images/confirmed@3x.png differ
diff --git a/src/assets/images/filter.png b/src/assets/images/filter.png
new file mode 100644
index 0000000..5d98e7d
Binary files /dev/null and b/src/assets/images/filter.png differ
diff --git a/src/assets/images/filter@2x.png b/src/assets/images/filter@2x.png
new file mode 100644
index 0000000..a72dd44
Binary files /dev/null and b/src/assets/images/filter@2x.png differ
diff --git a/src/assets/images/filter@3x.png b/src/assets/images/filter@3x.png
new file mode 100644
index 0000000..1b8b3aa
Binary files /dev/null and b/src/assets/images/filter@3x.png differ
diff --git a/src/assets/images/slider button@2x.png b/src/assets/images/slider button@2x.png
new file mode 100644
index 0000000..0d08702
Binary files /dev/null and b/src/assets/images/slider button@2x.png differ
diff --git a/src/assets/images/slider button@3x.png b/src/assets/images/slider button@3x.png
new file mode 100644
index 0000000..e75e031
Binary files /dev/null and b/src/assets/images/slider button@3x.png differ
diff --git a/src/assets/images/sliderbutton.png b/src/assets/images/sliderbutton.png
new file mode 100644
index 0000000..43e512b
Binary files /dev/null and b/src/assets/images/sliderbutton.png differ
diff --git a/src/assets/images/unchecked.png b/src/assets/images/unchecked.png
new file mode 100644
index 0000000..130e87c
Binary files /dev/null and b/src/assets/images/unchecked.png differ
diff --git a/src/assets/images/unchecked@2x.png b/src/assets/images/unchecked@2x.png
new file mode 100644
index 0000000..8fc61ff
Binary files /dev/null and b/src/assets/images/unchecked@2x.png differ
diff --git a/src/assets/images/unchecked@3x.png b/src/assets/images/unchecked@3x.png
new file mode 100644
index 0000000..55bde20
Binary files /dev/null and b/src/assets/images/unchecked@3x.png differ
diff --git a/src/assets/images/wasabiLogo.png b/src/assets/images/wasabiLogo.png
new file mode 100644
index 0000000..99cf0a6
Binary files /dev/null and b/src/assets/images/wasabiLogo.png differ
diff --git a/src/assets/images/wasabiLogo1.png b/src/assets/images/wasabiLogo1.png
new file mode 100644
index 0000000..7610cbe
Binary files /dev/null and b/src/assets/images/wasabiLogo1.png differ
diff --git a/src/assets/images/wasabiLogo1@2x.png b/src/assets/images/wasabiLogo1@2x.png
new file mode 100644
index 0000000..e86daca
Binary files /dev/null and b/src/assets/images/wasabiLogo1@2x.png differ
diff --git a/src/assets/images/wasabiLogo1@3x.png b/src/assets/images/wasabiLogo1@3x.png
new file mode 100644
index 0000000..763d93b
Binary files /dev/null and b/src/assets/images/wasabiLogo1@3x.png differ
diff --git a/src/assets/images/wasabiLogo@2x.png b/src/assets/images/wasabiLogo@2x.png
new file mode 100644
index 0000000..3aa8d3c
Binary files /dev/null and b/src/assets/images/wasabiLogo@2x.png differ
diff --git a/src/assets/images/wasabiLogo@3x.png b/src/assets/images/wasabiLogo@3x.png
new file mode 100644
index 0000000..ba776f1
Binary files /dev/null and b/src/assets/images/wasabiLogo@3x.png differ
diff --git a/src/assets/svg/Back.js b/src/assets/svg/Back.js
new file mode 100644
index 0000000..83e054d
--- /dev/null
+++ b/src/assets/svg/Back.js
@@ -0,0 +1,18 @@
+import * as React from 'react';
+import Svg, {Path} from 'react-native-svg';
+
+const Back = props => {
+ return (
+
+ );
+};
+
+export default Back;
diff --git a/src/assets/svg/index.js b/src/assets/svg/index.js
new file mode 100644
index 0000000..35c7a32
--- /dev/null
+++ b/src/assets/svg/index.js
@@ -0,0 +1,5 @@
+import Back from './Back';
+
+export default {
+ Back,
+};
diff --git a/src/common/AppStyle.js b/src/common/AppStyle.js
index 7021b76..14f1f5e 100644
--- a/src/common/AppStyle.js
+++ b/src/common/AppStyle.js
@@ -7,4 +7,6 @@ export default {
secondaryColor: '#4B53FF',
errorColor: '#D0021B',
orange: 'orange',
+ grayColor: '#ABA8A8',
+ tertiaryColor: '#122C3A',
};
diff --git a/src/common/constants.js b/src/common/constants.js
index 256510f..4132c14 100644
--- a/src/common/constants.js
+++ b/src/common/constants.js
@@ -15,13 +15,16 @@ export const C = {
STR_SHOP: 'SHOP',
STR_SETTINGS: 'SETTINGS',
STR_Cur_Balance: 'Current Balance',
+ STR_Wasabi_Header: 'Total Balance having minimum Anonset ',
STR_Balance_Channels_n_Outputs: 'Channels & Outputs Balance',
STR_Balance_Outputs: 'Balance (Outputs)',
STR_Balance_Channels: 'Balance (Channels)',
STR_Hops_to_route: 'hop to payee',
STR_INVOICES_AND_PAYS: 'Invoices & Pays',
STR_TRANSACTIONS: 'Transactions',
+ STR_ALL_TRANSACTIONS: 'All Transactions',
STR_SEND: 'SEND',
+ STR_BACK: 'BACK',
STR_Send: 'Send',
STR_TxID: 'TxID',
STR_ChannelID: 'Channel ID',
@@ -106,6 +109,10 @@ export const C = {
STR_WATCH_WALLET_TYPE: 'pub32Watching',
STR_WATCHING: 'Watching',
STR_SPEND_WALLET_TYPE: 'btcSpending',
+ STR_SPEND_WALLET_LABEL: 'Spending',
+ STR_WASABI_WALLET_TYPE: 'wasabiWallet',
+ STR_WASABI_WALLET_LABEL: 'Wasabi',
+ STR_UNSPENT_COINS: 'unspentCoins',
STR_LN_WALLET_TYPE: 'ln',
STR_LN_WITHDRAW: 'LNwithdraw',
STR_WATCH_ONLY: 'WATCH ONLY',
@@ -127,6 +134,13 @@ export const C = {
STR_Segwit_Compatible: 'Segwit Compatible (P2SH)',
STR_Bech32: 'Segwit Native (Bech32)',
STR_Wallet_balance: 'Wallet Balance',
+ STR_Min_Anonset: 'Min Anonset',
+ STR_Anonim_Level: 'Anonimity Level',
+ STR_Set_Min_Anonset: 'Set Minimum Anonset',
+ STR_Auto_mix_account_select:
+ 'Funds reaching the minimum anonset specified will be sent to',
+ STR_Select_Account:
+ 'Select one account to which the Wasabi wallet will autosend funds to.',
// --- ERRORS --
STR_ERROR_app: 'App Error',
STR_ERROR: 'Error',
diff --git a/src/common/images.js b/src/common/images.js
index ed18a75..116e6c5 100644
--- a/src/common/images.js
+++ b/src/common/images.js
@@ -14,6 +14,7 @@ export default {
icon_receive: require('./../assets/images/down_cir.png'),
icon_chanel: require('./../assets/images/light_cir.png'),
icon_up_arrow: require('./../assets/images/up_arrow.png'),
+ upArrow: require('./../assets/images/arrowupArrow.png'),
icon_up_blue: require('./../assets/images/uparrow_blue.png'),
icon_down_arrow: require('./../assets/images/down_arrow.png'),
icon_btc_cir: require('./../assets/images/bitcoin_blue.png'),
@@ -61,4 +62,10 @@ export default {
icon_chatSend: require('./../assets/images/chatSend.png'),
icon_yellowTxn: require('./../assets/images/yellowTxn.png'),
icon_thickGreenArrowTxn: require('./../assets/images/bold_arrow.png'),
+ filter_icon: require('./../assets/images/filter.png'),
+ icon_wasabi: require('./../assets/images/wasabiLogo.png'),
+ icon_wasabi_clicked: require('./../assets/images/wasabiLogo1.png'),
+ icon_confirmed: require('./../assets/images/confirmed.png'),
+ icon_unconfirmed: require('./../assets/images/unchecked.png'),
+ icon_bitcoinWhiteOutlined: require('./../assets/images/bitcoinWhiteOutlined.png'),
};
diff --git a/src/common/index.js b/src/common/index.js
index 929bcfc..ef77f8f 100644
--- a/src/common/index.js
+++ b/src/common/index.js
@@ -1,5 +1,6 @@
import {C} from './constants';
import Images from './images';
import AppStyle from './AppStyle';
+import svg from '../assets/svg';
-export {C, Images, AppStyle};
+export {C, Images, AppStyle, svg};
diff --git a/src/components/elements/SifirAccountActions.js b/src/components/elements/SifirAccountActions.js
index 7809ecd..b6fb612 100644
--- a/src/components/elements/SifirAccountActions.js
+++ b/src/components/elements/SifirAccountActions.js
@@ -8,12 +8,19 @@ import {
} from 'react-native';
import {Images, AppStyle, C} from '@common/index';
-const SifirAccountActions = ({type, handleReceiveButton, handleSendBtn}) => {
+const SifirAccountActions = ({
+ type,
+ sendActionButtonLabel,
+ handleReceiveButton,
+ handleSendBtn,
+ isDisabled = false,
+}) => {
const [btnStatus, setButtonStatus] = useState(0);
return (
{!!handleSendBtn && (
setButtonStatus(1)}
onPressOut={() => {
@@ -23,9 +30,13 @@ const SifirAccountActions = ({type, handleReceiveButton, handleSendBtn}) => {
- {C.STR_SEND}
+
+ {sendActionButtonLabel}
+
{
)}
{!!handleReceiveButton && (
setButtonStatus(2)}
onPressOut={() => {
@@ -45,7 +57,9 @@ const SifirAccountActions = ({type, handleReceiveButton, handleSendBtn}) => {
style={[
styles.txnBtnView,
styles.leftTxnBtnView,
- btnStatus === 2 ? {backgroundColor: 'black', opacity: 0.7} : {},
+ btnStatus === 2 || isDisabled
+ ? {backgroundColor: 'black', opacity: 0.7}
+ : {},
]}>
{C.STR_RECEIVE}
@@ -63,7 +77,6 @@ const SifirAccountActions = ({type, handleReceiveButton, handleSendBtn}) => {
const styles = StyleSheet.create({
btnAreaView: {
- flex: 1,
flexDirection: 'row',
borderColor: AppStyle.mainColor,
borderWidth: 1,
diff --git a/src/components/elements/SifirAccountChart.js b/src/components/elements/SifirAccountChart.js
new file mode 100644
index 0000000..3bdc9eb
--- /dev/null
+++ b/src/components/elements/SifirAccountChart.js
@@ -0,0 +1,260 @@
+// @flow
+import React, {useMemo, useEffect} from 'react';
+import {Images, AppStyle, C} from '@common/index';
+import {StyleSheet, View, Animated, TextInput, Text} from 'react-native';
+import Svg, {Path, Defs, Stop} from 'react-native-svg';
+import * as path from 'svg-path-properties';
+import * as shape from 'd3-shape';
+import {scaleLinear} from 'd3-scale';
+import LinearGradient from 'react-native-linear-gradient';
+import Androw from 'react-native-androw';
+import {log} from '@io/events';
+import makeUnspentCoinsChartData from '@helpers/makeUnspentCoinsChartData';
+
+const d3 = {
+ shape,
+};
+
+const height = 60;
+const width = C.SCREEN_WIDTH;
+const verticalPadding = 5;
+const cursorRadius = 10;
+const cursor = React.createRef();
+const slider = React.createRef();
+const label = React.createRef();
+const SV = React.createRef();
+const x = new Animated.Value(0);
+
+const SifirAccountChart = props => {
+ const plotData = props.chartData;
+ useEffect(() => {
+ _init();
+ }, []);
+ const {series, minX, maxX, minY, maxY} = useMemo(
+ () => makeUnspentCoinsChartData(plotData),
+ [plotData],
+ );
+ const {scaleX, scaleY, line, properties, lineLength} = useMemo(() => {
+ const scaleX = scaleLinear()
+ .domain([minX, maxX])
+ .range([20, width - 20]);
+ const scaleY = scaleLinear()
+ .domain([minY, maxY])
+ .range([height - verticalPadding, verticalPadding]);
+ const line = d3.shape
+ .line()
+ .x(([anonset]) => scaleX(Number(anonset)))
+ .y(([, balance]) => scaleY(balance))
+ .curve(d3.shape.curveStepBefore)(series);
+ const p = path.svgPathProperties(line);
+ return {
+ scaleX,
+ scaleY,
+ line,
+ properties: p,
+ lineLength: p.getTotalLength(),
+ };
+ }, [series]);
+ const _init = () => {
+ try {
+ x.addListener(({value}) => moveCursor(value));
+ log('Chart data lineLength', lineLength);
+ let {x: X, y} = properties.getPointAtLength(lineLength);
+ let top = y - cursorRadius - 2;
+ let left = X - (cursorRadius + 10);
+ cursor?.current?.setNativeProps({
+ top,
+ left,
+ });
+ slider.current.setNativeProps({
+ left: left - 10,
+ });
+ // Initialize with intial balance to show in account header
+ moveCursor(0);
+ } catch (err) {
+ console.error(err);
+ }
+ };
+
+ const moveCursor = value => {
+ let {x, y} = properties.getPointAtLength(lineLength - value);
+ let top = y - cursorRadius - 2;
+ let left = x - (cursorRadius + 10);
+ cursor?.current?.setNativeProps({
+ top,
+ left,
+ });
+ slider.current.setNativeProps({
+ left: left - 10,
+ });
+ const anonSetValue = scaleX.invert(x);
+ // const cumSumBalanceValue = scaleY.invert(y);
+ // find first anonset pair in acending array where value < array
+ // FIXME HERE TRELLO TICKET is why bug is breaing ?
+ const [, cumSumBalanceValue] = series.find(
+ ([anonset]) => anonSetValue <= anonset,
+ );
+ const text = `${Math.floor(anonSetValue)}`;
+ label?.current?.setNativeProps({
+ text,
+ top,
+ left,
+ });
+ props.handleChartSlider({
+ anonset: anonSetValue,
+ value: cumSumBalanceValue,
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {minX}
+ Anonimity Level
+ {maxX}
+
+ >
+ );
+};
+
+export default SifirAccountChart;
+
+const styles = StyleSheet.create({
+ root: {
+ height,
+ },
+ container: {
+ marginTop: 10,
+ paddingTop: 40,
+ width,
+ overflow: 'hidden',
+ },
+ cursor: {
+ width: cursorRadius * 1.4,
+ height: cursorRadius * 1.4,
+ borderRadius: cursorRadius,
+ borderColor: '#fff',
+ borderWidth: 2,
+ backgroundColor: '#00EDE7',
+ },
+ cursorContainer: {
+ width: cursorRadius * 2.3,
+ height: cursorRadius * 2.3,
+ borderRadius: cursorRadius + 4,
+ backgroundColor: 'rgba(255, 255, 255, 0.3)',
+ position: 'absolute',
+ left: 10,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ label: {
+ position: 'absolute',
+ color: 'white',
+ },
+ verticalGradient: {
+ height: 250,
+ width: 40,
+ backgroundColor: 'lightgray',
+ opacity: 0.5,
+ borderRadius: 10,
+ top: -30,
+ },
+ sliderContainer: {
+ marginHorizontal: 10,
+ marginTop: 10,
+ },
+ bubbleText: {color: 'white'},
+ thumb: {
+ backgroundColor: '#00EDE7',
+ width: 40,
+ borderRadius: 5,
+ elevation: 3,
+ height: 16,
+ },
+ sliderTrack: {
+ backgroundColor: '#2B2B2B',
+ borderRadius: 5,
+ },
+ shadow: {
+ shadowColor: '#00EDE7',
+ shadowOffset: {width: 0, height: 0},
+ shadowOpacity: 0.8,
+ shadowRadius: 4,
+ },
+ cursorParent: {
+ width,
+ height: height,
+ position: 'absolute',
+ top: height - height * 0.33,
+ },
+ sliderLabel: {
+ color: 'gray',
+ },
+ sliderLabelContainer: {
+ width: '100%',
+ height: 30,
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ paddingHorizontal: 10,
+ alignItems: 'center',
+ },
+ chartContainer: {
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+});
diff --git a/src/components/elements/SifirAccountHeader.js b/src/components/elements/SifirAccountHeader.js
index 4fc4dac..aefd2f2 100644
--- a/src/components/elements/SifirAccountHeader.js
+++ b/src/components/elements/SifirAccountHeader.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, {useState} from 'react';
import {
View,
Text,
@@ -23,6 +23,9 @@ const SifirAccountHeader = ({
accountIconOnPress,
accountIcon,
}) => {
+ const [balanceViewDimensions, setDimensions] = useState({});
+ const {width} = balanceViewDimensions;
+ const balanceTxtFontSize = width / 5 || 25;
return (
@@ -52,14 +55,20 @@ const SifirAccountHeader = ({
{
+ const {width, height} = event.nativeEvent.layout;
+ setDimensions({width, height});
+ }}
style={styles.balanceView}>
{loading === true && (
)}
{loaded === true && loading === false && (
<>
-
-
+
+
@@ -73,7 +82,6 @@ const SifirAccountHeader = ({
const styles = StyleSheet.create({
headerView: {
- flex: 3,
marginTop: 0,
marginLeft: 20,
flexDirection: 'row',
@@ -104,7 +112,7 @@ const styles = StyleSheet.create({
flex: 5,
flexDirection: 'column-reverse',
marginLeft: 25,
- paddingBottom: 15,
+ justifyContent: 'center',
},
balAmountTxt: {
color: 'white',
diff --git a/src/components/elements/SifirAccountHistory.js b/src/components/elements/SifirAccountHistory.js
deleted file mode 100644
index a77017e..0000000
--- a/src/components/elements/SifirAccountHistory.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import React from 'react';
-import {
- View,
- Image,
- StyleSheet,
- TouchableOpacity,
- Text,
- ActivityIndicator,
-} from 'react-native';
-import {Images, AppStyle, C} from '@common/index';
-import SifirTxnList from '@elements/SifirTxnList';
-
-const SifirAccountHistory = ({
- loading,
- loaded,
- txnData,
- btcUnit,
- type,
- headerText,
-}) => {
- const BTN_WIDTH = C.SCREEN_WIDTH / 2;
- return (
- <>
-
- {headerText}
-
-
-
- {loading && (
-
- )}
-
-
-
-
- >
- );
-};
-
-const styles = StyleSheet.create({
- txnSetView: {
- flex: 1,
- flexDirection: 'row',
- marginLeft: 26,
- marginTop: 30,
- },
- txnLblTxt: {
- color: 'white',
- fontSize: 23,
- fontWeight: 'bold',
- },
- txnListView: {
- flex: 3,
- height: '100%',
- marginBottom: 20,
- marginLeft: 25,
- },
- settingIcon: {width: 20, height: 20, marginLeft: 20, marginTop: 7},
- spinner: {right: 30, position: 'absolute', alignSelf: 'center'},
-});
-
-export default SifirAccountHistory;
diff --git a/src/components/elements/SifirAnimatedOverlay.js b/src/components/elements/SifirAnimatedOverlay.js
new file mode 100644
index 0000000..ab02fc5
--- /dev/null
+++ b/src/components/elements/SifirAnimatedOverlay.js
@@ -0,0 +1,26 @@
+/* eslint-disable react-native/no-inline-styles */
+import React, {useRef, useEffect, useLayoutEffect} from 'react';
+import {Animated, Text, View, StyleSheet} from 'react-native';
+
+export default ({style = {}, effectDeps = [], children, ...rest}) => {
+ const fadeAnim = new Animated.Value(0.2);
+ useLayoutEffect(() => {
+ Animated.timing(fadeAnim, {
+ toValue: 0.8,
+ duration: 150,
+ userNativeDriver: true,
+ }).start();
+ }, []);
+ return (
+
+ );
+};
diff --git a/src/components/elements/SifirAnonimitySlider.js b/src/components/elements/SifirAnonimitySlider.js
new file mode 100644
index 0000000..c6c1aca
--- /dev/null
+++ b/src/components/elements/SifirAnonimitySlider.js
@@ -0,0 +1,142 @@
+import React from 'react';
+import {C} from '@common/index';
+import {StyleSheet, View, Animated, TextInput, Text} from 'react-native';
+import LinearGradient from 'react-native-linear-gradient';
+
+const height = 60;
+const width = C.SCREEN_WIDTH;
+
+const SifirAnonimitySlider = ({
+ minX,
+ maxX,
+ SV,
+ slider,
+ label,
+ lineLength,
+ cursor,
+ x,
+}) => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {minX}
+ {C.STR_Anonim_Level}
+ {maxX}
+
+ >
+ );
+};
+
+export default SifirAnonimitySlider;
+const styles = StyleSheet.create({
+ root: {
+ height,
+ },
+ container: {
+ overflow: 'hidden',
+ paddingTop: '20%',
+ width,
+ },
+
+ label: {
+ position: 'absolute',
+ color: 'white',
+ top: -30,
+ },
+ verticalGradient: {
+ height: 130,
+ width: 40,
+ backgroundColor: 'rgba(255,255,255,0.5)',
+ opacity: 0.5,
+ borderRadius: 10,
+ top: -40,
+ },
+ sliderContainer: {
+ marginHorizontal: 10,
+ marginTop: 10,
+ },
+ bubbleText: {
+ color: 'white',
+ textAlign: 'center',
+ fontSize: 18,
+ top: -15,
+ },
+ thumb: {
+ backgroundColor: '#00EDE7',
+ width: 40,
+ borderRadius: 5,
+ elevation: 3,
+ height: 16,
+ },
+ sliderTrack: {
+ backgroundColor: '#2B2B2B',
+ borderRadius: 5,
+ },
+ shadow: {
+ shadowColor: '#00EDE7',
+ shadowOffset: {width: 0, height: 0},
+ shadowOpacity: 0.8,
+ shadowRadius: 4,
+ },
+ cursorParent: {
+ width,
+ height: height,
+ position: 'absolute',
+ top: 0,
+ },
+ sliderLabel: {
+ color: 'gray',
+ },
+ sliderLabelContainer: {
+ width: '100%',
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ paddingHorizontal: 10,
+ alignItems: 'center',
+ },
+ chartContainer: {
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+});
diff --git a/src/components/elements/SifirAutoSpendWalletCard.js b/src/components/elements/SifirAutoSpendWalletCard.js
new file mode 100644
index 0000000..092292a
--- /dev/null
+++ b/src/components/elements/SifirAutoSpendWalletCard.js
@@ -0,0 +1,74 @@
+import React from 'react';
+import {View, Text, TouchableOpacity, Image, StyleSheet} from 'react-native';
+import SifirCard from '@elements/SifirCard';
+import {AppStyle, C} from '@common';
+
+const SifirAutoSpendWalletCard = ({
+ item,
+ setSelectedWallet,
+ onLayoutListItem,
+ selectedWallet,
+}) => {
+ const {label, desc, iconURL, meta} = item;
+ // const {id, leftIcon, heading, annonset} = item;
+
+ return (
+ setSelectedWallet(item)}
+ onLayout={event => onLayoutListItem(event, label)}>
+
+
+ {`${label} - ${desc}`}
+
+ {0}
+ {C.STR_Min_Anonset}
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ cardContainer: {
+ marginStart: 20,
+ marginEnd: 20,
+ marginBottom: 24,
+ backgroundColor: '#19282f',
+ borderWidth: 2,
+ borderColor: '#19282f',
+ borderRadius: 20,
+ padding: 15,
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+ leftIcon: {
+ width: 40,
+ height: 40,
+ resizeMode: 'contain',
+ },
+ listHeading: {
+ color: 'white',
+ flex: 1,
+ paddingLeft: 20,
+ },
+ anonset: {
+ color: 'white',
+ fontSize: 18,
+ },
+ anonsetLabel: {
+ color: 'gray',
+ fontSize: 12,
+ },
+ rightContainer: {
+ textAlign: 'right',
+ alignItems: 'flex-end',
+ },
+});
+export default SifirAutoSpendWalletCard;
diff --git a/src/components/elements/SifirCard.js b/src/components/elements/SifirCard.js
new file mode 100644
index 0000000..2f18db3
--- /dev/null
+++ b/src/components/elements/SifirCard.js
@@ -0,0 +1,8 @@
+import React from 'react';
+import {View} from 'react-native';
+
+const SifirCard = ({children, style}) => {
+ return {children};
+};
+
+export default SifirCard;
diff --git a/src/components/elements/SifirHeaders/SifirAutoSpendHeader.js b/src/components/elements/SifirHeaders/SifirAutoSpendHeader.js
new file mode 100644
index 0000000..225b1f4
--- /dev/null
+++ b/src/components/elements/SifirHeaders/SifirAutoSpendHeader.js
@@ -0,0 +1,123 @@
+/* eslint-disable react-native/no-inline-styles */
+import React, {useState} from 'react';
+import {
+ View,
+ Text,
+ StyleSheet,
+ TouchableOpacity,
+ TextInput,
+} from 'react-native';
+import {AppStyle, svg} from '@common';
+import SifirSwitch from '@elements/SifirSwitch';
+import SifirAnimatedOverlay from '@elements/SifirAnimatedOverlay';
+
+const {Back} = svg;
+
+const SifirAutoSpendHeader = ({
+ headerText,
+ setSwitchOn,
+ isSwitchOn,
+ showOverlay,
+ onBackPress,
+}) => {
+ return (
+
+ {showOverlay && }
+
+
+
+
+
+ {headerText}
+
+
+ setSwitchOn(active)}
+ />
+
+ );
+};
+
+export default SifirAutoSpendHeader;
+
+const styles = StyleSheet.create({
+ titleContainer: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ paddingTop: 10,
+ },
+ title: {
+ // marginLeft: 12,
+ fontSize: 20,
+ color: '#00EDE7',
+ fontWeight: 'bold',
+ fontFamily: AppStyle.mainFont,
+ width: '60%',
+ },
+ menuItem: {},
+ activeMenuItem: {
+ borderBottomColor: 'white',
+ borderBottomWidth: 1,
+ },
+ tabsStyle: {
+ flexDirection: 'row',
+ flex: 3,
+ marginLeft: 15,
+ marginRight: 15,
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ paddingLeft: 20,
+ paddingRight: 20,
+ },
+ activeNavTextView: {
+ color: 'white',
+ fontSize: 13,
+ fontFamily: AppStyle.mainFont,
+ },
+ navTextView: {
+ color: AppStyle.mainColor,
+ fontSize: 13,
+ fontFamily: AppStyle.mainFont,
+ },
+ logocontainer: {
+ width: 50,
+ height: 50,
+ borderRadius: 4,
+ marginLeft: 15,
+ borderWidth: 0.5,
+ shadowOffset: {width: 10, height: 10},
+ shadowColor: 'black',
+ shadowOpacity: 1.0,
+ },
+ navbarStyle: {
+ flexDirection: 'row',
+ padding: 10,
+ marginTop: 0,
+ // marginBottom: 15,
+ backgroundColor: AppStyle.backgroundColor,
+ justifyContent: 'center',
+ shadowColor: '#000',
+ shadowOffset: {
+ width: 0,
+ height: 12,
+ },
+ shadowOpacity: 0.58,
+ shadowRadius: 16.0,
+ elevation: 24,
+ },
+ badgeCont: {
+ position: 'absolute',
+ top: -9,
+ right: -7,
+ },
+ badge: {
+ width: 12,
+ height: 12,
+ borderWidth: 0,
+ borderRadius: 6,
+ },
+});
diff --git a/src/components/elements/SifirQRCode.js b/src/components/elements/SifirQRCode.js
index 12f6f3b..ed88fef 100644
--- a/src/components/elements/SifirQRCode.js
+++ b/src/components/elements/SifirQRCode.js
@@ -1,108 +1,34 @@
-import {Image, View} from 'react-native';
-import PropTypes from 'prop-types';
-import React from 'react';
-import qr from 'qr.js';
-import {Buffer} from 'buffer';
-
-function qr2bmp(data, colors, scale) {
- const header = Buffer.from(
- 'Qk02GwAAAAAAADYAAAAoAAAAMAAAADAAAAABABgAAAAAAAAbAAATCwAAEwsAAAAAAAAAAAAA',
- 'base64',
+import {View} from 'react-native';
+import React, {useEffect, useState} from 'react';
+import QRCode from 'react-native-qrcode-svg';
+import {Images, AppStyle} from '@common/index';
+// import qr from 'qr.js';
+const SifirQRCode = props => {
+ const {
+ value = 'Sifir',
+ fgColor = '#000000',
+ bgColor = '#FFFFFF',
+ size = 128,
+ setQrCodeURI,
+ } = props;
+ const [svgRef, setSvgRef] = useState(null);
+ useEffect(() => {
+ if (!svgRef) return;
+ svgRef.toDataURL(d => setQrCodeURI(`data:image/bmp;base64,${d}`));
+ }, [svgRef]);
+ return (
+
+ setSvgRef(c)}
+ onError={console.error}
+ logo={Images.icon_header}
+ logoBackgroundColor={AppStyle.backgroundColor}
+ />
+
);
- const size = data.length;
- const width = size * scale;
- if (width % 4 !== 0) {
- throw new Error('Image width must be multiple of 4');
- }
- header.writeUInt32LE(width, 0x12);
- header.writeUInt32LE(width, 0x16);
- header.writeUInt32LE(width * width * 3, 0x22);
- const outBuf = Buffer.alloc(width * width * 3);
-
- for (let rowN = 0, len = data.length; rowN < len; rowN += 1) {
- const row = data[rowN];
- for (let colN = 0, lenj = row.length; colN < lenj; colN += 1) {
- const color = colors[+row[colN]];
- for (let x = colN * scale; x < (colN + 1) * scale; x += 1) {
- for (let y = rowN * scale; y < (rowN + 1) * scale; y += 1) {
- const bo = ((width - 1 - y) * width + x) * 3;
- [outBuf[bo + 2], outBuf[bo + 1], outBuf[bo + 0]] = color;
- }
- }
- }
- }
- return `data:image/bmp;base64,${header.toString('base64')}${outBuf.toString(
- 'base64',
- )}`;
-}
-
-const utf16to8 = str => {
- /* eslint-disable no-bitwise */
- let out = '';
- for (let i = 0, len = str.length; i < len; i += 1) {
- const c = str.charCodeAt(i);
- if (c >= 0x0001 && c <= 0x007f) {
- out += str.charAt(i);
- } else if (c > 0x07ff) {
- out += String.fromCharCode(0xe0 | ((c >> 12) & 0x0f));
- out += String.fromCharCode(0x80 | ((c >> 6) & 0x3f));
- out += String.fromCharCode(0x80 | ((c >> 0) & 0x3f));
- } else {
- out += String.fromCharCode(0xc0 | ((c >> 6) & 0x1f));
- out += String.fromCharCode(0x80 | ((c >> 0) & 0x3f));
- }
- }
- /* eslint-enable no-bitwise */
- return out;
};
-
-const parseColor = hexColor => {
- if (!/^#[a-f0-9]{6}$/i.test(hexColor)) {
- throw new Error('Please provide the color in #FFFFFF format');
- }
- return [
- parseInt(hexColor.substr(1, 2), 16),
- parseInt(hexColor.substr(3, 2), 16),
- parseInt(hexColor.substr(5, 2), 16),
- ];
-};
-
-const gcd = (a, b) => (b ? gcd(b, a % b) : a);
-const lcm = (a, b) => (a * b) / gcd(a, b);
-
-export default class SifirQRCode extends React.Component {
- static defaultProps = {
- value: 'Sifir',
- fgColor: '#000000',
- bgColor: '#FFFFFF',
- size: 128,
- };
-
- static propTypes = {
- value: PropTypes.string,
- size: PropTypes.number,
- bgColor: PropTypes.string,
- fgColor: PropTypes.string,
- };
-
- render() {
- const {size, bgColor, fgColor, value} = this.props;
- const QRData = qr(utf16to8(value)).modules;
- const imageMultiple = lcm(4, QRData.length);
- const imageSize = Math.ceil(size / imageMultiple) * imageMultiple;
- const scale = imageSize / QRData.length;
- const uri = qr2bmp(
- QRData,
- [parseColor(bgColor), parseColor(fgColor)],
- scale,
- );
- if (this.props.getBase64) {
- this.props.getBase64(uri);
- }
- return (
-
-
-
- );
- }
-}
+export default SifirQRCode;
diff --git a/src/components/elements/SifirSettingModal.js b/src/components/elements/SifirSettingModal.js
index 1f00160..e7e92d6 100644
--- a/src/components/elements/SifirSettingModal.js
+++ b/src/components/elements/SifirSettingModal.js
@@ -45,8 +45,6 @@ const MenuListItem = ({label, icon, onPress, hideTopBorder = false}) => {
class SifirSettingModal extends Component {
state = {curMenu: 0, value: 0.6};
- // FIXME
- // Replace legacy shit with menuItems[] based rendering`
render() {
const {
navigation,
diff --git a/src/components/elements/SifirSlider.js b/src/components/elements/SifirSlider.js
new file mode 100644
index 0000000..0008b78
--- /dev/null
+++ b/src/components/elements/SifirSlider.js
@@ -0,0 +1,55 @@
+import React, {Component} from 'react';
+import {View, StyleSheet} from 'react-native';
+import Slider from 'react-native-slider';
+import {Images, AppStyle, C} from '@common/index';
+
+export default class SifirSlider extends Component {
+ state = {value: 20};
+ render() {
+ return (
+
+
+ this.setState({value})}
+ minimumValue={1}
+ maximumValue={90}
+ minimumTrackTintColor="#25b6fa"
+ maximumTrackTintColor="#412160"
+ thumbStyle={styles.thumb}
+ trackStyle={{
+ height: 10,
+ borderRadius: 5,
+ }}
+ />
+
+
+ );
+ }
+}
+
+const styles = StyleSheet.create({
+ timeView: {
+ flex: 1,
+ marginTop: 15,
+ },
+ clockImgView: {
+ justifyContent: 'center',
+ flexDirection: 'row',
+ },
+ clockImg: {width: 25, height: 25},
+ setFeeTxt: {fontSize: 18, marginLeft: 5},
+ feeTxt: {
+ fontSize: 25,
+ marginVertical: 10,
+ marginHorizontal: 4,
+ },
+ waitView: {
+ flexDirection: 'row',
+ width: '100%',
+ justifyContent: 'space-between',
+ },
+});
diff --git a/src/components/elements/SifirSwitch.js b/src/components/elements/SifirSwitch.js
new file mode 100644
index 0000000..f45dc49
--- /dev/null
+++ b/src/components/elements/SifirSwitch.js
@@ -0,0 +1,59 @@
+import React from 'react';
+import {TouchableOpacity, View, Text, StyleSheet} from 'react-native';
+
+const SifirSwitch = ({isActive, style, width, setSwitchOn}) => {
+ return (
+
+ setSwitchOn(!isActive)}
+ style={[
+ styles.container,
+ {
+ ...(isActive ? styles.activeContainer : styles.inactiveContainer),
+ width: width,
+ borderRadius: 30,
+ },
+ ]}>
+
+
+
+
+
+ );
+};
+
+SifirSwitch.defaultProps = {
+ width: 80,
+};
+
+export default SifirSwitch;
+
+const styles = StyleSheet.create({
+ activeContainer: {
+ borderWidth: 1.32,
+ borderColor: 'rgba(83, 203, 200, 0.5)',
+ backgroundColor: 'rgba(83, 203, 200, 0.5)',
+ alignItems: 'flex-end',
+ },
+ inactiveContainer: {
+ borderWidth: 1.32,
+ borderColor: '#74797B',
+ alignItems: 'flex-start',
+ },
+});
diff --git a/src/components/elements/SifirTransactionsTab.js b/src/components/elements/SifirTransactionsTab.js
new file mode 100644
index 0000000..0f68f6d
--- /dev/null
+++ b/src/components/elements/SifirTransactionsTab.js
@@ -0,0 +1,140 @@
+import React, {useState, useEffect, useMemo} from 'react';
+import {
+ View,
+ Text,
+ TouchableOpacity,
+ Image,
+ StyleSheet,
+ FlatList,
+} from 'react-native';
+import {Images, AppStyle, C} from '@common/index';
+const SifirTransactionsTab = props => {
+ const [showContextMenu, setShowContextMenu] = useState(false);
+ const {headerText, filterMap = [], txnData, renderItem} = props;
+ const [tabData, setTabData] = useState([]);
+ const [appliedFilter, setAppliedFilter] = useState(null);
+ const [filteredData, setFilteredData] = useState([]);
+
+ // fetch data on init
+ useEffect(() => {
+ setTabData(txnData);
+ }, [txnData]);
+ // auto Filter on new data refresh
+ useEffect(() => {
+ if (!tabData?.length || !filterMap?.length) {
+ return;
+ }
+ const {cb, title} = filterMap.find(
+ ({title: mapFilterTitle}) => mapFilterTitle === appliedFilter,
+ ) || {cb: null, title: null};
+ handleOnFilter({cb, title});
+ }, [tabData]);
+
+ const handleOnFilter = ({cb, title}) => {
+ setAppliedFilter(title);
+ // TODO
+ if (title === null) {
+ setFilteredData(tabData);
+ return;
+ }
+ const filterMapData = cb(tabData);
+ setFilteredData(filterMapData);
+ };
+ const SifirFilteredTxns = useMemo(
+ () => (
+
+ item?.bolt11 + item?.txid + index + item.tx
+ }
+ renderItem={renderItem}
+ />
+ ),
+ [filteredData],
+ );
+ return (
+
+ {!!filterMap?.length && (
+
+ {/* TODO make this toucableopacity that resets filter*/}
+
+ {headerText} - {appliedFilter || ''}
+
+ setShowContextMenu(!showContextMenu)}>
+
+
+
+ )}
+ {showContextMenu && (
+
+ {filterMap.map(({title, cb}, index) => (
+ <>
+ handleOnFilter({cb, title})}>
+ {title}
+
+ {index < filterMap.length - 1 ? (
+
+ ) : (
+ []
+ )}
+ >
+ ))}
+
+ )}
+ {SifirFilteredTxns}
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ paddingHorizontal: 20,
+ },
+ txnLblTxt: {
+ color: 'white',
+ fontSize: 20,
+ fontWeight: '700',
+ marginTop: 10,
+ },
+ headerRow: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ marginTop: 10,
+ marginBottom: 10,
+ },
+ filterPopupContainer: {
+ width: 165,
+ height: 165,
+ backgroundColor: 'white',
+ borderRadius: 10,
+ alignItems: 'stretch',
+ justifyContent: 'space-between',
+ right: 0,
+ position: 'absolute',
+ elevation: 10,
+ zIndex: 10,
+ top: 50,
+ },
+ popupListItem: {
+ backgroundColor: 'white',
+ flex: 1,
+ padding: 25,
+ justifyContent: 'center',
+ borderRadius: 10,
+ },
+ seperator: {
+ width: '90%',
+ height: 2,
+ backgroundColor: '#E0E0E0',
+ alignSelf: 'center',
+ },
+ listItemLabel: {
+ fontWeight: 'bold',
+ },
+});
+export default SifirTransactionsTab;
diff --git a/src/components/elements/SifirTxnList.js b/src/components/elements/SifirTxnList.js
deleted file mode 100644
index 45fe0b9..0000000
--- a/src/components/elements/SifirTxnList.js
+++ /dev/null
@@ -1,183 +0,0 @@
-import React from 'react';
-import {
- View,
- Image,
- Text,
- StyleSheet,
- TouchableOpacity,
- FlatList,
-} from 'react-native';
-import SifirBTCAmount from '@elements/SifirBTCAmount';
-import moment from 'moment';
-import {Images, AppStyle, C} from '@common/index';
-import {useMemo, useState} from 'react';
-const makeInvoiceRenderData = ({
- decodedBolt11,
- meta: {description: desc, status},
-}) => {
- let amount, imgURL, description, timeStr;
- const {millisatoshis, timestamp} = decodedBolt11;
- amount = millisatoshis;
- description = desc;
- switch (status) {
- case 'unpaid':
- imgURL = Images.icon_yellowTxn;
- break;
- case 'paid':
- imgURL = Images.icon_thickGreenArrowTxn;
- break;
- }
- timeStr = moment(timestamp * 1000).fromNow();
- return {amount, description, imgURL, timeStr};
-};
-
-const makePaysRenderData = ({decodedBolt11, meta: {preimage}}) => {
- let amount, imgURL, description, timeStr;
- const {millisatoshis, complete, timestamp} = decodedBolt11;
- if (complete) {
- imgURL = Images.icon_send;
- // FIXME strings to constants...
- description = `Paid - ${preimage.slice(0, 3)} .. ${preimage.slice(-3)}`;
- amount = millisatoshis;
- timeStr = moment(timestamp * 1000).fromNow();
- }
- return {amount, description, imgURL, timeStr};
-};
-
-const makeTxnRenderData = ({category, txid, amount, timereceived}) => {
- let imgURL, timeStr, txIDStr;
- txIDStr = `${txid.slice(0, 3)} .. ${txid.slice(-3)}`;
- if (category) {
- switch (category) {
- case 'send':
- txIDStr = 'Sent - #' + txIDStr;
- imgURL = Images.icon_send;
- break;
- case 'receive':
- txIDStr = 'Received - #' + txIDStr;
- imgURL = Images.icon_receive;
- break;
- default:
- txIDStr = 'Unknown - #' + txIDStr;
- imgURL = Images.icon_receive;
- break;
- }
- } else {
- txIDStr = 'Received - #' + txIDStr;
- imgURL = Images.icon_receive;
- }
- timeStr = moment(timereceived * 1000).fromNow();
- return {imgURL, txIDStr, amount, timeStr};
-};
-
-// FIXME this file is starting to get conjected , move these to elements
-const SifirTxnEntry = ({txn, unit}) => {
- const {imgURL, txIDStr, amount, timeStr} = makeTxnRenderData(txn);
- return (
-
- );
-};
-
-const ListItem = ({title, description, imgURL, amount, unit}) => {
- return (
-
-
-
-
- {title}
- {description}
-
-
-
-
-
-
- );
-};
-const SifirInvEntry = React.memo(({inv, unit}) => {
- const {type} = inv;
- try {
- const {amount, imgURL, timeStr, description} =
- type === 'invoice' ? makeInvoiceRenderData(inv) : makePaysRenderData(inv);
- return (
-
- );
- } catch (err) {
- return null;
- }
-});
-
-/**
- * Takes equal slices of invoices and payments decodes them and sorts them
- */
-const processLnTxnList = (txnData, start = 0, length = 20) =>
- [...(txnData?.invoices || []), ...(txnData?.pays || [])]
- .filter(txn => txn && txn?.decodedBolt11?.timestamp > 1)
- .sort((a, b) => b.decodedBolt11.timestamp - a.decodedBolt11.timestamp)
- .slice(start, length);
-
-const SifirTxnList = ({width, height, unit, txnData, type}) => {
- const [txnDataCached, setTxnDataCached] = useState([]);
- // FIXME proper array compare
- if (txnData.length !== txnDataCached.length) {
- setTxnDataCached(txnData);
- }
- const txnListToRender = React.useMemo(() => {
- if (type === C.STR_LN_WALLET_TYPE) {
- return processLnTxnList(txnData, 0, 20);
- } else {
- return txnData;
- }
- }, [txnDataCached]);
- return (
- item?.bolt11 + item?.txid + index}
- renderItem={({item}) => {
- if (type === C.STR_LN_WALLET_TYPE) {
- return ;
- } else {
- return ;
- }
- }}
- />
- );
-};
-
-export default SifirTxnList;
-
-const styles = StyleSheet.create({
- listItme: {
- flex: 1,
- flexDirection: 'row',
- width: '100%',
- height: 50,
- borderBottomColor: AppStyle.listViewSep,
- borderBottomWidth: 2,
- alignItems: 'center',
- },
- txIDstr: {
- color: AppStyle.mainColor,
- fontWeight: 'bold',
- },
- amount: {
- flex: 2,
- color: AppStyle.mainColor,
- },
- arrowIcon: {width: 30, height: 30},
- timeStrContainer: {flex: 5, marginLeft: 20},
-});
diff --git a/src/components/elements/SifirWalletButton.js b/src/components/elements/SifirWalletButton.js
index f4fc813..c95c6be 100644
--- a/src/components/elements/SifirWalletButton.js
+++ b/src/components/elements/SifirWalletButton.js
@@ -22,7 +22,6 @@ export default class SifirWalletButton extends Component {
pageURL,
} = this.props.walletInfo;
const {isClicked} = this.state;
-
return (
{
@@ -41,6 +40,7 @@ export default class SifirWalletButton extends Component {
height={height}>
{
+ return (
+
+
+
+
+ {title}
+ {description}
+
+
+
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ listItme: {
+ flex: 1,
+ flexDirection: 'row',
+ width: '100%',
+ paddingVertical: 5,
+ // height: 50,
+ borderBottomColor: '#6B6B6B',
+ borderBottomWidth: 1,
+ alignItems: 'center',
+ },
+ txIDstr: {
+ color: AppStyle.mainColor,
+ fontWeight: 'bold',
+ },
+ amount: {
+ flex: 2,
+ color: AppStyle.mainColor,
+ textAlign: 'right',
+ },
+ listIcon: {width: 40, height: 40},
+ timeStrContainer: {flex: 5, marginLeft: 20},
+});
+export default BtcTxnListItem;
diff --git a/src/components/elements/TxnListItems/SifirInvEntry.js b/src/components/elements/TxnListItems/SifirInvEntry.js
new file mode 100644
index 0000000..4898cd4
--- /dev/null
+++ b/src/components/elements/TxnListItems/SifirInvEntry.js
@@ -0,0 +1,63 @@
+import React from 'react';
+import BtcTxnListItem from '@elements/TxnListItems/SifirBtcTxnListItem';
+import {Images} from '@common/index';
+import moment from 'moment';
+
+const SifirInvEntry = ({inv, unit}) => {
+ const {type} = inv;
+
+ const makePaysRenderData = ({decodedBolt11, meta: {preimage}}) => {
+ let amount, imgURL, description, timeStr;
+ const isSentTxn = true;
+ const {millisatoshis, complete, timestamp} = decodedBolt11;
+ if (complete) {
+ imgURL = Images.icon_send;
+ // FIXME strings to constants...
+ description = `Paid - ${preimage.slice(0, 3)} .. ${preimage.slice(-3)}`;
+ amount = millisatoshis;
+ timeStr = moment(timestamp * 1000).fromNow();
+ }
+ return {amount, description, imgURL, timeStr, isSentTxn};
+ };
+
+ const makeInvoiceRenderData = ({
+ decodedBolt11,
+ meta: {description: desc, status},
+ }) => {
+ let amount, imgURL, description, timeStr, isSentTxn;
+ const {millisatoshis, timestamp} = decodedBolt11;
+ amount = millisatoshis;
+ description = desc;
+ switch (status) {
+ case 'unpaid':
+ imgURL = Images.icon_yellowTxn;
+ isSentTxn = false;
+ break;
+ case 'paid':
+ imgURL = Images.icon_thickGreenArrowTxn;
+ isSentTxn = true;
+ break;
+ }
+ timeStr = moment(timestamp * 1000).fromNow();
+ return {amount, description, imgURL, timeStr, isSentTxn};
+ };
+
+ try {
+ const {amount, imgURL, timeStr, description, isSentTxn} =
+ type === 'invoice' ? makeInvoiceRenderData(inv) : makePaysRenderData(inv);
+ return (
+
+ );
+ } catch (err) {
+ return null;
+ }
+};
+
+export default SifirInvEntry;
diff --git a/src/components/elements/TxnListItems/SifirTxnEntry.js b/src/components/elements/TxnListItems/SifirTxnEntry.js
new file mode 100644
index 0000000..41e6d43
--- /dev/null
+++ b/src/components/elements/TxnListItems/SifirTxnEntry.js
@@ -0,0 +1,46 @@
+import React from 'react';
+import BtcTxnListItem from '@elements/TxnListItems/SifirBtcTxnListItem';
+import {Images} from '@common/index';
+import moment from 'moment';
+
+const SifirTxnEntry = ({txn, unit}) => {
+ const makeTxnRenderData = ({category, txid, amount, timereceived}) => {
+ let imgURL, timeStr, txIDStr;
+ txIDStr = `${txid.slice(0, 3)} .. ${txid.slice(-3)}`;
+ if (category) {
+ switch (category) {
+ case 'send':
+ // TODO str to constants
+ txIDStr = 'Sent - #' + txIDStr;
+ imgURL = Images.icon_send;
+ break;
+ case 'receive':
+ txIDStr = 'Received - #' + txIDStr;
+ imgURL = Images.icon_receive;
+ break;
+ default:
+ txIDStr = 'Unknown - #' + txIDStr;
+ imgURL = Images.icon_receive;
+ break;
+ }
+ } else {
+ txIDStr = 'Received - #' + txIDStr;
+ imgURL = Images.icon_receive;
+ }
+ timeStr = moment(timereceived * 1000).fromNow();
+ return {imgURL, txIDStr, amount, timeStr};
+ };
+
+ const {imgURL, txIDStr, amount, timeStr} = makeTxnRenderData(txn);
+ return (
+
+ );
+};
+
+export default SifirTxnEntry;
diff --git a/src/components/elements/TxnListItems/SifirUnspentCoinEntry.js b/src/components/elements/TxnListItems/SifirUnspentCoinEntry.js
new file mode 100644
index 0000000..3319fc5
--- /dev/null
+++ b/src/components/elements/TxnListItems/SifirUnspentCoinEntry.js
@@ -0,0 +1,37 @@
+import React, {useState} from 'react';
+import UnspentCoinListItem from '@elements/TxnListItems/SifirUnspentCoinListItem';
+import {Images} from '@common/index';
+
+const SifirUnspentCoinEntry = ({utxo, unit}) => {
+ try {
+ const {
+ amount,
+ address,
+ confirmed,
+ label,
+ anonymitySet,
+ txid,
+ anonsetLabel = 'AnonimitySet',
+ } = utxo;
+ // TODO add multiSelect list and use following icon
+ const imgURL = confirmed ? Images.icon_confirmed : Images.icon_unconfirmed;
+ return (
+
+ );
+ } catch (err) {
+ return null;
+ }
+};
+
+export default SifirUnspentCoinEntry;
diff --git a/src/components/elements/TxnListItems/SifirUnspentCoinListItem.js b/src/components/elements/TxnListItems/SifirUnspentCoinListItem.js
new file mode 100644
index 0000000..4586620
--- /dev/null
+++ b/src/components/elements/TxnListItems/SifirUnspentCoinListItem.js
@@ -0,0 +1,81 @@
+import React from 'react';
+import {View, Text, TouchableOpacity, Image, StyleSheet} from 'react-native';
+import SifirBTCAmount from '@elements/SifirBTCAmount';
+import {Images, AppStyle, C} from '@common/index';
+
+const UnspentCoinListItem = ({
+ amount,
+ anonsetLabel = 'AnonimitySet',
+ anonSet,
+ label,
+ txid,
+ confirmed,
+ leftIcon,
+ rightIcon,
+ unit,
+}) => {
+ return (
+
+
+
+
+
+
+
+
+
+ {' '} {anonsetLabel}: {anonSet}
+
+
+ {label}
+
+ TX ID {txid}
+
+
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ listItem: {
+ flex: 1,
+ flexDirection: 'row',
+ width: '100%',
+ paddingVertical: 5,
+ // height: 50,
+ borderBottomColor: '#6B6B6B',
+ borderBottomWidth: 1,
+ alignItems: 'center',
+ },
+ listIcon: {width: 40, height: 40},
+ timeStrContainer: {flex: 5, marginLeft: 20},
+ annonSet: {
+ color: '#82C9C6',
+ fontWeight: 'bold',
+ fontSize: 13,
+ },
+ unspentAmount: {
+ color: '#fff',
+ fontWeight: 'bold',
+ },
+ label: {
+ color: '#fff',
+ fontSize: 13,
+ },
+ txid: {
+ marginTop: 5,
+ color: AppStyle.mainColor,
+ },
+ bold: {fontWeight: 'bold'},
+});
+
+export default UnspentCoinListItem;
diff --git a/src/components/elements/TxnListItems/SifirWasabiTxnEntry.js b/src/components/elements/TxnListItems/SifirWasabiTxnEntry.js
new file mode 100644
index 0000000..903f24b
--- /dev/null
+++ b/src/components/elements/TxnListItems/SifirWasabiTxnEntry.js
@@ -0,0 +1,26 @@
+import React from 'react';
+import BtcTxnListItem from '@elements/TxnListItems/SifirBtcTxnListItem';
+import {Images, C} from '@common/index';
+import moment from 'moment';
+
+const SifirWasabiTxnEntry = ({txn, unit}) => {
+ try {
+ const {amount, datetime, label} = txn;
+ const imgURL = amount > 0 ? Images.icon_yellowTxn : Images.icon_send;
+ const isSentTxn = amount > 0 ? false : true;
+ return (
+
+ );
+ } catch (err) {
+ return null;
+ }
+};
+
+export default SifirWasabiTxnEntry;
diff --git a/src/components/elements/deprecated/SifirAccountHistory.js b/src/components/elements/deprecated/SifirAccountHistory.js
new file mode 100644
index 0000000..265eff3
--- /dev/null
+++ b/src/components/elements/deprecated/SifirAccountHistory.js
@@ -0,0 +1,198 @@
+/* eslint-disable react-hooks/exhaustive-deps */
+import React, {useCallback, useMemo, useState, useEffect} from 'react';
+import {View, Image, StyleSheet, Text, ActivityIndicator} from 'react-native';
+import {Images, AppStyle, C} from '@common/index';
+import SifirTransactions from '@elements/SifirTransactions';
+import BottomSheet from 'reanimated-bottom-sheet';
+import {TabView, SceneMap, TabBar} from 'react-native-tab-view';
+import {ScrollView} from 'react-native-gesture-handler';
+
+export const sheetHeight = C.SCREEN_HEIGHT - 150;
+const initialSnap = C.SCREEN_HEIGHT * 0.35;
+const initialLayout = {width: C.SCREEN_WIDTH};
+
+const renderTabBar = props => (
+ (
+
+ {label.route.title}
+
+ )}
+ />
+);
+
+const SifirAccountHistory = ({
+ loading,
+ loaded,
+ txnData,
+ btcUnit,
+ type,
+ headerText,
+ bottomExtraSpace,
+}) => {
+ const [index, setIndex] = useState(0);
+ const [filteredTxns, setFilteredTxns] = useState(txnData);
+ const [routes] = useState([
+ {key: 'transactions', title: 'Transactions'},
+ {key: 'unspentCoins', title: 'Unspent Coins'},
+ {key: 'labeledAddress', title: 'Labeled Addresses'},
+ ]);
+ useEffect(() => {
+ setFilteredTxns(txnData);
+ }, [txnData]);
+
+ const filterWasabiTxnData = filter => {
+ if (type === C.STR_WASABI_WALLET_TYPE && txnData?.transactions?.length) {
+ const tempTxnData = {...txnData};
+ if (filter === 'received') {
+ const receivedTxns = tempTxnData.transactions.filter(txn => {
+ return txn.amount > 0;
+ });
+ tempTxnData.transactions = receivedTxns;
+ setFilteredTxns(tempTxnData);
+ } else if (filter === 'sent') {
+ const sentTxns = tempTxnData.transactions.filter(txn => {
+ return txn.amount < 0;
+ });
+ tempTxnData.transactions = sentTxns;
+ setFilteredTxns(tempTxnData);
+ } else {
+ setFilteredTxns(txnData);
+ }
+ } else {
+ setFilteredTxns(txnData);
+ }
+ };
+
+ const Transactions = useCallback(() => {
+ return (
+
+
+
+ );
+ }, [txnData, filteredTxns]);
+
+ const UnspentCoins = useCallback(
+ () => (
+
+
+
+ ),
+ [txnData],
+ );
+ const LabeledAddresses = useCallback(
+ () => (
+
+ ),
+ [txnData],
+ );
+ const renderScene = useMemo(
+ () =>
+ SceneMap({
+ transactions: Transactions,
+ unspentCoins: UnspentCoins,
+ labeledAddress: LabeledAddresses,
+ }),
+ [filteredTxns],
+ );
+ return (
+ 100 ? bottomExtraSpace - 20 : initialSnap,
+ ]}
+ initialSnap={1}
+ enabledInnerScrolling={true}
+ enabledGestureInteraction={true}
+ renderContent={() => (
+
+
+ {!loading && (
+ // TODO change upArrow to down arrow when slider is opened.
+
+ )}
+ {loading && (
+
+ )}
+
+
+
+ )}
+ />
+ );
+};
+
+const styles = StyleSheet.create({
+ settingIcon: {width: 20, height: 20, marginLeft: 20, marginTop: 7},
+ spinner: {alignSelf: 'center'},
+ headerContainer: {
+ backgroundColor: '#122C3A',
+ borderTopLeftRadius: 30,
+ borderTopRightRadius: 30,
+ justifyContent: 'center',
+ alignItems: 'center',
+ paddingTop: 10,
+ },
+ tabTitleLabel: {fontWeight: 'bold'},
+ sceneContainer: {
+ backgroundColor: AppStyle.tertiaryColor,
+ },
+ tabIndicatorContainerStyle: {
+ borderBottomColor: AppStyle.grayColor,
+ borderBottomWidth: 3,
+ opacity: 0.5,
+ },
+ tabIndicator: {
+ backgroundColor: AppStyle.mainColor,
+ bottom: -2,
+ },
+ tabBar: {
+ backgroundColor: AppStyle.tertiaryColor,
+ },
+});
+
+export default SifirAccountHistory;
diff --git a/src/components/elements/deprecated/SifirTxnList.js b/src/components/elements/deprecated/SifirTxnList.js
new file mode 100644
index 0000000..d801e59
--- /dev/null
+++ b/src/components/elements/deprecated/SifirTxnList.js
@@ -0,0 +1,33 @@
+/* @DEPRECATED
+ * contents moved to sifirtransacotins
+ * */
+import React, {useState} from 'react';
+import {StyleSheet, FlatList} from 'react-native';
+
+// I think this gets moved one level up to SifirTransactions , onFilter can set the data it will render after each filter returns
+const SifirTxnList = ({txnData, renderItem, processData}) => {
+ const [txnDataCached, setTxnDataCached] = useState([]);
+ // FIXME proper array compare
+ if (txnData.length !== txnDataCached.length) {
+ setTxnDataCached(txnData);
+ }
+ const txnListToRender = React.useMemo(() => {
+ return processData(txnData, 0, 20);
+ }, [txnDataCached]);
+ return (
+
+ item?.bolt11 + item?.txid + index + item.tx
+ }
+ renderItem={({item}) => {
+ return renderItem(item);
+ }}
+ />
+ );
+};
+
+export default SifirTxnList;
+
+const styles = StyleSheet.create({});
diff --git a/src/components/screens/auth/UnlockORGenKeys.js b/src/components/screens/auth/UnlockORGenKeys.js
index e026ea6..4947dda 100644
--- a/src/components/screens/auth/UnlockORGenKeys.js
+++ b/src/components/screens/auth/UnlockORGenKeys.js
@@ -32,7 +32,7 @@ class UnlockORGenKeys extends Component {
state = {
scannedToken: this.props.route.params.scannedToken,
encAuthInfo: this.props.route.params.encAuthInfo || null,
- passphrase: '',
+ passphrase: 'oooooo', //TODO HAMZA reset before PR
retryablePairingError: '',
};
diff --git a/src/components/screens/wallet/SifirAccountScreen.js b/src/components/screens/wallet/SifirAccountScreen.js
index 2556473..aefa712 100644
--- a/src/components/screens/wallet/SifirAccountScreen.js
+++ b/src/components/screens/wallet/SifirAccountScreen.js
@@ -1,201 +1,494 @@
-import React from 'react';
-import {View, Image, StyleSheet, TouchableOpacity, Text} from 'react-native';
+import React, {useState, useCallback, useEffect, useMemo} from 'react';
+import {useNavigation} from '@react-navigation/native';
+import {
+ View,
+ Image,
+ StyleSheet,
+ TouchableOpacity,
+ Text,
+ ScrollView,
+ Alert,
+} from 'react-native';
import {connect} from 'react-redux';
import {Images, AppStyle, C} from '@common/index';
import {getWalletDetails} from '@actions/btcwallet';
import {getLnWalletDetails} from '@actions/lnWallet';
+import {getUnspentCoins, getTxns as wasabiGetTxns} from '@actions/wasabiWallet';
+import {
+ getWasabiAutoSpendWallet,
+ setWasabiAutoSpendWalletAndAnonset,
+ getWasabiAutoSpendMinAnonset,
+} from '@actions/cnClient';
import SifirAccountHeader from '@elements/SifirAccountHeader';
+import SifirAccountChart from '@elements/SifirAccountChart';
import SifirAccountActions from '@elements/SifirAccountActions';
-import SifirAccountHistory from '@elements/SifirAccountHistory';
+import SifirAccountHistoryTabs, {
+ sheetHeight,
+} from '@structures/SifirAccountHistoryTabs';
import SifirSettingModal from '@elements/SifirSettingModal';
import {ErrorScreen} from '@screens/error';
+import debounce from '../../../helpers/debounce';
-class SifirAccountScreen extends React.Component {
- constructor(props, context) {
- super(props, context);
- }
- state = {
- balance: 0,
- txnData: [],
- isVisibleSettingsModal: false,
- };
- stopLoading = null;
+const SifirAccountScreen = props => {
+ const [balance, setBalance] = useState(0);
+ const [dataLoaded, setDataLoaded] = useState(null);
+ const [chartLoaded, setChartLoaded] = useState(true);
+ const [isVisibleSettingsModal, setIsVisibleSettingsModal] = useState(false);
+ const [anonset, setAnonset] = useState(0);
+ const [bottomExtraSpace, setBottomExtraSpace] = useState(sheetHeight);
+ const [showAccountHistory, setShowAccountHistory] = useState(false);
+ const navigation = useNavigation();
+ const {walletInfo} = props.route.params;
+ const {navigate} = navigation;
- async _loadWalletFromProps() {
- const {label, type} = this.props.route.params.walletInfo;
- if (type === C.STR_LN_WALLET_TYPE) {
- const {balance, txnData} = await this.props.getLnWalletDetails({label});
- this.setState({balance, txnData});
- } else {
- const {balance, txnData} = await this.props.getWalletDetails({
- label,
- type,
- });
- this.setState({balance, txnData});
+ const _loadWalletFromProps = async () => {
+ setDataLoaded(null);
+ const {label, type} = walletInfo;
+ switch (type) {
+ case C.STR_LN_WALLET_TYPE:
+ let {balance: lnBalance} = await props.getLnWalletDetails({label});
+ setBalance(lnBalance);
+ setDataLoaded({});
+ setShowAccountHistory(true);
+ break;
+ case C.STR_SPEND_WALLET_TYPE:
+ case C.STR_WATCH_WALLET_TYPE:
+ let {balance: walletBalance} = await props.getWalletDetails({
+ label,
+ type,
+ });
+ setBalance(walletBalance);
+ setDataLoaded({});
+ setShowAccountHistory(true);
+ break;
+ case C.STR_WASABI_WALLET_TYPE:
+ const [
+ ,
+ ,
+ autoSpendWallet,
+ autoSpendWalletMinAnonset,
+ ] = await Promise.all([
+ props.getUnspentCoins(),
+ props.wasabiGetTxns(),
+ props.getWasabiAutoSpendWallet(),
+ props.getWasabiAutoSpendMinAnonset(),
+ ]);
+ setDataLoaded({autoSpendWallet, autoSpendWalletMinAnonset});
+ setShowAccountHistory(true);
+ //if (!state.showAccountHistory) {
+ // setTimeout(() => {
+ // setState({showAccountHistory: true});
+ // }, 100);
+ //}
+ break;
}
- }
+ };
+ useEffect(() => {
+ _loadWalletFromProps();
+ }, []);
- componentDidMount() {
- const {_loadWalletFromProps} = this;
- this.stopLoading = this.props.navigation.addListener(
- 'focus',
- _loadWalletFromProps.bind(this),
- );
- }
+ const toggleSettingsModal = () =>
+ setIsVisibleSettingsModal(!isVisibleSettingsModal);
- componentWillUnmount() {
- this.stopLoading();
- }
- toggleSettingsModal() {
- this.setState({isVisibleSettingsModal: !this.state.isVisibleSettingsModal});
- }
-
- handleReceiveButton = () => {
- const {walletInfo} = this.props.route.params;
- this.props.navigation.navigate('BtcReceiveTxn', {walletInfo});
+ const handleReceiveButton = () => {
+ navigate('BtcReceiveTxn', {walletInfo});
};
- handleSendBtn = () => {
- const {walletInfo} = this.props.route.params;
+ const handleSendBtn = () => {
const {type} = walletInfo;
- const {balance} = this.state;
- if (type === C.STR_LN_WALLET_TYPE) {
- this.props.navigation.navigate('LNPayInvoiceRoute', {
- screen: 'LnScanBolt',
- params: {walletInfo: {...walletInfo, balance}},
- });
- } else {
- this.props.navigation.navigate('GetAddress', {
- walletInfo: {...walletInfo, balance},
- });
+ switch (type) {
+ case C.STR_LN_WALLET_TYPE:
+ navigate('LNPayInvoiceRoute', {
+ screen: 'LnScanBolt',
+ params: {walletInfo: {...walletInfo, balance}},
+ });
+ break;
+ case C.STR_WASABI_WALLET_TYPE:
+ navigate('GetAddress', {
+ walletInfo: {...walletInfo, balance, anonset},
+ });
+ break;
+ default:
+ navigate('GetAddress', {
+ walletInfo: {...walletInfo, balance},
+ });
+ break;
}
};
- render() {
- const {balance, txnData} = this.state;
- const {navigate} = this.props.navigation;
- const {walletInfo} = this.props.route.params;
- const {label, type} = walletInfo;
- const {loading, loaded, error: errorBtc} = this.props.btcWallet;
- const {
- loading: loadingLN,
- loaded: loadedLN,
- error: errorLN,
- } = this.props.lnWallet;
- const btcUnit = type === C.STR_LN_WALLET_TYPE ? C.STR_MSAT : C.STR_BTC;
- const isLoading = type === C.STR_LN_WALLET_TYPE ? loadingLN : loading;
- const isLoaded = type === C.STR_LN_WALLET_TYPE ? loadedLN : loaded;
- const hasError = type === C.STR_LN_WALLET_TYPE ? errorLN : errorBtc;
- const {toggleSettingsModal} = this;
- if (hasError) {
- return (
- {
+ setAnonset(Math.floor(anonset));
+ setBalance(value);
+ setChartLoaded(true);
+ }, 1),
+ [],
+ );
+ const onExtraSpaceLayout = event => {
+ const {height} = event.nativeEvent.layout;
+ setBottomExtraSpace(height);
+ };
+
+ const {label, type} = walletInfo;
+
+ // Account stuff that depends on data load, IE Function only changes on Walletinfo change but runs every update
+ // const walletDataCb = useCallback(() => {
+ const {
+ isLoading = true,
+ isLoaded = false,
+ hasError = null,
+ dataMap = [],
+ filterMap = [],
+ chartData = null,
+ settingModalProps = {},
+ } = useMemo(() => {
+ if (!dataLoaded) {
+ return {};
+ }
+ switch (type) {
+ case C.STR_LN_WALLET_TYPE:
+ return {
+ isLoading: props.lnWallet.loading,
+ isLoaded: props.lnWallet.loaded,
+ hasError: props.lnWallet.error,
+ settingModalProps: {
+ toolTipStyle: false,
+ showOpenChannel: true,
+ showTopUp: true,
+ showWithdraw: true,
+ },
+ dataMap: [
{
- text: C.STR_TRY_AGAIN,
- onPress: () => this._loadWalletFromProps(),
+ key: C.STR_LN_WALLET_TYPE,
+ title: 'Invoices & Payments',
+ data: [
+ ...(props.lnWallet?.invoices || []),
+ ...(props.lnWallet?.pays || []),
+ ]
+ .filter(txn => txn && txn?.decodedBolt11?.timestamp > 1)
+ .sort(
+ (a, b) =>
+ b.decodedBolt11.timestamp - a.decodedBolt11.timestamp,
+ ),
},
{
- text: C.STR_GO_BACK,
- onPress: () => navigate('AccountList'),
+ key: C.STR_UNSPENT_COINS,
+ title: 'Unspent Outputs',
+ data: (props.lnWallet?.outputs || []).map(
+ ({txid, value, address, status, blockheight}) => ({
+ amount: value,
+ confirmed: status === 'confirmed',
+ label: address,
+ anonsetLabel: 'Block',
+ anonymitySet: blockheight,
+ txid,
+ }),
+ ),
},
- ]}
- />
- );
+ ],
+ filterMap: [
+ {
+ title: 'Invoices',
+ cb: (data, param) => data.filter(txn => txn.type === 'invoice'),
+ },
+ {
+ title: 'Payments',
+ cb: (data, param) => data.filter(txn => txn.type === 'pay'),
+ },
+ ],
+ };
+ case C.STR_WASABI_WALLET_TYPE:
+ return {
+ isLoading:
+ props.cyphernode.loading ||
+ (props.wasabiWallet.loading && !chartLoaded),
+ isLoaded: props.wasabiWallet.loaded && chartLoaded,
+ hasError: props.wasabiWallet.error,
+ chartData: props.wasabiWallet.unspentCoinsList?.unspentcoins?.length
+ ? props.wasabiWallet.unspentCoinsList.unspentcoins
+ : null,
+ settingModalProps: {
+ // isLoading: props.wasabiWallet.loading,
+ menuItems: [
+ {
+ label: `Auto Send: ${
+ dataLoaded?.autoSpendWallet
+ ? dataLoaded.autoSpendWallet +
+ '(' +
+ dataLoaded?.autoSpendWalletMinAnonset +
+ ')'
+ : 'Disabled'
+ }`,
+ onPress: () => {
+ toggleSettingsModal.apply(this);
+ navigate('WalletSelectMenu', {
+ onBackPress: async ({
+ isSwitchOn,
+ selectedWallet,
+ anonSetValue,
+ }) => {
+ // if user toggled autospend off when it was on, then dispatch
+ if (!isSwitchOn && dataLoaded.autoSpendWallet) {
+ await props.setWasabiAutoSpendWalletAndAnonset({
+ label: null,
+ });
+ Alert.alert(
+ `Auto Send Disabled`,
+ `Auto spend has been disabled, coins will no longer be sent to your ${
+ dataLoaded.autoSpendWallet
+ } wallet`,
+ );
+ _loadWalletFromProps();
+ }
+ navigation.pop();
+ setIsVisibleSettingsModal(false);
+ },
+ onConfirm: async ({
+ selectedWallet,
+ anonset: autoSpendAnonset,
+ }) => {
+ await props.setWasabiAutoSpendWalletAndAnonset({
+ label: selectedWallet.label,
+ anonset: autoSpendAnonset,
+ });
+ _loadWalletFromProps();
+ Alert.alert(
+ `Auto Send To Wallet: ${selectedWallet.label}`,
+ `Coins reaching An anonymity set of ${autoSpendAnonset} will be automagically sent to your wallet: ${
+ selectedWallet.label
+ } - ${selectedWallet.desc}.`,
+ );
+ navigation.pop();
+ setIsVisibleSettingsModal(false);
+ },
+ walletList: props.btcWallet.btcWalletList?.filter(
+ ({type: walletType}) =>
+ walletType !== C.STR_WASABI_WALLET_TYPE,
+ ),
+ autoSpendWallet: dataLoaded?.autoSpendWallet,
+ autoSpendWalletMinAnonset:
+ dataLoaded?.autoSpendWalletMinAnonset,
+ });
+ },
+ },
+ ],
+ },
+ filterMap: [
+ {
+ title: 'Recieved',
+ cb: (data, param) => data.filter(txn => txn.amount > 0),
+ },
+ {
+ title: 'Sent',
+ cb: (data, param) => data.filter(txn => txn.amount < 0),
+ },
+ ],
+ dataMap: [
+ {
+ key: C.STR_WASABI_WALLET_TYPE,
+ title: 'Transactions',
+ // TODO can we make this an FN call rather than data ? So we can call it later
+ data: props.wasabiWallet.txnsList,
+ },
+ {
+ key: C.STR_UNSPENT_COINS,
+ title: 'Unspent Coins',
+ data: props.wasabiWallet.unspentCoinsList?.unspentcoins,
+ },
+ ],
+ };
+ default:
+ return {
+ isLoading: props.btcWallet.loading,
+ isLoaded: props.btcWallet.loaded,
+ hasError: props.btcWallet.error,
+ filterMap: [
+ {
+ title: 'Recieved',
+ cb: (data, param) =>
+ data.filter(txn => {
+ return txn.amount > 0;
+ }),
+ },
+ {
+ title: 'Sent',
+ cb: (data, parma) =>
+ data.filter(txn => {
+ return txn.amount < 0;
+ }),
+ },
+ ],
+ dataMap: [
+ {
+ key: type,
+ title: 'Transactions',
+ data: props.btcWallet.txnData,
+ },
+ ],
+ };
+ }
+ }, [dataLoaded]);
+ // Aâccount data that is more static, IE values only need to be re-evaluated on walletInfo change
+ const {
+ accountIcon,
+ accountIconOnPress,
+ accountHeaderText,
+ accountTransactionHeaderText,
+ accountActionSendLabel = C.STR_SEND,
+ btcUnit,
+ } = useMemo(() => {
+ switch (type) {
+ case C.STR_LN_WALLET_TYPE:
+ return {
+ accountIcon: Images.icon_light,
+ accountIconOnPress: toggleSettingsModal.bind(this),
+ accountHeaderText: C.STR_Balance_Channels_n_Outputs,
+ accountTransactionHeaderText: C.STR_INVOICES_AND_PAYS,
+ btcUnit: C.STR_MSAT,
+ accountActionSendLabel: 'Pay Invoice',
+ };
+ case C.STR_WASABI_WALLET_TYPE:
+ return {
+ accountIcon: Images.icon_wasabi,
+ accountIconOnPress: toggleSettingsModal.bind(this),
+ accountHeaderText: C.STR_Wasabi_Header + anonset,
+ accountTransactionHeaderText: C.STR_ALL_TRANSACTIONS,
+ btcUnit: C.STR_SAT,
+ // only show chart when more than one unspentcoin
+ };
+ default:
+ return {
+ accountHeaderText: C.STR_Cur_Balance,
+ accountIcon: Images.icon_bitcoin,
+ accountIconOnPress: () => {},
+ accountTransactionHeaderText: C.STR_TRANSACTIONS,
+ btcUnit: C.STR_BTC,
+ };
}
+ }, [walletInfo, anonset]);
+ if (hasError) {
return (
-
-
-
+ _loadWalletFromProps(),
+ },
+ {
+ text: C.STR_GO_BACK,
+ onPress: () => navigate('AccountList'),
+ },
+ ]}
+ />
+ );
+ }
+ return (
+
+
+
+
+
+ navigate('AccountList')}>
+
+ {C.STR_My_Wallets}
+
+
+
+ {isVisibleSettingsModal && (
navigate('AccountList')}>
-
- {C.STR_My_Wallets}
+ style={styles.settingMenuContainer}
+ onTouchEnd={toggleSettingsModal}>
+
-
-
- {this.state.isVisibleSettingsModal && (
-
-
+ {!!chartData && (
+
-
+ )}
+
+
+ {/* TODO fix this hack to Calculate initial snap position to HistoryTabs - Load it when nochartdata or when chart and is loaded */}
+ {(!chartData || (!!chartData && chartLoaded)) && (
+
)}
- {}
- }
- loading={isLoading}
- loaded={isLoaded}
- type={type}
- label={label}
- balance={balance}
- btcUnit={btcUnit}
- headerText={
- type === C.STR_LN_WALLET_TYPE
- ? C.STR_Balance_Channels_n_Outputs
- : C.STR_Cur_Balance
- }
- />
-
-
+ {showAccountHistory && (
+
-
- );
- }
-}
+ )}
+
+ );
+};
const mapStateToProps = state => {
return {
btcWallet: state.btcWallet,
lnWallet: state.lnWallet,
+ wasabiWallet: state.wasabiWallet,
+ cyphernode: state.cyphernode,
};
};
const mapDispatchToProps = {
getWalletDetails,
getLnWalletDetails,
+ getUnspentCoins,
+ wasabiGetTxns,
+ getWasabiAutoSpendWallet,
+ getWasabiAutoSpendMinAnonset,
+ setWasabiAutoSpendWalletAndAnonset,
};
export default connect(
@@ -204,11 +497,21 @@ export default connect(
)(SifirAccountScreen);
const styles = StyleSheet.create({
- navBtn: {flex: 0.7},
+ navBtn: {
+ marginBottom: 10,
+ },
+ extraSpace: {
+ flexGrow: 1,
+ },
+ SVcontainer: {
+ backgroundColor: AppStyle.backgroundColor,
+ flexGrow: 1,
+ },
mainView: {
flex: 1,
- backgroundColor: AppStyle.backgroundColor,
+ backgroundColor: '#091110',
paddingTop: 10,
+ justifyContent: 'space-between',
},
backNavView: {
display: 'flex',
diff --git a/src/components/screens/wallet/SifirAccountsListScreen.js b/src/components/screens/wallet/SifirAccountsListScreen.js
index dfb2d7d..e94ee2d 100644
--- a/src/components/screens/wallet/SifirAccountsListScreen.js
+++ b/src/components/screens/wallet/SifirAccountsListScreen.js
@@ -11,6 +11,7 @@ import {connect} from 'react-redux';
import SifirWalletButton from '@elements/SifirWalletButton';
import {getBtcWalletList, getBlockChainInfo} from '@actions/btcwallet';
import {getLnNodesList} from '@actions/lnWallet';
+import {getConfigProps} from '@actions/cnClient';
import {Images, AppStyle, C} from '@common/index';
import {ErrorScreen} from '@screens/error';
import SifirSettingModal from '@elements/SifirSettingModal';
@@ -26,6 +27,8 @@ class SifirAccountsListScreen extends React.Component {
_init = () => {
this.props.getBtcWalletList();
this.props.getLnNodesList();
+ // TODO walletlists should be a config prop when settings are moved there
+ this.props.getConfigProps();
};
componentDidMount() {
@@ -211,6 +214,7 @@ const mapDispatchToProps = {
getBtcWalletList,
getLnNodesList,
getBlockChainInfo,
+ getConfigProps,
};
export default connect(
diff --git a/src/components/screens/wallet/SifirBtcReceiveTxnScreen.js b/src/components/screens/wallet/SifirBtcReceiveTxnScreen.js
index cc7af33..f8705fb 100644
--- a/src/components/screens/wallet/SifirBtcReceiveTxnScreen.js
+++ b/src/components/screens/wallet/SifirBtcReceiveTxnScreen.js
@@ -1,4 +1,4 @@
-import React, {Component} from 'react';
+import React, {useEffect, useRef, useState} from 'react';
import {
View,
Image,
@@ -7,6 +7,8 @@ import {
Text,
FlatList,
ActivityIndicator,
+ TextInput,
+ Clipboard,
} from 'react-native';
import {connect} from 'react-redux';
import Overlay from 'react-native-modal-overlay';
@@ -14,332 +16,457 @@ import SifirQRCode from '@elements/SifirQRCode';
import Share from 'react-native-share';
import {getWalletAddress} from '@actions/btcwallet';
-import {getNewAddress} from '@actions/lnWallet';
+import {getNewAddress as getNewLnAddress} from '@actions/lnWallet';
+import {getNewAddress as getNewWasabiAddress} from '@actions/wasabiWallet';
import {Images, AppStyle, C} from '@common/index';
import {log} from '@io/events/';
import {ErrorScreen} from '@screens/error';
+const SifirBtcReceiveTxnScreen = props => {
+ const {label, type, meta: cfg} = props.route.params.walletInfo;
+ const spendingAddressTypes = [
+ {title: C.STR_LEGACY, value: 'legacy'},
+ {title: C.STR_Segwit_Compatible, value: 'p2sh-segwit'},
+ {title: C.STR_Bech32, value: 'bech32'},
+ ];
+ // const [getBtnStatus, setBtnStatus] = useState(0);
+ const [enableLabelInput, setEnableLabelInput] = useState(
+ cfg?.enableAddressLabelInput || false,
+ );
+ const [enableAddressTypeSelection, setEnableAddressTypeSelection] = useState(
+ cfg?.enableAddressTypeSelection || false,
+ );
+ const [enableAddressWatchSelection, setAddressWatchSelection] = useState(
+ false,
+ );
+ const [showAddressTypeSelector, setShowAddressTypeSelector] = useState(
+ cfg?.showAddressTypeSelector || false,
+ );
+ const [showQRCode, setShowQRCode] = useState(true);
+ const [addAddressToWatch, setAddAddressToWatch] = useState(false);
+ const [showShareSelector, setShowShareSelector] = useState(false);
+ const [addrType, setAddrType] = useState(null);
+ const [labelInput, setLabelInput] = useState('');
+ const [labelInputDone, setLabelInputDone] = useState(false);
+ const [address, setAddress] = useState('');
+ const [loading, setLoading] = useState(false);
+ const [loaded, setLoaded] = useState(false);
+ const [error, setError] = useState(null);
+ const [qrCodeURI, setQrCodeURI] = useState(null);
+ const [refresh, setRefresh] = useState(0);
+ const [addressMessage, setAddressMessage] = useState(null);
+ const prevRefreshValue = useRef();
-class SifirBtcReceiveTxnScreen extends Component {
- constructor(props) {
- super(props);
- this.qrCode = '';
- }
-
- state = {
- btnStatus: 0,
- modalVisible: false,
- checkStatus: true,
- addrType: C.STR_SELECT_ADDRTYPE,
- showQRCode: false,
- showSelector: false,
- enableWatchSelection: false,
- };
-
- async _bootStrap() {
- const {label, type} = this.props.route.params.walletInfo;
- if (type === C.STR_WATCH_WALLET_TYPE) {
- await this.props.getWalletAddress({label, type});
- this.setState({showQRCode: true});
- } else if (type === C.STR_LN_WALLET_TYPE) {
- await this.props.getNewAddress();
- this.setState({showQRCode: true});
+ useEffect(() => {
+ loadWalletAddress();
+ }, []);
+ // }, [labelInputDone, addrType]);
+ // load new address
+ useEffect(() => {
+ let loadNew = false;
+ if (refresh > 0 && refresh > prevRefreshValue.current) {
+ loadNew = true;
}
- }
- componentDidMount() {
- this._bootStrap();
- }
+ loadWalletAddress({loadNew});
+ prevRefreshValue.current = refresh;
+ }, [refresh]);
- onClose = () => this.setState({modalVisible: false, showSelector: false});
+ const onClose = () => {
+ setShowAddressTypeSelector(false);
+ setShowShareSelector(false);
+ };
- onShare = (address, isQRCode) => {
- this.setState({showSelector: false});
- if (this.qrCode) {
+ const onShare = (sharedAddress, isQRCode) => {
+ setShowShareSelector(false);
+ if (qrCodeURI) {
let shareOptions;
if (isQRCode) {
shareOptions = {
- type: 'image/jpg',
+ type: 'image/png',
title: C.STR_ADDR_QR_SHARE,
- url: this.qrCode,
+ url: qrCodeURI,
};
} else {
shareOptions = {
title: C.STR_ADDR_SHARE,
- message: address,
+ message: sharedAddress,
};
}
Share.open(shareOptions).catch(err => log(err));
}
};
- getSpendWalletAddr = async addrType => {
- const {label, type} = this.props.route.params.walletInfo;
- await this.props.getWalletAddress({label, type, addrType});
- this.setState({showQRCode: true});
+ const handleBackBtn = () => {
+ props.navigation.goBack();
};
-
- handleBackBtn = () => {
- const {walletInfo} = this.props.route.params;
- const {type} = walletInfo;
- const {navigation} = this.props;
- // if (type === C.STR_WATCH_WALLET_TYPE) {
- // navigation.navigate('Account', {walletInfo});
- // } else {
- navigation.goBack();
- // }
+ const inputLabel = input => {
+ setLabelInput(input);
+ setLabelInputDone(false);
};
-
- render() {
- const {walletInfo} = this.props.route.params;
- const {label, type} = walletInfo;
- const {showQRCode, enableWatchSelection} = this.state;
- let loaded, loading, address, error;
- if (type === C.STR_LN_WALLET_TYPE) {
- ({loaded, loading, address, error} = this.props.lnWallet);
- } else {
- ({loaded, loading, address, error} = this.props.btcWallet);
+ const loadWalletAddress = async ({loadNew = false} = {}) => {
+ let hasAllReqs = true;
+ // Check if we're ready based on reqs
+ if (enableAddressTypeSelection) {
+ hasAllReqs =
+ hasAllReqs &&
+ addrType &&
+ addrType?.value?.length &&
+ addrType.value !== C.STR_SELECT_ADDRTYPE;
}
- if (error) {
- return (
- this._bootStrap(),
- },
- {
- text: C.GO_BACK,
- onPress: () => this.navigation.navigate('Account', {label, type}),
- },
- ]}
- />
- );
+ if (enableLabelInput) {
+ hasAllReqs = hasAllReqs && labelInput?.length && labelInputDone;
}
+ if (hasAllReqs !== true) {
+ return;
+ }
+ if (!!address?.length && !loadNew) {
+ return;
+ }
+ let walletAddress;
+ let addressError;
+ setLoading(true);
+ switch (type) {
+ case C.STR_LN_WALLET_TYPE:
+ walletAddress = props.getNewLnAddress();
+ addressError = props.lnWallet.error;
+ break;
+ case C.STR_WASABI_WALLET_TYPE:
+ walletAddress = props
+ .getNewWasabiAddress({
+ label: labelInput,
+ })
+ .then(({address}) => address);
+ addressError = props.wasabiWallet.error;
+ break;
+ default:
+ walletAddress = props.getWalletAddress({
+ label,
+ type,
+ addrType: addrType?.value,
+ });
+ addressError = props.btcWallet.error;
+ break;
+ }
+ const addressText = await walletAddress;
+ log('assa', addressText, addressError);
+ if (addressText?.length) {
+ setAddress(addressText);
+ setLoaded(true);
+ } else {
+ setError(addressError);
+ setLoaded(false);
+ }
+ setLoading(false);
+ };
+ if (error) {
return (
-
-
- this.handleBackBtn()}>
-
-
-
- {label} Wallet
-
-
-
-
-
-
-
- {type === C.STR_SPEND_WALLET_TYPE && (
-
- this.setState({modalVisible: true})}>
-
- {this.state.addrType}
-
-
-
- {
- this.setState({modalVisible: !this.state.modalVisible});
- }}>
-
-
-
-
-
+ setError(null),
+ },
+ {
+ text: C.STR_GO_BACK,
+ onPress: () => props.navigation.navigate('Account', {label, type}),
+ },
+ ]}
+ />
+ );
+ }
+ return (
+
+
+ handleBackBtn()}>
+
+
+
+ {label} Wallet
- )}
-
- {address !== null && loaded === true && showQRCode === true && (
- <>
-
- {
- this.qrCode = base64;
- }}
- value={address}
- size={C.SCREEN_HEIGHT * 0.25}
- bgColor="#FFFFFF"
- fgColor="#000000"
+
+
+
+
+
+ {!loading && enableLabelInput === true && (
+ <>
+ {!labelInputDone && (
+
+ inputLabel(input)}
/>
- {address}
- >
- )}
-
- {loading === true && (
-
-
-
- )}
-
- {address != null && loaded === true && (
- <>
- {enableWatchSelection === true && (
-
- {C.STR_WATCH_ADDR}
-
- this.setState({checkStatus: !this.state.checkStatus})
- }>
-
-
- {this.state.checkStatus === true && (
-
- )}
-
-
-
- )}
+ )}
+ {!labelInputDone && (
{
- this.setState({showSelector: true});
+ if (labelInputDone) {
+ setAddress(null);
+ setLabelInput('');
+ setLabelInputDone(false);
+ } else {
+ setLabelInputDone(true);
+ setRefresh(refresh + 1);
+ }
}}
- style={styles.shareBtnOpa}>
+ style={styles.labelButtonCTA}>
- {C.STR_SHARE}
-
+
+ {labelInputDone ? 'Generate another' : 'Save and Generate'}
+
- >
- )}
+ )}
+ >
+ )}
+ {enableAddressTypeSelection === true && (
+
+ setShowAddressTypeSelector(true)}>
+
+ {addrType?.title || C.STR_SELECT_ADDRTYPE}
+
+
+
+ {
+ setShowAddressTypeSelector(!showAddressTypeSelector);
+ }}>
+
+
+
+
+
+
+ )}
+ {loading === true && (
+
+
+
+ )}
- {/* Select share type */}
-
- {() => (
+ {!loading && !!address && showQRCode && (
+ <>
+
+
+
+ {
+ await Clipboard.setString(address);
+ setAddressMessage('Address Copied to Clipboard!');
+ setTimeout(() => setAddressMessage(null), 1500);
+ }}
+ onLongPress={() => setRefresh(refresh + 1)}>
+ {address}
+
+ {addressMessage?.length && (
-
-
- {
- this.onShare(address, true);
- }}>
-
- {C.STR_ADDR_QR_SHARE}
-
-
- {
- this.onShare(address, false);
- }}>
-
- {C.STR_ADDR_SHARE}
-
-
-
-
-
-
+ {addressMessage}
+
+ )}
+ {labelInputDone && (
+ <>
+
+ {`Label: ${labelInput}`}
+ {
+ setAddress(null);
+ setLabelInput('');
+ setLabelInputDone(false);
+ }}>
+ >
+ )}
+ >
+ )}
+ {!loading && !!address && (
+ <>
+ {enableAddressWatchSelection === true && (
+
+ {C.STR_WATCH_ADDR}
+ setAddAddressToWatch(!addAddressToWatch)}>
+
+
+ {addAddressToWatch === true && (
+
+ )}
+
+
)}
-
-
- {/* Select the Address type in the Spending Wallet */}
-
- {hideModal => (
- item.title}
- renderItem={({item}) => (
+ {
+ setShowShareSelector(true);
+ }}
+ style={styles.shareBtnOpa}>
+
+ {C.STR_SHARE}
+
+
+
+ >
+ )}
+ {/* Select share type */}
+
+ {() => (
+
+
+
{
- this.setState({addrType: item.title});
- this.getSpendWalletAddr(item.addrType);
- hideModal();
+ onShare(address, true);
}}>
- {item.title}
+
+ {C.STR_ADDR_QR_SHARE}
+
- )}
- />
- )}
-
-
- );
- }
-}
+ {
+ onShare(address, false);
+ }}>
+
+ {C.STR_ADDR_SHARE}
+
+
+
+
+
+
+
+
+
+
+ )}
+
+
+ {/* Select the Address type in the Spending Wallet */}
+
+ {hideModal => (
+ item.value}
+ renderItem={({item}) => (
+ {
+ setAddrType(item);
+ setRefresh(refresh + 1);
+ hideModal();
+ }}>
+ {item.title}
+
+ )}
+ />
+ )}
+
+
+ );
+};
const mapStateToProps = state => {
return {
btcWallet: state.btcWallet,
lnWallet: state.lnWallet,
+ wasabiWallet: state.wasabiWallet,
};
};
-const mapDispatchToProps = {getWalletAddress, getNewAddress};
+const mapDispatchToProps = {
+ getWalletAddress,
+ getNewLnAddress,
+ getNewWasabiAddress,
+};
export default connect(
mapStateToProps,
@@ -397,6 +524,25 @@ const styles = StyleSheet.create({
marginTop: 4 * C.vh,
justifyContent: 'space-between',
},
+ inputView: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ marginTop: 10,
+ marginBottom: 10,
+ width: C.SCREEN_WIDTH * 0.8,
+ height: 70,
+ borderRadius: 10,
+ borderColor: AppStyle.mainColor,
+ borderWidth: 2,
+ },
+ inputTxtStyle: {
+ flex: 1,
+ marginLeft: 10,
+ color: 'white',
+ textAlign: 'left',
+ alignItems: 'flex-start',
+ justifyContent: 'flex-start',
+ },
selectBtnView: {
flexDirection: 'row',
marginRight: 15,
@@ -474,6 +620,10 @@ const styles = StyleSheet.create({
width: 27 * C.vh,
backgroundColor: 'white',
},
+ labelButtonCTA: {
+ marginTop: C.vh,
+ alignItems: 'center',
+ },
shareBtnOpa: {
marginTop: 2 * C.vh,
alignItems: 'center',
@@ -496,8 +646,51 @@ const styles = StyleSheet.create({
marginTop: 40 * C.vh,
backgroundColor: 'transparent',
},
+ addMsgTxt: {
+ fontFamily: AppStyle.mainFont,
+ fontSize: 12,
+ marginTop: 5,
+ color: AppStyle.grayColor,
+ },
addrTxt: {
+ fontFamily: AppStyle.mainFontBold,
fontSize: 16,
+ marginTop: 10,
+ color: AppStyle.mainColor,
+ },
+ /* Label input */
+ inputWrapperDone: {
+ flexDirection: 'row',
+ borderColor: AppStyle.mainColor,
+ borderRadius: 0,
+ borderWidth: 0,
+ padding: 10,
+ alignItems: 'center',
+ justifyContent: 'center',
+ overflow: 'visible',
+ },
+ inputWrapper: {
+ flexDirection: 'row',
+ borderColor: AppStyle.mainColor,
+ borderRadius: 10,
+ borderWidth: 1,
+ padding: 10,
+ alignItems: 'center',
+ justifyContent: 'center',
+ overflow: 'visible',
+ },
+ input: {
+ width: '70%',
color: 'white',
+ // height: Platform.OS === 'android' ? u30 : 25,
+ fontSize: 16,
+ },
+ space_around: {
+ flexDirection: 'row',
+ flex: 1,
+ justifyContent: 'space-around',
+ marginLeft: 10,
+ marginTop: 10,
},
+ burger_icon: {width: 25, height: 20},
});
diff --git a/src/components/screens/wallet/SifirBtcSendTxnConfirmScreen.js b/src/components/screens/wallet/SifirBtcSendTxnConfirmScreen.js
index 2562426..c0dd8be 100644
--- a/src/components/screens/wallet/SifirBtcSendTxnConfirmScreen.js
+++ b/src/components/screens/wallet/SifirBtcSendTxnConfirmScreen.js
@@ -12,6 +12,7 @@ import {
import {Images, AppStyle, C} from '@common/index';
import {sendBitcoin} from '@actions/btcwallet';
import {withdrawFunds} from '@actions/lnWallet';
+import {spend as wasabiSpend} from '@actions/wasabiWallet';
import Overlay from 'react-native-modal-overlay';
import SifirSettingModal from '@elements/SifirSettingModal';
import {ErrorScreen} from '@screens/error';
@@ -34,8 +35,8 @@ class SifirBtcSendTxnConfirmScreen extends Component {
walletInfo: {type},
} = this.props.route.params;
const {address, amount} = txnInfo;
- const withdrawDetails = await this.props.withdrawFunds(address, amount);
- if (withdrawDetails?.tx) {
+ const sendResult = await this.props.withdrawFunds(address, amount);
+ if (sendResult?.tx) {
this.props.navigation.navigate('BtcTxnConfirmed', {
txnInfo: {
...txnInfo,
@@ -43,6 +44,7 @@ class SifirBtcSendTxnConfirmScreen extends Component {
amount,
address,
},
+ sendResult,
walletInfo,
displayUnit: C.STR_MSAT,
type,
@@ -53,21 +55,47 @@ class SifirBtcSendTxnConfirmScreen extends Component {
sendBitcoin = async () => {
const {txnInfo, walletInfo} = this.props.route.params;
const {address, amount} = txnInfo;
- await this.props.sendBitcoin({address, amount});
- this.props.navigation.navigate('BtcTxnConfirmed', {
- txnInfo: {...txnInfo, isSendTxn: true},
- walletInfo,
+ const btcSendResult = await this.props.sendBitcoin({address, amount});
+ if (btcSendResult?.status === 'accepted') {
+ this.props.navigation.navigate('BtcTxnConfirmed', {
+ txnInfo: {...txnInfo, isSendTxn: true},
+ sendResult: btcSendResult,
+ walletInfo,
+ });
+ }
+ };
+ sendWasabi = async () => {
+ const {txnInfo, walletInfo, anonset} = this.props.route.params;
+ const {address, amount} = txnInfo;
+ const sendResult = await this.props.wasabiSpend({
+ address,
+ amount,
+ minanonset: anonset,
});
+ if (sendResult?.result?.txid) {
+ this.props.navigation.navigate('BtcTxnConfirmed', {
+ txnInfo: {...txnInfo, isSendTxn: true},
+ sendResult,
+ walletInfo,
+ });
+ }
};
handleSendBtn = () => {
const {
walletInfo: {type},
} = this.props.route.params;
- if (type === C.STR_LN_WITHDRAW) {
- this.withdrawFunds();
- } else {
- this.sendBitcoin();
+ switch (type) {
+ case C.STR_LN_WITHDRAW:
+ this.withdrawFunds();
+ break;
+ case C.STR_WASABI_WALLET_TYPE:
+ this.sendWasabi();
+ break;
+
+ default:
+ this.sendBitcoin();
+ break;
}
};
@@ -79,15 +107,25 @@ class SifirBtcSendTxnConfirmScreen extends Component {
const amountFontSize =
(C.vw * 80) / (amount.length < 3 ? 5 : amount.length);
const recTxtFontSize = (C.vw * 120) / address.length;
- const {loading: btcLoading, error: btcError} = this.props.lnWallet;
- const {loading: lnLoading, error: lnError} = this.props.btcWallet;
+ let isLoading, hasError;
+ switch (type) {
+ case C.STR_LN_WITHDRAW:
+ ({loading: isLoading, error: hasError} = this.props.lnWallet);
+ break;
+ case C.STR_WASABI_WALLET_TYPE:
+ ({loading: isLoading, error: hasError} = this.props.wasabiWallet);
+ break;
+ default:
+ ({loading: isLoading, error: hasError} = this.props.btcWallet);
+ break;
+ }
- if (btcError || lnError) {
+ if (hasError) {
return (
[4 Hour Wait]
)}
- {(btcLoading || lnLoading) && }
+ {isLoading && }
@@ -167,10 +206,11 @@ const mapStateToProps = state => {
return {
btcWallet: state.btcWallet,
lnWallet: state.lnWallet,
+ wasabiWallet: state.wasabiWallet,
};
};
-const mapDispatchToProps = {sendBitcoin, withdrawFunds};
+const mapDispatchToProps = {sendBitcoin, withdrawFunds, wasabiSpend};
export default connect(
mapStateToProps,
diff --git a/src/components/screens/wallet/SifirBtcSendTxnInputAmountScreen.js b/src/components/screens/wallet/SifirBtcSendTxnInputAmountScreen.js
index a6982ac..e6c97f1 100644
--- a/src/components/screens/wallet/SifirBtcSendTxnInputAmountScreen.js
+++ b/src/components/screens/wallet/SifirBtcSendTxnInputAmountScreen.js
@@ -57,9 +57,20 @@ export default class SifirBtcSendTxnInputAmountScreen extends Component {
const {validAmount} = this.state;
const {
txnInfo: {address},
- walletInfo: {balance, type},
+ walletInfo: {balance, type, anonset},
} = this.props.route.params;
- const unit = type === C.STR_LN_WITHDRAW ? C.STR_SAT : C.STR_BTC;
+ let unit;
+ switch (type) {
+ case C.STR_LN_WITHDRAW:
+ unit = C.STR_SAT;
+ break;
+ case C.STR_WASABI_WALLET_TYPE:
+ unit = C.STR_SAT;
+ break;
+ default:
+ unit = C.STR_BTC;
+ break;
+ }
return (
@@ -69,7 +80,9 @@ export default class SifirBtcSendTxnInputAmountScreen extends Component {
{address}
{C.STR_PAYMENT_AMOUNT}
- {`${C.STR_Wallet_balance}: `}
+ {anonset
+ ? `${C.STR_Wasabi_Header} ${anonset} : `
+ : `${C.STR_Wallet_balance}: `}
diff --git a/src/components/screens/wallet/SifirBtcTxnConfirmedScreen.js b/src/components/screens/wallet/SifirBtcTxnConfirmedScreen.js
index 498cdc3..7377f6e 100644
--- a/src/components/screens/wallet/SifirBtcTxnConfirmedScreen.js
+++ b/src/components/screens/wallet/SifirBtcTxnConfirmedScreen.js
@@ -25,21 +25,19 @@ class SifirBtcTxnConfirmedScreen extends Component {
render() {
const {type} = this.props.route.params;
const addrTxtFontSize = (C.vw * 250) / address?.length || 25;
-
const {amount, address, isSendTxn, unit} = this.props.route.params.txnInfo;
- const payTitleText =
- type === C.STR_LN_WALLET_TYPE
- ? C.STR_PAID
- : isSendTxn
- ? C.STR_SENT
- : C.STR_RECEIVED;
- const payDataTitleText = `${C.STR_PAYMENT} ${
- type === C.STR_LN_WALLET_TYPE
- ? C.STR_PRE_IMAGE
- : isSendTxn
- ? C.STR_RECEIPIENT
- : C.STR_SENDER
- }`;
+ let payTitleText, payDataTitleText;
+ switch (type) {
+ case C.STR_LN_WALLET_TYPE:
+ payTitleText = C.STR_PAID;
+ payDataTitleText = `${C.STR_PAYMENT} ${C.STR_PRE_IMAGE}`;
+ break;
+ default:
+ payTitleText = isSendTxn ? C.STR_SENT : C.STR_RECEIVED;
+ payDataTitleText = `${C.STR_PAYMENT} ${
+ isSendTxn ? C.STR_RECEIPIENT : C.STR_SENDER
+ }`;
+ }
return (
diff --git a/src/components/screens/wallet/SifirGetAddrScreen.js b/src/components/screens/wallet/SifirGetAddrScreen.js
index 2cbea13..1a244a3 100644
--- a/src/components/screens/wallet/SifirGetAddrScreen.js
+++ b/src/components/screens/wallet/SifirGetAddrScreen.js
@@ -38,8 +38,11 @@ class SifirGetAddrScreen extends Component {
scannedQRdata: data,
showModal: false,
},
+ // FIXME this nonsense can be replaced by useEffect on scannedQrData
+ // Also removes need for handle continue button repeat of code, just sett the qrdata
+ //
() => {
- if (type === C.STR_LN_WITHDRAW) {
+ if (type !== C.STR_LN_WALLET_TYPE) {
this.handleAddressScanned();
} else {
this.handleBoltScanned();
@@ -113,7 +116,7 @@ class SifirGetAddrScreen extends Component {
const {showModal, scannedQRdata} = this.state;
const {loading, error} = this.props.lnWallet;
const {
- walletInfo: {type, label},
+ walletInfo: {type, label, backIcon},
} = this.props.route.params;
const placeHolder =
type === C.STR_LN_WALLET_TYPE ? C.STR_Enter_bolt : C.STR_Enter_addr;
@@ -139,14 +142,7 @@ class SifirGetAddrScreen extends Component {
style={styles.backNavView}
onPress={() => this.handleBackButton()}>
-
+
{label}
diff --git a/src/components/screens/wallet/SifirWasabiAutoSpendScreen.js b/src/components/screens/wallet/SifirWasabiAutoSpendScreen.js
new file mode 100644
index 0000000..fd9d9d6
--- /dev/null
+++ b/src/components/screens/wallet/SifirWasabiAutoSpendScreen.js
@@ -0,0 +1,357 @@
+/* eslint-disable react-native/no-inline-styles */
+import React, {useCallback, useMemo, useState, useEffect} from 'react';
+import {
+ View,
+ Text,
+ StyleSheet,
+ TouchableOpacity,
+ StatusBar,
+ Image,
+ Animated,
+ ActivityIndicator,
+} from 'react-native';
+import SifirAutoSpendHeader from '@elements/SifirHeaders/SifirAutoSpendHeader';
+import SifirAnonimitySlider from '@elements/SifirAnonimitySlider';
+import {AppStyle, C, Images} from '@common';
+import SifirCard from '@elements/SifirCard';
+import SifirAnimatedOverlay from '@elements/SifirAnimatedOverlay';
+import {ScrollView} from 'react-native-gesture-handler';
+import Androw from 'react-native-androw';
+import {scaleLinear} from 'd3-scale';
+import {log, error} from '@io/events';
+import * as path from 'svg-path-properties';
+import * as shape from 'd3-shape';
+import SifirAutoSpendWalletCard from '@elements/SifirAutoSpendWalletCard';
+import {useSelector} from 'react-redux';
+
+const d3 = {
+ shape,
+};
+
+const slider = React.createRef();
+const label = React.createRef();
+const SV = React.createRef();
+const x = new Animated.Value(0);
+const width = C.SCREEN_WIDTH - 20;
+const cursor = React.createRef();
+
+const SifirWasabiAutoSpendScreen = props => {
+ const [isSwitchOn, setSwitchOn] = useState(null);
+ const [headerHeight, setHeaderHeight] = useState(0);
+ const [selectedWallet, setSelectedWallet] = useState(null);
+ const [listItemPositions, setListItemPositions] = useState({});
+ const [listContainerPosition, setListContainerPosition] = useState(0);
+ const [topTextPosition, setTopTextPosition] = useState(0);
+ const [SVoffset, setSVoffset] = useState(0);
+ const {minX = 2, maxX = 120} = props;
+ // FIXME this is an antipattern, isLoading should be purely ppassed here but because of memo in AccounScreen we use this hack. Fix this on next iteration.
+ const defaultLoading = useSelector(({cyphernode}) => cyphernode.loading);
+
+ const {
+ onBackPress,
+ onConfirm,
+ walletList,
+ autoSpendWalletMinAnonset,
+ autoSpendWallet,
+ isLoading = defaultLoading,
+ } = props.route.params;
+ useEffect(() => {
+ StatusBar.setBackgroundColor(AppStyle.backgroundColor);
+ const autoSpendWalletObj = walletList.find(
+ ({label: l}) => l === autoSpendWallet,
+ );
+ if (!autoSpendWalletObj) {
+ error('Selected auto spend wallet is not part of walletList ignoring');
+ return;
+ }
+ setSelectedWallet({
+ ...autoSpendWalletObj,
+ annonset: autoSpendWalletMinAnonset,
+ });
+ setSwitchOn(true);
+ }, []);
+
+ useEffect(() => {
+ if (selectedWallet?.label) {
+ _init();
+ }
+ }, [selectedWallet]);
+
+ const handleSwitch = value => {
+ if (!value) {
+ setSelectedWallet(null);
+ }
+ setSwitchOn(value);
+ };
+
+ const onLayoutListItem = (event, itemLabel) => {
+ const {width: itemWidth, height, x: itemX, y} = event.nativeEvent.layout;
+ // atomic setState
+ setListItemPositions(prevState => ({
+ ...prevState,
+ [itemLabel]: {width: itemWidth, height, x: itemX, y},
+ }));
+ };
+
+ const {scaleX, properties, lineLength} = useMemo(() => {
+ const scaleX = scaleLinear()
+ .domain([minX, maxX])
+ .range([20, width - 20]);
+ const line = d3.shape
+ .line()
+ .x(anonset => scaleX(Number(anonset)))
+ .y(() => 0)
+ .curve(d3.shape.curveStepBefore)([minX, maxX]);
+ const p = path.svgPathProperties(line);
+ return {
+ scaleX,
+ properties: p,
+ lineLength: p.getTotalLength(),
+ };
+ }, [minX, maxX]);
+
+ const _init = () => {
+ try {
+ x.addListener(({value}) => moveCursor(value));
+ let {x: X} = properties.getPointAtLength(lineLength);
+ let left = X - 10;
+ cursor?.current?.setNativeProps({
+ left,
+ });
+ slider?.current.setNativeProps({
+ left: left - 10,
+ });
+ // TODO intial cursor position to match passed min anon
+ moveCursor(lineLength / 2);
+ } catch (err) {
+ error(err);
+ }
+ };
+ let anonSetValue;
+
+ const moveCursor = value => {
+ let {x} = properties.getPointAtLength(lineLength - value);
+ let left = x - +10;
+ cursor?.current?.setNativeProps({
+ left,
+ });
+ slider?.current.setNativeProps({
+ left: left - 10,
+ });
+ anonSetValue = Math.floor(scaleX.invert(x));
+ const text = `${anonSetValue}`;
+ label?.current?.setNativeProps({
+ text,
+ left: left + 3.5,
+ });
+ // setAnonset(anonSetValue);
+ };
+
+ const WalletList = useMemo(
+ () =>
+ walletList.map(item => {
+ return (
+
+ );
+ }),
+ [walletList, selectedWallet],
+ );
+
+ const WalletAnonSlider = useMemo(() => {
+ return (
+
+
+
+
+
+ {isLoading && (
+
+ )}
+ {!isLoading && (
+
+ onConfirm({selectedWallet, anonset: anonSetValue})
+ }>
+ {C.STR_CONFIRM}
+
+ )}
+
+
+ );
+ }, [minX, maxX, selectedWallet, label, isLoading]);
+
+ const DarkOverLay = useMemo(
+ () => (
+ setSelectedWallet({}) : undefined
+ }
+ effectDeps={[isSwitchOn, selectedWallet]}
+ />
+ ),
+ [headerHeight, selectedWallet, isSwitchOn],
+ );
+ return (
+
+ setHeaderHeight(event.nativeEvent.layout.height)}>
+ {
+ onBackPress({isSwitchOn, selectedWallet, anonSetValue});
+ }}
+ headerText={'Auto Send'}
+ isSwitchOn={isSwitchOn}
+ setSwitchOn={handleSwitch}
+ showOverlay={!isSwitchOn || selectedWallet?.label}
+ />
+
+ setTopTextPosition(event.nativeEvent.layout.y)}>
+ {C.STR_Select_Account}
+
+
+ setSVoffset(event.nativeEvent.contentOffset.y)}
+ onLayout={event =>
+ setListContainerPosition(event.nativeEvent.layout.y)
+ }>
+ {WalletList}
+
+ {(!isSwitchOn || selectedWallet?.label) && DarkOverLay}
+ {/* TODO this should reus SifirAutoSpendCard */}
+ {selectedWallet?.label && listItemPositions[selectedWallet.label] && (
+
+
+ {`${selectedWallet?.label} ${
+ selectedWallet.desc
+ }`}
+
+ {selectedWallet?.annonset}
+ {C.STR_Min_Anonset}
+
+
+ )}
+ {selectedWallet?.label && (
+
+ {`${C.STR_Auto_mix_account_select} ${selectedWallet.label}`}
+
+ )}
+ {selectedWallet?.label && WalletAnonSlider}
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {flex: 1, backgroundColor: AppStyle.backgroundColor},
+ description: {color: 'white', textAlign: 'center', marginTop: 20},
+ seperator: {
+ backgroundColor: 'lightgray',
+ height: 2,
+ opacity: 0.1,
+ marginHorizontal: 20,
+ marginVertical: 30,
+ },
+ cardContainer: {
+ marginStart: 20,
+ marginEnd: 20,
+ marginBottom: 24,
+ backgroundColor: '#19282f',
+ borderWidth: 2,
+ borderColor: '#19282f',
+ borderRadius: 20,
+ padding: 15,
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+ leftIcon: {
+ width: 40,
+ height: 40,
+ resizeMode: 'contain',
+ },
+ listHeading: {
+ color: 'white',
+ flex: 1,
+ paddingLeft: 20,
+ },
+ anonset: {
+ color: 'white',
+ fontSize: 18,
+ },
+ anonsetLabel: {
+ color: 'gray',
+ fontSize: 12,
+ },
+ rightContainer: {
+ textAlign: 'right',
+ alignItems: 'flex-end',
+ },
+ stickyContainer: {
+ backgroundColor: '#091110',
+ borderTopStartRadius: 30,
+ borderTopEndRadius: 30,
+ },
+ confirmBtn: {
+ backgroundColor: AppStyle.mainColor,
+ padding: 20,
+ alignItems: 'center',
+ margin: 20,
+ borderRadius: 25,
+ },
+ confirmLabel: {
+ fontWeight: 'bold',
+ fontSize: 16,
+ },
+ shadow: {
+ shadowColor: '#00EDE7',
+ shadowOffset: {width: 0, height: -10},
+ shadowOpacity: 0.4,
+ shadowRadius: 5,
+ backgroundColor: '#091110',
+ position: 'absolute',
+ bottom: 0,
+ left: 0,
+ right: 0,
+
+ overflow: 'hidden',
+ },
+});
+export default SifirWasabiAutoSpendScreen;
diff --git a/src/components/screens/wallet/index.js b/src/components/screens/wallet/index.js
index 7cfd9b4..7796b61 100644
--- a/src/components/screens/wallet/index.js
+++ b/src/components/screens/wallet/index.js
@@ -6,6 +6,7 @@ import SifirAccountScreen from './SifirAccountScreen';
import SifirBtcReceiveTxnScreen from './SifirBtcReceiveTxnScreen';
import SifirBtcTxnConfirmedScreen from './SifirBtcTxnConfirmedScreen';
import SifirAddWalletScreen from './SifirAddWalletScreen';
+import SifirWasabiAutoSpendScreen from './SifirWasabiAutoSpendScreen';
export {
SifirGetAddrScreen,
SifirBtcSendTxnInputAmountScreen,
@@ -15,4 +16,5 @@ export {
SifirBtcReceiveTxnScreen,
SifirBtcTxnConfirmedScreen,
SifirAddWalletScreen,
+ SifirWasabiAutoSpendScreen,
};
diff --git a/src/components/structures/SifirAccountHistoryTabs.js b/src/components/structures/SifirAccountHistoryTabs.js
new file mode 100644
index 0000000..a9c2df8
--- /dev/null
+++ b/src/components/structures/SifirAccountHistoryTabs.js
@@ -0,0 +1,177 @@
+/* eslint-disable react-hooks/exhaustive-deps */
+import React, {useMemo, useState} from 'react';
+import {View, Image, StyleSheet, Text, ActivityIndicator} from 'react-native';
+import {Images, AppStyle, C} from '@common/index';
+import SifirTransactionsTab from '@elements/SifirTransactionsTab';
+import BottomSheet from 'reanimated-bottom-sheet';
+import {TabView, SceneMap, TabBar} from 'react-native-tab-view';
+import {ScrollView} from 'react-native-gesture-handler';
+import SifirInvEntry from '@elements/TxnListItems/SifirInvEntry';
+import SifirTxnEntry from '@elements/TxnListItems/SifirTxnEntry';
+import SifirUnspentCoinEntry from '@elements/TxnListItems/SifirUnspentCoinEntry';
+import SifirWasabiTxnEntry from '@elements/TxnListItems/SifirWasabiTxnEntry';
+
+export const sheetHeight = C.SCREEN_HEIGHT - 150;
+const initialSnap = C.SCREEN_HEIGHT * 0.35;
+const initialLayout = {width: C.SCREEN_WIDTH};
+
+const renderTabBar = props => (
+ (
+
+ {label.route.title}
+
+ )}
+ />
+);
+
+const SifirAccountHistoryTabs = ({
+ loading,
+ loaded,
+ dataMap,
+ filterMap,
+ btcUnit,
+ type,
+ headerText,
+ bottomExtraSpace,
+}) => {
+ const [index, setIndex] = useState(0);
+ const onTabIndexChange = tabIndex => setIndex(tabIndex);
+ const TransctionTabFactory = ({title, key, data}) => {
+ let renderItem;
+ switch (key) {
+ case C.STR_WASABI_WALLET_TYPE:
+ renderItem = ({item: txn}) => (
+
+ );
+ break;
+ case C.STR_UNSPENT_COINS:
+ // TODO rename to UTXO ?
+ renderItem = ({item: txn}) => (
+
+ );
+ break;
+ case C.STR_LN_WALLET_TYPE:
+ renderItem = ({item: txn}) => (
+
+ );
+ break;
+ case C.STR_SPEND_WALLET_TYPE:
+ renderItem = ({item: txn}) => (
+
+ );
+ break;
+ case C.STR_WATCH_WALLET_TYPE:
+ renderItem = ({item: txn}) => (
+
+ );
+ break;
+ }
+ return param => (
+
+
+
+ );
+ };
+ const renderScene = useMemo(() => {
+ return SceneMap(
+ dataMap.reduce((sceneDict, {key, title, data}) => {
+ sceneDict[key] = TransctionTabFactory({key, title, data});
+ return sceneDict;
+ }, {}),
+ );
+ }, [dataMap]);
+ return (
+ 100 ? bottomExtraSpace - 20 : initialSnap,
+ ]}
+ initialSnap={1}
+ enabledInnerScrolling={true}
+ enabledGestureInteraction={true}
+ renderContent={() => (
+
+
+ {!loading && (
+ // TODO change upArrow to down arrow when slider is opened.
+
+ )}
+ {loading && (
+
+ )}
+
+ ({key, title})),
+ }}
+ renderScene={renderScene}
+ onIndexChange={onTabIndexChange}
+ initialLayout={initialLayout}
+ renderTabBar={renderTabBar}
+ lazy={false}
+ sceneContainerStyle={styles.sceneContainer}
+ />
+
+ )}
+ />
+ );
+};
+
+const styles = StyleSheet.create({
+ settingIcon: {width: 20, height: 20, marginLeft: 20, marginTop: 7},
+ spinner: {alignSelf: 'center'},
+ headerContainer: {
+ backgroundColor: '#122C3A',
+ borderTopLeftRadius: 30,
+ borderTopRightRadius: 30,
+ justifyContent: 'center',
+ alignItems: 'center',
+ paddingTop: 10,
+ },
+ tabTitleLabel: {fontWeight: 'bold'},
+ sceneContainer: {
+ backgroundColor: AppStyle.tertiaryColor,
+ },
+ tabIndicatorContainerStyle: {
+ borderBottomColor: AppStyle.grayColor,
+ borderBottomWidth: 3,
+ opacity: 0.5,
+ },
+ tabIndicator: {
+ backgroundColor: AppStyle.mainColor,
+ bottom: -2,
+ },
+ tabBar: {
+ backgroundColor: AppStyle.tertiaryColor,
+ },
+});
+
+export default SifirAccountHistoryTabs;
diff --git a/src/containers/WalletStack.js b/src/containers/WalletStack.js
index 47f9034..435697a 100644
--- a/src/containers/WalletStack.js
+++ b/src/containers/WalletStack.js
@@ -11,6 +11,7 @@ import {
SifirBtcReceiveTxnScreen,
SifirBtcTxnConfirmedScreen,
SifirAddWalletScreen,
+ SifirWasabiAutoSpendScreen,
} from '@screens/wallet/index';
import {LNChannelRoute, LNPayInvoiceRoute} from './LnStack';
@@ -33,7 +34,6 @@ export default function WalletTab() {
component={SifirAccountsListScreen}
/>
-
-
+
);
}
diff --git a/src/helpers/debounce.js b/src/helpers/debounce.js
new file mode 100644
index 0000000..df03115
--- /dev/null
+++ b/src/helpers/debounce.js
@@ -0,0 +1,17 @@
+function debounce(func, wait, immediate) {
+ let timeout;
+ return function() {
+ const args = arguments;
+ let callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(function() {
+ timeout = null;
+ if (!immediate) {
+ func.apply(this, args);
+ }
+ }, wait);
+
+ if (callNow) func.apply(this, args);
+ };
+}
+export default debounce;
diff --git a/src/helpers/makeUnspentCoinsChartData.js b/src/helpers/makeUnspentCoinsChartData.js
new file mode 100644
index 0000000..3315f18
--- /dev/null
+++ b/src/helpers/makeUnspentCoinsChartData.js
@@ -0,0 +1,28 @@
+export default chartData => {
+ const data = chartData.reduce((g, t) => {
+ g[Math.floor(t.anonymitySet)] =
+ (g[Math.floor(t.anonymitySet)] || 0) + t.amount;
+ return g;
+ }, {});
+ const sortedAnonsetTotalPairs = Object.entries(data).sort(
+ ([anonset1], [anonset2]) => anonset1 - anonset2,
+ );
+ if (sortedAnonsetTotalPairs.length < 2) {
+ sortedAnonsetTotalPairs.unshift(sortedAnonsetTotalPairs[0]);
+ }
+ const chartStats = sortedAnonsetTotalPairs.reduce(
+ (stats, [anonset, total], i) => {
+ const cumTotal = sortedAnonsetTotalPairs
+ .slice(i)
+ .reduce((totalToIndex, [, t1]) => totalToIndex + t1, 0);
+ stats.series.push([Number(anonset), cumTotal]);
+ stats.maxY = Math.max(cumTotal, stats.maxY);
+ stats.maxX = Math.max(anonset, stats.maxX);
+ stats.minY = Math.min(cumTotal, stats.minY);
+ stats.minX = Math.min(anonset, stats.minX);
+ return stats;
+ },
+ {series: [], minX: 99999, maxX: null, minY: null, maxY: null},
+ );
+ return chartStats;
+};
diff --git a/src/helpers/validations.js b/src/helpers/validations.js
index f34a931..3870c65 100644
--- a/src/helpers/validations.js
+++ b/src/helpers/validations.js
@@ -15,8 +15,8 @@ const validatedTokenHash = tokenHash => {
}
};
+const nodeRegx = new RegExp(/^([A-Za-z0-9]{66})/);
const isValidLnNodeId = node => {
- const nodeRegx = new RegExp(/^([A-Za-z0-9]{66})/);
return nodeRegx.test(node);
};
diff --git a/src/store/actions/btcwallet.js b/src/store/actions/btcwallet.js
index 33da28a..07fd069 100644
--- a/src/store/actions/btcwallet.js
+++ b/src/store/actions/btcwallet.js
@@ -48,13 +48,13 @@ const getBtcWalletList = () => async dispatch => {
dispatch({type: types.BTC_WALLET_LIST_DATA_SHOW + PENDING});
let btcWalletList = [
- {
- label: 'ADD',
- desc: C.STR_WALLET,
- iconURL: Images.icon_add,
- iconClickedURL: Images.icon_add_clicked,
- pageURL: 'AddWallet',
- },
+ // {
+ // label: 'ADD',
+ // desc: C.STR_WALLET,
+ // iconURL: Images.icon_add,
+ // iconClickedURL: Images.icon_add_clicked,
+ // pageURL: 'AddWallet',
+ // },
];
try {
@@ -69,17 +69,38 @@ const getBtcWalletList = () => async dispatch => {
iconURL: Images.icon_btcBtn,
iconClickedURL: Images.icon_btcBtn_clicked,
pageURL: 'Account',
+ meta: {
+ enableAddressTypeSelection: false,
+ },
}),
);
// Add spending wallet
btcWalletList.push({
- label: 'Spending',
+ label: C.STR_SPEND_WALLET_LABEL,
desc: C.STR_WALLET,
type: C.STR_SPEND_WALLET_TYPE,
iconURL: Images.icon_btcBtn,
iconClickedURL: Images.icon_btcBtn_clicked,
+ backIcon: Images.icon_btc_cir,
pageURL: 'Account',
+ meta: {
+ enableAddressTypeSelection: true,
+ showAddressTypeSelector: true,
+ },
+ });
+
+ btcWalletList.push({
+ label: C.STR_WASABI_WALLET_LABEL,
+ desc: C.STR_WALLET,
+ type: C.STR_WASABI_WALLET_TYPE,
+ iconURL: Images.icon_wasabi,
+ iconClickedURL: Images.icon_wasabi_clicked,
+ backIcon: Images.icon_wasabi,
+ pageURL: 'Account',
+ meta: {
+ enableAddressLabelInput: true,
+ },
});
dispatch({
@@ -97,7 +118,6 @@ const getBtcWalletList = () => async dispatch => {
const getWalletDetails = ({label, type}) => async dispatch => {
dispatch({type: types.BTC_WALLET_DETAILS + PENDING});
-
let balance = 0,
txnData = [];
try {
@@ -118,13 +138,14 @@ const getWalletDetails = ({label, type}) => async dispatch => {
default:
break;
}
- dispatch({
- type: types.BTC_WALLET_DETAILS + FULFILLED,
- });
// TODO move this to component
txnData.sort((a, b) => {
return b.timereceived - a.timereceived;
});
+ dispatch({
+ type: types.BTC_WALLET_DETAILS + FULFILLED,
+ payload: {balance, txnData},
+ });
return {balance, txnData};
} catch (err) {
error(err);
@@ -138,7 +159,6 @@ const getWalletDetails = ({label, type}) => async dispatch => {
const getWalletAddress = ({label, type, addrType = null}) => async dispatch => {
dispatch({type: types.BTC_WALLET_ADDRESS + PENDING});
let address = null;
-
try {
await dispatch(initBtcClient());
switch (type) {
@@ -156,6 +176,7 @@ const getWalletAddress = ({label, type, addrType = null}) => async dispatch => {
type: types.BTC_WALLET_ADDRESS + FULFILLED,
payload: {address},
});
+ return address;
} catch (err) {
error(err);
dispatch({
diff --git a/src/store/actions/cnClient.js b/src/store/actions/cnClient.js
new file mode 100644
index 0000000..af58113
--- /dev/null
+++ b/src/store/actions/cnClient.js
@@ -0,0 +1,137 @@
+import {C} from '@common';
+import * as types from '@types/';
+import {FULFILLED, PENDING, REJECTED} from '@utils/constants';
+import _cn from '@io/cnClient';
+import {getTransportFromToken} from '@io/transports';
+import {log, error} from '@io/events';
+
+const properties = {
+ CN_AUTOSPEND_WALLET_LABEL: 'wasabi_batchprivatetospender_cfg',
+ CN_AUTOSPEND_ANONSET_LEVEL: 'wasabi_batchprivatetospender_minanonset',
+};
+let cnClient;
+
+const initCnClient = () => async (dispatch, getState) => {
+ if (!cnClient) {
+ log('cnClient:starting cyphernode client');
+ const {
+ auth: {token, key, nodePubkey, devicePgpKey},
+ } = getState();
+
+ if (!token || !key || !nodePubkey) {
+ throw 'Unable to init wasabi client';
+ }
+ const transport = await getTransportFromToken({
+ token,
+ nodePubkey,
+ devicePgpKey,
+ });
+ cnClient = await _cn({transport});
+ }
+ return cnClient;
+};
+
+const getWasabiAutoSpendWallet = () => async (dispatch, getState) => {
+ const {
+ cyphernode: {cfgProps},
+ } = getState();
+ const prop = cfgProps.find(
+ ({property, value}) => property === properties.CN_AUTOSPEND_WALLET_LABEL,
+ );
+ if (!prop) {
+ return null;
+ }
+ const {value: spendingWalletLabel} = prop;
+ // some translations to do here
+ switch (spendingWalletLabel) {
+ case '_spender':
+ return C.STR_SPEND_WALLET_LABEL;
+ case '_disabled':
+ return null;
+ default:
+ return spendingWalletLabel;
+ }
+};
+const getWasabiAutoSpendMinAnonset = () => async (dispatch, getState) => {
+ const {
+ cyphernode: {cfgProps},
+ } = getState();
+ const prop = cfgProps.find(
+ ({property, value}) => property === properties.CN_AUTOSPEND_ANONSET_LEVEL,
+ );
+ if (!prop) {
+ return null;
+ }
+ return prop.value;
+};
+const setWasabiAutoSpendWalletAndAnonset = ({
+ label = undefined,
+ anonset = undefined,
+}) => async (dispatch, getState) => {
+ if (label !== undefined) {
+ let value;
+ // some translations to do here
+ switch (label) {
+ case C.STR_SPEND_WALLET_LABEL:
+ value = '_spender';
+ break;
+ case null:
+ value = '_disabled';
+ break;
+ default:
+ value = label;
+ break;
+ }
+ await dispatch(setConfigProp(properties.CN_AUTOSPEND_WALLET_LABEL, value));
+ }
+ if (anonset) {
+ await dispatch(
+ setConfigProp(properties.CN_AUTOSPEND_ANONSET_LEVEL, anonset),
+ );
+ }
+};
+const getConfigProps = () => async dispatch => {
+ dispatch({type: types.CN_CLIENT_GET_CFG_PROPS + PENDING});
+ try {
+ await dispatch(initCnClient());
+ const cfgProps = await cnClient.getConfigProps();
+ dispatch({
+ type: types.CN_CLIENT_GET_CFG_PROPS + FULFILLED,
+ payload: {cfgProps},
+ });
+ return cfgProps;
+ } catch (err) {
+ error(err);
+ dispatch({
+ type: types.CN_CLIENT_GET_CFG_PROPS + REJECTED,
+ payload: {error: err},
+ });
+ }
+};
+const setConfigProp = (property, value) => async dispatch => {
+ dispatch({type: types.CN_CLIENT_SET_CFG_PROPS + PENDING});
+ try {
+ await dispatch(initCnClient());
+ console.log('sending', property, value);
+ const result = await cnClient.setConfigProp(property, value);
+ console.log('sending result', result);
+ dispatch({
+ type: types.CN_CLIENT_SET_CFG_PROPS + FULFILLED,
+ });
+ return result;
+ } catch (err) {
+ error(err);
+ dispatch({
+ type: types.CN_CLIENT_SET_CFG_PROPS + REJECTED,
+ payload: {error: err},
+ });
+ }
+};
+
+export {
+ getConfigProps,
+ setConfigProp,
+ getWasabiAutoSpendWallet,
+ getWasabiAutoSpendMinAnonset,
+ setWasabiAutoSpendWalletAndAnonset,
+};
diff --git a/src/store/actions/lnWallet.js b/src/store/actions/lnWallet.js
index 617c7ed..3b28eca 100644
--- a/src/store/actions/lnWallet.js
+++ b/src/store/actions/lnWallet.js
@@ -56,7 +56,7 @@ const getLnNodesList = () => async dispatch => {
await dispatch(initLnClient());
const lnNodes = await lnStore.getLnNodes();
if (!lnNodes?.length) {
- // FIXME cold boot hack
+ // TODO cold boot hack
// mainly to stay backward compatible with old archittecture
// Either go to observable or fix this shit
const nodeInfo = await lnClient.getNodeInfo();
@@ -87,6 +87,7 @@ const getLnNodeInfo = label => async dispatch => {
nodeInfo.label = nodeInfo.alias;
nodeInfo.iconURL = Images.icon_light;
nodeInfo.iconClickedURL = Images.icon_light_clicked;
+ nodeInfo.backIcon = Images.icon_bolt_cir;
// nodeInfo.balance = balance;
dispatch({
type: types.LN_WALLET_NODEINFO + FULFILLED,
@@ -104,6 +105,11 @@ const getLnNodeInfo = label => async dispatch => {
const getLnWalletDetails = ({label}) => async dispatch => {
dispatch({type: types.LN_WALLET_DETAILS + PENDING});
try {
+ // TODO
+ // const init = dispatch(initSifirClient());
+ // and make sifirClient call not blocking so we can dispatch what's in the DB and then do the update
+ // with a LN_WALLET_DETAILS + UPDATE event ?
+ //
await dispatch(initSifirClient());
const {
funds: {channels, outputs},
@@ -145,10 +151,11 @@ const getLnWalletDetails = ({label}) => async dispatch => {
type: cachedBolt.type,
meta: cachedBolt.meta,
};
- log('cached bolt', payload);
+ // log('cached bolt', payload);
} else {
// decode and insert it
- const decodedBolt11 = bolt11Lib.decode(inv.bolt11);
+ const [x, y] = inv.bolt11.split(':');
+ const decodedBolt11 = bolt11Lib.decode(x || y);
payload = {
decodedBolt11,
bolt11: inv.bolt11,
@@ -171,6 +178,12 @@ const getLnWalletDetails = ({label}) => async dispatch => {
}
dispatch({
type: types.LN_WALLET_DETAILS + FULFILLED,
+ payload: {
+ outputs,
+ channels,
+ pays: processedPays,
+ invoices: processedInvoices,
+ },
});
return {
balance,
@@ -201,7 +214,7 @@ const getFunds = () => async dispatch => {
const balance = inChannelBalance + outputBalance;
dispatch({
type: types.LN_WALLET_GET_FUNDS + FULFILLED,
- payload: {balance},
+ payload: {balance, outputs, channels},
});
} catch (err) {
error(err);
diff --git a/src/store/actions/wasabiWallet.js b/src/store/actions/wasabiWallet.js
new file mode 100644
index 0000000..734118a
--- /dev/null
+++ b/src/store/actions/wasabiWallet.js
@@ -0,0 +1,149 @@
+import * as types from '@types/';
+import {FULFILLED, PENDING, REJECTED} from '@utils/constants';
+import {wasabiClient as _wasabi} from '@io/wasabiClient';
+import {C} from '@common/index';
+import {getTransportFromToken} from '@io/transports';
+import moment from 'moment';
+import {log, error} from '@io/events';
+let wasabiClient;
+
+const initWasabiClient = () => async (dispatch, getState) => {
+ if (!wasabiClient) {
+ log('wasabi:starting wasabi client');
+ const {
+ auth: {token, key, nodePubkey, devicePgpKey},
+ } = getState();
+
+ if (!token || !key || !nodePubkey) {
+ throw 'Unable to init wasabi client';
+ }
+ const transport = await getTransportFromToken({
+ token,
+ nodePubkey,
+ devicePgpKey,
+ });
+ wasabiClient = await _wasabi({transport});
+ }
+ return wasabiClient;
+};
+
+const getNewAddress = ({label}) => async dispatch => {
+ dispatch({type: types.WASABI_WALLET_ADDRESS + PENDING});
+ try {
+ await dispatch(initWasabiClient());
+ const address = await wasabiClient.getNewAddress(label);
+ // TODO store address
+ dispatch({
+ type: types.WASABI_WALLET_ADDRESS + FULFILLED,
+ });
+ /**
+ * {
+ * address: Address;
+ * keyPath: string; //"84'/0'/0'/0/23";
+ * label: string; //'["unknown"]';
+ * }
+ *
+ */
+ return address;
+ } catch (err) {
+ error(err);
+ dispatch({
+ type: types.WASABI_WALLET_ADDRESS + REJECTED,
+ payload: {error: err},
+ });
+ }
+};
+
+const spend = ({
+ address,
+ amount,
+ minanonset,
+ instanceId = 0,
+ privateOnly = true,
+}) => async dispatch => {
+ dispatch({type: types.WASABI_WALLET_SPEND + PENDING});
+ try {
+ await dispatch(initWasabiClient());
+ if (isNaN(amount)) {
+ throw C.STR_AMOUNT_BENUMBER;
+ }
+ const spendResult = await wasabiClient.spend({
+ address,
+ amount: Number(amount),
+ instanceId,
+ private: privateOnly,
+ minanonset,
+ });
+ if (
+ spendResult?.result === 'error' ||
+ spendResult?.error ||
+ // sometimes spend timesout on CN bridge side, so make sure we actaully got the spend
+ !spendResult?.result === 'success'
+ ) {
+ throw new Error(
+ spendResult?.message ||
+ spendResult?.error?.message ||
+ 'Error while attempting Wasabi spend (probably timedout)',
+ );
+ }
+ dispatch({
+ type: types.WASABI_WALLET_SPEND + FULFILLED,
+ payload: {spendResult},
+ });
+ return spendResult;
+ } catch (err) {
+ error(err);
+ dispatch({
+ type: types.WASABI_WALLET_SPEND + REJECTED,
+ payload: {error: err},
+ });
+ }
+};
+const getUnspentCoins = ({instanceId = 0} = {}) => async dispatch => {
+ dispatch({type: types.WASABI_WALLET_GET_UNSPENTCOINS + PENDING});
+ try {
+ await dispatch(initWasabiClient());
+ const unspentCoinsList = await wasabiClient.getUnspentCoins(instanceId);
+ // TODO cache it ?
+ dispatch({
+ type: types.WASABI_WALLET_GET_UNSPENTCOINS + FULFILLED,
+ payload: {unspentCoinsList},
+ });
+ return unspentCoinsList;
+ } catch (err) {
+ error(err);
+ dispatch({
+ type: types.WASABI_WALLET_GET_UNSPENTCOINS + REJECTED,
+ payload: {error: err},
+ });
+ }
+};
+const getTxns = ({
+ instanceId = 0,
+ txnFilterInternal = true,
+} = {}) => async dispatch => {
+ dispatch({type: types.WASABI_WALLET_GET_TXNS + PENDING});
+ try {
+ await dispatch(initWasabiClient());
+ const txnsList = await wasabiClient.getTxns({
+ instanceId,
+ txnFilterInternal,
+ });
+ dispatch({
+ type: types.WASABI_WALLET_GET_TXNS + FULFILLED,
+ payload: {
+ txnsList: txnsList?.transactions.sort((a, b) =>
+ moment(b.datetime).diff(moment(a.datetime)),
+ ),
+ },
+ });
+ return txnsList;
+ } catch (err) {
+ error(err);
+ dispatch({
+ type: types.WASABI_WALLET_GET_TXNS + REJECTED,
+ payload: {error: err},
+ });
+ }
+};
+export {getTxns, getUnspentCoins, getNewAddress, spend, initWasabiClient};
diff --git a/src/store/io/cnClient/index.js b/src/store/io/cnClient/index.js
new file mode 100644
index 0000000..9bfa973
--- /dev/null
+++ b/src/store/io/cnClient/index.js
@@ -0,0 +1,8 @@
+import {cnClient} from 'sifir-js-sdk';
+let client = null;
+export default async ({transport}) => {
+ if (!client) {
+ client = cnClient({transport});
+ }
+ return client;
+};
diff --git a/src/store/io/pgp/index.js b/src/store/io/pgp/index.js
index 36699f1..3c1ee93 100644
--- a/src/store/io/pgp/index.js
+++ b/src/store/io/pgp/index.js
@@ -19,15 +19,17 @@ const initAndUnlockKeys = async ({privatekeyArmored, passphrase}) => {
return {pubkeyArmored, fingerprint, hexkeyId};
};
+// FIXME schema of return check interface
/**
* @param email
* @param passphrase
- * @returns {Promise<{pubkeyArmored:string,fingerprint:string,hexkeyId:string}>}
+ * @returns {Promise<{privkeyArmored:string,pubkeyArmored:string,fingerprint:string,hexkeyId:string}>}
*/
const makeNewPgpKey = async ({passphrase, email, user}) => {
const key = await PgpBridge.genNewKey(passphrase, email, user);
return key;
};
+
const signMessageWithArmoredKey = async ({msg, privKey, passphrase}) => {
const {armoredSignature, message} = await PgpBridge.signMessageWithArmoredKey(
msg,
diff --git a/src/store/io/sifirClient/index.js b/src/store/io/sifirClient/index.js
index 0f7ab95..051a849 100644
--- a/src/store/io/sifirClient/index.js
+++ b/src/store/io/sifirClient/index.js
@@ -2,8 +2,7 @@ import {sifirClient} from 'sifir-js-sdk';
let client = null;
export default async ({transport}) => {
if (!client) {
- // FIXME sifir to {transport}
- client = sifirClient(transport);
+ client = sifirClient({transport});
}
return client;
};
diff --git a/src/store/io/wasabiClient/clientFactory.js b/src/store/io/wasabiClient/clientFactory.js
new file mode 100644
index 0000000..d04a8c2
--- /dev/null
+++ b/src/store/io/wasabiClient/clientFactory.js
@@ -0,0 +1,10 @@
+import {wasabiClient} from 'sifir-js-sdk';
+let _wasabi = null;
+export default async ({transport}) => {
+ if (!_wasabi) {
+ _wasabi = wasabiClient({
+ transport,
+ });
+ }
+ return _wasabi;
+};
diff --git a/src/store/io/wasabiClient/index.js b/src/store/io/wasabiClient/index.js
new file mode 100644
index 0000000..92f9ff5
--- /dev/null
+++ b/src/store/io/wasabiClient/index.js
@@ -0,0 +1 @@
+export wasabiClient from './clientFactory';
diff --git a/src/store/reducers/btcWallet.js b/src/store/reducers/btcWallet.js
index 53c79a6..151e789 100644
--- a/src/store/reducers/btcWallet.js
+++ b/src/store/reducers/btcWallet.js
@@ -11,6 +11,8 @@ const initialState = {
btcSendResult: null,
feeSettingEnabled: false,
chainInfo: null,
+ balance: null,
+ txnData: [],
};
const btcWallet = createReducer(initialState)({
@@ -75,9 +77,11 @@ const btcWallet = createReducer(initialState)({
}),
[types.BTC_WALLET_DETAILS + FULFILLED]: (
state,
- // {payload: {btcWalletDetails}},
+ {payload: {balance, txnData}},
) => ({
...state,
+ balance,
+ txnData,
loading: false,
loaded: true,
error: null,
diff --git a/src/store/reducers/cn.js b/src/store/reducers/cn.js
new file mode 100644
index 0000000..9f434a2
--- /dev/null
+++ b/src/store/reducers/cn.js
@@ -0,0 +1,55 @@
+import * as types from '@types/';
+import {createReducer} from '@utils/';
+import {FULFILLED, PENDING, REJECTED} from '@utils/constants';
+
+const initialState = {
+ loading: false,
+ error: null,
+ loaded: false,
+ cfgProps: [],
+};
+
+const cyphernode = createReducer(initialState)({
+ [types.CN_CLIENT_GET_CFG_PROPS + PENDING]: state => ({
+ ...state,
+ error: null,
+ loading: true,
+ loaded: false,
+ }),
+ [types.CN_CLIENT_GET_CFG_PROPS + FULFILLED]: (
+ state,
+ {payload: {cfgProps}},
+ ) => ({
+ ...state,
+ loading: false,
+ loaded: true,
+ error: null,
+ cfgProps,
+ }),
+ [types.CN_CLIENT_GET_CFG_PROPS + REJECTED]: (state, {payload: {error}}) => ({
+ ...state,
+ error,
+ loading: false,
+ loaded: false,
+ }),
+ [types.CN_CLIENT_SET_CFG_PROPS + PENDING]: state => ({
+ ...state,
+ error: null,
+ loading: true,
+ loaded: false,
+ }),
+ [types.CN_CLIENT_SET_CFG_PROPS + FULFILLED]: state => ({
+ ...state,
+ loading: false,
+ loaded: true,
+ error: null,
+ }),
+ [types.CN_CLIENT_SET_CFG_PROPS + REJECTED]: (state, {payload: {error}}) => ({
+ ...state,
+ error,
+ loading: false,
+ loaded: false,
+ }),
+});
+
+export default cyphernode;
diff --git a/src/store/reducers/index.js b/src/store/reducers/index.js
index 2bf2e30..5f1fc0d 100644
--- a/src/store/reducers/index.js
+++ b/src/store/reducers/index.js
@@ -1,3 +1,5 @@
export btcWallet from './btcWallet';
export lnWallet from './lnWallet';
+export wasabiWallet from './wasabiWallet';
export auth from './auth';
+export cyphernode from './cn';
diff --git a/src/store/reducers/lnWallet.js b/src/store/reducers/lnWallet.js
index 7a52ed5..3b249e1 100644
--- a/src/store/reducers/lnWallet.js
+++ b/src/store/reducers/lnWallet.js
@@ -9,6 +9,10 @@ const initialState = {
funds: [],
peers: [],
nodeInfo: [],
+ pays: [],
+ invoices: [],
+ outputs: [],
+ channels: [],
};
const lnWallet = createReducer(initialState)({
@@ -56,8 +60,15 @@ const lnWallet = createReducer(initialState)({
loading: true,
loaded: false,
}),
- [types.LN_WALLET_DETAILS + FULFILLED]: state => ({
+ [types.LN_WALLET_DETAILS + FULFILLED]: (
+ state,
+ {payload: {pays, invoices, outputs, funds}},
+ ) => ({
...state,
+ pays,
+ invoices,
+ outputs,
+ funds,
loading: false,
loaded: true,
error: null,
diff --git a/src/store/reducers/wasabiWallet.js b/src/store/reducers/wasabiWallet.js
new file mode 100644
index 0000000..4bdb33b
--- /dev/null
+++ b/src/store/reducers/wasabiWallet.js
@@ -0,0 +1,86 @@
+import * as types from '@types/';
+import {createReducer} from '@utils/';
+import {FULFILLED, PENDING, REJECTED} from '@utils/constants';
+
+const initialState = {
+ loading: false,
+ error: null,
+ loaded: false,
+ unspentCoinsList: [],
+ txnsList: [],
+ spendResult: [],
+};
+
+const wasabiWallet = createReducer(initialState)({
+ [types.WASABI_WALLET_GET_UNSPENTCOINS + PENDING]: state => ({
+ ...state,
+ error: null,
+ loading: true,
+ loaded: false,
+ }),
+ [types.WASABI_WALLET_GET_UNSPENTCOINS + FULFILLED]: (
+ state,
+ {payload: {unspentCoinsList}},
+ ) => ({
+ ...state,
+ loading: false,
+ loaded: true,
+ error: null,
+ unspentCoinsList,
+ }),
+ [types.WASABI_WALLET_GET_UNSPENTCOINS + REJECTED]: (
+ state,
+ {payload: {error}},
+ ) => ({
+ ...state,
+ error,
+ loading: false,
+ loaded: false,
+ }),
+ [types.WASABI_WALLET_GET_TXNS + PENDING]: state => ({
+ ...state,
+ error: null,
+ loading: true,
+ loaded: false,
+ }),
+ [types.WASABI_WALLET_GET_TXNS + FULFILLED]: (
+ state,
+ {payload: {txnsList}},
+ ) => ({
+ ...state,
+ loading: false,
+ loaded: true,
+ error: null,
+ txnsList,
+ }),
+ [types.WASABI_WALLET_GET_TXNS + REJECTED]: (state, {payload: {error}}) => ({
+ ...state,
+ error,
+ loading: false,
+ loaded: false,
+ }),
+ [types.WASABI_WALLET_SPEND + PENDING]: state => ({
+ ...state,
+ error: null,
+ loading: true,
+ loaded: false,
+ }),
+ [types.WASABI_WALLET_SPEND + FULFILLED]: (
+ state,
+ {payload: {spendResult}},
+ ) => ({
+ ...state,
+ loading: false,
+ loaded: true,
+ error: null,
+ spendResult,
+ }),
+ [types.WASABI_WALLET_SPEND + REJECTED]: (state, {payload: {error}}) => ({
+ ...state,
+ error,
+ loading: false,
+ loaded: false,
+ }),
+});
+
+export default wasabiWallet;
diff --git a/src/store/types/index.js b/src/store/types/index.js
index 24d72f9..3f062a0 100644
--- a/src/store/types/index.js
+++ b/src/store/types/index.js
@@ -19,6 +19,16 @@ export const LN_WALLET_OPEN_FUND_PEER_CHANNEL =
export const LN_WALLET_GET_NEW_ADDRESS = 'LN_WALLET_GET_NEW_ADDRESS';
export const LN_WALLET_WITHDRAW_FUNDS = 'LN_WALLET_WITHDRAW_FUNDS';
+// Wasabi
+export const WASABI_WALLET_GET_UNSPENTCOINS = 'WASABI_WALLET_GET_UNSPENTCOINS';
+export const WASABI_WALLET_GET_TXNS = 'WASABI_WALLET_GET_TXNS';
+export const WASABI_WALLET_SPEND = 'WASABI_WALLET_SPEND';
+export const WASABI_WALLET_ADDRESS = 'WASABI_WALLET_ADDRESS';
+
+// Cn client
+export const CN_CLIENT_GET_CFG_PROPS = 'CN_CLIENT_GET_CFG_PROPS';
+export const CN_CLIENT_SET_CFG_PROPS = 'CN_CLIENT_SET_CFG_PROPS';
+
// Auth
export const REQUEST_PAIR = 'REQUEST_PAIR';
export const GET_AUTH_STATUS = 'GET_AUTH_STATUS';