diff --git a/android b/android index 37b8931..b7b6c05 160000 --- a/android +++ b/android @@ -1 +1 @@ -Subproject commit 37b893103da874282f2bdef4a8a1bb543d2c9859 +Subproject commit b7b6c05bd3a61c1cec09a08f1b5c413a68597026 diff --git a/bundle-android.sh b/bundle-android.sh index 49e6ba1..37d41d4 100644 --- a/bundle-android.sh +++ b/bundle-android.sh @@ -1,3 +1,2 @@ #!/bin/bash react-native bundle --platform android --dev false --entry-file src/index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/ - diff --git a/package.json b/package.json index 36a313e..570c0e9 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "base-64": "^0.1.0", "@expo/vector-icons": "^8.1.0", "gfycat-style-urls": "^1.0.3", - "lbry-redux": "lbryio/lbry-redux#9c48cce570ee8e057068c86cb6507e1b441841ee", - "lbryinc": "lbryio/lbryinc#0dc8829a319a708f45a855765f70a193ccb72676", + "lbry-redux": "lbryio/lbry-redux#f6e99498d2bc5b3f07e1e2b6f668a1a48de35047", + "lbryinc": "lbryio/lbryinc#1fc104c2d29d1d3975234c3606e848eaa28e1b6e", "lodash": ">=4.17.11", "merge": ">=1.2.1", "moment": "^2.22.1", @@ -77,7 +77,7 @@ "flow-babel-webpack-plugin": "^1.1.1", "husky": "^0.14.3", "lint-staged": "^7.0.4", - "metro-react-native-babel-preset": "^0.58.0", + "metro-react-native-babel-preset": "0.56.3", "prettier": "^1.11.1", "@react-native-community/eslint-config": "^0.0.5", "react-devtools": "^3.6.3", diff --git a/src/component/AppNavigator.js b/src/component/AppNavigator.js index d119198..1154c58 100644 --- a/src/component/AppNavigator.js +++ b/src/component/AppNavigator.js @@ -5,6 +5,7 @@ import DiscoverPage from 'page/discover'; import DownloadsPage from 'page/downloads'; import DrawerContent from 'component/drawerContent'; import FilePage from 'page/file'; +import LiteFilePage from 'page/liteFile'; import FirstRunScreen from 'page/firstRun'; import InvitesPage from 'page/invites'; import PublishPage from 'page/publish'; @@ -19,7 +20,7 @@ import SubscriptionsPage from 'page/subscriptions'; import TransactionHistoryPage from 'page/transactionHistory'; import VerificationScreen from 'page/verification'; import WalletPage from 'page/wallet'; -import { NavigationActions } from 'react-navigation'; +import { NavigationActions, StackActions } from 'react-navigation'; import { createDrawerNavigator } from 'react-navigation-drawer'; import { createStackNavigator } from 'react-navigation-stack'; import { @@ -30,6 +31,7 @@ import { import { connect } from 'react-redux'; import { AppState, + Alert, BackHandler, DeviceEventEmitter, Linking, @@ -76,16 +78,6 @@ import Snackbar from 'react-native-snackbar'; const SYNC_GET_INTERVAL = 1000 * 60 * 5; // every 5 minutes -const menuNavigationButton = navigation => ( - navigation.openDrawer()} - /> -); - const discoverStack = createStackNavigator( { Subscriptions: { @@ -278,6 +270,12 @@ const mainStackNavigator = new createStackNavigator( drawerLockMode: 'locked-closed', }, }, + LiteFile: { + screen: LiteFilePage, + navigationOptions: { + drawerLockMode: 'locked-closed', + }, + }, }, { headerMode: 'none', @@ -314,6 +312,8 @@ class AppWithNavigationState extends React.Component { 'hardwareBackPress', function() { const { dispatch, nav, drawerStack } = this.props; + console.log(nav); + if (drawerStack.length > 1) { dispatchNavigateBack(dispatch, nav, drawerStack); return true; diff --git a/src/component/claimResultItem/view.js b/src/component/claimResultItem/view.js index 576f323..c34a1fb 100644 --- a/src/component/claimResultItem/view.js +++ b/src/component/claimResultItem/view.js @@ -39,10 +39,14 @@ class ClaimResultItem extends React.PureComponent { } onPressHandler = () => { - const { autoplay, navigation, result, setPlayerVisible } = this.props; + const { autoplay, navigation, result, urlOpenHandler, setPlayerVisible } = this.props; const { claimId, name } = result; const url = normalizeURI(`${name}#${claimId}`); - navigateToUri(navigation, url, { autoplay }, false, url, setPlayerVisible); + if (urlOpenHandler) { + urlOpenHandler(url); + } else { + navigateToUri(navigation, url, { autoplay }, false, url, setPlayerVisible); + } }; render() { diff --git a/src/component/mediaPlayer/view.js b/src/component/mediaPlayer/view.js index e9e0acf..0d67dfb 100644 --- a/src/component/mediaPlayer/view.js +++ b/src/component/mediaPlayer/view.js @@ -36,7 +36,7 @@ class MediaPlayer extends React.PureComponent { constructor(props) { super(props); this.state = { - buffering: false, + buffering: true, backgroundPlayEnabled: false, autoPaused: false, rate: 1, @@ -45,9 +45,9 @@ class MediaPlayer extends React.PureComponent { resizeMode: 'contain', duration: 0.0, currentTime: 0.0, - paused: !props.autoPlay, + paused: true, fullscreenMode: false, - areControlsVisible: true, + areControlsVisible: false, controlsTimeout: -1, seekerOffset: 0, seekerPosition: 0, @@ -87,7 +87,9 @@ class MediaPlayer extends React.PureComponent { } onLoad = data => { + const { autoPlay } = this.props; this.setState({ + buffering: false, duration: data.duration, }); @@ -100,13 +102,17 @@ class MediaPlayer extends React.PureComponent { if (this.props.onMediaLoaded) { this.props.onMediaLoaded(); } + + if (autoPlay) { + this.setState({ paused: false }); + } }; onProgress = data => { const { savePosition, claim } = this.props; this.setState({ buffering: false, currentTime: data.currentTime }); - if (data.currentTime > 0 && Math.floor(data.currentTime) % positionSaveInterval === 0) { + if (claim && data.currentTime > 0 && Math.floor(data.currentTime) % positionSaveInterval === 0) { const { claim_id: claimId, txid, nout } = claim; savePosition(claimId, `${txid}:${nout}`, data.currentTime); } diff --git a/src/component/relatedContent/index.js b/src/component/relatedContent/index.js index bdd266f..f2fd0ac 100644 --- a/src/component/relatedContent/index.js +++ b/src/component/relatedContent/index.js @@ -15,7 +15,13 @@ const RESULT_SIZE = 16; const select = (state, props) => ({ claim: makeSelectClaimForUri(props.uri)(state), isSearching: selectIsSearching(state), - recommendedContent: makeSelectResolvedRecommendedContentForUri(props.uri, RESULT_SIZE)(state), + recommendedContent: makeSelectResolvedRecommendedContentForUri( + props.uri, + RESULT_SIZE, + props.claimId, + props.claimName, + props.title, + )(state), resolvingUris: selectResolvingUris(state), showNsfwContent: selectShowNsfw(state), }); @@ -26,7 +32,4 @@ const perform = dispatch => ({ dispatch(doResolvedSearch(query, RESULT_SIZE, undefined, true, { related_to: claimId }, nsfw)), }); -export default connect( - select, - perform, -)(RelatedContent); +export default connect(select, perform)(RelatedContent); diff --git a/src/component/relatedContent/view.js b/src/component/relatedContent/view.js index d98241c..1b20f9c 100644 --- a/src/component/relatedContent/view.js +++ b/src/component/relatedContent/view.js @@ -22,7 +22,7 @@ export default class RelatedContent extends React.PureComponent { } render() { - const { isSearching, recommendedContent, navigation, uri, fullUri } = this.props; + const { isSearching, recommendedContent, navigation, urlOpenHandler, uri, fullUri } = this.props; return ( @@ -33,6 +33,7 @@ export default class RelatedContent extends React.PureComponent { { + const { navigation } = this.props; + if (!navigation.openDrawer) { + Alert.alert( + __('Stop watching?'), + 'The LBRY service is still loading stuff in the background. Would you like to continue?', + [ + { text: __('No') }, + { + text: __('Yes'), + onPress: () => { + const resetAction = StackActions.reset({ + index: 0, + actions: [ + NavigationActions.navigate({ routeName: 'Splash', params: { resetUrl: 'lbry://?subscriptions' } }), + ], + }); + navigation.dispatch(resetAction); + }, + }, + ], + ); + } else { + navigation.openDrawer(); + } + }; + render() { const { allowEdit, @@ -262,7 +290,7 @@ class UriBar extends React.PureComponent { size={24} style={uriBarStyle.drawerMenuButton} iconStyle={uriBarStyle.drawerHamburger} - onPress={() => navigation.openDrawer()} + onPress={this.handleNavigationButtonPress} /> )} {!selectionMode && ( diff --git a/src/constants.js b/src/constants.js index 37aa7fb..bf019b5 100644 --- a/src/constants.js +++ b/src/constants.js @@ -93,6 +93,7 @@ const Constants = { DRAWER_ROUTE_CHANNEL_CREATOR: 'ChannelCreator', DRAWER_ROUTE_CHANNEL_CREATOR_FORM: 'ChannnelCreatorForm', DRAWER_ROUTE_INVITES: 'Invites', + DRAWER_ROUTE_LITE_FILE: 'LiteFile', FULL_ROUTE_NAME_DISCOVER: 'DiscoverStack', FULL_ROUTE_NAME_WALLET: 'WalletStack', diff --git a/src/index.js b/src/index.js index 5a52168..f64e3e5 100644 --- a/src/index.js +++ b/src/index.js @@ -58,6 +58,7 @@ window.__ = __; const globalExceptionHandler = (error, isFatal) => { if (error && NativeModules.Firebase) { + console.log(error); NativeModules.Firebase.logException(!!isFatal, error.message ? error.message : 'No message', JSON.stringify(error)); } }; diff --git a/src/page/about/view.js b/src/page/about/view.js index 6616869..ce00c80 100644 --- a/src/page/about/view.js +++ b/src/page/about/view.js @@ -10,6 +10,7 @@ import aboutStyle from 'styles/about'; class AboutPage extends React.PureComponent { state = { appVersion: null, + firebaseToken: null, lbryId: null, versionInfo: null, }; @@ -45,11 +46,12 @@ class AboutPage extends React.PureComponent { setPlayerVisible(); NativeModules.Firebase.setCurrentScreen('About').then(result => { - if (NativeModules.VersionInfo) { - NativeModules.VersionInfo.getAppVersion().then(version => { - this.setState({ appVersion: version }); - }); - } + NativeModules.VersionInfo.getAppVersion().then(version => { + this.setState({ appVersion: version }); + }); + NativeModules.Firebase.getMessagingToken().then(firebaseToken => { + this.setState({ firebaseToken }); + }); Lbry.version().then(info => { this.setState({ versionInfo: info, @@ -77,7 +79,7 @@ class AboutPage extends React.PureComponent { {__('Content Freedom')} {__( - 'LBRY is a free, open, and community-run digital marketplace. It is a decentralized peer-to-peer content distribution platform for creators to upload and share content, and earn LBRY credits for their effort. Users will be able to find a wide selection of videos, music, ebooks and other digital content they are interested in.' + 'LBRY is a free, open, and community-run digital marketplace. It is a decentralized peer-to-peer content distribution platform for creators to upload and share content, and earn LBRY credits for their effort. Users will be able to find a wide selection of videos, music, ebooks and other digital content they are interested in.', )} @@ -88,7 +90,7 @@ class AboutPage extends React.PureComponent { {__('Get Social')} {__( - 'You can interact with the LBRY team and members of the community on Discord, Facebook, Instagram, Twitter or Reddit.' + 'You can interact with the LBRY team and members of the community on Discord, Facebook, Instagram, Twitter or Reddit.', )} @@ -164,6 +166,15 @@ class AboutPage extends React.PureComponent { + + + {__('Firebase Token')} + + {this.state.firebaseToken ? this.state.firebaseToken : loading} + + + + {__('Logs')} diff --git a/src/page/liteFile/index.js b/src/page/liteFile/index.js new file mode 100644 index 0000000..49b4570 --- /dev/null +++ b/src/page/liteFile/index.js @@ -0,0 +1,31 @@ +import { connect } from 'react-redux'; +import { makeSelectContentPositionForUri, selectBalance } from 'lbry-redux'; +import { doClaimEligiblePurchaseRewards, makeSelectViewCountForUri, selectRewardContentClaimIds } from 'lbryinc'; +import { doSetPlayerVisible } from 'redux/actions/drawer'; +import { makeSelectPlayerVisible } from 'redux/selectors/drawer'; +import { doToggleFullscreenMode } from 'redux/actions/settings'; +import LiteFilePage from './view'; + +const select = (state, props) => { + const { uri, fullUri } = props.navigation.state.params; + const contentUri = fullUri || uri; + const selectProps = { uri: contentUri }; + return { + balance: selectBalance(state), + isPlayerVisible: makeSelectPlayerVisible(uri)(state), // use navigation uri for this selector + position: makeSelectContentPositionForUri(contentUri)(state), + viewCount: makeSelectViewCountForUri(contentUri)(state), + rewardedContentClaimIds: selectRewardContentClaimIds(state), + }; +}; + +const perform = dispatch => ({ + claimEligibleRewards: () => dispatch(doClaimEligiblePurchaseRewards()), + setPlayerVisible: (visible, uri) => dispatch(doSetPlayerVisible(visible, uri)), + toggleFullscreenMode: mode => dispatch(doToggleFullscreenMode(mode)), +}); + +export default connect( + select, + perform, +)(LiteFilePage); diff --git a/src/page/liteFile/view.js b/src/page/liteFile/view.js new file mode 100644 index 0000000..82cf610 --- /dev/null +++ b/src/page/liteFile/view.js @@ -0,0 +1,289 @@ +import React from 'react'; +import { Lbry, formatCredits, normalizeURI, parseURI, parseQueryParams } from 'lbry-redux'; +import { Lbryio } from 'lbryinc'; +import { + ActivityIndicator, + Alert, + DeviceEventEmitter, + Dimensions, + Image, + Linking, + NativeModules, + Platform, + ScrollView, + StatusBar, + StyleSheet, + Text, + TextInput, + TouchableOpacity, + TouchableWithoutFeedback, + View, +} from 'react-native'; +import UriBar from 'component/uriBar'; +import Link from 'component/link'; +import MediaPlayer from 'component/mediaPlayer'; +import RelatedContent from 'component/relatedContent'; +import filePageStyle from 'styles/filePage'; +import { decode, formatLbryUrlForWeb, navigateToUri } from 'utils/helper'; +import Icon from 'react-native-vector-icons/FontAwesome5'; +import Constants from 'constants'; // eslint-disable-line node/no-deprecated-api +import uriBarStyle from 'styles/uriBar'; +import { NavigationActions, StackActions } from 'react-navigation'; + +// This page will only be used for playing audio / video content from a remote stream URL +class LiteFilePage extends React.PureComponent { + playerBackground = null; + + scrollView = null; + + player = null; + + state = { + channelName: null, + channelUrl: null, + title: null, + fullscreenMode: false, + playerHeight: null, + isLandscape: false, + sdkReady: false, // TODO: progressively enable features (e.g. tip) when sdk is ready + showRecommended: false, + viewCount: 0, + }; + + checkOrientation = () => { + if (this.state.fullscreenMode) { + return; + } + + const screenDimension = Dimensions.get('window'); + const screenWidth = screenDimension.width; + const screenHeight = screenDimension.height; + const isLandscape = screenWidth > screenHeight; + this.setState({ isLandscape }); + + if (!this.playerBackground) { + return; + } + + if (isLandscape) { + this.playerBackground.setNativeProps({ + height: screenHeight - StyleSheet.flatten(uriBarStyle.uriContainer).height, + }); + } else if (this.state.playerBgHeight > 0) { + this.playerBackground.setNativeProps({ height: this.state.playerBgHeight }); + } + }; + + handleFullscreenToggle = isFullscreen => { + const { toggleFullscreenMode } = this.props; + toggleFullscreenMode(isFullscreen); + + if (isFullscreen) { + // fullscreen, so change orientation to landscape mode + NativeModules.ScreenOrientation.lockOrientationLandscape(); + + // hide the navigation bar (on devices that have the soft navigation bar) + NativeModules.UtilityModule.hideNavigationBar(); + } else { + // Switch back to portrait mode when the media is not fullscreen + NativeModules.ScreenOrientation.lockOrientationPortrait(); + + // show the navigation bar (on devices that have the soft navigation bar) + NativeModules.UtilityModule.showNavigationBar(); + } + + this.setState({ fullscreenMode: isFullscreen }); + StatusBar.setHidden(isFullscreen); + }; + + getStreamUrl = url => { + const { claimName, claimId } = parseURI(url); + return `https://player.lbry.tv/content/claims/${claimName}/${claimId}/stream`; + }; + + handleSharePress = url => { + const shareUrl = Constants.SHARE_BASE_URL + formatLbryUrlForWeb(url); + NativeModules.UtilityModule.shareUrl(shareUrl); + }; + + handleOpenUrl = url => { + const { navigation } = this.props; + Alert.alert( + __('Stop watching?'), + 'The LBRY service is still loading stuff in the background. Would you like to continue?', + [ + { text: __('No') }, + { + text: __('Yes'), + onPress: () => { + const resetAction = StackActions.reset({ + index: 0, + actions: [NavigationActions.navigate({ routeName: 'Splash', params: { resetUrl: url } })], + }); + navigation.dispatch(resetAction); + }, + }, + ], + ); + }; + + componentDidUpdate() { + const { navigation } = this.props; + const { uri } = navigation.state.params; + + if (!this.state.title) { + const params = parseQueryParams(uri); + const { channelUrl, contentTitle } = params; + const channelName = channelUrl ? parseURI(decode(channelUrl)).claimName : null; + + this.setState({ + title: decode(contentTitle), + channelUrl, + channelName, + showRecommended: true, + }); + } + } + + render() { + const { navigation, rewardedContentClaimIds } = this.props; + const { channelName, channelUrl, title, sdkReady, viewCount } = this.state; + const { uri } = navigation.state.params; + const { claimName, claimId } = parseURI(uri); + const isRewardContent = rewardedContentClaimIds.includes(claimId); + + const playerBgStyle = [filePageStyle.playerBackground, filePageStyle.containedPlayerBackground]; + const fsPlayerBgStyle = [filePageStyle.playerBackground, filePageStyle.fullscreenPlayerBackground]; + + const playerStyle = [ + filePageStyle.player, + this.state.isLandscape + ? filePageStyle.containedPlayerLandscape + : this.state.fullscreenMode + ? filePageStyle.fullscreenPlayer + : filePageStyle.containedPlayer, + ]; + + return ( + + {!this.state.fullscreenMode && } + + + + + { + this.playerBackground = ref; + }} + onLayout={evt => { + if (!this.state.playerBgHeight) { + this.setState({ playerBgHeight: evt.nativeEvent.layout.height }); + } + }} + /> + + {this.state.fullscreenMode && } + { + this.player = ref; + }} + uri={uri} + source={this.getStreamUrl(uri)} + style={playerStyle} + autoPlay + onFullscreenToggled={this.handleFullscreenToggle} + onLayout={evt => { + if (!this.state.playerHeight) { + this.setState({ playerHeight: evt.nativeEvent.layout.height }); + } + }} + /> + + { + this.scrollView = ref; + }} + > + this.setState({ showDescription: !this.state.showDescription })} + > + + + + {title} + + {isRewardContent && } + + + {viewCount === 1 && __('%view% view', { view: viewCount })} + {viewCount > 1 && __('%view% views', { view: viewCount })} + + + + + + this.handleSharePress(uri)}> + + {__('Share')} + + + {sdkReady && ( + this.setState({ showTipView: true })} + > + + {__('Tip')} + + )} + + + + + {channelName && ( + this.handleOpenUrl(channelUrl)} + /> + )} + {!channelName && ( + + {__('Anonymous')} + + )} + + + + + + {this.state.showRecommended && ( + + )} + + + + ); + } +} + +export default LiteFilePage; diff --git a/src/page/splash/index.js b/src/page/splash/index.js index b764d5c..bfa8aaf 100644 --- a/src/page/splash/index.js +++ b/src/page/splash/index.js @@ -2,6 +2,8 @@ import { connect } from 'react-redux'; import { SETTINGS, doBalanceSubscribe, doUpdateBlockHeight, doPopulateSharedUserState, doToast } from 'lbry-redux'; import { doAuthenticate, + doInstallNew, + doInstallNewWithParams, doBlackListedOutpointsSubscribe, doFilteredOutpointsSubscribe, doFetchMySubscriptions, @@ -27,6 +29,8 @@ const select = state => ({ const perform = dispatch => ({ authenticate: (appVersion, os, firebaseToken) => dispatch(doAuthenticate(appVersion, os, firebaseToken)), + installNewWithParams: (appVersion, installationId, nodeId, lbrynetVersion, os, platform, firebaseToken) => + dispatch(doInstallNewWithParams(appVersion, installationId, nodeId, lbrynetVersion, os, platform, firebaseToken)), balanceSubscribe: () => dispatch(doBalanceSubscribe()), blacklistedOutpointsSubscribe: () => dispatch(doBlackListedOutpointsSubscribe()), filteredOutpointsSubscribe: () => dispatch(doFilteredOutpointsSubscribe()), @@ -42,7 +46,4 @@ const perform = dispatch => ({ verifyUserEmailFailure: error => dispatch(doUserEmailVerifyFailure(error)), }); -export default connect( - select, - perform, -)(SplashScreen); +export default connect(select, perform)(SplashScreen); diff --git a/src/page/splash/view.js b/src/page/splash/view.js index 8f520c8..98b2601 100644 --- a/src/page/splash/view.js +++ b/src/page/splash/view.js @@ -24,8 +24,10 @@ class SplashScreen extends React.PureComponent { state = { accountUnlockFailed: false, + appVersion: null, daemonReady: false, details: __('Starting up'), + firebaseToken: null, message: __('Connecting'), isRunning: false, isLagging: false, @@ -34,12 +36,57 @@ class SplashScreen extends React.PureComponent { headersDownloadProgress: 0, shouldAuthenticate: false, subscriptionsFetched: false, + liteMode: false, + liteModeParams: {}, + }; + + initLiteMode = () => { + NativeModules.UtilityModule.getLbrynetDirectory().then(path => { + NativeModules.UtilityModule.getPlatform().then(platform => { + RNFS.readFile(`${path}/install_id`, 'utf8') + .then(installIdContent => { + // node_id is actually optional (won't be present if dht is disabled) + // RNFS.readFile(`${path}/node_id`, 'utf8').then(nodeIdContent => { + // TODO: Load proper lbrynetVersion value + this.setState( + { + liteModeParams: { + installationId: installIdContent, + nodeId: null, + lbrynetVersion: '0.62.0', + platform, + }, + }, + () => this.updateStatus(), + ); + // }).catch((err) => { console.log(err); console.log('node_id not found.'); this.lbryConnect() }); + }) + .catch(() => this.lbryConnect()); + }); + }); }; updateStatus() { - Lbry.status().then(status => { - this._updateStatusCallback(status); - }); + const { authenticate } = this.props; + const { liteMode } = this.state; + + if (liteMode) { + // authenticate immediately + NativeModules.VersionInfo.getAppVersion().then(appVersion => { + this.setState({ appVersion, shouldAuthenticate: true }); + NativeModules.Firebase.getMessagingToken() + .then(firebaseToken => { + this.setState({ firebaseToken }, () => authenticate(appVersion, Platform.OS, firebaseToken, false)); + }) + .catch(() => { + authenticate(appVersion, Platform.OS, null, false); + }); + }); + } else { + Lbry.status().then(status => { + this._updateStatusCallback(status); + }); + } } navigateToMain = () => { @@ -73,12 +120,28 @@ class SplashScreen extends React.PureComponent { }; componentWillReceiveProps(nextProps) { - const { emailToVerify, getSync, setEmailToVerify, verifyUserEmail, verifyUserEmailFailure } = this.props; - const { daemonReady, shouldAuthenticate } = this.state; + const { getSync, installNewWithParams } = this.props; + const { daemonReady, shouldAuthenticate, liteMode, liteModeParams, appVersion, firebaseToken } = this.state; const { user } = nextProps; - if (daemonReady && shouldAuthenticate && user && user.id) { + if (liteMode && user && user.id) { + this.navigateToLiteMode(); + } else if (daemonReady && shouldAuthenticate && user && user.id) { this.setState({ shouldAuthenticate: false }, () => { + // call install new after successful authentication + if (liteMode) { + const { installationId, nodeId, lbrynetVersion, platform } = liteModeParams; + installNewWithParams( + appVersion, + installationId, + nodeId, + lbrynetVersion, + Platform.OS, + platform, + firebaseToken, + ); + } + // user is authenticated, navigate to the main view if (user.has_verified_email) { NativeModules.UtilityModule.getSecureValue(Constants.KEY_WALLET_PASSWORD).then(walletPassword => { @@ -95,6 +158,21 @@ class SplashScreen extends React.PureComponent { } } + navigateToLiteMode = () => { + const { navigation } = this.props; + const { launchUrl } = this.state; + const resetAction = StackActions.reset({ + index: 0, + actions: [ + NavigationActions.navigate({ + routeName: Constants.DRAWER_ROUTE_LITE_FILE, + params: { uri: launchUrl }, + }), + ], + }); + navigation.dispatch(resetAction); + }; + getUserSettings = () => { const { populateSharedUserState } = this.props; @@ -260,32 +338,30 @@ class SplashScreen extends React.PureComponent { componentDidMount() { NativeModules.Firebase.track('app_launch', null); NativeModules.Firebase.setCurrentScreen('Splash'); + const { navigation } = this.props; + const { resetUrl } = navigation.state.params; + const isResetUrlSet = !!resetUrl; this.props.fetchRewardedContent(); Linking.getInitialURL().then(url => { + let liteMode; if (url) { - this.setState({ launchUrl: url }); + liteMode = !isResetUrlSet && url.indexOf('liteMode=1') > -1; + this.setState({ launchUrl: resetUrl || url, liteMode }); } NativeModules.UtilityModule.getNotificationLaunchTarget().then(target => { if (target) { - this.setState({ launchUrl: target }); + liteMode = !isResetUrlSet && target.indexOf('liteMode=1') > -1; + this.setState({ launchUrl: resetUrl || target, liteMode }); } // Only connect after checking initial launch url / notification launch target - Lbry.connect() - .then(() => { - this.updateStatus(); - }) - .catch(e => { - this.setState({ - isLagging: true, - message: __('Connection Failure'), - details: __( - 'We could not establish a connection to the SDK. Your data connection may be preventing LBRY from connecting. Contact hello@lbry.com if you think this is a software bug.', - ), - }); - }); + if (liteMode) { + this.initLiteMode(); + } else { + this.lbryConnect(); + } }); }); @@ -300,6 +376,22 @@ class SplashScreen extends React.PureComponent { }); } + lbryConnect = () => { + Lbry.connect() + .then(() => { + this.updateStatus(); + }) + .catch(e => { + this.setState({ + isLagging: true, + message: __('Connection Failure'), + details: __( + 'We could not establish a connection to the SDK. Your data connection may be preventing LBRY from connecting. Contact hello@lbry.com if you think this is a software bug.', + ), + }); + }); + }; + handleContinueAnywayPressed = () => { this.setState( { diff --git a/src/redux/reducers/drawer.js b/src/redux/reducers/drawer.js index dc01e74..6b5a8c5 100644 --- a/src/redux/reducers/drawer.js +++ b/src/redux/reducers/drawer.js @@ -45,12 +45,13 @@ reducers[Constants.ACTION_PUSH_DRAWER_STACK] = (state, action) => { if (routeName === Constants.DRAWER_ROUTE_SUBSCRIPTIONS && newStack.length === 1) { canPushStack = false; } + if (routeName === Constants.DRAWER_ROUTE_LITE_FILE) { + canPushStack = false; + } let lastRouteInStack; if (canPushStack) { newStack.push({ route: routeName, params }); - - // save the route lastRouteInStack = { route: routeName, params }; } diff --git a/src/utils/helper.js b/src/utils/helper.js index 38daa46..756826c 100644 --- a/src/utils/helper.js +++ b/src/utils/helper.js @@ -432,3 +432,7 @@ export function fetchReferralCode(successCallback, errorCallback) { } }); } + +export function decode(value) { + return decodeURIComponent(value).replace(/\+/g, ' '); +} diff --git a/yarn.lock b/yarn.lock index bed52b5..0cc4999 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,17 +10,17 @@ "@babel/highlight" "^7.8.3" "@babel/core@^7.0.0", "@babel/core@^7.6.2": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b" + integrity sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" + "@babel/generator" "^7.8.7" "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/parser" "^7.8.7" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -30,12 +30,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" - integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== +"@babel/generator@^7.0.0", "@babel/generator@^7.8.6", "@babel/generator@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.7.tgz#870b3cf7984f5297998152af625c4f3e341400f7" + integrity sha512-DQwjiKJqH4C3qGiyQCAExJHoZssn49JTMJgZ8SANGgVFdkupcUhLOdkAeoC6kmHZCPfoDG5M0b6cFlSN5wW7Ew== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.8.7" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -63,32 +63,33 @@ "@babel/types" "^7.8.3" esutils "^2.0.0" -"@babel/helper-call-delegate@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" - integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== +"@babel/helper-call-delegate@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.7.tgz#28a279c2e6c622a6233da548127f980751324cab" + integrity sha512-doAA5LAKhsFCR0LAFIf+r2RSMmC+m8f/oQ+URnUET/rWeEzC0yTRmAGyWkD4sSu3xwbS7MYQ2u+xlt1V5R56KQ== dependencies: "@babel/helper-hoist-variables" "^7.8.3" "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.8.7" "@babel/helper-create-class-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" - integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" + integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg== dependencies: "@babel/helper-function-name" "^7.8.3" "@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.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" "@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" - integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.6.tgz#7fa040c97fb8aebe1247a5c645330c32d083066b" + integrity sha512-bPyujWfsHhV/ztUkwGHz/RPV1T1TDEsSZDsN42JPehndA+p1KKTh3npvTadux0ZhCrytx9tvjpWNowKby3tM6A== dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-regex" "^7.8.3" regexpu-core "^4.6.0" @@ -147,15 +148,16 @@ "@babel/types" "^7.8.3" "@babel/helper-module-transforms@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" - integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.6.tgz#6a13b5eecadc35692047073a64e42977b97654a4" + integrity sha512-RDnGJSR5EFBJjG3deY0NiL0K9TO8SXxS9n/MPsbPK/s9LbQymuLNtlzvDiNS7IpecuL45cMeLVkA+HfmlrnkRg== dependencies: "@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.3" - "@babel/types" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.8.6" lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.8.3": @@ -188,15 +190,15 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-replace-supers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" - integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== +"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== dependencies: "@babel/helper-member-expression-to-functions" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" "@babel/helper-simple-access@^7.8.3": version "7.8.3" @@ -241,10 +243,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== +"@babel/parser@^7.0.0", "@babel/parser@^7.8.6", "@babel/parser@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.7.tgz#7b8facf95d25fef9534aad51c4ffecde1a61e26a" + integrity sha512-9JWls8WilDXFGxs0phaXAZgpxTZhSk/yOYH2hTHC0X1yC7Z78IJfvR1vJ+rmJKq3I35td2XzXzN6ZLYlna+r/A== "@babel/plugin-external-helpers@^7.0.0": version "7.8.3" @@ -403,16 +405,16 @@ lodash "^4.17.13" "@babel/plugin-transform-classes@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" - integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.6.tgz#77534447a477cbe5995ae4aee3e39fbc8090c46d" + integrity sha512-k9r8qRay/R6v5aWZkrEclEhKO6mc1CCQr2dLsVHBmOQiMpN6I2bpjX3vgnldUWeEI1GHVNByULVxZ4BdP4Hmdg== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-define-map" "^7.8.3" "@babel/helper-function-name" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" @@ -447,9 +449,9 @@ "@babel/plugin-syntax-flow" "^7.8.3" "@babel/plugin-transform-for-of@^7.0.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" - integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.6.tgz#a051bd1b402c61af97a27ff51b468321c7c2a085" + integrity sha512-M0pw4/1/KI5WAxPsdcUL/w2LJ7o89YHN3yLkzNjg7Yl15GlVGgzHyCU+FMeAxevHGsLVmUqbirlUIKTafPmzdw== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -501,11 +503,11 @@ "@babel/helper-replace-supers" "^7.8.3" "@babel/plugin-transform-parameters@^7.0.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" - integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.7.tgz#66fa2f1de4129b4e0447509223ac71bda4955395" + integrity sha512-brYWaEPTRimOctz2NDA3jnBbDi7SVN2T4wYuu0aqSzxC3nozFZngGaw29CJ9ZPweB7k+iFmZuoG3IVPIcXmD2g== dependencies: - "@babel/helper-call-delegate" "^7.8.3" + "@babel/helper-call-delegate" "^7.8.7" "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -541,11 +543,11 @@ "@babel/plugin-syntax-jsx" "^7.8.3" "@babel/plugin-transform-regenerator@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" - integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" + integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== dependencies: - regenerator-transform "^0.14.0" + regenerator-transform "^0.14.2" "@babel/plugin-transform-runtime@^7.0.0": version "7.8.3" @@ -587,10 +589,10 @@ "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typescript@^7.0.0", "@babel/plugin-transform-typescript@^7.5.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917" - integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ== +"@babel/plugin-transform-typescript@^7.0.0": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.7.tgz#48bccff331108a7b3a28c3a4adc89e036dc3efda" + integrity sha512-7O0UsPQVNKqpHeHLpfvOG4uXmlw+MOxYvUv6Otc9uH5SYMIxvF6eBdjkWvC3f9G+VXe0RsNExyAQBeTRug/wqQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -605,9 +607,9 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/register@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.8.3.tgz#5d5d30cfcc918437535d724b8ac1e4a60c5db1f8" - integrity sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg== + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.8.6.tgz#a1066aa6168a73a70c35ef28cc5865ccc087ea69" + integrity sha512-7IDO93fuRsbyml7bAafBQb3RcBGlCpU4hh5wADA2LJEEcYk92WkwFZ0pHyIi2fb5Auoz1714abETdZKCOxN0CQ== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" @@ -615,41 +617,41 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" - integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.8.4": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d" + integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg== dependencies: - regenerator-runtime "^0.13.2" + regenerator-runtime "^0.13.4" -"@babel/template@^7.0.0", "@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== +"@babel/template@^7.0.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" - integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" + integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" + "@babel/generator" "^7.8.6" "@babel/helper-function-name" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== +"@babel/types@^7.0.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d" + integrity sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw== dependencies: esutils "^2.0.2" lodash "^4.17.13" @@ -768,9 +770,9 @@ chalk "^3.0.0" "@react-native-community/async-storage@^1.5.1": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.8.0.tgz#5f23ad486daa284398c71f2cc94d15fb7be40bb8" - integrity sha512-R8hYm9h7MqoTa/opzBID6hhL5rseNoMJK1wG/B/Diob+JzEv7b1GMpHjsAZX2pU2o82LU73XbPJOPzfvkGFaUA== + version "1.8.1" + resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.8.1.tgz#c93e69dcf948667b207e409b8039b7edf199159b" + integrity sha512-MA1fTp4SB7OOtDmNAwds6jIpiwwty1NIoFboWjEWkoyWW35zIuxlhHxD4joSy21aWEzUVwvv6JJ2hSsP/HTb7A== "@react-native-community/cli-debugger-ui@^3.0.0": version "3.0.0" @@ -818,9 +820,9 @@ integrity sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg== "@react-native-community/cli@^3.0.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-3.2.0.tgz#f4b04b94bf96810c4a7f57379a69ebd11fd9c933" - integrity sha512-k8GmNQH/EbIIVd4VlVbFP99IRNhovWV6hhnJ3y2+FfZq18H/U6yV/t1bpI3A3QqPuAyWxk/1jBdXvP6BY/7kbw== + version "3.2.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-3.2.1.tgz#2a466801eb6080a1f73358c5d740c53c24ed8c6f" + integrity sha512-bZ/bfZ+9r1gQSxp6t7+00DcpC6vmbVYSvzUCFM/yo5k8bhsDdcy8aocscIaXXVGG+v9Edri/Q7hH9ks7L18/Rg== dependencies: "@hapi/joi" "^15.0.3" "@react-native-community/cli-debugger-ui" "^3.0.0" @@ -881,9 +883,9 @@ prettier "1.16.4" "@react-native-community/masked-view@^0.1.5": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.6.tgz#c7f2ac187c1f25aa8c30d11baa8f4398eca3bb84" - integrity sha512-PpMoeXwPUoldCRKDuSi+zK5rT+sJTW6ri6RdGPkSKRzU77Q1d9IaR0O5IKvBj0XSdL3p+dcOa05gk35aGDffBQ== + version "0.1.7" + resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.7.tgz#a65ce0702f55cb67fd777995de6fc7b3e5781903" + integrity sha512-9KbP7LTLFz9dx1heURJbO6nuVMdSjDez8znlrUzaB1nUwKVsTTwlKRuHxGUYIIkReLWrJQeCv9tidy+84z2eCw== "@react-navigation/core@^3.6.1": version "3.6.1" @@ -1053,15 +1055,15 @@ accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-jsx@^5.1.0: +acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== acorn@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" - integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.12.0" @@ -1100,11 +1102,11 @@ ansi-escapes@^3.0.0: integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-escapes@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" - integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: - type-fest "^0.8.1" + type-fest "^0.11.0" ansi-fragments@^0.2.1: version "0.2.1" @@ -2178,9 +2180,9 @@ camelcase@^5.0.0, camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30000844: - version "1.0.30001030" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz#78076c4c6d67d3e41d6eb9399853fb27fe6e44ee" - integrity sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw== + version "1.0.30001032" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001032.tgz#b8d224914e2cd7f507085583d4e38144c652bce4" + integrity sha512-8joOm7BwcpEN4BfVHtfh0hBXSAPVYk+eUIcNntGtMkUWy/6AKRCDZINCLe3kB1vHhT2vBxBF85Hh9VlPXi/qjA== capture-exit@^2.0.0: version "2.0.0" @@ -2754,9 +2756,9 @@ electron-download@^3.0.1: sumchecker "^1.2.0" electron-to-chromium@^1.3.47: - version "1.3.361" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.361.tgz#a820bf52da171c0024314745462cfe0dc944373e" - integrity sha512-OzSVjWpsRhJyr9PSAXkeloSe6e9viU2ToGt1wXlXFsGcxuI9vlsnalL+V/AM59Z2pEo3wRxIddtOGsT7Y6x/sQ== + version "1.3.370" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.370.tgz#420fba483d30ba3f7965b30ecf850fdb5f08a0bc" + integrity sha512-399cXDE9C7qoVF2CUgCA/MLflfvxbo1F0kB/pkB94426freL/JgZ0HNaloomsOfnE+VC/qgTFZqzmivSdaNfPQ== electron@^1.8.7: version "1.8.8" @@ -3100,12 +3102,12 @@ eslint@^6.5.1: v8-compile-cache "^2.0.3" espree@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" - integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== + version "6.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.0.tgz#349fef01a202bbab047748300deb37fa44da79d7" + integrity sha512-Xs8airJ7RQolnDIbLtRutmfvSsAe0xqMMAantCN/GMoqf81TFbeI1T7Jpd56qYu1uuh32dOG5W/X9uO+ghPXzA== dependencies: acorn "^7.1.0" - acorn-jsx "^5.1.0" + acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" esprima@^4.0.0: @@ -3513,9 +3515,9 @@ flow-babel-webpack-plugin@^1.1.1: lodash.merge "^4.6.0" "flow-bin@>=0.44.2 <1": - version "0.119.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.119.1.tgz#b6d763b386ec9f1085848ca7df98909d80a16bd0" - integrity sha512-mX6qjJVi7aLqR9sDf8QIHt8yYEWQbkMLw7qFoC7sM/AbJwvqFm3pATPN96thsaL9o1rrshvxJpSgoj1PJSC3KA== + version "0.120.1" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.120.1.tgz#ab051d6df71829b70a26a2c90bb81f9d43797cae" + integrity sha512-KgE+d+rKzdXzhweYVJty1QIOOZTTbtnXZf+4SLnmArLvmdfeLreQOZpeLbtq5h79m7HhDzX/HkUkoyu/fmSC2A== for-in@^1.0.2: version "1.0.2" @@ -3847,9 +3849,9 @@ home-path@^1.0.1: integrity sha512-tM1pVa+u3ZqQwIkXcWfhUlY3HWS3TsnKsfi2OHHvnhkX52s9etyktPyy1rQotkr0euWimChDq+QkQuDe8ngUlQ== hosted-git-info@^2.1.4: - version "2.8.6" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.6.tgz#3a6e6d0324c5371fc8c7ba7175e1e5d14578724d" - integrity sha512-Kp6rShEsCHhF5dD3EWKdkgVA8ix90oSUJ0VY4g9goxxa0+f4lx63muTftn0mlJ/+8IESGWyKnP//V2D7S4ZbIQ== + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== http-errors@~1.7.2: version "1.7.3" @@ -3979,22 +3981,22 @@ inquirer@^3.0.6: through "^2.3.6" inquirer@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" - integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== + version "7.0.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.6.tgz#ee4ff0ea7ecda5324656fe665878790f66df7d0c" + integrity sha512-7SVO4h+QIdMq6XcqIqrNte3gS5MzCCKZdsq9DO4PJziBFNYzP3PGFbDjgadDb//MCahzgjCxvQ/O2wa7kx9o4w== dependencies: ansi-escapes "^4.2.1" - chalk "^2.4.2" + chalk "^3.0.0" cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" figures "^3.0.0" lodash "^4.17.15" mute-stream "0.0.8" - run-async "^2.2.0" + run-async "^2.4.0" rxjs "^6.5.3" string-width "^4.1.0" - strip-ansi "^5.1.0" + strip-ansi "^6.0.0" through "^2.3.6" internal-slot@^1.0.2: @@ -4589,17 +4591,17 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" -lbry-redux@lbryio/lbry-redux#9c48cce570ee8e057068c86cb6507e1b441841ee: +lbry-redux@lbryio/lbry-redux#f6e99498d2bc5b3f07e1e2b6f668a1a48de35047: version "0.0.1" - resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/9c48cce570ee8e057068c86cb6507e1b441841ee" + resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/f6e99498d2bc5b3f07e1e2b6f668a1a48de35047" dependencies: proxy-polyfill "0.1.6" reselect "^3.0.0" uuid "^3.3.2" -lbryinc@lbryio/lbryinc#0dc8829a319a708f45a855765f70a193ccb72676: +lbryinc@lbryio/lbryinc#1fc104c2d29d1d3975234c3606e848eaa28e1b6e: version "0.0.1" - resolved "https://codeload.github.com/lbryio/lbryinc/tar.gz/0dc8829a319a708f45a855765f70a193ccb72676" + resolved "https://codeload.github.com/lbryio/lbryinc/tar.gz/1fc104c2d29d1d3975234c3606e848eaa28e1b6e" dependencies: reselect "^3.0.0" @@ -5047,10 +5049,10 @@ metro-minify-uglify@^0.56.4: dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@^0.56.4: - version "0.56.4" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.4.tgz#dcedc64b7ff5c0734839458e70eb0ebef6d063a8" - integrity sha512-CzbBDM9Rh6w8s1fq+ZqihAh7DDqUAcfo9pPww25+N/eJ7UK436Q7JdfxwdIPpBwLFn6o6MyYn+uwL9OEWBJarA== +metro-react-native-babel-preset@0.56.3: + version "0.56.3" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.3.tgz#5a1097c2f94e8ee0797a8ba2ab8f86d096f4c093" + integrity sha512-tGPzX2ZwI8vQ8SiNVBPUIgKqmaRNVB6rtJtHCBQZAYRiMbxh0NHCUoFfKBej6U5qVgxiYYHyN8oB23evG4/Oow== dependencies: "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" @@ -5088,10 +5090,10 @@ metro-react-native-babel-preset@^0.56.4: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-preset@^0.58.0: - version "0.58.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.58.0.tgz#18f48d33fe124280ffabc000ab8b42c488d762a2" - integrity sha512-MRriNW+fF6jxABsgPphocUY6mIhmCm8idcrQZ58fT3Iti2vCdtkaK32TyCGUNUptzhUe2/cbE57j4aC+eaodAA== +metro-react-native-babel-preset@^0.56.4: + version "0.56.4" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.4.tgz#dcedc64b7ff5c0734839458e70eb0ebef6d063a8" + integrity sha512-CzbBDM9Rh6w8s1fq+ZqihAh7DDqUAcfo9pPww25+N/eJ7UK436Q7JdfxwdIPpBwLFn6o6MyYn+uwL9OEWBJarA== dependencies: "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" @@ -5124,7 +5126,7 @@ metro-react-native-babel-preset@^0.58.0: "@babel/plugin-transform-spread" "^7.0.0" "@babel/plugin-transform-sticky-regex" "^7.0.0" "@babel/plugin-transform-template-literals" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-typescript" "^7.0.0" "@babel/plugin-transform-unicode-regex" "^7.0.0" "@babel/template" "^7.0.0" react-refresh "^0.4.0" @@ -6039,7 +6041,7 @@ pretty-format@^25.1.0: ansi-styles "^4.0.0" react-is "^16.12.0" -private@^0.1.6: +private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -6121,9 +6123,9 @@ query-string@6.8.1: strict-uri-encode "^2.0.0" query-string@^6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.0.tgz#dc27a05733d1be66f16d0f83dfa957270f45f66d" - integrity sha512-jS+me8X3OEGFTsF6kF+vUUMFG/d3WUCvD7bHhfZP5784nOq1pjj8yau/u86nfOncmcN6ZkSWKWkKAvv/MGxzLA== + version "6.11.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.1.tgz#ab021f275d463ce1b61e88f0ce6988b3e8fe7c2c" + integrity sha512-1ZvJOUl8ifkkBxu2ByVM/8GijMIPx+cef7u3yroO3Ogm4DOdZcF5dcrWTIlSHe3Pg/mtlt6/eFjObDfJureZZA== dependencies: decode-uri-component "^0.2.0" split-on-first "^1.0.0" @@ -6170,9 +6172,9 @@ react-devtools@^3.6.3: update-notifier "^2.1.0" react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" - integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== + version "16.13.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527" + integrity sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA== react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: version "3.0.4" @@ -6180,9 +6182,9 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-native-camera@^3.15.0: - version "3.18.0" - resolved "https://registry.yarnpkg.com/react-native-camera/-/react-native-camera-3.18.0.tgz#aa046a86ea8a691f25fd579b8abcbda1503e13fa" - integrity sha512-rLjLKJDEnI0E0nN7ZfK3GKEP37cYURh6QV2DCI1BRs9FWcETwDcgVYtQSfFEibWcGazPtsAqVDTg5LUYMFPjCA== + version "3.19.0" + resolved "https://registry.yarnpkg.com/react-native-camera/-/react-native-camera-3.19.0.tgz#32c43908d3ba398c89d21437a9dba2ebb17f3896" + integrity sha512-ef3ccKUu5nYRvc2fXlnRDsrBPBygkXoMvk0c/mrgfLYgr4X0G/8Qg7t+MOAisQ0V6RastHVygpjgAW+dxcZnyA== dependencies: prop-types "^15.6.2" @@ -6277,9 +6279,9 @@ react-native-safe-area-view@^0.14.6, react-native-safe-area-view@^0.14.8: hoist-non-react-statics "^2.3.1" react-native-screens@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.0.0.tgz#ac9db593351474790f8daa5d85b5ea337b20cfb1" - integrity sha512-T1xxYajGuiaOXjqKWKfjw9LKwoGTn69WrYZcg0jB2ZlPE6o6QqlJWtR1ytqu/4fg8pHdsk5S1iPY06mqTylrYA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.2.0.tgz#cc4cdf17426fdda97ad93a5e812a1899390f1978" + integrity sha512-a0VzxOWot7F9B/GQyDSssBRd3jUJazFnTQS61IiyReWB6aHlFhf3Xz10jBRoURXy1EMCDCHgenmTVTkKHpKyqQ== dependencies: debounce "^1.2.0" @@ -6396,9 +6398,9 @@ react-navigation-stack@^1.10.3: prop-types "^15.7.2" react-navigation-tabs@^2.7.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/react-navigation-tabs/-/react-navigation-tabs-2.8.1.tgz#1c8202945e7f7e3fe9e6cbfcd9e203027658703d" - integrity sha512-hF9rotTe/wjJRj0HCIltYm38renbp18kUBi9VG3wF6/RR9pI8dcXNPdkpL7J3wQXyq+Zri3ltHbmEKtexnWWug== + version "2.8.2" + resolved "https://registry.yarnpkg.com/react-navigation-tabs/-/react-navigation-tabs-2.8.2.tgz#b49534a77a6b15fd7f681a33007e3fff7faf3f84" + integrity sha512-eLoLh2DetaXdrKkb4wR8e6+npi0E7UGn6iHmDKHdV5M6SFdsgz5CaEXW/tg+pgvGDb/8iG6syTUV1KrUtFCZ4Q== dependencies: hoist-non-react-statics "^3.3.2" react-lifecycles-compat "^3.0.4" @@ -6406,9 +6408,9 @@ react-navigation-tabs@^2.7.0: react-native-tab-view "^2.11.0" react-navigation@^4.0.10: - version "4.2.1" - resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-4.2.1.tgz#45565e0c9e3e9266b13df27762b59281f3b0135d" - integrity sha512-/SMeEyBkgIA+cNQ/oZJdK5UvboR1c9W/8J1E3ZNh9VWCRFHGImlURphcxvCzRWI7sClTuC5/xnHeT+UU6K7wrg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-4.2.2.tgz#8183f47c1b0c7c2350e970aa652c0fee4160ef9e" + integrity sha512-/CdQsDkUEJWyKKK68txvFUJDO79+MYFX6DYTVbQ23YtSw/GD5J5pQ/E08IJy8PJNYgnWP/OhiOYg2UpNoh96RQ== dependencies: "@react-navigation/core" "^3.6.1" "@react-navigation/native" "^3.7.3" @@ -6593,6 +6595,11 @@ regenerator-runtime@^0.13.2: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== +regenerator-runtime@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz#e96bf612a3362d12bb69f7e8f74ffeab25c7ac91" + integrity sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -6602,12 +6609,13 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== +regenerator-transform@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.2.tgz#949d9d87468ff88d5a7e4734ebb994a892de1ff2" + integrity sha512-V4+lGplCM/ikqi5/mkkpJ06e9Bujq1NFmNLvsCs56zg3ZbzrnUzAtizZ24TXxtRX/W2jcdScwQCnbL0CICTFkQ== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" + private "^0.1.8" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -6846,7 +6854,7 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.2.0: +run-async@^2.2.0, run-async@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== @@ -7633,9 +7641,9 @@ trim-newlines@^1.0.0: integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= tslib@^1.8.1, tslib@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" - integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== tsutils@^3.7.0: version "3.17.1" @@ -7663,6 +7671,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"