@bifold/core 2.4.6 → 2.6.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.
Files changed (461) hide show
  1. package/lib/commonjs/components/listItems/ContactCredentialListItem.js +9 -8
  2. package/lib/commonjs/components/listItems/ContactCredentialListItem.js.map +1 -1
  3. package/lib/commonjs/components/misc/CredentialCard11Logo.js +8 -7
  4. package/lib/commonjs/components/misc/CredentialCard11Logo.js.map +1 -1
  5. package/lib/commonjs/components/misc/PINHeader.js +5 -3
  6. package/lib/commonjs/components/misc/PINHeader.js.map +1 -1
  7. package/lib/commonjs/contexts/network.js +10 -9
  8. package/lib/commonjs/contexts/network.js.map +1 -1
  9. package/lib/commonjs/contexts/reducers/store.js +3 -2
  10. package/lib/commonjs/contexts/reducers/store.js.map +1 -1
  11. package/lib/commonjs/contexts/theme.js +7 -6
  12. package/lib/commonjs/contexts/theme.js.map +1 -1
  13. package/lib/commonjs/index.js +127 -104
  14. package/lib/commonjs/index.js.map +1 -1
  15. package/lib/commonjs/modules/openid/components/CredentialRowCard.js +9 -7
  16. package/lib/commonjs/modules/openid/components/CredentialRowCard.js.map +1 -1
  17. package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js +9 -8
  18. package/lib/commonjs/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
  19. package/lib/commonjs/screens/AttemptLockout.js +27 -35
  20. package/lib/commonjs/screens/AttemptLockout.js.map +1 -1
  21. package/lib/commonjs/screens/ConfigureMediator.js +22 -21
  22. package/lib/commonjs/screens/ConfigureMediator.js.map +1 -1
  23. package/lib/commonjs/screens/JSONDetails.js +16 -15
  24. package/lib/commonjs/screens/JSONDetails.js.map +1 -1
  25. package/lib/commonjs/screens/MobileVerifierLoading.js +4 -3
  26. package/lib/commonjs/screens/MobileVerifierLoading.js.map +1 -1
  27. package/lib/commonjs/screens/PINCreate.js +3 -10
  28. package/lib/commonjs/screens/PINCreate.js.map +1 -1
  29. package/lib/commonjs/screens/WhatAreContacts.js +3 -2
  30. package/lib/commonjs/screens/WhatAreContacts.js.map +1 -1
  31. package/lib/commonjs/services/logger.js +35 -27
  32. package/lib/commonjs/services/logger.js.map +1 -1
  33. package/lib/module/components/listItems/ContactCredentialListItem.js +3 -3
  34. package/lib/module/components/listItems/ContactCredentialListItem.js.map +1 -1
  35. package/lib/module/components/misc/CredentialCard11Logo.js +5 -4
  36. package/lib/module/components/misc/CredentialCard11Logo.js.map +1 -1
  37. package/lib/module/components/misc/PINHeader.js +2 -1
  38. package/lib/module/components/misc/PINHeader.js.map +1 -1
  39. package/lib/module/contexts/network.js +3 -3
  40. package/lib/module/contexts/network.js.map +1 -1
  41. package/lib/module/contexts/reducers/store.js +3 -2
  42. package/lib/module/contexts/reducers/store.js.map +1 -1
  43. package/lib/module/contexts/theme.js +2 -2
  44. package/lib/module/contexts/theme.js.map +1 -1
  45. package/lib/module/index.js +43 -45
  46. package/lib/module/index.js.map +1 -1
  47. package/lib/module/modules/openid/components/CredentialRowCard.js +2 -1
  48. package/lib/module/modules/openid/components/CredentialRowCard.js.map +1 -1
  49. package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js +5 -5
  50. package/lib/module/modules/openid/context/OpenIDCredentialRecordProvider.js.map +1 -1
  51. package/lib/module/screens/AttemptLockout.js +28 -36
  52. package/lib/module/screens/AttemptLockout.js.map +1 -1
  53. package/lib/module/screens/ConfigureMediator.js +10 -10
  54. package/lib/module/screens/ConfigureMediator.js.map +1 -1
  55. package/lib/module/screens/JSONDetails.js +9 -8
  56. package/lib/module/screens/JSONDetails.js.map +1 -1
  57. package/lib/module/screens/MobileVerifierLoading.js +4 -3
  58. package/lib/module/screens/MobileVerifierLoading.js.map +1 -1
  59. package/lib/module/screens/PINCreate.js +3 -10
  60. package/lib/module/screens/PINCreate.js.map +1 -1
  61. package/lib/module/screens/WhatAreContacts.js +3 -2
  62. package/lib/module/screens/WhatAreContacts.js.map +1 -1
  63. package/lib/module/services/logger.js +37 -28
  64. package/lib/module/services/logger.js.map +1 -1
  65. package/lib/typescript/src/components/listItems/ContactCredentialListItem.d.ts +2 -1
  66. package/lib/typescript/src/components/listItems/ContactCredentialListItem.d.ts.map +1 -1
  67. package/lib/typescript/src/components/misc/CredentialCard11Logo.d.ts +1 -0
  68. package/lib/typescript/src/components/misc/CredentialCard11Logo.d.ts.map +1 -1
  69. package/lib/typescript/src/components/misc/PINHeader.d.ts +2 -1
  70. package/lib/typescript/src/components/misc/PINHeader.d.ts.map +1 -1
  71. package/lib/typescript/src/contexts/network.d.ts +3 -3
  72. package/lib/typescript/src/contexts/network.d.ts.map +1 -1
  73. package/lib/typescript/src/contexts/reducers/store.d.ts.map +1 -1
  74. package/lib/typescript/src/contexts/theme.d.ts +2 -1
  75. package/lib/typescript/src/contexts/theme.d.ts.map +1 -1
  76. package/lib/typescript/src/index.d.ts +58 -61
  77. package/lib/typescript/src/index.d.ts.map +1 -1
  78. package/lib/typescript/src/modules/openid/components/CredentialRowCard.d.ts +2 -1
  79. package/lib/typescript/src/modules/openid/components/CredentialRowCard.d.ts.map +1 -1
  80. package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts +3 -3
  81. package/lib/typescript/src/modules/openid/context/OpenIDCredentialRecordProvider.d.ts.map +1 -1
  82. package/lib/typescript/src/screens/AttemptLockout.d.ts.map +1 -1
  83. package/lib/typescript/src/screens/ConfigureMediator.d.ts +2 -1
  84. package/lib/typescript/src/screens/ConfigureMediator.d.ts.map +1 -1
  85. package/lib/typescript/src/screens/JSONDetails.d.ts +2 -1
  86. package/lib/typescript/src/screens/JSONDetails.d.ts.map +1 -1
  87. package/lib/typescript/src/screens/MobileVerifierLoading.d.ts.map +1 -1
  88. package/lib/typescript/src/screens/PINCreate.d.ts.map +1 -1
  89. package/lib/typescript/src/screens/WhatAreContacts.d.ts.map +1 -1
  90. package/lib/typescript/src/services/logger.d.ts +7 -8
  91. package/lib/typescript/src/services/logger.d.ts.map +1 -1
  92. package/package.json +5 -6
  93. package/src/App.tsx +0 -79
  94. package/src/animated-components.ts +0 -30
  95. package/src/assets/fonts/MaterialIcons.ttf +0 -0
  96. package/src/assets/icons/code.svg +0 -4
  97. package/src/assets/icons/large-arrow.svg +0 -5
  98. package/src/assets/icons/pencil.svg +0 -15
  99. package/src/assets/icons/trash.svg +0 -31
  100. package/src/assets/img/Artwork_1024x1024.png +0 -0
  101. package/src/assets/img/HistoryCardAcceptedIcon.svg +0 -4
  102. package/src/assets/img/HistoryCardExpiredIcon.svg +0 -4
  103. package/src/assets/img/HistoryCardRevokedIcon.svg +0 -4
  104. package/src/assets/img/HistoryInformationSentIcon.svg +0 -4
  105. package/src/assets/img/HistoryPinUpdatedIcon.svg +0 -4
  106. package/src/assets/img/IconChevronRight.svg +0 -5
  107. package/src/assets/img/activity-indicator-circle.svg +0 -90
  108. package/src/assets/img/app-lockout.svg +0 -1
  109. package/src/assets/img/biometrics.svg +0 -74
  110. package/src/assets/img/chat-loading.svg +0 -1
  111. package/src/assets/img/check-in-circle.svg +0 -18
  112. package/src/assets/img/connection-pending.svg +0 -112
  113. package/src/assets/img/contact-book.svg +0 -21
  114. package/src/assets/img/credential-card.svg +0 -18
  115. package/src/assets/img/credential-declined.svg +0 -28
  116. package/src/assets/img/credential-in-hand.svg +0 -48
  117. package/src/assets/img/credential-list.svg +0 -60
  118. package/src/assets/img/credential-pending.svg +0 -96
  119. package/src/assets/img/credential-success.svg +0 -48
  120. package/src/assets/img/delete-notification.svg +0 -1
  121. package/src/assets/img/empty-wallet.svg +0 -23
  122. package/src/assets/img/error-filled.svg +0 -12
  123. package/src/assets/img/exclamation-mark.svg +0 -17
  124. package/src/assets/img/home-center-img.svg +0 -71
  125. package/src/assets/img/icon-credential-offer-dark.svg +0 -7
  126. package/src/assets/img/icon-credential-offer-light.svg +0 -7
  127. package/src/assets/img/icon-info-recieved-dark.svg +0 -8
  128. package/src/assets/img/icon-info-recieved-light.svg +0 -8
  129. package/src/assets/img/icon-info-sent-dark.svg +0 -8
  130. package/src/assets/img/icon-info-sent-light.svg +0 -8
  131. package/src/assets/img/icon-proof-request-dark.svg +0 -11
  132. package/src/assets/img/icon-proof-request-light.svg +0 -11
  133. package/src/assets/img/information-received.svg +0 -1
  134. package/src/assets/img/logo-large.png +0 -0
  135. package/src/assets/img/logo-large@2x.png +0 -0
  136. package/src/assets/img/logo-large@3x.png +0 -0
  137. package/src/assets/img/logo.svg +0 -15
  138. package/src/assets/img/message-text-icon-outline.svg +0 -1
  139. package/src/assets/img/message-text-icon.svg +0 -1
  140. package/src/assets/img/no_information_shared.svg +0 -36
  141. package/src/assets/img/preface.svg +0 -15
  142. package/src/assets/img/proof-declined.svg +0 -66
  143. package/src/assets/img/proof-pending.svg +0 -61
  144. package/src/assets/img/proof-success.svg +0 -72
  145. package/src/assets/img/push-notifications.svg +0 -1
  146. package/src/assets/img/qrcode-scan-icon.svg +0 -1
  147. package/src/assets/img/scan-share.svg +0 -102
  148. package/src/assets/img/secure-check.svg +0 -4
  149. package/src/assets/img/secure-image.svg +0 -64
  150. package/src/assets/img/update-available.svg +0 -26
  151. package/src/assets/img/verifier-request-declined.svg +0 -34
  152. package/src/assets/img/wallet-back.svg +0 -20
  153. package/src/assets/img/wallet-front.svg +0 -32
  154. package/src/assets/img/wallet-icon-outline.svg +0 -1
  155. package/src/assets/img/wallet-icon.svg +0 -1
  156. package/src/assets/img/wallet.svg +0 -43
  157. package/src/assets/oca-bundles.json +0 -174
  158. package/src/components/animated/ButtonLoading.tsx +0 -32
  159. package/src/components/animated/ConnectionLoading.tsx +0 -53
  160. package/src/components/animated/CredentialAdded.tsx +0 -72
  161. package/src/components/animated/CredentialPending.tsx +0 -63
  162. package/src/components/animated/LoadingIndicator.tsx +0 -49
  163. package/src/components/animated/PresentationLoading.tsx +0 -52
  164. package/src/components/animated/RecordLoading.tsx +0 -75
  165. package/src/components/animated/SendingProof.tsx +0 -53
  166. package/src/components/animated/SentProof.tsx +0 -72
  167. package/src/components/buttons/Button-api.tsx +0 -46
  168. package/src/components/buttons/Button.tsx +0 -125
  169. package/src/components/buttons/HeaderHome.tsx +0 -25
  170. package/src/components/buttons/IconButton.tsx +0 -93
  171. package/src/components/buttons/InfoIcon.tsx +0 -35
  172. package/src/components/buttons/SettingsMenu.tsx +0 -26
  173. package/src/components/buttons/ToggleButton.tsx +0 -93
  174. package/src/components/buttons/index.ts +0 -4
  175. package/src/components/chat/ActionSlider.tsx +0 -104
  176. package/src/components/chat/ChatActions.tsx +0 -33
  177. package/src/components/chat/ChatBubble.tsx +0 -20
  178. package/src/components/chat/ChatEvent.tsx +0 -31
  179. package/src/components/chat/ChatMessage.tsx +0 -142
  180. package/src/components/chat/MessageInput.tsx +0 -46
  181. package/src/components/chat/index.ts +0 -4
  182. package/src/components/forms/WalletNameForm.tsx +0 -148
  183. package/src/components/index.ts +0 -4
  184. package/src/components/inputs/BiometryControl.tsx +0 -190
  185. package/src/components/inputs/BulletPoint.tsx +0 -32
  186. package/src/components/inputs/CheckBoxRow.tsx +0 -67
  187. package/src/components/inputs/InlineErrorText.tsx +0 -60
  188. package/src/components/inputs/LimitedTextInput.tsx +0 -71
  189. package/src/components/inputs/PINInput.tsx +0 -175
  190. package/src/components/inputs/SingleSelectBlock.tsx +0 -53
  191. package/src/components/listItems/ContactCredentialListItem.tsx +0 -79
  192. package/src/components/listItems/ContactListItem.tsx +0 -121
  193. package/src/components/listItems/NotificationListItem.tsx +0 -514
  194. package/src/components/misc/AvatarView.tsx +0 -33
  195. package/src/components/misc/CardWatermark.tsx +0 -52
  196. package/src/components/misc/ConnectionAlert.tsx +0 -123
  197. package/src/components/misc/ConnectionImage.tsx +0 -45
  198. package/src/components/misc/ContentGradient.tsx +0 -40
  199. package/src/components/misc/CredentialCard.tsx +0 -161
  200. package/src/components/misc/CredentialCard10.tsx +0 -329
  201. package/src/components/misc/CredentialCard11.tsx +0 -701
  202. package/src/components/misc/CredentialCard11ActionFooter.tsx +0 -55
  203. package/src/components/misc/CredentialCard11Issuer.tsx +0 -74
  204. package/src/components/misc/CredentialCard11Logo.tsx +0 -61
  205. package/src/components/misc/EmptyList.tsx +0 -27
  206. package/src/components/misc/EmptyListContacts.tsx +0 -55
  207. package/src/components/misc/ErrorBoundary.tsx +0 -200
  208. package/src/components/misc/FauxHeader.tsx +0 -75
  209. package/src/components/misc/InfoBox.tsx +0 -283
  210. package/src/components/misc/NoNewUpdates.tsx +0 -38
  211. package/src/components/misc/PINHeader.tsx +0 -25
  212. package/src/components/misc/PINValidationHelper.tsx +0 -48
  213. package/src/components/misc/Pagination.tsx +0 -114
  214. package/src/components/misc/QRRenderer.tsx +0 -53
  215. package/src/components/misc/QRScanner.tsx +0 -395
  216. package/src/components/misc/QRScannerTorch.tsx +0 -74
  217. package/src/components/misc/ScanCamera.tsx +0 -86
  218. package/src/components/misc/ScanTab.tsx +0 -45
  219. package/src/components/misc/SharedProofData.tsx +0 -98
  220. package/src/components/misc/UnorderedList.tsx +0 -28
  221. package/src/components/misc/VerifierCredentialCard.tsx +0 -378
  222. package/src/components/misc/index.ts +0 -2
  223. package/src/components/modals/AlertModal.tsx +0 -42
  224. package/src/components/modals/AppGuideModal.tsx +0 -142
  225. package/src/components/modals/CameraDisclosureModal.tsx +0 -126
  226. package/src/components/modals/CommonRemoveModal.tsx +0 -337
  227. package/src/components/modals/DeveloperModal.tsx +0 -32
  228. package/src/components/modals/DismissiblePopupModal.tsx +0 -169
  229. package/src/components/modals/ErrorModal.tsx +0 -107
  230. package/src/components/modals/ImageModal.tsx +0 -80
  231. package/src/components/modals/NetInfoModal.tsx +0 -35
  232. package/src/components/modals/PopupModal.tsx +0 -56
  233. package/src/components/modals/ProofCancelModal.tsx +0 -79
  234. package/src/components/modals/SafeAreaModal.tsx +0 -17
  235. package/src/components/record/Record.tsx +0 -100
  236. package/src/components/record/RecordBinaryField.tsx +0 -55
  237. package/src/components/record/RecordDateIntField.tsx +0 -63
  238. package/src/components/record/RecordField.tsx +0 -154
  239. package/src/components/record/RecordFooter.tsx +0 -17
  240. package/src/components/record/RecordHeader.tsx +0 -17
  241. package/src/components/record/RecordRemove.tsx +0 -66
  242. package/src/components/texts/HeaderTitle.tsx +0 -25
  243. package/src/components/texts/HighlightTextBox.tsx +0 -41
  244. package/src/components/texts/InfoTextBox.tsx +0 -129
  245. package/src/components/texts/Link.tsx +0 -41
  246. package/src/components/texts/Text.tsx +0 -21
  247. package/src/components/texts/ThemedText.tsx +0 -24
  248. package/src/components/toast/BaseToast.tsx +0 -128
  249. package/src/components/toast/ToastConfig.tsx +0 -21
  250. package/src/components/tour/AttachTourStep.tsx +0 -73
  251. package/src/components/tour/CredentialOfferTourSteps.tsx +0 -41
  252. package/src/components/tour/CredentialsTourSteps.tsx +0 -41
  253. package/src/components/tour/HomeTourSteps.tsx +0 -104
  254. package/src/components/tour/ProofRequestTourSteps.tsx +0 -41
  255. package/src/components/tour/SpotCutout.tsx +0 -65
  256. package/src/components/tour/TourBox.tsx +0 -255
  257. package/src/components/tour/TourOverlay.tsx +0 -134
  258. package/src/components/views/Banner.tsx +0 -181
  259. package/src/components/views/CredentialCardLogo.tsx +0 -77
  260. package/src/components/views/CredentialDetailPrimaryHeader.tsx +0 -107
  261. package/src/components/views/CredentialDetailSecondaryHeader.tsx +0 -60
  262. package/src/components/views/HeaderWithBanner.tsx +0 -17
  263. package/src/components/views/HomeFooterView.tsx +0 -110
  264. package/src/components/views/HomeHeaderView.tsx +0 -12
  265. package/src/components/views/KeyboardView.tsx +0 -41
  266. package/src/components/views/LoadingPlaceholder.tsx +0 -168
  267. package/src/components/views/LoadingView.tsx +0 -29
  268. package/src/components/views/ProgressBar.tsx +0 -53
  269. package/src/components/views/PushNotificationsContent.tsx +0 -51
  270. package/src/components/views/PushNotificationsDisabledContent.tsx +0 -47
  271. package/src/configs/ledgers/indy/index.ts +0 -8
  272. package/src/configs/ledgers/indy/ledgers.json +0 -51
  273. package/src/constants.ts +0 -107
  274. package/src/container-api.ts +0 -247
  275. package/src/container-impl.ts +0 -243
  276. package/src/contexts/activity.tsx +0 -145
  277. package/src/contexts/animated-components.ts +0 -9
  278. package/src/contexts/auth.tsx +0 -240
  279. package/src/contexts/index.ts +0 -3
  280. package/src/contexts/navigation.tsx +0 -19
  281. package/src/contexts/network.tsx +0 -125
  282. package/src/contexts/reducers/index.ts +0 -3
  283. package/src/contexts/reducers/store.ts +0 -754
  284. package/src/contexts/store.tsx +0 -103
  285. package/src/contexts/theme.tsx +0 -51
  286. package/src/contexts/tour/tour-context.tsx +0 -160
  287. package/src/contexts/tour/tour-provider.tsx +0 -160
  288. package/src/hooks/bundle-resolver.ts +0 -95
  289. package/src/hooks/chat-messages.tsx +0 -263
  290. package/src/hooks/connections.ts +0 -37
  291. package/src/hooks/credential-card-styles.ts +0 -144
  292. package/src/hooks/credentials.ts +0 -11
  293. package/src/hooks/deep-links.ts +0 -49
  294. package/src/hooks/developer-mode.ts +0 -25
  295. package/src/hooks/lockout.ts +0 -77
  296. package/src/hooks/notifications.ts +0 -108
  297. package/src/hooks/oob.ts +0 -17
  298. package/src/hooks/proof-request-templates.ts +0 -40
  299. package/src/hooks/proofs.ts +0 -32
  300. package/src/hooks/screen-capture.ts +0 -52
  301. package/src/hooks/useBifoldAgentSetup.ts +0 -169
  302. package/src/hooks/useOnboardingState.ts +0 -53
  303. package/src/hooks/usePINValidation.ts +0 -98
  304. package/src/index.ts +0 -239
  305. package/src/layout/ScreenLayout.tsx +0 -53
  306. package/src/localization/en/en.json +0 -951
  307. package/src/localization/en/index.ts +0 -3
  308. package/src/localization/fr/fr.json +0 -933
  309. package/src/localization/fr/index.ts +0 -3
  310. package/src/localization/index.ts +0 -66
  311. package/src/localization/pt-br/index.ts +0 -3
  312. package/src/localization/pt-br/pt-br.json +0 -911
  313. package/src/modules/history/context/historyManager.tsx +0 -247
  314. package/src/modules/history/index.ts +0 -2
  315. package/src/modules/history/navigation/HistoryStack.tsx +0 -29
  316. package/src/modules/history/services/queue.service.tsx +0 -31
  317. package/src/modules/history/types/index.ts +0 -92
  318. package/src/modules/history/ui/HistoryPage.tsx +0 -133
  319. package/src/modules/history/ui/HistorySettings.tsx +0 -183
  320. package/src/modules/history/ui/assets/img/HistoryCardAcceptedIcon.svg +0 -4
  321. package/src/modules/history/ui/assets/img/HistoryCardExpiredIcon.svg +0 -4
  322. package/src/modules/history/ui/assets/img/HistoryCardRevokedIcon.svg +0 -4
  323. package/src/modules/history/ui/assets/img/HistoryInformationSentIcon.svg +0 -4
  324. package/src/modules/history/ui/assets/img/HistoryPinUpdatedIcon.svg +0 -4
  325. package/src/modules/history/ui/assets/img/IconChevronRight.svg +0 -3
  326. package/src/modules/history/ui/components/BulletPoint.tsx +0 -49
  327. package/src/modules/history/ui/components/HistoryListItem.tsx +0 -251
  328. package/src/modules/history/ui/components/HistoryMenu.tsx +0 -25
  329. package/src/modules/history/ui/components/SingleSelectBlock.tsx +0 -72
  330. package/src/modules/openid/components/CredentialRowCard.tsx +0 -64
  331. package/src/modules/openid/components/OpenIDCredentialCard.tsx +0 -276
  332. package/src/modules/openid/context/OpenIDCredentialRecordProvider.tsx +0 -296
  333. package/src/modules/openid/display.tsx +0 -467
  334. package/src/modules/openid/displayProof.tsx +0 -86
  335. package/src/modules/openid/hooks/openid.tsx +0 -111
  336. package/src/modules/openid/metadata.tsx +0 -59
  337. package/src/modules/openid/offerResolve.tsx +0 -281
  338. package/src/modules/openid/resolverProof.tsx +0 -286
  339. package/src/modules/openid/screens/OpenIDCredentialDetails.tsx +0 -214
  340. package/src/modules/openid/screens/OpenIDCredentialOffer.tsx +0 -192
  341. package/src/modules/openid/screens/OpenIDProofChangeCredential.tsx +0 -133
  342. package/src/modules/openid/screens/OpenIDProofPresentation.tsx +0 -423
  343. package/src/modules/openid/types.tsx +0 -111
  344. package/src/modules/openid/utils/utils.tsx +0 -119
  345. package/src/navigators/ConnectStack.tsx +0 -68
  346. package/src/navigators/ContactStack.tsx +0 -91
  347. package/src/navigators/CredentialStack.tsx +0 -48
  348. package/src/navigators/DeliveryStack.tsx +0 -76
  349. package/src/navigators/HomeStack.tsx +0 -37
  350. package/src/navigators/MainStack.tsx +0 -146
  351. package/src/navigators/NotificationStack.tsx +0 -56
  352. package/src/navigators/OnboardingScreens.ts +0 -142
  353. package/src/navigators/OnboardingStack.tsx +0 -205
  354. package/src/navigators/ProofRequestStack.tsx +0 -113
  355. package/src/navigators/RootStack.tsx +0 -71
  356. package/src/navigators/SettingStack.tsx +0 -174
  357. package/src/navigators/TabStack.tsx +0 -304
  358. package/src/navigators/defaultLayoutOptions.tsx +0 -17
  359. package/src/navigators/defaultStackOptions.tsx +0 -102
  360. package/src/navigators/index.ts +0 -27
  361. package/src/onboarding.ts +0 -90
  362. package/src/screens/AttemptLockout.tsx +0 -153
  363. package/src/screens/AutoLock.tsx +0 -140
  364. package/src/screens/Biometry.tsx +0 -54
  365. package/src/screens/Chat.tsx +0 -141
  366. package/src/screens/ConfigureMediator.tsx +0 -160
  367. package/src/screens/Connection.tsx +0 -394
  368. package/src/screens/ContactDetails.tsx +0 -350
  369. package/src/screens/CredentialDetails.tsx +0 -473
  370. package/src/screens/CredentialOffer.tsx +0 -334
  371. package/src/screens/CredentialOfferAccept.tsx +0 -189
  372. package/src/screens/DataRetention.tsx +0 -91
  373. package/src/screens/Developer.tsx +0 -289
  374. package/src/screens/Home.tsx +0 -173
  375. package/src/screens/JSONDetails.tsx +0 -104
  376. package/src/screens/Language.tsx +0 -97
  377. package/src/screens/ListContacts.tsx +0 -112
  378. package/src/screens/ListCredentials.tsx +0 -135
  379. package/src/screens/ListProofRequests.tsx +0 -148
  380. package/src/screens/MobileVerifierLoading.tsx +0 -106
  381. package/src/screens/NameWallet.tsx +0 -9
  382. package/src/screens/Onboarding.tsx +0 -162
  383. package/src/screens/OnboardingPages.tsx +0 -160
  384. package/src/screens/PINChange.tsx +0 -249
  385. package/src/screens/PINCreate.tsx +0 -185
  386. package/src/screens/PINEnter.tsx +0 -432
  387. package/src/screens/PINExplainer.tsx +0 -85
  388. package/src/screens/PINVerify.tsx +0 -195
  389. package/src/screens/PasteUrl.tsx +0 -140
  390. package/src/screens/Preface.tsx +0 -78
  391. package/src/screens/ProofChangeCredential.tsx +0 -179
  392. package/src/screens/ProofDetails.tsx +0 -348
  393. package/src/screens/ProofRequest.tsx +0 -999
  394. package/src/screens/ProofRequestAccept.tsx +0 -133
  395. package/src/screens/ProofRequestDetails.tsx +0 -270
  396. package/src/screens/ProofRequestUsageHistory.tsx +0 -152
  397. package/src/screens/ProofRequesting.tsx +0 -245
  398. package/src/screens/PushNotifications.tsx +0 -59
  399. package/src/screens/RenameContact.tsx +0 -155
  400. package/src/screens/RenameWallet.tsx +0 -26
  401. package/src/screens/Scan.tsx +0 -145
  402. package/src/screens/ScanHelp.tsx +0 -48
  403. package/src/screens/Settings.tsx +0 -415
  404. package/src/screens/Splash.tsx +0 -80
  405. package/src/screens/Terms.tsx +0 -127
  406. package/src/screens/ToggleBiometry.tsx +0 -153
  407. package/src/screens/TogglePushNotifications.tsx +0 -118
  408. package/src/screens/Tours.tsx +0 -93
  409. package/src/screens/UpdateAvailable.tsx +0 -119
  410. package/src/screens/WhatAreContacts.tsx +0 -71
  411. package/src/services/bifoldLogger.ts +0 -3
  412. package/src/services/keychain.ts +0 -184
  413. package/src/services/logger.ts +0 -89
  414. package/src/services/storage.ts +0 -136
  415. package/src/theme-builder.ts +0 -157
  416. package/src/theme.interface.ts +0 -580
  417. package/src/theme.ts +0 -1346
  418. package/src/types/attempt-lockout-config.ts +0 -8
  419. package/src/types/attestation.ts +0 -17
  420. package/src/types/chat.ts +0 -4
  421. package/src/types/config.ts +0 -64
  422. package/src/types/contact-details.ts +0 -5
  423. package/src/types/credential-list-footer.ts +0 -3
  424. package/src/types/credential-status.ts +0 -3
  425. package/src/types/credentials.ts +0 -7
  426. package/src/types/decline.ts +0 -5
  427. package/src/types/error.ts +0 -40
  428. package/src/types/fn.ts +0 -2
  429. package/src/types/genesis.ts +0 -35
  430. package/src/types/index.ts +0 -2
  431. package/src/types/metadata.ts +0 -16
  432. package/src/types/navigators.ts +0 -239
  433. package/src/types/notification.ts +0 -24
  434. package/src/types/permissions.ts +0 -2
  435. package/src/types/proof-items.ts +0 -32
  436. package/src/types/react-i18next.d.ts +0 -10
  437. package/src/types/remove.ts +0 -8
  438. package/src/types/security.ts +0 -32
  439. package/src/types/settings.ts +0 -28
  440. package/src/types/state.ts +0 -97
  441. package/src/types/tour.ts +0 -20
  442. package/src/types/version-check.ts +0 -18
  443. package/src/utils/PINValidation.ts +0 -98
  444. package/src/utils/agent.ts +0 -128
  445. package/src/utils/anonCredsProofRequestMapper.ts +0 -205
  446. package/src/utils/contacts.ts +0 -59
  447. package/src/utils/cred-def.ts +0 -33
  448. package/src/utils/credential.ts +0 -37
  449. package/src/utils/crypto.ts +0 -12
  450. package/src/utils/fileCache.ts +0 -152
  451. package/src/utils/helpers.ts +0 -1292
  452. package/src/utils/ledger.ts +0 -212
  453. package/src/utils/luminance.ts +0 -40
  454. package/src/utils/mediatorhelpers.ts +0 -71
  455. package/src/utils/migration.ts +0 -40
  456. package/src/utils/network.tsx +0 -55
  457. package/src/utils/oca.ts +0 -173
  458. package/src/utils/parsers.tsx +0 -111
  459. package/src/utils/proofBundle.ts +0 -220
  460. package/src/utils/schema.ts +0 -28
  461. package/src/utils/testable.ts +0 -17
