@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
@@ -39,10 +39,10 @@
39
39
  * It is a cache write only — zero network, one `setQueryData` per key.
40
40
  */
41
41
 
42
- import type { UserNameResponse } from "@oxyhq/contracts";
43
- import type { QueryClient } from "@tanstack/react-query";
44
- import { useAuthStore } from "../../stores/authStore";
45
- import { queryKeys } from "./queryKeys";
42
+ import type { QueryClient } from '@tanstack/react-query';
43
+ import type { UserNameResponse } from '@oxyhq/contracts';
44
+ import { queryKeys } from './queryKeys';
45
+ import { useAuthStore } from '../../stores/authStore';
46
46
 
47
47
  /**
48
48
  * A user-shaped object that can be upserted into the cache. Intentionally
@@ -53,30 +53,30 @@ import { queryKeys } from "./queryKeys";
53
53
  * pass through untouched (so the upsert never has to know the full DTO shape).
54
54
  */
55
55
  export interface CacheableUser {
56
- id?: string;
57
- /** Some sources (post/notification actors) carry the id as Mongo `_id`. */
58
- _id?: string;
59
- username?: string;
60
- /**
61
- * Canonical structured name (`UserNameResponse`) OR a plain display string on
62
- * the looser actor objects. Normalized to the object shape on write.
63
- */
64
- name?: string | UserNameResponse;
65
- /** Avatar file id. `null`/`''` are treated as "no avatar" (never degrade). */
66
- avatar?: string | null;
67
- /** Social counts. A partial `_count` never replaces a fuller one. */
68
- _count?: { followers?: number; following?: number } | null;
69
- /**
70
- * Viewer-relative follow relationship. Present ONLY on an authenticated
71
- * single-profile fetch; `null`/absent for anon/self/bulk/feed. Never stripped
72
- * from an existing entry by a source that lacks it.
73
- */
74
- relationship?: { isFollowing?: boolean; followsYou?: boolean } | null;
75
- [key: string]: unknown;
56
+ id?: string;
57
+ /** Some sources (post/notification actors) carry the id as Mongo `_id`. */
58
+ _id?: string;
59
+ username?: string;
60
+ /**
61
+ * Canonical structured name (`UserNameResponse`) OR a plain display string on
62
+ * the looser actor objects. Normalized to the object shape on write.
63
+ */
64
+ name?: string | UserNameResponse;
65
+ /** Avatar file id. `null`/`''` are treated as "no avatar" (never degrade). */
66
+ avatar?: string | null;
67
+ /** Social counts. A partial `_count` never replaces a fuller one. */
68
+ _count?: { followers?: number; following?: number } | null;
69
+ /**
70
+ * Viewer-relative follow relationship. Present ONLY on an authenticated
71
+ * single-profile fetch; `null`/absent for anon/self/bulk/feed. Never stripped
72
+ * from an existing entry by a source that lacks it.
73
+ */
74
+ relationship?: { isFollowing?: boolean; followsYou?: boolean } | null;
75
+ [key: string]: unknown;
76
76
  }
77
77
 
78
78
  /** The degraded display-name sentinel (ghost-author rule). */
79
- const DEGRADED_DISPLAY_NAME = "Unknown user";
79
+ const DEGRADED_DISPLAY_NAME = 'Unknown user';
80
80
 
81
81
  /** A cache entry always carries a resolved string `id`. */
82
82
  type CachedUser = CacheableUser & { id: string; name?: UserNameResponse };
@@ -88,34 +88,28 @@ type CachedUser = CacheableUser & { id: string; name?: UserNameResponse };
88
88
  * meaningful (a real `verified: false` or `_count.followers: 0`).
89
89
  */
90
90
  function isMeaningful(value: unknown): boolean {
91
- if (value === undefined || value === null) return false;
92
- if (typeof value === "string") return value.trim() !== "";
93
- return true;
91
+ if (value === undefined || value === null) return false;
92
+ if (typeof value === 'string') return value.trim() !== '';
93
+ return true;
94
94
  }
95
95
 
96
96
  /** A display name is meaningful only when non-empty AND not the degraded sentinel. */
97
97
  function isMeaningfulDisplayName(value: unknown): value is string {
98
- return (
99
- typeof value === "string" &&
100
- value.trim() !== "" &&
101
- value !== DEGRADED_DISPLAY_NAME
102
- );
98
+ return typeof value === 'string' && value.trim() !== '' && value !== DEGRADED_DISPLAY_NAME;
103
99
  }
104
100
 
