@oxyhq/services 25.0.1 → 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 (570) 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/ProfileButton.js +1 -1
  19. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  20. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +30 -25
  21. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  22. package/lib/commonjs/ui/components/authChooser/primitives.js +9 -9
  23. package/lib/commonjs/ui/components/authChooser/primitives.js.map +1 -1
  24. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js +2 -2
  25. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js.map +1 -1
  26. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +2 -2
  27. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  28. package/lib/commonjs/ui/components/internal/PinInput.js +1 -3
  29. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
  30. package/lib/commonjs/ui/components/logo/LogoText.js +4 -4
  31. package/lib/commonjs/ui/components/logo/LogoText.js.map +1 -1
  32. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +2 -2
  33. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  34. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +2 -2
  35. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  36. package/lib/commonjs/ui/components/styles/shadow.js.map +1 -1
  37. package/lib/commonjs/ui/context/OxyContext.js +46 -32
  38. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  39. package/lib/commonjs/ui/context/commitSessionFlow.js +43 -3
  40. package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
  41. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +2 -15
  42. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  43. package/lib/commonjs/ui/context/useOxyAccountGraph.js +4 -3
  44. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
  45. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +5 -5
  46. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
  47. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +11 -11
  48. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  49. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +9 -9
  50. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  51. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js +2 -3
  52. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  53. package/lib/commonjs/ui/hooks/queries/userCache.js +17 -17
  54. package/lib/commonjs/ui/hooks/queries/userCache.js.map +1 -1
  55. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
  56. package/lib/commonjs/ui/hooks/useAsyncAction.js +7 -7
  57. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
  58. package/lib/commonjs/ui/hooks/useAuth.js +2 -4
  59. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  60. package/lib/commonjs/ui/hooks/useAvatarPicker.js +5 -5
  61. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
  62. package/lib/commonjs/ui/hooks/useOnlineStatus.js +2 -3
  63. package/lib/commonjs/ui/hooks/useOnlineStatus.js.map +1 -1
  64. package/lib/commonjs/ui/hooks/useSessionManagement.js +2 -0
  65. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  66. package/lib/commonjs/ui/hooks/useSettingToggle.js +4 -4
  67. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
  68. package/lib/commonjs/ui/hooks/useSurfaceHeader.js +11 -68
  69. package/lib/commonjs/ui/hooks/useSurfaceHeader.js.map +1 -1
  70. package/lib/commonjs/ui/oauth/browserAuthTransport.js +64 -66
  71. package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -1
  72. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js +48 -0
  73. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js.map +1 -0
  74. package/lib/commonjs/ui/oauth/oauthPopup.js +0 -47
  75. package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -1
  76. package/lib/commonjs/ui/screens/AccountMembersScreen.js +10 -10
  77. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +8 -7
  79. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +4 -4
  81. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/AppInfoScreen.js +9 -9
  83. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/AvatarCropScreen.js +3 -3
  85. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js +7 -6
  87. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
  88. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +4 -4
  89. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  90. package/lib/commonjs/ui/screens/CreateAccountScreen.js +3 -3
  91. package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
  92. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +3 -3
  93. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  94. package/lib/commonjs/ui/screens/EditProfileScreen.js +3 -2
  95. package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
  96. package/lib/commonjs/ui/screens/FAQScreen.js +2 -2
  97. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  98. package/lib/commonjs/ui/screens/FeedbackScreen.js +89 -90
  99. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  100. package/lib/commonjs/ui/screens/FileManagementScreen.js +20 -20
  101. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/FollowersListScreen.js.map +1 -1
  103. package/lib/commonjs/ui/screens/FollowingListScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/HelpSupportScreen.js +7 -7
  105. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  106. package/lib/commonjs/ui/screens/HistoryViewScreen.js +34 -9
  107. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  108. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +3 -3
  109. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  110. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +3 -3
  111. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  112. package/lib/commonjs/ui/screens/ManageAccountScreen.js +15 -15
  113. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  114. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +19 -19
  115. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  116. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +15 -15
  117. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  118. package/lib/commonjs/ui/screens/ProfileScreen.js +7 -17
  119. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  120. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +2 -2
  121. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  122. package/lib/commonjs/ui/screens/UserListScreen.js +7 -13
  123. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  124. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +6 -5
  125. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  126. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +4 -1
  127. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  128. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js +24 -34
  129. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  130. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +1 -1
  131. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  132. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +4 -3
  133. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  134. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +1 -1
  135. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  136. package/lib/commonjs/ui/session/index.js +0 -7
  137. package/lib/commonjs/ui/session/index.js.map +1 -1
  138. package/lib/commonjs/ui/utils/crossOriginRestore.js +140 -0
  139. package/lib/commonjs/ui/utils/crossOriginRestore.js.map +1 -0
  140. package/lib/commonjs/ui/utils/fileManagement.js +24 -24
  141. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  142. package/lib/commonjs/ui/utils/oauthReturn.js +30 -19
  143. package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -1
  144. package/lib/commonjs/ui/utils/userUtils.js +28 -27
  145. package/lib/commonjs/ui/utils/userUtils.js.map +1 -1
  146. package/lib/module/index.js +8 -20
  147. package/lib/module/index.js.map +1 -1
  148. package/lib/module/notifications/deviceNotifications.js +0 -62
  149. package/lib/module/notifications/deviceNotifications.js.map +1 -1
  150. package/lib/module/ui/boot/runProviderColdBoot.js +65 -21
  151. package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
  152. package/lib/module/ui/components/FollowButton.js +1 -1
  153. package/lib/module/ui/components/FollowButton.js.map +1 -1
  154. package/lib/module/ui/components/OxyAccountDialogScreen.js +1 -13
  155. package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
  156. package/lib/module/ui/components/OxyAuthChooser.js +4 -5
  157. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  158. package/lib/module/ui/components/OxyProvider.js +6 -7
  159. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  160. package/lib/module/ui/components/ProfileButton.js +2 -2
  161. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  162. package/lib/module/ui/components/authChooser/AccountsMenuView.js +8 -3
  163. package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  164. package/lib/module/ui/components/authChooser/primitives.js +1 -1
  165. package/lib/module/ui/components/authChooser/primitives.js.map +1 -1
  166. package/lib/module/ui/components/authChooser/useUsernameAvailability.js +1 -1
  167. package/lib/module/ui/components/authChooser/useUsernameAvailability.js.map +1 -1
  168. package/lib/module/ui/components/fileManagement/UploadPreview.js +1 -1
  169. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  170. package/lib/module/ui/components/internal/PinInput.js +1 -3
  171. package/lib/module/ui/components/internal/PinInput.js.map +1 -1
  172. package/lib/module/ui/components/logo/LogoText.js +4 -4
  173. package/lib/module/ui/components/logo/LogoText.js.map +1 -1
  174. package/lib/module/ui/components/payment/PaymentDetailsStep.js +1 -1
  175. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  176. package/lib/module/ui/components/payment/PaymentSummaryStep.js +2 -2
  177. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  178. package/lib/module/ui/components/styles/shadow.js.map +1 -1
  179. package/lib/module/ui/context/OxyContext.js +49 -35
  180. package/lib/module/ui/context/OxyContext.js.map +1 -1
  181. package/lib/module/ui/context/commitSessionFlow.js +42 -3
  182. package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
  183. package/lib/module/ui/context/hooks/useAuthOperations.js +2 -15
  184. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  185. package/lib/module/ui/context/useOxyAccountGraph.js +4 -3
  186. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
  187. package/lib/module/ui/hooks/mutations/mutationFactory.js +1 -1
  188. package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
  189. package/lib/module/ui/hooks/mutations/useAccountMutations.js +1 -1
  190. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  191. package/lib/module/ui/hooks/mutations/useServicesMutations.js +1 -1
  192. package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  193. package/lib/module/ui/hooks/queries/usePaymentQueries.js +2 -3
  194. package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  195. package/lib/module/ui/hooks/queries/userCache.js +17 -17
  196. package/lib/module/ui/hooks/queries/userCache.js.map +1 -1
  197. package/lib/module/ui/hooks/useAssets.js.map +1 -1
  198. package/lib/module/ui/hooks/useAsyncAction.js +1 -1
  199. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
  200. package/lib/module/ui/hooks/useAuth.js +2 -4
  201. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  202. package/lib/module/ui/hooks/useAvatarPicker.js +1 -1
  203. package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
  204. package/lib/module/ui/hooks/useOnlineStatus.js +2 -3
  205. package/lib/module/ui/hooks/useOnlineStatus.js.map +1 -1
  206. package/lib/module/ui/hooks/useSessionManagement.js +2 -0
  207. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  208. package/lib/module/ui/hooks/useSettingToggle.js +1 -1
  209. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
  210. package/lib/module/ui/hooks/useSurfaceHeader.js +11 -68
  211. package/lib/module/ui/hooks/useSurfaceHeader.js.map +1 -1
  212. package/lib/module/ui/oauth/browserAuthTransport.js +64 -66
  213. package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -1
  214. package/lib/module/ui/oauth/legacyRedirectLanes.js +44 -0
  215. package/lib/module/ui/oauth/legacyRedirectLanes.js.map +1 -0
  216. package/lib/module/ui/oauth/oauthPopup.js +1 -48
  217. package/lib/module/ui/oauth/oauthPopup.js.map +1 -1
  218. package/lib/module/ui/screens/AccountMembersScreen.js +1 -1
  219. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  220. package/lib/module/ui/screens/AccountSettingsScreen.js +4 -3
  221. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  222. package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
  223. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  224. package/lib/module/ui/screens/AppInfoScreen.js +1 -1
  225. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  226. package/lib/module/ui/screens/AvatarCropScreen.js +1 -1
  227. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  228. package/lib/module/ui/screens/ChangeAvatarScreen.js +5 -4
  229. package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -1
  230. package/lib/module/ui/screens/ConnectedAppsScreen.js +2 -2
  231. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  232. package/lib/module/ui/screens/CreateAccountScreen.js +1 -1
  233. package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
  234. package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
  235. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  236. package/lib/module/ui/screens/EditProfileScreen.js +4 -3
  237. package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
  238. package/lib/module/ui/screens/FAQScreen.js +1 -1
  239. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  240. package/lib/module/ui/screens/FeedbackScreen.js +91 -94
  241. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  242. package/lib/module/ui/screens/FileManagementScreen.js +1 -1
  243. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  244. package/lib/module/ui/screens/FollowersListScreen.js.map +1 -1
  245. package/lib/module/ui/screens/FollowingListScreen.js.map +1 -1
  246. package/lib/module/ui/screens/HelpSupportScreen.js +1 -1
  247. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  248. package/lib/module/ui/screens/HistoryViewScreen.js +30 -5
  249. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  250. package/lib/module/ui/screens/LanguageSelectorScreen.js +1 -1
  251. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  252. package/lib/module/ui/screens/LegalDocumentsScreen.js +1 -1
  253. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  254. package/lib/module/ui/screens/ManageAccountScreen.js +3 -3
  255. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  256. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +4 -4
  257. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  258. package/lib/module/ui/screens/PrivacySettingsScreen.js +11 -11
  259. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  260. package/lib/module/ui/screens/ProfileScreen.js +8 -18
  261. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  262. package/lib/module/ui/screens/SavesCollectionsScreen.js +1 -1
  263. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  264. package/lib/module/ui/screens/UserListScreen.js +8 -14
  265. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  266. package/lib/module/ui/screens/WelcomeNewUserScreen.js +6 -5
  267. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  268. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +4 -1
  269. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  270. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js +5 -15
  271. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  272. package/lib/module/ui/screens/trust/TrustCenterScreen.js +1 -1
  273. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  274. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +5 -4
  275. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  276. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +1 -1
  277. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  278. package/lib/module/ui/session/index.js +0 -1
  279. package/lib/module/ui/session/index.js.map +1 -1
  280. package/lib/module/ui/utils/crossOriginRestore.js +131 -0
  281. package/lib/module/ui/utils/crossOriginRestore.js.map +1 -0
  282. package/lib/module/ui/utils/fileManagement.js +25 -25
  283. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  284. package/lib/module/ui/utils/oauthReturn.js +30 -20
  285. package/lib/module/ui/utils/oauthReturn.js.map +1 -1
  286. package/lib/module/ui/utils/userUtils.js +28 -27
  287. package/lib/module/ui/utils/userUtils.js.map +1 -1
  288. package/lib/typescript/commonjs/index.d.ts +2 -0
  289. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  290. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts +0 -51
  291. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +30 -11
  293. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  294. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  295. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +0 -7
  296. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  297. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  298. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  300. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts +1 -1
  301. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts +1 -1
  303. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/ui/components/internal/PinInput.d.ts.map +1 -1
  305. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +6 -6
  306. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  307. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  308. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts +40 -0
  309. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts +2 -11
  311. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +7 -26
  313. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +1 -0
  315. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  316. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/ui/hooks/queries/paymentTypes.d.ts +2 -3
  318. package/lib/typescript/commonjs/ui/hooks/queries/paymentTypes.d.ts.map +1 -1
  319. package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts +2 -3
  320. package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
  321. package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts +2 -2
  322. package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts.map +1 -1
  323. package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts +1 -1
  324. package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts.map +1 -1
  325. package/lib/typescript/commonjs/ui/hooks/useAsyncAction.d.ts +2 -2
  326. package/lib/typescript/commonjs/ui/hooks/useAsyncAction.d.ts.map +1 -1
  327. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +2 -4
  328. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  329. package/lib/typescript/commonjs/ui/hooks/useOnlineStatus.d.ts +2 -3
  330. package/lib/typescript/commonjs/ui/hooks/useOnlineStatus.d.ts.map +1 -1
  331. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  332. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts +2 -7
  333. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts.map +1 -1
  334. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  335. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  336. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  337. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts +0 -6
  338. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -1
  339. package/lib/typescript/commonjs/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  340. package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
  341. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts +2 -2
  342. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  343. package/lib/typescript/commonjs/ui/screens/FollowersListScreen.d.ts +0 -3
  344. package/lib/typescript/commonjs/ui/screens/FollowersListScreen.d.ts.map +1 -1
  345. package/lib/typescript/commonjs/ui/screens/FollowingListScreen.d.ts +0 -3
  346. package/lib/typescript/commonjs/ui/screens/FollowingListScreen.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  348. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  349. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  350. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  351. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts +0 -7
  352. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  353. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  354. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  355. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  356. package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts +1 -1
  357. package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts.map +1 -1
  358. package/lib/typescript/commonjs/ui/session/index.d.ts +0 -1
  359. package/lib/typescript/commonjs/ui/session/index.d.ts.map +1 -1
  360. package/lib/typescript/commonjs/ui/types/navigation.d.ts +19 -27
  361. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  362. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts +43 -0
  363. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts.map +1 -0
  364. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +5 -5
  365. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  366. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +12 -15
  367. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -1
  368. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts +14 -7
  369. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts.map +1 -1
  370. package/lib/typescript/module/index.d.ts +2 -0
  371. package/lib/typescript/module/index.d.ts.map +1 -1
  372. package/lib/typescript/module/notifications/deviceNotifications.d.ts +0 -51
  373. package/lib/typescript/module/notifications/deviceNotifications.d.ts.map +1 -1
  374. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +30 -11
  375. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  376. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  377. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +0 -7
  378. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  379. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  380. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  381. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  382. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts +1 -1
  383. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts.map +1 -1
  384. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts +1 -1
  385. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  386. package/lib/typescript/module/ui/components/internal/PinInput.d.ts.map +1 -1
  387. package/lib/typescript/module/ui/components/payment/types.d.ts +6 -6
  388. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  389. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  390. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts +40 -0
  391. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
  392. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts +2 -11
  393. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  394. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +7 -26
  395. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  396. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +1 -0
  397. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  398. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  399. package/lib/typescript/module/ui/hooks/queries/paymentTypes.d.ts +2 -3
  400. package/lib/typescript/module/ui/hooks/queries/paymentTypes.d.ts.map +1 -1
  401. package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts +2 -3
  402. package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
  403. package/lib/typescript/module/ui/hooks/queries/userCache.d.ts +2 -2
  404. package/lib/typescript/module/ui/hooks/queries/userCache.d.ts.map +1 -1
  405. package/lib/typescript/module/ui/hooks/useAssets.d.ts +1 -1
  406. package/lib/typescript/module/ui/hooks/useAssets.d.ts.map +1 -1
  407. package/lib/typescript/module/ui/hooks/useAsyncAction.d.ts +2 -2
  408. package/lib/typescript/module/ui/hooks/useAsyncAction.d.ts.map +1 -1
  409. package/lib/typescript/module/ui/hooks/useAuth.d.ts +2 -4
  410. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  411. package/lib/typescript/module/ui/hooks/useOnlineStatus.d.ts +2 -3
  412. package/lib/typescript/module/ui/hooks/useOnlineStatus.d.ts.map +1 -1
  413. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  414. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts +2 -7
  415. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts.map +1 -1
  416. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  417. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  418. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  419. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts +0 -6
  420. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -1
  421. package/lib/typescript/module/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  422. package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -1
  423. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts +2 -2
  424. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  425. package/lib/typescript/module/ui/screens/FollowersListScreen.d.ts +0 -3
  426. package/lib/typescript/module/ui/screens/FollowersListScreen.d.ts.map +1 -1
  427. package/lib/typescript/module/ui/screens/FollowingListScreen.d.ts +0 -3
  428. package/lib/typescript/module/ui/screens/FollowingListScreen.d.ts.map +1 -1
  429. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  430. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  431. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  432. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  433. package/lib/typescript/module/ui/screens/UserListScreen.d.ts +0 -7
  434. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  435. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  436. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  437. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  438. package/lib/typescript/module/ui/screens/trust/trustTier.d.ts +1 -1
  439. package/lib/typescript/module/ui/screens/trust/trustTier.d.ts.map +1 -1
  440. package/lib/typescript/module/ui/session/index.d.ts +0 -1
  441. package/lib/typescript/module/ui/session/index.d.ts.map +1 -1
  442. package/lib/typescript/module/ui/types/navigation.d.ts +19 -27
  443. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  444. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts +43 -0
  445. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts.map +1 -0
  446. package/lib/typescript/module/ui/utils/fileManagement.d.ts +5 -5
  447. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  448. package/lib/typescript/module/ui/utils/oauthReturn.d.ts +12 -15
  449. package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -1
  450. package/lib/typescript/module/ui/utils/userUtils.d.ts +14 -7
  451. package/lib/typescript/module/ui/utils/userUtils.d.ts.map +1 -1
  452. package/package.json +10 -22
  453. package/src/index.ts +16 -18
  454. package/src/notifications/deviceNotifications.ts +0 -82
  455. package/src/ui/boot/__tests__/coldBootWebAuthMode.test.ts +281 -0
  456. package/src/ui/boot/runProviderColdBoot.ts +101 -24
  457. package/src/ui/components/FollowButton.tsx +1 -1
  458. package/src/ui/components/OxyAccountDialogScreen.tsx +1 -13
  459. package/src/ui/components/OxyAuthChooser.tsx +4 -14
  460. package/src/ui/components/OxyProvider.tsx +7 -8
  461. package/src/ui/components/ProfileButton.tsx +2 -5
  462. package/src/ui/components/authChooser/AccountsMenuView.tsx +10 -5
  463. package/src/ui/components/authChooser/primitives.tsx +1 -1
  464. package/src/ui/components/authChooser/useUsernameAvailability.ts +1 -1
  465. package/src/ui/components/fileManagement/UploadPreview.tsx +1 -1
  466. package/src/ui/components/internal/PinInput.tsx +0 -1
  467. package/src/ui/components/logo/LogoText.tsx +4 -4
  468. package/src/ui/components/payment/PaymentDetailsStep.tsx +1 -1
  469. package/src/ui/components/payment/PaymentSummaryStep.tsx +2 -2
  470. package/src/ui/components/payment/types.ts +24 -24
  471. package/src/ui/components/styles/shadow.tsx +2 -2
  472. package/src/ui/context/OxyContext.tsx +46 -35
  473. package/src/ui/context/__tests__/commitSessionFlow.test.ts +89 -13
  474. package/src/ui/context/commitSessionFlow.ts +61 -3
  475. package/src/ui/context/hooks/useAuthOperations.ts +1 -26
  476. package/src/ui/context/oxyContextTypes.ts +7 -26
  477. package/src/ui/context/useOxyAccountGraph.ts +4 -4
  478. package/src/ui/hooks/mutations/mutationFactory.ts +1 -1
  479. package/src/ui/hooks/mutations/useAccountMutations.ts +1 -1
  480. package/src/ui/hooks/mutations/useServicesMutations.ts +1 -1
  481. package/src/ui/hooks/queries/paymentTypes.ts +2 -3
  482. package/src/ui/hooks/queries/usePaymentQueries.ts +2 -3
  483. package/src/ui/hooks/queries/userCache.ts +148 -169
  484. package/src/ui/hooks/useAssets.ts +1 -1
  485. package/src/ui/hooks/useAsyncAction.ts +3 -3
  486. package/src/ui/hooks/useAuth.ts +2 -4
  487. package/src/ui/hooks/useAvatarPicker.ts +1 -1
  488. package/src/ui/hooks/useOnlineStatus.ts +2 -3
  489. package/src/ui/hooks/useSessionManagement.ts +2 -0
  490. package/src/ui/hooks/useSettingToggle.ts +1 -1
  491. package/src/ui/hooks/useSurfaceHeader.ts +15 -90
  492. package/src/ui/oauth/__tests__/oauthPopup.test.ts +0 -26
  493. package/src/ui/oauth/browserAuthTransport.ts +49 -55
  494. package/src/ui/oauth/legacyRedirectLanes.ts +43 -0
  495. package/src/ui/oauth/oauthPopup.ts +3 -61
  496. package/src/ui/screens/AccountMembersScreen.tsx +1 -1
  497. package/src/ui/screens/AccountSettingsScreen.tsx +5 -5
  498. package/src/ui/screens/AccountVerificationScreen.tsx +1 -1
  499. package/src/ui/screens/AppInfoScreen.tsx +1 -1
  500. package/src/ui/screens/AvatarCropScreen.tsx +1 -1
  501. package/src/ui/screens/ChangeAvatarScreen.tsx +4 -7
  502. package/src/ui/screens/ConnectedAppsScreen.tsx +2 -2
  503. package/src/ui/screens/CreateAccountScreen.tsx +1 -1
  504. package/src/ui/screens/EditProfileFieldScreen.tsx +1 -1
  505. package/src/ui/screens/EditProfileScreen.tsx +3 -6
  506. package/src/ui/screens/FAQScreen.tsx +1 -1
  507. package/src/ui/screens/FeedbackScreen.tsx +575 -741
  508. package/src/ui/screens/FileManagementScreen.tsx +1 -1
  509. package/src/ui/screens/FollowersListScreen.tsx +0 -3
  510. package/src/ui/screens/FollowingListScreen.tsx +0 -3
  511. package/src/ui/screens/HelpSupportScreen.tsx +1 -1
  512. package/src/ui/screens/HistoryViewScreen.tsx +20 -5
  513. package/src/ui/screens/LanguageSelectorScreen.tsx +1 -1
  514. package/src/ui/screens/LegalDocumentsScreen.tsx +1 -1
  515. package/src/ui/screens/ManageAccountScreen.tsx +2 -9
  516. package/src/ui/screens/PremiumSubscriptionScreen.tsx +4 -4
  517. package/src/ui/screens/PrivacySettingsScreen.tsx +12 -15
  518. package/src/ui/screens/ProfileScreen.tsx +6 -24
  519. package/src/ui/screens/SavesCollectionsScreen.tsx +1 -1
  520. package/src/ui/screens/UserListScreen.tsx +8 -18
  521. package/src/ui/screens/WelcomeNewUserScreen.tsx +6 -6
  522. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +1 -1
  523. package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +5 -14
  524. package/src/ui/screens/trust/TrustCenterScreen.tsx +2 -2
  525. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +5 -6
  526. package/src/ui/screens/trust/TrustRewardsScreen.tsx +1 -1
  527. package/src/ui/screens/trust/TrustRulesScreen.tsx +1 -1
  528. package/src/ui/screens/trust/trustTier.ts +1 -1
  529. package/src/ui/session/index.ts +0 -1
  530. package/src/ui/types/navigation.ts +19 -27
  531. package/src/ui/utils/__tests__/crossOriginRestore.test.ts +143 -0
  532. package/src/ui/utils/crossOriginRestore.ts +169 -0
  533. package/src/ui/utils/fileManagement.ts +92 -108
  534. package/src/ui/utils/oauthReturn.ts +33 -23
  535. package/src/ui/utils/userUtils.ts +32 -27
  536. package/android/src/main/java/so/oxy/session/OxyBackgroundSession.kt +0 -184
  537. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionApi.kt +0 -162
  538. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionModule.kt +0 -116
  539. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionStore.kt +0 -179
  540. package/android/src/main/java/so/oxy/session/OxyBackgroundToken.kt +0 -61
  541. package/android/src/main/java/so/oxy/storage/OxyEncryptedPrefs.kt +0 -241
  542. package/lib/commonjs/ui/session/backgroundSession.js +0 -258
  543. package/lib/commonjs/ui/session/backgroundSession.js.map +0 -1
  544. package/lib/commonjs/ui/session/useBackgroundSessionSync.js +0 -81
  545. package/lib/commonjs/ui/session/useBackgroundSessionSync.js.map +0 -1
  546. package/lib/commonjs/ui/utils/netConnectivity.js +0 -28
  547. package/lib/commonjs/ui/utils/netConnectivity.js.map +0 -1
  548. package/lib/module/ui/session/backgroundSession.js +0 -252
  549. package/lib/module/ui/session/backgroundSession.js.map +0 -1
  550. package/lib/module/ui/session/useBackgroundSessionSync.js +0 -76
  551. package/lib/module/ui/session/useBackgroundSessionSync.js.map +0 -1
  552. package/lib/module/ui/utils/netConnectivity.js +0 -23
  553. package/lib/module/ui/utils/netConnectivity.js.map +0 -1
  554. package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts +0 -42
  555. package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts.map +0 -1
  556. package/lib/typescript/commonjs/ui/session/useBackgroundSessionSync.d.ts +0 -23
  557. package/lib/typescript/commonjs/ui/session/useBackgroundSessionSync.d.ts.map +0 -1
  558. package/lib/typescript/commonjs/ui/utils/netConnectivity.d.ts +0 -17
  559. package/lib/typescript/commonjs/ui/utils/netConnectivity.d.ts.map +0 -1
  560. package/lib/typescript/module/ui/session/backgroundSession.d.ts +0 -42
  561. package/lib/typescript/module/ui/session/backgroundSession.d.ts.map +0 -1
  562. package/lib/typescript/module/ui/session/useBackgroundSessionSync.d.ts +0 -23
  563. package/lib/typescript/module/ui/session/useBackgroundSessionSync.d.ts.map +0 -1
  564. package/lib/typescript/module/ui/utils/netConnectivity.d.ts +0 -17
  565. package/lib/typescript/module/ui/utils/netConnectivity.d.ts.map +0 -1
  566. package/src/ui/boot/__tests__/coldBootNoIdpRedirect.test.ts +0 -215
  567. package/src/ui/session/__tests__/backgroundSession.test.ts +0 -392
  568. package/src/ui/session/backgroundSession.ts +0 -313
  569. package/src/ui/session/useBackgroundSessionSync.ts +0 -92
  570. package/src/ui/utils/netConnectivity.ts +0 -27
