diff --git a/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.374-1fd00e0b16.patch b/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.374-1fd00e0b16.patch new file mode 100644 index 000000000..65150a6fb --- /dev/null +++ b/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.374-1fd00e0b16.patch @@ -0,0 +1,85 @@ +diff --git a/App/components/listItems/NotificationListItem.tsx b/App/components/listItems/NotificationListItem.tsx +index 1c8a86091e207b58a620be00db905b4ba7d06539..b3b630f911d116a0f6ce441c0aae3abe770f2075 100644 +--- a/App/components/listItems/NotificationListItem.tsx ++++ b/App/components/listItems/NotificationListItem.tsx +@@ -49,6 +49,8 @@ export interface NotificationListItemProps { + notificationType: NotificationType + notification: BasicMessageRecord | CredentialExchangeRecord | ProofExchangeRecord | CustomNotificationRecord + customNotification?: CustomNotification ++ openSwipeableId?: string | null, ++ onOpenSwipeable?: (id: string | null) => void + } + + type DisplayDetails = { +@@ -83,6 +85,8 @@ const NotificationListItem: React.FC = ({ + notificationType, + notification, + customNotification, ++ openSwipeableId, ++ onOpenSwipeable, + }) => { + const navigation = useNavigation>() + const [store, dispatch] = useStore() +diff --git a/App/screens/Home.tsx b/App/screens/Home.tsx +index ad946ed3ee1af79bbdc90fa70e30eefd6782128c..638c3c8301fe441a8ec07ed74b97cef0235cf8db 100644 +--- a/App/screens/Home.tsx ++++ b/App/screens/Home.tsx +@@ -40,6 +40,8 @@ const Home: React.FC = () => { + const [showTourPopup, setShowTourPopup] = useState(false) + const screenIsFocused = useIsFocused() + ++ const [notificationItemId, setNotificationItemId] = useState(null) ++ + const styles = StyleSheet.create({ + flatlist: { + marginBottom: 35, +@@ -49,23 +51,46 @@ const Home: React.FC = () => { + const DisplayListItemType = useCallback((item: any): React.ReactNode => { + let component: React.ReactNode + if (item.type === 'BasicMessageRecord') { +- component = ++ component = ( ++ ++ ) + } else if (item.type === 'CredentialRecord') { + let notificationType = NotificationType.CredentialOffer + if (item.revocationNotification) { + notificationType = NotificationType.Revocation + } +- component = ++ component = ( ++ ++ ) + } else if (item.type === 'CustomNotification' && customNotification) { + component = ( + + ) + } else { +- component = ++ component = ( ++ ++ ) + } + return component + }, [customNotification, NotificationListItem]) diff --git a/app/App.tsx b/app/App.tsx index 4cadf4c25..241c0e399 100644 --- a/app/App.tsx +++ b/app/App.tsx @@ -13,6 +13,7 @@ import { initLanguages, ContainerProvider, MainContainer, + ActivityProvider, } from '@hyperledger/aries-bifold-core' import { OpenIDCredentialRecordProvider } from '@hyperledger/aries-bifold-core/App/modules/openid/context/OpenIDCredentialRecordProvider' import { useNavigation } from '@react-navigation/native' @@ -78,25 +79,27 @@ const App = () => { - diff --git a/app/container-imp.ts b/app/container-imp.ts index 3ab90ca48..07dd9bbba 100644 --- a/app/container-imp.ts +++ b/app/container-imp.ts @@ -159,7 +159,7 @@ export class AppContainer implements Container { // Example: Replacing button in core with custom button this._container.registerInstance(TOKENS.UTIL_LEDGERS, allLedgers) this._container.registerInstance(TOKENS.SCREEN_ONBOARDING_PAGES, pages) - this._container.registerInstance(TOKENS.OBJECT_ONBOARDING_CONFIG, defaultScreenOptionsDict) + this._container.registerInstance(TOKENS.OBJECT_SCREEN_CONFIG, defaultScreenOptionsDict) this._container.registerInstance(TOKENS.SCREEN_TERMS, { screen: TermsStack, version: TermsVersion }) this._container.registerInstance(TOKENS.COMPONENT_PIN_CREATE_HEADER, PINCreateHeader) this._container.registerInstance(TOKENS.SCREEN_USE_BIOMETRY, UseBiometry) diff --git a/app/ios/Podfile.lock b/app/ios/Podfile.lock index aecdd4ef7..02a6c21d1 100644 --- a/app/ios/Podfile.lock +++ b/app/ios/Podfile.lock @@ -330,7 +330,7 @@ PODS: - React-jsinspector (0.72.5) - React-logger (0.72.5): - glog - - "react-native-attestation (1.0.0-alpha.366+2397235e)": + - "react-native-attestation (1.0.0-alpha.374+9bf85b1b)": - RCT-Folly (= 2021.07.22.00) - React-Core - react-native-config (1.5.0): @@ -784,7 +784,7 @@ SPEC CHECKSUMS: React-jsiexecutor: ff70a72027dea5cc7d71cfcc6fad7f599f63987a React-jsinspector: aef73cbd43b70675f572214d10fa438c89bf11ba React-logger: 2e4aee3e11b3ec4fa6cfd8004610bbb3b8d6cca4 - react-native-attestation: 8089ba31bd4570abacc16a9ffc82418cd6664750 + react-native-attestation: f3a82053ed88e6069f999e951a0658843cf12d49 react-native-config: 5330c8258265c1e5fdb8c009d2cabd6badd96727 react-native-encrypted-storage: db300a3f2f0aba1e818417c1c0a6be549038deb7 react-native-get-random-values: a6ea6a8a65dc93e96e24a11105b1a9c8cfe1d72a diff --git a/app/package.json b/app/package.json index 5e6f0ee2e..9d39c735a 100644 --- a/app/package.json +++ b/app/package.json @@ -62,11 +62,11 @@ "@formatjs/intl-relativetimeformat": "9.3.1", "@hyperledger/anoncreds-react-native": "0.2.4", "@hyperledger/aries-askar-react-native": "0.2.3", - "@hyperledger/aries-bifold-core": "patch:@hyperledger/aries-bifold-core@npm%3A1.0.0-alpha.366#~/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.366-8301c15b83.patch", - "@hyperledger/aries-bifold-remote-logs": "1.0.0-alpha.366", - "@hyperledger/aries-bifold-verifier": "1.0.0-alpha.366", - "@hyperledger/aries-oca": "1.0.0-alpha.366", - "@hyperledger/aries-react-native-attestation": "1.0.0-alpha.366", + "@hyperledger/aries-bifold-core": "patch:@hyperledger/aries-bifold-core@npm%3A1.0.0-alpha.374#~/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.374-1fd00e0b16.patch", + "@hyperledger/aries-bifold-remote-logs": "1.0.0-alpha.374", + "@hyperledger/aries-bifold-verifier": "1.0.0-alpha.374", + "@hyperledger/aries-oca": "1.0.0-alpha.374", + "@hyperledger/aries-react-native-attestation": "1.0.0-alpha.374", "@hyperledger/indy-vdr-react-native": "0.2.2", "@hyperledger/indy-vdr-shared": "0.2.2", "@react-native-async-storage/async-storage": "1.15.11", diff --git a/app/src/hooks/notifications.ts b/app/src/hooks/notifications.ts index 000894e4e..a1498d422 100644 --- a/app/src/hooks/notifications.ts +++ b/app/src/hooks/notifications.ts @@ -11,6 +11,7 @@ import { import { useCredentialByState, useProofByState, useBasicMessages, useAgent } from '@credo-ts/react-hooks' import { BifoldAgent, useStore } from '@hyperledger/aries-bifold-core' import { useOpenID } from '@hyperledger/aries-bifold-core/App/modules/openid/hooks/openid' +import { OpenId4VPRequestRecord } from '@hyperledger/aries-bifold-core/App/modules/openid/types' import { BasicMessageMetadata, CredentialMetadata, @@ -138,7 +139,7 @@ export const useNotifications = ({ openIDUri, isHome = true }: NotificationsInpu ) }) - const openIDCreds: Array = [] + const openIDCreds: Array = [] if (openIDCredReceived) { openIDCreds.push(openIDCredReceived) } diff --git a/app/src/navigators/RootStack.tsx b/app/src/navigators/RootStack.tsx index 54a6a1d04..397bfae28 100644 --- a/app/src/navigators/RootStack.tsx +++ b/app/src/navigators/RootStack.tsx @@ -1,7 +1,6 @@ import { ProofState } from '@credo-ts/core' import { useAgent, useProofByState } from '@credo-ts/react-hooks' import { - AuthenticateStackParams, BifoldError, ButtonLocation, ConnectStack, @@ -16,29 +15,20 @@ import { Stacks, TOKENS, TabStacks, - connectFromScanOrDeepLink, testIdWithKey, - useAuth, useDeepLinks, useDefaultStackOptions, useServices, useStore, useTheme, - walletTimeout, } from '@hyperledger/aries-bifold-core' import HistoryStack from '@hyperledger/aries-bifold-core/App/modules/history/navigation/HistoryStack' import Chat from '@hyperledger/aries-bifold-core/App/screens/Chat' import { ProofCustomMetadata, ProofMetadata } from '@hyperledger/aries-bifold-verifier' -import { useNavigation } from '@react-navigation/native' -import { - CardStyleInterpolators, - StackCardStyleInterpolator, - StackNavigationProp, - createStackNavigator, -} from '@react-navigation/stack' -import React, { useCallback, useEffect, useRef, useState } from 'react' +import { CardStyleInterpolators, StackCardStyleInterpolator, createStackNavigator } from '@react-navigation/stack' +import React, { useEffect } from 'react' import { useTranslation } from 'react-i18next' -import { AppState, DeviceEventEmitter } from 'react-native' +import { DeviceEventEmitter } from 'react-native' import SettingStack from '../navigators/SettingStack' @@ -47,19 +37,15 @@ import { RootStackParams } from './navigators' const RootStack: React.FC = () => { const [store, dispatch] = useStore() - const { removeSavedWalletSecret } = useAuth() const { agent } = useAgent() - const appState = useRef(AppState.currentState) - const [backgroundTime, setBackgroundTime] = useState(undefined) - const [prevAppStateVisible, setPrevAppStateVisible] = useState('') - const [appStateVisible, setAppStateVisible] = useState('') - const [inBackground, setInBackground] = useState(false) const { t } = useTranslation() - const navigation = useNavigation>() const theme = useTheme() const defaultStackOptions = useDefaultStackOptions(theme) - const [splash, { enableImplicitInvitations, enableReuseConnections }, logger, OnboardingStack, loadState] = - useServices([TOKENS.SCREEN_SPLASH, TOKENS.CONFIG, TOKENS.UTIL_LOGGER, TOKENS.STACK_ONBOARDING, TOKENS.LOAD_STATE]) + const [splash, OnboardingStack, loadState] = useServices([ + TOKENS.SCREEN_SPLASH, + TOKENS.STACK_ONBOARDING, + TOKENS.LOAD_STATE, + ]) useDeepLinks() @@ -76,189 +62,17 @@ const RootStack: React.FC = () => { }) }, [declinedProofs, agent, store.preferences.useDataRetention]) - const lockoutUser = useCallback(async () => { - if (agent && store.authentication.didAuthenticate) { - // make sure agent is shutdown so wallet isn't still open - removeSavedWalletSecret() - - try { - await agent.wallet.close() - - logger.info('Closed agent wallet') - } catch (error) { - logger.error(`Error closing agent wallet, ${error}`) - } - - dispatch({ - type: DispatchAction.DID_AUTHENTICATE, - payload: [{ didAuthenticate: false }], - }) - - dispatch({ - type: DispatchAction.LOCKOUT_UPDATED, - payload: [{ displayNotification: true }], - }) - } - }, [agent, dispatch, logger, removeSavedWalletSecret, store.authentication.didAuthenticate]) - useEffect(() => { loadState(dispatch) .then(() => { dispatch({ type: DispatchAction.STATE_LOADED }) }) - .catch((err) => { - const error = new BifoldError(t('Error.Title1044'), t('Error.Message1044'), err.message, 1001) + .catch((err: unknown) => { + const error = new BifoldError(t('Error.Title1044'), t('Error.Message1044'), (err as Error).message, 1001) DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error) }) }, [dispatch, loadState, t]) - // handle deeplink events - useEffect(() => { - async function handleDeepLink(deepLink: string) { - logger.info(`Handling deeplink: ${deepLink}`) - // If it's just the general link with no params, set link inactive and do nothing - if (deepLink.search(/oob=|c_i=|d_m=|url=/) < 0) { - dispatch({ - type: DispatchAction.ACTIVE_DEEP_LINK, - payload: [undefined], - }) - return - } - - try { - await connectFromScanOrDeepLink( - deepLink, - agent, - logger, - navigation, - true, // isDeepLink - enableImplicitInvitations, - enableReuseConnections - ) - } catch (err: unknown) { - const error = new BifoldError( - t('Error.Title1039'), - t('Error.Message1039'), - (err as Error)?.message ?? err, - 1039 - ) - DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error) - } - - // set deeplink as inactive - dispatch({ - type: DispatchAction.ACTIVE_DEEP_LINK, - payload: [undefined], - }) - } - - if (inBackground) { - return - } - - if (agent?.isInitialized && store.deepLink && store.authentication.didAuthenticate) { - handleDeepLink(store.deepLink) - } - }, [ - dispatch, - agent, - logger, - navigation, - enableImplicitInvitations, - enableReuseConnections, - t, - inBackground, - agent?.isInitialized, - store.deepLink, - store.authentication.didAuthenticate, - ]) - - useEffect(() => { - if (!agent) { - return - } - - if (inBackground) { - agent.mediationRecipient - .stopMessagePickup() - .then(() => { - logger.info('Stopped agent message pickup') - }) - .catch((err) => { - logger.error(`Error stopping agent message pickup, ${err}`) - }) - - return - } - - if (!inBackground) { - agent.mediationRecipient - .initiateMessagePickup() - .then(() => { - logger.info('Resuming agent message pickup') - }) - .catch((err) => { - logger.error(`Error resuming agent message pickup, ${err}`) - }) - - return - } - }, [agent, inBackground, logger]) - - useEffect(() => { - AppState.addEventListener('change', (nextAppState) => { - if (appState.current === 'active' && ['inactive', 'background'].includes(nextAppState)) { - if (nextAppState === 'inactive') { - // on iOS this happens when any OS prompt is shown. We - // don't want to lock the user out in this case or preform - // background tasks. - return - } - - //update time that app gets put in background - setInBackground(true) - setBackgroundTime(Date.now()) - } - - setPrevAppStateVisible(appState.current) - appState.current = nextAppState - setAppStateVisible(appState.current) - }) - }, []) - - useEffect(() => { - const lockoutCheck = async () => { - //lock user out after 5 minutes - if ( - !store.preferences.preventAutoLock && - walletTimeout && - backgroundTime && - Date.now() - backgroundTime > walletTimeout - ) { - await lockoutUser() - return true - } - - return false - } - - if (appStateVisible === 'active' && ['inactive', 'background'].includes(prevAppStateVisible) && backgroundTime) { - // prevents the user from being locked out during metro reloading - setPrevAppStateVisible(appStateVisible) - - lockoutCheck().then((lockoutInProgress) => { - if (lockoutInProgress) { - const unsubscribe = navigation.addListener('state', (): void => { - setInBackground(false) - unsubscribe() - }) - } else { - setInBackground(false) - } - }) - } - }, [store.preferences.preventAutoLock, lockoutUser, navigation, appStateVisible, prevAppStateVisible, backgroundTime]) - const mainStack = () => { const Stack = createStackNavigator() diff --git a/app/src/navigators/SettingStack.tsx b/app/src/navigators/SettingStack.tsx index c46904e1a..72f3bd1e8 100644 --- a/app/src/navigators/SettingStack.tsx +++ b/app/src/navigators/SettingStack.tsx @@ -1,8 +1,7 @@ -import { useTheme } from '@hyperledger/aries-bifold-core' +import { TOKENS, useServices, useTheme } from '@hyperledger/aries-bifold-core' import { useDefaultStackOptions } from '@hyperledger/aries-bifold-core/App/navigators/defaultStackOptions' import Language from '@hyperledger/aries-bifold-core/App/screens/Language' import PINCreate from '@hyperledger/aries-bifold-core/App/screens/PINCreate' -import UseBiometry from '@hyperledger/aries-bifold-core/App/screens/UseBiometry' import { createStackNavigator } from '@react-navigation/stack' import React from 'react' import { useTranslation } from 'react-i18next' @@ -16,6 +15,7 @@ const SettingsStack: React.FC = () => { const StackSettings = createStackNavigator() const theme = useTheme() const defaultStackOptions = useDefaultStackOptions(theme) + const [UseBiometry] = useServices([TOKENS.SCREEN_USE_BIOMETRY]) const { t } = useTranslation() return ( diff --git a/app/src/navigators/TabStack.tsx b/app/src/navigators/TabStack.tsx index 0aed3c267..2184538c2 100644 --- a/app/src/navigators/TabStack.tsx +++ b/app/src/navigators/TabStack.tsx @@ -1,9 +1,13 @@ import { useAgent } from '@credo-ts/react-hooks' import { AttachTourStep, + BifoldError, CredentialStack, + DispatchAction, + EventTypes, HomeStack, TOKENS, + connectFromScanOrDeepLink, testIdWithKey, useServices, useStore, @@ -11,9 +15,11 @@ import { } from '@hyperledger/aries-bifold-core' import { TourID } from '@hyperledger/aries-bifold-core/App/types/tour' import { createBottomTabNavigator } from '@react-navigation/bottom-tabs' -import React, { ReducerAction, useEffect } from 'react' +import { useNavigation } from '@react-navigation/native' +import { StackNavigationProp } from '@react-navigation/stack' +import React, { ReducerAction, useCallback, useEffect } from 'react' import { useTranslation } from 'react-i18next' -import { Text, useWindowDimensions, View, StyleSheet, ViewStyle, AppState } from 'react-native' +import { Text, useWindowDimensions, View, StyleSheet, ViewStyle, AppState, DeviceEventEmitter } from 'react-native' import { SafeAreaView } from 'react-native-safe-area-context' import { SvgProps } from 'react-native-svg' @@ -31,9 +37,14 @@ import { TabStackParams, TabStacks } from './navigators' const TabStack: React.FC = () => { const { fontScale } = useWindowDimensions() const { agent } = useAgent() - const [, dispatch] = useStore() + const [store, dispatch] = useStore() + const navigation = useNavigation>() - const [{ useNotifications }] = useServices([TOKENS.NOTIFICATIONS]) + const [{ useNotifications }, { enableImplicitInvitations, enableReuseConnections }, logger] = useServices([ + TOKENS.NOTIFICATIONS, + TOKENS.CONFIG, + TOKENS.UTIL_LOGGER, + ]) const notifications = useNotifications({ isHome: false } as NotificationsInputProps) const { t } = useTranslation() @@ -46,6 +57,53 @@ const TabStack: React.FC = () => { }, }) + const handleDeepLink = useCallback( + async (deepLink: string) => { + logger.info(`Handling deeplink: ${deepLink}`) + + // If it's just the general link with no params, set link inactive and do nothing + if (deepLink.search(/oob=|c_i=|d_m=|url=/) < 0) { + dispatch({ + type: DispatchAction.ACTIVE_DEEP_LINK, + payload: [undefined], + }) + return + } + + try { + await connectFromScanOrDeepLink( + deepLink, + agent, + logger, + navigation, + true, // isDeepLink + enableImplicitInvitations, + enableReuseConnections + ) + } catch (err: unknown) { + const error = new BifoldError( + t('Error.Title1039'), + t('Error.Message1039'), + (err as Error)?.message ?? err, + 1039 + ) + DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error) + } finally { + dispatch({ + type: DispatchAction.ACTIVE_DEEP_LINK, + payload: [undefined], + }) + } + }, + [agent, enableImplicitInvitations, enableReuseConnections, logger, navigation, t, dispatch] + ) + + useEffect(() => { + if (store.deepLink && agent && store.authentication.didAuthenticate) { + handleDeepLink(store.deepLink) + } + }, [store.deepLink, agent, store.authentication.didAuthenticate, handleDeepLink]) + const tabBarIconContainerStyles = (focused: boolean): ViewStyle => ({ ...TabTheme.tabBarContainerStyle, borderTopWidth: 2, diff --git a/yarn.lock b/yarn.lock index aa3bde2fd..984e0436b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3236,9 +3236,9 @@ __metadata: languageName: node linkType: hard -"@hyperledger/aries-bifold-core@npm:1.0.0-alpha.366": - version: 1.0.0-alpha.366 - resolution: "@hyperledger/aries-bifold-core@npm:1.0.0-alpha.366" +"@hyperledger/aries-bifold-core@npm:1.0.0-alpha.374": + version: 1.0.0-alpha.374 + resolution: "@hyperledger/aries-bifold-core@npm:1.0.0-alpha.374" peerDependencies: "@credo-ts/anoncreds": 0.5.11 "@credo-ts/askar": 0.5.11 @@ -3273,6 +3273,7 @@ __metadata: "@react-navigation/native": 6.0.6 "@react-navigation/stack": 6.0.11 axios: ^1.4.0 + base-64: ^1.0.0 i18next: ^21.4.0 lodash.flatten: ^4.4.0 lodash.startcase: ^4.4.0 @@ -3292,14 +3293,14 @@ __metadata: react-native-fs: ^2.16.6 react-native-gesture-handler: ^1.10.3 react-native-get-random-values: ^1.7.0 - react-native-gifted-chat: "*" + react-native-gifted-chat: 2.4.0 react-native-keychain: ^8.1.1 react-native-localize: ^2.2.4 react-native-logs: ^5.1.0 react-native-orientation-locker: "*" react-native-permissions: ^4.0.1 - react-native-qrcode-svg: ^6.2.0 - react-native-reanimated: ^3.4.2 + react-native-qrcode-svg: 6.2.0 + react-native-reanimated: 3.4.2 react-native-safe-area-context: ^3.2.0 react-native-screens: ^3.24.0 react-native-splash-screen: ^3.3.0 @@ -3313,13 +3314,13 @@ __metadata: uuid: ^9.0.0 bin: bifold: bin/bifold - checksum: 15d19e08238db08e3df95a3a92a387c9dafd3d4b2d395bb8eadbc2e9f89a612aa6c793ffd1bb11d30558329d92a0be2e6c901c5e5073b6ce61f4473a06aafefb + checksum: 6d159b6898b43de45a64e562a6aa5c738d4ff7a4170bbb42872fbb6155e8fbbf0c17e68815816500cb82c1e94b39df4d66e285ec4259d72110aaedf045d26d7e languageName: node linkType: hard -"@hyperledger/aries-bifold-core@patch:@hyperledger/aries-bifold-core@npm%3A1.0.0-alpha.366#~/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.366-8301c15b83.patch": - version: 1.0.0-alpha.366 - resolution: "@hyperledger/aries-bifold-core@patch:@hyperledger/aries-bifold-core@npm%3A1.0.0-alpha.366#~/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.366-8301c15b83.patch::version=1.0.0-alpha.366&hash=5801da" +"@hyperledger/aries-bifold-core@patch:@hyperledger/aries-bifold-core@npm%3A1.0.0-alpha.374#~/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.374-1fd00e0b16.patch": + version: 1.0.0-alpha.374 + resolution: "@hyperledger/aries-bifold-core@patch:@hyperledger/aries-bifold-core@npm%3A1.0.0-alpha.374#~/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.374-1fd00e0b16.patch::version=1.0.0-alpha.374&hash=444921" peerDependencies: "@credo-ts/anoncreds": 0.5.11 "@credo-ts/askar": 0.5.11 @@ -3354,6 +3355,7 @@ __metadata: "@react-navigation/native": 6.0.6 "@react-navigation/stack": 6.0.11 axios: ^1.4.0 + base-64: ^1.0.0 i18next: ^21.4.0 lodash.flatten: ^4.4.0 lodash.startcase: ^4.4.0 @@ -3373,14 +3375,14 @@ __metadata: react-native-fs: ^2.16.6 react-native-gesture-handler: ^1.10.3 react-native-get-random-values: ^1.7.0 - react-native-gifted-chat: "*" + react-native-gifted-chat: 2.4.0 react-native-keychain: ^8.1.1 react-native-localize: ^2.2.4 react-native-logs: ^5.1.0 react-native-orientation-locker: "*" react-native-permissions: ^4.0.1 - react-native-qrcode-svg: ^6.2.0 - react-native-reanimated: ^3.4.2 + react-native-qrcode-svg: 6.2.0 + react-native-reanimated: 3.4.2 react-native-safe-area-context: ^3.2.0 react-native-screens: ^3.24.0 react-native-splash-screen: ^3.3.0 @@ -3394,13 +3396,13 @@ __metadata: uuid: ^9.0.0 bin: bifold: bin/bifold - checksum: 335ff193bcf6342164a1df438f7f219e2930bda40530158a4ddd46d2f539386b325e089924f52aff3bc7c794121f62d3998c3dc71f4c776e1b9a4abd27f23b1f + checksum: a85298f64f8baa00ece09d2b1f7490d1e537edac9078a6318e62930f64efd1f7c518ea0bc0b12ff6c5eb16564a91d0493ba8fc0eb049179dc91e63d9234b40f4 languageName: node linkType: hard -"@hyperledger/aries-bifold-remote-logs@npm:1.0.0-alpha.366": - version: 1.0.0-alpha.366 - resolution: "@hyperledger/aries-bifold-remote-logs@npm:1.0.0-alpha.366" +"@hyperledger/aries-bifold-remote-logs@npm:1.0.0-alpha.374": + version: 1.0.0-alpha.374 + resolution: "@hyperledger/aries-bifold-remote-logs@npm:1.0.0-alpha.374" peerDependencies: "@credo-ts/core": 0.5.11 axios: ^1.4.0 @@ -3408,43 +3410,43 @@ __metadata: react: ^18.2.0 react-native: ^0.72.5 react-native-logs: ^5.1.0 - checksum: 097d53218a0bfbc72a510dbacd1aa08217e1cbab8938065246808e24887ca054b60afb55dd2c445dea35009876879f2c640fac27900b320da87fd9b43d74c4aa + checksum: 5b96874bf69f1e616d602ae005980d0c5d70031942f60fceb4a02980151f00daf3b28dc1d907a4ef307721bae9f3c5ad797d3410754bd64160d40c534f47deef languageName: node linkType: hard -"@hyperledger/aries-bifold-verifier@npm:1.0.0-alpha.366": - version: 1.0.0-alpha.366 - resolution: "@hyperledger/aries-bifold-verifier@npm:1.0.0-alpha.366" +"@hyperledger/aries-bifold-verifier@npm:1.0.0-alpha.374": + version: 1.0.0-alpha.374 + resolution: "@hyperledger/aries-bifold-verifier@npm:1.0.0-alpha.374" peerDependencies: "@credo-ts/anoncreds": 0.5.11 "@credo-ts/core": 0.5.11 "@credo-ts/react-hooks": ^0.6.0 "@hyperledger/anoncreds-shared": 0.2.4 react: ^18.2.0 - checksum: 3b1551ae92293e60d720dffa86804e9a204dfbe2bb52924c8fbec0f738ec29260e8f678145413a39b91e973a5b1bb360b3e804b6723b8ae40c0f1d957841d043 + checksum: b5c36109e1950aff77a49cd8459214b2ecba2a2e4655d200aaec786a3076492ab8ab4304d3f3eb2f8143361aef320cfa1e2f7b3debd2f41371dec0047b508494 languageName: node linkType: hard -"@hyperledger/aries-oca@npm:1.0.0-alpha.366": - version: 1.0.0-alpha.366 - resolution: "@hyperledger/aries-oca@npm:1.0.0-alpha.366" +"@hyperledger/aries-oca@npm:1.0.0-alpha.374": + version: 1.0.0-alpha.374 + resolution: "@hyperledger/aries-oca@npm:1.0.0-alpha.374" dependencies: "@credo-ts/anoncreds": "npm:0.5.11" "@credo-ts/core": "npm:0.5.11" axios: "npm:^1.4.0" lodash.startcase: "npm:^4.4.0" react-native-fs: "npm:^2.16.6" - checksum: 362938f1a8b8f83c823ac8d42c30dd5d0b2220026db3b5ba8dc276e5ad58bf1f8b7f16f461c5b9b9d4ef88fda325d538bf042852dbcdaa6e3b7d4bb47a8d6b26 + checksum: e064472d43869e890936bca26f4b496d08c5388cdddb0d122e1c10ab0f1b73c3d95d1ebdd854125b602e910a848e14ce9aacc44f0de110458399d668879263d4 languageName: node linkType: hard -"@hyperledger/aries-react-native-attestation@npm:1.0.0-alpha.366": - version: 1.0.0-alpha.366 - resolution: "@hyperledger/aries-react-native-attestation@npm:1.0.0-alpha.366" +"@hyperledger/aries-react-native-attestation@npm:1.0.0-alpha.374": + version: 1.0.0-alpha.374 + resolution: "@hyperledger/aries-react-native-attestation@npm:1.0.0-alpha.374" peerDependencies: react: "*" react-native: "*" - checksum: 1e53b21855228a69b36e28770e05797be79dcc3022d89d400ba0f6cf3cbb260815f27f02b933dd15ff06afbfb4477ae512f1ca84639e88a7832daa31a4422e6f + checksum: 582439793675b13465a5b002091ca57bda8eee0f5b9465f922a8d43dce78636eb6136654c608e01972109055d9f5e281ffbe966d36692d8343ffcaf21fc7923e languageName: node linkType: hard @@ -19774,11 +19776,11 @@ __metadata: "@formatjs/intl-relativetimeformat": "npm:9.3.1" "@hyperledger/anoncreds-react-native": "npm:0.2.4" "@hyperledger/aries-askar-react-native": "npm:0.2.3" - "@hyperledger/aries-bifold-core": "patch:@hyperledger/aries-bifold-core@npm%3A1.0.0-alpha.366#~/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.366-8301c15b83.patch" - "@hyperledger/aries-bifold-remote-logs": "npm:1.0.0-alpha.366" - "@hyperledger/aries-bifold-verifier": "npm:1.0.0-alpha.366" - "@hyperledger/aries-oca": "npm:1.0.0-alpha.366" - "@hyperledger/aries-react-native-attestation": "npm:1.0.0-alpha.366" + "@hyperledger/aries-bifold-core": "patch:@hyperledger/aries-bifold-core@npm%3A1.0.0-alpha.374#~/.yarn/patches/@hyperledger-aries-bifold-core-npm-1.0.0-alpha.374-1fd00e0b16.patch" + "@hyperledger/aries-bifold-remote-logs": "npm:1.0.0-alpha.374" + "@hyperledger/aries-bifold-verifier": "npm:1.0.0-alpha.374" + "@hyperledger/aries-oca": "npm:1.0.0-alpha.374" + "@hyperledger/aries-react-native-attestation": "npm:1.0.0-alpha.374" "@hyperledger/indy-vdr-react-native": "npm:0.2.2" "@hyperledger/indy-vdr-shared": "npm:0.2.2" "@react-native-async-storage/async-storage": "npm:1.15.11"