@bifold/core 1.0.0 → 2.0.1

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 (373) hide show
  1. package/lib/commonjs/App.js +26 -22
  2. package/lib/commonjs/App.js.map +1 -1
  3. package/lib/commonjs/components/inputs/BiometryControl.js +176 -0
  4. package/lib/commonjs/components/inputs/BiometryControl.js.map +1 -0
  5. package/lib/commonjs/components/misc/ConnectionAlert.js +2 -2
  6. package/lib/commonjs/components/misc/ConnectionAlert.js.map +1 -1
  7. package/lib/commonjs/components/misc/InfoBox.js +3 -2
  8. package/lib/commonjs/components/misc/InfoBox.js.map +1 -1
  9. package/lib/commonjs/components/misc/{PINCreateHeader.js → PINHeader.js} +4 -4
  10. package/lib/commonjs/components/misc/PINHeader.js.map +1 -0
  11. package/lib/commonjs/components/misc/PINValidationHelper.js +50 -0
  12. package/lib/commonjs/components/misc/PINValidationHelper.js.map +1 -0
  13. package/lib/commonjs/components/views/PushNotificationsContent.js +52 -0
  14. package/lib/commonjs/components/views/PushNotificationsContent.js.map +1 -0
  15. package/lib/commonjs/components/views/PushNotificationsDisabledContent.js +47 -0
  16. package/lib/commonjs/components/views/PushNotificationsDisabledContent.js.map +1 -0
  17. package/lib/commonjs/container-api.js +8 -3
  18. package/lib/commonjs/container-api.js.map +1 -1
  19. package/lib/commonjs/container-impl.js +25 -21
  20. package/lib/commonjs/container-impl.js.map +1 -1
  21. package/lib/commonjs/contexts/activity.js +17 -41
  22. package/lib/commonjs/contexts/activity.js.map +1 -1
  23. package/lib/commonjs/contexts/auth.js +16 -6
  24. package/lib/commonjs/contexts/auth.js.map +1 -1
  25. package/lib/commonjs/contexts/navigation.js +24 -0
  26. package/lib/commonjs/contexts/navigation.js.map +1 -0
  27. package/lib/commonjs/contexts/reducers/store.js +14 -0
  28. package/lib/commonjs/contexts/reducers/store.js.map +1 -1
  29. package/lib/commonjs/contexts/theme.js +36 -3
  30. package/lib/commonjs/contexts/theme.js.map +1 -1
  31. package/lib/commonjs/hooks/deep-links.js +2 -4
  32. package/lib/commonjs/hooks/deep-links.js.map +1 -1
  33. package/lib/commonjs/hooks/{initialize-agent.js → useBifoldAgentSetup.js} +24 -44
  34. package/lib/commonjs/hooks/useBifoldAgentSetup.js.map +1 -0
  35. package/lib/commonjs/hooks/useOnboardingState.js +3 -3
  36. package/lib/commonjs/hooks/useOnboardingState.js.map +1 -1
  37. package/lib/commonjs/hooks/usePINValidation.js +82 -0
  38. package/lib/commonjs/hooks/usePINValidation.js.map +1 -0
  39. package/lib/commonjs/index.js +34 -33
  40. package/lib/commonjs/index.js.map +1 -1
  41. package/lib/commonjs/localization/en/index.js +31 -25
  42. package/lib/commonjs/localization/en/index.js.map +1 -1
  43. package/lib/commonjs/localization/fr/index.js +18 -6
  44. package/lib/commonjs/localization/fr/index.js.map +1 -1
  45. package/lib/commonjs/localization/pt-br/index.js +43 -37
  46. package/lib/commonjs/localization/pt-br/index.js.map +1 -1
  47. package/lib/commonjs/navigators/MainStack.js +31 -8
  48. package/lib/commonjs/navigators/MainStack.js.map +1 -1
  49. package/lib/commonjs/navigators/OnboardingScreens.js +8 -8
  50. package/lib/commonjs/navigators/OnboardingScreens.js.map +1 -1
  51. package/lib/commonjs/navigators/OnboardingStack.js +20 -12
  52. package/lib/commonjs/navigators/OnboardingStack.js.map +1 -1
  53. package/lib/commonjs/navigators/RootStack.js +27 -30
  54. package/lib/commonjs/navigators/RootStack.js.map +1 -1
  55. package/lib/commonjs/navigators/SettingStack.js +14 -15
  56. package/lib/commonjs/navigators/SettingStack.js.map +1 -1
  57. package/lib/commonjs/navigators/defaultStackOptions.js +13 -2
  58. package/lib/commonjs/navigators/defaultStackOptions.js.map +1 -1
  59. package/lib/commonjs/onboarding.js +12 -5
  60. package/lib/commonjs/onboarding.js.map +1 -1
  61. package/lib/commonjs/screens/Biometry.js +62 -0
  62. package/lib/commonjs/screens/Biometry.js.map +1 -0
  63. package/lib/commonjs/screens/CredentialOffer.js +2 -2
  64. package/lib/commonjs/screens/CredentialOffer.js.map +1 -1
  65. package/lib/commonjs/screens/Onboarding.js.map +1 -1
  66. package/lib/commonjs/screens/PINChange.js +212 -0
  67. package/lib/commonjs/screens/PINChange.js.map +1 -0
  68. package/lib/commonjs/screens/PINCreate.js +47 -224
  69. package/lib/commonjs/screens/PINCreate.js.map +1 -1
  70. package/lib/commonjs/screens/Preface.js.map +1 -1
  71. package/lib/commonjs/screens/ProofRequest.js +112 -33
  72. package/lib/commonjs/screens/ProofRequest.js.map +1 -1
  73. package/lib/commonjs/screens/PushNotifications.js +71 -0
  74. package/lib/commonjs/screens/PushNotifications.js.map +1 -0
  75. package/lib/commonjs/screens/Settings.js +8 -24
  76. package/lib/commonjs/screens/Settings.js.map +1 -1
  77. package/lib/commonjs/screens/Splash.js +7 -23
  78. package/lib/commonjs/screens/Splash.js.map +1 -1
  79. package/lib/commonjs/screens/Terms.js.map +1 -1
  80. package/lib/commonjs/screens/ToggleBiometry.js +135 -0
  81. package/lib/commonjs/screens/ToggleBiometry.js.map +1 -0
  82. package/lib/commonjs/screens/{PushNotification.js → TogglePushNotifications.js} +41 -99
  83. package/lib/commonjs/screens/TogglePushNotifications.js.map +1 -0
  84. package/lib/commonjs/theme.js +4 -2
  85. package/lib/commonjs/theme.js.map +1 -1
  86. package/lib/commonjs/types/navigators.js +5 -2
  87. package/lib/commonjs/types/navigators.js.map +1 -1
  88. package/lib/commonjs/utils/{PINCreationValidation.js → PINValidation.js} +4 -4
  89. package/lib/commonjs/utils/PINValidation.js.map +1 -0
  90. package/lib/commonjs/utils/agent.js.map +1 -1
  91. package/lib/commonjs/utils/helpers.js +2 -0
  92. package/lib/commonjs/utils/helpers.js.map +1 -1
  93. package/lib/module/App.js +24 -20
  94. package/lib/module/App.js.map +1 -1
  95. package/lib/module/components/inputs/BiometryControl.js +167 -0
  96. package/lib/module/components/inputs/BiometryControl.js.map +1 -0
  97. package/lib/module/components/misc/ConnectionAlert.js +2 -2
  98. package/lib/module/components/misc/ConnectionAlert.js.map +1 -1
  99. package/lib/module/components/misc/InfoBox.js +3 -2
  100. package/lib/module/components/misc/InfoBox.js.map +1 -1
  101. package/lib/module/components/misc/{PINCreateHeader.js → PINHeader.js} +4 -4
  102. package/lib/module/components/misc/PINHeader.js.map +1 -0
  103. package/lib/module/components/misc/PINValidationHelper.js +43 -0
  104. package/lib/module/components/misc/PINValidationHelper.js.map +1 -0
  105. package/lib/module/components/views/PushNotificationsContent.js +45 -0
  106. package/lib/module/components/views/PushNotificationsContent.js.map +1 -0
  107. package/lib/module/components/views/PushNotificationsDisabledContent.js +40 -0
  108. package/lib/module/components/views/PushNotificationsDisabledContent.js.map +1 -0
  109. package/lib/module/container-api.js +7 -2
  110. package/lib/module/container-api.js.map +1 -1
  111. package/lib/module/container-impl.js +25 -21
  112. package/lib/module/container-impl.js.map +1 -1
  113. package/lib/module/contexts/activity.js +17 -41
  114. package/lib/module/contexts/activity.js.map +1 -1
  115. package/lib/module/contexts/auth.js +16 -6
  116. package/lib/module/contexts/auth.js.map +1 -1
  117. package/lib/module/contexts/navigation.js +17 -0
  118. package/lib/module/contexts/navigation.js.map +1 -0
  119. package/lib/module/contexts/reducers/store.js +14 -0
  120. package/lib/module/contexts/reducers/store.js.map +1 -1
  121. package/lib/module/contexts/theme.js +36 -4
  122. package/lib/module/contexts/theme.js.map +1 -1
  123. package/lib/module/hooks/deep-links.js +2 -4
  124. package/lib/module/hooks/deep-links.js.map +1 -1
  125. package/lib/module/hooks/{initialize-agent.js → useBifoldAgentSetup.js} +25 -45
  126. package/lib/module/hooks/useBifoldAgentSetup.js.map +1 -0
  127. package/lib/module/hooks/useOnboardingState.js +3 -3
  128. package/lib/module/hooks/useOnboardingState.js.map +1 -1
  129. package/lib/module/hooks/usePINValidation.js +75 -0
  130. package/lib/module/hooks/usePINValidation.js.map +1 -0
  131. package/lib/module/index.js +6 -6
  132. package/lib/module/index.js.map +1 -1
  133. package/lib/module/localization/en/index.js +31 -25
  134. package/lib/module/localization/en/index.js.map +1 -1
  135. package/lib/module/localization/fr/index.js +18 -6
  136. package/lib/module/localization/fr/index.js.map +1 -1
  137. package/lib/module/localization/pt-br/index.js +43 -37
  138. package/lib/module/localization/pt-br/index.js.map +1 -1
  139. package/lib/module/navigators/MainStack.js +32 -9
  140. package/lib/module/navigators/MainStack.js.map +1 -1
  141. package/lib/module/navigators/OnboardingScreens.js +8 -8
  142. package/lib/module/navigators/OnboardingScreens.js.map +1 -1
  143. package/lib/module/navigators/OnboardingStack.js +21 -12
  144. package/lib/module/navigators/OnboardingStack.js.map +1 -1
  145. package/lib/module/navigators/RootStack.js +26 -29
  146. package/lib/module/navigators/RootStack.js.map +1 -1
  147. package/lib/module/navigators/SettingStack.js +14 -15
  148. package/lib/module/navigators/SettingStack.js.map +1 -1
  149. package/lib/module/navigators/defaultStackOptions.js +13 -2
  150. package/lib/module/navigators/defaultStackOptions.js.map +1 -1
  151. package/lib/module/onboarding.js +10 -4
  152. package/lib/module/onboarding.js.map +1 -1
  153. package/lib/module/screens/Biometry.js +53 -0
  154. package/lib/module/screens/Biometry.js.map +1 -0
  155. package/lib/module/screens/CredentialOffer.js +2 -2
  156. package/lib/module/screens/CredentialOffer.js.map +1 -1
  157. package/lib/module/screens/Onboarding.js.map +1 -1
  158. package/lib/module/screens/PINChange.js +203 -0
  159. package/lib/module/screens/PINChange.js.map +1 -0
  160. package/lib/module/screens/PINCreate.js +49 -226
  161. package/lib/module/screens/PINCreate.js.map +1 -1
  162. package/lib/module/screens/Preface.js.map +1 -1
  163. package/lib/module/screens/ProofRequest.js +113 -34
  164. package/lib/module/screens/ProofRequest.js.map +1 -1
  165. package/lib/module/screens/PushNotifications.js +63 -0
  166. package/lib/module/screens/PushNotifications.js.map +1 -0
  167. package/lib/module/screens/Settings.js +9 -25
  168. package/lib/module/screens/Settings.js.map +1 -1
  169. package/lib/module/screens/Splash.js +7 -23
  170. package/lib/module/screens/Splash.js.map +1 -1
  171. package/lib/module/screens/Terms.js.map +1 -1
  172. package/lib/module/screens/ToggleBiometry.js +126 -0
  173. package/lib/module/screens/ToggleBiometry.js.map +1 -0
  174. package/lib/module/screens/TogglePushNotifications.js +112 -0
  175. package/lib/module/screens/TogglePushNotifications.js.map +1 -0
  176. package/lib/module/theme.js +3 -1
  177. package/lib/module/theme.js.map +1 -1
  178. package/lib/module/types/navigators.js +5 -2
  179. package/lib/module/types/navigators.js.map +1 -1
  180. package/lib/module/utils/{PINCreationValidation.js → PINValidation.js} +2 -2
  181. package/lib/module/utils/PINValidation.js.map +1 -0
  182. package/lib/module/utils/agent.js.map +1 -1
  183. package/lib/module/utils/helpers.js +2 -0
  184. package/lib/module/utils/helpers.js.map +1 -1
  185. package/lib/typescript/src/App.d.ts +3 -3
  186. package/lib/typescript/src/App.d.ts.map +1 -1
  187. package/lib/typescript/src/components/inputs/BiometryControl.d.ts +9 -0
  188. package/lib/typescript/src/components/inputs/BiometryControl.d.ts.map +1 -0
  189. package/lib/typescript/src/components/misc/ConnectionAlert.d.ts +1 -1
  190. package/lib/typescript/src/components/misc/ConnectionAlert.d.ts.map +1 -1
  191. package/lib/typescript/src/components/misc/InfoBox.d.ts +1 -0
  192. package/lib/typescript/src/components/misc/InfoBox.d.ts.map +1 -1
  193. package/lib/typescript/src/components/misc/PINHeader.d.ts +6 -0
  194. package/lib/typescript/src/components/misc/PINHeader.d.ts.map +1 -0
  195. package/lib/typescript/src/components/misc/PINValidationHelper.d.ts +8 -0
  196. package/lib/typescript/src/components/misc/PINValidationHelper.d.ts.map +1 -0
  197. package/lib/typescript/src/components/views/PushNotificationsContent.d.ts +4 -0
  198. package/lib/typescript/src/components/views/PushNotificationsContent.d.ts.map +1 -0
  199. package/lib/typescript/src/components/views/PushNotificationsDisabledContent.d.ts +4 -0
  200. package/lib/typescript/src/components/views/PushNotificationsDisabledContent.d.ts.map +1 -0
  201. package/lib/typescript/src/container-api.d.ts +24 -13
  202. package/lib/typescript/src/container-api.d.ts.map +1 -1
  203. package/lib/typescript/src/container-impl.d.ts +4 -2
  204. package/lib/typescript/src/container-impl.d.ts.map +1 -1
  205. package/lib/typescript/src/contexts/activity.d.ts.map +1 -1
  206. package/lib/typescript/src/contexts/auth.d.ts +3 -1
  207. package/lib/typescript/src/contexts/auth.d.ts.map +1 -1
  208. package/lib/typescript/src/contexts/navigation.d.ts +8 -0
  209. package/lib/typescript/src/contexts/navigation.d.ts.map +1 -0
  210. package/lib/typescript/src/contexts/reducers/store.d.ts +3 -1
  211. package/lib/typescript/src/contexts/reducers/store.d.ts.map +1 -1
  212. package/lib/typescript/src/contexts/theme.d.ts +9 -3
  213. package/lib/typescript/src/contexts/theme.d.ts.map +1 -1
  214. package/lib/typescript/src/hooks/deep-links.d.ts.map +1 -1
  215. package/lib/typescript/src/hooks/useBifoldAgentSetup.d.ts +10 -0
  216. package/lib/typescript/src/hooks/useBifoldAgentSetup.d.ts.map +1 -0
  217. package/lib/typescript/src/hooks/useOnboardingState.d.ts +2 -1
  218. package/lib/typescript/src/hooks/useOnboardingState.d.ts.map +1 -1
  219. package/lib/typescript/src/hooks/usePINValidation.d.ts +20 -0
  220. package/lib/typescript/src/hooks/usePINValidation.d.ts.map +1 -0
  221. package/lib/typescript/src/index.d.ts +9 -7
  222. package/lib/typescript/src/index.d.ts.map +1 -1
  223. package/lib/typescript/src/localization/en/index.d.ts +23 -17
  224. package/lib/typescript/src/localization/en/index.d.ts.map +1 -1
  225. package/lib/typescript/src/localization/fr/index.d.ts +14 -2
  226. package/lib/typescript/src/localization/fr/index.d.ts.map +1 -1
  227. package/lib/typescript/src/localization/pt-br/index.d.ts +23 -17
  228. package/lib/typescript/src/localization/pt-br/index.d.ts.map +1 -1
  229. package/lib/typescript/src/navigators/MainStack.d.ts.map +1 -1
  230. package/lib/typescript/src/navigators/OnboardingScreens.d.ts +3 -3
  231. package/lib/typescript/src/navigators/OnboardingScreens.d.ts.map +1 -1
  232. package/lib/typescript/src/navigators/OnboardingStack.d.ts +7 -1
  233. package/lib/typescript/src/navigators/OnboardingStack.d.ts.map +1 -1
  234. package/lib/typescript/src/navigators/RootStack.d.ts.map +1 -1
  235. package/lib/typescript/src/navigators/SettingStack.d.ts.map +1 -1
  236. package/lib/typescript/src/navigators/defaultStackOptions.d.ts.map +1 -1
  237. package/lib/typescript/src/onboarding.d.ts +4 -2
  238. package/lib/typescript/src/onboarding.d.ts.map +1 -1
  239. package/lib/typescript/src/screens/Biometry.d.ts +4 -0
  240. package/lib/typescript/src/screens/Biometry.d.ts.map +1 -0
  241. package/lib/typescript/src/screens/{PushNotification.d.ts → PINChange.d.ts} +3 -3
  242. package/lib/typescript/src/screens/PINChange.d.ts.map +1 -0
  243. package/lib/typescript/src/screens/PINCreate.d.ts.map +1 -1
  244. package/lib/typescript/src/screens/ProofRequest.d.ts.map +1 -1
  245. package/lib/typescript/src/screens/PushNotifications.d.ts +4 -0
  246. package/lib/typescript/src/screens/PushNotifications.d.ts.map +1 -0
  247. package/lib/typescript/src/screens/Settings.d.ts.map +1 -1
  248. package/lib/typescript/src/screens/Splash.d.ts +7 -4
  249. package/lib/typescript/src/screens/Splash.d.ts.map +1 -1
  250. package/lib/typescript/src/screens/ToggleBiometry.d.ts +4 -0
  251. package/lib/typescript/src/screens/ToggleBiometry.d.ts.map +1 -0
  252. package/lib/typescript/src/screens/TogglePushNotifications.d.ts +4 -0
  253. package/lib/typescript/src/screens/TogglePushNotifications.d.ts.map +1 -0
  254. package/lib/typescript/src/theme.d.ts +3 -1
  255. package/lib/typescript/src/theme.d.ts.map +1 -1
  256. package/lib/typescript/src/types/navigators.d.ts +11 -13
  257. package/lib/typescript/src/types/navigators.d.ts.map +1 -1
  258. package/lib/typescript/src/types/state.d.ts +1 -0
  259. package/lib/typescript/src/types/state.d.ts.map +1 -1
  260. package/lib/typescript/src/utils/{PINCreationValidation.d.ts → PINValidation.d.ts} +2 -2
  261. package/lib/typescript/src/utils/PINValidation.d.ts.map +1 -0
  262. package/lib/typescript/src/utils/agent.d.ts +1 -2
  263. package/lib/typescript/src/utils/agent.d.ts.map +1 -1
  264. package/lib/typescript/src/utils/helpers.d.ts.map +1 -1
  265. package/package.json +5 -5
  266. package/src/App.tsx +41 -40
  267. package/src/components/inputs/BiometryControl.tsx +176 -0
  268. package/src/components/misc/ConnectionAlert.tsx +3 -3
  269. package/src/components/misc/InfoBox.tsx +3 -1
  270. package/src/components/misc/{PINCreateHeader.tsx → PINHeader.tsx} +4 -4
  271. package/src/components/misc/PINValidationHelper.tsx +48 -0
  272. package/src/components/views/PushNotificationsContent.tsx +51 -0
  273. package/src/components/views/PushNotificationsDisabledContent.tsx +47 -0
  274. package/src/container-api.ts +27 -11
  275. package/src/container-impl.ts +31 -27
  276. package/src/contexts/activity.tsx +17 -42
  277. package/src/contexts/auth.tsx +18 -6
  278. package/src/contexts/navigation.tsx +19 -0
  279. package/src/contexts/reducers/store.ts +12 -0
  280. package/src/contexts/theme.tsx +51 -0
  281. package/src/hooks/deep-links.ts +2 -4
  282. package/src/hooks/{initialize-agent.ts → useBifoldAgentSetup.ts} +32 -54
  283. package/src/hooks/useOnboardingState.ts +10 -3
  284. package/src/hooks/usePINValidation.ts +98 -0
  285. package/src/index.ts +12 -14
  286. package/src/localization/en/index.ts +26 -20
  287. package/src/localization/fr/index.ts +32 -20
  288. package/src/localization/pt-br/index.ts +39 -33
  289. package/src/navigators/MainStack.tsx +29 -8
  290. package/src/navigators/OnboardingScreens.ts +11 -11
  291. package/src/navigators/OnboardingStack.tsx +26 -14
  292. package/src/navigators/RootStack.tsx +31 -25
  293. package/src/navigators/SettingStack.tsx +15 -16
  294. package/src/navigators/defaultStackOptions.tsx +13 -2
  295. package/src/onboarding.ts +12 -5
  296. package/src/screens/Biometry.tsx +57 -0
  297. package/src/screens/CredentialOffer.tsx +2 -2
  298. package/src/screens/Onboarding.tsx +2 -2
  299. package/src/screens/PINChange.tsx +250 -0
  300. package/src/screens/PINCreate.tsx +51 -267
  301. package/src/screens/Preface.tsx +2 -2
  302. package/src/screens/ProofRequest.tsx +140 -48
  303. package/src/screens/PushNotifications.tsx +59 -0
  304. package/src/screens/Settings.tsx +5 -10
  305. package/src/screens/Splash.tsx +10 -22
  306. package/src/screens/Terms.tsx +2 -2
  307. package/src/screens/ToggleBiometry.tsx +167 -0
  308. package/src/screens/TogglePushNotifications.tsx +118 -0
  309. package/src/theme.ts +5 -1
  310. package/src/types/navigators.ts +11 -12
  311. package/src/types/state.ts +1 -0
  312. package/src/utils/{PINCreationValidation.ts → PINValidation.ts} +1 -1
  313. package/src/utils/agent.ts +1 -2
  314. package/src/utils/helpers.ts +2 -0
  315. package/lib/commonjs/components/misc/ActivityLogLink.js +0 -44
  316. package/lib/commonjs/components/misc/ActivityLogLink.js.map +0 -1
  317. package/lib/commonjs/components/misc/PINCreateHeader.js.map +0 -1
  318. package/lib/commonjs/components/modals/NotificationModal.js +0 -121
  319. package/lib/commonjs/components/modals/NotificationModal.js.map +0 -1
  320. package/lib/commonjs/components/texts/Label.js +0 -57
  321. package/lib/commonjs/components/texts/Label.js.map +0 -1
  322. package/lib/commonjs/components/texts/Title.js +0 -29
  323. package/lib/commonjs/components/texts/Title.js.map +0 -1
  324. package/lib/commonjs/components/views/ModularView.js +0 -41
  325. package/lib/commonjs/components/views/ModularView.js.map +0 -1
  326. package/lib/commonjs/hooks/initialize-agent.js.map +0 -1
  327. package/lib/commonjs/screens/PushNotification.js.map +0 -1
  328. package/lib/commonjs/screens/UseBiometry.js +0 -315
  329. package/lib/commonjs/screens/UseBiometry.js.map +0 -1
  330. package/lib/commonjs/utils/PINCreationValidation.js.map +0 -1
  331. package/lib/module/components/misc/ActivityLogLink.js +0 -37
  332. package/lib/module/components/misc/ActivityLogLink.js.map +0 -1
  333. package/lib/module/components/misc/PINCreateHeader.js.map +0 -1
  334. package/lib/module/components/modals/NotificationModal.js +0 -112
  335. package/lib/module/components/modals/NotificationModal.js.map +0 -1
  336. package/lib/module/components/texts/Label.js +0 -50
  337. package/lib/module/components/texts/Label.js.map +0 -1
  338. package/lib/module/components/texts/Title.js +0 -22
  339. package/lib/module/components/texts/Title.js.map +0 -1
  340. package/lib/module/components/views/ModularView.js +0 -34
  341. package/lib/module/components/views/ModularView.js.map +0 -1
  342. package/lib/module/hooks/initialize-agent.js.map +0 -1
  343. package/lib/module/screens/PushNotification.js +0 -170
  344. package/lib/module/screens/PushNotification.js.map +0 -1
  345. package/lib/module/screens/UseBiometry.js +0 -306
  346. package/lib/module/screens/UseBiometry.js.map +0 -1
  347. package/lib/module/utils/PINCreationValidation.js.map +0 -1
  348. package/lib/typescript/src/components/misc/ActivityLogLink.d.ts +0 -4
  349. package/lib/typescript/src/components/misc/ActivityLogLink.d.ts.map +0 -1
  350. package/lib/typescript/src/components/misc/PINCreateHeader.d.ts +0 -6
  351. package/lib/typescript/src/components/misc/PINCreateHeader.d.ts.map +0 -1
  352. package/lib/typescript/src/components/modals/NotificationModal.d.ts +0 -17
  353. package/lib/typescript/src/components/modals/NotificationModal.d.ts.map +0 -1
  354. package/lib/typescript/src/components/texts/Label.d.ts +0 -9
  355. package/lib/typescript/src/components/texts/Label.d.ts.map +0 -1
  356. package/lib/typescript/src/components/texts/Title.d.ts +0 -8
  357. package/lib/typescript/src/components/texts/Title.d.ts.map +0 -1
  358. package/lib/typescript/src/components/views/ModularView.d.ts +0 -9
  359. package/lib/typescript/src/components/views/ModularView.d.ts.map +0 -1
  360. package/lib/typescript/src/hooks/initialize-agent.d.ts +0 -7
  361. package/lib/typescript/src/hooks/initialize-agent.d.ts.map +0 -1
  362. package/lib/typescript/src/screens/PushNotification.d.ts.map +0 -1
  363. package/lib/typescript/src/screens/UseBiometry.d.ts +0 -4
  364. package/lib/typescript/src/screens/UseBiometry.d.ts.map +0 -1
  365. package/lib/typescript/src/utils/PINCreationValidation.d.ts.map +0 -1
  366. package/src/components/misc/ActivityLogLink.tsx +0 -34
  367. package/src/components/modals/NotificationModal.tsx +0 -127
  368. package/src/components/texts/Label.tsx +0 -51
  369. package/src/components/texts/Title.tsx +0 -25
  370. package/src/components/views/ModularView.tsx +0 -35
  371. package/src/contexts/theme.ts +0 -9
  372. package/src/screens/PushNotification.tsx +0 -186
  373. package/src/screens/UseBiometry.tsx +0 -357