@@ -24,7 +24,7 @@ import { useCallback } from 'react';
24
24
  import type { OxyServices } from '@oxyhq/core';
25
25
  import { translate, updateAvatarVisibility } from '@oxyhq/core';
26
26
  import type { QueryClient } from '@tanstack/react-query';
27
- import { toast } from '@oxyhq/bloom/toast';
27
+ import { toast } from '@oxyhq/bloom';
28
28
  import { updateProfileWithAvatar } from '../utils/avatarUtils';
29
29
  import { openWithinOrPresent } from '../navigation/surfaces';
30
30
  import type { AvatarCropResult } from '../screens/AvatarCropScreen';
@@ -2,9 +2,8 @@
2
2
  * useOnlineStatus
3
3
  *
4
4
  * Reactive boolean reflecting TanStack Query's `onlineManager` state.
5
- * Mirrors browser `online`/`offline` events on web and NetInfo reachability
6
- * updates on native (both wired up in `OxyProvider`, aligned with Bloom's
7
- * `ConnectionStatusToasts` semantics).
5
+ * Mirrors browser `online`/`offline` events on web and NetInfo updates on
6
+ * native (both wired up in `OxyProvider`).
8
7
  *
9
8
  * Use this for surfacing offline UI — an OfflineBanner, a disabled "Sync"
