@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
@@ -5,14 +5,13 @@ import { SafeAreaProvider } from 'react-native-safe-area-context';
5
5
  import type { OxyProviderProps } from '../types/navigation';
6
6
  import { OxyContextProvider, type OxyContextProviderProps } from '../context/OxyContext';
7
7
  import { QueryClientProvider, focusManager, onlineManager } from '@tanstack/react-query';
8
- import { BloomDialogProvider } from '@oxyhq/bloom/dialog';
8
+ import { BloomDialogProvider } from '@oxyhq/bloom';
9
9
  import { SurfaceProvider } from '@oxyhq/bloom/surfaces';
10
10
  import { ToastOutlet } from '@oxyhq/bloom/toast';
11
11
  import { logger as loggerUtil } from '@oxyhq/core';
12
12
  import { RequireOxyAuth } from './RequireOxyAuth';
13
13
  import { attachQueryPersistence, createQueryClient } from '../hooks/queryClient';
14
14
  import { createPlatformStorage, type StorageInterface } from '../utils/storageHelpers';
15
- import { isNetConnectivityOnline } from '../utils/netConnectivity';
16
15
 
17
16
  /**
18
17
  * Background color shown for the brief window between mount and the
@@ -93,10 +92,10 @@ const OxyProvider: FC<OxyProviderProps> = ({
93
92
  authRedirectUri,
94
93
  authorizeBaseUrl,
95
94
  sessionMode = 'account',
96
- webAuthMode = 'popup',
95
+ webAuthMode = 'redirect',
97
96
  queryClient: providedQueryClient,
98
97
  requireAuth = 'off',
99
- backgroundSession = false,
98
+ hubSync = true,
100
99
  }) => {
101
100
 
102
101
  // Dynamic KeyboardProvider for native. Uses variable indirection
@@ -231,10 +230,10 @@ const OxyProvider: FC<OxyProviderProps> = ({
231
230
  try {
232
231
  const NetInfo = await import('@react-native-community/netinfo');
233
232
  const state = await NetInfo.default.fetch();
234
- onlineManager.setOnline(isNetConnectivityOnline(state));
233
+ onlineManager.setOnline(state.isConnected ?? true);
235
234
 
236
- const unsubscribe = NetInfo.default.addEventListener((state: { isConnected: boolean | null; isInternetReachable?: boolean | null }) => {
237
- onlineManager.setOnline(isNetConnectivityOnline(state));
235
+ const unsubscribe = NetInfo.default.addEventListener((state: { isConnected: boolean | null }) => {
236
+ onlineManager.setOnline(state.isConnected ?? true);
238
237
  });
239
238
 
240
239
  cleanup = () => unsubscribe();
@@ -294,7 +293,7 @@ const OxyProvider: FC<OxyProviderProps> = ({
294
293
  clientId={clientId}
295
294
  sessionMode={sessionMode}
296
295
  webAuthMode={webAuthMode}
297
- backgroundSession={backgroundSession}
296
+ hubSync={hubSync}
298
297
  onAuthStateChange={onAuthStateChange as OxyContextProviderProps['onAuthStateChange']}
299
298
  >
300
299
  <SurfaceProvider>
@@ -105,8 +105,7 @@ export interface OxySignInButtonProps {
105
105
  * onOAuthResult={({ redirectUrl, state, codeVerifier }) => {
106
106
  * if (!redirectUrl) return;
107
107
  * const code = new URL(redirectUrl).searchParams.get('code');
108
- * // → POST /auth/oauth/token, form-urlencoded:
109
- * // grant_type=authorization_code&code=…&redirect_uri=…&client_id=…&code_verifier=…
108
+ * // → POST /auth/oauth/token { code, code_verifier: codeVerifier, state }
110
109
  * }}
111
110
  * />
112
111
  * ```
@@ -13,7 +13,7 @@ import { Avatar } from '@oxyhq/bloom/avatar';
13
13
  import * as Skeleton from '@oxyhq/bloom/skeleton';
14
14
  import { Text } from '@oxyhq/bloom/typography';
15
15
  import { useTheme } from '@oxyhq/bloom/theme';
16
- import { getAccountDisplayName, getAccountFallbackHandle, getNormalizedUserHandle } from '@oxyhq/core';
16
+ import { getAccountDisplayName, getAccountFallbackHandle } from '@oxyhq/core';
17
17
  import { useAuth } from '../hooks/useAuth';
18
18
  import { useOxy } from '../context/OxyContext';
19
19
  import { useI18n } from '../hooks/useI18n';
@@ -201,10 +201,7 @@ const ProfileButton: React.FC<ProfileButtonProps> = ({
201
201
  }
202
202
 
203
203
  // ── Signed in: avatar + identity + chevron. ─────────────────────────────
204
- const displayName =
205
- user?.name?.displayName ??
206
- getNormalizedUserHandle(user) ??
207
- getAccountDisplayName(null, locale);
204
+ const displayName = getAccountDisplayName(user, locale);
208
205
  const handle = getAccountFallbackHandle(user);
209
206
  const handleLine = handle ? `@${handle}` : null;
210
207
 
@@ -25,7 +25,7 @@
25
25
 
26
26
  import type React from 'react';
27
27
  import { Fragment, useCallback, useState } from 'react';
28
- import { Pressable, View } from 'react-native';
28
+ import { Pressable, View } from 'react-native-css/components';
29
29
  import Animated, {
30
30
  Extrapolation,
31
31
  interpolate,
@@ -99,6 +99,11 @@ const FACEPILE_AVATAR_SIZE = 32;
99
99
  */