@@ -1,999 +0,0 @@
1
- import {
2
- AnonCredsCredentialsForProofRequest,
3
- AnonCredsRequestedAttributeMatch,
4
- AnonCredsRequestedPredicateMatch,
5
- V1RequestPresentationMessage,
6
- } from '@credo-ts/anoncreds'
7
- import {
8
- CredentialExchangeRecord,
9
- CredentialRecordBinding,
10
- DifPexInputDescriptorToCredentials,
11
- CredoError,
12
- V2RequestPresentationMessage,
13
- ProofState,
14
- } from '@credo-ts/core'
15
- import { useConnectionById, useProofById } from '@credo-ts/react-hooks'
16
- import { Attribute, Predicate } from '@bifold/oca/build/legacy'
17
- import { useIsFocused } from '@react-navigation/native'
18
- import moment from 'moment'
19
- import React, { useCallback, useEffect, useMemo, useState } from 'react'
20
- import { useTranslation } from 'react-i18next'
21
- import {
22
- DeviceEventEmitter,
23
- EmitterSubscription,
24
- FlatList,
25
- ScrollView,
26
- StyleSheet,
27
- useWindowDimensions,
28
- View,
29
- } from 'react-native'
30
- import { SafeAreaView } from 'react-native-safe-area-context'
31
-
32
- import Button, { ButtonType } from '../components/buttons/Button'
33
- import { CredentialCard } from '../components/misc'
34
- import ConnectionImage from '../components/misc/ConnectionImage'
35
- import InfoBox, { InfoBoxType } from '../components/misc/InfoBox'
36
- import CommonRemoveModal from '../components/modals/CommonRemoveModal'
37
- import ProofCancelModal from '../components/modals/ProofCancelModal'
38
- import InfoTextBox from '../components/texts/InfoTextBox'
39
- import { EventTypes } from '../constants'
40
- import { TOKENS, useServices } from '../container-api'
41
- import { useNetwork } from '../contexts/network'
42
- import { DispatchAction } from '../contexts/reducers/store'
43
- import { useStore } from '../contexts/store'
44
- import { useTheme } from '../contexts/theme'
45
- import { useTour } from '../contexts/tour/tour-context'
46
- import { useOutOfBandByConnectionId } from '../hooks/connections'
47
- import { useOutOfBandByReceivedInvitationId } from '../hooks/oob'
48
- import { useAllCredentialsForProof } from '../hooks/proofs'
49
- import { AttestationEventTypes } from '../types/attestation'
50
- import { BifoldError } from '../types/error'
51
- import { Screens, Stacks, TabStacks } from '../types/navigators'
52
- import {
53
- CredentialDataForProof,
54
- ProofCredentialAttributes,
55
- ProofCredentialItems,
56
- ProofCredentialPredicates,
57
- } from '../types/proof-items'
58
- import { ModalUsage } from '../types/remove'
59
- import { useAppAgent } from '../utils/agent'
60
- import { DescriptorMetadata } from '../utils/anonCredsProofRequestMapper'
61
- import {
62
- Fields,
63
- evaluatePredicates,
64
- getConnectionName,
65
- getCredentialDefinitionIdForRecord,
66
- getCredentialSchemaIdForRecord,
67
- } from '../utils/helpers'
68
- import { testIdWithKey } from '../utils/testable'
69
- import LoadingPlaceholder, { LoadingPlaceholderWorkflowType } from '../components/views/LoadingPlaceholder'
70
-
71
- import ProofRequestAccept from './ProofRequestAccept'
72
- import { CredentialErrors } from '../components/misc/CredentialCard11'
73
- import { HistoryCardType, HistoryRecord } from '../modules/history/types'
74
- import { BaseTourID } from '../types/tour'
75
- import { ThemedText } from '../components/texts/ThemedText'
76
-
77
- type ProofRequestProps = {
78
- navigation: any
79
- proofId: string
80
- }
81
-
82
- type CredentialListProps = {
83
- header?: JSX.Element
84
- footer?: JSX.Element
85
- items: ProofCredentialItems[]
86
- missing: boolean
87
- }
88
-
89
- const ProofRequest: React.FC<ProofRequestProps> = ({ navigation, proofId }) => {
90
- const { agent } = useAppAgent()
91
- const { t } = useTranslation()
92
- const { assertNetworkConnected } = useNetwork()
93
- const { height } = useWindowDimensions()
94
- const proof = useProofById(proofId)
95
- const connection = useConnectionById(proof?.connectionId ?? '')
96
- const [pendingModalVisible, setPendingModalVisible] = useState(false)
97
- const [revocationOffense, setRevocationOffense] = useState(false)
98
- const [retrievedCredentials, setRetrievedCredentials] = useState<AnonCredsCredentialsForProofRequest>()
99
- // all credentials in the users wallet
100
- const [userCredentials, setUserCredentials] = useState<ProofCredentialItems[]>([])
101
- const [missingCredentials, setMissingCredentials] = useState<ProofCredentialItems[]>([])
102
- const [descriptorMetadata, setDescriptorMetadata] = useState<DescriptorMetadata | undefined>()
103
- const [loading, setLoading] = useState<boolean>(true)
104
- const [declineModalVisible, setDeclineModalVisible] = useState(false)
105
- const [cancelModalVisible, setCancelModalVisible] = useState(false)
106
- const { ColorPalette, ListItems, TextTheme } = useTheme()
107
- const goalCode = useOutOfBandByConnectionId(proof?.connectionId ?? '')?.outOfBandInvitation.goalCode
108
- const outOfBandInvitation = useOutOfBandByReceivedInvitationId(proof?.parentThreadId ?? '')?.outOfBandInvitation
109
- const [containsPI, setContainsPI] = useState(false)
110
- const [activeCreds, setActiveCreds] = useState<ProofCredentialItems[]>([])
111
- const [selectedCredentials, setSelectedCredentials] = useState<string[]>([])
112
- const [attestationLoading, setAttestationLoading] = useState(false)
113
- const [showDetailsModal, setShowDetailsModal] = useState(false)
114
- const [showErrorModal, setShowErrorModal] = useState(false)
115
-
116
- const [store, dispatch] = useStore()
117
- const credProofPromise = useAllCredentialsForProof(proofId)
118
- const [ConnectionAlert] = useServices([TOKENS.COMPONENT_CONNECTION_ALERT])
119
- const proofConnectionLabel = useMemo(
120
- () => getConnectionName(connection, store.preferences.alternateContactNames),
121
- [connection, store.preferences.alternateContactNames]
122
- )
123
- const { start } = useTour()
124
- const screenIsFocused = useIsFocused()
125
- const [
126
- bundleResolver,
127
- attestationMonitor,
128
- { enableTours: enableToursConfig },
129
- logger,
130
- historyManagerCurried,
131
- historyEnabled,
132
- historyEventsLogger,
133
- ] = useServices([
134
- TOKENS.UTIL_OCA_RESOLVER,
135
- TOKENS.UTIL_ATTESTATION_MONITOR,
136
- TOKENS.CONFIG,
137
- TOKENS.UTIL_LOGGER,
138
- TOKENS.FN_LOAD_HISTORY,
139
- TOKENS.HISTORY_ENABLED,
140
- TOKENS.HISTORY_EVENTS_LOGGER,
141
- ])
142
- const styles = StyleSheet.create({
143
- pageContainer: {
144
- flex: 1,
145
- },
146
- pageContent: {
147
- flexGrow: 1,
148
- justifyContent: 'space-between',
149
- },
150
- pageMargin: {
151
- marginHorizontal: 20,
152
- },
153
- pageFooter: {
154
- marginVertical: 15,
155
- },
156
- headerTextContainer: {
157
- paddingVertical: 16,
158
- },
159
- headerText: {
160
- ...ListItems.recordAttributeText,
161
- flexShrink: 1,
162
- },
163
- footerButton: {
164
- paddingTop: 10,
165
- },
166
- link: {
167
- ...ListItems.recordAttributeText,
168
- ...ListItems.recordLink,
169
- paddingVertical: 2,
170
- },
171
- valueContainer: {
172
- minHeight: ListItems.recordAttributeText.fontSize,
173
- paddingVertical: 4,
174
- },
175
- detailsButton: {
176
- ...ListItems.recordAttributeText,
177
- color: ColorPalette.brand.link,
178
- textDecorationLine: 'underline',
179
- },
180
- })
181
-
182
- useEffect(() => {
183
- if (proof && proof?.state !== ProofState.RequestReceived) {
184
- setShowErrorModal(true)
185
- }
186
- }, [t, proof])
187
-
188
- useEffect(() => {
189
- if (!attestationMonitor) {
190
- return
191
- }
192
-
193
- const handleStartedAttestation = () => {
194
- setAttestationLoading(true)
195
- }
196
-
197
- const handleStartedCompleted = () => {
198
- setAttestationLoading(false)
199
- }
200
-
201
- const handleFailedAttestation = (error: BifoldError) => {
202
- DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error)
203
- }
204
-
205
- const subscriptions = Array<EmitterSubscription>()
206
- subscriptions.push(DeviceEventEmitter.addListener(AttestationEventTypes.Started, handleStartedAttestation))
207
- subscriptions.push(DeviceEventEmitter.addListener(AttestationEventTypes.Completed, handleStartedCompleted))
208
- subscriptions.push(DeviceEventEmitter.addListener(AttestationEventTypes.FailedHandleProof, handleFailedAttestation))
209
- subscriptions.push(DeviceEventEmitter.addListener(AttestationEventTypes.FailedHandleOffer, handleFailedAttestation))
210
- subscriptions.push(
211
- DeviceEventEmitter.addListener(AttestationEventTypes.FailedRequestCredential, handleFailedAttestation)
212
- )
213
-
214
- return () => {
215
- subscriptions.forEach((subscription) => subscription.remove())
216
- }
217
- }, [attestationMonitor])
218
-
219
- useEffect(() => {
220
- const shouldShowTour = enableToursConfig && store.tours.enableTours && !store.tours.seenProofRequestTour
221
-
222
- if (shouldShowTour && screenIsFocused) {
223
- start(BaseTourID.ProofRequestTour)
224
- dispatch({
225
- type: DispatchAction.UPDATE_SEEN_PROOF_REQUEST_TOUR,
226
- payload: [true],
227
- })
228
- }
229
- }, [enableToursConfig, store.tours.enableTours, store.tours.seenProofRequestTour, screenIsFocused, start, dispatch])
230
-
231
- useEffect(() => {
232
- if (!agent || !proof) {
233
- DeviceEventEmitter.emit(
234
- EventTypes.ERROR_ADDED,
235
- new BifoldError(t('Error.Title1034'), t('Error.Message1034'), t('ProofRequest.ProofRequestNotFound'), 1034)
236
- )
237
- }
238
- }, [agent, proof, t])
239
-
240
- const containsRevokedCreds = (
241
- credExRecords: CredentialExchangeRecord[],
242
- fields: {
243
- [key: string]: Attribute[] & Predicate[]
244
- }
245
- ): boolean => {
246
- const revList = credExRecords.map((cred) => {
247
- return {
248
- id: cred.credentials.map((item) => item.credentialRecordId),
249
- revocationDate: cred.revocationNotification?.revocationDate,
250
- }
251
- })
252
-
253
- return revList.some((item) => {
254
- // no revocation date means it's not revoked, leave early
255
- if (!item.revocationDate) {
256
- return false
257
- }
258
- const revDate = moment(item.revocationDate)
259
- return item.id.some((id) => {
260
- return Object.keys(fields).some((key) => {
261
- const dateIntervals = fields[key]
262
- ?.filter((attr) => attr.credentialId === id)
263
- .map((attr) => {
264
- return {
265
- to: attr.nonRevoked?.to !== undefined ? moment.unix(attr.nonRevoked.to) : undefined,
266
- from: attr.nonRevoked?.from !== undefined ? moment.unix(attr.nonRevoked.from) : undefined,
267
- }
268
- })
269
- return dateIntervals?.some(
270
- (inter) =>
271
- (inter.to !== undefined && inter.to > revDate) || (inter.from !== undefined && inter.from > revDate)
272
- )
273
- })
274
- })
275
- })
276
- }
277
-
278
- useEffect(() => {
279
- setLoading(true)
280
- const credPromise = async () => {
281
- let value: CredentialDataForProof | undefined = undefined
282
- try {
283
- value = await credProofPromise
284
-
285
- if (!value) {
286
- return
287
- }
288
- } catch (err) {
289
- const error = new BifoldError(
290
- t('Error.Title1026'),
291
- t('Error.Message1026'),
292
- (err as Error)?.message ?? err,
293
- 1026
294
- )
295
- DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error)
296
- return
297
- }
298
-
299
- const { groupedProof, retrievedCredentials, fullCredentials, descriptorMetadata } = value
300
- setLoading(false)
301
- setDescriptorMetadata(descriptorMetadata)
302
-
303
- // Credentials that satisfy the proof request
304
- let credList: string[] = []
305
- if (selectedCredentials.length > 0) {
306
- credList = selectedCredentials
307
- } else {
308
- // we only want one of each satisfying credential
309
- groupedProof.forEach((item: any) => {
310
- const credId = item.altCredentials?.[0]
311
- if (credId && !credList.includes(credId)) {
312
- credList.push(credId)
313
- }
314
- })
315
- }
316
-
317
- const formatCredentials = (
318
- retrievedItems: Record<string, (AnonCredsRequestedAttributeMatch | AnonCredsRequestedPredicateMatch)[]>,
319
- credList: string[]
320
- ) => {
321
- return Object.keys(retrievedItems)
322
- .map((key) => {
323
- return {
324
- [key]: retrievedItems[key].filter((attr) => credList.includes(attr.credentialId)),
325
- }
326
- })
327
- .reduce((prev, curr) => {
328
- return {
329
- ...prev,
330
- ...curr,
331
- }
332
- }, {})
333
- }
334
-
335
- const selectRetrievedCredentials: AnonCredsCredentialsForProofRequest | undefined = retrievedCredentials
336
- ? {
337
- ...retrievedCredentials,
338
- attributes: formatCredentials(retrievedCredentials.attributes, credList) as Record<
339
- string,
340
- AnonCredsRequestedAttributeMatch[]
341
- >,
342
- predicates: formatCredentials(retrievedCredentials.predicates, credList) as Record<
343
- string,
344
- AnonCredsRequestedPredicateMatch[]
345
- >,
346
- }
347
- : undefined
348
-
349
- setRetrievedCredentials(selectRetrievedCredentials)
350
-
351
- const activeCreds = groupedProof.filter((item: any) => credList.includes(item.credId))
352
- setActiveCreds(activeCreds)
353
-
354
- const unpackCredToField = (
355
- credentials: (ProofCredentialAttributes & ProofCredentialPredicates)[]
356
- ): { [key: string]: Attribute[] & Predicate[] } => {
357
- return credentials.reduce((prev, current) => {
358
- return { ...prev, [current.credId]: current.attributes ?? current.predicates ?? [] }
359
- }, {})
360
- }
361
-
362
- const userCredentials: ProofCredentialItems[] = []
363
- const missingCredentials: ProofCredentialItems[] = []
364
- const schemaIds = new Set(
365
- fullCredentials
366
- .map((fullCredential: CredentialExchangeRecord) => getCredentialSchemaIdForRecord(fullCredential))
367
- .filter((id) => id !== null)
368
- )
369
- const credDefIds = new Set(
370
- fullCredentials
371
- .map((fullCredential: CredentialExchangeRecord) => getCredentialDefinitionIdForRecord(fullCredential))
372
- .filter((id) => id !== null)
373
- )
374
- activeCreds.forEach((cred) => {
375
- const isMissing = !schemaIds.has(cred.schemaId ?? '') && !credDefIds.has(cred.credDefId ?? '')
376
- const isUserCredential = schemaIds.has(cred.schemaId ?? '') || credDefIds.has(cred.credDefId ?? '')
377
-
378
- if (isMissing && !cred.credExchangeRecord) {
379
- missingCredentials.push(cred)
380
- }
381
-
382
- if (isUserCredential || cred.credExchangeRecord) {
383
- userCredentials.push(cred)
384
- }
385
- })
386
- setUserCredentials(userCredentials)
387
- setMissingCredentials(missingCredentials)
388
-
389
- // Check for revoked credentials
390
- const records = fullCredentials.filter((record: CredentialExchangeRecord) =>
391
- record.credentials.some((cred: CredentialRecordBinding) => credList.includes(cred.credentialRecordId))
392
- )
393
- const foundRevocationOffense = containsRevokedCreds(records, unpackCredToField(activeCreds))
394
- setRevocationOffense(foundRevocationOffense)
395
- }
396
-
397
- credPromise()
398
- }, [selectedCredentials, credProofPromise, t])
399
-
400
- const toggleDeclineModalVisible = useCallback(() => setDeclineModalVisible((prev) => !prev), [])
401
- const toggleCancelModalVisible = useCallback(() => setCancelModalVisible((prev) => !prev), [])
402
-
403
- const getCredentialsFields = useCallback(
404
- (): Fields => ({
405
- ...retrievedCredentials?.attributes,
406
- ...retrievedCredentials?.predicates,
407
- }),
408
- [retrievedCredentials]
409
- )
410
-
411
- useEffect(() => {
412
- // get oca bundle to see if we're presenting personally identifiable elements
413
- activeCreds.some(async (item) => {
414
- if (!item || !(item.credDefId || item.schemaId)) {
415
- return false
416
- }
417
- const labels = (item.attributes ?? []).map((field) => field.label ?? field.name ?? '')
418
- const bundle = await bundleResolver.resolveAllBundles({
419
- identifiers: { credentialDefinitionId: item.credDefId, schemaId: item.schemaId },
420
- })
421
- const flaggedAttributes: string[] = (bundle as any).bundle.bundle.flaggedAttributes.map((attr: any) => attr.name)
422
- const foundPI = labels.some((label) => flaggedAttributes.includes(label))
423
- setContainsPI(foundPI)
424
- return foundPI
425
- })
426
- }, [activeCreds, bundleResolver])
427
-
428
- const hasAvailableCredentials = useMemo(() => {
429
- const fields = getCredentialsFields()
430
-
431
- return !!retrievedCredentials && Object.values(fields).every((c) => c.length > 0)
432
- }, [retrievedCredentials, getCredentialsFields])
433
-
434
- const hasSatisfiedPredicates = useCallback(
435
- (fields: Fields, credId?: string) => {
436
- return activeCreds.flatMap((item) => evaluatePredicates(fields, credId)(item)).every((p) => p.satisfied)
437
- },
438
- [activeCreds]
439
- )
440
-
441
- const logHistoryRecord = useCallback(
442
- async (type: HistoryCardType) => {
443
- try {
444
- if (!(agent && historyEnabled)) {
445
- logger.trace(
446
- `[${ProofRequest.name}]:[logHistoryRecord] Skipping history log, either history function disabled or agent undefined!`
447
- )
448
- return
449
- }
450
- const historyManager = historyManagerCurried(agent)
451
-
452
- if (!proof) {
453
- logger.error(`[${ProofRequest.name}]:[logHistoryRecord] Cannot save history, proof undefined!`)
454
- return
455
- }
456
-
457
- let message: V2RequestPresentationMessage | V1RequestPresentationMessage | null | undefined
458
- try {
459
- message = await agent?.proofs.findRequestMessage(proofId)
460
- } catch (error) {
461
- logger.error('Error finding request message:', error as CredoError)
462
- }
463
-
464
- /** Save history record for proof accepted/declined */
465
- const recordData: HistoryRecord = {
466
- type: type,
467
- message: message?.comment ?? '',
468
- createdAt: proof.createdAt,
469
- correspondenceId: proofId,
470
- correspondenceName: proofConnectionLabel,
471
- }
472
- historyManager.saveHistory(recordData)
473
- } catch (err: unknown) {
474
- logger.error(`[${ProofRequest.name}]:[logHistoryRecord] Error saving history: ${err}`)
475
- }
476
- },
477
- [agent, historyEnabled, logger, historyManagerCurried, proof, proofId, proofConnectionLabel]
478
- )
479
-
480
- const handleAcceptPress = useCallback(async () => {
481
- try {
482
- if (!(agent && proof && assertNetworkConnected())) {
483
- return
484
- }
485
- setPendingModalVisible(true)
486
-
487
- if (!retrievedCredentials) {
488
- throw new Error(t('ProofRequest.RequestedCredentialsCouldNotBeFound'))
489
- }
490
- const format = await agent.proofs.getFormatData(proof.id)
491
-
492
- if (format.request?.presentationExchange) {
493
- if (!descriptorMetadata) throw new Error(t('ProofRequest.PresentationMetadataNotFound'))
494
-
495
- const selectedCredentials: DifPexInputDescriptorToCredentials = Object.fromEntries(
496
- Object.entries(descriptorMetadata).map(([descriptorId, meta]) => {
497
- const activeCredentialIds = activeCreds.map((cred) => cred.credId)
498
- const selectedRecord = meta.find((item) => activeCredentialIds.includes(item.record.id))
499
- if (!selectedRecord) throw new Error(t('ProofRequest.CredentialMetadataNotFound'))
500
- return [descriptorId, [selectedRecord.record]]
501
- })
502
- )
503
-
504
- await agent.proofs.acceptRequest({
505
- proofRecordId: proof.id,
506
- proofFormats: { presentationExchange: { credentials: selectedCredentials } },
507
- })
508
-
509
- if (proof.connectionId && goalCode?.endsWith('verify.once')) {
510
- agent.connections.deleteById(proof.connectionId)
511
- }
512
- return
513
- }
514
-
515
- const formatToUse = format.request?.anoncreds ? 'anoncreds' : 'indy'
516
-
517
- const formatCredentials = (
518
- retrievedItems: Record<string, (AnonCredsRequestedAttributeMatch | AnonCredsRequestedPredicateMatch)[]>,
519
- credList: string[]
520
- ) => {
521
- return Object.keys(retrievedItems)
522
- .map((key) => {
523
- return {
524
- [key]: retrievedItems[key].find((cred) => credList.includes(cred.credentialId)),
525
- }
526
- })
527
- .reduce((prev, current) => {
528
- return { ...prev, ...current }
529
- }, {})
530
- }
531
-
532
- // this is the best way to supply our desired credentials in the proof, otherwise it selects them automatically
533
- const credObject = {
534
- ...retrievedCredentials,
535
- attributes: formatCredentials(
536
- retrievedCredentials.attributes,
537
- activeCreds.map((item) => item.credId)
538
- ),
539
- predicates: formatCredentials(
540
- retrievedCredentials.predicates,
541
- activeCreds.map((item) => item.credId)
542
- ),
543
- selfAttestedAttributes: {},
544
- }
545
- const automaticRequestedCreds = { proofFormats: { [formatToUse]: { ...credObject } } }
546
-
547
- if (!automaticRequestedCreds) {
548
- throw new Error(t('ProofRequest.RequestedCredentialsCouldNotBeFound'))
549
- }
550
-
551
- await agent.proofs.acceptRequest({
552
- proofRecordId: proof.id,
553
- proofFormats: automaticRequestedCreds.proofFormats,
554
- })
555
- if (proof.connectionId && goalCode?.endsWith('verify.once')) {
556
- agent.connections.deleteById(proof.connectionId)
557
- }
558
-
559
- if (historyEventsLogger.logInformationSent) {
560
- logHistoryRecord(HistoryCardType.InformationSent)
561
- }
562
- } catch (err: unknown) {
563
- setPendingModalVisible(false)
564
- const error = new BifoldError(t('Error.Title1027'), t('Error.Message1027'), (err as Error)?.message ?? err, 1027)
565
- DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error)
566
- }
567
- }, [
568
- agent,
569
- proof,
570
- assertNetworkConnected,
571
- retrievedCredentials,
572
- activeCreds,
573
- descriptorMetadata,
574
- goalCode,
575
- t,
576
- historyEventsLogger.logInformationSent,
577
- logHistoryRecord,
578
- ])
579
-
580
- const handleDeclineTouched = useCallback(async () => {
581
- try {
582
- if (agent && proof) {
583
- const connectionId = proof.connectionId ?? ''
584
- const connection = await agent.connections.findById(connectionId)
585
-
586
- if (connection) {
587
- await agent.proofs.sendProblemReport({ proofRecordId: proof.id, description: t('ProofRequest.Declined') })
588
- }
589
-
590
- await agent.proofs.declineRequest({ proofRecordId: proof.id })
591
-
592
- if (connectionId && goalCode?.endsWith('verify.once')) {
593
- agent.connections.deleteById(connectionId)
594
- }
595
- }
596
- } catch (err: unknown) {
597
- const error = new BifoldError(t('Error.Title1028'), t('Error.Message1028'), (err as Error)?.message ?? err, 1028)
598
- DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error)
599
- }
600
-
601
- toggleDeclineModalVisible()
602
-
603
- if (historyEventsLogger.logInformationNotSent) {
604
- logHistoryRecord(HistoryCardType.InformationNotSent)
605
- }
606
- navigation.getParent()?.navigate(TabStacks.HomeStack, { screen: Screens.Home })
607
- }, [
608
- agent,
609
- proof,
610
- goalCode,
611
- t,
612
- navigation,
613
- toggleDeclineModalVisible,
614
- historyEventsLogger.logInformationNotSent,
615
- logHistoryRecord,
616
- ])
617
-
618
- const handleCancelTouched = useCallback(async () => {
619
- try {
620
- toggleCancelModalVisible()
621
-
622
- if (agent && proof) {
623
- await agent.proofs.sendProblemReport({ proofRecordId: proof.id, description: t('ProofRequest.Declined') })
624
- await agent.proofs.declineRequest({ proofRecordId: proof.id })
625
-
626
- if (proof.connectionId && goalCode?.endsWith('verify.once')) {
627
- agent.connections.deleteById(proof.connectionId)
628
- }
629
- }
630
- } catch (err: unknown) {
631
- const error = new BifoldError(t('Error.Title1028'), t('Error.Message1028'), (err as Error)?.message ?? err, 1028)
632
- DeviceEventEmitter.emit(EventTypes.ERROR_ADDED, error)
633
- }
634
- }, [toggleCancelModalVisible, agent, proof, t, goalCode])
635
-
636
- const onCancelDone = useCallback(() => {
637
- navigation.getParent()?.navigate(TabStacks.HomeStack, { screen: Screens.Home })
638
- }, [navigation])
639
-
640
- const callViewJSONDetails = useCallback(() => {
641
- navigation.navigate(Stacks.ContactStack, {
642
- screen: Screens.JSONDetails,
643
- params: {
644
- jsonBlob:
645
- '"proof":' +
646
- JSON.stringify(proof, null, 2) +
647
- '\n"retrievedCredentials":' +
648
- JSON.stringify(retrievedCredentials, null, 2),
649
- },
650
- })
651
- }, [navigation, proof, retrievedCredentials])
652
-
653
- const shareDisabledErrors = useMemo(() => {
654
- return {
655
- hasCredentialError: !hasAvailableCredentials,
656
- hasSatisfiedPredicateError: !hasSatisfiedPredicates(getCredentialsFields()),
657
- hasRevokedOffense: revocationOffense,
658
- hasProofStateReceivedError: proof?.state !== ProofState.RequestReceived,
659
- }
660
- }, [hasAvailableCredentials, hasSatisfiedPredicates, getCredentialsFields, revocationOffense, proof])
661
-
662
- const isShareDisabled = useMemo(() => {
663
- return Object.values(shareDisabledErrors).some((value) => value)
664
- }, [shareDisabledErrors])
665
-
666
- const proofPageHeader = () => {
667
- return (
668
- <>
669
- {attestationLoading && (
670
- <View style={{ padding: 20 }}>
671
- <InfoTextBox>{t('ProofRequest.JustAMoment')}</InfoTextBox>
672
- </View>
673
- )}
674
- {loading || attestationLoading ? (
675
- <LoadingPlaceholder
676
- workflowType={LoadingPlaceholderWorkflowType.ProofRequested}
677
- timeoutDurationInMs={10000}
678
- loadingProgressPercent={30}
679
- onCancelTouched={async () => {
680
- await handleDeclineTouched()
681
- }}
682
- testID={testIdWithKey('ProofRequestLoading')}
683
- />
684
- ) : (
685
- <View style={styles.pageMargin}>
686
- <ConnectionImage connectionId={proof?.connectionId} />
687
- <View style={styles.headerTextContainer}>
688
- <ThemedText style={styles.headerText} testID={testIdWithKey('HeaderText')}>
689
- <ThemedText variant="title">
690
- {proofConnectionLabel || outOfBandInvitation?.label || t('ContactDetails.AContact')}
691
- </ThemedText>{' '}
692
- <ThemedText>{t('ProofRequest.IsRequestingYouToShare')}</ThemedText>
693
- <ThemedText variant="title">{` ${activeCreds?.length} `}</ThemedText>
694
- <ThemedText>
695
- {activeCreds?.length > 1 ? t('ProofRequest.Credentials') : t('ProofRequest.Credential')}
696
- </ThemedText>
697
- </ThemedText>
698
- {isShareDisabled && (
699
- <InfoTextBox type={InfoBoxType.Error} style={{ marginTop: 16 }} textStyle={{ fontWeight: 'normal' }}>
700
- <View style={{ flex: 1, flexWrap: 'wrap' }}>
701
- <ThemedText
702
- style={{
703
- alignSelf: 'center',
704
- flex: 1,
705
- flexWrap: 'wrap',
706
- color: ColorPalette.notification.errorText,
707
- }}
708
- >
709
- {t('ProofRequest.YouCantRespond')}{' '}
710
- <ThemedText
711
- style={{
712
- fontWeight: TextTheme.normal.fontWeight,
713
- color: ColorPalette.brand.link,
714
- }}
715
- onPress={() => setShowDetailsModal(true)}
716
- >
717
- {t('Global.ShowDetails')}
718
- </ThemedText>
719
- </ThemedText>
720
- </View>
721
- </InfoTextBox>
722
- )}
723
- </View>
724
- </View>
725
- )}
726
- </>
727
- )
728
- }
729
-
730
- const shareDisabledMessage = useMemo(() => {
731
- let finalMessage = `${t('ProofRequest.YouCantRespondReasons')}\n`
732
-
733
- if (shareDisabledErrors.hasCredentialError) {
734
- finalMessage += `\n \u2022 ${t('ProofRequest.CredentialIsMissing')}`
735
- }
736
- if (shareDisabledErrors.hasSatisfiedPredicateError) {
737
- finalMessage += `\n \u2022 ${t('ProofRequest.ProofRequestPredicateError')}`
738
- }
739
- if (shareDisabledErrors.hasRevokedOffense) {
740
- finalMessage += `\n \u2022 ${t('ProofRequest.CredentialForProofIsRevoked')}`
741
- }
742
- if (shareDisabledErrors.hasProofStateReceivedError) {
743
- finalMessage += `\n \u2022 ${t('ProofRequest.ProofRequestStateError', { state: proof?.state })}`
744
- }
745
-
746
- finalMessage += `\n\n${t('ProofRequest.PleaseAddress')}`
747
- return finalMessage
748
- }, [t, shareDisabledErrors, proof])
749
-
750
- const handleAltCredChange = useCallback(
751
- (selectedCred: string, altCredentials: string[]) => {
752
- const onCredChange = (cred: string) => {
753
- const newSelectedCreds = (
754
- selectedCredentials.length > 0 ? selectedCredentials : activeCreds.map((item) => item.credId)
755
- ).filter((id) => !altCredentials.includes(id))
756
- setSelectedCredentials([cred, ...newSelectedCreds])
757
- }
758
- navigation.getParent()?.navigate(Stacks.ProofRequestsStack, {
759
- screen: Screens.ProofChangeCredential,
760
- params: {
761
- selectedCred,
762
- altCredentials,
763
- proofId,
764
- onCredChange,
765
- },
766
- })
767
- },
768
- [selectedCredentials, activeCreds, proofId, navigation]
769
- )
770
-
771
- const proofPageFooter = () => {
772
- return (
773
- <View style={[styles.pageFooter, styles.pageMargin]}>
774
- {containsPI && (
775
- <InfoTextBox
776
- type={InfoBoxType.Warn}
777
- style={{ marginTop: 16 }}
778
- textStyle={{ fontSize: TextTheme.title.fontSize }}
779
- >
780
- {t('ProofRequest.SensitiveInformation')}
781
- </InfoTextBox>
782
- )}
783
- {!loading && Boolean(proofConnectionLabel) && goalCode === 'aries.vc.verify' && (
784
- <ConnectionAlert connectionLabel={proofConnectionLabel} />
785
- )}
786
- {!loading && isShareDisabled ? (
787
- <View style={styles.footerButton}>
788
- <Button
789
- title={t('Global.Cancel')}
790
- accessibilityLabel={t('Global.Cancel')}
791
- testID={testIdWithKey('Cancel')}
792
- buttonType={ButtonType.Primary}
793
- onPress={handleCancelTouched}
794
- />
795
- </View>
796
- ) : (
797
- <>
798
- {!loading && (
799
- <>
800
- <View style={styles.footerButton}>
801
- <Button
802
- title={t('Global.Share')}
803
- accessibilityLabel={t('Global.Share')}
804
- testID={testIdWithKey('Share')}
805
- buttonType={ButtonType.Primary}
806
- onPress={handleAcceptPress}
807
- />
808
- </View>
809
- <View style={styles.footerButton}>
810
- <Button
811
- title={t('Global.Decline')}
812
- accessibilityLabel={t('Global.Decline')}
813
- testID={testIdWithKey('Decline')}
814
- buttonType={!retrievedCredentials ? ButtonType.Primary : ButtonType.Secondary}
815
- onPress={toggleDeclineModalVisible}
816
- />
817
- </View>
818
- {store.preferences.developerModeEnabled && (
819
- <>
820
- <View style={styles.footerButton}>
821
- <Button
822
- title={t('Global.ViewJSON')}
823
- accessibilityLabel={t('Global.ViewJSON')}
824
- testID={testIdWithKey('JSONDetails')}
825
- buttonType={ButtonType.Secondary}
826
- onPress={callViewJSONDetails}
827
- />
828
- </View>
829
- </>
830
- )}
831
- </>
832
- )}
833
- </>
834
- )}
835
- </View>
836
- )
837
- }
838
-
839
- const CredentialList: React.FC<CredentialListProps> = ({ header, footer, items, missing }) => {
840
- return (
841
- <FlatList
842
- data={items}
843
- scrollEnabled={false}
844
- ListHeaderComponent={header}
845
- ListFooterComponent={footer}
846
- renderItem={({ item }) => {
847
- const errors: CredentialErrors[] = []
848
- missing && errors.push(CredentialErrors.NotInWallet)
849
- item.credExchangeRecord?.revocationNotification?.revocationDate && errors.push(CredentialErrors.Revoked)
850
- !hasSatisfiedPredicates(getCredentialsFields(), item.credId) && errors.push(CredentialErrors.PredicateError)
851
- return (
852
- <View>
853
- {loading || attestationLoading ? null : (
854
- <View style={{ marginVertical: 10, marginHorizontal: 20 }}>
855
- <CredentialCard
856
- credential={item.credExchangeRecord}
857
- credDefId={item.credDefId}
858
- schemaId={item.schemaId}
859
- displayItems={[
860
- ...(item.attributes ?? []),
861
- ...evaluatePredicates(getCredentialsFields(), item.credId)(item),
862
- ]}
863
- credName={item.credName}
864
- hasAltCredentials={item.altCredentials && item.altCredentials.length > 1}
865
- handleAltCredChange={
866
- item.altCredentials && item.altCredentials.length > 1
867
- ? () => {
868
- handleAltCredChange(item.credId, item.altCredentials ?? [item.credId])
869
- }
870
- : undefined
871
- }
872
- proof
873
- credentialErrors={errors}
874
- />
875
- </View>
876
- )}
877
- </View>
878
- )
879
- }}
880
- />
881
- )
882
- }
883
-
884
- const credentialListHeader = (headerText: string) => {
885
- return (
886
- <View style={styles.pageMargin}>
887
- {!(loading || attestationLoading) && (
888
- <ThemedText
889
- variant="title"
890
- testID={testIdWithKey('ProofRequestHeaderText')}
891
- style={{
892
- marginTop: 10,
893
- }}
894
- >
895
- {headerText}
896
- </ThemedText>
897
- )}
898
- </View>
899
- )
900
- }
901
- return (
902
- <SafeAreaView style={styles.pageContainer} edges={['bottom', 'left', 'right']}>
903
- {showErrorModal && (
904
- <SafeAreaView
905
- style={{
906
- minHeight: height,
907
- flexDirection: 'column',
908
- justifyContent: 'center',
909
- alignItems: 'center',
910
- backgroundColor: ColorPalette.brand.primaryBackground,
911
- }}
912
- >
913
- <InfoBox
914
- title={t('Error.Title1027')}
915
- description={t('ProofRequest.ProofRequestErrorMessage')}
916
- message={t('ProofRequest.ProofRequestStateError', { state: proof?.state })}
917
- notificationType={InfoBoxType.Error}
918
- onCallToActionLabel={t('Global.TryAgain')}
919
- onCallToActionPressed={() => {
920
- setShowErrorModal(false)
921
- handleCancelTouched()
922
- }}
923
- showVersionFooter={true}
924
- />
925
- </SafeAreaView>
926
- )}
927
- {showDetailsModal && (
928
- <SafeAreaView
929
- style={{
930
- minHeight: height,
931
- flexDirection: 'column',
932
- justifyContent: 'center',
933
- alignItems: 'center',
934
- backgroundColor: ColorPalette.brand.primaryBackground,
935
- }}
936
- >
937
- <InfoBox
938
- title={t('Error.Title1027')}
939
- description={t('ProofRequest.ProofRequestErrorMessage')}
940
- message={shareDisabledMessage}
941
- notificationType={InfoBoxType.Error}
942
- onCallToActionPressed={() => setShowDetailsModal(false)}
943
- onCallToActionLabel={t('Global.GotIt')}
944
- showVersionFooter={true}
945
- renderShowDetails={true}
946
- onClosePressed={() => setShowDetailsModal(false)}
947
- />
948
- </SafeAreaView>
949
- )}
950
- <ScrollView>
951
- <View style={styles.pageContent}>
952
- {proofPageHeader()}
953
- {/* This list will render if any credentials in a proof request are not in the users wallet */}
954
- <CredentialList
955
- header={
956
- missingCredentials.length > 0 && userCredentials.length > 0
957
- ? credentialListHeader(t('ProofRequest.MissingCredentials'))
958
- : undefined
959
- }
960
- items={missingCredentials}
961
- missing={true}
962
- footer={
963
- missingCredentials.length > 0 && userCredentials.length > 0 ? (
964
- <View
965
- style={{
966
- width: 'auto',
967
- borderWidth: 1,
968
- borderColor: ColorPalette.grayscale.lightGrey,
969
- marginTop: 20,
970
- }}
971
- />
972
- ) : undefined
973
- }
974
- />
975
- <CredentialList
976
- header={
977
- missingCredentials.length > 0 && userCredentials.length > 0
978
- ? credentialListHeader(t('ProofRequest.FromYourWallet'))
979
- : undefined
980
- }
981
- items={userCredentials}
982
- missing={false}
983
- />
984
- {proofPageFooter()}
985
- </View>
986
- <ProofRequestAccept visible={pendingModalVisible} proofId={proofId} />
987
- <CommonRemoveModal
988
- usage={ModalUsage.ProofRequestDecline}
989
- visible={declineModalVisible}
990
- onSubmit={handleDeclineTouched}
991
- onCancel={toggleDeclineModalVisible}
992
- />
993
- <ProofCancelModal visible={cancelModalVisible} onDone={onCancelDone} />
994
- </ScrollView>
995
- </SafeAreaView>
996
- )
997
- }
998
-
999
- export default ProofRequest