@oxyhq/services 22.12.4 → 22.12.7

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 (639) hide show
  1. package/README.md +16 -46
  2. package/lib/commonjs/index.js +84 -10
  3. package/lib/commonjs/index.js.map +1 -1
  4. package/lib/commonjs/notifications/deviceNotifications.js +380 -0
  5. package/lib/commonjs/notifications/deviceNotifications.js.map +1 -0
  6. package/lib/commonjs/ui/boot/runProviderColdBoot.js +51 -9
  7. package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
  8. package/lib/commonjs/ui/client.js +0 -13
  9. package/lib/commonjs/ui/client.js.map +1 -1
  10. package/lib/commonjs/ui/components/AvatarCameraBadge.js +3 -2
  11. package/lib/commonjs/ui/components/AvatarCameraBadge.js.map +1 -1
  12. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js +14 -3
  13. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -1
  14. package/lib/commonjs/ui/components/OxyAuthChooser.js +70 -1121
  15. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  16. package/lib/commonjs/ui/components/OxyConsentScreen.js +50 -12
  17. package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
  18. package/lib/commonjs/ui/components/OxyProvider.js +4 -4
  19. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  20. package/lib/commonjs/ui/components/OxySignInButton.js +74 -40
  21. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  22. package/lib/commonjs/ui/components/OxySignInRequestSurface.js +147 -0
  23. package/lib/commonjs/ui/components/OxySignInRequestSurface.js.map +1 -0
  24. package/lib/commonjs/ui/components/ProfileButton.js +4 -3
  25. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  26. package/lib/commonjs/ui/components/SettingsIcon.js +3 -2
  27. package/lib/commonjs/ui/components/SettingsIcon.js.map +1 -1
  28. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +527 -0
  29. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -0
  30. package/lib/commonjs/ui/components/authChooser/SignInEntryView.js +90 -0
  31. package/lib/commonjs/ui/components/authChooser/SignInEntryView.js.map +1 -0
  32. package/lib/commonjs/ui/components/authChooser/SignInRequestView.js +106 -0
  33. package/lib/commonjs/ui/components/authChooser/SignInRequestView.js.map +1 -0
  34. package/lib/commonjs/ui/components/authChooser/SignUpView.js +188 -0
  35. package/lib/commonjs/ui/components/authChooser/SignUpView.js.map +1 -0
  36. package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js +61 -0
  37. package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js.map +1 -0
  38. package/lib/commonjs/ui/components/authChooser/primitives.js +170 -0
  39. package/lib/commonjs/ui/components/authChooser/primitives.js.map +1 -0
  40. package/lib/commonjs/ui/components/authChooser/requestSurfaces.js +153 -0
  41. package/lib/commonjs/ui/components/authChooser/requestSurfaces.js.map +1 -0
  42. package/lib/commonjs/ui/components/authChooser/signInProgress.js +54 -0
  43. package/lib/commonjs/ui/components/authChooser/signInProgress.js.map +1 -0
  44. package/lib/commonjs/ui/components/{oxyAuthChooserStyles.js → authChooser/styles.js} +19 -1
  45. package/lib/commonjs/ui/components/authChooser/styles.js.map +1 -0
  46. package/lib/commonjs/ui/components/authChooser/types.js +70 -0
  47. package/lib/commonjs/ui/components/authChooser/types.js.map +1 -0
  48. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js +50 -0
  49. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js.map +1 -0
  50. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js +3 -2
  51. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  52. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +3 -2
  53. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  54. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +15 -14
  55. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  56. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +6 -5
  57. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  58. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +3 -2
  59. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  60. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +6 -6
  61. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  62. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +5 -5
  63. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  64. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +10 -9
  65. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  66. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +4 -3
  67. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  68. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +6 -5
  69. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  70. package/lib/commonjs/ui/context/OxyContext.js +200 -29
  71. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  72. package/lib/commonjs/ui/context/commitSessionFlow.js +43 -0
  73. package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
  74. package/lib/commonjs/ui/context/useOxyAccountGraph.js +13 -5
  75. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
  76. package/lib/commonjs/ui/hooks/useSwitchableAccounts.js +6 -1
  77. package/lib/commonjs/ui/hooks/useSwitchableAccounts.js.map +1 -1
  78. package/lib/commonjs/ui/index.js +0 -13
  79. package/lib/commonjs/ui/index.js.map +1 -1
  80. package/lib/commonjs/ui/oauth/browserAuthTransport.js +168 -0
  81. package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -0
  82. package/lib/commonjs/ui/oauth/completeOAuthCode.js +78 -0
  83. package/lib/commonjs/ui/oauth/completeOAuthCode.js.map +1 -0
  84. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js +48 -0
  85. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js.map +1 -0
  86. package/lib/commonjs/ui/oauth/oauthHandshake.js +53 -0
  87. package/lib/commonjs/ui/oauth/oauthHandshake.js.map +1 -0
  88. package/lib/commonjs/ui/oauth/oauthPopup.js +229 -0
  89. package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -0
  90. package/lib/commonjs/ui/oauth/oauthPopupMessages.js +141 -0
  91. package/lib/commonjs/ui/oauth/oauthPopupMessages.js.map +1 -0
  92. package/lib/commonjs/ui/oauth/types.js +2 -0
  93. package/lib/commonjs/ui/oauth/types.js.map +1 -0
  94. package/lib/commonjs/ui/screens/AccountMembersScreen.js +4 -3
  95. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  96. package/lib/commonjs/ui/screens/CreateAccountScreen.js +7 -6
  97. package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
  98. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +4 -3
  99. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  100. package/lib/commonjs/ui/screens/FAQScreen.js +3 -2
  101. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/FeedbackScreen.js +11 -10
  103. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/FileManagementScreen.js +19 -18
  105. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  106. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +4 -3
  107. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  108. package/lib/commonjs/ui/screens/ManageAccountScreen.js +2 -2
  109. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  110. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +3 -3
  111. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  112. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +9 -8
  113. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  114. package/lib/commonjs/ui/screens/ProfileScreen.js +10 -10
  115. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  116. package/lib/commonjs/ui/screens/UserListScreen.js +3 -3
  117. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  118. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +3 -2
  119. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  120. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js +4 -3
  121. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
  122. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js +4 -3
  123. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -1
  124. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +4 -3
  125. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  126. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js +3 -2
  127. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -1
  128. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +3 -2
  129. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  130. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +4 -3
  131. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  132. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +4 -3
  133. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  134. package/lib/commonjs/ui/server.js +2 -5
  135. package/lib/commonjs/ui/server.js.map +1 -1
  136. package/lib/commonjs/ui/session/authStore.js +6 -75
  137. package/lib/commonjs/ui/session/authStore.js.map +1 -1
  138. package/lib/commonjs/ui/session/createSessionClient.js +11 -3
  139. package/lib/commonjs/ui/session/createSessionClient.js.map +1 -1
  140. package/lib/commonjs/ui/session/identityBinding.js +95 -0
  141. package/lib/commonjs/ui/session/identityBinding.js.map +1 -0
  142. package/lib/commonjs/ui/session/index.js +13 -0
  143. package/lib/commonjs/ui/session/index.js.map +1 -1
  144. package/lib/commonjs/ui/session/nativeSecureStorage.js +90 -0
  145. package/lib/commonjs/ui/session/nativeSecureStorage.js.map +1 -0
  146. package/lib/commonjs/ui/session/tokenTransport.js +11 -1
  147. package/lib/commonjs/ui/session/tokenTransport.js.map +1 -1
  148. package/lib/commonjs/ui/utils/crossOriginRestore.js +3 -2
  149. package/lib/commonjs/ui/utils/crossOriginRestore.js.map +1 -1
  150. package/lib/commonjs/ui/utils/deliveryPlatform.js +58 -0
  151. package/lib/commonjs/ui/utils/deliveryPlatform.js.map +1 -0
  152. package/lib/commonjs/ui/utils/oauthReturn.js +70 -46
  153. package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -1
  154. package/lib/module/index.js +27 -4
  155. package/lib/module/index.js.map +1 -1
  156. package/lib/module/notifications/deviceNotifications.js +371 -0
  157. package/lib/module/notifications/deviceNotifications.js.map +1 -0
  158. package/lib/module/ui/boot/runProviderColdBoot.js +51 -9
  159. package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
  160. package/lib/module/ui/client.js +0 -1
  161. package/lib/module/ui/client.js.map +1 -1
  162. package/lib/module/ui/components/AvatarCameraBadge.js +1 -1
  163. package/lib/module/ui/components/AvatarCameraBadge.js.map +1 -1
  164. package/lib/module/ui/components/OxyAccountDialogScreen.js +14 -3
  165. package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
  166. package/lib/module/ui/components/OxyAuthChooser.js +74 -1126
  167. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  168. package/lib/module/ui/components/OxyConsentScreen.js +50 -12
  169. package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
  170. package/lib/module/ui/components/OxyProvider.js +4 -4
  171. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  172. package/lib/module/ui/components/OxySignInButton.js +76 -42
  173. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  174. package/lib/module/ui/components/OxySignInRequestSurface.js +141 -0
  175. package/lib/module/ui/components/OxySignInRequestSurface.js.map +1 -0
  176. package/lib/module/ui/components/ProfileButton.js +1 -1
  177. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  178. package/lib/module/ui/components/SettingsIcon.js +1 -1
  179. package/lib/module/ui/components/SettingsIcon.js.map +1 -1
  180. package/lib/module/ui/components/authChooser/AccountsMenuView.js +523 -0
  181. package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -0
  182. package/lib/module/ui/components/authChooser/SignInEntryView.js +85 -0
  183. package/lib/module/ui/components/authChooser/SignInEntryView.js.map +1 -0
  184. package/lib/module/ui/components/authChooser/SignInRequestView.js +101 -0
  185. package/lib/module/ui/components/authChooser/SignInRequestView.js.map +1 -0
  186. package/lib/module/ui/components/authChooser/SignUpView.js +184 -0
  187. package/lib/module/ui/components/authChooser/SignUpView.js.map +1 -0
  188. package/lib/module/ui/components/authChooser/TroubleDisclosure.js +57 -0
  189. package/lib/module/ui/components/authChooser/TroubleDisclosure.js.map +1 -0
  190. package/lib/module/ui/components/authChooser/primitives.js +163 -0
  191. package/lib/module/ui/components/authChooser/primitives.js.map +1 -0
  192. package/lib/module/ui/components/authChooser/requestSurfaces.js +143 -0
  193. package/lib/module/ui/components/authChooser/requestSurfaces.js.map +1 -0
  194. package/lib/module/ui/components/authChooser/signInProgress.js +50 -0
  195. package/lib/module/ui/components/authChooser/signInProgress.js.map +1 -0
  196. package/lib/module/ui/components/{oxyAuthChooserStyles.js → authChooser/styles.js} +19 -1
  197. package/lib/module/ui/components/authChooser/styles.js.map +1 -0
  198. package/lib/module/ui/components/authChooser/types.js +66 -0
  199. package/lib/module/ui/components/authChooser/types.js.map +1 -0
  200. package/lib/module/ui/components/authChooser/useUsernameAvailability.js +46 -0
  201. package/lib/module/ui/components/authChooser/useUsernameAvailability.js.map +1 -0
  202. package/lib/module/ui/components/fileManagement/AnimatedButton.js +1 -1
  203. package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  204. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +1 -1
  205. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  206. package/lib/module/ui/components/fileManagement/FileViewer.js +1 -1
  207. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  208. package/lib/module/ui/components/fileManagement/UploadPreview.js +1 -1
  209. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  210. package/lib/module/ui/components/modals/DeleteAccountModal.js +1 -1
  211. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  212. package/lib/module/ui/components/payment/PaymentDetailsStep.js +1 -1
  213. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  214. package/lib/module/ui/components/payment/PaymentMethodStep.js +1 -1
  215. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  216. package/lib/module/ui/components/payment/PaymentReviewStep.js +1 -1
  217. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  218. package/lib/module/ui/components/payment/PaymentSuccessStep.js +1 -1
  219. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  220. package/lib/module/ui/components/payment/PaymentSummaryStep.js +1 -1
  221. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  222. package/lib/module/ui/context/OxyContext.js +203 -32
  223. package/lib/module/ui/context/OxyContext.js.map +1 -1
  224. package/lib/module/ui/context/commitSessionFlow.js +42 -0
  225. package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
  226. package/lib/module/ui/context/useOxyAccountGraph.js +13 -5
  227. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
  228. package/lib/module/ui/hooks/useSwitchableAccounts.js +6 -1
  229. package/lib/module/ui/hooks/useSwitchableAccounts.js.map +1 -1
  230. package/lib/module/ui/index.js +0 -1
  231. package/lib/module/ui/index.js.map +1 -1
  232. package/lib/module/ui/oauth/browserAuthTransport.js +165 -0
  233. package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -0
  234. package/lib/module/ui/oauth/completeOAuthCode.js +75 -0
  235. package/lib/module/ui/oauth/completeOAuthCode.js.map +1 -0
  236. package/lib/module/ui/oauth/legacyRedirectLanes.js +44 -0
  237. package/lib/module/ui/oauth/legacyRedirectLanes.js.map +1 -0
  238. package/lib/module/ui/oauth/oauthHandshake.js +50 -0
  239. package/lib/module/ui/oauth/oauthHandshake.js.map +1 -0
  240. package/lib/module/ui/oauth/oauthPopup.js +221 -0
  241. package/lib/module/ui/oauth/oauthPopup.js.map +1 -0
  242. package/lib/module/ui/oauth/oauthPopupMessages.js +135 -0
  243. package/lib/module/ui/oauth/oauthPopupMessages.js.map +1 -0
  244. package/lib/module/ui/oauth/types.js +2 -0
  245. package/lib/module/ui/oauth/types.js.map +1 -0
  246. package/lib/module/ui/screens/AccountMembersScreen.js +1 -1
  247. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  248. package/lib/module/ui/screens/CreateAccountScreen.js +1 -1
  249. package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
  250. package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
  251. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  252. package/lib/module/ui/screens/FAQScreen.js +1 -1
  253. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  254. package/lib/module/ui/screens/FeedbackScreen.js +1 -1
  255. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  256. package/lib/module/ui/screens/FileManagementScreen.js +2 -1
  257. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  258. package/lib/module/ui/screens/LanguageSelectorScreen.js +1 -1
  259. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  260. package/lib/module/ui/screens/ManageAccountScreen.js +1 -1
  261. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  262. package/lib/module/ui/screens/PaymentGatewayScreen.js +1 -1
  263. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  264. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1 -1
  265. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  266. package/lib/module/ui/screens/ProfileScreen.js +1 -1
  267. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  268. package/lib/module/ui/screens/UserListScreen.js +1 -1
  269. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  270. package/lib/module/ui/screens/WelcomeNewUserScreen.js +1 -1
  271. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  272. package/lib/module/ui/screens/fileManagement/FileLibraryError.js +1 -1
  273. package/lib/module/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
  274. package/lib/module/ui/screens/fileManagement/FileListSection.js +1 -1
  275. package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -1
  276. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +2 -1
  277. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  278. package/lib/module/ui/screens/fileManagement/UploadBar.js +1 -1
  279. package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -1
  280. package/lib/module/ui/screens/trust/TrustCenterScreen.js +1 -1
  281. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  282. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
  283. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  284. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +1 -1
  285. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  286. package/lib/module/ui/server.js +0 -2
  287. package/lib/module/ui/server.js.map +1 -1
  288. package/lib/module/ui/session/authStore.js +5 -75
  289. package/lib/module/ui/session/authStore.js.map +1 -1
  290. package/lib/module/ui/session/createSessionClient.js +11 -3
  291. package/lib/module/ui/session/createSessionClient.js.map +1 -1
  292. package/lib/module/ui/session/identityBinding.js +89 -0
  293. package/lib/module/ui/session/identityBinding.js.map +1 -0
  294. package/lib/module/ui/session/index.js +5 -2
  295. package/lib/module/ui/session/index.js.map +1 -1
  296. package/lib/module/ui/session/nativeSecureStorage.js +88 -0
  297. package/lib/module/ui/session/nativeSecureStorage.js.map +1 -0
  298. package/lib/module/ui/session/tokenTransport.js +11 -1
  299. package/lib/module/ui/session/tokenTransport.js.map +1 -1
  300. package/lib/module/ui/utils/crossOriginRestore.js +4 -3
  301. package/lib/module/ui/utils/crossOriginRestore.js.map +1 -1
  302. package/lib/module/ui/utils/deliveryPlatform.js +55 -0
  303. package/lib/module/ui/utils/deliveryPlatform.js.map +1 -0
  304. package/lib/module/ui/utils/oauthReturn.js +70 -46
  305. package/lib/module/ui/utils/oauthReturn.js.map +1 -1
  306. package/lib/typescript/commonjs/index.d.ts +9 -1
  307. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  308. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts +141 -0
  309. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts.map +1 -0
  310. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +34 -2
  311. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/ui/client.d.ts +0 -1
  313. package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  315. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +16 -29
  316. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts.map +1 -1
  318. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  319. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +17 -12
  320. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  321. package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts +108 -0
  322. package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts.map +1 -0
  323. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts +1 -1
  324. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts.map +1 -1
  325. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts +38 -0
  326. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -0
  327. package/lib/typescript/commonjs/ui/components/authChooser/SignInEntryView.d.ts +32 -0
  328. package/lib/typescript/commonjs/ui/components/authChooser/SignInEntryView.d.ts.map +1 -0
  329. package/lib/typescript/commonjs/ui/components/authChooser/SignInRequestView.d.ts +34 -0
  330. package/lib/typescript/commonjs/ui/components/authChooser/SignInRequestView.d.ts.map +1 -0
  331. package/lib/typescript/commonjs/ui/components/authChooser/SignUpView.d.ts +34 -0
  332. package/lib/typescript/commonjs/ui/components/authChooser/SignUpView.d.ts.map +1 -0
  333. package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts +36 -0
  334. package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -0
  335. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts +55 -0
  336. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts.map +1 -0
  337. package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts +58 -0
  338. package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts.map +1 -0
  339. package/lib/typescript/commonjs/ui/components/authChooser/signInProgress.d.ts +26 -0
  340. package/lib/typescript/commonjs/ui/components/authChooser/signInProgress.d.ts.map +1 -0
  341. package/lib/typescript/{module/ui/components/oxyAuthChooserStyles.d.ts → commonjs/ui/components/authChooser/styles.d.ts} +19 -1
  342. package/lib/typescript/commonjs/ui/components/authChooser/styles.d.ts.map +1 -0
  343. package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts +103 -0
  344. package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts.map +1 -0
  345. package/lib/typescript/commonjs/ui/components/authChooser/useUsernameAvailability.d.ts +16 -0
  346. package/lib/typescript/commonjs/ui/components/authChooser/useUsernameAvailability.d.ts.map +1 -0
  347. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +1 -1
  348. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  349. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  350. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts +40 -0
  351. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
  352. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +44 -1
  353. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  354. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +7 -1
  355. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  356. package/lib/typescript/commonjs/ui/hooks/useSwitchableAccounts.d.ts.map +1 -1
  357. package/lib/typescript/commonjs/ui/index.d.ts +0 -1
  358. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  359. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts +56 -0
  360. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -0
  361. package/lib/typescript/commonjs/ui/oauth/completeOAuthCode.d.ts +49 -0
  362. package/lib/typescript/commonjs/ui/oauth/completeOAuthCode.d.ts.map +1 -0
  363. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  364. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  365. package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts +50 -0
  366. package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts.map +1 -0
  367. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts +77 -0
  368. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -0
  369. package/lib/typescript/commonjs/ui/oauth/oauthPopupMessages.d.ts +67 -0
  370. package/lib/typescript/commonjs/ui/oauth/oauthPopupMessages.d.ts.map +1 -0
  371. package/lib/typescript/commonjs/ui/oauth/types.d.ts +176 -0
  372. package/lib/typescript/commonjs/ui/oauth/types.d.ts.map +1 -0
  373. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  374. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  375. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  376. package/lib/typescript/commonjs/ui/server.d.ts +0 -2
  377. package/lib/typescript/commonjs/ui/server.d.ts.map +1 -1
  378. package/lib/typescript/commonjs/ui/session/authStore.d.ts +3 -7
  379. package/lib/typescript/commonjs/ui/session/authStore.d.ts.map +1 -1
  380. package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts +8 -1
  381. package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts.map +1 -1
  382. package/lib/typescript/commonjs/ui/session/identityBinding.d.ts +66 -0
  383. package/lib/typescript/commonjs/ui/session/identityBinding.d.ts.map +1 -0
  384. package/lib/typescript/commonjs/ui/session/index.d.ts +6 -2
  385. package/lib/typescript/commonjs/ui/session/index.d.ts.map +1 -1
  386. package/lib/typescript/commonjs/ui/session/nativeSecureStorage.d.ts +25 -0
  387. package/lib/typescript/commonjs/ui/session/nativeSecureStorage.d.ts.map +1 -0
  388. package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts +8 -1
  389. package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts.map +1 -1
  390. package/lib/typescript/commonjs/ui/types/navigation.d.ts +44 -0
  391. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  392. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts.map +1 -1
  393. package/lib/typescript/commonjs/ui/utils/deliveryPlatform.d.ts +33 -0
  394. package/lib/typescript/commonjs/ui/utils/deliveryPlatform.d.ts.map +1 -0
  395. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +1 -1
  396. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  397. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +30 -16
  398. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -1
  399. package/lib/typescript/module/index.d.ts +9 -1
  400. package/lib/typescript/module/index.d.ts.map +1 -1
  401. package/lib/typescript/module/notifications/deviceNotifications.d.ts +141 -0
  402. package/lib/typescript/module/notifications/deviceNotifications.d.ts.map +1 -0
  403. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +34 -2
  404. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  405. package/lib/typescript/module/ui/client.d.ts +0 -1
  406. package/lib/typescript/module/ui/client.d.ts.map +1 -1
  407. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  408. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +16 -29
  409. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  410. package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts.map +1 -1
  411. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  412. package/lib/typescript/module/ui/components/OxySignInButton.d.ts +17 -12
  413. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  414. package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts +108 -0
  415. package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts.map +1 -0
  416. package/lib/typescript/module/ui/components/SettingsIcon.d.ts +1 -1
  417. package/lib/typescript/module/ui/components/SettingsIcon.d.ts.map +1 -1
  418. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts +38 -0
  419. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -0
  420. package/lib/typescript/module/ui/components/authChooser/SignInEntryView.d.ts +32 -0
  421. package/lib/typescript/module/ui/components/authChooser/SignInEntryView.d.ts.map +1 -0
  422. package/lib/typescript/module/ui/components/authChooser/SignInRequestView.d.ts +34 -0
  423. package/lib/typescript/module/ui/components/authChooser/SignInRequestView.d.ts.map +1 -0
  424. package/lib/typescript/module/ui/components/authChooser/SignUpView.d.ts +34 -0
  425. package/lib/typescript/module/ui/components/authChooser/SignUpView.d.ts.map +1 -0
  426. package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts +36 -0
  427. package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -0
  428. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts +55 -0
  429. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts.map +1 -0
  430. package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts +58 -0
  431. package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts.map +1 -0
  432. package/lib/typescript/module/ui/components/authChooser/signInProgress.d.ts +26 -0
  433. package/lib/typescript/module/ui/components/authChooser/signInProgress.d.ts.map +1 -0
  434. package/lib/typescript/{commonjs/ui/components/oxyAuthChooserStyles.d.ts → module/ui/components/authChooser/styles.d.ts} +19 -1
  435. package/lib/typescript/module/ui/components/authChooser/styles.d.ts.map +1 -0
  436. package/lib/typescript/module/ui/components/authChooser/types.d.ts +103 -0
  437. package/lib/typescript/module/ui/components/authChooser/types.d.ts.map +1 -0
  438. package/lib/typescript/module/ui/components/authChooser/useUsernameAvailability.d.ts +16 -0
  439. package/lib/typescript/module/ui/components/authChooser/useUsernameAvailability.d.ts.map +1 -0
  440. package/lib/typescript/module/ui/components/payment/types.d.ts +1 -1
  441. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  442. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  443. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts +40 -0
  444. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
  445. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +44 -1
  446. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  447. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +7 -1
  448. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  449. package/lib/typescript/module/ui/hooks/useSwitchableAccounts.d.ts.map +1 -1
  450. package/lib/typescript/module/ui/index.d.ts +0 -1
  451. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  452. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts +56 -0
  453. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -0
  454. package/lib/typescript/module/ui/oauth/completeOAuthCode.d.ts +49 -0
  455. package/lib/typescript/module/ui/oauth/completeOAuthCode.d.ts.map +1 -0
  456. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  457. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  458. package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts +50 -0
  459. package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts.map +1 -0
  460. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts +77 -0
  461. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -0
  462. package/lib/typescript/module/ui/oauth/oauthPopupMessages.d.ts +67 -0
  463. package/lib/typescript/module/ui/oauth/oauthPopupMessages.d.ts.map +1 -0
  464. package/lib/typescript/module/ui/oauth/types.d.ts +176 -0
  465. package/lib/typescript/module/ui/oauth/types.d.ts.map +1 -0
  466. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  467. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  468. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  469. package/lib/typescript/module/ui/server.d.ts +0 -2
  470. package/lib/typescript/module/ui/server.d.ts.map +1 -1
  471. package/lib/typescript/module/ui/session/authStore.d.ts +3 -7
  472. package/lib/typescript/module/ui/session/authStore.d.ts.map +1 -1
  473. package/lib/typescript/module/ui/session/createSessionClient.d.ts +8 -1
  474. package/lib/typescript/module/ui/session/createSessionClient.d.ts.map +1 -1
  475. package/lib/typescript/module/ui/session/identityBinding.d.ts +66 -0
  476. package/lib/typescript/module/ui/session/identityBinding.d.ts.map +1 -0
  477. package/lib/typescript/module/ui/session/index.d.ts +6 -2
  478. package/lib/typescript/module/ui/session/index.d.ts.map +1 -1
  479. package/lib/typescript/module/ui/session/nativeSecureStorage.d.ts +25 -0
  480. package/lib/typescript/module/ui/session/nativeSecureStorage.d.ts.map +1 -0
  481. package/lib/typescript/module/ui/session/tokenTransport.d.ts +8 -1
  482. package/lib/typescript/module/ui/session/tokenTransport.d.ts.map +1 -1
  483. package/lib/typescript/module/ui/types/navigation.d.ts +44 -0
  484. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  485. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts.map +1 -1
  486. package/lib/typescript/module/ui/utils/deliveryPlatform.d.ts +33 -0
  487. package/lib/typescript/module/ui/utils/deliveryPlatform.d.ts.map +1 -0
  488. package/lib/typescript/module/ui/utils/fileManagement.d.ts +1 -1
  489. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  490. package/lib/typescript/module/ui/utils/oauthReturn.d.ts +30 -16
  491. package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -1
  492. package/package.json +15 -7
  493. package/src/index.ts +50 -5
  494. package/src/notifications/deviceNotifications.ts +395 -0
  495. package/src/ui/boot/__tests__/coldBootWebAuthMode.test.ts +281 -0
  496. package/src/ui/boot/runProviderColdBoot.ts +83 -13
  497. package/src/ui/client.ts +0 -1
  498. package/src/ui/components/AvatarCameraBadge.tsx +1 -1
  499. package/src/ui/components/OxyAccountDialogScreen.tsx +20 -3
  500. package/src/ui/components/OxyAuthChooser.tsx +91 -1230
  501. package/src/ui/components/OxyConsentScreen.tsx +56 -13
  502. package/src/ui/components/OxyProvider.tsx +4 -4
  503. package/src/ui/components/OxySignInButton.tsx +119 -78
  504. package/src/ui/components/OxySignInRequestSurface.tsx +202 -0
  505. package/src/ui/components/ProfileButton.tsx +1 -1
  506. package/src/ui/components/SettingsIcon.tsx +1 -1
  507. package/src/ui/components/__tests__/OxyConsentScreen.test.tsx +27 -0
  508. package/src/ui/components/authChooser/AccountsMenuView.tsx +569 -0
  509. package/src/ui/components/authChooser/SignInEntryView.tsx +121 -0
  510. package/src/ui/components/authChooser/SignInRequestView.tsx +130 -0
  511. package/src/ui/components/authChooser/SignUpView.tsx +174 -0
  512. package/src/ui/components/authChooser/TroubleDisclosure.tsx +73 -0
  513. package/src/ui/components/authChooser/primitives.tsx +144 -0
  514. package/src/ui/components/authChooser/requestSurfaces.tsx +120 -0
  515. package/src/ui/components/authChooser/signInProgress.ts +54 -0
  516. package/src/ui/components/{oxyAuthChooserStyles.ts → authChooser/styles.ts} +18 -0
  517. package/src/ui/components/authChooser/types.ts +120 -0
  518. package/src/ui/components/authChooser/useUsernameAvailability.ts +60 -0
  519. package/src/ui/components/fileManagement/AnimatedButton.tsx +1 -1
  520. package/src/ui/components/fileManagement/FileDetailsModal.tsx +1 -1
  521. package/src/ui/components/fileManagement/FileViewer.tsx +1 -1
  522. package/src/ui/components/fileManagement/UploadPreview.tsx +1 -1
  523. package/src/ui/components/modals/DeleteAccountModal.tsx +1 -1
  524. package/src/ui/components/payment/PaymentDetailsStep.tsx +1 -1
  525. package/src/ui/components/payment/PaymentMethodStep.tsx +1 -1
  526. package/src/ui/components/payment/PaymentReviewStep.tsx +1 -1
  527. package/src/ui/components/payment/PaymentSuccessStep.tsx +1 -1
  528. package/src/ui/components/payment/PaymentSummaryStep.tsx +1 -1
  529. package/src/ui/components/payment/types.ts +1 -1
  530. package/src/ui/context/OxyContext.tsx +220 -24
  531. package/src/ui/context/__tests__/commitSessionFlow.test.ts +89 -0
  532. package/src/ui/context/commitSessionFlow.ts +61 -0
  533. package/src/ui/context/oxyContextTypes.ts +45 -1
  534. package/src/ui/context/useOxyAccountGraph.ts +19 -5
  535. package/src/ui/hooks/useSwitchableAccounts.ts +12 -1
  536. package/src/ui/index.ts +0 -1
  537. package/src/ui/oauth/__tests__/browserAuthTransport.test.ts +335 -0
  538. package/src/ui/oauth/__tests__/completeOAuthCode.test.ts +142 -0
  539. package/src/ui/oauth/__tests__/oauthPopup.test.ts +326 -0
  540. package/src/ui/oauth/__tests__/oauthPopupMessages.test.ts +189 -0
  541. package/src/ui/oauth/__tests__/sharedCompletionPath.test.ts +174 -0
  542. package/src/ui/oauth/browserAuthTransport.ts +187 -0
  543. package/src/ui/oauth/completeOAuthCode.ts +93 -0
  544. package/src/ui/oauth/legacyRedirectLanes.ts +43 -0
  545. package/src/ui/oauth/oauthHandshake.ts +74 -0
  546. package/src/ui/oauth/oauthPopup.ts +219 -0
  547. package/src/ui/oauth/oauthPopupMessages.ts +136 -0
  548. package/src/ui/oauth/types.ts +150 -0
  549. package/src/ui/screens/AccountMembersScreen.tsx +1 -1
  550. package/src/ui/screens/CreateAccountScreen.tsx +1 -1
  551. package/src/ui/screens/EditProfileFieldScreen.tsx +1 -1
  552. package/src/ui/screens/FAQScreen.tsx +1 -1
  553. package/src/ui/screens/FeedbackScreen.tsx +2 -1
  554. package/src/ui/screens/FileManagementScreen.tsx +2 -1
  555. package/src/ui/screens/LanguageSelectorScreen.tsx +1 -1
  556. package/src/ui/screens/ManageAccountScreen.tsx +1 -1
  557. package/src/ui/screens/PaymentGatewayScreen.tsx +1 -1
  558. package/src/ui/screens/PremiumSubscriptionScreen.tsx +1 -1
  559. package/src/ui/screens/ProfileScreen.tsx +1 -1
  560. package/src/ui/screens/UserListScreen.tsx +1 -1
  561. package/src/ui/screens/WelcomeNewUserScreen.tsx +1 -1
  562. package/src/ui/screens/fileManagement/FileLibraryError.tsx +1 -1
  563. package/src/ui/screens/fileManagement/FileListSection.tsx +1 -1
  564. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +2 -1
  565. package/src/ui/screens/fileManagement/UploadBar.tsx +1 -1
  566. package/src/ui/screens/trust/TrustCenterScreen.tsx +1 -1
  567. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +1 -1
  568. package/src/ui/screens/trust/TrustRewardsScreen.tsx +1 -1
  569. package/src/ui/server.ts +0 -2
  570. package/src/ui/session/__tests__/createSessionClient.test.ts +26 -0
  571. package/src/ui/session/__tests__/tokenTransport.test.ts +34 -0
  572. package/src/ui/session/authStore.ts +5 -89
  573. package/src/ui/session/createSessionClient.ts +15 -2
  574. package/src/ui/session/identityBinding.ts +116 -0
  575. package/src/ui/session/index.ts +6 -2
  576. package/src/ui/session/nativeSecureStorage.ts +98 -0
  577. package/src/ui/session/tokenTransport.ts +14 -1
  578. package/src/ui/types/navigation.ts +44 -1
  579. package/src/ui/utils/crossOriginRestore.ts +4 -7
  580. package/src/ui/utils/deliveryPlatform.ts +65 -0
  581. package/src/ui/utils/fileManagement.ts +1 -1
  582. package/src/ui/utils/oauthReturn.ts +74 -65
  583. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  584. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  585. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  586. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  587. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  588. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  589. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  590. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  591. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  592. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  593. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  594. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  595. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  596. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  597. package/lib/commonjs/ui/components/FontLoader.js +0 -35
  598. package/lib/commonjs/ui/components/FontLoader.js.map +0 -1
  599. package/lib/commonjs/ui/components/FontLoader.native.js +0 -88
  600. package/lib/commonjs/ui/components/FontLoader.native.js.map +0 -1
  601. package/lib/commonjs/ui/components/oxyAuthChooserStyles.js.map +0 -1
  602. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  603. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  604. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  605. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  606. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  607. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  608. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  609. package/lib/module/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  610. package/lib/module/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  611. package/lib/module/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  612. package/lib/module/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  613. package/lib/module/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  614. package/lib/module/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  615. package/lib/module/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  616. package/lib/module/ui/components/FontLoader.js +0 -29
  617. package/lib/module/ui/components/FontLoader.js.map +0 -1
  618. package/lib/module/ui/components/FontLoader.native.js +0 -83
  619. package/lib/module/ui/components/FontLoader.native.js.map +0 -1
  620. package/lib/module/ui/components/oxyAuthChooserStyles.js.map +0 -1
  621. package/lib/typescript/commonjs/ui/components/FontLoader.d.ts +0 -24
  622. package/lib/typescript/commonjs/ui/components/FontLoader.d.ts.map +0 -1
  623. package/lib/typescript/commonjs/ui/components/FontLoader.native.d.ts +0 -13
  624. package/lib/typescript/commonjs/ui/components/FontLoader.native.d.ts.map +0 -1
  625. package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts.map +0 -1
  626. package/lib/typescript/module/ui/components/FontLoader.d.ts +0 -24
  627. package/lib/typescript/module/ui/components/FontLoader.d.ts.map +0 -1
  628. package/lib/typescript/module/ui/components/FontLoader.native.d.ts +0 -13
  629. package/lib/typescript/module/ui/components/FontLoader.native.d.ts.map +0 -1
  630. package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts.map +0 -1
  631. package/src/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  632. package/src/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  633. package/src/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  634. package/src/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  635. package/src/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  636. package/src/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  637. package/src/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  638. package/src/ui/components/FontLoader.native.tsx +0 -88
  639. package/src/ui/components/FontLoader.tsx +0 -27