10
9
  * button, an inline "queued" badge on pending writes, etc. For pending /
@@ -9,6 +9,7 @@ import type { OxyServices } from '@oxyhq/core';
9
9
  import type { QueryClient } from '@tanstack/react-query';
10
10
  import { clearQueryCache } from './queryClient';
11
11
  import { isWebBrowser } from '../utils/isWebBrowser';
12
+ import { clearCrossOriginRestoreGuards } from '../utils/crossOriginRestore';
12
13
  import { resetSessionScopedStores } from '../stores/resetSessionScopedStores';
13
14
 
14
15
  export interface UseSessionManagementOptions {
@@ -196,6 +197,7 @@ export const useSessionManagement = ({
196
197
  }
197
198
 
198
199
  await clearSessionStorage();
200
+ clearCrossOriginRestoreGuards();
199
201
  onAuthStateChange?.(null);
200
202
  }, [clearSessionStorage, logoutStore, onAuthStateChange, oxyServices, queryClient, storage, logger]);
201
203
 
@@ -1,5 +1,5 @@
1
1
  import { useState, useCallback, useEffect } from 'react';
2
- import { toast } from '@oxyhq/bloom/toast';
2
+ import { toast } from '@oxyhq/bloom';
3
3
 
4
4
  interface UseSettingToggleOptions {
5
5
  /** Initial value of the setting */
@@ -10,13 +10,8 @@ import type { DialogHeaderConfig } from '@oxyhq/bloom/dialog';
10
10
  * design-system fields Bloom's nav header supports: the single trailing
11
11
  * `primaryAction` CTA (Upload / Save), a trailing icon `actions` row, a header
12
12
  * `search` / `segments` in the large-title zone, an `onImage` `tone` over media,
13
- * and a wizard `progress` bar.
14
- *
15
- * Only the NODE fields (`left`/`right`/`titleContent`, and an action's `icon`)
16
- * must be referentially stable — a node can only be compared by identity, so an
17
- * inline one thrashes the header. The rich OBJECT fields are compared by value
18
- * (see {@link surfaceHeaderContentEqual}), so an inline `primaryAction` /
19
- * `actions` / `search` / `segments` / `progress` is safe to pass.
13
+ * and a wizard `progress` bar. Object/slot fields MUST be referentially stable
14
+ * (memoize them with `useMemo`) so the header does not thrash.
20
15
  */
21
16
  export type SurfaceHeaderContent = Pick<
22
17
  DialogHeaderConfig,
@@ -47,86 +42,16 @@ interface SurfaceHeaderContextValue {
47
42
  */
48
43
  export const SurfaceHeaderContext = createContext<SurfaceHeaderContextValue | null>(null);
49
44
 
50
- type HeaderPrimaryAction = NonNullable<SurfaceHeaderContent['primaryAction']>;
51
- type HeaderAction = NonNullable<SurfaceHeaderContent['actions']>[number];
52
- type HeaderSearch = NonNullable<SurfaceHeaderContent['search']>;
53
- type HeaderSegments = NonNullable<SurfaceHeaderContent['segments']>;
54
- type HeaderProgress = NonNullable<SurfaceHeaderContent['progress']>;
55
-
56
- function primaryActionEqual(
57
- a: HeaderPrimaryAction | undefined,
58
- b: HeaderPrimaryAction | undefined,
59
- ): boolean {
60
- if (a === b) return true;
61
- if (!a || !b) return false;
62
- // `onPress` is a fresh closure each render — its identity never changes what
63
- // the button renders, so compare only the render-affecting scalars.
64
- return a.label === b.label && !!a.disabled === !!b.disabled && !!a.loading === !!b.loading;
65
- }
66
-
67
- function actionsEqual(a: HeaderAction[] | undefined, b: HeaderAction[] | undefined): boolean {
68
- if (a === b) return true;
69
- if (!a || !b || a.length !== b.length) return false;
70
- for (let i = 0; i < a.length; i += 1) {
71
- const x = a[i];
72
- const y = b[i];
73
- if (!x || !y) return false;
74
- // `icon` is a node (identity); `onPress` is ignored, like `primaryAction`'s.
75
- if (
76
- x.accessibilityLabel !== y.accessibilityLabel ||
77
- !!x.disabled !== !!y.disabled ||
78
- x.icon !== y.icon
79
- ) {
80
- return false;
81
- }
82
- }
83
- return true;
84
- }
85
-
86
- function searchEqual(a: HeaderSearch | undefined, b: HeaderSearch | undefined): boolean {
87
- if (a === b) return true;
88
- if (!a || !b) return false;
89
- return a.value === b.value && a.placeholder === b.placeholder;
90
- }
91
-
92
- function segmentsEqual(a: HeaderSegments | undefined, b: HeaderSegments | undefined): boolean {
93
- if (a === b) return true;
94
- if (!a || !b || a.value !== b.value || a.items.length !== b.items.length) return false;
95
- for (let i = 0; i < a.items.length; i += 1) {
96
- const x = a.items[i];
97
- const y = b.items[i];
98
- if (!x || !y || x.key !== y.key || x.label !== y.label) return false;
99
- }
100
- return true;
101
- }
102
-
103
- function progressEqual(a: HeaderProgress | undefined, b: HeaderProgress | undefined): boolean {
104
- if (a === b) return true;
105
- if (!a || !b) return false;
106
- return a.step === b.step && a.total === b.total;
107
- }
108
-
109
45
  /**
110
- * Value-equality for a surface's header contribution.
111
- *
112
- * This MIRRORS Bloom's own `configsEqual` (`@oxyhq/bloom/dialog`), which guards
113
- * the header store one layer down — deliberately field for field. The two must
114
- * not diverge: this comparator is the gate that decides whether the host's
115
- * `setContent` fires, so a comparator STRICTER than Bloom's re-introduces the
116
- * update loop Bloom's own guard was written to prevent.
117
- *
118
- * Scalars (`title`/`subtitle`/`largeTitle`/`tone`) compare by value. The rich
119
- * object fields (`primaryAction`/`actions`/`search`/`segments`/`progress`)
120
- * compare by their render-affecting scalars, so a screen may build them inline:
121
- * a fresh object with unchanged contents is NOT a change. Only the node fields
122
- * (`titleContent`/`left`/`right`, and an action's `icon`) compare by identity —
123
- * there is nothing else to compare a `ReactNode` by — so those, and only those,
124
- * carry the memoize-me contract.
46
+ * Shallow value-equality for a surface's header contribution.
125
47
  *
126
- * Function-typed affordances compare by PRESENCE, never identity: `onBack`
127
- * legitimately gets a fresh closure each render and its identity never changes
128
- * what the header renders, so it must not count as a change (that is exactly
129
- * what would drive the update loop).
48
+ * Scalars (`title`/`subtitle`/`largeTitle`/`tone`) compare by value; the object
49
+ * and node fields (`titleContent`/`left`/`right`/`primaryAction`/`actions`/
50
+ * `search`/`segments`/`progress`) compare by identity callers memoize them, per
51
+ * this hook's contract. Function-typed affordances compare by PRESENCE, never
52
+ * identity: `onBack` legitimately gets a fresh closure each render, and its
53
+ * identity never changes what the header renders, so it must not count as a
54
+ * change (that is exactly what would drive the update loop).
130
55
  */
131
56
  function surfaceHeaderContentEqual(
132
57
  a: SurfaceHeaderContent | null,
@@ -142,12 +67,12 @@ function surfaceHeaderContentEqual(
142
67
  a.left === b.left &&
143
68
  a.right === b.right &&
144
69
  !!a.onBack === !!b.onBack &&
70
+ a.primaryAction === b.primaryAction &&
71
+ a.actions === b.actions &&
72
+ a.search === b.search &&
73
+ a.segments === b.segments &&
145
74
  a.tone === b.tone &&
146
- primaryActionEqual(a.primaryAction, b.primaryAction) &&
147
- actionsEqual(a.actions, b.actions) &&
148
- searchEqual(a.search, b.search) &&
149
- segmentsEqual(a.segments, b.segments) &&
150
- progressEqual(a.progress, b.progress)
75
+ a.progress === b.progress
151
76
  );
152
77
  }
153
78
 
@@ -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,14 +5,14 @@ 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 { getNormalizedUserHandle, 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';
@@ -67,9 +67,9 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
67
67
  // Seed the form from the account during render (no useEffect): the first time
68
68
  // the query resolves we capture its values into local edit state.
69
69
  if (node && !seeded) {
70
- setDisplayName(
71
- node.account?.name?.displayName ?? getNormalizedUserHandle(node.account) ?? '',
72
- );
70
+ const first = node.account?.name?.first ?? '';
71
+ const last = node.account?.name?.last ?? '';
72
+ setDisplayName([first, last].filter(Boolean).join(' '));
73
73
  setBio(node.account?.bio ?? '');
74
74
  setSeeded(true);
75
75
  }
@@ -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(