@@ -1,57 +1,59 @@
1
- import { Agent } from '@credo-ts/core'
2
- import { getProofRequestTemplates } from '@bifold/verifier'
3
1
  import { DefaultOCABundleResolver } from '@bifold/oca/build/legacy'
2
+ import { getProofRequestTemplates } from '@bifold/verifier'
3
+ import { Agent } from '@credo-ts/core'
4
4
  import { createContext, useContext } from 'react'
5
5
  import { DependencyContainer } from 'tsyringe'
6
6
 
7
7
  import * as bundle from './assets/oca-bundles.json'
8
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 HomeHeaderView from './components/views/HomeHeaderView'
9
19
  import defaultIndyLedgers from './configs/ledgers/indy'
10
20
  import { LocalStorageKeys, PINRules } from './constants'
11
- import { TOKENS, Container, TokenMapping } from './container-api'
21
+ import { Container, TokenMapping, TOKENS } from './container-api'
12
22
  import { DispatchAction, ReducerAction } from './contexts/reducers/store'
13
23
  import { defaultState } from './contexts/store'
14
24
  import { useNotifications } from './hooks/notifications'
25
+ import useBifoldAgentSetup from './hooks/useBifoldAgentSetup'
26
+ import { Locales } from './localization'
15
27
  import { IHistoryManager } from './modules/history'
