@oxyhq/services 26.0.0 → 26.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 (583) hide show
  1. package/README.md +2 -2
  2. package/android/src/main/java/so/oxy/identity/OxyIdentityStore.kt +127 -21
  3. package/expo-module.config.json +1 -4
  4. package/lib/commonjs/index.js +49 -18
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/notifications/deviceNotifications.js +0 -63
  7. package/lib/commonjs/notifications/deviceNotifications.js.map +1 -1
  8. package/lib/commonjs/ui/boot/runProviderColdBoot.js +64 -20
  9. package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
  10. package/lib/commonjs/ui/components/FollowButton.js +4 -4
  11. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  12. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js +1 -13
  13. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -1
  14. package/lib/commonjs/ui/components/OxyAuthChooser.js +8 -9
  15. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  16. package/lib/commonjs/ui/components/OxyProvider.js +7 -8
  17. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  18. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  19. package/lib/commonjs/ui/components/ProfileButton.js +1 -1
  20. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  21. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +30 -25
  22. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  23. package/lib/commonjs/ui/components/authChooser/primitives.js +9 -9
  24. package/lib/commonjs/ui/components/authChooser/primitives.js.map +1 -1
  25. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js +2 -2
  26. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js.map +1 -1
  27. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +2 -2
  28. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  29. package/lib/commonjs/ui/components/internal/PinInput.js +1 -3
  30. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
  31. package/lib/commonjs/ui/components/logo/LogoText.js +4 -4
  32. package/lib/commonjs/ui/components/logo/LogoText.js.map +1 -1
  33. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +2 -2
  34. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  35. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +2 -2
  36. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  37. package/lib/commonjs/ui/components/styles/shadow.js.map +1 -1
  38. package/lib/commonjs/ui/context/OxyContext.js +46 -32
  39. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  40. package/lib/commonjs/ui/context/commitSessionFlow.js +43 -3
  41. package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
  42. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +2 -15
  43. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  44. package/lib/commonjs/ui/context/useOxyAccountGraph.js +4 -3
  45. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
  46. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +5 -5
  47. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
  48. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +11 -11
  49. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  50. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +9 -9
  51. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  52. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js +2 -3
  53. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  54. package/lib/commonjs/ui/hooks/queries/userCache.js +17 -17
  55. package/lib/commonjs/ui/hooks/queries/userCache.js.map +1 -1
  56. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
  57. package/lib/commonjs/ui/hooks/useAsyncAction.js +7 -7
  58. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
  59. package/lib/commonjs/ui/hooks/useAuth.js +2 -4
  60. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  61. package/lib/commonjs/ui/hooks/useAvatarPicker.js +5 -5
  62. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
  63. package/lib/commonjs/ui/hooks/useOnlineStatus.js +2 -3
  64. package/lib/commonjs/ui/hooks/useOnlineStatus.js.map +1 -1
  65. package/lib/commonjs/ui/hooks/useSessionManagement.js +2 -0
  66. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  67. package/lib/commonjs/ui/hooks/useSettingToggle.js +4 -4
  68. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
  69. package/lib/commonjs/ui/hooks/useSurfaceHeader.js +11 -68
  70. package/lib/commonjs/ui/hooks/useSurfaceHeader.js.map +1 -1
  71. package/lib/commonjs/ui/oauth/browserAuthTransport.js +64 -66
  72. package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -1
  73. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js +48 -0
  74. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js.map +1 -0
  75. package/lib/commonjs/ui/oauth/oauthPopup.js +0 -47
  76. package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -1
  77. package/lib/commonjs/ui/screens/AccountMembersScreen.js +10 -10
  78. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +19 -41
  80. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  81. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +4 -4
  82. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  83. package/lib/commonjs/ui/screens/AppInfoScreen.js +9 -9
  84. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  85. package/lib/commonjs/ui/screens/AvatarCropScreen.js +3 -3
  86. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  87. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js +7 -6
  88. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
  89. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +4 -4
  90. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  91. package/lib/commonjs/ui/screens/CreateAccountScreen.js +13 -35
  92. package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
  93. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +5 -5
  94. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  95. package/lib/commonjs/ui/screens/EditProfileScreen.js +3 -2
  96. package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
  97. package/lib/commonjs/ui/screens/FAQScreen.js +2 -2
  98. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  99. package/lib/commonjs/ui/screens/FeedbackScreen.js +89 -90
  100. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  101. package/lib/commonjs/ui/screens/FileManagementScreen.js +20 -20
  102. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  103. package/lib/commonjs/ui/screens/FollowersListScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/FollowingListScreen.js.map +1 -1
  105. package/lib/commonjs/ui/screens/HelpSupportScreen.js +7 -7
  106. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  107. package/lib/commonjs/ui/screens/HistoryViewScreen.js +34 -9
  108. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  109. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +3 -3
  110. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  111. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +3 -3
  112. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  113. package/lib/commonjs/ui/screens/ManageAccountScreen.js +15 -15
  114. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  115. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +19 -19
  116. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  117. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +15 -15
  118. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  119. package/lib/commonjs/ui/screens/ProfileScreen.js +7 -17
  120. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  121. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +2 -2
  122. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  123. package/lib/commonjs/ui/screens/UserListScreen.js +7 -13
  124. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  125. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +6 -5
  126. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  127. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +4 -1
  128. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  129. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js +24 -34
  130. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  131. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +1 -1
  132. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  133. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +4 -3
  134. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  135. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +1 -1
  136. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  137. package/lib/commonjs/ui/session/index.js +0 -7
  138. package/lib/commonjs/ui/session/index.js.map +1 -1
  139. package/lib/commonjs/ui/utils/crossOriginRestore.js +140 -0
  140. package/lib/commonjs/ui/utils/crossOriginRestore.js.map +1 -0
  141. package/lib/commonjs/ui/utils/fileManagement.js +24 -24
  142. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  143. package/lib/commonjs/ui/utils/oauthReturn.js +30 -19
  144. package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -1
  145. package/lib/commonjs/ui/utils/userUtils.js +28 -27
  146. package/lib/commonjs/ui/utils/userUtils.js.map +1 -1
  147. package/lib/module/index.js +8 -20
  148. package/lib/module/index.js.map +1 -1
  149. package/lib/module/notifications/deviceNotifications.js +0 -62
  150. package/lib/module/notifications/deviceNotifications.js.map +1 -1
  151. package/lib/module/ui/boot/runProviderColdBoot.js +65 -21
  152. package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
  153. package/lib/module/ui/components/FollowButton.js +1 -1
  154. package/lib/module/ui/components/FollowButton.js.map +1 -1
  155. package/lib/module/ui/components/OxyAccountDialogScreen.js +1 -13
  156. package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
  157. package/lib/module/ui/components/OxyAuthChooser.js +4 -5
  158. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  159. package/lib/module/ui/components/OxyProvider.js +6 -7
  160. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  161. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  162. package/lib/module/ui/components/ProfileButton.js +2 -2
  163. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  164. package/lib/module/ui/components/authChooser/AccountsMenuView.js +8 -3
  165. package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  166. package/lib/module/ui/components/authChooser/primitives.js +1 -1
  167. package/lib/module/ui/components/authChooser/primitives.js.map +1 -1
  168. package/lib/module/ui/components/authChooser/useUsernameAvailability.js +1 -1
  169. package/lib/module/ui/components/authChooser/useUsernameAvailability.js.map +1 -1
  170. package/lib/module/ui/components/fileManagement/UploadPreview.js +1 -1
  171. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  172. package/lib/module/ui/components/internal/PinInput.js +1 -3
  173. package/lib/module/ui/components/internal/PinInput.js.map +1 -1
  174. package/lib/module/ui/components/logo/LogoText.js +4 -4
  175. package/lib/module/ui/components/logo/LogoText.js.map +1 -1
  176. package/lib/module/ui/components/payment/PaymentDetailsStep.js +1 -1
  177. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  178. package/lib/module/ui/components/payment/PaymentSummaryStep.js +2 -2
  179. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  180. package/lib/module/ui/components/styles/shadow.js.map +1 -1
  181. package/lib/module/ui/context/OxyContext.js +49 -35
  182. package/lib/module/ui/context/OxyContext.js.map +1 -1
  183. package/lib/module/ui/context/commitSessionFlow.js +42 -3
  184. package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
  185. package/lib/module/ui/context/hooks/useAuthOperations.js +2 -15
  186. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  187. package/lib/module/ui/context/useOxyAccountGraph.js +4 -3
  188. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
  189. package/lib/module/ui/hooks/mutations/mutationFactory.js +1 -1
  190. package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
  191. package/lib/module/ui/hooks/mutations/useAccountMutations.js +1 -1
  192. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  193. package/lib/module/ui/hooks/mutations/useServicesMutations.js +1 -1
  194. package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  195. package/lib/module/ui/hooks/queries/usePaymentQueries.js +2 -3
  196. package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  197. package/lib/module/ui/hooks/queries/userCache.js +17 -17
  198. package/lib/module/ui/hooks/queries/userCache.js.map +1 -1
  199. package/lib/module/ui/hooks/useAssets.js.map +1 -1
  200. package/lib/module/ui/hooks/useAsyncAction.js +1 -1
  201. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
  202. package/lib/module/ui/hooks/useAuth.js +2 -4
  203. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  204. package/lib/module/ui/hooks/useAvatarPicker.js +1 -1
  205. package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
  206. package/lib/module/ui/hooks/useOnlineStatus.js +2 -3
  207. package/lib/module/ui/hooks/useOnlineStatus.js.map +1 -1
  208. package/lib/module/ui/hooks/useSessionManagement.js +2 -0
  209. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  210. package/lib/module/ui/hooks/useSettingToggle.js +1 -1
  211. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
  212. package/lib/module/ui/hooks/useSurfaceHeader.js +11 -68
  213. package/lib/module/ui/hooks/useSurfaceHeader.js.map +1 -1
  214. package/lib/module/ui/oauth/browserAuthTransport.js +64 -66
  215. package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -1
  216. package/lib/module/ui/oauth/legacyRedirectLanes.js +44 -0
  217. package/lib/module/ui/oauth/legacyRedirectLanes.js.map +1 -0
  218. package/lib/module/ui/oauth/oauthPopup.js +1 -48
  219. package/lib/module/ui/oauth/oauthPopup.js.map +1 -1
  220. package/lib/module/ui/screens/AccountMembersScreen.js +1 -1
  221. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  222. package/lib/module/ui/screens/AccountSettingsScreen.js +15 -37
  223. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  224. package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
  225. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  226. package/lib/module/ui/screens/AppInfoScreen.js +1 -1
  227. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  228. package/lib/module/ui/screens/AvatarCropScreen.js +1 -1
  229. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  230. package/lib/module/ui/screens/ChangeAvatarScreen.js +5 -4
  231. package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -1
  232. package/lib/module/ui/screens/ConnectedAppsScreen.js +2 -2
  233. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  234. package/lib/module/ui/screens/CreateAccountScreen.js +12 -34
  235. package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
  236. package/lib/module/ui/screens/EditProfileFieldScreen.js +4 -4
  237. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  238. package/lib/module/ui/screens/EditProfileScreen.js +4 -3
  239. package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
  240. package/lib/module/ui/screens/FAQScreen.js +1 -1
  241. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  242. package/lib/module/ui/screens/FeedbackScreen.js +91 -94
  243. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  244. package/lib/module/ui/screens/FileManagementScreen.js +1 -1
  245. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  246. package/lib/module/ui/screens/FollowersListScreen.js.map +1 -1
  247. package/lib/module/ui/screens/FollowingListScreen.js.map +1 -1
  248. package/lib/module/ui/screens/HelpSupportScreen.js +1 -1
  249. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  250. package/lib/module/ui/screens/HistoryViewScreen.js +30 -5
  251. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  252. package/lib/module/ui/screens/LanguageSelectorScreen.js +1 -1
  253. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  254. package/lib/module/ui/screens/LegalDocumentsScreen.js +1 -1
  255. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  256. package/lib/module/ui/screens/ManageAccountScreen.js +3 -3
  257. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  258. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +4 -4
  259. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  260. package/lib/module/ui/screens/PrivacySettingsScreen.js +11 -11
  261. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  262. package/lib/module/ui/screens/ProfileScreen.js +8 -18
  263. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  264. package/lib/module/ui/screens/SavesCollectionsScreen.js +1 -1
  265. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  266. package/lib/module/ui/screens/UserListScreen.js +8 -14
  267. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  268. package/lib/module/ui/screens/WelcomeNewUserScreen.js +6 -5
  269. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  270. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +4 -1
  271. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  272. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js +5 -15
  273. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  274. package/lib/module/ui/screens/trust/TrustCenterScreen.js +1 -1
  275. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  276. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +5 -4
  277. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  278. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +1 -1
  279. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  280. package/lib/module/ui/session/index.js +0 -1
  281. package/lib/module/ui/session/index.js.map +1 -1
  282. package/lib/module/ui/utils/crossOriginRestore.js +131 -0
  283. package/lib/module/ui/utils/crossOriginRestore.js.map +1 -0
  284. package/lib/module/ui/utils/fileManagement.js +25 -25
  285. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  286. package/lib/module/ui/utils/oauthReturn.js +30 -20
  287. package/lib/module/ui/utils/oauthReturn.js.map +1 -1
  288. package/lib/module/ui/utils/userUtils.js +28 -27
  289. package/lib/module/ui/utils/userUtils.js.map +1 -1
  290. package/lib/typescript/commonjs/index.d.ts +2 -0
  291. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts +0 -51
  293. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts.map +1 -1
  294. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +30 -11
  295. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  296. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  297. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +0 -7
  298. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  300. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +1 -2
  301. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  303. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts +1 -1
  305. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts.map +1 -1
  306. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts +1 -1
  307. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  308. package/lib/typescript/commonjs/ui/components/internal/PinInput.d.ts.map +1 -1
  309. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +6 -6
  310. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts +40 -0
  313. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts +2 -11
  315. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  316. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +7 -26
  317. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  318. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +1 -0
  319. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  320. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  321. package/lib/typescript/commonjs/ui/hooks/queries/paymentTypes.d.ts +2 -3
  322. package/lib/typescript/commonjs/ui/hooks/queries/paymentTypes.d.ts.map +1 -1
  323. package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts +2 -3
  324. package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
  325. package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts +2 -2
  326. package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts.map +1 -1
  327. package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts +1 -1
  328. package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts.map +1 -1
  329. package/lib/typescript/commonjs/ui/hooks/useAsyncAction.d.ts +2 -2
  330. package/lib/typescript/commonjs/ui/hooks/useAsyncAction.d.ts.map +1 -1
  331. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +2 -4
  332. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  333. package/lib/typescript/commonjs/ui/hooks/useOnlineStatus.d.ts +2 -3
  334. package/lib/typescript/commonjs/ui/hooks/useOnlineStatus.d.ts.map +1 -1
  335. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  336. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts +2 -7
  337. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts.map +1 -1
  338. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  339. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  340. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  341. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts +0 -6
  342. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -1
  343. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  344. package/lib/typescript/commonjs/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  345. package/lib/typescript/commonjs/ui/screens/CreateAccountScreen.d.ts.map +1 -1
  346. package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts +2 -2
  348. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  349. package/lib/typescript/commonjs/ui/screens/FollowersListScreen.d.ts +0 -3
  350. package/lib/typescript/commonjs/ui/screens/FollowersListScreen.d.ts.map +1 -1
  351. package/lib/typescript/commonjs/ui/screens/FollowingListScreen.d.ts +0 -3
  352. package/lib/typescript/commonjs/ui/screens/FollowingListScreen.d.ts.map +1 -1
  353. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  354. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  355. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  356. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  357. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts +0 -7
  358. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  359. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  360. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  361. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  362. package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts +1 -1
  363. package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts.map +1 -1
  364. package/lib/typescript/commonjs/ui/session/index.d.ts +0 -1
  365. package/lib/typescript/commonjs/ui/session/index.d.ts.map +1 -1
  366. package/lib/typescript/commonjs/ui/types/navigation.d.ts +19 -27
  367. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  368. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts +43 -0
  369. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts.map +1 -0
  370. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +5 -5
  371. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  372. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +12 -15
  373. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -1
  374. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts +14 -7
  375. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts.map +1 -1
  376. package/lib/typescript/module/index.d.ts +2 -0
  377. package/lib/typescript/module/index.d.ts.map +1 -1
  378. package/lib/typescript/module/notifications/deviceNotifications.d.ts +0 -51
  379. package/lib/typescript/module/notifications/deviceNotifications.d.ts.map +1 -1
  380. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +30 -11
  381. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  382. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  383. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +0 -7
  384. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  385. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  386. package/lib/typescript/module/ui/components/OxySignInButton.d.ts +1 -2
  387. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  388. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  389. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  390. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts +1 -1
  391. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts.map +1 -1
  392. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts +1 -1
  393. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  394. package/lib/typescript/module/ui/components/internal/PinInput.d.ts.map +1 -1
  395. package/lib/typescript/module/ui/components/payment/types.d.ts +6 -6
  396. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  397. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  398. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts +40 -0
  399. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
  400. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts +2 -11
  401. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  402. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +7 -26
  403. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  404. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +1 -0
  405. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  406. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  407. package/lib/typescript/module/ui/hooks/queries/paymentTypes.d.ts +2 -3
  408. package/lib/typescript/module/ui/hooks/queries/paymentTypes.d.ts.map +1 -1
  409. package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts +2 -3
  410. package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
  411. package/lib/typescript/module/ui/hooks/queries/userCache.d.ts +2 -2
  412. package/lib/typescript/module/ui/hooks/queries/userCache.d.ts.map +1 -1
  413. package/lib/typescript/module/ui/hooks/useAssets.d.ts +1 -1
  414. package/lib/typescript/module/ui/hooks/useAssets.d.ts.map +1 -1
  415. package/lib/typescript/module/ui/hooks/useAsyncAction.d.ts +2 -2
  416. package/lib/typescript/module/ui/hooks/useAsyncAction.d.ts.map +1 -1
  417. package/lib/typescript/module/ui/hooks/useAuth.d.ts +2 -4
  418. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  419. package/lib/typescript/module/ui/hooks/useOnlineStatus.d.ts +2 -3
  420. package/lib/typescript/module/ui/hooks/useOnlineStatus.d.ts.map +1 -1
  421. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  422. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts +2 -7
  423. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts.map +1 -1
  424. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  425. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  426. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  427. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts +0 -6
  428. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -1
  429. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  430. package/lib/typescript/module/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  431. package/lib/typescript/module/ui/screens/CreateAccountScreen.d.ts.map +1 -1
  432. package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -1
  433. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts +2 -2
  434. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  435. package/lib/typescript/module/ui/screens/FollowersListScreen.d.ts +0 -3
  436. package/lib/typescript/module/ui/screens/FollowersListScreen.d.ts.map +1 -1
  437. package/lib/typescript/module/ui/screens/FollowingListScreen.d.ts +0 -3
  438. package/lib/typescript/module/ui/screens/FollowingListScreen.d.ts.map +1 -1
  439. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  440. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  441. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  442. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  443. package/lib/typescript/module/ui/screens/UserListScreen.d.ts +0 -7
  444. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  445. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  446. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  447. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  448. package/lib/typescript/module/ui/screens/trust/trustTier.d.ts +1 -1
  449. package/lib/typescript/module/ui/screens/trust/trustTier.d.ts.map +1 -1
  450. package/lib/typescript/module/ui/session/index.d.ts +0 -1
  451. package/lib/typescript/module/ui/session/index.d.ts.map +1 -1
  452. package/lib/typescript/module/ui/types/navigation.d.ts +19 -27
  453. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  454. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts +43 -0
  455. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts.map +1 -0
  456. package/lib/typescript/module/ui/utils/fileManagement.d.ts +5 -5
  457. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  458. package/lib/typescript/module/ui/utils/oauthReturn.d.ts +12 -15
  459. package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -1
  460. package/lib/typescript/module/ui/utils/userUtils.d.ts +14 -7
  461. package/lib/typescript/module/ui/utils/userUtils.d.ts.map +1 -1
  462. package/package.json +10 -22
  463. package/src/index.ts +16 -18
  464. package/src/notifications/deviceNotifications.ts +0 -82
  465. package/src/ui/boot/__tests__/coldBootWebAuthMode.test.ts +281 -0
  466. package/src/ui/boot/runProviderColdBoot.ts +101 -24
  467. package/src/ui/components/FollowButton.tsx +1 -1
  468. package/src/ui/components/OxyAccountDialogScreen.tsx +1 -13
  469. package/src/ui/components/OxyAuthChooser.tsx +4 -14
  470. package/src/ui/components/OxyProvider.tsx +7 -8
  471. package/src/ui/components/OxySignInButton.tsx +1 -2
  472. package/src/ui/components/ProfileButton.tsx +2 -5
  473. package/src/ui/components/authChooser/AccountsMenuView.tsx +10 -5
  474. package/src/ui/components/authChooser/primitives.tsx +1 -1
  475. package/src/ui/components/authChooser/useUsernameAvailability.ts +1 -1
  476. package/src/ui/components/fileManagement/UploadPreview.tsx +1 -1
  477. package/src/ui/components/internal/PinInput.tsx +0 -1
  478. package/src/ui/components/logo/LogoText.tsx +4 -4
  479. package/src/ui/components/payment/PaymentDetailsStep.tsx +1 -1
  480. package/src/ui/components/payment/PaymentSummaryStep.tsx +2 -2
  481. package/src/ui/components/payment/types.ts +24 -24
  482. package/src/ui/components/styles/shadow.tsx +2 -2
  483. package/src/ui/context/OxyContext.tsx +46 -35
  484. package/src/ui/context/__tests__/commitSessionFlow.test.ts +89 -13
  485. package/src/ui/context/commitSessionFlow.ts +61 -3
  486. package/src/ui/context/hooks/useAuthOperations.ts +1 -26
  487. package/src/ui/context/oxyContextTypes.ts +7 -26
  488. package/src/ui/context/useOxyAccountGraph.ts +4 -4
  489. package/src/ui/hooks/mutations/mutationFactory.ts +1 -1
  490. package/src/ui/hooks/mutations/useAccountMutations.ts +1 -1
  491. package/src/ui/hooks/mutations/useServicesMutations.ts +1 -1
  492. package/src/ui/hooks/queries/paymentTypes.ts +2 -3
  493. package/src/ui/hooks/queries/usePaymentQueries.ts +2 -3
  494. package/src/ui/hooks/queries/userCache.ts +148 -169
  495. package/src/ui/hooks/useAssets.ts +1 -1
  496. package/src/ui/hooks/useAsyncAction.ts +3 -3
  497. package/src/ui/hooks/useAuth.ts +2 -4
  498. package/src/ui/hooks/useAvatarPicker.ts +1 -1
  499. package/src/ui/hooks/useOnlineStatus.ts +2 -3
  500. package/src/ui/hooks/useSessionManagement.ts +2 -0
  501. package/src/ui/hooks/useSettingToggle.ts +1 -1
  502. package/src/ui/hooks/useSurfaceHeader.ts +15 -90
  503. package/src/ui/oauth/__tests__/oauthPopup.test.ts +0 -26
  504. package/src/ui/oauth/browserAuthTransport.ts +49 -55
  505. package/src/ui/oauth/legacyRedirectLanes.ts +43 -0
  506. package/src/ui/oauth/oauthPopup.ts +3 -61
  507. package/src/ui/screens/AccountMembersScreen.tsx +1 -1
  508. package/src/ui/screens/AccountSettingsScreen.tsx +17 -45
  509. package/src/ui/screens/AccountVerificationScreen.tsx +1 -1
  510. package/src/ui/screens/AppInfoScreen.tsx +1 -1
  511. package/src/ui/screens/AvatarCropScreen.tsx +1 -1
  512. package/src/ui/screens/ChangeAvatarScreen.tsx +4 -7
  513. package/src/ui/screens/ConnectedAppsScreen.tsx +2 -2
  514. package/src/ui/screens/CreateAccountScreen.tsx +13 -43
  515. package/src/ui/screens/EditProfileFieldScreen.tsx +4 -4
  516. package/src/ui/screens/EditProfileScreen.tsx +3 -6
  517. package/src/ui/screens/FAQScreen.tsx +1 -1
  518. package/src/ui/screens/FeedbackScreen.tsx +575 -741
  519. package/src/ui/screens/FileManagementScreen.tsx +1 -1
  520. package/src/ui/screens/FollowersListScreen.tsx +0 -3
  521. package/src/ui/screens/FollowingListScreen.tsx +0 -3
  522. package/src/ui/screens/HelpSupportScreen.tsx +1 -1
  523. package/src/ui/screens/HistoryViewScreen.tsx +20 -5
  524. package/src/ui/screens/LanguageSelectorScreen.tsx +1 -1
  525. package/src/ui/screens/LegalDocumentsScreen.tsx +1 -1
  526. package/src/ui/screens/ManageAccountScreen.tsx +2 -9
  527. package/src/ui/screens/PremiumSubscriptionScreen.tsx +4 -4
  528. package/src/ui/screens/PrivacySettingsScreen.tsx +12 -15
  529. package/src/ui/screens/ProfileScreen.tsx +6 -24
  530. package/src/ui/screens/SavesCollectionsScreen.tsx +1 -1
  531. package/src/ui/screens/UserListScreen.tsx +8 -18
  532. package/src/ui/screens/WelcomeNewUserScreen.tsx +6 -6
  533. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +1 -1
  534. package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +5 -14
  535. package/src/ui/screens/trust/TrustCenterScreen.tsx +2 -2
  536. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +5 -6
  537. package/src/ui/screens/trust/TrustRewardsScreen.tsx +1 -1
  538. package/src/ui/screens/trust/TrustRulesScreen.tsx +1 -1
  539. package/src/ui/screens/trust/trustTier.ts +1 -1
  540. package/src/ui/session/index.ts +0 -1
  541. package/src/ui/types/navigation.ts +19 -27
  542. package/src/ui/utils/__tests__/crossOriginRestore.test.ts +143 -0
  543. package/src/ui/utils/crossOriginRestore.ts +169 -0
  544. package/src/ui/utils/fileManagement.ts +92 -108
  545. package/src/ui/utils/oauthReturn.ts +33 -23
  546. package/src/ui/utils/userUtils.ts +32 -27
  547. package/android/src/main/java/so/oxy/session/OxyBackgroundSession.kt +0 -184
  548. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionApi.kt +0 -162
  549. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionModule.kt +0 -116
  550. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionStore.kt +0 -179
  551. package/android/src/main/java/so/oxy/session/OxyBackgroundToken.kt +0 -61
  552. package/android/src/main/java/so/oxy/storage/OxyEncryptedPrefs.kt +0 -241
  553. package/lib/commonjs/ui/session/backgroundSession.js +0 -258
  554. package/lib/commonjs/ui/session/backgroundSession.js.map +0 -1
  555. package/lib/commonjs/ui/session/useBackgroundSessionSync.js +0 -81
  556. package/lib/commonjs/ui/session/useBackgroundSessionSync.js.map +0 -1
  557. package/lib/commonjs/ui/utils/netConnectivity.js +0 -28
  558. package/lib/commonjs/ui/utils/netConnectivity.js.map +0 -1
  559. package/lib/module/ui/session/backgroundSession.js +0 -252
  560. package/lib/module/ui/session/backgroundSession.js.map +0 -1
  561. package/lib/module/ui/session/useBackgroundSessionSync.js +0 -76
  562. package/lib/module/ui/session/useBackgroundSessionSync.js.map +0 -1
  563. package/lib/module/ui/utils/netConnectivity.js +0 -23
  564. package/lib/module/ui/utils/netConnectivity.js.map +0 -1
  565. package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts +0 -42
  566. package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts.map +0 -1
  567. package/lib/typescript/commonjs/ui/session/useBackgroundSessionSync.d.ts +0 -23
  568. package/lib/typescript/commonjs/ui/session/useBackgroundSessionSync.d.ts.map +0 -1
  569. package/lib/typescript/commonjs/ui/utils/netConnectivity.d.ts +0 -17
  570. package/lib/typescript/commonjs/ui/utils/netConnectivity.d.ts.map +0 -1
  571. package/lib/typescript/module/ui/session/backgroundSession.d.ts +0 -42
  572. package/lib/typescript/module/ui/session/backgroundSession.d.ts.map +0 -1
  573. package/lib/typescript/module/ui/session/useBackgroundSessionSync.d.ts +0 -23
  574. package/lib/typescript/module/ui/session/useBackgroundSessionSync.d.ts.map +0 -1
  575. package/lib/typescript/module/ui/utils/netConnectivity.d.ts +0 -17
  576. package/lib/typescript/module/ui/utils/netConnectivity.d.ts.map +0 -1
  577. package/lib/typescript/types/expo-image-picker.d.ts +0 -35
  578. package/src/types/expo-image-picker.d.ts +0 -35
  579. package/src/ui/boot/__tests__/coldBootNoIdpRedirect.test.ts +0 -215
  580. package/src/ui/session/__tests__/backgroundSession.test.ts +0 -392
  581. package/src/ui/session/backgroundSession.ts +0 -313
  582. package/src/ui/session/useBackgroundSessionSync.ts +0 -92
  583. package/src/ui/utils/netConnectivity.ts +0 -27