100
100
  const FACEPILE_OVERLAP = 4;
101
101
 
102
+ // Vite/RN-Web does not install NativeWind's Metro global className polyfill.
103
+ // Use react-native-css components explicitly so this className markup also
104
+ // works in Vite web hosts.
105
+ const AnimatedCssView = Animated.createAnimatedComponent(View);
106
+
102
107
  /**
103
108
  * The hero's address line, shown under the "Hi, <name>!" greeting: the account's
104
109
  * canonical `@oxy.so` email when it has one, else its normalized `@handle`. Never
@@ -381,7 +386,7 @@ const AccountsMenuView: React.FC<AccountsMenuViewProps> = ({
381
386
  {/* SWITCH ACCOUNT — own NativeWind card, NOT a Bloom grouped section: it
382
387
  is a disclosure header over an animated list, not a list of settings
383
388
  rows, and the grouped section is not a bare card container. */}
384
- <Animated.View className="bg-fill overflow-hidden mb-space-16" style={switchCardStyle}>
389
+ <AnimatedCssView className="bg-fill overflow-hidden mb-space-16" style={switchCardStyle}>
385
390
  <HoverPressable
386
391
  baseClassName={`flex-row items-center gap-space-12 px-space-12 py-[10px] min-h-[44px]${
387
392
  switchingDisabled ? ' opacity-60' : ''
@@ -424,7 +429,7 @@ const AccountsMenuView: React.FC<AccountsMenuViewProps> = ({
424
429
  {/* Animated reveal: an overflow-clipped container whose height + opacity
425
430
  are driven by `listProgress`; the inner style-based wrapper measures
426
431
  the natural content height via `onLayout`. */}
427
- <Animated.View
432
+ <AnimatedCssView
428
433
  style={[styles.collapse, listStyle]}
429
434
  pointerEvents={expanded ? 'auto' : 'none'}
430
435
  >
@@ -434,8 +439,8 @@ const AccountsMenuView: React.FC<AccountsMenuViewProps> = ({
434
439
  >
435
440
  <View>{listItems}</View>
436
441
  </View>
437
- </Animated.View>
438
- </Animated.View>
442
+ </AnimatedCssView>
443
+ </AnimatedCssView>
439
444
 
440
445
  {/* OXY STORAGE — own NativeWind card for the same reason: a title, a meter
441
446
  and two chips are not settings rows. Its cloud sits in the same 20px
@@ -6,7 +6,7 @@
6
6
 
7
7
  import type React from 'react';
8
8
  import { useState } from 'react';
9
- import { Pressable, View } from 'react-native';
9
+ import { Pressable, View } from 'react-native-css/components';
10
10
  import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
11
11
  import { Avatar } from '@oxyhq/bloom/avatar';
12
12
  import { Text } from '@oxyhq/bloom/typography';
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  import { useCallback, useRef, useState } from 'react';
11
- import { toast } from '@oxyhq/bloom/toast';
11
+ import { toast } from '@oxyhq/bloom';
12
12
  import type { OxyServices } from '@oxyhq/core';
13
13
  import type { Translate } from './types';
14
14
 
@@ -2,7 +2,7 @@ import type React from 'react';
2
2
  import { View, Text, TouchableOpacity, ScrollView, StyleSheet } from 'react-native';
3
3
  import { Image as ExpoImage } from 'expo-image';
4
4
  import Ionicons from '@expo/vector-icons/Ionicons';
5
- import { Dialog, type DialogControlProps } from '@oxyhq/bloom/dialog';
5
+ import { Dialog, type DialogControlProps } from '@oxyhq/bloom';
6
6
  import { useTheme } from '@oxyhq/bloom/theme';
7
7
  import { formatFileSize, getFileIcon } from '../../utils/fileManagement';
8
8
  import type { PendingUploadFile } from '../../screens/fileManagement/shared';
@@ -64,7 +64,6 @@ const PinInput = forwardRef<PinInputHandle, PinInputProps>(({ value, onChange, l
64
64
  <View style={styles.pinContainer}>
65
65
  {Array.from({ length }).map((_, idx) => (
66
66
  <TextInput
67
- // biome-ignore lint/suspicious/noArrayIndexKey: fixed-position PIN cells, order never changes
68
67
  key={`pin-input-${idx}`}
69
68
  ref={(ref) => { inputs.current[idx] = ref; }}
70
69
  style={[
@@ -55,13 +55,13 @@ export const LogoText: React.FC<LogoTextProps> = ({
55
55
  return (
56
56
  <Svg viewBox={`0 0 ${VIEW_BOX_WIDTH} ${VIEW_BOX_HEIGHT}`} width={width} height={height} style={style}>
57
57
  <G>
58
- {OUTER_PATHS.map((d) => (
59
- <Path key={d} d={d} fill={resolvedColor} />
58
+ {OUTER_PATHS.map((d, i) => (
59
+ <Path key={`outer-${i}`} d={d} fill={resolvedColor} />
60
60
  ))}
61
61
  </G>
62
62
  <G transform="translate(10.316 2.495)">
63
- {INNER_LETTER_PATHS.map((d) => (
64
- <Path key={d} d={d} fill={resolvedLetterColor} />
63
+ {INNER_LETTER_PATHS.map((d, i) => (
64
+ <Path key={`inner-${i}`} d={d} fill={resolvedLetterColor} />
65
65
  ))}
66
66
  </G>
67
67
  </Svg>
@@ -6,7 +6,7 @@ import { Button } from '@oxyhq/bloom/button';
6
6
  import { TextField, TextFieldInput } from '@oxyhq/bloom/text-field';
7
7
  import FAIRWalletIcon from '../icon/FAIRWalletIcon';
8
8
  import { createPaymentStyles } from './paymentStyles';
9
- import { toast } from '@oxyhq/bloom/toast';
9
+ import { toast } from '@oxyhq/bloom';
10
10
  import type { CardDetails, PaymentColors, PaymentStepAnimations } from './types';
11
11
  import { useI18n } from '../../hooks/useI18n';
12
12
 
@@ -85,9 +85,9 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
85
85
  <>
86
86
  <View style={styles.summaryCardItems}>
87
87
  <SettingsListGroup>
88
- {paymentItems.map((item) => (
88
+ {paymentItems.map((item, idx) => (
89
89
  <SettingsListItem
90
- key={`${item.type}-${item.name}-${item.price}-${item.period ?? ''}`}
90
+ key={`item-${idx}`}
91
91
  icon={<Ionicons name={getItemTypeIcon(item.type)} size={20} color={colors.primary} />}
92
92
  title={`${item.type === 'product' && item.quantity ? `${item.quantity} \u00d7 ` : ''}${item.name}${item.type === 'subscription' && item.period ? ` (${item.period})` : ''}`}
93
93
  description={item.description || `${item.currency ? (CURRENCY_SYMBOLS[item.currency.toUpperCase()] || item.currency) : currencySymbol} ${item.price * (item.quantity ?? 1)}`}
@@ -1,41 +1,41 @@
1
- import type Ionicons from "@expo/vector-icons/Ionicons";
2
- import type { ThemeColors } from "@oxyhq/bloom/theme";
3
- import type React from "react";
4
- import type { Animated } from "react-native";
1
+ import type React from 'react';
2
+ import type { Animated } from 'react-native';
3
+ import type Ionicons from '@expo/vector-icons/Ionicons';
4
+ import type { ThemeColors } from '@oxyhq/bloom/theme';
5
5
 
6
6
  export type PaymentItem = {
7
- type: "product" | "subscription" | "service" | "fee" | string;
8
- name: string;
9
- description?: string;
10
- quantity?: number;
11
- period?: string;
12
- price: number;
13
- currency?: string;
7
+ type: 'product' | 'subscription' | 'service' | 'fee' | string;
8
+ name: string;
9
+ description?: string;
10
+ quantity?: number;
11
+ period?: string;
12
+ price: number;
13
+ currency?: string;
14
14
  };
15
15
 
16
16
  export interface PaymentGatewayResult {
17
- success: boolean;
18
- details?: Record<string, string | number | boolean | null>;
19
- error?: string;
17
+ success: boolean;
18
+ details?: Record<string, string | number | boolean | null>;
19
+ error?: string;
20
20
  }
21
21
 
22
22
  export interface CardDetails {
23
- number: string;
24
- expiry: string;
25
- cvv: string;
23
+ number: string;
24
+ expiry: string;
25
+ cvv: string;
26
26
  }
27
27
 
28
28
  export interface PaymentMethod {
29
- key: string;
30
- label: string;
31
- icon: React.ComponentProps<typeof Ionicons>["name"];
32
- description: string;
29
+ key: string;
30
+ label: string;
31
+ icon: React.ComponentProps<typeof Ionicons>['name'];
32
+ description: string;
33
33
  }
34
34
 
35
35
  export interface PaymentStepAnimations {
36
- fadeAnim: Animated.Value;
37
- slideAnim: Animated.Value;
38
- scaleAnim: Animated.Value;
36
+ fadeAnim: Animated.Value;
37
+ slideAnim: Animated.Value;
38
+ scaleAnim: Animated.Value;
39
39
  }
40
40
 
41
41
  /**
@@ -48,8 +48,8 @@ function v2Shadow(elevation: number | Animated.Value = 0): ViewStyle | ShadowSty
48
48
  return {};
49
49
  }
50
50
 
51
- let height: number;
52
- let radius: number;
51
+ let height;
52
+ let radius;
53
53
  switch (elevation) {
54
54
  case 1:
55
55
  height = 0.5;
@@ -26,6 +26,7 @@ import {
26
26
  startTokenRefreshScheduler,
27
27
  createAccountDialogController,
28
28
  logger as loggerUtil,
29
+ syncHubAfterSignIn,
29
30
  } from '@oxyhq/core';
30
31
  import {
31
32
  registerAccountDialogControls,
@@ -70,7 +71,6 @@ import {
70
71
  activeUserOf,
71
72
  accountIdsOf,
72
73
  IdentityBoundSessionError,
73
- useBackgroundSessionSync,
74
74
  type IdentitySessionBinding,
75
75
  } from '../session';
76
76
  import type {
@@ -79,7 +79,7 @@ import type {
79
79
  CommitInput,
80
80
  } from './oxyContextTypes';
81
81
  import { DEFAULT_SESSION_VALIDITY_MS, loadUseFollowHook } from './oxyContextHelpers';
82
- import { commitDeviceSetAndResolve } from './commitSessionFlow';
82
+ import { commitDeviceSetAndResolve, maybeSyncHubAfterCommit } from './commitSessionFlow';
83
83
  import { runPasskeyLogin, runPasskeyRegister, runPasskeyAdd } from './passkeyFlow';
84
84
  import {
85
85
  isPasskeySupported,
@@ -103,8 +103,8 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
103
103
  storageKeyPrefix = 'oxy_session',
104
104
  clientId: clientIdProp,
105
105
  sessionMode = 'account',
106
- webAuthMode = 'popup',
107
- backgroundSession = false,
106
+ webAuthMode = 'redirect',
107
+ hubSync = true,
108
108
  onAuthStateChange,
109
109
  onError,
110
110
  }) => {
@@ -501,12 +501,6 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
501
501
  logoutStore,
502
502
  setAuthState,
503
503
  logger,
504
- ...(identity
505
- ? {
506
- identityBinding: identity.binding,
507
- refreshPinnedAccountId: () => identity.refreshPinnedAccountId(),
508
- }
509
- : {}),
510
504
  });
511
505
 
512
506
  // "That wasn't me": repudiating a flagged sign-in IS revoking the device
@@ -586,7 +580,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
586
580
  };
587
581
  handleTokenChange(oxyServices.getAccessToken());
588
582
  return oxyServices.onTokensChanged(handleTokenChange);
589
- }, [logger, oxyServices, sessionClient]);
583
+ }, [logger, oxyServices]);
590
584
 
591
585
  // Unified in-session refresh (SDK-owned; every RP inherits it). Installs the
592
586
  // ONE core refresh handler (re-mint from the persisted zero-cookie device
@@ -616,7 +610,10 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
616
610
  // Used by the QR device flow (`handleWebSession`), password sign-in, 2FA
617
611
  // completion, and the cold boot.
618
612
  const commitSession = useCallback(
619
- async (input: CommitInput, options: { activate: boolean }): Promise<void> => {
613
+ async (
614
+ input: CommitInput,
615
+ options: { activate: boolean; hubSync?: boolean },
616
+ ): Promise<void> => {
620
617
  if (input.accessToken) {
621
618
  oxyServices.setTokens(input.accessToken);
622
619
  }
@@ -684,8 +681,21 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
684
681
  onAuthStateChange: onAuthStateChangeRef.current,
685
682
  markAuthResolved: markAuthResolvedRef.current,
686
683
  });
684
+
685
+ // Post-sign-in hub sync — a full-page redirect to auth.oxy.so. Gated HERE,
686
+ // inside the ONE commit funnel, so NO commit path (QR device flow,
687
+ // password/2FA through the account dialog, passkey, popup OAuth, cold
688
+ // boot) can bounce a `webAuthMode: 'popup'` tab to the IdP. See
689
+ // `maybeSyncHubAfterCommit` for the full gate list.
690
+ await maybeSyncHubAfterCommit({
691
+ activate: options.activate,
692
+ hubSyncRequested: options.hubSync === true,
693
+ hubSyncEnabled: hubSync,
694
+ webAuthMode,
695
+ syncHub: () => syncHubAfterSignIn(oxyServices, { enabled: hubSync }),
696
+ });
687
697
  },
688
- [oxyServices, authStore, updateSessions, setActiveSessionId, sessionClient, sessionClientHost, syncFromClient, loginSuccess, logger],
698
+ [oxyServices, authStore, updateSessions, setActiveSessionId, sessionClient, sessionClientHost, syncFromClient, loginSuccess, logger, hubSync, webAuthMode],
689
699
  );
690
700
  const commitSessionRef = useRef(commitSession);
691
701
  commitSessionRef.current = commitSession;
@@ -707,16 +717,16 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
707
717
  userId: session.user.id,
708
718
  user: session.user,
709
719
  },
710
- { activate: true },
720
+ { activate: true, hubSync: true },
711
721
  );
712
722
  },
713
723
  [commitSession],
714
724
  );
715
725
 
716
- // Commit a minted graph-SWITCH session through the same funnel as
717
- // `handleWebSession`. Nothing extra to do IN-PLACE: the switch already
718
- // propagates across tabs/apps via the server's `session_state` socket
719
- // broadcast.
726
+ // Commit a minted graph-SWITCH session. Same funnel as `handleWebSession` but
727
+ // IN-PLACE: `hubSync: false` so switching accounts never triggers the
728
+ // cross-origin hub-sync full-page redirect. The switch already propagates
729
+ // across tabs/apps via the server's `session_state` socket broadcast.
720
730
  const commitSwitchedSession = useCallback(
721
731
  async (session: SessionLoginResponse): Promise<void> => {
722
732
  if (!session?.user || !session?.sessionId || !session.accessToken) {
@@ -732,7 +742,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
732
742
  userId: session.user.id,
733
743
  user: session.user,
734
744
  },
735
- { activate: true },
745
+ { activate: true, hubSync: false },
736
746
  );
737
747
  },
738
748
  [commitSession],
@@ -743,6 +753,11 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
743
753
  // to, so no consumer ever writes popup listeners or a token exchange. The
744
754
  // transport picks popup vs redirect from `webAuthMode`; both lanes land on the
745
755
  // SAME completion path (`completeOAuthCode`) and the same commit funnel here.
756
+ //
757
+ // `hubSync: false` is deliberate: hub sync is a full-page redirect to
758
+ // auth.oxy.so, which would undo the one thing popup mode exists to guarantee —
759
+ // that the relying party never leaves its route. It matches how the redirect
760
+ // lane's return leg commits (see `runProviderColdBoot`).
746
761
  const startWebOAuthSignInForContext = useCallback(
747
762
  (options: StartWebOAuthSignInOptions): Promise<WebOAuthSignInResult> =>
748
763
  startWebOAuthSignIn(
@@ -752,7 +767,8 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
752
767
  clientId,
753
768
  authorizeBaseUrl,
754
769
  identityBound: isIdentityBound,
755
- commitSession: (input) => commitSessionRef.current(input, { activate: true }),
770
+ commitSession: (input) =>
771
+ commitSessionRef.current(input, { activate: true, hubSync: false }),
756
772
  },
757
773
  options,
758
774
  ),
@@ -951,7 +967,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
951
967
  getLoginOptions: (username) => oxyServices.webauthnLoginOptions(username),
952
968
  runCeremony: runAuthenticationCeremony,
953
969
  loginVerify: (response, envelope) => oxyServices.webauthnLoginVerify(response, envelope),
954
- commit: (input) => commitSession(input, { activate: true }),
970
+ commit: (input) => commitSession(input, { activate: true, hubSync: true }),
955
971
  username: opts?.username,
956
972
  deviceId: persisted?.deviceId,
957
973
  deviceName: opts?.deviceName,
@@ -969,7 +985,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
969
985
  getRegisterOptions: (username) => oxyServices.webauthnRegisterOptions(username),
970
986
  runCeremony: runRegistrationCeremony,
971
987
  registerVerify: (response, envelope) => oxyServices.webauthnRegisterVerify(response, envelope),
972
- commit: (input) => commitSession(input, { activate: true }),
988
+ commit: (input) => commitSession(input, { activate: true, hubSync: true }),
973
989
  username: params.username,
974
990
  deviceName: params.deviceName,
975
991
  });
@@ -1021,8 +1037,13 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
1021
1037
  authStore,
1022
1038
  clientId: clientIdProp,
1023
1039
  authRedirectUri,
1040
+ authorizeBaseUrl,
1024
1041
  sessionMode,
1025
1042
  identity: identity?.binding,
1043
+ // Popup mode forbids the boot's automatic full-page `prompt=none` restore:
1044
+ // a domain with no local credential resolves signed out instead of
1045
+ // navigating the tab to the IdP (see `allowsAutomaticIdpRedirect`).
1046
+ webAuthMode,
1026
1047
  sessionClient,
1027
1048
  syncDeviceCredentialToHost,
1028
1049
  commitSession: (input, options) => commitSessionRef.current(input, options),
@@ -1040,8 +1061,10 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
1040
1061
  authStore,
1041
1062
  clientIdProp,
1042
1063
  authRedirectUri,
1064
+ authorizeBaseUrl,
1043
1065
  sessionMode,
1044
1066
  identity,
1067
+ webAuthMode,
1045
1068
  syncDeviceCredentialToHost,
1046
1069
  sessionClient,
1047
1070
  ]);
@@ -1197,18 +1220,6 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
1197
1220
  const canUsePrivateApi = authResolved && isAuthenticated && tokenReady && hasAccessToken;
1198
1221
  const isPrivateApiPending = !authResolved || (isAuthenticated && (!tokenReady || !hasAccessToken));
1199
1222
 
1200
- // Keep the native background credential in step with this session, so native
1201
- // background code (a widget worker) can authenticate with no JS runtime. Inert
1202
- // unless the app opted in. Placed AFTER `canUsePrivateApi` because provisioning
1203
- // needs a bearer, and keyed on the signed-in account so a sign-out or an
1204
- // account switch revokes the credential before anything else happens.
1205
- useBackgroundSessionSync({
1206
- enabled: backgroundSession,
1207
- oxyServices,
1208
- userId: user?.id ?? null,
1209
- canUsePrivateApi,
1210
- });
1211
-
1212
1223
  const contextValue: OxyContextState = useMemo(
1213
1224
  () => ({
1214
1225
  user,
@@ -1355,7 +1366,7 @@ const LOADING_STATE: OxyContextState = {
1355
1366
  isAuthResolved: false,
1356
1367
  isStorageReady: false,
1357
1368
  sessionMode: 'account',
1358
- webAuthMode: 'popup',
1369
+ webAuthMode: 'redirect',
1359
1370
  error: null,
1360
1371
  currentLanguage: 'en-US',
1361
1372
  currentLanguages: [],
@@ -1,8 +1,11 @@
1
1
  import type { User } from '@oxyhq/core';
2
2
  import { logger } from '@oxyhq/core';
3
+ import type { WebAuthMode } from '../../oauth/types';
3
4
  import {
4
5
  commitDeviceSetAndResolve,
6
+ maybeSyncHubAfterCommit,
5
7
  type CommitDeviceSetAndResolveDeps,
8
+ type MaybeSyncHubAfterCommitDeps,
6
9
  } from '../commitSessionFlow';
7
10
 
8
11
  // A resolved promise chain (addCurrentAccount -> start -> syncFromClient) settles
@@ -129,19 +132,6 @@ describe('commitDeviceSetAndResolve — cold boot (activate: false)', () => {
129
132
  expect(deps.markAuthResolved).toHaveBeenCalledTimes(1);
130
133
  });
131
134
 
132
- it('falls back to the minimal commit-input user when getCurrentUser returns null', async () => {
133
- const order: string[] = [];
134
- const deps = buildDeps(order, {
135
- getCurrentUser: jest.fn(async () => null),
136
- });
137
-
138
- await commitDeviceSetAndResolve(deps);
139
- await flush();
140
-
141
- expect(deps.loginSuccess).toHaveBeenCalledWith(makeUser('fallback'));
142
- expect(deps.markAuthResolved).toHaveBeenCalledTimes(1);
143
- });
144
-
145
135
  it('logs (never swallows) a failing background reconcile and still resolves', async () => {
146
136
  const warnSpy = jest.spyOn(logger, 'warn').mockImplementation(() => undefined);
147
137
  const order: string[] = [];
@@ -191,6 +181,92 @@ describe('commitDeviceSetAndResolve — cold boot (activate: false)', () => {
191
181
  });
192
182
  });
193
183
 
184
+ /**
185
+ * Post-sign-in hub sync is a FULL-PAGE redirect to auth.oxy.so. It runs from the
186
+ * ONE commit funnel, so gating it here gates every commit path at once —
187
+ * `webAuthMode: 'popup'` must never bounce the tab, whichever path signed the
188
+ * user in (#691 phase 7).
189
+ */
190
+ describe('maybeSyncHubAfterCommit — webAuthMode transport gate (#691 phase 7)', () => {
191
+ const buildHubDeps = (
192
+ overrides: Partial<MaybeSyncHubAfterCommitDeps> = {},
193
+ ): MaybeSyncHubAfterCommitDeps => ({
194
+ activate: true,
195
+ hubSyncRequested: true,
196
+ hubSyncEnabled: true,
197
+ webAuthMode: 'redirect',
198
+ syncHub: jest.fn(async () => true),
199
+ ...overrides,
200
+ });
201
+
202
+ it("redirect mode: syncs the hub after a deliberate sign-in (unchanged)", async () => {
203
+ const deps = buildHubDeps();
204
+
205
+ await expect(maybeSyncHubAfterCommit(deps)).resolves.toBe(true);
206
+
207
+ expect(deps.syncHub).toHaveBeenCalledTimes(1);
208
+ });
209
+
210
+ it('popup mode: NEVER syncs the hub, even on an otherwise-eligible sign-in', async () => {
211
+ const deps = buildHubDeps({ webAuthMode: 'popup' });
212
+
213
+ await expect(maybeSyncHubAfterCommit(deps)).resolves.toBe(false);
214
+
215
+ expect(deps.syncHub).not.toHaveBeenCalled();
216
+ });
217
+
218
+ it('popup mode: no commit path can opt back in', async () => {
219
+ // Every commit path differs only in `activate` / `hubSyncRequested`; the
220
+ // transport gate outranks all of them.
221
+ for (const activate of [true, false]) {
222
+ for (const hubSyncRequested of [true, false]) {
223
+ const deps = buildHubDeps({ webAuthMode: 'popup', activate, hubSyncRequested });
224
+ await expect(maybeSyncHubAfterCommit(deps)).resolves.toBe(false);
225
+ expect(deps.syncHub).not.toHaveBeenCalled();
226
+ }
227
+ }
228
+ });
229
+
230
+ it.each(['popup', 'redirect'] as const)(
231
+ 'never syncs on a cold-boot restore, in either mode (%s)',
232
+ async (webAuthMode: WebAuthMode) => {
233
+ const deps = buildHubDeps({ webAuthMode, activate: false });
234
+
235
+ await expect(maybeSyncHubAfterCommit(deps)).resolves.toBe(false);
236
+
237
+ expect(deps.syncHub).not.toHaveBeenCalled();
238
+ },
239
+ );
240
+
241
+ it('redirect mode: honours the per-commit opt-out (account switch / popup OAuth lanes)', async () => {
242
+ const deps = buildHubDeps({ hubSyncRequested: false });
243
+
244
+ await expect(maybeSyncHubAfterCommit(deps)).resolves.toBe(false);
245
+
246
+ expect(deps.syncHub).not.toHaveBeenCalled();
247
+ });
248
+
249
+ it('redirect mode: honours the provider-level hubSync opt-out', async () => {
250
+ const deps = buildHubDeps({ hubSyncEnabled: false });
251
+
252
+ await expect(maybeSyncHubAfterCommit(deps)).resolves.toBe(false);
253
+
254
+ expect(deps.syncHub).not.toHaveBeenCalled();
255
+ });
256
+
257
+ it('redirect mode: a failing hub sync is non-fatal and never rejects', async () => {
258
+ const deps = buildHubDeps({
259
+ syncHub: jest.fn(async () => {
260
+ throw new Error('hub ticket failed');
261
+ }),
262
+ });
263
+
264
+ await expect(maybeSyncHubAfterCommit(deps)).resolves.toBe(false);
265
+
266
+ expect(deps.syncHub).toHaveBeenCalledTimes(1);
267
+ });
268
+ });
269
+
194
270
  describe('commitDeviceSetAndResolve — deliberate sign-in (activate: true)', () => {
195
271
  it('BLOCKS on the device-set reconcile before resolving auth (unchanged ordering)', async () => {
196
272
  const order: string[] = [];