Merge pull request #1698 from ecency/feature/firebase-push

Changed appcenter push with firebase push
This commit is contained in:
Feruz M 2020-07-15 21:02:56 +03:00 committed by GitHub
commit bbe157584e
15 changed files with 417 additions and 128 deletions

View File

@ -122,7 +122,7 @@ def jscFlavor = 'org.webkit:android-jsc:+'
def enableHermes = project.ext.react.get("enableHermes", false); def enableHermes = project.ext.react.get("enableHermes", false);
configurations.all { configurations.all {
resolutionStrategy { resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.0" force "com.facebook.soloader:soloader:0.8.1"
} }
} }
android { android {
@ -212,6 +212,7 @@ dependencies {
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
implementation 'com.android.support:multidex:2.0.1' implementation 'com.android.support:multidex:2.0.1'
implementation project(':@react-native-community_viewpager') implementation project(':@react-native-community_viewpager')
implementation 'com.google.firebase:firebase-analytics:17.2.3'
if (enableHermes) { if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/"; def hermesPath = "../../node_modules/hermes-engine/android/";

View File

@ -57,9 +57,9 @@
<meta-data <meta-data
android:name="com.google.firebase.messaging.default_notification_icon" android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@mipmap/ic_notification" /> android:resource="@mipmap/ic_notification" />
<meta-data <!-- <meta-data
android:name="com.google.firebase.messaging.default_notification_color" android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/notification_icon" /> android:resource="@color/notification_icon" /> -->
<meta-data <meta-data
android:name="com.bugsnag.android.API_KEY" android:name="com.bugsnag.android.API_KEY"
android:value="88a8a25738939a80ba49f1d5289dbc80" /> android:value="88a8a25738939a80ba49f1d5289dbc80" />

View File

@ -29,7 +29,7 @@ buildscript {
dependencies { dependencies {
classpath('com.android.tools.build:gradle:3.5.2') classpath('com.android.tools.build:gradle:3.5.2')
classpath 'com.google.gms:google-services:4.0.2' classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.bugsnag:bugsnag-android-gradle-plugin:4.+' classpath 'com.bugsnag:bugsnag-android-gradle-plugin:4.+'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files

View File

@ -35,6 +35,7 @@ target 'eSteem' do
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
pod 'rn-fetch-blob', :path => '../node_modules/rn-fetch-blob' pod 'rn-fetch-blob', :path => '../node_modules/rn-fetch-blob'
pod 'Firebase/Analytics'
target 'eSteemTests' do target 'eSteemTests' do
inherit! :search_paths inherit! :search_paths

View File

@ -40,6 +40,57 @@ PODS:
- React-Core (= 0.61.5) - React-Core (= 0.61.5)
- React-jsi (= 0.61.5) - React-jsi (= 0.61.5)
- ReactCommon/turbomodule/core (= 0.61.5) - ReactCommon/turbomodule/core (= 0.61.5)
- Firebase/Analytics (6.25.0):
- Firebase/Core
- Firebase/Core (6.25.0):
- Firebase/CoreOnly
- FirebaseAnalytics (= 6.5.1)
- Firebase/CoreOnly (6.25.0):
- FirebaseCore (= 6.7.1)
- Firebase/Messaging (6.25.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 4.4.1)
- FirebaseAnalytics (6.5.1):
- FirebaseCore (~> 6.7)
- FirebaseInstallations (~> 1.2)
- GoogleAppMeasurement (= 6.5.1)
- GoogleUtilities/AppDelegateSwizzler (~> 6.0)
- GoogleUtilities/MethodSwizzler (~> 6.0)
- GoogleUtilities/Network (~> 6.0)
- "GoogleUtilities/NSData+zlib (~> 6.0)"
- nanopb (~> 1.30905.0)
- FirebaseAnalyticsInterop (1.5.0)
- FirebaseCore (6.7.1):
- FirebaseCoreDiagnostics (~> 1.3)
- FirebaseCoreDiagnosticsInterop (~> 1.2)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/Logger (~> 6.5)
- FirebaseCoreDiagnostics (1.3.0):
- FirebaseCoreDiagnosticsInterop (~> 1.2)
- GoogleDataTransportCCTSupport (~> 3.1)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/Logger (~> 6.5)
- nanopb (~> 1.30905.0)
- FirebaseCoreDiagnosticsInterop (1.2.0)
- FirebaseInstallations (1.2.0):
- FirebaseCore (~> 6.6)
- GoogleUtilities/Environment (~> 6.6)
- GoogleUtilities/UserDefaults (~> 6.6)
- PromisesObjC (~> 1.2)
- FirebaseInstanceID (4.3.4):
- FirebaseCore (~> 6.6)
- FirebaseInstallations (~> 1.0)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/UserDefaults (~> 6.5)
- FirebaseMessaging (4.4.1):
- FirebaseAnalyticsInterop (~> 1.5)
- FirebaseCore (~> 6.6)
- FirebaseInstanceID (~> 4.3)
- GoogleUtilities/AppDelegateSwizzler (~> 6.5)
- GoogleUtilities/Environment (~> 6.5)
- GoogleUtilities/Reachability (~> 6.5)
- GoogleUtilities/UserDefaults (~> 6.5)
- Protobuf (>= 3.9.2, ~> 3.9)
- FLAnimatedImage (1.0.12) - FLAnimatedImage (1.0.12)
- Folly (2018.10.22.00): - Folly (2018.10.22.00):
- boost-for-react-native - boost-for-react-native
@ -51,10 +102,46 @@ PODS:
- DoubleConversion - DoubleConversion
- glog - glog
- glog (0.3.5) - glog (0.3.5)
- GoogleAppMeasurement (6.5.1):
- GoogleUtilities/AppDelegateSwizzler (~> 6.0)
- GoogleUtilities/MethodSwizzler (~> 6.0)
- GoogleUtilities/Network (~> 6.0)
- "GoogleUtilities/NSData+zlib (~> 6.0)"
- nanopb (~> 1.30905.0)
- GoogleDataTransport (6.1.1)
- GoogleDataTransportCCTSupport (3.1.0):
- GoogleDataTransport (~> 6.1)
- nanopb (~> 1.30905.0)
- GoogleUtilities/AppDelegateSwizzler (6.6.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (6.6.0):
- PromisesObjC (~> 1.2)
- GoogleUtilities/Logger (6.6.0):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (6.6.0):
- GoogleUtilities/Logger
- GoogleUtilities/Network (6.6.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (6.6.0)"
- GoogleUtilities/Reachability (6.6.0):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (6.6.0):
- GoogleUtilities/Logger
- lottie-ios (3.1.3) - lottie-ios (3.1.3)
- lottie-react-native (3.3.2): - lottie-react-native (3.3.2):
- lottie-ios (~> 3.1.3) - lottie-ios (~> 3.1.3)
- React - React
- nanopb (1.30905.0):
- nanopb/decode (= 1.30905.0)
- nanopb/encode (= 1.30905.0)
- nanopb/decode (1.30905.0)
- nanopb/encode (1.30905.0)
- PromisesObjC (1.2.8)
- Protobuf (3.12.0)
- QBImagePickerController (3.4.0) - QBImagePickerController (3.4.0)
- RCTRequired (0.61.5) - RCTRequired (0.61.5)
- RCTTypeSafety (0.61.5): - RCTTypeSafety (0.61.5):
@ -277,6 +364,16 @@ PODS:
- React-Core - React-Core
- RNCAsyncStorage (1.7.1): - RNCAsyncStorage (1.7.1):
- React - React
- RNCPushNotificationIOS (1.2.0):
- React
- RNFBApp (7.1.0):
- Firebase/CoreOnly (~> 6.25.0)
- React
- RNFBMessaging (7.1.0):
- Firebase/Analytics (~> 6.25.0)
- Firebase/Messaging (~> 6.25.0)
- React
- RNFBApp
- RNGestureHandler (1.5.2): - RNGestureHandler (1.5.2):
- React - React
- RNIap (3.4.15): - RNIap (3.4.15):
@ -309,6 +406,7 @@ DEPENDENCIES:
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`) - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
- Firebase/Analytics
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- lottie-ios (from `../node_modules/lottie-ios`) - lottie-ios (from `../node_modules/lottie-ios`)
@ -345,6 +443,9 @@ DEPENDENCIES:
- ReactNativeDarkMode (from `../node_modules/react-native-dark-mode`) - ReactNativeDarkMode (from `../node_modules/react-native-dark-mode`)
- rn-fetch-blob (from `../node_modules/rn-fetch-blob`) - rn-fetch-blob (from `../node_modules/rn-fetch-blob`)
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)" - "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
- "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)"
- "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
- "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)"
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNIap (from `../node_modules/react-native-iap`) - RNIap (from `../node_modules/react-native-iap`)
- RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`) - RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`)
@ -358,7 +459,23 @@ SPEC REPOS:
- AppCenter - AppCenter
- AppCenterReactNativeShared - AppCenterReactNativeShared
- boost-for-react-native - boost-for-react-native
- Firebase
- FirebaseAnalytics
- FirebaseAnalyticsInterop
- FirebaseCore
- FirebaseCoreDiagnostics
- FirebaseCoreDiagnosticsInterop
- FirebaseInstallations
- FirebaseInstanceID
- FirebaseMessaging
- FLAnimatedImage - FLAnimatedImage
- GoogleAppMeasurement
- GoogleDataTransport
- GoogleDataTransportCCTSupport
- GoogleUtilities
- nanopb
- PromisesObjC
- Protobuf
- QBImagePickerController - QBImagePickerController
- RSKImageCropper - RSKImageCropper
- SDWebImage - SDWebImage
@ -448,6 +565,12 @@ EXTERNAL SOURCES:
:path: "../node_modules/rn-fetch-blob" :path: "../node_modules/rn-fetch-blob"
RNCAsyncStorage: RNCAsyncStorage:
:path: "../node_modules/@react-native-community/async-storage" :path: "../node_modules/@react-native-community/async-storage"
RNCPushNotificationIOS:
:path: "../node_modules/@react-native-community/push-notification-ios"
RNFBApp:
:path: "../node_modules/@react-native-firebase/app"
RNFBMessaging:
:path: "../node_modules/@react-native-firebase/messaging"
RNGestureHandler: RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler" :path: "../node_modules/react-native-gesture-handler"
RNIap: RNIap:
@ -476,11 +599,27 @@ SPEC CHECKSUMS:
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2 DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f
FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75 FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75
Firebase: 5719b4f965f76643241a1bb8244483ff6117db39
FirebaseAnalytics: 93565f3f0f0f50a5d8770850bfe6a82eaba5db27
FirebaseAnalyticsInterop: 3f86269c38ae41f47afeb43ebf32a001f58fcdae
FirebaseCore: 6023faeada5afa95a349fccafb40900e32e9ac42
FirebaseCoreDiagnostics: 4a773a47bd83bbd5a9b1ccf1ce7caa8b2d535e67
FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850
FirebaseInstallations: 2119fb3e46b0a88bfdbf12562f855ee3252462fa
FirebaseInstanceID: cef67c4967c7cecb56ea65d8acbb4834825c587b
FirebaseMessaging: 29543feb343b09546ab3aa04d008ee8595b43c44
FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31 FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51 Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 1f3da668190260b06b429bb211bfbee5cd790c28 glog: 1f3da668190260b06b429bb211bfbee5cd790c28
GoogleAppMeasurement: 137afe68bfa406c3f4221b9395253d9e5d4654cf
GoogleDataTransport: ad884314b81cdb808fb1d23787b367ff8da4e28a
GoogleDataTransportCCTSupport: d70a561f7d236af529fee598835caad5e25f6d3d
GoogleUtilities: 39530bc0ad980530298e9c4af8549e991fd033b1
lottie-ios: 496ac5cea1bbf1a7bd1f1f472f3232eb1b8d744b lottie-ios: 496ac5cea1bbf1a7bd1f1f472f3232eb1b8d744b
lottie-react-native: 2a1a82bb326ae51331a5520de0cf706733c6db69 lottie-react-native: 2a1a82bb326ae51331a5520de0cf706733c6db69
nanopb: c43f40fadfe79e8b8db116583945847910cbabc9
PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6
Protobuf: 2793fcd0622a00b546c60e7cbbcc493e043e9bb9
QBImagePickerController: d54cf93db6decf26baf6ed3472f336ef35cae022 QBImagePickerController: d54cf93db6decf26baf6ed3472f336ef35cae022
RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1 RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1
RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320 RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320
@ -511,6 +650,9 @@ SPEC CHECKSUMS:
ReactNativeDarkMode: 0178ffca3b10f6a7c9f49d6f9810232b328fa949 ReactNativeDarkMode: 0178ffca3b10f6a7c9f49d6f9810232b328fa949
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
RNCAsyncStorage: 44395cb9c7c1523104c2b499eb426ef7aff82bca RNCAsyncStorage: 44395cb9c7c1523104c2b499eb426ef7aff82bca
RNCPushNotificationIOS: 4d9ffd08f00ef6c1029ebbf4d72fc711eca3ff01
RNFBApp: 25a6476dfd7aac2bcbe984f569875bcea122895b
RNFBMessaging: ea4ce2a6466b3a6dfb46a8c28c38a7989da36a31
RNGestureHandler: 946a7691e41df61e2c4b1884deab41a4cdc3afff RNGestureHandler: 946a7691e41df61e2c4b1884deab41a4cdc3afff
RNIap: b4c77c8bc4501203f4b743126a05da23f10f40b4 RNIap: b4c77c8bc4501203f4b743126a05da23f10f40b4
RNImageCropPicker: e1d8c3381e5b05a1bdcd13ea57a4f1c020a09cef RNImageCropPicker: e1d8c3381e5b05a1bdcd13ea57a4f1c020a09cef
@ -521,6 +663,6 @@ SPEC CHECKSUMS:
SDWebImage: c10d14a8883ebd89664f02a422006f66a85c0c5d SDWebImage: c10d14a8883ebd89664f02a422006f66a85c0c5d
Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b
PODFILE CHECKSUM: d4edbb9c1c57c5484f4893520a7865260cb898d3 PODFILE CHECKSUM: 162b87bf8ea343d40707844f5dfad5d6aa5a4e99
COCOAPODS: 1.8.4 COCOAPODS: 1.8.4

File diff suppressed because one or more lines are too long

View File

@ -13,6 +13,7 @@
#import <AppCenterReactNativeCrashes.h> #import <AppCenterReactNativeCrashes.h>
#import <AppCenterReactNativePush.h> #import <AppCenterReactNativePush.h>
#import <BugsnagReactNative/BugsnagReactNative.h> #import <BugsnagReactNative/BugsnagReactNative.h>
@import Firebase;
#import <React/RCTBridge.h> #import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h> #import <React/RCTBundleURLProvider.h>
@ -30,6 +31,7 @@
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ {
[FIRApp configure];
[AppCenterReactNativePush register]; [AppCenterReactNativePush register];
[AppCenterReactNative register]; [AppCenterReactNative register];
[AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true]; [AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true];

View File

@ -33,6 +33,9 @@
"@react-native-community/async-storage": "^1.7.1", "@react-native-community/async-storage": "^1.7.1",
"@react-native-community/cameraroll": "^1.3.0", "@react-native-community/cameraroll": "^1.3.0",
"@react-native-community/netinfo": "^5.3.3", "@react-native-community/netinfo": "^5.3.3",
"@react-native-community/push-notification-ios": "^1.2.0",
"@react-native-firebase/app": "^7.1.0",
"@react-native-firebase/messaging": "^7.1.0",
"appcenter": "^2.6.0", "appcenter": "^2.6.0",
"appcenter-analytics": "^2.6.0", "appcenter-analytics": "^2.6.0",
"appcenter-crashes": "^2.6.0", "appcenter-crashes": "^2.6.0",
@ -70,6 +73,7 @@
"react-native-modal-dropdown": "esteemapp/react-native-modal-dropdown", "react-native-modal-dropdown": "esteemapp/react-native-modal-dropdown",
"react-native-modal-translucent": "^5.0.0", "react-native-modal-translucent": "^5.0.0",
"react-native-navigation-bar-color": "^1.0.0", "react-native-navigation-bar-color": "^1.0.0",
"react-native-push-notification": "^3.5.1",
"react-native-qrcode-svg": "^6.0.3", "react-native-qrcode-svg": "^6.0.3",
"react-native-reanimated": "^1.3.0", "react-native-reanimated": "^1.3.0",
"react-native-scrollable-tab-view": "esteemapp/react-native-scrollable-tab-view", "react-native-scrollable-tab-view": "esteemapp/react-native-scrollable-tab-view",

View File

@ -85,7 +85,9 @@ class UpvoteContainer extends PureComponent {
if (pendingPayout > 0 && pendingPayout < minimumAmountForPayout) { if (pendingPayout > 0 && pendingPayout < minimumAmountForPayout) {
warnZeroPayout = true; warnZeroPayout = true;
} }
const { base, quote, sbdPrintRate } = globalProps; const base = get(globalProps, 'base', 0);
const quote = get(globalProps, 'quote', 0);
const sbdPrintRate = get(globalProps, 'sbdPrintRate', 0);
const SBD_PRINT_RATE_MAX = 10000; const SBD_PRINT_RATE_MAX = 10000;
const percent_steem_dollars = get(content, 'percent_steem_dollars') / 20000; const percent_steem_dollars = get(content, 'percent_steem_dollars') / 20000;
const pending_payout_sbd = pendingPayout * percent_steem_dollars; const pending_payout_sbd = pendingPayout * percent_steem_dollars;

View File

@ -3,6 +3,7 @@ import 'react-native-gesture-handler';
import { Provider, connect } from 'react-redux'; import { Provider, connect } from 'react-redux';
import { PersistGate } from 'redux-persist/integration/react'; import { PersistGate } from 'redux-persist/integration/react';
import { IntlProvider } from 'react-intl'; import { IntlProvider } from 'react-intl';
import firebase from '@react-native-firebase/app';
import { flattenMessages } from './utils/flattenMessages'; import { flattenMessages } from './utils/flattenMessages';
import messages from './config/locales'; import messages from './config/locales';

View File

@ -2,9 +2,7 @@ import { Component } from 'react';
import { Platform, BackHandler, Alert, Linking, AppState } from 'react-native'; import { Platform, BackHandler, Alert, Linking, AppState } from 'react-native';
import NetInfo from '@react-native-community/netinfo'; import NetInfo from '@react-native-community/netinfo';
import Config from 'react-native-config'; import Config from 'react-native-config';
import Push from 'appcenter-push';
import get from 'lodash/get'; import get from 'lodash/get';
import AppCenter from 'appcenter';
import changeNavigationBarColor from 'react-native-navigation-bar-color'; import changeNavigationBarColor from 'react-native-navigation-bar-color';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { injectIntl } from 'react-intl'; import { injectIntl } from 'react-intl';
@ -16,6 +14,8 @@ import {
initialMode as nativeThemeInitialMode, initialMode as nativeThemeInitialMode,
eventEmitter as nativeThemeEventEmitter, eventEmitter as nativeThemeEventEmitter,
} from 'react-native-dark-mode'; } from 'react-native-dark-mode';
import messaging from '@react-native-firebase/messaging';
import PushNotification from 'react-native-push-notification';
// Constants // Constants
import AUTH_TYPE from '../../../constants/authType'; import AUTH_TYPE from '../../../constants/authType';
@ -85,6 +85,9 @@ export const setPreviousAppState = () => {
}, 500); }, 500);
}; };
let firebaseOnNotificationOpenedAppListener = null;
let firebaseOnMessageListener = null;
class ApplicationContainer extends Component { class ApplicationContainer extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -155,6 +158,14 @@ class ApplicationContainer extends Component {
clearTimeout(this._pinCodeTimer); clearTimeout(this._pinCodeTimer);
} }
if (firebaseOnMessageListener) {
firebaseOnMessageListener();
}
if (firebaseOnNotificationOpenedAppListener) {
firebaseOnNotificationOpenedAppListener();
}
this.netListener(); this.netListener();
} }
@ -277,101 +288,116 @@ class ApplicationContainer extends Component {
} }
}; };
_createPushListener = () => { _pushNavigate = (notification) => {
const { dispatch } = this.props; const { dispatch } = this.props;
let params = null; let params = null;
let key = null; let key = null;
let routeName = null; let routeName = null;
Push.setListener({ if (previousAppState !== 'active' && !!notification) {
onPushNotificationReceived(pushNotification) { const push = get(notification, 'data');
if (previousAppState !== 'active') { const type = get(push, 'type', '');
const push = get(pushNotification, 'customProperties'); const fullPermlink = get(push, 'permlink', '');
const type = get(push, 'type', ''); const username = get(push, 'target', '');
const permlink1 = get(push, 'permlink1', ''); const activity_id = get(push, 'id', '');
const permlink2 = get(push, 'permlink2', '');
const permlink3 = get(push, 'permlink3', '');
//const parentPermlink1 = get(push, 'parent_permlink1', '');
//const parentPermlink2 = get(push, 'parent_permlink2', '');
//const parentPermlink3 = get(push, 'parent_permlink3', '');
//const fullParentPermlink = `${parentPermlink1}${parentPermlink2}${parentPermlink3}`; switch (type) {
const fullPermlink = `${permlink1}${permlink2}${permlink3}`; case 'vote':
case 'unvote':
params = {
author: get(push, 'target', ''),
permlink: fullPermlink,
};
key = fullPermlink;
routeName = ROUTES.SCREENS.POST;
break;
case 'mention':
params = {
author: get(push, 'source', ''),
permlink: fullPermlink,
};
key = fullPermlink;
routeName = ROUTES.SCREENS.POST;
break;
const username = get(push, 'target', ''); case 'follow':
const activity_id = get(push, 'id', ''); case 'unfollow':
case 'ignore':
params = {
username: get(push, 'source', ''),
};
key = get(push, 'source', '');
routeName = ROUTES.SCREENS.PROFILE;
break;
switch (type) { case 'reblog':
case 'vote': params = {
case 'unvote': author: get(push, 'target', ''),
params = { permlink: fullPermlink,
author: get(push, 'target', ''), };
permlink: fullPermlink, key = fullPermlink;
}; routeName = ROUTES.SCREENS.POST;
key = fullPermlink; break;
routeName = ROUTES.SCREENS.POST;
break;
case 'mention':
params = {
author: get(push, 'source', ''),
permlink: fullPermlink,
};
key = fullPermlink;
routeName = ROUTES.SCREENS.POST;
break;
case 'follow': case 'reply':
case 'unfollow': params = {
case 'ignore': author: get(push, 'source', ''),
params = { permlink: fullPermlink,
username: get(push, 'source', ''), };
}; key = fullPermlink;
key = get(push, 'source', ''); routeName = ROUTES.SCREENS.POST;
routeName = ROUTES.SCREENS.PROFILE; break;
break;
case 'reblog': case 'transfer':
params = { routeName = ROUTES.TABBAR.PROFILE;
author: get(push, 'target', ''), params = {
permlink: fullPermlink, activePage: 2,
}; };
key = fullPermlink; break;
routeName = ROUTES.SCREENS.POST;
break;
case 'reply': default:
params = { break;
author: get(push, 'source', ''), }
permlink: fullPermlink,
};
key = fullPermlink;
routeName = ROUTES.SCREENS.POST;
break;
case 'transfer': markActivityAsRead(username, activity_id).then((result) => {
routeName = ROUTES.TABBAR.PROFILE; dispatch(updateUnreadActivityCount(result.unread));
params = { });
activePage: 2, if (!some(params, isEmpty)) {
}; navigate({
break; routeName,
params,
key,
});
}
}
};
default: _createPushListener = () => {
break; (async () => await messaging().requestPermission())();
}
markActivityAsRead(username, activity_id).then((result) => { PushNotification.setApplicationIconBadgeNumber(0);
dispatch(updateUnreadActivityCount(result.unread)); PushNotification.cancelAllLocalNotifications();
});
if (!some(params, isEmpty)) { firebaseOnMessageListener = messaging().onMessage((remoteMessage) => {
navigate({ console.log('remoteMessage 1 ', remoteMessage);
routeName, // this._pushNavigate(remoteMessage);
params,
key,
});
}
}
},
}); });
firebaseOnNotificationOpenedAppListener = messaging().onNotificationOpenedApp(
(remoteMessage) => {
console.log('remoteMessage 2:>> ', remoteMessage);
// this._pushNavigate(remoteMessage);
},
);
messaging()
.getInitialNotification()
.then((remoteMessage) => {
console.log('remoteMessage 3:>> ', remoteMessage);
// this._pushNavigate(remoteMessage);
});
// return unsubscribe;
}; };
_handleConntectionChange = (status) => { _handleConntectionChange = (status) => {
@ -526,8 +552,6 @@ class ApplicationContainer extends Component {
}), }),
); );
dispatch(changeAllNotificationSettings(settings)); dispatch(changeAllNotificationSettings(settings));
Push.setEnabled(settings.notification);
} }
if (settings.nsfw !== '') dispatch(setNsfw(settings.nsfw)); if (settings.nsfw !== '') dispatch(setNsfw(settings.nsfw));
@ -596,15 +620,18 @@ class ApplicationContainer extends Component {
}; };
_enableNotification = async (username, isEnable) => { _enableNotification = async (username, isEnable) => {
const token = await AppCenter.getInstallId(); messaging()
.getToken()
setPushToken({ .then((token) => {
username, console.log('token :>> ', token);
token, setPushToken({
system: Platform.OS, username,
allows_notify: Number(isEnable), token,
notify_types: [1, 2, 3, 4, 5, 6], system: Platform.OS,
}); allows_notify: Number(isEnable),
notify_types: [1, 2, 3, 4, 5, 6],
});
});
}; };
_switchAccount = async (targetAccountUsername) => { _switchAccount = async (targetAccountUsername) => {

View File

@ -2,8 +2,8 @@ import React, { PureComponent } from 'react';
import { Alert, Platform } from 'react-native'; import { Alert, Platform } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { injectIntl } from 'react-intl'; import { injectIntl } from 'react-intl';
import AppCenter from 'appcenter';
import Config from 'react-native-config'; import Config from 'react-native-config';
import messaging from '@react-native-firebase/messaging';
// Services and Actions // Services and Actions
import { login } from '../../../providers/steem/auth'; import { login } from '../../../providers/steem/auth';
@ -100,7 +100,6 @@ class LoginContainer extends PureComponent {
transfers: 6, transfers: 6,
}; };
const notifyTypes = []; const notifyTypes = [];
const token = await AppCenter.getInstallId();
Object.keys(notificationDetails).map((item) => { Object.keys(notificationDetails).map((item) => {
const notificationType = item.replace('Notification', ''); const notificationType = item.replace('Notification', '');
@ -110,16 +109,20 @@ class LoginContainer extends PureComponent {
} }
}); });
const data = { messaging()
username, .getToken()
token, .then((token) => {
system: Platform.OS, const data = {
allows_notify: Number(notificationSettings), username,
notify_types: notifyTypes, token,
}; system: Platform.OS,
setPushToken(data).then(() => { allows_notify: Number(notificationSettings),
setPushTokenSaved(true); notify_types: notifyTypes,
}); };
setPushToken(data).then(() => {
setPushTokenSaved(true);
});
});
}; };
_getAccountsWithUsername = async (username) => { _getAccountsWithUsername = async (username) => {

View File

@ -1,12 +1,11 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { Platform } from 'react-native'; import { Platform } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import AppCenter from 'appcenter';
import Push from 'appcenter-push';
import { Client } from '@esteemapp/dhive'; import { Client } from '@esteemapp/dhive';
import VersionNumber from 'react-native-version-number'; import VersionNumber from 'react-native-version-number';
import Config from 'react-native-config'; import Config from 'react-native-config';
import { injectIntl } from 'react-intl'; import { injectIntl } from 'react-intl';
import messaging from '@react-native-firebase/messaging';
// Realm // Realm
import { import {
@ -267,7 +266,6 @@ class SettingsContainer extends Component {
notifyTypes.sort(); notifyTypes.sort();
if (actionType === 'notification') { if (actionType === 'notification') {
await Push.setEnabled(action);
this._setPushToken(action ? notifyTypes : []); this._setPushToken(action ? notifyTypes : []);
} else { } else {
this._setPushToken(notifyTypes); this._setPushToken(notifyTypes);
@ -312,21 +310,23 @@ class SettingsContainer extends Component {
const { isLoggedIn, otherAccounts = [] } = this.props; const { isLoggedIn, otherAccounts = [] } = this.props;
if (isLoggedIn) { if (isLoggedIn) {
const token = await AppCenter.getInstallId();
getExistUser().then((isExistUser) => { getExistUser().then((isExistUser) => {
if (isExistUser) { if (isExistUser) {
otherAccounts.forEach((item) => { otherAccounts.forEach((item) => {
const { isNotificationSettingsOpen } = this.props; const { isNotificationSettingsOpen } = this.props;
const data = { messaging()
username: item.username, .getToken()
token, .then((token) => {
system: Platform.OS, const data = {
allows_notify: Number(isNotificationSettingsOpen), username: item.username,
notify_types: notifyTypes, token,
}; system: Platform.OS,
setPushToken(data); allows_notify: Number(isNotificationSettingsOpen),
notify_types: notifyTypes,
};
setPushToken(data);
});
}); });
} }
}); });

View File

@ -1520,11 +1520,37 @@
resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-5.3.3.tgz#2e627456d83c1d75d4c43ab6cef70fe125b9691d" resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-5.3.3.tgz#2e627456d83c1d75d4c43ab6cef70fe125b9691d"
integrity sha512-L4BsdIEEuG5rKkVNzjESdJ1wvusn0kflj/FrwctaW+xkLxiFs1+mdBg/mvqqfXvVFuBEphbyXJTFT4aG4Okkow== integrity sha512-L4BsdIEEuG5rKkVNzjESdJ1wvusn0kflj/FrwctaW+xkLxiFs1+mdBg/mvqqfXvVFuBEphbyXJTFT4aG4Okkow==
"@react-native-community/push-notification-ios@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@react-native-community/push-notification-ios/-/push-notification-ios-1.2.0.tgz#3353598450a39c42d079603aad2d1c0f9c2c1729"
integrity sha512-B5qPb9P/6vvxGGQDePlK/q6NxoZPWSVFtKCQ9jlboP7gNZmf3AAyBhTzrb++s2NSXXogjkGi6vt9df1ipZiawQ==
dependencies:
invariant "^2.2.4"
"@react-native-community/viewpager@^2.0.1": "@react-native-community/viewpager@^2.0.1":
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/@react-native-community/viewpager/-/viewpager-2.0.2.tgz#622b190294b1310c4825c98daeaee1c8443f7124" resolved "https://registry.yarnpkg.com/@react-native-community/viewpager/-/viewpager-2.0.2.tgz#622b190294b1310c4825c98daeaee1c8443f7124"
integrity sha512-CKVhIZdX/Cmb80muog8sKpi5vM8npwFp4tx4Dj1IvTBidZweuO22+VH2rDOj7E0LzdV9IYRJ4FGBwcPBD2qUrQ== integrity sha512-CKVhIZdX/Cmb80muog8sKpi5vM8npwFp4tx4Dj1IvTBidZweuO22+VH2rDOj7E0LzdV9IYRJ4FGBwcPBD2qUrQ==
"@react-native-firebase/app-types@6.7.2":
version "6.7.2"
resolved "https://registry.yarnpkg.com/@react-native-firebase/app-types/-/app-types-6.7.2.tgz#d2e1530af5702e00578914b41468898c10d3289c"
integrity sha512-pIwc6e0ZINw6PJqNVsAxzOVJUDg6au2TdulY+ZOYQ11SPDs5I2n9likoGrElPmJjajT4s9h87uz/6PWP2k9PxQ==
"@react-native-firebase/app@^7.1.0":
version "7.1.0"
resolved "https://registry.yarnpkg.com/@react-native-firebase/app/-/app-7.1.0.tgz#df56260b7861b700c5888a3865b217e17536dbff"
integrity sha512-C/SCrU/zzlYVUrqFar+a7zQ1qN01I39LREzD098Pl6gPi8ONhd5bda8ZX0Qq7fRwNmSZlQ1j93VLysagt41woA==
dependencies:
"@react-native-firebase/app-types" "6.7.2"
opencollective-postinstall "^2.0.1"
superstruct "^0.6.2"
"@react-native-firebase/messaging@^7.1.0":
version "7.1.0"
resolved "https://registry.yarnpkg.com/@react-native-firebase/messaging/-/messaging-7.1.0.tgz#49040d84ad021aec6b34caaee7dd790ffb2abc7a"
integrity sha512-pl/qUICfK3NoOUdajgSw1Qcl1w7UHyfkwTRjwrRawySGd05p5BEkig1X32D+YHGdB14OPDKn46JxAZuw6a6Lyw==
"@react-navigation/core@^3.5.1": "@react-navigation/core@^3.5.1":
version "3.5.1" version "3.5.1"
resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.5.1.tgz#7a2339fca3496979305fb3a8ab88c2ca8d8c214d" resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.5.1.tgz#7a2339fca3496979305fb3a8ab88c2ca8d8c214d"
@ -2679,6 +2705,16 @@ cliui@^5.0.0:
strip-ansi "^5.2.0" strip-ansi "^5.2.0"
wrap-ansi "^5.1.0" wrap-ansi "^5.1.0"
clone-deep@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==
dependencies:
for-own "^1.0.0"
is-plain-object "^2.0.4"
kind-of "^6.0.0"
shallow-clone "^1.0.0"
clone@^1.0.2: clone@^1.0.2:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
@ -4168,11 +4204,23 @@ follow-redirects@1.5.10:
dependencies: dependencies:
debug "=3.1.0" debug "=3.1.0"
for-in@^1.0.2: for-in@^0.1.3:
version "0.1.8"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=
for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
for-own@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=
dependencies:
for-in "^1.0.1"
forever-agent@~0.6.1: forever-agent@~0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@ -5639,6 +5687,11 @@ kind-of@^6.0.0, kind-of@^6.0.2:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
kind-of@^6.0.1:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
klaw@^1.0.0: klaw@^1.0.0:
version "1.3.1" version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
@ -6415,6 +6468,14 @@ mixin-deep@^1.2.0:
for-in "^1.0.2" for-in "^1.0.2"
is-extendable "^1.0.1" is-extendable "^1.0.1"
mixin-object@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=
dependencies:
for-in "^0.1.3"
is-extendable "^0.1.1"
mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1: mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1:
version "0.5.1" version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
@ -6772,7 +6833,7 @@ open@^6.2.0:
dependencies: dependencies:
is-wsl "^1.1.0" is-wsl "^1.1.0"
opencollective-postinstall@^2.0.2: opencollective-postinstall@^2.0.1, opencollective-postinstall@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
@ -7559,6 +7620,13 @@ react-native-navigation-bar-color@^1.0.0:
resolved "https://registry.yarnpkg.com/react-native-navigation-bar-color/-/react-native-navigation-bar-color-1.0.0.tgz#04ff752a58049af93ceea9ccf266b8d3fbc6514a" resolved "https://registry.yarnpkg.com/react-native-navigation-bar-color/-/react-native-navigation-bar-color-1.0.0.tgz#04ff752a58049af93ceea9ccf266b8d3fbc6514a"
integrity sha512-djBE0zSp+JT65VeUm4UpIpr9DA9SpE9YTLwDAcqkWfB9JI8l3djSx+SmrIYfc7dUs216Y6qo2dr0qR3+M5qbOQ== integrity sha512-djBE0zSp+JT65VeUm4UpIpr9DA9SpE9YTLwDAcqkWfB9JI8l3djSx+SmrIYfc7dUs216Y6qo2dr0qR3+M5qbOQ==
react-native-push-notification@^3.5.1:
version "3.5.1"
resolved "https://registry.yarnpkg.com/react-native-push-notification/-/react-native-push-notification-3.5.1.tgz#438dd6b526903e01659f34b1ba5d9f293ac663a1"
integrity sha512-F2h4qlEnKzjtqFhtT3To3rUAFuzmfHrFum55yttb40dE0+gMh1Piu0EyebIseKsin6Ia3830tLK/e1Q1kQMMjA==
dependencies:
"@react-native-community/push-notification-ios" "^1.2.0"
react-native-qrcode-svg@^6.0.3: react-native-qrcode-svg@^6.0.3:
version "6.0.3" version "6.0.3"
resolved "https://registry.yarnpkg.com/react-native-qrcode-svg/-/react-native-qrcode-svg-6.0.3.tgz#27b6a7a1df02c5bf10796fd97e8b55c0044dc0f8" resolved "https://registry.yarnpkg.com/react-native-qrcode-svg/-/react-native-qrcode-svg-6.0.3.tgz#27b6a7a1df02c5bf10796fd97e8b55c0044dc0f8"
@ -8410,6 +8478,15 @@ sha.js@^2.4.0, sha.js@^2.4.8:
inherits "^2.0.1" inherits "^2.0.1"
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
shallow-clone@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571"
integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==
dependencies:
is-extendable "^0.1.1"
kind-of "^5.0.0"
mixin-object "^2.0.1"
shallow-equal@^1.2.1: shallow-equal@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
@ -8852,6 +8929,14 @@ sudo-prompt@^9.0.0:
resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0"
integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==
superstruct@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.6.2.tgz#c5eb034806a17ff98d036674169ef85e4c7f6a1c"
integrity sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig==
dependencies:
clone-deep "^2.0.1"
kind-of "^6.0.1"
supports-color@^2.0.0: supports-color@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"