@@ -9,7 +9,6 @@ import { OXY_OAUTH_CODE_MESSAGE_TYPE, OXY_OAUTH_ERROR_MESSAGE_TYPE } from '../oa
9
9
  import type { OAuthPopupHandle, OAuthPopupOutcome } from '../types';
10
10
 
11
11
  const IDP_ORIGIN = 'https://auth.oxy.so';
12
- const REDIRECT_URI = 'https://mention.earth';
13
12
  const STATE = 'state-abc';
14
13
 
15
14
  interface ControllablePopup extends OAuthPopupHandle {
@@ -162,7 +161,6 @@ describe('awaitOAuthPopupResult', () => {
162
161
  popup,
163
162
  expectedOrigin: IDP_ORIGIN,
164
163
  expectedState: STATE,
165
- redirectUri: REDIRECT_URI,
166
164
  });
167
165
 
168
166
  dispatchMessage(codeMessage(popup));
@@ -177,7 +175,6 @@ describe('awaitOAuthPopupResult', () => {
177
175
  popup,
178
176
  expectedOrigin: IDP_ORIGIN,
179
177
  expectedState: STATE,
180
- redirectUri: REDIRECT_URI,
181
178
  });
182
179
 
183
180
  dispatchMessage({
@@ -205,7 +202,6 @@ describe('awaitOAuthPopupResult', () => {
205
202
  popup,
206
203
  expectedOrigin: IDP_ORIGIN,
207
204
  expectedState: STATE,
208
- redirectUri: REDIRECT_URI,
209
205
  });
210
206
 
211
207
  dispatchMessage(codeMessage(popup, 'a-different-state'));
@@ -223,7 +219,6 @@ describe('awaitOAuthPopupResult', () => {
223
219
  popup,
224
220
  expectedOrigin: IDP_ORIGIN,
225
221
  expectedState: STATE,
226
- redirectUri: REDIRECT_URI,
227
222
  timeoutMs: 60_000,
228
223
  });
229
224
 
@@ -242,7 +237,6 @@ describe('awaitOAuthPopupResult', () => {
242
237
  popup,
243
238
  expectedOrigin: IDP_ORIGIN,
244
239
  expectedState: STATE,
245
- redirectUri: REDIRECT_URI,
246
240
  timeoutMs: 60_000,
247
241
  });
248
242
 
@@ -260,7 +254,6 @@ describe('awaitOAuthPopupResult', () => {
260
254
  popup,
261
255
  expectedOrigin: IDP_ORIGIN,
262
256
  expectedState: STATE,
263
- redirectUri: REDIRECT_URI,
264
257
  });
265
258
 
266
259
  dispatchMessage(codeMessage(popup));
@@ -284,7 +277,6 @@ describe('awaitOAuthPopupResult', () => {
284
277
  popup,
285
278
  expectedOrigin: IDP_ORIGIN,
286
279
  expectedState: STATE,
287
- redirectUri: REDIRECT_URI,
288
280
  });
289
281
 
290
282
  popup.setClosed();
@@ -303,7 +295,6 @@ describe('awaitOAuthPopupResult', () => {
303
295
  popup,
304
296
  expectedOrigin: IDP_ORIGIN,
305
297
  expectedState: STATE,
306
- redirectUri: REDIRECT_URI,
307
298
  });
308
299
 
309
300
  // The IdP posts its result and immediately closes itself.
@@ -322,7 +313,6 @@ describe('awaitOAuthPopupResult', () => {
322
313
  popup,
323
314
  expectedOrigin: IDP_ORIGIN,
324
315
  expectedState: STATE,
325
- redirectUri: REDIRECT_URI,
326
316
  timeoutMs: 30_000,
327
317
  });
328
318
 
@@ -333,20 +323,4 @@ describe('awaitOAuthPopupResult', () => {
333
323
  await expect(promise).resolves.toEqual({ kind: 'timed-out' });
334
324
  expectFullCleanup();
335
325
  });
336
-
337
- it('reads a same-origin redirect fallback from the popup URL when postMessage is unavailable', async () => {
338
- const popup = fakePopup();
339
- popup.location.href = `${REDIRECT_URI}?code=auth-code&state=${STATE}`;
340
- const promise = awaitOAuthPopupResult({
341
- popup,
342
- expectedOrigin: IDP_ORIGIN,
343
- expectedState: STATE,
344
- redirectUri: REDIRECT_URI,
345
- });
346
-
347
- jest.advanceTimersByTime(1000);
348
-
349
- await expect(promise).resolves.toEqual({ kind: 'code', code: 'auth-code', state: STATE });
350
- expectFullCleanup();
351
- });
352
326
  });
@@ -102,60 +102,58 @@ export async function startWebOAuthSignIn(
102
102
  return startRedirectSignIn(context, options, 'popup-blocked');
103
103
  }
104
104
 
105
- try {
106
- const prepared = await prepareAuthorizeRequest({
107
- clientId: context.clientId,
108
- redirectUri: options.redirectUri,
109
- authorizeBaseUrl: context.authorizeBaseUrl,
110
- scope: options.scope,
111
- responseMode: 'web_message',
112
- });
105
+ const prepared = await prepareAuthorizeRequest({
106
+ clientId: context.clientId,
107
+ redirectUri: options.redirectUri,
108
+ authorizeBaseUrl: context.authorizeBaseUrl,
109
+ scope: options.scope,
110
+ responseMode: 'web_message',
111
+ });
113
112
 
114
- if (!navigateOAuthPopup(popup, prepared.authorizeUrl)) {
115
- return startRedirectSignIn(context, options, 'popup-navigation-failed');
116
- }
113
+ if (!navigateOAuthPopup(popup, prepared.authorizeUrl)) {
114
+ closeOAuthPopup(popup);
115
+ return startRedirectSignIn(context, options, 'popup-navigation-failed');
116
+ }
117
117
 
118
- const outcome = await awaitOAuthPopupResult({
119
- popup,
120
- expectedOrigin: prepared.authorizeOrigin,
121
- expectedState: prepared.handshake.state,
122
- redirectUri: options.redirectUri,
123
- ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
124
- });
118
+ const outcome = await awaitOAuthPopupResult({
119
+ popup,
120
+ expectedOrigin: prepared.authorizeOrigin,
121
+ expectedState: prepared.handshake.state,
122
+ ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
123
+ });
124
+ // The IdP closes itself after delivering; this covers every other outcome
125
+ // (timeout, mismatch, an error the IdP reported before closing).
126
+ closeOAuthPopup(popup);
125
127
 
126
- switch (outcome.kind) {
127
- case 'code': {
128
- const completion = await completeOAuthCode({
129
- oxyServices: context.oxyServices,
130
- clientId: context.clientId,
131
- code: outcome.code,
132
- returnedState: outcome.state,
133
- handshake: prepared.handshake,
134
- redirectUri: options.redirectUri,
135
- commitSession: context.commitSession,
136
- });
137
- return completion.ok
138
- ? { status: 'signed-in' }
139
- : { status: 'failed', reason: completion.reason };
140
- }
141
- case 'oauth-error':
142
- return {
143
- status: 'failed',
144
- reason: 'idp-error',
145
- description: outcome.errorDescription ?? outcome.error,
146
- };
147
- case 'state-mismatch':
148
- return { status: 'failed', reason: 'state-mismatch' };
149
- case 'closed':
150
- return { status: 'cancelled' };
151
- case 'timed-out':
152
- return { status: 'timed-out' };
153
- case 'unsupported':
154
- return { status: 'unsupported', reason: 'no-browser' };
128
+ switch (outcome.kind) {
129
+ case 'code': {
130
+ const completion = await completeOAuthCode({
131
+ oxyServices: context.oxyServices,
132
+ clientId: context.clientId,
133
+ code: outcome.code,
134
+ returnedState: outcome.state,
135
+ handshake: prepared.handshake,
136
+ redirectUri: options.redirectUri,
137
+ commitSession: context.commitSession,
138
+ });
139
+ return completion.ok
140
+ ? { status: 'signed-in' }
141
+ : { status: 'failed', reason: completion.reason };
155
142
  }
156
- } finally {
157
- // Covers throws after open (prepare/exchange/commit) and every settled outcome.
158
- closeOAuthPopup(popup);
143
+ case 'oauth-error':
144
+ return {
145
+ status: 'failed',
146
+ reason: 'idp-error',
147
+ description: outcome.errorDescription ?? outcome.error,
148
+ };
149
+ case 'state-mismatch':
150
+ return { status: 'failed', reason: 'state-mismatch' };
151
+ case 'closed':
152
+ return { status: 'cancelled' };
153
+ case 'timed-out':
154
+ return { status: 'timed-out' };
155
+ case 'unsupported':
156
+ return { status: 'unsupported', reason: 'no-browser' };
159
157
  }
160
158
  }
161
159
 
@@ -180,11 +178,7 @@ async function startRedirectSignIn(
180
178
  scope: options.scope,
181
179
  });
182
180
 
183
- if (!persistOAuthHandshake(
184
- prepared.handshake.state,
185
- prepared.handshake.codeVerifier,
186
- options.redirectUri,
187
- )) {
181
+ if (!persistOAuthHandshake(prepared.handshake.state, prepared.handshake.codeVerifier)) {
188
182
  return { status: 'failed', reason: 'handshake-storage' };
189
183
  }
190
184
 
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The legacy, redirect-mode-only lanes that navigate the RP's TOP-LEVEL window
3
+ * to the IdP without a user gesture.
4
+ *
5
+ * `webAuthMode: 'popup'` exists to guarantee exactly one thing: the relying
6
+ * party never leaves its route. Two mechanics in this SDK break that guarantee,
7
+ * because each replaces the whole document on its own initiative:
8
+ *
9
+ * 1. **Cold-boot silent restore** — a full-page `prompt=none` authorize bounce
10
+ * to `auth.oxy.so` when the device-secret mint finds no local session
11
+ * (`maybeStartSilentOAuthRestore`, called from `runProviderColdBoot`).
12
+ * 2. **Post-sign-in hub sync** — a full-page hop to `auth.oxy.so/sync` that
13
+ * plants this device's credential on the IdP hub so OTHER origins can later
14
+ * run lane 1 (`syncHubAfterSignIn`, called from the `commitSession` funnel).
15
+ *
16
+ * Both belong to the redirect transport and are kept only for the migration
17
+ * window (issue #691, "Cold boot and cross-domain behavior"). In popup mode a
18
+ * domain with no local credential simply resolves SIGNED OUT, and the user's
19
+ * next explicit "Continue with Oxy" opens the popup — from a real user gesture,
20
+ * never automatically.
21
+ *
22
+ * NOT covered here, and correctly enabled in BOTH modes: navigations the user
23
+ * asked for. When the browser blocks the popup, `startWebOAuthSignIn` still
24
+ * falls back to a full-page redirect rather than dead-ending the sign-in, and
25
+ * `tryCompleteOAuthReturn` still consumes a `?code=` that is already on the URL.
26
+ *
27
+ * PHASE 7b: once the pilot flips the default transport to `'popup'`, this
28
+ * predicate and BOTH lanes above are deleted outright. Grepping this symbol
29
+ * finds every site that has to go.
30
+ */
31
+
32
+ import type { WebAuthMode } from './types';
33
+
34
+ /**
35
+ * Whether a provider running `webAuthMode` may perform an SDK-initiated,
36
+ * non-gesture, full-page navigation to the IdP.
37
+ *
38
+ * `true` only for `'redirect'` — still the default and the compatibility path,
39
+ * whose behaviour must stay byte-for-byte unchanged.
40
+ */
41
+ export function allowsAutomaticIdpRedirect(webAuthMode: WebAuthMode): boolean {
42
+ return webAuthMode === 'redirect';
43
+ }
@@ -19,7 +19,7 @@
19
19
  * opaque. The authorization result arrives ONLY as a `postMessage`.
20
20
  */
21
21
 
22
- import { canonicalizeOAuthRedirectUri, logger } from '@oxyhq/core';
22
+ import { logger } from '@oxyhq/core';
23
23
  import { readOAuthPopupMessage } from './oauthPopupMessages';
24
24
  import type { OAuthPopupHandle, OAuthPopupOutcome } from './types';
25
25
 
@@ -119,47 +119,6 @@ export function closeOAuthPopup(popup: OAuthPopupHandle | null): void {
119
119
  }
120
120
  }
121
121
 
122
- /**
123
- * When the IdP falls back to a top-level redirect inside the popup (no usable
124
- * `window.opener`), a same-origin `redirect_uri` is readable from the opener.
125
- * Cross-origin redirects remain opaque and are not handled here.
126
- */
127
- function readSameOriginRedirectOutcome(
128
- popup: OAuthPopupHandle,
129
- redirectUri: string,
130
- expectedState: string,
131
- ): OAuthPopupOutcome | null {
132
- try {
133
- const href = popup.location.href;
134
- if (!href) return null;
135
-
136
- const popupUrl = new URL(href);
137
- const expected = new URL(canonicalizeOAuthRedirectUri(redirectUri));
138
- if (popupUrl.origin !== expected.origin) return null;
139
- if (popupUrl.pathname !== expected.pathname) return null;
140
-
141
- const oauthError = popupUrl.searchParams.get('error');
142
- if (oauthError) {
143
- const errorDescription = popupUrl.searchParams.get('error_description') ?? undefined;
144
- return {
145
- kind: 'oauth-error',
146
- error: oauthError,
147
- ...(errorDescription ? { errorDescription } : {}),
148
- };
149
- }
150
-
151
- const code = popupUrl.searchParams.get('code');
152
- if (!code) return null;
153
-
154
- const state = popupUrl.searchParams.get('state');
155
- if (!state || state !== expectedState) return { kind: 'state-mismatch' };
156
- return { kind: 'code', code, state };
157
- } catch {
158
- // Cross-origin navigation — the popup URL is opaque to the opener.
159
- return null;
160
- }
161
- }
162
-
163
122
  /** Inputs for {@link awaitOAuthPopupResult}. */
164
123
  export interface AwaitOAuthPopupOptions {
165
124
  /** The exact window reference returned by {@link openOAuthPopup}. */
@@ -168,12 +127,6 @@ export interface AwaitOAuthPopupOptions {
168
127
  expectedOrigin: string;
169
128
  /** The CSRF `state` sent on the authorize request. */
170
129
  expectedState: string;
171
- /**
172
- * EXACT registered redirect URI for this attempt. When the IdP cannot
173
- * `postMessage` (no usable opener) it falls back to redirecting the popup;
174
- * if that lands on the same origin, the result is read from the popup URL.
175
- */
176
- redirectUri: string;
177
130
  /** @default DEFAULT_OAUTH_POPUP_TIMEOUT_MS */
178
131
  timeoutMs?: number;
179
132
  }
@@ -192,13 +145,8 @@ export interface AwaitOAuthPopupOptions {
192
145
  export function awaitOAuthPopupResult(
193
146
  options: AwaitOAuthPopupOptions,
194
147
  ): Promise<OAuthPopupOutcome> {
195
- const {
196
- popup,
197
- expectedOrigin,
198
- expectedState,
199
- redirectUri,
200
- timeoutMs = DEFAULT_OAUTH_POPUP_TIMEOUT_MS,
201
- } = options;
148
+ const { popup, expectedOrigin, expectedState, timeoutMs = DEFAULT_OAUTH_POPUP_TIMEOUT_MS } =
149
+ options;
202
150
 
203
151
  const host = messageEventHost();
204
152
  if (!host) return Promise.resolve({ kind: 'unsupported' });
@@ -258,12 +206,6 @@ export function awaitOAuthPopupResult(
258
206
  timeoutTimer = setTimeout(() => settle({ kind: 'timed-out' }), timeoutMs);
259
207
 
260
208
  closePoll = setInterval(() => {
261
- const redirectOutcome = readSameOriginRedirectOutcome(popup, redirectUri, expectedState);
262
- if (redirectOutcome) {
263
- settle(redirectOutcome);
264
- return;
265
- }
266
-
267
209
  if (!popup.closed) return;
268
210
  // Stop sampling immediately: the window is gone and only the in-flight
269
211
  // message (if any) can still change the outcome.
@@ -7,7 +7,7 @@ import {
7
7
  } from 'react-native';
8
8
  import Ionicons from '@expo/vector-icons/Ionicons';
9
9
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
10
- import { toast } from '@oxyhq/bloom/toast';
10
+ import { toast } from '@oxyhq/bloom';
11
11
  import { surfaces } from '@oxyhq/bloom/surfaces';
12
12
  import { useTheme } from '@oxyhq/bloom/theme';
13
13
  import { Text } from '@oxyhq/bloom/typography';
@@ -5,21 +5,21 @@ import {
5
5
  ActivityIndicator,
6
6
  } from 'react-native';
7
7
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
8
- import { toast } from '@oxyhq/bloom/toast';
8
+ import { toast } from '@oxyhq/bloom';
9
9
  import { surfaces } from '@oxyhq/bloom/surfaces';
10
10
  import { useTheme } from '@oxyhq/bloom/theme';
11
11
  import { Text } from '@oxyhq/bloom/typography';
12
12
  import { Button } from '@oxyhq/bloom/button';
13
13
  import { TextField, TextFieldInput } from '@oxyhq/bloom/text-field';
14
14
  import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
15
- import { DISPLAY_NAME_INVALID_MESSAGE, getNormalizedUserHandle, isValidDisplayName, MAX_DISPLAY_NAME_LENGTH, type UpdateAccountInput } from '@oxyhq/core';
15
+ import type { UpdateAccountInput } from '@oxyhq/core';
16
16
  import type { BaseScreenProps } from '../types/navigation';
17
17
  import { SettingsIcon } from '../components/SettingsIcon';
18
18
  import { useOxy } from '../context/OxyContext';
19
19
  import { useI18n } from '../hooks/useI18n';
20
20
  import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
21
21
 
22
- const DISPLAY_NAME_MAX = MAX_DISPLAY_NAME_LENGTH;
22
+ const DISPLAY_NAME_MAX = 50;
23
23
  const BIO_MAX = 160;
24
24
 
25
25
  const errorMessage = (error: unknown, fallback: string): string =>
@@ -62,15 +62,14 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
62
62
  // Editable fields, seeded lazily from the loaded account once.
63
63
  const [seeded, setSeeded] = useState(false);
64
64
  const [displayName, setDisplayName] = useState('');
65
- const [displayNameError, setDisplayNameError] = useState('');
66
65
  const [bio, setBio] = useState('');
67
66
 
68
67
  // Seed the form from the account during render (no useEffect): the first time
69
68
  // the query resolves we capture its values into local edit state.
70
69
  if (node && !seeded) {
71
- setDisplayName(
72
- node.account?.name?.displayName ?? getNormalizedUserHandle(node.account) ?? '',
73
- );
70
+ const first = node.account?.name?.first ?? '';
71
+ const last = node.account?.name?.last ?? '';
72
+ setDisplayName([first, last].filter(Boolean).join(' '));
74
73
  setBio(node.account?.bio ?? '');
75
74
  setSeeded(true);
76
75
  }
@@ -122,27 +121,8 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
122
121
  if (confirmed) archiveMutation.mutate();
123
122
  }, [archiveMutation, t]);
124
123
 
125
- const handleDisplayNameChange = useCallback((value: string) => {
126
- setDisplayName(value);
127
- const trimmed = value.trim();
128
- if (!trimmed) {
129
- setDisplayNameError('');
130
- return;
131
- }
132
- const nameParts = trimmed.split(/\s+/).filter(Boolean);
133
- const first = nameParts[0] || '';
134
- const last = nameParts.length > 1 ? nameParts.slice(1).join(' ') : '';
135
- const invalidPart = [first, last].find((part) => part && !isValidDisplayName(part));
136
- setDisplayNameError(
137
- invalidPart
138
- ? (t('accounts.settings.displayName.invalidChars') || DISPLAY_NAME_INVALID_MESSAGE)
139
- : '',
140
- );
141
- }, [t]);
142
-
143
124
  const handleSave = useCallback(() => {
144
125
  const trimmed = displayName.trim();
145
- if (!trimmed || displayNameError) return;
146
126
  const nameParts = trimmed.split(/\s+/).filter(Boolean);
147
127
  const first = nameParts[0] || '';
148
128
  const last = nameParts.length > 1 ? nameParts.slice(1).join(' ') : undefined;
@@ -150,7 +130,7 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
150
130
  name: { first, last },
151
131
  bio: bio.trim() ? bio.trim() : null,
152
132
  });
153
- }, [displayName, displayNameError, bio, updateMutation]);
133
+ }, [displayName, bio, updateMutation]);
154
134
 
155
135
  const title = t('accounts.settings.title') || 'Account settings';
156
136
 
@@ -191,23 +171,15 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
191
171
  {/* Profile edit */}
192
172
  {canUpdate ? (
193
173
  <View className="gap-space-16 p-space-16 rounded-radius-20 bg-fill">
194
- <View className="gap-space-4">
195
- <TextField isInvalid={Boolean(displayNameError)}>
196
- <TextFieldInput
197
- floatingLabel
198
- label={t('accounts.settings.displayName.label') || 'Display name'}
199
- value={displayName}
200
- onChangeText={handleDisplayNameChange}
201
- isInvalid={Boolean(displayNameError)}
202
- maxLength={DISPLAY_NAME_MAX}
203
- />
204
- </TextField>
205
- {displayNameError ? (
206
- <Text className="text-caption font-caption text-negative px-space-4">
207
- {displayNameError}
208
- </Text>
209
- ) : null}
210
- </View>
174
+ <TextField>
175
+ <TextFieldInput
176
+ floatingLabel
177
+ label={t('accounts.settings.displayName.label') || 'Display name'}
178
+ value={displayName}
179
+ onChangeText={setDisplayName}
180
+ maxLength={DISPLAY_NAME_MAX}
181
+ />
182
+ </TextField>
211
183
  <View className="gap-space-4">
212
184
  <TextField>
213
185
  <TextFieldInput
@@ -228,7 +200,7 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
228
200
  <Button
229
201
  variant="primary"
230
202
  onPress={handleSave}
231
- disabled={updateMutation.isPending || !displayName.trim() || Boolean(displayNameError)}
203
+ disabled={updateMutation.isPending || !displayName.trim()}
232
204
  loading={updateMutation.isPending}
233
205
  accessibilityLabel={t('accounts.settings.save') || 'Save changes'}
234
206
  className="w-full"
@@ -4,7 +4,7 @@ import {
4
4
  StyleSheet,
5
5
  } from 'react-native';
6
6
  import type { BaseScreenProps } from '../types/navigation';
7
- import { toast } from '@oxyhq/bloom/toast';
7
+ import { toast } from '@oxyhq/bloom';
8
8
  import { surfaces } from '@oxyhq/bloom/surfaces';
9
9
  import { useTheme } from '@oxyhq/bloom/theme';
10
10
  import { H4, Text } from '@oxyhq/bloom/typography';
@@ -9,7 +9,7 @@ import {
9
9
  } from 'react-native';
10
10
  import type { BaseScreenProps } from '../types/navigation';
11
11
  import { packageInfo } from '@oxyhq/core';
12
- import { toast } from '@oxyhq/bloom/toast';
12
+ import { toast } from '@oxyhq/bloom';
13
13
  import OxyServicesLogo from '../../assets/icons/OxyServices';
14
14
  import { SettingsIcon } from '../components/SettingsIcon';
15
15
  import { useTheme } from '@oxyhq/bloom/theme';
@@ -55,7 +55,7 @@ import { useOxy } from '../context/OxyContext';
55
55
  import { useI18n } from '../hooks/useI18n';
56
56
  import { useReduceMotion } from '../hooks/useReduceMotion';
57
57
  import { useSurfaceHeader, type SurfaceHeaderContent } from '../hooks/useSurfaceHeader';
58
- import { toast } from '@oxyhq/bloom/toast';
58
+ import { toast } from '@oxyhq/bloom';
59
59
  import type { BaseScreenProps } from '../types/navigation';
60
60
 
61
61
  /** Component name used in `logger` context for filtered diagnostics. */
@@ -39,8 +39,8 @@ import {
39
39
  } from '@oxyhq/bloom/admonition';
40
40
  import { surfaces as bloomSurfaces } from '@oxyhq/bloom/surfaces';
41
41
  import { useTheme } from '@oxyhq/bloom/theme';
42
- import { toast } from '@oxyhq/bloom/toast';
43
- import { getNormalizedUserHandle, logger } from '@oxyhq/core';
42
+ import { toast } from '@oxyhq/bloom';
43
+ import { getAccountDisplayName, logger } from '@oxyhq/core';
44
44
  import type { FileMetadata } from '@oxyhq/core';
45
45
  import { useOxy } from '../context/OxyContext';
46
46
  import { useI18n } from '../hooks/useI18n';
@@ -133,7 +133,7 @@ async function loadImagePicker(): Promise<ImagePickerModule | null> {
133
133
 
134
134
  const ChangeAvatarScreen: React.FC<BaseScreenProps> = ({ navigate, dismiss }) => {
135
135
  const bloomTheme = useTheme();
136
- const { t } = useI18n();
136
+ const { t, locale } = useI18n();
137
137
  const { user, oxyServices } = useOxy();
138
138
 
139
139
  /** Set when a permission was refused — drives the inline denied notice. */
@@ -143,10 +143,7 @@ const ChangeAvatarScreen: React.FC<BaseScreenProps> = ({ navigate, dismiss }) =>
143
143
 
144
144
  useSurfaceHeader(useMemo(() => ({ title: t('changeAvatar.title') }), [t]));
145
145
 
146
- const displayName = useMemo(
147
- () => user?.name?.displayName ?? getNormalizedUserHandle(user) ?? '',
148
- [user],
149
- );
146
+ const displayName = useMemo(() => getAccountDisplayName(user, locale), [user, locale]);
150
147
  const avatarUri = useMemo(
151
148
  // `thumb` is 256x256 — exactly a 2x source for the 132dp hero.
152
149
  () => (user?.avatar ? oxyServices.getFileDownloadUrl(user.avatar, 'thumb') : undefined),
@@ -1,6 +1,6 @@
1
1
  import React, { useCallback, useState } from 'react';
2
2
  import { ActivityIndicator, FlatList, RefreshControl, StyleSheet, View } from 'react-native';
3
- import { toast } from '@oxyhq/bloom/toast';
3
+ import { toast } from '@oxyhq/bloom';
4
4
  import { surfaces } from '@oxyhq/bloom/surfaces';
5
5
  import { useTheme } from '@oxyhq/bloom/theme';
6
6
  import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
@@ -108,7 +108,7 @@ const ConnectedAppsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack }) =>
108
108
  </Text>
109
109
  </View>
110
110
  ),
111
- [t],
111
+ [t, bloomTheme.colors.textSecondary],
112
112
  );
113
113
 
114
114
  const renderItem = useCallback(