@bifold/core 2.4.5 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/contexts/reducers/store.js +3 -2
- package/lib/commonjs/contexts/reducers/store.js.map +1 -1
- package/lib/commonjs/index.js +119 -104
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/screens/AttemptLockout.js +27 -35
- package/lib/commonjs/screens/AttemptLockout.js.map +1 -1
- package/lib/commonjs/screens/ContactDetails.js +1 -1
- package/lib/commonjs/screens/ContactDetails.js.map +1 -1
- package/lib/commonjs/screens/CredentialDetails.js +1 -1
- package/lib/commonjs/screens/CredentialDetails.js.map +1 -1
- package/lib/commonjs/screens/JSONDetails.js +6 -3
- package/lib/commonjs/screens/JSONDetails.js.map +1 -1
- package/lib/commonjs/screens/MobileVerifierLoading.js +4 -3
- package/lib/commonjs/screens/MobileVerifierLoading.js.map +1 -1
- package/lib/commonjs/screens/PINCreate.js +3 -10
- package/lib/commonjs/screens/PINCreate.js.map +1 -1
- package/lib/commonjs/screens/WhatAreContacts.js +3 -2
- package/lib/commonjs/screens/WhatAreContacts.js.map +1 -1
- package/lib/module/contexts/reducers/store.js +3 -2
- package/lib/module/contexts/reducers/store.js.map +1 -1
- package/lib/module/index.js +42 -45
- package/lib/module/index.js.map +1 -1
- package/lib/module/screens/AttemptLockout.js +28 -36
- package/lib/module/screens/AttemptLockout.js.map +1 -1
- package/lib/module/screens/ContactDetails.js +1 -1
- package/lib/module/screens/ContactDetails.js.map +1 -1
- package/lib/module/screens/CredentialDetails.js +1 -1
- package/lib/module/screens/CredentialDetails.js.map +1 -1
- package/lib/module/screens/JSONDetails.js +6 -3
- package/lib/module/screens/JSONDetails.js.map +1 -1
- package/lib/module/screens/MobileVerifierLoading.js +4 -3
- package/lib/module/screens/MobileVerifierLoading.js.map +1 -1
- package/lib/module/screens/PINCreate.js +3 -10
- package/lib/module/screens/PINCreate.js.map +1 -1
- package/lib/module/screens/WhatAreContacts.js +3 -2
- package/lib/module/screens/WhatAreContacts.js.map +1 -1
- package/lib/typescript/src/contexts/reducers/store.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +57 -61
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/screens/AttemptLockout.d.ts.map +1 -1
- package/lib/typescript/src/screens/JSONDetails.d.ts.map +1 -1
- package/lib/typescript/src/screens/MobileVerifierLoading.d.ts.map +1 -1
- package/lib/typescript/src/screens/PINCreate.d.ts.map +1 -1
- package/lib/typescript/src/screens/WhatAreContacts.d.ts.map +1 -1
- package/lib/typescript/src/types/navigators.d.ts +1 -1
- package/lib/typescript/src/types/navigators.d.ts.map +1 -1
- package/package.json +3 -4
- package/src/App.tsx +0 -79
- package/src/animated-components.ts +0 -30
- package/src/assets/fonts/MaterialIcons.ttf +0 -0
- package/src/assets/icons/code.svg +0 -4
- package/src/assets/icons/large-arrow.svg +0 -5
- package/src/assets/icons/pencil.svg +0 -15
- package/src/assets/icons/trash.svg +0 -31
- package/src/assets/img/Artwork_1024x1024.png +0 -0
- package/src/assets/img/HistoryCardAcceptedIcon.svg +0 -4
- package/src/assets/img/HistoryCardExpiredIcon.svg +0 -4
- package/src/assets/img/HistoryCardRevokedIcon.svg +0 -4
- package/src/assets/img/HistoryInformationSentIcon.svg +0 -4
- package/src/assets/img/HistoryPinUpdatedIcon.svg +0 -4
- package/src/assets/img/IconChevronRight.svg +0 -5
- package/src/assets/img/activity-indicator-circle.svg +0 -90
- package/src/assets/img/app-lockout.svg +0 -1
- package/src/assets/img/biometrics.svg +0 -74
- package/src/assets/img/chat-loading.svg +0 -1
- package/src/assets/img/check-in-circle.svg +0 -18
- package/src/assets/img/connection-pending.svg +0 -112
- package/src/assets/img/contact-book.svg +0 -21
- package/src/assets/img/credential-card.svg +0 -18
- package/src/assets/img/credential-declined.svg +0 -28
- package/src/assets/img/credential-in-hand.svg +0 -48
- package/src/assets/img/credential-list.svg +0 -60
- package/src/assets/img/credential-pending.svg +0 -96
- package/src/assets/img/credential-success.svg +0 -48
- package/src/assets/img/delete-notification.svg +0 -1
- package/src/assets/img/empty-wallet.svg +0 -23
- package/src/assets/img/error-filled.svg +0 -12
- package/src/assets/img/exclamation-mark.svg +0 -17
- package/src/assets/img/home-center-img.svg +0 -71
- package/src/assets/img/icon-credential-offer-dark.svg +0 -7
- package/src/assets/img/icon-credential-offer-light.svg +0 -7
- package/src/assets/img/icon-info-recieved-dark.svg +0 -8
- package/src/assets/img/icon-info-recieved-light.svg +0 -8
- package/src/assets/img/icon-info-sent-dark.svg +0 -8
- package/src/assets/img/icon-info-sent-light.svg +0 -8
- package/src/assets/img/icon-proof-request-dark.svg +0 -11
- package/src/assets/img/icon-proof-request-light.svg +0 -11
- package/src/assets/img/information-received.svg +0 -1
- package/src/assets/img/logo-large.png +0 -0
- package/src/assets/img/logo-large@2x.png +0 -0
- package/src/assets/img/logo-large@3x.png +0 -0
- package/src/assets/img/logo.svg +0 -15
- package/src/assets/img/message-text-icon-outline.svg +0 -1
- package/src/assets/img/message-text-icon.svg +0 -1
- package/src/assets/img/no_information_shared.svg +0 -36
- package/src/assets/img/preface.svg +0 -15
- package/src/assets/img/proof-declined.svg +0 -66
- package/src/assets/img/proof-pending.svg +0 -61
- package/src/assets/img/proof-success.svg +0 -72
- package/src/assets/img/push-notifications.svg +0 -1
- package/src/assets/img/qrcode-scan-icon.svg +0 -1
- package/src/assets/img/scan-share.svg +0 -102
- package/src/assets/img/secure-check.svg +0 -4
- package/src/assets/img/secure-image.svg +0 -64
- package/src/assets/img/update-available.svg +0 -26
- package/src/assets/img/verifier-request-declined.svg +0 -34
- package/src/assets/img/wallet-back.svg +0 -20
- package/src/assets/img/wallet-front.svg +0 -32
- package/src/assets/img/wallet-icon-outline.svg +0 -1
- package/src/assets/img/wallet-icon.svg +0 -1
- package/src/assets/img/wallet.svg +0 -43
- package/src/assets/oca-bundles.json +0 -174
- package/src/components/animated/ButtonLoading.tsx +0 -32
- package/src/components/animated/ConnectionLoading.tsx +0 -53
- package/src/components/animated/CredentialAdded.tsx +0 -72
- package/src/components/animated/CredentialPending.tsx +0 -63
- package/src/components/animated/LoadingIndicator.tsx +0 -49
- package/src/components/animated/PresentationLoading.tsx +0 -52
- package/src/components/animated/RecordLoading.tsx +0 -75
- package/src/components/animated/SendingProof.tsx +0 -53
- package/src/components/animated/SentProof.tsx +0 -72
- package/src/components/buttons/Button-api.tsx +0 -46
- package/src/components/buttons/Button.tsx +0 -125
- package/src/components/buttons/HeaderHome.tsx +0 -25
- package/src/components/buttons/IconButton.tsx +0 -93
- package/src/components/buttons/InfoIcon.tsx +0 -35
- package/src/components/buttons/SettingsMenu.tsx +0 -26
- package/src/components/buttons/ToggleButton.tsx +0 -93
- package/src/components/buttons/index.ts +0 -4
- package/src/components/chat/ActionSlider.tsx +0 -104
- package/src/components/chat/ChatActions.tsx +0 -33
- package/src/components/chat/ChatBubble.tsx +0 -20
- package/src/components/chat/ChatEvent.tsx +0 -31
- package/src/components/chat/ChatMessage.tsx +0 -142
- package/src/components/chat/MessageInput.tsx +0 -46
- package/src/components/chat/index.ts +0 -4
- package/src/components/forms/WalletNameForm.tsx +0 -148
- package/src/components/index.ts +0 -4
- package/src/components/inputs/BiometryControl.tsx +0 -190
- package/src/components/inputs/BulletPoint.tsx +0 -32
- package/src/components/inputs/CheckBoxRow.tsx +0 -67
- package/src/components/inputs/InlineErrorText.tsx +0 -60
- package/src/components/inputs/LimitedTextInput.tsx +0 -71
- package/src/components/inputs/PINInput.tsx +0 -175
- package/src/components/inputs/SingleSelectBlock.tsx +0 -53
- package/src/components/listItems/ContactCredentialListItem.tsx +0 -79
- package/src/components/listItems/ContactListItem.tsx +0 -121
- package/src/components/listItems/NotificationListItem.tsx +0 -514
- package/src/components/misc/AvatarView.tsx +0 -33
- package/src/components/misc/CardWatermark.tsx +0 -52
- package/src/components/misc/ConnectionAlert.tsx +0 -123
- package/src/components/misc/ConnectionImage.tsx +0 -45
- package/src/components/misc/ContentGradient.tsx +0 -40
- package/src/components/misc/CredentialCard.tsx +0 -161
- package/src/components/misc/CredentialCard10.tsx +0 -329
- package/src/components/misc/CredentialCard11.tsx +0 -701
- package/src/components/misc/CredentialCard11ActionFooter.tsx +0 -55
- package/src/components/misc/CredentialCard11Issuer.tsx +0 -74
- package/src/components/misc/CredentialCard11Logo.tsx +0 -61
- package/src/components/misc/EmptyList.tsx +0 -27
- package/src/components/misc/EmptyListContacts.tsx +0 -55
- package/src/components/misc/ErrorBoundary.tsx +0 -200
- package/src/components/misc/FauxHeader.tsx +0 -75
- package/src/components/misc/InfoBox.tsx +0 -283
- package/src/components/misc/NoNewUpdates.tsx +0 -38
- package/src/components/misc/PINHeader.tsx +0 -25
- package/src/components/misc/PINValidationHelper.tsx +0 -48
- package/src/components/misc/Pagination.tsx +0 -114
- package/src/components/misc/QRRenderer.tsx +0 -53
- package/src/components/misc/QRScanner.tsx +0 -395
- package/src/components/misc/QRScannerTorch.tsx +0 -74
- package/src/components/misc/ScanCamera.tsx +0 -86
- package/src/components/misc/ScanTab.tsx +0 -45
- package/src/components/misc/SharedProofData.tsx +0 -98
- package/src/components/misc/UnorderedList.tsx +0 -28
- package/src/components/misc/VerifierCredentialCard.tsx +0 -378
- package/src/components/misc/index.ts +0 -2
- package/src/components/modals/AlertModal.tsx +0 -42
- package/src/components/modals/AppGuideModal.tsx +0 -142
- package/src/components/modals/CameraDisclosureModal.tsx +0 -126
- package/src/components/modals/CommonRemoveModal.tsx +0 -337
- package/src/components/modals/DeveloperModal.tsx +0 -32
- package/src/components/modals/DismissiblePopupModal.tsx +0 -169
- package/src/components/modals/ErrorModal.tsx +0 -107
- package/src/components/modals/ImageModal.tsx +0 -80
- package/src/components/modals/NetInfoModal.tsx +0 -35
- package/src/components/modals/PopupModal.tsx +0 -56
- package/src/components/modals/ProofCancelModal.tsx +0 -79
- package/src/components/modals/SafeAreaModal.tsx +0 -17
- package/src/components/record/Record.tsx +0 -100
- package/src/components/record/RecordBinaryField.tsx +0 -55
- package/src/components/record/RecordDateIntField.tsx +0 -63
- package/src/components/record/RecordField.tsx +0 -154
- package/src/components/record/RecordFooter.tsx +0 -17
- package/src/components/record/RecordHeader.tsx +0 -17
- package/src/components/record/RecordRemove.tsx +0 -66
- package/src/components/texts/HeaderTitle.tsx +0 -25
- package/src/components/texts/HighlightTextBox.tsx +0 -41
- package/src/components/texts/InfoTextBox.tsx +0 -129
- package/src/components/texts/Link.tsx +0 -41
- package/src/components/texts/Text.tsx +0 -21
- package/src/components/texts/ThemedText.tsx +0 -24
- package/src/components/toast/BaseToast.tsx +0 -128
- package/src/components/toast/ToastConfig.tsx +0 -21
- package/src/components/tour/AttachTourStep.tsx +0 -73
- package/src/components/tour/CredentialOfferTourSteps.tsx +0 -41
- package/src/components/tour/CredentialsTourSteps.tsx +0 -41
- package/src/components/tour/HomeTourSteps.tsx +0 -104
- package/src/components/tour/ProofRequestTourSteps.tsx +0 -41
- package/src/components/tour/SpotCutout.tsx +0 -65
- package/src/components/tour/TourBox.tsx +0 -255
- package/src/components/tour/TourOverlay.tsx +0 -134
- package/src/components/views/Banner.tsx +0 -181
- package/src/components/views/CredentialCardLogo.tsx +0 -77
- package/src/components/views/CredentialDetailPrimaryHeader.tsx +0 -107
- package/src/components/views/CredentialDetailSecondaryHeader.tsx +0 -60
- package/src/components/views/HeaderWithBanner.tsx +0 -17
- package/src/components/views/HomeFooterView.tsx +0 -110
- package/src/components/views/HomeHeaderView.tsx +0 -12
- package/src/components/views/KeyboardView.tsx +0 -41
- package/src/components/views/LoadingPlaceholder.tsx +0 -168
- package/src/components/views/LoadingView.tsx +0 -29
- package/src/components/views/ProgressBar.tsx +0 -53
- package/src/components/views/PushNotificationsContent.tsx +0 -51
- package/src/components/views/PushNotificationsDisabledContent.tsx +0 -47
- package/src/configs/ledgers/indy/index.ts +0 -8
- package/src/configs/ledgers/indy/ledgers.json +0 -51
- package/src/constants.ts +0 -107
- package/src/container-api.ts +0 -247
- package/src/container-impl.ts +0 -243
- package/src/contexts/activity.tsx +0 -145
- package/src/contexts/animated-components.ts +0 -9
- package/src/contexts/auth.tsx +0 -240
- package/src/contexts/index.ts +0 -3
- package/src/contexts/navigation.tsx +0 -19
- package/src/contexts/network.tsx +0 -125
- package/src/contexts/reducers/index.ts +0 -3
- package/src/contexts/reducers/store.ts +0 -754
- package/src/contexts/store.tsx +0 -103
- package/src/contexts/theme.tsx +0 -51
- package/src/contexts/tour/tour-context.tsx +0 -160
- package/src/contexts/tour/tour-provider.tsx +0 -160
- package/src/hooks/bundle-resolver.ts +0 -95
- package/src/hooks/chat-messages.tsx +0 -263
- package/src/hooks/connections.ts +0 -37
- package/src/hooks/credential-card-styles.ts +0 -144
- package/src/hooks/credentials.ts +0 -11
- package/src/hooks/deep-links.ts +0 -49
- package/src/hooks/developer-mode.ts +0 -25
- package/src/hooks/lockout.ts +0 -77
- package/src/hooks/notifications.ts +0 -108
- package/src/hooks/oob.ts +0 -17
- package/src/hooks/proof-request-templates.ts +0 -40
- package/src/hooks/proofs.ts +0 -32
- package/src/hooks/screen-capture.ts +0 -52
- package/src/hooks/useBifoldAgentSetup.ts +0 -169
- package/src/hooks/useOnboardingState.ts +0 -53
- package/src/hooks/usePINValidation.ts +0 -98
- package/src/index.ts +0 -239
- package/src/layout/ScreenLayout.tsx +0 -53
- package/src/localization/en/en.json +0 -951
- package/src/localization/en/index.ts +0 -3
- package/src/localization/fr/fr.json +0 -933
- package/src/localization/fr/index.ts +0 -3
- package/src/localization/index.ts +0 -66
- package/src/localization/pt-br/index.ts +0 -3
- package/src/localization/pt-br/pt-br.json +0 -911
- package/src/modules/history/context/historyManager.tsx +0 -247
- package/src/modules/history/index.ts +0 -2
- package/src/modules/history/navigation/HistoryStack.tsx +0 -29
- package/src/modules/history/services/queue.service.tsx +0 -31
- package/src/modules/history/types/index.ts +0 -92
- package/src/modules/history/ui/HistoryPage.tsx +0 -133
- package/src/modules/history/ui/HistorySettings.tsx +0 -183
- package/src/modules/history/ui/assets/img/HistoryCardAcceptedIcon.svg +0 -4
- package/src/modules/history/ui/assets/img/HistoryCardExpiredIcon.svg +0 -4
- package/src/modules/history/ui/assets/img/HistoryCardRevokedIcon.svg +0 -4
- package/src/modules/history/ui/assets/img/HistoryInformationSentIcon.svg +0 -4
- package/src/modules/history/ui/assets/img/HistoryPinUpdatedIcon.svg +0 -4
- package/src/modules/history/ui/assets/img/IconChevronRight.svg +0 -3
- package/src/modules/history/ui/components/BulletPoint.tsx +0 -49
- package/src/modules/history/ui/components/HistoryListItem.tsx +0 -251
- package/src/modules/history/ui/components/HistoryMenu.tsx +0 -25
- package/src/modules/history/ui/components/SingleSelectBlock.tsx +0 -72
- package/src/modules/openid/components/CredentialRowCard.tsx +0 -64
- package/src/modules/openid/components/OpenIDCredentialCard.tsx +0 -276
- package/src/modules/openid/context/OpenIDCredentialRecordProvider.tsx +0 -296
- package/src/modules/openid/display.tsx +0 -467
- package/src/modules/openid/displayProof.tsx +0 -86
- package/src/modules/openid/hooks/openid.tsx +0 -111
- package/src/modules/openid/metadata.tsx +0 -59
- package/src/modules/openid/offerResolve.tsx +0 -281
- package/src/modules/openid/resolverProof.tsx +0 -286
- package/src/modules/openid/screens/OpenIDCredentialDetails.tsx +0 -214
- package/src/modules/openid/screens/OpenIDCredentialOffer.tsx +0 -192
- package/src/modules/openid/screens/OpenIDProofChangeCredential.tsx +0 -133
- package/src/modules/openid/screens/OpenIDProofPresentation.tsx +0 -423
- package/src/modules/openid/types.tsx +0 -111
- package/src/modules/openid/utils/utils.tsx +0 -119
- package/src/navigators/ConnectStack.tsx +0 -68
- package/src/navigators/ContactStack.tsx +0 -91
- package/src/navigators/CredentialStack.tsx +0 -48
- package/src/navigators/DeliveryStack.tsx +0 -76
- package/src/navigators/HomeStack.tsx +0 -37
- package/src/navigators/MainStack.tsx +0 -146
- package/src/navigators/NotificationStack.tsx +0 -56
- package/src/navigators/OnboardingScreens.ts +0 -142
- package/src/navigators/OnboardingStack.tsx +0 -205
- package/src/navigators/ProofRequestStack.tsx +0 -113
- package/src/navigators/RootStack.tsx +0 -71
- package/src/navigators/SettingStack.tsx +0 -174
- package/src/navigators/TabStack.tsx +0 -304
- package/src/navigators/defaultLayoutOptions.tsx +0 -17
- package/src/navigators/defaultStackOptions.tsx +0 -102
- package/src/navigators/index.ts +0 -27
- package/src/onboarding.ts +0 -90
- package/src/screens/AttemptLockout.tsx +0 -153
- package/src/screens/AutoLock.tsx +0 -140
- package/src/screens/Biometry.tsx +0 -54
- package/src/screens/Chat.tsx +0 -141
- package/src/screens/ConfigureMediator.tsx +0 -160
- package/src/screens/Connection.tsx +0 -394
- package/src/screens/ContactDetails.tsx +0 -350
- package/src/screens/CredentialDetails.tsx +0 -473
- package/src/screens/CredentialOffer.tsx +0 -334
- package/src/screens/CredentialOfferAccept.tsx +0 -189
- package/src/screens/DataRetention.tsx +0 -91
- package/src/screens/Developer.tsx +0 -289
- package/src/screens/Home.tsx +0 -173
- package/src/screens/JSONDetails.tsx +0 -102
- package/src/screens/Language.tsx +0 -97
- package/src/screens/ListContacts.tsx +0 -112
- package/src/screens/ListCredentials.tsx +0 -135
- package/src/screens/ListProofRequests.tsx +0 -148
- package/src/screens/MobileVerifierLoading.tsx +0 -106
- package/src/screens/NameWallet.tsx +0 -9
- package/src/screens/Onboarding.tsx +0 -162
- package/src/screens/OnboardingPages.tsx +0 -160
- package/src/screens/PINChange.tsx +0 -249
- package/src/screens/PINCreate.tsx +0 -185
- package/src/screens/PINEnter.tsx +0 -432
- package/src/screens/PINExplainer.tsx +0 -85
- package/src/screens/PINVerify.tsx +0 -195
- package/src/screens/PasteUrl.tsx +0 -140
- package/src/screens/Preface.tsx +0 -78
- package/src/screens/ProofChangeCredential.tsx +0 -179
- package/src/screens/ProofDetails.tsx +0 -348
- package/src/screens/ProofRequest.tsx +0 -999
- package/src/screens/ProofRequestAccept.tsx +0 -133
- package/src/screens/ProofRequestDetails.tsx +0 -270
- package/src/screens/ProofRequestUsageHistory.tsx +0 -152
- package/src/screens/ProofRequesting.tsx +0 -245
- package/src/screens/PushNotifications.tsx +0 -59
- package/src/screens/RenameContact.tsx +0 -155
- package/src/screens/RenameWallet.tsx +0 -26
- package/src/screens/Scan.tsx +0 -145
- package/src/screens/ScanHelp.tsx +0 -48
- package/src/screens/Settings.tsx +0 -415
- package/src/screens/Splash.tsx +0 -80
- package/src/screens/Terms.tsx +0 -127
- package/src/screens/ToggleBiometry.tsx +0 -153
- package/src/screens/TogglePushNotifications.tsx +0 -118
- package/src/screens/Tours.tsx +0 -93
- package/src/screens/UpdateAvailable.tsx +0 -119
- package/src/screens/WhatAreContacts.tsx +0 -71
- package/src/services/bifoldLogger.ts +0 -3
- package/src/services/keychain.ts +0 -184
- package/src/services/logger.ts +0 -89
- package/src/services/storage.ts +0 -136
- package/src/theme-builder.ts +0 -157
- package/src/theme.interface.ts +0 -580
- package/src/theme.ts +0 -1346
- package/src/types/attempt-lockout-config.ts +0 -8
- package/src/types/attestation.ts +0 -17
- package/src/types/chat.ts +0 -4
- package/src/types/config.ts +0 -64
- package/src/types/contact-details.ts +0 -5
- package/src/types/credential-list-footer.ts +0 -3
- package/src/types/credential-status.ts +0 -3
- package/src/types/credentials.ts +0 -7
- package/src/types/decline.ts +0 -5
- package/src/types/error.ts +0 -40
- package/src/types/fn.ts +0 -2
- package/src/types/genesis.ts +0 -35
- package/src/types/index.ts +0 -2
- package/src/types/metadata.ts +0 -16
- package/src/types/navigators.ts +0 -239
- package/src/types/notification.ts +0 -24
- package/src/types/permissions.ts +0 -2
- package/src/types/proof-items.ts +0 -32
- package/src/types/react-i18next.d.ts +0 -10
- package/src/types/remove.ts +0 -8
- package/src/types/security.ts +0 -32
- package/src/types/settings.ts +0 -28
- package/src/types/state.ts +0 -97
- package/src/types/tour.ts +0 -20
- package/src/types/version-check.ts +0 -18
- package/src/utils/PINValidation.ts +0 -98
- package/src/utils/agent.ts +0 -128
- package/src/utils/anonCredsProofRequestMapper.ts +0 -205
- package/src/utils/contacts.ts +0 -59
- package/src/utils/cred-def.ts +0 -33
- package/src/utils/credential.ts +0 -37
- package/src/utils/crypto.ts +0 -12
- package/src/utils/fileCache.ts +0 -152
- package/src/utils/helpers.ts +0 -1292
- package/src/utils/ledger.ts +0 -212
- package/src/utils/luminance.ts +0 -40
- package/src/utils/mediatorhelpers.ts +0 -71
- package/src/utils/migration.ts +0 -40
- package/src/utils/network.tsx +0 -55
- package/src/utils/oca.ts +0 -173
- package/src/utils/parsers.tsx +0 -111
- package/src/utils/proofBundle.ts +0 -220
- package/src/utils/schema.ts +0 -28
- package/src/utils/testable.ts +0 -17
package/src/container-impl.ts
DELETED
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
import { DefaultOCABundleResolver } from '@bifold/oca/build/legacy'
|
|
2
|
-
import { getProofRequestTemplates } from '@bifold/verifier'
|
|
3
|
-
import { Agent } from '@credo-ts/core'
|
|
4
|
-
import { createContext, useContext } from 'react'
|
|
5
|
-
import { DependencyContainer } from 'tsyringe'
|
|
6
|
-
|
|
7
|
-
import * as bundle from './assets/oca-bundles.json'
|
|
8
|
-
import Button from './components/buttons/Button'
|
|
9
|
-
import ContactCredentialListItem from './components/listItems/ContactCredentialListItem'
|
|
10
|
-
import ContactListItem from './components/listItems/ContactListItem'
|
|
11
|
-
import NotificationListItem from './components/listItems/NotificationListItem'
|
|
12
|
-
import ConnectionAlert from './components/misc/ConnectionAlert'
|
|
13
|
-
import EmptyList from './components/misc/EmptyList'
|
|
14
|
-
import NoNewUpdates from './components/misc/NoNewUpdates'
|
|
15
|
-
import PINHeader from './components/misc/PINHeader'
|
|
16
|
-
import Record from './components/record/Record'
|
|
17
|
-
import HomeFooterView from './components/views/HomeFooterView'
|
|
18
|
-
import { Banner } from './components/views/Banner'
|
|
19
|
-
import HomeHeaderView from './components/views/HomeHeaderView'
|
|
20
|
-
import defaultIndyLedgers from './configs/ledgers/indy'
|
|
21
|
-
import { LocalStorageKeys, PINRules } from './constants'
|
|
22
|
-
import { Container, TokenMapping, TOKENS } from './container-api'
|
|
23
|
-
import { DispatchAction, ReducerAction } from './contexts/reducers/store'
|
|
24
|
-
import { defaultState } from './contexts/store'
|
|
25
|
-
import { useNotifications } from './hooks/notifications'
|
|
26
|
-
import useBifoldAgentSetup from './hooks/useBifoldAgentSetup'
|
|
27
|
-
import { Locales } from './localization'
|
|
28
|
-
import { IHistoryManager } from './modules/history'
|
|
29
|
-
import HistoryManager from './modules/history/context/historyManager'
|
|
30
|
-
import OnboardingStack from './navigators/OnboardingStack'
|
|
31
|
-
import { DefaultScreenLayoutOptions } from './navigators/defaultLayoutOptions'
|
|
32
|
-
import { DefaultScreenOptionsDictionary } from './navigators/defaultStackOptions'
|
|
33
|
-
import { generateOnboardingWorkflowSteps } from './onboarding'
|
|
34
|
-
import Biometry from './screens/Biometry'
|
|
35
|
-
import Developer from './screens/Developer'
|
|
36
|
-
import Onboarding from './screens/Onboarding'
|
|
37
|
-
import OnboardingPages from './screens/OnboardingPages'
|
|
38
|
-
import PINExplainer from './screens/PINExplainer'
|
|
39
|
-
import Preface from './screens/Preface'
|
|
40
|
-
import Scan from './screens/Scan'
|
|
41
|
-
import Splash from './screens/Splash'
|
|
42
|
-
import ScreenTerms, { TermsVersion } from './screens/Terms'
|
|
43
|
-
import ToggleBiometry from './screens/ToggleBiometry'
|
|
44
|
-
import UpdateAvailable from './screens/UpdateAvailable'
|
|
45
|
-
import { loadLoginAttempt } from './services/keychain'
|
|
46
|
-
import { BifoldLogger } from './services/logger'
|
|
47
|
-
import { bifoldLoggerInstance } from './services/bifoldLogger'
|
|
48
|
-
import { PersistentStorage } from './services/storage'
|
|
49
|
-
import { Config, HistoryEventsLoggerConfig } from './types/config'
|
|
50
|
-
import { InlineErrorPosition } from './types/error'
|
|
51
|
-
import {
|
|
52
|
-
Migration as MigrationState,
|
|
53
|
-
PersistentState,
|
|
54
|
-
Preferences as PreferencesState,
|
|
55
|
-
State,
|
|
56
|
-
Onboarding as StoreOnboardingState,
|
|
57
|
-
Tours as ToursState,
|
|
58
|
-
} from './types/state'
|
|
59
|
-
|
|
60
|
-
export const defaultConfig: Config = {
|
|
61
|
-
PINSecurity: {
|
|
62
|
-
rules: PINRules,
|
|
63
|
-
displayHelper: false,
|
|
64
|
-
},
|
|
65
|
-
settings: [],
|
|
66
|
-
enableChat: true,
|
|
67
|
-
enableTours: false,
|
|
68
|
-
preventScreenCapture: false,
|
|
69
|
-
supportedLanguages: [Locales.en, Locales.fr, Locales.ptBr],
|
|
70
|
-
showPreface: false,
|
|
71
|
-
disableOnboardingSkip: false,
|
|
72
|
-
disableContactsInSettings: false,
|
|
73
|
-
internetReachabilityUrls: ['https://clients3.google.com/generate_204'],
|
|
74
|
-
whereToUseWalletUrl: 'https://example.com',
|
|
75
|
-
showScanHelp: true,
|
|
76
|
-
showScanButton: true,
|
|
77
|
-
showDetailsInfo: true,
|
|
78
|
-
contactDetailsOptions: {
|
|
79
|
-
showConnectedTime: true,
|
|
80
|
-
enableEditContactName: true,
|
|
81
|
-
enableCredentialList: false,
|
|
82
|
-
},
|
|
83
|
-
appUpdateConfig: {
|
|
84
|
-
appleAppStoreUrl: 'https://example.com',
|
|
85
|
-
googlePlayStoreUrl: 'https://example.com',
|
|
86
|
-
},
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export const defaultHistoryEventsLogger: HistoryEventsLoggerConfig = {
|
|
90
|
-
logAttestationAccepted: true,
|
|
91
|
-
logAttestationRefused: true,
|
|
92
|
-
logAttestationRemoved: true,
|
|
93
|
-
logInformationSent: true,
|
|
94
|
-
logInformationNotSent: true,
|
|
95
|
-
logConnection: true,
|
|
96
|
-
logConnectionRemoved: true,
|
|
97
|
-
logAttestationRevoked: true,
|
|
98
|
-
logPinChanged: true,
|
|
99
|
-
logToggleBiometry: true,
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export class MainContainer implements Container {
|
|
103
|
-
public static readonly TOKENS = TOKENS
|
|
104
|
-
private _container: DependencyContainer
|
|
105
|
-
private log?: BifoldLogger
|
|
106
|
-
private storage: PersistentStorage<PersistentState>
|
|
107
|
-
|
|
108
|
-
public constructor(container: DependencyContainer, log?: BifoldLogger) {
|
|
109
|
-
this._container = container
|
|
110
|
-
this.log = log
|
|
111
|
-
this.storage = new PersistentStorage(log)
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
public get container(): DependencyContainer {
|
|
115
|
-
return this._container
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
public init(): Container {
|
|
119
|
-
this.log?.info(`Initializing Bifold container`)
|
|
120
|
-
|
|
121
|
-
this._container.registerInstance(TOKENS.SCREEN_PREFACE, Preface)
|
|
122
|
-
this._container.registerInstance(TOKENS.SCREEN_DEVELOPER, Developer)
|
|
123
|
-
this._container.registerInstance(TOKENS.SCREEN_TERMS, { screen: ScreenTerms, version: TermsVersion })
|
|
124
|
-
this._container.registerInstance(TOKENS.SCREEN_SPLASH, Splash)
|
|
125
|
-
this._container.registerInstance(TOKENS.SCREEN_UPDATE_AVAILABLE, UpdateAvailable)
|
|
126
|
-
this._container.registerInstance(TOKENS.SCREEN_ONBOARDING_PAGES, OnboardingPages)
|
|
127
|
-
this._container.registerInstance(TOKENS.COMPONENT_PIN_HEADER, PINHeader)
|
|
128
|
-
this._container.registerInstance(TOKENS.SCREEN_BIOMETRY, Biometry)
|
|
129
|
-
this._container.registerInstance(TOKENS.SCREEN_TOGGLE_BIOMETRY, ToggleBiometry)
|
|
130
|
-
this._container.registerInstance(TOKENS.SCREEN_SCAN, Scan)
|
|
131
|
-
this._container.registerInstance(TOKENS.SCREEN_ONBOARDING_ITEM, Onboarding)
|
|
132
|
-
this._container.registerInstance(TOKENS.SCREEN_ONBOARDING, Onboarding)
|
|
133
|
-
this._container.registerInstance(TOKENS.SCREEN_PIN_EXPLAINER, PINExplainer)
|
|
134
|
-
this._container.registerInstance(TOKENS.HOOK_USE_AGENT_SETUP, useBifoldAgentSetup)
|
|
135
|
-
this._container.registerInstance(TOKENS.STACK_ONBOARDING, OnboardingStack)
|
|
136
|
-
this._container.registerInstance(TOKENS.COMP_BUTTON, Button)
|
|
137
|
-
this._container.registerInstance(TOKENS.GROUP_BY_REFERENT, false)
|
|
138
|
-
this._container.registerInstance(TOKENS.HISTORY_ENABLED, false)
|
|
139
|
-
this._container.registerInstance(TOKENS.HISTORY_EVENTS_LOGGER, defaultHistoryEventsLogger)
|
|
140
|
-
this._container.registerInstance(TOKENS.CRED_HELP_ACTION_OVERRIDES, [])
|
|
141
|
-
this._container.registerInstance(TOKENS.OBJECT_SCREEN_CONFIG, DefaultScreenOptionsDictionary)
|
|
142
|
-
this._container.registerInstance(TOKENS.OBJECT_LAYOUT_CONFIG, DefaultScreenLayoutOptions)
|
|
143
|
-
this._container.registerInstance(TOKENS.UTIL_LOGGER, bifoldLoggerInstance)
|
|
144
|
-
this._container.registerInstance(TOKENS.UTIL_OCA_RESOLVER, new DefaultOCABundleResolver(bundle))
|
|
145
|
-
this._container.registerInstance(TOKENS.UTIL_LEDGERS, defaultIndyLedgers)
|
|
146
|
-
this._container.registerInstance(TOKENS.UTIL_PROOF_TEMPLATE, getProofRequestTemplates)
|
|
147
|
-
this._container.registerInstance(TOKENS.UTIL_ATTESTATION_MONITOR, { useValue: undefined })
|
|
148
|
-
this._container.registerInstance(TOKENS.UTIL_APP_VERSION_MONITOR, { useValue: undefined })
|
|
149
|
-
this._container.registerInstance(TOKENS.NOTIFICATIONS, {
|
|
150
|
-
useNotifications,
|
|
151
|
-
})
|
|
152
|
-
this._container.registerInstance(TOKENS.NOTIFICATIONS_LIST_ITEM, NotificationListItem)
|
|
153
|
-
this._container.registerInstance(TOKENS.CONFIG, defaultConfig)
|
|
154
|
-
this._container.registerInstance(TOKENS.COMPONENT_CRED_LIST_HEADER_RIGHT, () => null)
|
|
155
|
-
this._container.registerInstance(TOKENS.COMPONENT_CRED_LIST_OPTIONS, () => null)
|
|
156
|
-
this._container.registerInstance(TOKENS.COMPONENT_CRED_LIST_FOOTER, () => null)
|
|
157
|
-
this._container.registerInstance(TOKENS.COMPONENT_HOME_HEADER, HomeHeaderView)
|
|
158
|
-
this._container.registerInstance(TOKENS.COMPONENT_NOTIFICATION_BANNER, Banner)
|
|
159
|
-
this._container.registerInstance(TOKENS.COMPONENT_HOME_NOTIFICATIONS_EMPTY_LIST, NoNewUpdates)
|
|
160
|
-
this._container.registerInstance(TOKENS.COMPONENT_HOME_FOOTER, HomeFooterView)
|
|
161
|
-
this._container.registerInstance(TOKENS.COMPONENT_CRED_EMPTY_LIST, EmptyList)
|
|
162
|
-
this._container.registerInstance(TOKENS.COMPONENT_RECORD, Record)
|
|
163
|
-
this._container.registerInstance(TOKENS.COMPONENT_CONTACT_LIST_ITEM, ContactListItem)
|
|
164
|
-
this._container.registerInstance(TOKENS.COMPONENT_CONTACT_DETAILS_CRED_LIST_ITEM, ContactCredentialListItem)
|
|
165
|
-
this._container.registerInstance(TOKENS.COMPONENT_CONNECTION_ALERT, ConnectionAlert)
|
|
166
|
-
this._container.registerInstance(TOKENS.CACHE_CRED_DEFS, [])
|
|
167
|
-
this._container.registerInstance(TOKENS.CACHE_SCHEMAS, [])
|
|
168
|
-
this._container.registerInstance(TOKENS.INLINE_ERRORS, {
|
|
169
|
-
enabled: true,
|
|
170
|
-
hasErrorIcon: true,
|
|
171
|
-
position: InlineErrorPosition.Above,
|
|
172
|
-
})
|
|
173
|
-
this._container.registerInstance(TOKENS.FN_ONBOARDING_DONE, (dispatch: React.Dispatch<ReducerAction<unknown>>) => {
|
|
174
|
-
return () => {
|
|
175
|
-
dispatch({
|
|
176
|
-
type: DispatchAction.DID_COMPLETE_TUTORIAL,
|
|
177
|
-
})
|
|
178
|
-
}
|
|
179
|
-
})
|
|
180
|
-
this._container.registerInstance(TOKENS.FN_LOAD_HISTORY, (agent: Agent<any>): IHistoryManager => {
|
|
181
|
-
return new HistoryManager(agent)
|
|
182
|
-
})
|
|
183
|
-
this._container.registerInstance(TOKENS.CUSTOM_NAV_STACK_1, false)
|
|
184
|
-
this._container.registerInstance(TOKENS.LOAD_STATE, async (dispatch: React.Dispatch<ReducerAction<unknown>>) => {
|
|
185
|
-
const loadState = async <Type>(key: LocalStorageKeys, updateVal: (newVal: Type) => void) => {
|
|
186
|
-
const data = await this.storage.getValueForKey(key)
|
|
187
|
-
if (data) {
|
|
188
|
-
// @ts-expect-error Fix complicated type error
|
|
189
|
-
updateVal(data)
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
let loginAttempt = defaultState.loginAttempt
|
|
194
|
-
let preferences = defaultState.preferences
|
|
195
|
-
let migration = defaultState.migration
|
|
196
|
-
let tours = defaultState.tours
|
|
197
|
-
let onboarding = defaultState.onboarding
|
|
198
|
-
|
|
199
|
-
await Promise.all([
|
|
200
|
-
loadLoginAttempt().then((data) => {
|
|
201
|
-
if (data) {
|
|
202
|
-
loginAttempt = data
|
|
203
|
-
}
|
|
204
|
-
}),
|
|
205
|
-
loadState<PreferencesState>(LocalStorageKeys.Preferences, (val) => (preferences = val)),
|
|
206
|
-
loadState<MigrationState>(LocalStorageKeys.Migration, (val) => (migration = val)),
|
|
207
|
-
loadState<ToursState>(LocalStorageKeys.Tours, (val) => (tours = val)),
|
|
208
|
-
loadState<StoreOnboardingState>(LocalStorageKeys.Onboarding, (val) => (onboarding = val)),
|
|
209
|
-
])
|
|
210
|
-
|
|
211
|
-
const state = {
|
|
212
|
-
loginAttempt: { ...defaultState.loginAttempt, ...loginAttempt },
|
|
213
|
-
preferences: { ...defaultState.preferences, ...preferences },
|
|
214
|
-
migration: { ...defaultState.migration, ...migration },
|
|
215
|
-
tours: { ...defaultState.tours, ...tours },
|
|
216
|
-
onboarding: { ...defaultState.onboarding, ...onboarding },
|
|
217
|
-
} as State
|
|
218
|
-
|
|
219
|
-
dispatch({ type: DispatchAction.STATE_DISPATCH, payload: [state] })
|
|
220
|
-
})
|
|
221
|
-
|
|
222
|
-
this._container.registerInstance(TOKENS.ONBOARDING, generateOnboardingWorkflowSteps)
|
|
223
|
-
|
|
224
|
-
return this
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
public resolve<K extends keyof TokenMapping>(token: K): TokenMapping[K] {
|
|
228
|
-
return this._container.resolve(token)
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
public resolveAll<K extends keyof TokenMapping, T extends K[]>(
|
|
232
|
-
tokens: [...T]
|
|
233
|
-
): { [I in keyof T]: TokenMapping[T[I]] } {
|
|
234
|
-
return tokens.map((key) => this.resolve(key)!) as { [I in keyof T]: TokenMapping[T[I]] }
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
export const SystemContext = createContext<Container | undefined>(undefined)
|
|
239
|
-
|
|
240
|
-
export const SystemProvider = SystemContext.Provider
|
|
241
|
-
|
|
242
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
243
|
-
export const useSystem = () => useContext(SystemContext)!
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { useAgent } from '@credo-ts/react-hooks'
|
|
2
|
-
import React, {
|
|
3
|
-
createContext,
|
|
4
|
-
PropsWithChildren,
|
|
5
|
-
useCallback,
|
|
6
|
-
useContext,
|
|
7
|
-
useEffect,
|
|
8
|
-
useMemo,
|
|
9
|
-
useRef,
|
|
10
|
-
useState,
|
|
11
|
-
} from 'react'
|
|
12
|
-
import { AppState, AppStateStatus, PanResponder, View } from 'react-native'
|
|
13
|
-
import { defaultAutoLockTime } from '../constants'
|
|
14
|
-
import { TOKENS, useServices } from '../container-api'
|
|
15
|
-
import { LockoutReason, useAuth } from './auth'
|
|
16
|
-
import { useStore } from './store'
|
|
17
|
-
|
|
18
|
-
// number of minutes before the timeout action is triggered
|
|
19
|
-
// a value of 0 will never trigger the lock out action and
|
|
20
|
-
// an undefined value will default to 5 minutes
|
|
21
|
-
export const AutoLockTime = {
|
|
22
|
-
OneMinute: 1,
|
|
23
|
-
ThreeMinutes: 3,
|
|
24
|
-
FiveMinutes: 5,
|
|
25
|
-
Never: 0,
|
|
26
|
-
} as const
|
|
27
|
-
|
|
28
|
-
export interface ActivityContext {
|
|
29
|
-
appStateStatus: AppStateStatus
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export const ActivityContext = createContext<ActivityContext>(null as unknown as ActivityContext)
|
|
33
|
-
|
|
34
|
-
export const ActivityProvider: React.FC<PropsWithChildren> = ({ children }) => {
|
|
35
|
-
const [logger] = useServices([TOKENS.UTIL_LOGGER])
|
|
36
|
-
const [store] = useStore()
|
|
37
|
-
const { agent } = useAgent()
|
|
38
|
-
const { lockOutUser } = useAuth()
|
|
39
|
-
const lastActiveTimeRef = useRef<number | undefined>(undefined)
|
|
40
|
-
const timeoutInMilliseconds = useRef<number>((store.preferences.autoLockTime ?? defaultAutoLockTime) * 60000)
|
|
41
|
-
const inactivityTimeoutRef = useRef<NodeJS.Timeout | null>(null)
|
|
42
|
-
const prevAppStateStatusRef = useRef(AppState.currentState)
|
|
43
|
-
const [appStateStatus, setAppStateStatus] = useState<AppStateStatus>(AppState.currentState)
|
|
44
|
-
|
|
45
|
-
if (!agent) {
|
|
46
|
-
throw new Error('ActivityProvider must be used within agent context provider')
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const clearInactivityTimeoutIfExists = useCallback(() => {
|
|
50
|
-
if (inactivityTimeoutRef.current) {
|
|
51
|
-
clearTimeout(inactivityTimeoutRef.current)
|
|
52
|
-
}
|
|
53
|
-
}, [])
|
|
54
|
-
|
|
55
|
-
const resetInactivityTimeout = useCallback(
|
|
56
|
-
(milliseconds: number) => {
|
|
57
|
-
clearInactivityTimeoutIfExists()
|
|
58
|
-
lastActiveTimeRef.current = Date.now()
|
|
59
|
-
|
|
60
|
-
// do not set timeout if timeout duration is set to 0
|
|
61
|
-
if (milliseconds > 0) {
|
|
62
|
-
// create new timeout
|
|
63
|
-
inactivityTimeoutRef.current = setTimeout(() => lockOutUser(LockoutReason.Timeout), milliseconds)
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
[clearInactivityTimeoutIfExists, lockOutUser]
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
useEffect(() => {
|
|
70
|
-
// listener for backgrounding / foregrounding
|
|
71
|
-
const eventSubscription = AppState.addEventListener('change', async (nextAppState) => {
|
|
72
|
-
// if going into the background
|
|
73
|
-
if (['active', 'inactive'].includes(prevAppStateStatusRef.current) && nextAppState === 'background') {
|
|
74
|
-
// remove timeout when backgrounded as timeout refs can be lost when app is backgrounded
|
|
75
|
-
clearInactivityTimeoutIfExists()
|
|
76
|
-
try {
|
|
77
|
-
await agent.mediationRecipient.stopMessagePickup()
|
|
78
|
-
logger.info('Stopped agent message pickup')
|
|
79
|
-
} catch (err) {
|
|
80
|
-
logger.error(`Error stopping agent message pickup, ${err}`)
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// if coming to the foreground
|
|
85
|
-
if (prevAppStateStatusRef.current === 'background' && ['active', 'inactive'].includes(nextAppState)) {
|
|
86
|
-
// if app was in background for longer than allowed time, lock out user
|
|
87
|
-
if (
|
|
88
|
-
lastActiveTimeRef.current &&
|
|
89
|
-
Date.now() - lastActiveTimeRef.current >= timeoutInMilliseconds.current &&
|
|
90
|
-
timeoutInMilliseconds.current > 0
|
|
91
|
-
) {
|
|
92
|
-
lockOutUser(LockoutReason.Timeout)
|
|
93
|
-
} else {
|
|
94
|
-
// otherwise restart message pickup
|
|
95
|
-
try {
|
|
96
|
-
await agent.mediationRecipient.initiateMessagePickup()
|
|
97
|
-
logger.info('Restarted agent message pickup')
|
|
98
|
-
} catch (err) {
|
|
99
|
-
logger.error(`Error restarting agent message pickup, ${err}`)
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// app coming into the foreground is 'user activity', reset timeout
|
|
104
|
-
resetInactivityTimeout(timeoutInMilliseconds.current)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
prevAppStateStatusRef.current = nextAppState
|
|
108
|
-
setAppStateStatus(nextAppState)
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
// initial timeout setup
|
|
112
|
-
resetInactivityTimeout(timeoutInMilliseconds.current)
|
|
113
|
-
|
|
114
|
-
return () => {
|
|
115
|
-
clearInactivityTimeoutIfExists()
|
|
116
|
-
eventSubscription.remove()
|
|
117
|
-
}
|
|
118
|
-
}, [clearInactivityTimeoutIfExists, lockOutUser, resetInactivityTimeout, agent, logger])
|
|
119
|
-
|
|
120
|
-
useEffect(() => {
|
|
121
|
-
// user has updated settings for auto lock time
|
|
122
|
-
timeoutInMilliseconds.current = store.preferences.autoLockTime * 60000
|
|
123
|
-
}, [store.preferences.autoLockTime])
|
|
124
|
-
|
|
125
|
-
const panResponder = useMemo(() => {
|
|
126
|
-
return PanResponder.create({
|
|
127
|
-
onStartShouldSetPanResponderCapture: () => {
|
|
128
|
-
// some user interaction detected, reset timeout
|
|
129
|
-
resetInactivityTimeout(timeoutInMilliseconds.current)
|
|
130
|
-
|
|
131
|
-
// returns false so the PanResponder doesn't consume the touch event
|
|
132
|
-
return false
|
|
133
|
-
},
|
|
134
|
-
})
|
|
135
|
-
}, [resetInactivityTimeout])
|
|
136
|
-
|
|
137
|
-
return (
|
|
138
|
-
<ActivityContext.Provider value={{ appStateStatus }}>
|
|
139
|
-
<View style={{ flex: 1 }} {...panResponder.panHandlers}>
|
|
140
|
-
{children}
|
|
141
|
-
</View>
|
|
142
|
-
</ActivityContext.Provider>
|
|
143
|
-
)
|
|
144
|
-
}
|
|
145
|
-
export const useActivity = () => useContext(ActivityContext)
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createContext, useContext } from 'react'
|
|
2
|
-
|
|
3
|
-
import { AnimatedComponents, animatedComponents } from '../animated-components'
|
|
4
|
-
|
|
5
|
-
export const AnimatedComponentsContext = createContext<AnimatedComponents>(animatedComponents)
|
|
6
|
-
|
|
7
|
-
export const AnimatedComponentsProvider = AnimatedComponentsContext.Provider
|
|
8
|
-
|
|
9
|
-
export const useAnimatedComponents = () => useContext(AnimatedComponentsContext)
|
package/src/contexts/auth.tsx
DELETED
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
// Dont remove the following import line or the pin check will fail when opening askar waller
|
|
2
|
-
import '@hyperledger/aries-askar-react-native'
|
|
3
|
-
|
|
4
|
-
import 'reflect-metadata'
|
|
5
|
-
import { DeviceEventEmitter } from 'react-native'
|
|
6
|
-
import { AskarWallet } from '@credo-ts/askar'
|
|
7
|
-
import { Agent, ConsoleLogger, LogLevel, SigningProviderRegistry } from '@credo-ts/core'
|
|
8
|
-
import { agentDependencies } from '@credo-ts/react-native'
|
|
9
|
-
import React, { createContext, useCallback, useContext, useState } from 'react'
|
|
10
|
-
import { useTranslation } from 'react-i18next'
|
|
11
|
-
|
|
12
|
-
import { DispatchAction } from './reducers/store'
|
|
13
|
-
import { useStore } from './store'
|
|
14
|
-
import {
|
|
15
|
-
isBiometricsActive,
|
|
16
|
-
loadWalletSalt,
|
|
17
|
-
loadWalletSecret,
|
|
18
|
-
secretForPIN,
|
|
19
|
-
storeWalletSecret,
|
|
20
|
-
wipeWalletKey,
|
|
21
|
-
} from '../services/keychain'
|
|
22
|
-
import { WalletSecret } from '../types/security'
|
|
23
|
-
import { hashPIN } from '../utils/crypto'
|
|
24
|
-
import { migrateToAskar } from '../utils/migration'
|
|
25
|
-
import { BifoldError } from '../types/error'
|
|
26
|
-
import { EventTypes } from '../constants'
|
|
27
|
-
|
|
28
|
-
export interface AuthContext {
|
|
29
|
-
lockOutUser: (reason: LockoutReason) => void
|
|
30
|
-
checkWalletPIN: (PIN: string) => Promise<boolean>
|
|
31
|
-
getWalletSecret: () => Promise<WalletSecret | undefined>
|
|
32
|
-
walletSecret?: WalletSecret
|
|
33
|
-
removeSavedWalletSecret: () => void
|
|
34
|
-
disableBiometrics: () => Promise<void>
|
|
35
|
-
setPIN: (PIN: string) => Promise<void>
|
|
36
|
-
commitWalletToKeychain: (useBiometry: boolean) => Promise<boolean>
|
|
37
|
-
isBiometricsActive: () => Promise<boolean>
|
|
38
|
-
verifyPIN: (PIN: string) => Promise<boolean>
|
|
39
|
-
rekeyWallet: (agent: Agent, oldPin: string, newPin: string, useBiometry?: boolean) => Promise<boolean>
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export const AuthContext = createContext<AuthContext>(null as unknown as AuthContext)
|
|
43
|
-
export enum LockoutReason {
|
|
44
|
-
Timeout = 'Timeout',
|
|
45
|
-
Logout = 'Logout',
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export const AuthProvider: React.FC<React.PropsWithChildren> = ({ children }) => {
|
|
49
|
-
const [walletSecret, setWalletSecret] = useState<WalletSecret>()
|
|
50
|
-
const [store, dispatch] = useStore()
|
|
51
|
-
const { t } = useTranslation()
|
|
52
|
-
|
|
53
|
-
const setPIN = useCallback(async (PIN: string): Promise<void> => {
|
|
54
|
-
const secret = await secretForPIN(PIN)
|
|
55
|
-
await storeWalletSecret(secret)
|
|
56
|
-
}, [])
|
|
57
|
-
|
|
58
|
-
const getWalletSecret = useCallback(async (): Promise<WalletSecret | undefined> => {
|
|
59
|
-
if (walletSecret) {
|
|
60
|
-
return walletSecret
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const secret = await loadWalletSecret(t('Biometry.UnlockPromptTitle'), t('Biometry.UnlockPromptDescription'))
|
|
64
|
-
|
|
65
|
-
setWalletSecret(secret)
|
|
66
|
-
|
|
67
|
-
return secret
|
|
68
|
-
}, [t, walletSecret])
|
|
69
|
-
|
|
70
|
-
const commitWalletToKeychain = useCallback(
|
|
71
|
-
async (useBiometry: boolean): Promise<boolean> => {
|
|
72
|
-
const secret = await getWalletSecret()
|
|
73
|
-
if (!secret) {
|
|
74
|
-
return false
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// set did authenticate to true if we can get wallet credentials
|
|
78
|
-
dispatch({
|
|
79
|
-
type: DispatchAction.DID_AUTHENTICATE,
|
|
80
|
-
})
|
|
81
|
-
if (useBiometry) {
|
|
82
|
-
await storeWalletSecret(secret, useBiometry)
|
|
83
|
-
} else {
|
|
84
|
-
// erase wallet key if biometrics is disabled
|
|
85
|
-
await wipeWalletKey(useBiometry)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return true
|
|
89
|
-
},
|
|
90
|
-
[dispatch, getWalletSecret]
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
const checkWalletPIN = useCallback(
|
|
94
|
-
async (PIN: string): Promise<boolean> => {
|
|
95
|
-
try {
|
|
96
|
-
const secret = await loadWalletSalt()
|
|
97
|
-
|
|
98
|
-
if (!secret?.salt) {
|
|
99
|
-
return false
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const hash = await hashPIN(PIN, secret.salt)
|
|
103
|
-
|
|
104
|
-
if (!store.migration.didMigrateToAskar) {
|
|
105
|
-
await migrateToAskar(secret.id, hash)
|
|
106
|
-
dispatch({
|
|
107
|
-
type: DispatchAction.DID_MIGRATE_TO_ASKAR,
|
|
108
|
-
})
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// NOTE: We create an instance of AskarWallet, which is the underlying wallet that powers the app
|
|
112
|
-
// we then open that instance with the provided id and key to verify their integrity
|
|
113
|
-
const askarWallet = new AskarWallet(
|
|
114
|
-
new ConsoleLogger(LogLevel.off),
|
|
115
|
-
new agentDependencies.FileSystem(),
|
|
116
|
-
new SigningProviderRegistry([])
|
|
117
|
-
)
|
|
118
|
-
await askarWallet.open({
|
|
119
|
-
id: secret.id,
|
|
120
|
-
key: hash,
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
await askarWallet.close()
|
|
124
|
-
|
|
125
|
-
setWalletSecret({ id: secret.id, key: hash, salt: secret.salt })
|
|
126
|
-
return true
|
|
127
|
-
} catch (e) {
|
|
128
|
-
return false
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
[dispatch, store.migration.didMigrateToAskar]
|
|
132
|
-
)
|
|
133
|
-
|
|
134
|
-
const removeSavedWalletSecret = useCallback(() => {
|
|
135
|
-
setWalletSecret(undefined)
|
|
136
|
-
}, [])
|
|
137
|
-
|
|
138
|
-
const lockOutUser = useCallback(
|
|
139
|
-
(reason: LockoutReason) => {
|
|
140
|
-
removeSavedWalletSecret()
|
|
141
|
-
dispatch({
|
|
142
|
-
type: DispatchAction.DID_AUTHENTICATE,
|
|
143
|
-
payload: [false],
|
|
144
|
-
})
|
|
145
|
-
dispatch({
|
|
146
|
-
type: DispatchAction.LOCKOUT_UPDATED,
|
|
147
|
-
payload: [{ displayNotification: reason === LockoutReason.Timeout }],
|
|
148
|
-
})
|
|
149
|
-
},
|
|
150
|
-
[removeSavedWalletSecret, dispatch]
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
const disableBiometrics = useCallback(async () => {
|
|
154
|
-
await wipeWalletKey(true)
|
|
155
|
-
}, [])
|
|
156
|
-
|
|
157
|
-
const rekeyWallet = useCallback(
|
|
158
|
-
async (agent: Agent, oldPin: string, newPin: string, useBiometry?: boolean): Promise<boolean> => {
|
|
159
|
-
try {
|
|
160
|
-
if (!agent) {
|
|
161
|
-
// no agent set, cannot rekey the wallet
|
|
162
|
-
return false
|
|
163
|
-
}
|
|
164
|
-
// argon2.hash can sometimes generate an error
|
|
165
|
-
const secret = await loadWalletSalt()
|
|
166
|
-
if (!secret) {
|
|
167
|
-
return false
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const oldHash = await hashPIN(oldPin, secret.salt)
|
|
171
|
-
const newSecret = await secretForPIN(newPin)
|
|
172
|
-
const newHash = await hashPIN(newPin, newSecret.salt)
|
|
173
|
-
if (!newSecret.key) {
|
|
174
|
-
return false
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
await agent.wallet.close()
|
|
178
|
-
// wallet.rotateKey calls open under the hood
|
|
179
|
-
await agent.wallet.rotateKey({ id: secret.id, key: oldHash, rekey: newHash })
|
|
180
|
-
|
|
181
|
-
await storeWalletSecret(newSecret, useBiometry)
|
|
182
|
-
setWalletSecret(newSecret)
|
|
183
|
-
} catch {
|
|
184
|
-
return false
|
|
185
|
-
}
|
|
186
|
-
return true
|
|
187
|
-
},
|
|
188
|
-
[]
|
|
189
|
-
)
|
|
190
|
-
|
|
191
|
-
const verifyPIN = useCallback(
|
|
192
|
-
async (PIN: string) => {
|
|
193
|
-
try {
|
|
194
|
-
const credentials = await getWalletSecret()
|
|
195
|
-
if (!credentials) {
|
|
196
|
-
throw new Error('Get wallet credentials error')
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
const key = await hashPIN(PIN, credentials.salt)
|
|
200
|
-
if (credentials.key !== key) {
|
|
201
|
-
return false
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return true
|
|
205
|
-
} catch (err: unknown) {
|
|
206
|
-
const error = new BifoldError(
|
|
207
|
-
t('Error.Title1042'),
|
|
208
|
-
t('Error.Message1042'),
|
|
209
|
-
(err as Error)?.message ?? err,
|
|
210
|
-
1042
|
|
211
|
-
)
|
|
212
|
-
DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error)
|
|
213
|
-
return false
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
[getWalletSecret, t]
|
|
217
|
-
)
|
|
218
|
-
|
|
219
|
-
return (
|
|
220
|
-
<AuthContext.Provider
|
|
221
|
-
value={{
|
|
222
|
-
lockOutUser,
|
|
223
|
-
checkWalletPIN,
|
|
224
|
-
getWalletSecret,
|
|
225
|
-
removeSavedWalletSecret,
|
|
226
|
-
disableBiometrics,
|
|
227
|
-
commitWalletToKeychain,
|
|
228
|
-
setPIN,
|
|
229
|
-
isBiometricsActive,
|
|
230
|
-
rekeyWallet,
|
|
231
|
-
walletSecret,
|
|
232
|
-
verifyPIN,
|
|
233
|
-
}}
|
|
234
|
-
>
|
|
235
|
-
{children}
|
|
236
|
-
</AuthContext.Provider>
|
|
237
|
-
)
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
export const useAuth = () => useContext(AuthContext)
|
package/src/contexts/index.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { NavigationContainer, NavigationContainerRef } from '@react-navigation/native'
|
|
2
|
-
import React from 'react'
|
|
3
|
-
import { useTheme } from './theme'
|
|
4
|
-
|
|
5
|
-
export interface NavContainerProps extends React.PropsWithChildren {
|
|
6
|
-
navigationRef: React.RefObject<NavigationContainerRef<any>> | null
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const NavContainer = ({ navigationRef, children }: NavContainerProps) => {
|
|
10
|
-
const { NavigationTheme } = useTheme()
|
|
11
|
-
|
|
12
|
-
return (
|
|
13
|
-
<NavigationContainer ref={navigationRef} theme={NavigationTheme}>
|
|
14
|
-
{children}
|
|
15
|
-
</NavigationContainer>
|
|
16
|
-
)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export default NavContainer
|