16
28
  import HistoryManager from './modules/history/context/historyManager'
17
29
  import OnboardingStack from './navigators/OnboardingStack'
30
+ import { DefaultScreenLayoutOptions } from './navigators/defaultLayoutOptions'
18
31
  import { DefaultScreenOptionsDictionary } from './navigators/defaultStackOptions'
32
+ import { generateOnboardingWorkflowSteps } from './onboarding'
33
+ import Biometry from './screens/Biometry'
19
34
  import Developer from './screens/Developer'
20
35
  import Onboarding from './screens/Onboarding'
36
+ import OnboardingPages from './screens/OnboardingPages'
37
+ import PINExplainer from './screens/PINExplainer'
21
38
  import Preface from './screens/Preface'
39
+ import Scan from './screens/Scan'
22
40
  import Splash from './screens/Splash'
23
- import UpdateAvailable from './screens/UpdateAvailable'
24
41
  import ScreenTerms, { TermsVersion } from './screens/Terms'
42
+ import ToggleBiometry from './screens/ToggleBiometry'
43
+ import UpdateAvailable from './screens/UpdateAvailable'
25
44
  import { loadLoginAttempt } from './services/keychain'
26
45
  import { BifoldLogger } from './services/logger'
46
+ import { PersistentStorage } from './services/storage'
47
+ import { Config, HistoryEventsLoggerConfig } from './types/config'
48
+ import { InlineErrorPosition } from './types/error'
27
49
  import {
28
50
  Migration as MigrationState,
51
+ PersistentState,
29
52
  Preferences as PreferencesState,
30
53
  State,
31
54
  Onboarding as StoreOnboardingState,
32
55
  Tours as ToursState,
33
- PersistentState,
34
56
  } from './types/state'