@@ -0,0 +1,121 @@
1
+ /**
2
+ * The sign-in ENTRY (`signin` / `add` views) — ONE primary action.
3
+ *
4
+ * Issue #691, Phase 5: the normal experience presents no menu of authentication
5
+ * methods. The user sees "Continue with Oxy"; Oxy — not the user — then picks
6
+ * how the request reaches their Commons identity, and the request surface shows
7
+ * honest progress. Everything else (a QR from another device, a passkey on this
8
+ * device, getting Commons, creating an account) lives behind "Having trouble?".
9
+ *
10
+ * Existing accounts still render ABOVE the CTA: "continue as one of these" is a
11
+ * choice of WHO, not of HOW, so it is not one of the competing method buttons
12
+ * the issue removes.
13
+ *
14
+ * On web this view is transient — the container auto-starts the flow the instant
15
+ * the view is reached, because the request surface (QR, or "Check Commons on
16
+ * your phone") IS the primary route there, never something behind a tap.
17
+ */
18
+
19
+ import type React from 'react';
20
+ import { View } from 'react-native';
21
+ import { Button } from '@oxyhq/bloom/button';
22
+ import type { AccountDialogSnapshot } from '@oxyhq/core';
23
+ import TroubleDisclosure from './TroubleDisclosure';
24
+ import { AccountRow, Dividerish, SubtleLink } from './primitives';
25
+ import { authChooserStyles as styles } from './styles';
26
+ import type {
27
+ OxyAuthChooserHandlers,
28
+ OxySignInSurfaceAction,
29
+ SignInAlternatives,
30
+ Theme,
31
+ Translate,
32
+ } from './types';
33
+
34
+ interface SignInEntryViewProps {
35
+ snapshot: AccountDialogSnapshot;
36
+ theme: Theme;
37
+ t: Translate;
38
+ handlers: OxyAuthChooserHandlers;
39
+ /** The ONE primary action. Starts the flow; Oxy chooses the route from there. */
40
+ onContinueWithOxy: () => void;
41
+ alternatives: SignInAlternatives;
42
+ }
43
+
44
+ const SignInEntryView: React.FC<SignInEntryViewProps> = ({
45
+ snapshot,
46
+ theme,
47
+ t,
48
+ handlers,
49
+ onContinueWithOxy,
50
+ alternatives,
51
+ }) => {
52
+ // The entry has no chosen route yet, so nothing here can have failed: the
53
+ // alternatives stay behind the disclosure unconditionally.
54
+ const troubleActions: OxySignInSurfaceAction[] = [
55
+ {
56
+ key: 'scan-qr-link',
57
+ label: t('accountSwitcher.scanQr'),
58
+ onPress: alternatives.onShowQr,
59
+ },
60
+ ...(alternatives.passkeyAvailable
61
+ ? [
62
+ {
63
+ key: 'passkey-signin-link',
64
+ label: alternatives.passkeyPending
65
+ ? t('accountSwitcher.passkeySigningIn')
66
+ : t('accountSwitcher.useIdentityOnDevice'),
67
+ onPress: alternatives.onSignInWithPasskey,
68
+ disabled: alternatives.passkeyPending,
69
+ },
70
+ ]
71
+ : []),
72
+ {
73
+ key: 'get-commons-link',
74
+ label: t('accountSwitcher.getCommons'),
75
+ onPress: alternatives.onGetCommons,
76
+ },
77
+ ];
78
+
79
+ return (
80
+ <View style={styles.signInBlock}>
81
+ {snapshot.accounts.length > 0 ? (
82
+ <View style={styles.rows}>
83
+ {snapshot.accounts.map((account) => (
84
+ <AccountRow
85
+ key={account.accountId}
86
+ account={account}
87
+ theme={theme}
88
+ switching={snapshot.switchingAccountId === account.accountId}
89
+ disabled={snapshot.switchingAccountId !== null}
90
+ onPress={() => handlers.onSwitch(account.accountId)}
91
+ />
92
+ ))}
93
+ <Dividerish theme={theme} label={t('signin.or')} />
94
+ </View>
95
+ ) : null}
96
+
97
+ <Button
98
+ variant="primary"
99
+ onPress={onContinueWithOxy}
100
+ style={styles.primaryButton}
101
+ testID="continue-with-oxy"
102
+ >
103
+ {t('accountSwitcher.continueWithOxy')}
104
+ </Button>
105
+
106
+ {/* Account CREATION is not an authentication method — it is the way in for
107
+ someone who has no Oxy ID yet — so it keeps its own subordinate link
108
+ rather than hiding behind a troubleshooting affordance. */}
109
+ <SubtleLink
110
+ label={t('signin.createAccountLink')}
111
+ theme={theme}
112
+ onPress={alternatives.onCreateAccount}
113
+ testID="create-account-link"
114
+ />
115
+
116
+ <TroubleDisclosure actions={troubleActions} revealed={false} theme={theme} t={t} />
117
+ </View>
118
+ );
119
+ };
120
+
121
+ export default SignInEntryView;
@@ -0,0 +1,130 @@
1
+ /**
2
+ * The ACTIVE REQUEST surface (`qr` view) as the account dialog drives it —
3
+ * `AccountDialogController`'s device flow bound to the shared, presentational
4
+ * {@link OxySignInRequestSurface} (issue #691, Phase 5).
5
+ *
6
+ * This module owns WIRING only. Every pixel comes from the shared surface, which
7
+ * the auth.oxy.so IdP mounts from its own OAuth-bound request; there is one
8
+ * implementation of the request presentation, not two. What lives here is what
9
+ * only the account dialog knows:
10
+ *
11
+ * - which of the controller's facts map onto the surface's props;
12
+ * - which alternatives are genuine ones for the CURRENT presentation (the
13
+ * passkey ceremony is pointless once the request is already being confirmed,
14
+ * and a QR link is redundant while the QR itself is the primary visual);
15
+ * - the one piece of local intent the controller has no opinion on: leaving the
16
+ * acquisition surface via "I have Commons on another device".
17
+ *
18
+ * Failures are NOT rendered here. The container toasts them at the point they
19
+ * arrive (owner mandate: no error renders inline inside the dialog); this view
20
+ * only reports that the request failed, so the surface can offer "Try again".
21
+ */
22
+
23
+ import type React from 'react';
24
+ import { useState } from 'react';
25
+ import type { AccountDialogSnapshot } from '@oxyhq/core';
26
+ import OxySignInRequestSurface from '../OxySignInRequestSurface';
27
+ import type { OxySignInSurfaceAction, SignInAlternatives, Translate } from './types';
28
+
29
+ interface SignInRequestViewProps {
30
+ snapshot: AccountDialogSnapshot;
31
+ t: Translate;
32
+ /** Restart the request after a failure. */
33
+ onRetry: () => void;
34
+ alternatives: SignInAlternatives;
35
+ }
36
+
37
+ const SignInRequestView: React.FC<SignInRequestViewProps> = ({
38
+ snapshot,
39
+ t,
40
+ onRetry,
41
+ alternatives,
42
+ }) => {
43
+ const { signIn, commonsAvailability } = snapshot;
44
+ // Set only from the disclosure's own "I have Commons on another device" —
45
+ // an explicit user choice to leave the acquisition surface, never inferred.
46
+ const [qrRequested, setQrRequested] = useState(false);
47
+
48
+ const failed = signIn.phase === 'error';
49
+ // A same-device QR is a dead end without Commons, so the acquisition surface
50
+ // leads — until the user explicitly asks for the QR anyway.
51
+ const acquiring = !failed && commonsAvailability === 'unavailable' && !qrRequested;
52
+
53
+ // A ceremony is pointless once the request is already being confirmed, and a
54
+ // ceremony FAILURE is toasted by the container — this link never renders an
55
+ // error of its own (owner mandate).
56
+ const passkeyAction: OxySignInSurfaceAction[] =
57
+ alternatives.passkeyAvailable && signIn.phase !== 'authorized' && signIn.phase !== 'completed'
58
+ ? [
59
+ {
60
+ key: 'passkey-signin-link',
61
+ label: alternatives.passkeyPending
62
+ ? t('accountSwitcher.passkeySigningIn')
63
+ : t('accountSwitcher.useIdentityOnDevice'),
64
+ onPress: alternatives.onSignInWithPasskey,
65
+ disabled: alternatives.passkeyPending,
66
+ },
67
+ ]
68
+ : [];
69
+
70
+ const troubleActions = ((): OxySignInSurfaceAction[] => {
71
+ // Nothing about the chosen route is actionable any more — only the
72
+ // authentication alternatives are.
73
+ if (failed) return passkeyAction;
74
+ if (acquiring) {
75
+ return [
76
+ {
77
+ key: 'show-qr-anyway-link',
78
+ label: t('accountSwitcher.showQrAnyway'),
79
+ onPress: () => setQrRequested(true),
80
+ },
81
+ ...passkeyAction,
82
+ ];
83
+ }
84
+ return [
85
+ // Redundant while the QR already IS the primary surface.
86
+ ...(signIn.route === 'qr'
87
+ ? []
88
+ : [
89
+ {
90
+ key: 'scan-qr-link',
91
+ label: t('accountSwitcher.scanQr'),
92
+ onPress: alternatives.onShowQr,
93
+ },
94
+ ]),
95
+ ...passkeyAction,
96
+ {
97
+ key: 'get-commons-link',
98
+ label: t('accountSwitcher.getCommons'),
99
+ onPress: alternatives.onGetCommons,
100
+ },
101
+ ];
102
+ })();
103
+
104
+ return (
105
+ <OxySignInRequestSurface
106
+ route={signIn.route}
107
+ progress={signIn.progress}
108
+ qrPayload={signIn.qrPayload}
109
+ routeFailed={signIn.routeFailed}
110
+ failed={failed}
111
+ onRetry={onRetry}
112
+ onAcquireCommons={acquiring ? alternatives.onGetCommons : undefined}
113
+ subordinate={[
114
+ // Account CREATION is not an authentication method, and on web this
115
+ // surface is the FIRST one a signed-out user sees (the entry auto-starts
116
+ // straight through it) — so the way in for someone with no Oxy ID stays
117
+ // visible as a subordinate link rather than hiding behind a
118
+ // troubleshooting affordance.
119
+ {
120
+ key: 'create-account-link',
121
+ label: t('signin.createAccountLink'),
122
+ onPress: alternatives.onCreateAccount,
123
+ },
124
+ ]}
125
+ alternatives={troubleActions}
126
+ />
127
+ );
128
+ };
129
+
130
+ export default SignInRequestView;
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Account creation (`signup` view).
3
+ *
4
+ * Commons is ALWAYS the priority path (owner mandate) and leads everywhere it
5
+ * appears: native shows only "Create your identity in Commons" (or "Get Commons"
6
+ * first, when it is not installed); web on a first-party Oxy origin leads with
7
+ * the SAME "Get Commons" CTA, with inline passkey creation offered UNDERNEATH as
8
+ * the de-emphasized "don't want to install anything" alternative — never
9
+ * co-equal, never a competing button. Anywhere else (a non-Oxy web origin,
10
+ * before the b2 hub-relay ships) shows an honest "not available here yet"
11
+ * handoff instead of a broken button.
12
+ */
13
+
14
+ import type React from 'react';
15
+ import { useState } from 'react';
16
+ import { TextInput, View } from 'react-native';
17
+ import { Button } from '@oxyhq/bloom/button';
18
+ import { Text } from '@oxyhq/bloom/typography';
19
+ import type { AccountDialogSnapshot, OxyServices } from '@oxyhq/core';
20
+ import { isWebBrowser } from '../../utils/isWebBrowser';
21
+ import { Dividerish, SubtleLink } from './primitives';
22
+ import { authChooserStyles as styles } from './styles';
23
+ import type { PasskeyMode, Theme, Translate } from './types';
24
+ import { useUsernameAvailability, type UsernameStatus } from './useUsernameAvailability';
25
+
26
+ interface SignUpViewProps {
27
+ snapshot: AccountDialogSnapshot;
28
+ theme: Theme;
29
+ t: Translate;
30
+ oxyServices: OxyServices;
31
+ passkeyMode: PasskeyMode;
32
+ onCreateWithPasskey: (username: string) => void;
33
+ createPending: boolean;
34
+ /** Open the auth.oxy.so hub popup (b2) — the 'hub' mode's only path. */
35
+ onOpenHub: () => void;
36
+ /** Deep-link into Commons' own identity-creation screen (installed only). */
37
+ onCreateIdentityInCommons: () => void;
38
+ /** Open the Commons store listing / landing page for this platform. */
39
+ onGetCommons: () => void;
40
+ onBackToSignIn: () => void;
41
+ }
42
+
43
+ const SignUpView: React.FC<SignUpViewProps> = ({
44
+ snapshot,
45
+ theme,
46
+ t,
47
+ oxyServices,
48
+ passkeyMode,
49
+ onCreateWithPasskey,
50
+ createPending,
51
+ onOpenHub,
52
+ onCreateIdentityInCommons,
53
+ onGetCommons,
54
+ onBackToSignIn,
55
+ }) => {
56
+ const [username, setUsername] = useState('');
57
+ const { status: usernameStatus, check: checkUsername } = useUsernameAvailability(oxyServices, t);
58
+ const canSubmit = username.trim().length >= 3 && usernameStatus === 'available' && !createPending;
59
+
60
+ // Native — Commons owns identity creation. Deep-link straight in when it is
61
+ // installed, else lead with the same "Get Commons" acquisition CTA.
62
+ if (!isWebBrowser()) {
63
+ const commonsInstalled = snapshot.commonsAvailability === 'available';
64
+ return (
65
+ <View style={styles.centeredBlock}>
66
+ <Button
67
+ variant="primary"
68
+ onPress={commonsInstalled ? onCreateIdentityInCommons : onGetCommons}
69
+ style={styles.primaryButton}
70
+ >
71
+ {commonsInstalled ? t('signup.createInCommons') : t('accountSwitcher.getCommons')}
72
+ </Button>
73
+ <SubtleLink label={t('signup.backToSignInLink')} theme={theme} onPress={onBackToSignIn} />
74
+ </View>
75
+ );
76
+ }
77
+
78
+ // Web, first-party Oxy origin. Commons leads with a "Get Commons" CTA; passkey
79
+ // creation is the de-emphasized alternative underneath for someone who doesn't
80
+ // want to install anything — a secondary button introduced by its own "No
81
+ // Commons?" framing, the same subordination the sign-in surfaces use.
82
+ if (passkeyMode === 'direct') {
83
+ return (
84
+ <View style={styles.signInBlock}>
85
+ <Text style={[styles.qrHeadline, { color: theme.colors.text }]}>
86
+ {t('signup.commonsHeadline')}
87
+ </Text>
88
+ <Text style={[styles.mutedText, { color: theme.colors.textSecondary }]}>
89
+ {t('signup.commonsExplainer')}
90
+ </Text>
91
+ <Button variant="primary" onPress={onGetCommons} style={styles.primaryButton}>
92
+ {t('accountSwitcher.getCommons')}
93
+ </Button>
94
+
95
+ <Dividerish theme={theme} label={t('signin.or')} />
96
+
97
+ <Text style={[styles.mutedText, { color: theme.colors.textSecondary }]}>
98
+ {t('signup.passkeyAlternative')}
99
+ </Text>
100
+ <TextInput
101
+ style={[styles.usernameInput, { borderColor: theme.colors.border, color: theme.colors.text }]}
102
+ placeholder={t('signup.usernamePlaceholder')}
103
+ placeholderTextColor={theme.colors.textSecondary}
104
+ value={username}
105
+ autoCapitalize="none"
106
+ autoCorrect={false}
107
+ autoComplete="username"
108
+ onChangeText={(value) => {
109
+ setUsername(value);
110
+ checkUsername(value.trim());
111
+ }}
112
+ testID="signup-username-input"
113
+ />
114
+ <UsernameStatusText status={usernameStatus} theme={theme} t={t} />
115
+ <Button
116
+ variant="secondary"
117
+ onPress={() => onCreateWithPasskey(username.trim())}
118
+ disabled={!canSubmit}
119
+ style={styles.secondaryButton}
120
+ testID="signup-create-button"
121
+ >
122
+ {createPending ? t('signup.creating') : t('signup.createAccount')}
123
+ </Button>
124
+ <SubtleLink label={t('signup.backToSignInLink')} theme={theme} onPress={onBackToSignIn} />
125
+ </View>
126
+ );
127
+ }
128
+
129
+ // Web, non-Oxy origin (b2): a passkey ceremony cannot run locally here — the
130
+ // same WebAuthn RP-ID boundary the sign-in surfaces hit — so this opens the
131
+ // auth.oxy.so hub popup. Completing EITHER a sign-in OR a fresh sign-up there
132
+ // relays the resulting session back through the SAME poll/socket engine.
133
+ return (
134
+ <View style={styles.centeredBlock}>
135
+ <Text style={[styles.mutedText, { color: theme.colors.textSecondary }]}>
136
+ {t('signup.hubExplainer')}
137
+ </Text>
138
+ <Button variant="primary" onPress={onOpenHub} style={styles.primaryButton}>
139
+ {t('signup.continueInWindow')}
140
+ </Button>
141
+ <SubtleLink label={t('signup.backToSignInLink')} theme={theme} onPress={onBackToSignIn} />
142
+ </View>
143
+ );
144
+ };
145
+
146
+ /** The inline availability verdict. Network FAILURES are toasted, never shown here. */
147
+ const UsernameStatusText: React.FC<{ status: UsernameStatus; theme: Theme; t: Translate }> = ({
148
+ status,
149
+ theme,
150
+ t,
151
+ }) => {
152
+ if (status === 'idle') return null;
153
+ if (status === 'checking') {
154
+ return (
155
+ <Text style={[styles.mutedText, { color: theme.colors.textSecondary }]}>
156
+ {t('signup.usernameChecking')}
157
+ </Text>
158
+ );
159
+ }
160
+ if (status === 'available') {
161
+ return (
162
+ <Text style={[styles.mutedText, { color: theme.colors.success }]}>
163
+ {t('signup.usernameAvailable')}
164
+ </Text>
165
+ );
166
+ }
167
+ return (
168
+ <Text style={[styles.mutedText, { color: theme.colors.error }]}>
169
+ {t('signup.usernameTaken')}
170
+ </Text>
171
+ );
172
+ };
173
+
174
+ export default SignUpView;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The "Having trouble?" progressive disclosure (issue #691, Phase 5).
3
+ *
4
+ * The normal sign-in surface presents ONE primary action. Every alternative —
5
+ * scanning a QR from another device, a passkey on this device, getting Commons,
6
+ * creating an account — lives here, hidden until the user asks for it or the
7
+ * chosen primary route fails.
8
+ *
9
+ * Two renderings, deliberately not one controlled component:
10
+ * - `revealed` (the primary route failed, or there IS no primary route): the
11
+ * alternatives ARE the surface's content now, so they render plainly. There
12
+ * is nothing left to hide them behind.
13
+ * - otherwise: Bloom's own `Collapsible`, whose trigger is the small
14
+ * "Having trouble?" affordance.
15
+ *
16
+ * Splitting on `revealed` is what keeps the open state where it belongs — inside
17
+ * Bloom's uncontrolled disclosure — instead of forcing a hand-rolled controlled
18
+ * copy of it here.
19
+ */
20
+
21
+ import type React from 'react';
22
+ import { View } from 'react-native';
23
+ import { Collapsible } from '@oxyhq/bloom/collapsible';
24
+ import { SubtleLink } from './primitives';
25
+ import { authChooserStyles as styles } from './styles';
26
+ import type { OxySignInSurfaceAction, Theme, Translate } from './types';
27
+
28
+ interface TroubleDisclosureProps {
29
+ /** The alternative routes out of the current surface. Always subordinate links. */
30
+ actions: readonly OxySignInSurfaceAction[];
31
+ /**
32
+ * `true` when the primary route could not be carried out (`signIn.routeFailed`)
33
+ * or the surface has no working primary at all (a failed request). The
34
+ * alternatives are shown without asking.
35
+ */
36
+ revealed: boolean;
37
+ theme: Theme;
38
+ t: Translate;
39
+ }
40
+
41
+ const TroubleDisclosure: React.FC<TroubleDisclosureProps> = ({ actions, revealed, theme, t }) => {
42
+ if (actions.length === 0) return null;
43
+
44
+ const links = (
45
+ <View style={styles.troubleActions}>
46
+ {actions.map((action) => (
47
+ <SubtleLink
48
+ key={action.key}
49
+ label={action.label}
50
+ theme={theme}
51
+ onPress={action.onPress}
52
+ disabled={action.disabled}
53
+ testID={action.key}
54
+ />
55
+ ))}
56
+ </View>
57
+ );
58
+
59
+ if (revealed) return links;
60
+
61
+ return (
62
+ <Collapsible
63
+ title={t('accountSwitcher.havingTrouble')}
64
+ style={styles.troubleTrigger}
65
+ titleStyle={[styles.linkText, { color: theme.colors.textSecondary }]}
66
+ testID="trouble-disclosure"
67
+ >
68
+ {links}
69
+ </Collapsible>
70
+ );
71
+ };
72
+
73
+ export default TroubleDisclosure;
@@ -0,0 +1,144 @@
1
+ /**
2
+ * The small presentational building blocks shared across the auth chooser's
3
+ * views. One responsibility each, no controller access, no side effects — they
4
+ * take props and render.
5
+ */
6
+
7
+ import type React from 'react';
8
+ import { useState } from 'react';
9
+ import { Pressable, View } from 'react-native';
10
+ import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
11
+ import { Avatar } from '@oxyhq/bloom/avatar';
12
+ import { Text } from '@oxyhq/bloom/typography';
13
+ import { BloomColorScope } from '@oxyhq/bloom/theme';
14
+ import type { SwitchableAccount } from '@oxyhq/core';
15
+ import { authChooserStyles as styles } from './styles';
16
+ import { resolveAccentHex, toPreset, type Theme } from './types';
17
+
18
+ /** Diameter of a row avatar (the sign-in view's account rows). */
19
+ const ROW_AVATAR_SIZE = 40;
20
+
21
+ type HoverPressableProps = Omit<React.ComponentProps<typeof Pressable>, 'className'> & {
22
+ baseClassName: string;
23
+ hoverClassName: string;
24
+ };
25
+
26
+ /**
27
+ * A `Pressable` that appends a hover-tint NativeWind token while pointer-hovered.
28
+ * The Metro web pipeline here does NOT emit NativeWind `hover:` variants, so hover
29
+ * is driven by RN's cross-platform `onHoverIn`/`onHoverOut` (they fire only on web
30
+ * via react-native-web; a no-op on native) toggling a plain background token —
31
+ * the tint stays a NativeWind class, only the trigger is JS.
32
+ */
33
+ export const HoverPressable: React.FC<HoverPressableProps> = ({
34
+ baseClassName,
35
+ hoverClassName,
36
+ ...rest
37
+ }) => {
38
+ const [hovered, setHovered] = useState(false);
39
+ return (
40
+ <Pressable
41
+ {...rest}
42
+ className={hovered ? `${baseClassName} ${hoverClassName}` : baseClassName}
43
+ onHoverIn={() => setHovered(true)}
44
+ onHoverOut={() => setHovered(false)}
45
+ />
46
+ );
47
+ };
48
+
49
+ /**
50
+ * A SUBORDINATE action: a small centred text link, never a button.
51
+ *
52
+ * This is the single visual grammar for everything that is not the surface's one
53
+ * primary action (issue #691) — the sign-up entry, and every alternative revealed
54
+ * behind "Having trouble?". Keeping them all on one component is what stops an
55
+ * alternative from quietly growing into a co-equal button again.
56
+ */
57
+ export const SubtleLink: React.FC<{
58
+ label: string;
59
+ theme: Theme;
60
+ onPress: () => void;
61
+ disabled?: boolean;
62
+ testID?: string;
63
+ }> = ({ label, theme, onPress, disabled, testID }) => (
64
+ <Pressable
65
+ onPress={onPress}
66
+ disabled={disabled}
67
+ accessibilityRole="button"
68
+ accessibilityLabel={label}
69
+ style={styles.footerLink}
70
+ testID={testID}
71
+ >
72
+ <Text style={[styles.linkText, { color: theme.colors.textSecondary }]}>{label}</Text>
73
+ </Pressable>
74
+ );
75
+
76
+ /** A labelled hairline separating two blocks ("or"). */
77
+ export const Dividerish: React.FC<{ theme: Theme; label: string }> = ({ theme, label }) => (
78
+ <View style={styles.dividerRow}>
79
+ <View style={[styles.dividerLine, { backgroundColor: theme.colors.border }]} />
80
+ <Text style={[styles.dividerText, { color: theme.colors.textSecondary }]}>{label}</Text>
81
+ <View style={[styles.dividerLine, { backgroundColor: theme.colors.border }]} />
82
+ </View>
83
+ );
84
+
85
+ /**
86
+ * An account row on the sign-in entry — "continue as one of these" rather than a
87
+ * choice of authentication METHOD, which is why it stays above the primary CTA
88
+ * instead of behind the trouble disclosure.
89
+ */
90
+ export const AccountRow: React.FC<{
91
+ account: SwitchableAccount;
92
+ theme: Theme;
93
+ switching: boolean;
94
+ disabled: boolean;
95
+ onPress: () => void;
96
+ }> = ({ account, theme, switching, disabled, onPress }) => {
97
+ const accent = resolveAccentHex(account.color, theme.colors.primary);
98
+
99
+ return (
100
+ <BloomColorScope colorPreset={toPreset(account.color)} asChild>
101
+ <Pressable
102
+ style={[
103
+ styles.accountRow,
104
+ {
105
+ borderColor: account.isCurrent ? accent : theme.colors.border,
106
+ backgroundColor: theme.colors.card,
107
+ },
108
+ disabled && !switching ? styles.rowDisabled : null,
109
+ ]}
110
+ onPress={onPress}
111
+ disabled={disabled}
112
+ accessibilityRole="button"
113
+ accessibilityState={{ selected: account.isCurrent, disabled }}
114
+ accessibilityLabel={account.displayName}
115
+ >
116
+ <View style={[styles.avatarRing, { borderColor: account.isCurrent ? accent : 'transparent' }]}>
117
+ <Avatar
118
+ source={account.avatarUrl ?? undefined}
119
+ variant="thumb"
120
+ name={account.displayName}
121
+ size={ROW_AVATAR_SIZE}
122
+ />
123
+ </View>
124
+ <View style={styles.rowMeta}>
125
+ <Text style={[styles.rowName, { color: theme.colors.text }]} numberOfLines={1}>
126
+ {account.displayName}
127
+ </Text>
128
+ {account.email ? (
129
+ <Text style={[styles.rowHandle, { color: theme.colors.textSecondary }]} numberOfLines={1}>
130
+ {account.email}
131
+ </Text>
132
+ ) : null}
133
+ </View>
134
+ {switching ? (
135
+ <MaterialCommunityIcons name="loading" size={20} color={accent} />
136
+ ) : account.isCurrent ? (
137
+ <MaterialCommunityIcons name="check-circle" size={20} color={accent} />
138
+ ) : (
139
+ <MaterialCommunityIcons name="chevron-right" size={20} color={theme.colors.textSecondary} />
140
+ )}
141
+ </Pressable>
142
+ </BloomColorScope>
143
+ );
144
+ };