105
101
  function isPlainObject(value: unknown): value is Record<string, unknown> {
106
- return typeof value === "object" && value !== null && !Array.isArray(value);
102
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
107
103
  }
108
104
 
109
105
  /** Normalize the polymorphic `name` (string | object | nullish) to the canonical object shape. */
110
- function normalizeName(
111
- name: CacheableUser["name"],
112
- ): UserNameResponse | undefined {
113
- if (name === undefined || name === null) return undefined;
114
- if (typeof name === "string") {
115
- const trimmed = name.trim();
116
- return trimmed ? { displayName: trimmed } : undefined;
117
- }
118
- return name;
106
+ function normalizeName(name: CacheableUser['name']): UserNameResponse | undefined {
107
+ if (name === undefined || name === null) return undefined;
108
+ if (typeof name === 'string') {
109
+ const trimmed = name.trim();
110
+ return trimmed ? { displayName: trimmed } : undefined;
111
+ }
112
+ return name;
119
113
  }
120
114
 
121
115
  /**
@@ -125,12 +119,12 @@ function normalizeName(
125
119
  * object so the cache never holds a bare-string name).
126
120
  */
127
121
  function toCachedUser(user: CacheableUser, fallbackId: string): CachedUser {
128
- const { name: rawName, ...rest } = user;
129
- const id = String(user.id ?? user._id ?? fallbackId);
130
- const name = normalizeName(rawName);
131
- const normalized: CachedUser = { ...rest, id };
132
- if (name !== undefined) normalized.name = name;
133
- return normalized;
122
+ const { name: rawName, ...rest } = user;
123
+ const id = String(user.id ?? user._id ?? fallbackId);
124
+ const name = normalizeName(rawName);
125
+ const normalized: CachedUser = { ...rest, id };
126
+ if (name !== undefined) normalized.name = name;
127
+ return normalized;
134
128
  }
135
129
 
136
130
  /**
@@ -138,43 +132,39 @@ function toCachedUser(user: CacheableUser, fallbackId: string): CachedUser {
138
132
  * when no id can be resolved (nothing to key on).
139
133
  */
140
134
  function normalizeIncoming(user: CacheableUser): CachedUser | null {
141
- const cached = toCachedUser(user, "");
142
- return cached.id ? cached : null;
135
+ const cached = toCachedUser(user, '');
136
+ return cached.id ? cached : null;
143
137
  }
144
138
 
145
139
  /** Merge two `name` objects field-by-field, with anti-degradation on `displayName`. */
146
140
  function mergeName(
147
- existing: UserNameResponse | undefined,
148
- incoming: UserNameResponse | undefined,
141
+ existing: UserNameResponse | undefined,
142
+ incoming: UserNameResponse | undefined,
149
143
  ): UserNameResponse | undefined {
150
- if (incoming === undefined) return existing;
151
- if (existing === undefined) return incoming;
152
- const merged: UserNameResponse = { ...existing };
153
- for (const [key, value] of Object.entries(incoming)) {
154
- if (key === "displayName") continue;
155
- if (isMeaningful(value)) merged[key] = value;
156
- }
157
- // Never let an empty / `'Unknown user'` displayName overwrite a real one.
158
- if (isMeaningfulDisplayName(incoming.displayName)) {
159
- merged.displayName = incoming.displayName;
160
- }
161
- return merged;
144
+ if (incoming === undefined) return existing;
145
+ if (existing === undefined) return incoming;
146
+ const merged: UserNameResponse = { ...existing };
147
+ for (const [key, value] of Object.entries(incoming)) {
148
+ if (key === 'displayName') continue;
149
+ if (isMeaningful(value)) merged[key] = value;
150
+ }
151
+ // Never let an empty / `'Unknown user'` displayName overwrite a real one.
152
+ if (isMeaningfulDisplayName(incoming.displayName)) {
153
+ merged.displayName = incoming.displayName;
154
+ }
155
+ return merged;
162
156
  }
163
157
 
164
158
  /** Merge `_count` field-by-field so a partial count never replaces a fuller one. */
165
159
  function mergeCount(
166
- existing: CacheableUser["_count"],
167
- incoming: CacheableUser["_count"],
168
- ): CacheableUser["_count"] {
169
- if (!isPlainObject(incoming)) return existing;
170
- const merged: { followers?: number; following?: number } = {
171
- ...(isPlainObject(existing) ? existing : {}),
172
- };
173
- if (typeof incoming.followers === "number")
174
- merged.followers = incoming.followers;
175
- if (typeof incoming.following === "number")
176
- merged.following = incoming.following;
177
- return merged;
160
+ existing: CacheableUser['_count'],
161
+ incoming: CacheableUser['_count'],
162
+ ): CacheableUser['_count'] {
163
+ if (!isPlainObject(incoming)) return existing;
164
+ const merged: { followers?: number; following?: number } = { ...(isPlainObject(existing) ? existing : {}) };
165
+ if (typeof incoming.followers === 'number') merged.followers = incoming.followers;
166
+ if (typeof incoming.following === 'number') merged.following = incoming.following;
167
+ return merged;
178
168
  }
179
169
 
180
170
  /**
@@ -182,18 +172,16 @@ function mergeCount(
182
172
  * or an anon/self/bulk `null`) must NEVER strip an existing viewer relationship.
183
173
  */
184
174
  function mergeRelationship(
185
- existing: CacheableUser["relationship"],
186
- incoming: CacheableUser["relationship"],
187
- ): CacheableUser["relationship"] {
188
- if (!isPlainObject(incoming)) return existing;
189
- const merged: { isFollowing?: boolean; followsYou?: boolean } = {
190
- ...(isPlainObject(existing) ? existing : {}),
191
- };
192
- if (typeof incoming.isFollowing === "boolean")
193
- merged.isFollowing = incoming.isFollowing;
194
- if (typeof incoming.followsYou === "boolean")
195
- merged.followsYou = incoming.followsYou;
196
- return merged;
175
+ existing: CacheableUser['relationship'],
176
+ incoming: CacheableUser['relationship'],
177
+ ): CacheableUser['relationship'] {
178
+ if (!isPlainObject(incoming)) return existing;
179
+ const merged: { isFollowing?: boolean; followsYou?: boolean } = {
180
+ ...(isPlainObject(existing) ? existing : {}),
181
+ };
182
+ if (typeof incoming.isFollowing === 'boolean') merged.isFollowing = incoming.isFollowing;
183
+ if (typeof incoming.followsYou === 'boolean') merged.followsYou = incoming.followsYou;
184
+ return merged;
197
185
  }
198
186
 
199
187
  /**
@@ -205,63 +193,54 @@ function mergeRelationship(
205
193
  * only the by-username key carries it (`useUserByUsername`).
206
194
  */
207
195
  function mergeUsers(
208
- existing: CachedUser,
209
- incoming: CachedUser,
210
- options?: { includeRelationship?: boolean },
196
+ existing: CachedUser,
197
+ incoming: CachedUser,
198
+ options?: { includeRelationship?: boolean },
211
199
  ): CachedUser {
212
- const includeRelationship = options?.includeRelationship ?? true;
213
- const merged: CachedUser = { ...existing };
214
- for (const [key, value] of Object.entries(incoming)) {
215
- if (key === "name" || key === "_count" || key === "relationship") continue;
216
- if (key === "id") {
217
- merged.id = incoming.id;
218
- continue;
219
- }
220
- if (isMeaningful(value)) merged[key] = value;
221
- }
222
- const name = mergeName(existing.name, incoming.name);
223
- if (name !== undefined) merged.name = name;
224
- const count = mergeCount(existing._count, incoming._count);
225
- if (count !== undefined) merged._count = count;
226
- if (includeRelationship) {
227
- const relationship = mergeRelationship(
228
- existing.relationship,
229
- incoming.relationship,
230
- );
231
- if (relationship !== undefined) merged.relationship = relationship;
232
- } else {
233
- merged.relationship = undefined;
234
- }
235
- return merged;
200
+ const includeRelationship = options?.includeRelationship ?? true;
201
+ const merged: CachedUser = { ...existing };
202
+ for (const [key, value] of Object.entries(incoming)) {
203
+ if (key === 'name' || key === '_count' || key === 'relationship') continue;
204
+ if (key === 'id') {
205
+ merged.id = incoming.id;
206
+ continue;
207
+ }
208
+ if (isMeaningful(value)) merged[key] = value;
209
+ }
210
+ const name = mergeName(existing.name, incoming.name);
211
+ if (name !== undefined) merged.name = name;
212
+ const count = mergeCount(existing._count, incoming._count);
213
+ if (count !== undefined) merged._count = count;
214
+ if (includeRelationship) {
215
+ const relationship = mergeRelationship(existing.relationship, incoming.relationship);
216
+ if (relationship !== undefined) merged.relationship = relationship;
217
+ } else {
218
+ delete merged.relationship;
219
+ }
220
+ return merged;
236
221
  }
237
222
 
238
223
  /** Merge-upsert a normalized user into one cache key (see module docs for semantics). */
239
224
  function upsertOneKey(
240
- queryClient: QueryClient,
241
- key: readonly unknown[],
242
- incoming: CachedUser,
243
- options: { includeRelationship: boolean },
225
+ queryClient: QueryClient,
226
+ key: readonly unknown[],
227
+ incoming: CachedUser,
228
+ options: { includeRelationship: boolean },
244
229
  ): void {
245
- const mergeOpts = { includeRelationship: options.includeRelationship };
246
- const existing = queryClient.getQueryData<CacheableUser>(key);
247
- if (existing === undefined) {
248
- // Cold slot: seed the full incoming object, STALE, so react-query refetches
249
- // the full authoritative profile (relationship, counts, createdAt, …).
250
- const seeded = mergeUsers({ id: incoming.id }, incoming, mergeOpts);
251
- queryClient.setQueryData<CachedUser>(key, seeded, { updatedAt: 0 });
252
- return;
253
- }
254
- // Existing entry: merge and leave its freshness lifecycle untouched. The
255
- // existing entry is keyed by `incoming.id`, so use it as the fallback id.
256
- const merged = mergeUsers(
257
- toCachedUser(existing, incoming.id),
258
- incoming,
259
- mergeOpts,
260
- );
261
- const dataUpdatedAt = queryClient.getQueryState(key)?.dataUpdatedAt ?? 0;
262
- queryClient.setQueryData<CachedUser>(key, merged, {
263
- updatedAt: dataUpdatedAt,
264
- });
230
+ const mergeOpts = { includeRelationship: options.includeRelationship };
231
+ const existing = queryClient.getQueryData<CacheableUser>(key);
232
+ if (existing === undefined) {
233
+ // Cold slot: seed the full incoming object, STALE, so react-query refetches
234
+ // the full authoritative profile (relationship, counts, createdAt, …).
235
+ const seeded = mergeUsers({ id: incoming.id }, incoming, mergeOpts);
236
+ queryClient.setQueryData<CachedUser>(key, seeded, { updatedAt: 0 });
237
+ return;
238
+ }
239
+ // Existing entry: merge and leave its freshness lifecycle untouched. The
240
+ // existing entry is keyed by `incoming.id`, so use it as the fallback id.
241
+ const merged = mergeUsers(toCachedUser(existing, incoming.id), incoming, mergeOpts);
242
+ const dataUpdatedAt = queryClient.getQueryState(key)?.dataUpdatedAt ?? 0;
243
+ queryClient.setQueryData<CachedUser>(key, merged, { updatedAt: dataUpdatedAt });
265
244
  }
266
245
 
267
246
  /**
@@ -272,7 +251,7 @@ function upsertOneKey(
272
251
  * empty string is honoured (anonymous scope).
273
252
  */
274
253
  function resolveViewerId(viewerId?: string): string {
275
- return viewerId ?? useAuthStore.getState().user?.id ?? "";
254
+ return viewerId ?? useAuthStore.getState().user?.id ?? '';
276
255
  }
277
256
 
278
257
  /**
@@ -286,29 +265,29 @@ function resolveViewerId(viewerId?: string): string {
286
265
  * the current auth-store user id.
287
266
  */
288
267
  export function upsertCachedUser(
289
- queryClient: QueryClient,
290
- user: CacheableUser,
291
- viewerId?: string,
268
+ queryClient: QueryClient,
269
+ user: CacheableUser,
270
+ viewerId?: string,
292
271
  ): void {
293
- const incoming = normalizeIncoming(user);
294
- if (!incoming) return;
272
+ const incoming = normalizeIncoming(user);
273
+ if (!incoming) return;
295
274
 
296
- // By-id identity entry (read by `useUserById`). Not viewer-scoped — never store
297
- // the viewer-relative `relationship` here or one viewer's follow state leaks
298
- // into every other viewer's by-id cache entry.
299
- upsertOneKey(queryClient, queryKeys.users.detail(incoming.id), incoming, {
300
- includeRelationship: false,
301
- });
275
+ // By-id identity entry (read by `useUserById`). Not viewer-scoped — never store
276
+ // the viewer-relative `relationship` here or one viewer's follow state leaks
277
+ // into every other viewer's by-id cache entry.
278
+ upsertOneKey(queryClient, queryKeys.users.detail(incoming.id), incoming, {
279
+ includeRelationship: false,
280
+ });
302
281
 
303
- const username = incoming.username;
304
- if (typeof username === "string" && username.trim() !== "") {
305
- // By-username entry (read by `useUserByUsername`). Viewer-scoped because the
306
- // authenticated single-profile fetch embeds the viewer `relationship`. Build
307
- // the key through the SAME helper the hook uses so username normalization
308
- // (`trim().toLowerCase()`) matches byte-for-byte.
309
- const key = queryKeys.users.byUsername(username, resolveViewerId(viewerId));
310
- upsertOneKey(queryClient, key, incoming, { includeRelationship: true });
311
- }
282
+ const username = incoming.username;
283
+ if (typeof username === 'string' && username.trim() !== '') {
284
+ // By-username entry (read by `useUserByUsername`). Viewer-scoped because the
285
+ // authenticated single-profile fetch embeds the viewer `relationship`. Build
286
+ // the key through the SAME helper the hook uses so username normalization
287
+ // (`trim().toLowerCase()`) matches byte-for-byte.
288
+ const key = queryKeys.users.byUsername(username, resolveViewerId(viewerId));
289
+ upsertOneKey(queryClient, key, incoming, { includeRelationship: true });
290
+ }
312
291
  }
313
292
 
314
293
  /**
@@ -317,13 +296,13 @@ export function upsertCachedUser(
317
296
  * appears twice merges both slices into the single cache entry.
318
297
  */
319
298
  export function upsertCachedUsers(
320
- queryClient: QueryClient,
321
- users: readonly CacheableUser[] | null | undefined,
322
- viewerId?: string,
299
+ queryClient: QueryClient,
300
+ users: readonly CacheableUser[] | null | undefined,
301
+ viewerId?: string,
323
302
  ): void {
324
- if (!Array.isArray(users) || users.length === 0) return;
325
- const resolvedViewerId = resolveViewerId(viewerId);
326
- for (const user of users) {
327
- if (user) upsertCachedUser(queryClient, user, resolvedViewerId);
328
- }
303
+ if (!Array.isArray(users) || users.length === 0) return;
304
+ const resolvedViewerId = resolveViewerId(viewerId);
305
+ for (const user of users) {
306
+ if (user) upsertCachedUser(queryClient, user, resolvedViewerId);
307
+ }
329
308
  }
@@ -48,7 +48,7 @@ export const useAssets = () => {
48
48
  // Upload asset with progress tracking
49
49
  const upload = useCallback(async (
50
50
  file: File,
51
- metadata?: Record<string, unknown>
51
+ metadata?: Record<string, any>
52
52
  ): Promise<Asset | null> => {
53
53
  if (!oxyInstance) {
54
54
  throw new Error('OxyServices instance not configured. Call setOxyAssetInstance first.');
@@ -1,5 +1,5 @@
1
1
  import { useState, useCallback } from 'react';
2
- import { toast } from '@oxyhq/bloom/toast';
2
+ import { toast } from '@oxyhq/bloom';
3
3
 
4
4
  interface UseAsyncActionOptions<T> {
5
5
  /** Function to execute */
@@ -7,11 +7,11 @@ interface UseAsyncActionOptions<T> {
7
7
  /** Success message to display */
8
8
  successMessage?: string;
9
9
  /** Error message to display (or function to get message from error) */
10
- errorMessage?: string | ((error: unknown) => string);
10
+ errorMessage?: string | ((error: any) => string);
11
11
  /** Callback on success */
12
12
  onSuccess?: (result: T) => void;
13
13
  /** Callback on error */
14
- onError?: (error: unknown) => void;
14
+ onError?: (error: any) => void;
15
15
  /** Show loading toast */
16
16
  showLoadingToast?: boolean;
17
17
  /** Loading message */
@@ -17,10 +17,8 @@
17
17
  * }
18
18
  * ```
19
19
  *
20
- * Session restore (zero cookies):
21
- * - Web: this origin's own persisted `{deviceId, deviceSecret}` a signed-out
22
- * origin stays signed out until the user presses "Continue with Oxy". There is
23
- * no cross-origin silent SSO: the SDK never navigates the tab on its own.
20
+ * Cross-domain session (zero cookies):
21
+ * - Web: silent OAuth (`prompt=none`) on cold boot; hub-ticket sync to auth.oxy.so after sign-in
24
22
  * - Native: shared Keychain / app-group identity (Commons)
25
23
  * - Realtime sync: Socket.IO `session_state` on `device:<deviceId>` once authenticated
26
24
  * - Manual sign-in: signIn() opens the in-app account dialog (web + native)
@@ -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