35
- import OnboardingPages from './screens/OnboardingPages'
36
- import UseBiometry from './screens/UseBiometry'
37
- import Scan from './screens/Scan'
38
- import PINExplainer from './screens/PINExplainer'
39
- import HomeHeaderView from './components/views/HomeHeaderView'
40
- import HomeFooterView from './components/views/HomeFooterView'
41
- import EmptyList from './components/misc/EmptyList'
42
- import Record from './components/record/Record'
43
- import NotificationListItem from './components/listItems/NotificationListItem'
44
- import NoNewUpdates from './components/misc/NoNewUpdates'
45
- import PINCreateHeader from './components/misc/PINCreateHeader'
46
- import { PersistentStorage } from './services/storage'
47
- import { Config, HistoryEventsLoggerConfig } from './types/config'
48
- import { Locales } from './localization'
49
- import ContactListItem from './components/listItems/ContactListItem'
50
- import ContactCredentialListItem from './components/listItems/ContactCredentialListItem'
51
- import { InlineErrorPosition } from './types/error'
52
- import { DefaultScreenLayoutOptions } from './navigators/defaultLayoutOptions'
53
- import ConnectionAlert from './components/misc/ConnectionAlert'
54
- import { generateOnboardingWorkflowSteps } from './onboarding'
55
57
 
