@oxyhq/services 25.0.1 → 26.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +2 -2
  2. package/android/src/main/java/so/oxy/identity/OxyIdentityStore.kt +127 -21
  3. package/expo-module.config.json +1 -4
  4. package/lib/commonjs/index.js +49 -18
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/notifications/deviceNotifications.js +0 -63
  7. package/lib/commonjs/notifications/deviceNotifications.js.map +1 -1
  8. package/lib/commonjs/ui/boot/runProviderColdBoot.js +64 -20
  9. package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
  10. package/lib/commonjs/ui/components/FollowButton.js +4 -4
  11. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  12. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js +1 -13
  13. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -1
  14. package/lib/commonjs/ui/components/OxyAuthChooser.js +8 -9
  15. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  16. package/lib/commonjs/ui/components/OxyProvider.js +7 -8
  17. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  18. package/lib/commonjs/ui/components/ProfileButton.js +1 -1
  19. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  20. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +30 -25
  21. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  22. package/lib/commonjs/ui/components/authChooser/primitives.js +9 -9
  23. package/lib/commonjs/ui/components/authChooser/primitives.js.map +1 -1
  24. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js +2 -2
  25. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js.map +1 -1
  26. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +2 -2
  27. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  28. package/lib/commonjs/ui/components/internal/PinInput.js +1 -3
  29. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
  30. package/lib/commonjs/ui/components/logo/LogoText.js +4 -4
  31. package/lib/commonjs/ui/components/logo/LogoText.js.map +1 -1
  32. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +2 -2
  33. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  34. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +2 -2
  35. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  36. package/lib/commonjs/ui/components/styles/shadow.js.map +1 -1
  37. package/lib/commonjs/ui/context/OxyContext.js +46 -32
  38. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  39. package/lib/commonjs/ui/context/commitSessionFlow.js +43 -3
  40. package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
  41. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +2 -15
  42. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  43. package/lib/commonjs/ui/context/useOxyAccountGraph.js +4 -3
  44. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
  45. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +5 -5
  46. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
  47. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +11 -11
  48. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  49. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +9 -9
  50. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  51. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js +2 -3
  52. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  53. package/lib/commonjs/ui/hooks/queries/userCache.js +17 -17
  54. package/lib/commonjs/ui/hooks/queries/userCache.js.map +1 -1
  55. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
  56. package/lib/commonjs/ui/hooks/useAsyncAction.js +7 -7
  57. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
  58. package/lib/commonjs/ui/hooks/useAuth.js +2 -4
  59. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  60. package/lib/commonjs/ui/hooks/useAvatarPicker.js +5 -5
  61. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
  62. package/lib/commonjs/ui/hooks/useOnlineStatus.js +2 -3
  63. package/lib/commonjs/ui/hooks/useOnlineStatus.js.map +1 -1
  64. package/lib/commonjs/ui/hooks/useSessionManagement.js +2 -0
  65. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  66. package/lib/commonjs/ui/hooks/useSettingToggle.js +4 -4
  67. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
  68. package/lib/commonjs/ui/hooks/useSurfaceHeader.js +11 -68
  69. package/lib/commonjs/ui/hooks/useSurfaceHeader.js.map +1 -1
  70. package/lib/commonjs/ui/oauth/browserAuthTransport.js +64 -66
  71. package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -1
  72. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js +48 -0
  73. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js.map +1 -0
  74. package/lib/commonjs/ui/oauth/oauthPopup.js +0 -47
  75. package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -1
  76. package/lib/commonjs/ui/screens/AccountMembersScreen.js +10 -10
  77. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +8 -7
  79. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +4 -4
  81. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/AppInfoScreen.js +9 -9
  83. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/AvatarCropScreen.js +3 -3
  85. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js +7 -6
  87. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
  88. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +4 -4
  89. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  90. package/lib/commonjs/ui/screens/CreateAccountScreen.js +3 -3
  91. package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
  92. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +3 -3
  93. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  94. package/lib/commonjs/ui/screens/EditProfileScreen.js +3 -2
  95. package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
  96. package/lib/commonjs/ui/screens/FAQScreen.js +2 -2
  97. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  98. package/lib/commonjs/ui/screens/FeedbackScreen.js +89 -90
  99. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  100. package/lib/commonjs/ui/screens/FileManagementScreen.js +20 -20
  101. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/FollowersListScreen.js.map +1 -1
  103. package/lib/commonjs/ui/screens/FollowingListScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/HelpSupportScreen.js +7 -7
  105. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  106. package/lib/commonjs/ui/screens/HistoryViewScreen.js +34 -9
  107. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  108. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +3 -3
  109. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  110. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +3 -3
  111. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  112. package/lib/commonjs/ui/screens/ManageAccountScreen.js +15 -15
  113. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  114. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +19 -19
  115. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  116. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +15 -15
  117. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  118. package/lib/commonjs/ui/screens/ProfileScreen.js +7 -17
  119. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  120. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +2 -2
  121. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  122. package/lib/commonjs/ui/screens/UserListScreen.js +7 -13
  123. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  124. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +6 -5
  125. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  126. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +4 -1
  127. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  128. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js +24 -34
  129. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  130. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +1 -1
  131. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  132. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +4 -3
  133. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  134. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +1 -1
  135. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  136. package/lib/commonjs/ui/session/index.js +0 -7
  137. package/lib/commonjs/ui/session/index.js.map +1 -1
  138. package/lib/commonjs/ui/utils/crossOriginRestore.js +140 -0
  139. package/lib/commonjs/ui/utils/crossOriginRestore.js.map +1 -0
  140. package/lib/commonjs/ui/utils/fileManagement.js +24 -24
  141. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  142. package/lib/commonjs/ui/utils/oauthReturn.js +30 -19
  143. package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -1
  144. package/lib/commonjs/ui/utils/userUtils.js +28 -27
  145. package/lib/commonjs/ui/utils/userUtils.js.map +1 -1
  146. package/lib/module/index.js +8 -20
  147. package/lib/module/index.js.map +1 -1
  148. package/lib/module/notifications/deviceNotifications.js +0 -62
  149. package/lib/module/notifications/deviceNotifications.js.map +1 -1
  150. package/lib/module/ui/boot/runProviderColdBoot.js +65 -21
  151. package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
  152. package/lib/module/ui/components/FollowButton.js +1 -1
  153. package/lib/module/ui/components/FollowButton.js.map +1 -1
  154. package/lib/module/ui/components/OxyAccountDialogScreen.js +1 -13
  155. package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
  156. package/lib/module/ui/components/OxyAuthChooser.js +4 -5
  157. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  158. package/lib/module/ui/components/OxyProvider.js +6 -7
  159. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  160. package/lib/module/ui/components/ProfileButton.js +2 -2
  161. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  162. package/lib/module/ui/components/authChooser/AccountsMenuView.js +8 -3
  163. package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  164. package/lib/module/ui/components/authChooser/primitives.js +1 -1
  165. package/lib/module/ui/components/authChooser/primitives.js.map +1 -1
  166. package/lib/module/ui/components/authChooser/useUsernameAvailability.js +1 -1
  167. package/lib/module/ui/components/authChooser/useUsernameAvailability.js.map +1 -1
  168. package/lib/module/ui/components/fileManagement/UploadPreview.js +1 -1
  169. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  170. package/lib/module/ui/components/internal/PinInput.js +1 -3
  171. package/lib/module/ui/components/internal/PinInput.js.map +1 -1
  172. package/lib/module/ui/components/logo/LogoText.js +4 -4
  173. package/lib/module/ui/components/logo/LogoText.js.map +1 -1
  174. package/lib/module/ui/components/payment/PaymentDetailsStep.js +1 -1
  175. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  176. package/lib/module/ui/components/payment/PaymentSummaryStep.js +2 -2
  177. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  178. package/lib/module/ui/components/styles/shadow.js.map +1 -1
  179. package/lib/module/ui/context/OxyContext.js +49 -35
  180. package/lib/module/ui/context/OxyContext.js.map +1 -1
  181. package/lib/module/ui/context/commitSessionFlow.js +42 -3
  182. package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
  183. package/lib/module/ui/context/hooks/useAuthOperations.js +2 -15
  184. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  185. package/lib/module/ui/context/useOxyAccountGraph.js +4 -3
  186. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
  187. package/lib/module/ui/hooks/mutations/mutationFactory.js +1 -1
  188. package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
  189. package/lib/module/ui/hooks/mutations/useAccountMutations.js +1 -1
  190. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  191. package/lib/module/ui/hooks/mutations/useServicesMutations.js +1 -1
  192. package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  193. package/lib/module/ui/hooks/queries/usePaymentQueries.js +2 -3
  194. package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  195. package/lib/module/ui/hooks/queries/userCache.js +17 -17
  196. package/lib/module/ui/hooks/queries/userCache.js.map +1 -1
  197. package/lib/module/ui/hooks/useAssets.js.map +1 -1
  198. package/lib/module/ui/hooks/useAsyncAction.js +1 -1
  199. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
  200. package/lib/module/ui/hooks/useAuth.js +2 -4
  201. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  202. package/lib/module/ui/hooks/useAvatarPicker.js +1 -1
  203. package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
  204. package/lib/module/ui/hooks/useOnlineStatus.js +2 -3
  205. package/lib/module/ui/hooks/useOnlineStatus.js.map +1 -1
  206. package/lib/module/ui/hooks/useSessionManagement.js +2 -0
  207. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  208. package/lib/module/ui/hooks/useSettingToggle.js +1 -1
  209. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
  210. package/lib/module/ui/hooks/useSurfaceHeader.js +11 -68
  211. package/lib/module/ui/hooks/useSurfaceHeader.js.map +1 -1
  212. package/lib/module/ui/oauth/browserAuthTransport.js +64 -66
  213. package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -1
  214. package/lib/module/ui/oauth/legacyRedirectLanes.js +44 -0
  215. package/lib/module/ui/oauth/legacyRedirectLanes.js.map +1 -0
  216. package/lib/module/ui/oauth/oauthPopup.js +1 -48
  217. package/lib/module/ui/oauth/oauthPopup.js.map +1 -1
  218. package/lib/module/ui/screens/AccountMembersScreen.js +1 -1
  219. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  220. package/lib/module/ui/screens/AccountSettingsScreen.js +4 -3
  221. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  222. package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
  223. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  224. package/lib/module/ui/screens/AppInfoScreen.js +1 -1
  225. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  226. package/lib/module/ui/screens/AvatarCropScreen.js +1 -1
  227. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  228. package/lib/module/ui/screens/ChangeAvatarScreen.js +5 -4
  229. package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -1
  230. package/lib/module/ui/screens/ConnectedAppsScreen.js +2 -2
  231. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  232. package/lib/module/ui/screens/CreateAccountScreen.js +1 -1
  233. package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
  234. package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
  235. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  236. package/lib/module/ui/screens/EditProfileScreen.js +4 -3
  237. package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
  238. package/lib/module/ui/screens/FAQScreen.js +1 -1
  239. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  240. package/lib/module/ui/screens/FeedbackScreen.js +91 -94
  241. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  242. package/lib/module/ui/screens/FileManagementScreen.js +1 -1
  243. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  244. package/lib/module/ui/screens/FollowersListScreen.js.map +1 -1
  245. package/lib/module/ui/screens/FollowingListScreen.js.map +1 -1
  246. package/lib/module/ui/screens/HelpSupportScreen.js +1 -1
  247. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  248. package/lib/module/ui/screens/HistoryViewScreen.js +30 -5
  249. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  250. package/lib/module/ui/screens/LanguageSelectorScreen.js +1 -1
  251. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  252. package/lib/module/ui/screens/LegalDocumentsScreen.js +1 -1
  253. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  254. package/lib/module/ui/screens/ManageAccountScreen.js +3 -3
  255. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  256. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +4 -4
  257. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  258. package/lib/module/ui/screens/PrivacySettingsScreen.js +11 -11
  259. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  260. package/lib/module/ui/screens/ProfileScreen.js +8 -18
  261. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  262. package/lib/module/ui/screens/SavesCollectionsScreen.js +1 -1
  263. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  264. package/lib/module/ui/screens/UserListScreen.js +8 -14
  265. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  266. package/lib/module/ui/screens/WelcomeNewUserScreen.js +6 -5
  267. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  268. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +4 -1
  269. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  270. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js +5 -15
  271. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  272. package/lib/module/ui/screens/trust/TrustCenterScreen.js +1 -1
  273. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  274. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +5 -4
  275. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  276. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +1 -1
  277. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  278. package/lib/module/ui/session/index.js +0 -1
  279. package/lib/module/ui/session/index.js.map +1 -1
  280. package/lib/module/ui/utils/crossOriginRestore.js +131 -0
  281. package/lib/module/ui/utils/crossOriginRestore.js.map +1 -0
  282. package/lib/module/ui/utils/fileManagement.js +25 -25
  283. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  284. package/lib/module/ui/utils/oauthReturn.js +30 -20
  285. package/lib/module/ui/utils/oauthReturn.js.map +1 -1
  286. package/lib/module/ui/utils/userUtils.js +28 -27
  287. package/lib/module/ui/utils/userUtils.js.map +1 -1
  288. package/lib/typescript/commonjs/index.d.ts +2 -0
  289. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  290. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts +0 -51
  291. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +30 -11
  293. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  294. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  295. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +0 -7
  296. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  297. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  298. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  300. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts +1 -1
  301. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts +1 -1
  303. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/ui/components/internal/PinInput.d.ts.map +1 -1
  305. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +6 -6
  306. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  307. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  308. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts +40 -0
  309. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts +2 -11
  311. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +7 -26
  313. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +1 -0
  315. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  316. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/ui/hooks/queries/paymentTypes.d.ts +2 -3
  318. package/lib/typescript/commonjs/ui/hooks/queries/paymentTypes.d.ts.map +1 -1
  319. package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts +2 -3
  320. package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
  321. package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts +2 -2
  322. package/lib/typescript/commonjs/ui/hooks/queries/userCache.d.ts.map +1 -1
  323. package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts +1 -1
  324. package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts.map +1 -1
  325. package/lib/typescript/commonjs/ui/hooks/useAsyncAction.d.ts +2 -2
  326. package/lib/typescript/commonjs/ui/hooks/useAsyncAction.d.ts.map +1 -1
  327. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +2 -4
  328. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  329. package/lib/typescript/commonjs/ui/hooks/useOnlineStatus.d.ts +2 -3
  330. package/lib/typescript/commonjs/ui/hooks/useOnlineStatus.d.ts.map +1 -1
  331. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  332. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts +2 -7
  333. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts.map +1 -1
  334. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  335. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  336. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  337. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts +0 -6
  338. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -1
  339. package/lib/typescript/commonjs/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  340. package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
  341. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts +2 -2
  342. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  343. package/lib/typescript/commonjs/ui/screens/FollowersListScreen.d.ts +0 -3
  344. package/lib/typescript/commonjs/ui/screens/FollowersListScreen.d.ts.map +1 -1
  345. package/lib/typescript/commonjs/ui/screens/FollowingListScreen.d.ts +0 -3
  346. package/lib/typescript/commonjs/ui/screens/FollowingListScreen.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  348. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  349. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  350. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  351. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts +0 -7
  352. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  353. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  354. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  355. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  356. package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts +1 -1
  357. package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts.map +1 -1
  358. package/lib/typescript/commonjs/ui/session/index.d.ts +0 -1
  359. package/lib/typescript/commonjs/ui/session/index.d.ts.map +1 -1
  360. package/lib/typescript/commonjs/ui/types/navigation.d.ts +19 -27
  361. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  362. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts +43 -0
  363. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts.map +1 -0
  364. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +5 -5
  365. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  366. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +12 -15
  367. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -1
  368. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts +14 -7
  369. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts.map +1 -1
  370. package/lib/typescript/module/index.d.ts +2 -0
  371. package/lib/typescript/module/index.d.ts.map +1 -1
  372. package/lib/typescript/module/notifications/deviceNotifications.d.ts +0 -51
  373. package/lib/typescript/module/notifications/deviceNotifications.d.ts.map +1 -1
  374. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +30 -11
  375. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  376. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  377. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +0 -7
  378. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  379. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  380. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  381. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  382. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts +1 -1
  383. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts.map +1 -1
  384. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts +1 -1
  385. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  386. package/lib/typescript/module/ui/components/internal/PinInput.d.ts.map +1 -1
  387. package/lib/typescript/module/ui/components/payment/types.d.ts +6 -6
  388. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  389. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  390. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts +40 -0
  391. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
  392. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts +2 -11
  393. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  394. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +7 -26
  395. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  396. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +1 -0
  397. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  398. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  399. package/lib/typescript/module/ui/hooks/queries/paymentTypes.d.ts +2 -3
  400. package/lib/typescript/module/ui/hooks/queries/paymentTypes.d.ts.map +1 -1
  401. package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts +2 -3
  402. package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts.map +1 -1
  403. package/lib/typescript/module/ui/hooks/queries/userCache.d.ts +2 -2
  404. package/lib/typescript/module/ui/hooks/queries/userCache.d.ts.map +1 -1
  405. package/lib/typescript/module/ui/hooks/useAssets.d.ts +1 -1
  406. package/lib/typescript/module/ui/hooks/useAssets.d.ts.map +1 -1
  407. package/lib/typescript/module/ui/hooks/useAsyncAction.d.ts +2 -2
  408. package/lib/typescript/module/ui/hooks/useAsyncAction.d.ts.map +1 -1
  409. package/lib/typescript/module/ui/hooks/useAuth.d.ts +2 -4
  410. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  411. package/lib/typescript/module/ui/hooks/useOnlineStatus.d.ts +2 -3
  412. package/lib/typescript/module/ui/hooks/useOnlineStatus.d.ts.map +1 -1
  413. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  414. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts +2 -7
  415. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts.map +1 -1
  416. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  417. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  418. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  419. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts +0 -6
  420. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -1
  421. package/lib/typescript/module/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  422. package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -1
  423. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts +2 -2
  424. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  425. package/lib/typescript/module/ui/screens/FollowersListScreen.d.ts +0 -3
  426. package/lib/typescript/module/ui/screens/FollowersListScreen.d.ts.map +1 -1
  427. package/lib/typescript/module/ui/screens/FollowingListScreen.d.ts +0 -3
  428. package/lib/typescript/module/ui/screens/FollowingListScreen.d.ts.map +1 -1
  429. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  430. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  431. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  432. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  433. package/lib/typescript/module/ui/screens/UserListScreen.d.ts +0 -7
  434. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  435. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  436. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  437. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  438. package/lib/typescript/module/ui/screens/trust/trustTier.d.ts +1 -1
  439. package/lib/typescript/module/ui/screens/trust/trustTier.d.ts.map +1 -1
  440. package/lib/typescript/module/ui/session/index.d.ts +0 -1
  441. package/lib/typescript/module/ui/session/index.d.ts.map +1 -1
  442. package/lib/typescript/module/ui/types/navigation.d.ts +19 -27
  443. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  444. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts +43 -0
  445. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts.map +1 -0
  446. package/lib/typescript/module/ui/utils/fileManagement.d.ts +5 -5
  447. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  448. package/lib/typescript/module/ui/utils/oauthReturn.d.ts +12 -15
  449. package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -1
  450. package/lib/typescript/module/ui/utils/userUtils.d.ts +14 -7
  451. package/lib/typescript/module/ui/utils/userUtils.d.ts.map +1 -1
  452. package/package.json +10 -22
  453. package/src/index.ts +16 -18
  454. package/src/notifications/deviceNotifications.ts +0 -82
  455. package/src/ui/boot/__tests__/coldBootWebAuthMode.test.ts +281 -0
  456. package/src/ui/boot/runProviderColdBoot.ts +101 -24
  457. package/src/ui/components/FollowButton.tsx +1 -1
  458. package/src/ui/components/OxyAccountDialogScreen.tsx +1 -13
  459. package/src/ui/components/OxyAuthChooser.tsx +4 -14
  460. package/src/ui/components/OxyProvider.tsx +7 -8
  461. package/src/ui/components/ProfileButton.tsx +2 -5
  462. package/src/ui/components/authChooser/AccountsMenuView.tsx +10 -5
  463. package/src/ui/components/authChooser/primitives.tsx +1 -1
  464. package/src/ui/components/authChooser/useUsernameAvailability.ts +1 -1
  465. package/src/ui/components/fileManagement/UploadPreview.tsx +1 -1
  466. package/src/ui/components/internal/PinInput.tsx +0 -1
  467. package/src/ui/components/logo/LogoText.tsx +4 -4
  468. package/src/ui/components/payment/PaymentDetailsStep.tsx +1 -1
  469. package/src/ui/components/payment/PaymentSummaryStep.tsx +2 -2
  470. package/src/ui/components/payment/types.ts +24 -24
  471. package/src/ui/components/styles/shadow.tsx +2 -2
  472. package/src/ui/context/OxyContext.tsx +46 -35
  473. package/src/ui/context/__tests__/commitSessionFlow.test.ts +89 -13
  474. package/src/ui/context/commitSessionFlow.ts +61 -3
  475. package/src/ui/context/hooks/useAuthOperations.ts +1 -26
  476. package/src/ui/context/oxyContextTypes.ts +7 -26
  477. package/src/ui/context/useOxyAccountGraph.ts +4 -4
  478. package/src/ui/hooks/mutations/mutationFactory.ts +1 -1
  479. package/src/ui/hooks/mutations/useAccountMutations.ts +1 -1
  480. package/src/ui/hooks/mutations/useServicesMutations.ts +1 -1
  481. package/src/ui/hooks/queries/paymentTypes.ts +2 -3
  482. package/src/ui/hooks/queries/usePaymentQueries.ts +2 -3
  483. package/src/ui/hooks/queries/userCache.ts +148 -169
  484. package/src/ui/hooks/useAssets.ts +1 -1
  485. package/src/ui/hooks/useAsyncAction.ts +3 -3
  486. package/src/ui/hooks/useAuth.ts +2 -4
  487. package/src/ui/hooks/useAvatarPicker.ts +1 -1
  488. package/src/ui/hooks/useOnlineStatus.ts +2 -3
  489. package/src/ui/hooks/useSessionManagement.ts +2 -0
  490. package/src/ui/hooks/useSettingToggle.ts +1 -1
  491. package/src/ui/hooks/useSurfaceHeader.ts +15 -90
  492. package/src/ui/oauth/__tests__/oauthPopup.test.ts +0 -26
  493. package/src/ui/oauth/browserAuthTransport.ts +49 -55
  494. package/src/ui/oauth/legacyRedirectLanes.ts +43 -0
  495. package/src/ui/oauth/oauthPopup.ts +3 -61
  496. package/src/ui/screens/AccountMembersScreen.tsx +1 -1
  497. package/src/ui/screens/AccountSettingsScreen.tsx +5 -5
  498. package/src/ui/screens/AccountVerificationScreen.tsx +1 -1
  499. package/src/ui/screens/AppInfoScreen.tsx +1 -1
  500. package/src/ui/screens/AvatarCropScreen.tsx +1 -1
  501. package/src/ui/screens/ChangeAvatarScreen.tsx +4 -7
  502. package/src/ui/screens/ConnectedAppsScreen.tsx +2 -2
  503. package/src/ui/screens/CreateAccountScreen.tsx +1 -1
  504. package/src/ui/screens/EditProfileFieldScreen.tsx +1 -1
  505. package/src/ui/screens/EditProfileScreen.tsx +3 -6
  506. package/src/ui/screens/FAQScreen.tsx +1 -1
  507. package/src/ui/screens/FeedbackScreen.tsx +575 -741
  508. package/src/ui/screens/FileManagementScreen.tsx +1 -1
  509. package/src/ui/screens/FollowersListScreen.tsx +0 -3
  510. package/src/ui/screens/FollowingListScreen.tsx +0 -3
  511. package/src/ui/screens/HelpSupportScreen.tsx +1 -1
  512. package/src/ui/screens/HistoryViewScreen.tsx +20 -5
  513. package/src/ui/screens/LanguageSelectorScreen.tsx +1 -1
  514. package/src/ui/screens/LegalDocumentsScreen.tsx +1 -1
  515. package/src/ui/screens/ManageAccountScreen.tsx +2 -9
  516. package/src/ui/screens/PremiumSubscriptionScreen.tsx +4 -4
  517. package/src/ui/screens/PrivacySettingsScreen.tsx +12 -15
  518. package/src/ui/screens/ProfileScreen.tsx +6 -24
  519. package/src/ui/screens/SavesCollectionsScreen.tsx +1 -1
  520. package/src/ui/screens/UserListScreen.tsx +8 -18
  521. package/src/ui/screens/WelcomeNewUserScreen.tsx +6 -6
  522. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +1 -1
  523. package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +5 -14
  524. package/src/ui/screens/trust/TrustCenterScreen.tsx +2 -2
  525. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +5 -6
  526. package/src/ui/screens/trust/TrustRewardsScreen.tsx +1 -1
  527. package/src/ui/screens/trust/TrustRulesScreen.tsx +1 -1
  528. package/src/ui/screens/trust/trustTier.ts +1 -1
  529. package/src/ui/session/index.ts +0 -1
  530. package/src/ui/types/navigation.ts +19 -27
  531. package/src/ui/utils/__tests__/crossOriginRestore.test.ts +143 -0
  532. package/src/ui/utils/crossOriginRestore.ts +169 -0
  533. package/src/ui/utils/fileManagement.ts +92 -108
  534. package/src/ui/utils/oauthReturn.ts +33 -23
  535. package/src/ui/utils/userUtils.ts +32 -27
  536. package/android/src/main/java/so/oxy/session/OxyBackgroundSession.kt +0 -184
  537. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionApi.kt +0 -162
  538. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionModule.kt +0 -116
  539. package/android/src/main/java/so/oxy/session/OxyBackgroundSessionStore.kt +0 -179
  540. package/android/src/main/java/so/oxy/session/OxyBackgroundToken.kt +0 -61
  541. package/android/src/main/java/so/oxy/storage/OxyEncryptedPrefs.kt +0 -241
  542. package/lib/commonjs/ui/session/backgroundSession.js +0 -258
  543. package/lib/commonjs/ui/session/backgroundSession.js.map +0 -1
  544. package/lib/commonjs/ui/session/useBackgroundSessionSync.js +0 -81
  545. package/lib/commonjs/ui/session/useBackgroundSessionSync.js.map +0 -1
  546. package/lib/commonjs/ui/utils/netConnectivity.js +0 -28
  547. package/lib/commonjs/ui/utils/netConnectivity.js.map +0 -1
  548. package/lib/module/ui/session/backgroundSession.js +0 -252
  549. package/lib/module/ui/session/backgroundSession.js.map +0 -1
  550. package/lib/module/ui/session/useBackgroundSessionSync.js +0 -76
  551. package/lib/module/ui/session/useBackgroundSessionSync.js.map +0 -1
  552. package/lib/module/ui/utils/netConnectivity.js +0 -23
  553. package/lib/module/ui/utils/netConnectivity.js.map +0 -1
  554. package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts +0 -42
  555. package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts.map +0 -1
  556. package/lib/typescript/commonjs/ui/session/useBackgroundSessionSync.d.ts +0 -23
  557. package/lib/typescript/commonjs/ui/session/useBackgroundSessionSync.d.ts.map +0 -1
  558. package/lib/typescript/commonjs/ui/utils/netConnectivity.d.ts +0 -17
  559. package/lib/typescript/commonjs/ui/utils/netConnectivity.d.ts.map +0 -1
  560. package/lib/typescript/module/ui/session/backgroundSession.d.ts +0 -42
  561. package/lib/typescript/module/ui/session/backgroundSession.d.ts.map +0 -1
  562. package/lib/typescript/module/ui/session/useBackgroundSessionSync.d.ts +0 -23
  563. package/lib/typescript/module/ui/session/useBackgroundSessionSync.d.ts.map +0 -1
  564. package/lib/typescript/module/ui/utils/netConnectivity.d.ts +0 -17
  565. package/lib/typescript/module/ui/utils/netConnectivity.d.ts.map +0 -1
  566. package/src/ui/boot/__tests__/coldBootNoIdpRedirect.test.ts +0 -215
  567. package/src/ui/session/__tests__/backgroundSession.test.ts +0 -392
  568. package/src/ui/session/backgroundSession.ts +0 -313
  569. package/src/ui/session/useBackgroundSessionSync.ts +0 -92
  570. package/src/ui/utils/netConnectivity.ts +0 -27
@@ -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[] = [];
@@ -1,5 +1,8 @@
1
1
  import type { User } from '@oxyhq/core';
2
2
  import { logger as loggerUtil } from '@oxyhq/core';
3
+ import { allowsAutomaticIdpRedirect } from '../oauth/legacyRedirectLanes';
4
+ import type { WebAuthMode } from '../oauth/types';
5
+ import { isWebBrowser } from '../utils/isWebBrowser';
3
6
  import { isUnauthorizedStatus } from './oxyContextHelpers';
4
7
 
5
8
  const LOG_CONTEXT = { component: 'OxyContext', method: 'commitSession' } as const;
@@ -98,9 +101,6 @@ export async function commitDeviceSetAndResolve(
98
101
  }
99
102
  fullUser = fallbackUser;
100
103
  }
101
- if (!fullUser) {
102
- fullUser = fallbackUser;
103
- }
104
104
  if (fullUser) {
105
105
  loginSuccess(fullUser);
106
106
  onAuthStateChange?.(fullUser);
@@ -126,3 +126,61 @@ export async function commitDeviceSetAndResolve(
126
126
  await hydrateAndResolve();
127
127
  void reconcileDeviceSet().catch(logReconcileError);
128
128
  }
129
+
130
+ export interface MaybeSyncHubAfterCommitDeps {
131
+ /** Deliberate sign-in (`true`) vs. a cold-boot / background commit (`false`). */
132
+ activate: boolean;
133
+ /** Per-commit opt-in — `commitSession`'s `options.hubSync`. */
134
+ hubSyncRequested: boolean;
135
+ /** Provider-level opt-out — `OxyProviderProps.hubSync`. */
136
+ hubSyncEnabled: boolean;
137
+ /**
138
+ * The provider's web sign-in transport — `OxyProviderProps.webAuthMode`.
139
+ * A first-class input: `'popup'` forbids the redirect outright.
140
+ */
141
+ webAuthMode: WebAuthMode;
142
+ /**
143
+ * Starts the full-page hop to `auth.oxy.so/sync`; resolves `true` when the
144
+ * navigation was actually started.
145
+ */
146
+ syncHub: () => Promise<boolean>;
147
+ }
148
+
149
+ /**
150
+ * Post-sign-in hub sync: plant this device's credential on the IdP hub so OTHER
151
+ * official origins can silently restore a session on their next cold boot.
152
+ *
153
+ * The tail of the ONE commit funnel (`commitSession`), extracted so every gate
154
+ * on this legacy lane lives — and is tested — in one place. Returns whether the
155
+ * full-page redirect was started; a failure is non-fatal and never propagates
156
+ * (the sign-in itself already succeeded).
157
+ *
158
+ * Four gates, all of which must pass:
159
+ * 1. `activate` — only a deliberate sign-in syncs; a cold-boot restore never does.
160
+ * 2. `hubSyncRequested` — the in-place lanes (account switch, popup OAuth) opt out.
161
+ * 3. `hubSyncEnabled` — the provider-level `hubSync` prop.
162
+ * 4. `allowsAutomaticIdpRedirect(webAuthMode)` — hub sync REPLACES the document
163
+ * with `auth.oxy.so`, so `webAuthMode: 'popup'` forbids it: a redirect that
164
+ * bounces the tab defeats the entire point of the mode, no matter which
165
+ * commit path produced the session (issue #691, "Cold boot and cross-domain
166
+ * behavior"). Redirect mode — the default and the compatibility path — is
167
+ * unchanged, and this whole function disappears with it in phase 7b.
168
+ */
169
+ export async function maybeSyncHubAfterCommit(
170
+ deps: MaybeSyncHubAfterCommitDeps,
171
+ ): Promise<boolean> {
172
+ const { activate, hubSyncRequested, hubSyncEnabled, webAuthMode, syncHub } = deps;
173
+
174
+ if (!activate || !hubSyncRequested || !hubSyncEnabled) return false;
175
+ if (!allowsAutomaticIdpRedirect(webAuthMode)) return false;
176
+ if (!isWebBrowser()) return false;
177
+
178
+ try {
179
+ return await syncHub();
180
+ } catch (hubError) {
181
+ if (__DEV__) {
182
+ loggerUtil.debug('Hub sync after sign-in failed (non-fatal)', LOG_CONTEXT, hubError);
183
+ }
184
+ return false;
185
+ }
186
+ }