56
58
  export const defaultConfig: Config = {
57
59
  PINSecurity: {
@@ -119,12 +121,14 @@ export class MainContainer implements Container {
119
121
  this._container.registerInstance(TOKENS.SCREEN_SPLASH, Splash)
120
122
  this._container.registerInstance(TOKENS.SCREEN_UPDATE_AVAILABLE, UpdateAvailable)
121
123
  this._container.registerInstance(TOKENS.SCREEN_ONBOARDING_PAGES, OnboardingPages)
122
- this._container.registerInstance(TOKENS.COMPONENT_PIN_CREATE_HEADER, PINCreateHeader)
123
- this._container.registerInstance(TOKENS.SCREEN_USE_BIOMETRY, UseBiometry)
124
+ this._container.registerInstance(TOKENS.COMPONENT_PIN_HEADER, PINHeader)
125
+ this._container.registerInstance(TOKENS.SCREEN_BIOMETRY, Biometry)
126
+ this._container.registerInstance(TOKENS.SCREEN_TOGGLE_BIOMETRY, ToggleBiometry)
124
127
  this._container.registerInstance(TOKENS.SCREEN_SCAN, Scan)
125
128
  this._container.registerInstance(TOKENS.SCREEN_ONBOARDING_ITEM, Onboarding)
126
129
  this._container.registerInstance(TOKENS.SCREEN_ONBOARDING, Onboarding)
127
130
  this._container.registerInstance(TOKENS.SCREEN_PIN_EXPLAINER, PINExplainer)
131
+ this._container.registerInstance(TOKENS.HOOK_USE_AGENT_SETUP, useBifoldAgentSetup)
128
132
  this._container.registerInstance(TOKENS.STACK_ONBOARDING, OnboardingStack)
129
133
  this._container.registerInstance(TOKENS.COMP_BUTTON, Button)
130
134
  this._container.registerInstance(TOKENS.GROUP_BY_REFERENT, false)
@@ -10,11 +10,10 @@ import React, {
10
10
  useState,
11
11
  } from 'react'
12
12
  import { AppState, AppStateStatus, PanResponder, View } from 'react-native'
13
+ import { defaultAutoLockTime } from '../constants'
14
+ import { TOKENS, useServices } from '../container-api'
13
15
  import { useAuth } from './auth'
14
16
  import { useStore } from './store'
15
- import { DispatchAction } from './reducers/store'
16
- import { TOKENS, useServices } from '../container-api'
17
- import { defaultAutoLockTime } from '../constants'
18
17
 
19
18
  // number of minutes before the timeout action is triggered
20
19
  // a value of 0 will never trigger the lock out action and
@@ -34,38 +33,18 @@ export const ActivityContext = createContext<ActivityContext>(null as unknown as
34
33
 
35
34
  export const ActivityProvider: React.FC<PropsWithChildren> = ({ children }) => {
36
35
  const [logger] = useServices([TOKENS.UTIL_LOGGER])
37
- const [store, dispatch] = useStore()
36
+ const [store] = useStore()
38
37
  const { agent } = useAgent()
39
- const { removeSavedWalletSecret } = useAuth()
38
+ const { lockOutUser } = useAuth()
40
39
  const lastActiveTimeRef = useRef<number | undefined>(undefined)
41
40
  const timeoutInMilliseconds = useRef<number>((store.preferences.autoLockTime ?? defaultAutoLockTime) * 60000)
42
41
  const inactivityTimeoutRef = useRef<NodeJS.Timeout | null>(null)
43
42
  const prevAppStateStatusRef = useRef(AppState.currentState)
44
43
  const [appStateStatus, setAppStateStatus] = useState<AppStateStatus>(AppState.currentState)
45
44
 
46
- const lockOutUser = useCallback(async () => {
47
- if (!store.authentication.didAuthenticate) {
48
- return
49
- }
50
-
51
- try {
52
- removeSavedWalletSecret()
53
- await agent?.shutdown()
54
- logger.info('Agent shutdown successfully')
55
- } catch (error) {
56
- logger.error(`Error during agent shutdown: ${error}`)
57
- }
58
-
59
- dispatch({
60
- type: DispatchAction.DID_AUTHENTICATE,
61
- payload: [false],
62
- })
63
-
64
- dispatch({
65
- type: DispatchAction.LOCKOUT_UPDATED,
66
- payload: [{ displayNotification: true }],
67
- })
68
- }, [agent, removeSavedWalletSecret, dispatch, logger, store.authentication.didAuthenticate])
45
+ if (!agent) {
46
+ throw new Error('ActivityProvider must be used within agent context provider')
47
+ }
69
48
 
70
49
  const clearInactivityTimeoutIfExists = useCallback(() => {
71
50
  if (inactivityTimeoutRef.current) {
@@ -74,7 +53,7 @@ export const ActivityProvider: React.FC<PropsWithChildren> = ({ children }) => {
74
53
  }, [])
75
54
 
76
55
  const resetInactivityTimeout = useCallback(
77
- async (milliseconds: number) => {
56
+ (milliseconds: number) => {
78
57
  clearInactivityTimeoutIfExists()
79
58
  lastActiveTimeRef.current = Date.now()
80
59
 
@@ -94,15 +73,11 @@ export const ActivityProvider: React.FC<PropsWithChildren> = ({ children }) => {
94
73
  if (['active', 'inactive'].includes(prevAppStateStatusRef.current) && nextAppState === 'background') {
95
74
  // remove timeout when backgrounded as timeout refs can be lost when app is backgrounded
96
75
  clearInactivityTimeoutIfExists()
97
-
98
- // if going to background after agent initialization, stop message pickup
99
- if (agent?.isInitialized) {
100
- try {
101
- await agent.mediationRecipient.stopMessagePickup()
102
- logger.info('Stopped agent message pickup')
103
- } catch (err) {
104
- logger.error(`Error stopping agent message pickup, ${err}`)
105
- }
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}`)
106
81
  }
107
82
  }
108
83
 
@@ -114,9 +89,9 @@ export const ActivityProvider: React.FC<PropsWithChildren> = ({ children }) => {
114
89
  Date.now() - lastActiveTimeRef.current >= timeoutInMilliseconds.current &&
115
90
  timeoutInMilliseconds.current > 0
116
91
  ) {
117
- await lockOutUser()
118
- } else if (agent?.isInitialized) {
119
- // otherwise if agent is initialized, restart message pickup
92
+ lockOutUser()
93
+ } else {
94
+ // otherwise restart message pickup
120
95
  try {
121
96
  await agent.mediationRecipient.initiateMessagePickup()
122
97
  logger.info('Restarted agent message pickup')
@@ -126,7 +101,7 @@ export const ActivityProvider: React.FC<PropsWithChildren> = ({ children }) => {
126
101
  }
127
102
 
128
103
  // app coming into the foreground is 'user activity', reset timeout
129
- await resetInactivityTimeout(timeoutInMilliseconds.current)
104
+ resetInactivityTimeout(timeoutInMilliseconds.current)
130
105
  }
131
106
 
132
107
  prevAppStateStatusRef.current = nextAppState
@@ -4,8 +4,7 @@ import '@hyperledger/aries-askar-react-native'
4
4
  import 'reflect-metadata'
5
5
 
6
6
  import { AskarWallet } from '@credo-ts/askar'
7
- import { ConsoleLogger, LogLevel, SigningProviderRegistry } from '@credo-ts/core'
8
- import { useAgent } from '@credo-ts/react-hooks'
7
+ import { Agent, ConsoleLogger, LogLevel, SigningProviderRegistry } from '@credo-ts/core'
9
8
  import { agentDependencies } from '@credo-ts/react-native'
10
9
  import React, { createContext, useCallback, useContext, useState } from 'react'
11
10
  import { useTranslation } from 'react-i18next'
@@ -25,6 +24,7 @@ import { hashPIN } from '../utils/crypto'
25
24
  import { migrateToAskar } from '../utils/migration'
26
25
 
27
26
  export interface AuthContext {
27
+ lockOutUser: () => void
28
28
  checkWalletPIN: (PIN: string) => Promise<boolean>
29
29
  getWalletSecret: () => Promise<WalletSecret | undefined>
30
30
  walletSecret?: WalletSecret
@@ -33,7 +33,7 @@ export interface AuthContext {
33
33
  setPIN: (PIN: string) => Promise<void>
34
34
  commitWalletToKeychain: (useBiometry: boolean) => Promise<boolean>
35
35
  isBiometricsActive: () => Promise<boolean>
36
- rekeyWallet: (oldPin: string, newPin: string, useBiometry?: boolean) => Promise<boolean>
36
+ rekeyWallet: (agent: Agent, oldPin: string, newPin: string, useBiometry?: boolean) => Promise<boolean>
37
37
  }
38
38
 
39
39
  export const AuthContext = createContext<AuthContext>(null as unknown as AuthContext)
@@ -41,7 +41,6 @@ export const AuthContext = createContext<AuthContext>(null as unknown as AuthCon
41
41
  export const AuthProvider: React.FC<React.PropsWithChildren> = ({ children }) => {
42
42
  const [walletSecret, setWalletSecret] = useState<WalletSecret>()
43
43
  const [store, dispatch] = useStore()
44
- const { agent } = useAgent()
45
44
  const { t } = useTranslation()
46
45
 
47
46
  const setPIN = useCallback(async (PIN: string): Promise<void> => {
@@ -130,12 +129,24 @@ export const AuthProvider: React.FC<React.PropsWithChildren> = ({ children }) =>
130
129
  setWalletSecret(undefined)
131
130
  }, [])
132
131
 
132
+ const lockOutUser = useCallback(() => {
133
+ removeSavedWalletSecret()
134
+ dispatch({
135
+ type: DispatchAction.DID_AUTHENTICATE,
136
+ payload: [false],
137
+ })
138
+ dispatch({
139
+ type: DispatchAction.LOCKOUT_UPDATED,
140
+ payload: [{ displayNotification: true }],
141
+ })
142
+ }, [removeSavedWalletSecret, dispatch])
143
+
133
144
  const disableBiometrics = useCallback(async () => {
134
145
  await wipeWalletKey(true)
135
146
  }, [])
136
147
 
137
148
  const rekeyWallet = useCallback(
138
- async (oldPin: string, newPin: string, useBiometry?: boolean): Promise<boolean> => {
149
+ async (agent: Agent, oldPin: string, newPin: string, useBiometry?: boolean): Promise<boolean> => {
139
150
  try {
140
151
  if (!agent) {
141
152
  // no agent set, cannot rekey the wallet
@@ -165,12 +176,13 @@ export const AuthProvider: React.FC<React.PropsWithChildren> = ({ children }) =>
165
176
  }
166
177
  return true
167
178
  },
168
- [agent]
179
+ []
169
180
  )
170
181
 
171
182
  return (
172
183
  <AuthContext.Provider
173
184
  value={{
185
+ lockOutUser,
174
186
  checkWalletPIN,
175
187
  getWalletSecret,
176
188
  removeSavedWalletSecret,
@@ -0,0 +1,19 @@
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
@@ -59,6 +59,7 @@ enum PreferencesDispatchAction {
59
59
  USE_SHAREABLE_LINK = 'preferences/useShareableLink',
60
60
  UPDATE_ALTERNATE_CONTACT_NAMES = 'preferences/updateAlternateContactNames',
61
61
  AUTO_LOCK_TIME = 'preferences/autoLockTime',
62
+ SET_THEME = 'preferences/setTheme',
62
63
  }
63
64
 
64
65
  enum ToursDispatchAction {
@@ -340,6 +341,17 @@ export const reducer = <S extends State>(state: S, action: ReducerAction<Dispatc
340
341
 
341
342
  return newState
342
343
  }
344
+ case PreferencesDispatchAction.SET_THEME: {
345
+ const theme = (action?.payload ?? []).pop() ?? ''
346
+ const preferences = { ...state.preferences, theme }
347
+
348
+ PersistentStorage.storeValueForKey(LocalStorageKeys.Preferences, preferences)
349
+
350
+ return {
351
+ ...state,
352
+ preferences,
353
+ }
354
+ }
343
355
  case ToursDispatchAction.UPDATE_SEEN_TOUR_PROMPT: {
344
356
  const seenToursPrompt: ToursState = (action?.payload ?? []).pop() ?? false
345
357
  const tours = {
@@ -0,0 +1,51 @@
1
+ import { createContext, useCallback, useContext, useMemo } from 'react'
2
+
3
+ import { bifoldTheme, ITheme } from '../theme'
4
+ import { useStore } from './store'
5
+ import { DispatchAction } from './reducers/store'
6
+
7
+ export interface IThemeContext extends ITheme {
8
+ setTheme: (themeName: string) => void
9
+ }
10
+
11
+ const ThemeContext = createContext<IThemeContext>({
12
+ ...bifoldTheme,
13
+ setTheme: () => {},
14
+ })
15
+
16
+ export interface ThemeProviderProps extends React.PropsWithChildren {
17
+ themes: ITheme[]
18
+ defaultThemeName: string
19
+ }
20
+
21
+ export const ThemeProvider = ({ themes, defaultThemeName, children }: ThemeProviderProps) => {
22
+ const [store, dispatch] = useStore()
23
+
24
+ const activeTheme = useMemo(() => {
25
+ return (
26
+ (store.preferences.theme && themes.find((t) => t.themeName === store.preferences.theme)) ||
27
+ themes.find((t) => t.themeName === defaultThemeName) ||
28
+ themes[0]
29
+ )
30
+ }, [store.preferences.theme, themes, defaultThemeName])
31
+
32
+ const setTheme = useCallback(
33
+ (themeName: string) => {
34
+ const newTheme = themes.find((t) => t.themeName === themeName) || themes[0]
35
+ dispatch({ type: DispatchAction.SET_THEME, payload: [newTheme.themeName] })
36
+ },
37
+ [themes, dispatch]
38
+ )
39
+
40
+ // prevent re-rendering of the context value
41
+ const value = useMemo(() => {
42
+ return {
43
+ ...activeTheme,
44
+ setTheme,
45
+ }
46
+ }, [activeTheme, setTheme])
47
+
48
+ return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>
49
+ }
50
+
51
+ export const useTheme = () => useContext(ThemeContext)
@@ -27,15 +27,13 @@ export const useDeepLinks = () => {
27
27
 
28
28
  // deeplink while already open
29
29
  useEffect(() => {
30
- Linking.addEventListener('url', async ({ url }) => {
30
+ const listener = Linking.addListener('url', ({ url }) => {
31
31
  if (url) {
32
32
  setStashedDeepLink(url)
33
33
  }
34
34
  })
35
35
 
36
- return () => {
37
- Linking.removeAllListeners('url')
38
- }
36
+ return listener.remove
39
37
  })
40
38
 
41
39
  // activate stashed deeplink when ready
@@ -1,9 +1,8 @@
1
1
  import { Agent, HttpOutboundTransport, WsOutboundTransport } from '@credo-ts/core'
2
2
  import { IndyVdrPoolService } from '@credo-ts/indy-vdr/build/pool'
3
- import { useAgent } from '@credo-ts/react-hooks'
4
3
  import { agentDependencies } from '@credo-ts/react-native'
5
4
  import { GetCredentialDefinitionRequest, GetSchemaRequest } from '@hyperledger/indy-vdr-shared'
6
- import { useCallback } from 'react'
5
+ import { useCallback, useState } from 'react'
7
6
  import { Config } from 'react-native-config'
8
7
  import { CachesDirectoryPath } from 'react-native-fs'
9
8
 
@@ -14,8 +13,14 @@ import { getAgentModules, createLinkSecretIfRequired } from '../utils/agent'
14
13
  import { migrateToAskar } from '../utils/migration'
15
14
  import { WalletSecret } from '../types/security'
16
15
 
17
- const useInitializeAgent = () => {
18
- const { agent, setAgent } = useAgent()
16
+ export type AgentSetupReturnType = {
17
+ agent: Agent | null
18
+ initializeAgent: (walletSecret: WalletSecret) => Promise<void>
19
+ shutdownAndClearAgentIfExists: () => Promise<void>
20
+ }
21
+
22
+ const useBifoldAgentSetup = (): AgentSetupReturnType => {
23
+ const [agent, setAgent] = useState<Agent | null>(null)
19
24
  const [store, dispatch] = useStore()
20
25
  const [cacheSchemas, cacheCredDefs, logger, indyLedgers] = useServices([
21
26
  TOKENS.CACHE_SCHEMAS,
@@ -24,37 +29,8 @@ const useInitializeAgent = () => {
24
29
  TOKENS.UTIL_LEDGERS,
25
30
  ])
26
31
 
27
- const restartExistingAgent = useCallback(
28
- async (walletSecret: WalletSecret) => {
29
- // if the agent is initialized, it was not a clean shutdown and should be replaced, not restarted
30
- if (!agent || agent.isInitialized) {
31
- return
32
- }
33
-
34
- logger.info('Agent already created, restarting...')
35
- try {
36
- await agent.wallet.open({
37
- id: walletSecret.id,
38
- key: walletSecret.key,
39
- })
40
- await agent.initialize()
41
- } catch {
42
- // if the existing agents wallet cannot be opened or initialize() fails it was
43
- // again not a clean shutdown and the agent should be replaced, not restarted
44
- logger.warn('Failed to restart existing agent, skipping agent restart')
45
- return
46
- }
47
-
48
- logger.info('Successfully restarted existing agent')
49
- return agent
50
- },
51
- [agent, logger]
52
- )
53
-
54
32
  const createNewAgent = useCallback(
55
- async (walletSecret: WalletSecret): Promise<Agent | undefined> => {
56
- logger.info('No agent initialized, creating a new one')
57
-
33
+ async (walletSecret: WalletSecret): Promise<Agent> => {
58
34
  const newAgent = new Agent({
59
35
  config: {
60
36
  label: store.preferences.walletName || 'Aries Bifold',
@@ -91,11 +67,7 @@ const useInitializeAgent = () => {
91
67
  async (newAgent: Agent, walletSecret: WalletSecret) => {
92
68
  // If we haven't migrated to Aries Askar yet, we need to do this before we initialize the agent.
93
69
  if (!store.migration.didMigrateToAskar) {
94
- newAgent.config.logger.debug('Agent not updated to Aries Askar, updating...')
95
-
96
70
  await migrateToAskar(walletSecret.id, walletSecret.key, newAgent)
97
-
98
- newAgent.config.logger.debug('Successfully finished updating agent to Aries Askar')
99
71
  // Store that we migrated to askar.
100
72
  dispatch({
101
73
  type: DispatchAction.DID_MIGRATE_TO_ASKAR,
@@ -124,35 +96,41 @@ const useInitializeAgent = () => {
124
96
  )
125
97
 
126
98
  const initializeAgent = useCallback(
127
- async (walletSecret: WalletSecret): Promise<Agent | undefined> => {
128
- const existingAgent = await restartExistingAgent(walletSecret)
129
- if (existingAgent) {
130
- setAgent(existingAgent)
131
- return existingAgent
132
- }
133
-
99
+ async (walletSecret: WalletSecret): Promise<void> => {
100
+ logger.info('Creating agent')
134
101
  const newAgent = await createNewAgent(walletSecret)
135
- if (!newAgent) {
136
- logger.error('Failed to create a new agent')
137
- return
138
- }
139
102
 
103
+ logger.info('Migrating if required...')
140
104
  await migrateIfRequired(newAgent, walletSecret)
141
105
 
106
+ logger.info('Initializing agent...')
142
107
  await newAgent.initialize()
143
108
 
109
+ logger.info('Creating link secret if required...')
144
110
  await createLinkSecretIfRequired(newAgent)
145
111
 
112
+ logger.info('Warming up cache...')
146
113
  await warmUpCache(newAgent)
147
114
 
115
+ logger.info('Agent initialized successfully')
148
116
  setAgent(newAgent)
149
-
150
- return newAgent
151
117
  },
152
- [logger, restartExistingAgent, setAgent, createNewAgent, migrateIfRequired, warmUpCache]
118
+ [logger, createNewAgent, migrateIfRequired, warmUpCache]
153
119
  )
154
120
 
155
- return { initializeAgent }
121
+ const shutdownAndClearAgentIfExists = useCallback(async () => {
122
+ if (agent) {
123
+ try {
124
+ await agent.shutdown()
125
+ } catch (error) {
126
+ logger.error(`Error shutting down agent with shutdownAndClearAgentIfExists: ${error}`)
127
+ }
128
+ }
129
+
130
+ setAgent(null)
131
+ }, [agent, logger])
132
+
133
+ return { agent, initializeAgent, shutdownAndClearAgentIfExists }
156
134
  }
157
135
 
158
- export default useInitializeAgent
136
+ export default useBifoldAgentSetup
@@ -1,3 +1,4 @@
1
+ import { Agent } from '@credo-ts/core'
1
2
  import { useState, useEffect, useMemo } from 'react'
2
3
  import { useNavigationState } from '@react-navigation/native'
3
4
  import { State } from '../types/state'
@@ -12,7 +13,13 @@ export const useOnboardingState = (
12
13
  store: State,
13
14
  config: Config,
14
15
  termsVersion: number,
15
- generateOnboardingWorkflowSteps: (store: State, config: Config, termsVersion: number) => OnboardingTask[]
16
+ agent: Agent | null,
17
+ generateOnboardingWorkflowSteps: (
18
+ store: State,
19
+ config: Config,
20
+ termsVersion: number,
21
+ agent: Agent | null
22
+ ) => OnboardingTask[]
16
23
  ): {
17
24
  onboardingState: OnboardingTask[]
18
25
  setOnboardingState: React.Dispatch<React.SetStateAction<OnboardingTask[]>>
@@ -32,9 +39,9 @@ export const useOnboardingState = (
32
39
  return
33
40
  }
34
41
 
35
- const onboardingTasks = generateOnboardingWorkflowSteps(store, config, termsVersion)
42
+ const onboardingTasks = generateOnboardingWorkflowSteps(store, config, termsVersion, agent)
36
43
  setOnboardingState(onboardingTasks)
37
- }, [store, config, termsVersion, generateOnboardingWorkflowSteps])
44
+ }, [store, config, termsVersion, agent, generateOnboardingWorkflowSteps])
38
45
 
39
46
  return {
40
47
  onboardingState,
@@ -0,0 +1,98 @@
1
+ import { useCallback, useEffect, useState } from 'react'
2
+ import { useTranslation } from 'react-i18next'
3
+
4
+ import { InlineErrorType, InlineMessageProps } from '../components/inputs/InlineErrorText'
5
+ import { TOKENS, useServices } from '../container-api'
6
+ import { createPINValidations, PINValidationsType } from '../utils/PINValidation'
7
+
8
+ interface ModalState {
9
+ visible: boolean
10
+ title: string
11
+ message: string
12
+ onModalDismiss?: () => void
13
+ }
14
+
15
+ const initialModalState: ModalState = {
16
+ visible: false,
17
+ title: '',
18
+ message: '',
19
+ }
20
+
21
+ export const usePINValidation = (PIN: string, PINTwo: string) => {
22
+ const { t } = useTranslation()
23
+ const [{ PINSecurity }, inlineMessages] = useServices([TOKENS.CONFIG, TOKENS.INLINE_ERRORS])
24
+ const [inlineMessageField1, setInlineMessageField1] = useState<InlineMessageProps>()
25
+ const [inlineMessageField2, setInlineMessageField2] = useState<InlineMessageProps>()
26
+ const [modalState, setModalState] = useState<ModalState>(initialModalState)
27
+
28
+ const clearModal = useCallback(() => {
29
+ setModalState(initialModalState)
30
+ }, [])
31
+
32
+ const [PINValidations, setPINValidations] = useState<PINValidationsType[]>(
33
+ createPINValidations(PIN, PINSecurity.rules)
34
+ )
35
+
36
+ useEffect(() => {
37
+ setInlineMessageField1(undefined)
38
+ setInlineMessageField2(undefined)
39
+ setPINValidations(createPINValidations(PIN, PINSecurity.rules))
40
+ }, [PIN, PINTwo, PINSecurity.rules])
41
+
42
+ const attentionMessage = useCallback(
43
+ (title: string, message: string, pinOne: boolean) => {
44
+ if (inlineMessages.enabled) {
45
+ const config = {
46
+ message: message,
47
+ inlineType: InlineErrorType.error,
48
+ config: inlineMessages,
49
+ }
50
+ if (pinOne) {
51
+ setInlineMessageField1(config)
52
+ } else {
53
+ setInlineMessageField2(config)
54
+ }
55
+ } else {
56
+ setModalState({
57
+ visible: true,
58
+ title: title,
59
+ message: message,
60
+ onModalDismiss: clearModal
61
+ })
62
+ }
63
+ },
64
+ [inlineMessages, clearModal]
65
+ )
66
+
67
+ const validatePINEntry = useCallback(
68
+ (PINOne: string, PINTwo: string): boolean => {
69
+ for (const validation of PINValidations) {
70
+ if (validation.isInvalid) {
71
+ attentionMessage(
72
+ t('PINCreate.InvalidPIN'),
73
+ t(`PINCreate.Message.${validation.errorName}`, validation?.errorTextAddition),
74
+ true
75
+ )
76
+ return false
77
+ }
78
+ }
79
+ if (PINOne !== PINTwo) {
80
+ attentionMessage(t('PINCreate.InvalidPIN'), t('PINCreate.PINsDoNotMatch'), false)
81
+ return false
82
+ }
83
+ return true
84
+ },
85
+ [PINValidations, t, attentionMessage]
86
+ )
87
+
88
+ return {
89
+ PINValidations,
90
+ validatePINEntry,
91
+ inlineMessageField1,
92
+ inlineMessageField2,
93
+ modalState,
94
+ setModalState,
95
+ clearModal,
96
+ PINSecurity
97
+ }
98
+ }