@oxyhq/services 22.12.4 → 22.12.7

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 (639) hide show
  1. package/README.md +16 -46
  2. package/lib/commonjs/index.js +84 -10
  3. package/lib/commonjs/index.js.map +1 -1
  4. package/lib/commonjs/notifications/deviceNotifications.js +380 -0
  5. package/lib/commonjs/notifications/deviceNotifications.js.map +1 -0
  6. package/lib/commonjs/ui/boot/runProviderColdBoot.js +51 -9
  7. package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
  8. package/lib/commonjs/ui/client.js +0 -13
  9. package/lib/commonjs/ui/client.js.map +1 -1
  10. package/lib/commonjs/ui/components/AvatarCameraBadge.js +3 -2
  11. package/lib/commonjs/ui/components/AvatarCameraBadge.js.map +1 -1
  12. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js +14 -3
  13. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -1
  14. package/lib/commonjs/ui/components/OxyAuthChooser.js +70 -1121
  15. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  16. package/lib/commonjs/ui/components/OxyConsentScreen.js +50 -12
  17. package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
  18. package/lib/commonjs/ui/components/OxyProvider.js +4 -4
  19. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  20. package/lib/commonjs/ui/components/OxySignInButton.js +74 -40
  21. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  22. package/lib/commonjs/ui/components/OxySignInRequestSurface.js +147 -0
  23. package/lib/commonjs/ui/components/OxySignInRequestSurface.js.map +1 -0
  24. package/lib/commonjs/ui/components/ProfileButton.js +4 -3
  25. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  26. package/lib/commonjs/ui/components/SettingsIcon.js +3 -2
  27. package/lib/commonjs/ui/components/SettingsIcon.js.map +1 -1
  28. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +527 -0
  29. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -0
  30. package/lib/commonjs/ui/components/authChooser/SignInEntryView.js +90 -0
  31. package/lib/commonjs/ui/components/authChooser/SignInEntryView.js.map +1 -0
  32. package/lib/commonjs/ui/components/authChooser/SignInRequestView.js +106 -0
  33. package/lib/commonjs/ui/components/authChooser/SignInRequestView.js.map +1 -0
  34. package/lib/commonjs/ui/components/authChooser/SignUpView.js +188 -0
  35. package/lib/commonjs/ui/components/authChooser/SignUpView.js.map +1 -0
  36. package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js +61 -0
  37. package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js.map +1 -0
  38. package/lib/commonjs/ui/components/authChooser/primitives.js +170 -0
  39. package/lib/commonjs/ui/components/authChooser/primitives.js.map +1 -0
  40. package/lib/commonjs/ui/components/authChooser/requestSurfaces.js +153 -0
  41. package/lib/commonjs/ui/components/authChooser/requestSurfaces.js.map +1 -0
  42. package/lib/commonjs/ui/components/authChooser/signInProgress.js +54 -0
  43. package/lib/commonjs/ui/components/authChooser/signInProgress.js.map +1 -0
  44. package/lib/commonjs/ui/components/{oxyAuthChooserStyles.js → authChooser/styles.js} +19 -1
  45. package/lib/commonjs/ui/components/authChooser/styles.js.map +1 -0
  46. package/lib/commonjs/ui/components/authChooser/types.js +70 -0
  47. package/lib/commonjs/ui/components/authChooser/types.js.map +1 -0
  48. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js +50 -0
  49. package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js.map +1 -0
  50. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js +3 -2
  51. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  52. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +3 -2
  53. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  54. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +15 -14
  55. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  56. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +6 -5
  57. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  58. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +3 -2
  59. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  60. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +6 -6
  61. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  62. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +5 -5
  63. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  64. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +10 -9
  65. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  66. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +4 -3
  67. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  68. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +6 -5
  69. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  70. package/lib/commonjs/ui/context/OxyContext.js +200 -29
  71. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  72. package/lib/commonjs/ui/context/commitSessionFlow.js +43 -0
  73. package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
  74. package/lib/commonjs/ui/context/useOxyAccountGraph.js +13 -5
  75. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
  76. package/lib/commonjs/ui/hooks/useSwitchableAccounts.js +6 -1
  77. package/lib/commonjs/ui/hooks/useSwitchableAccounts.js.map +1 -1
  78. package/lib/commonjs/ui/index.js +0 -13
  79. package/lib/commonjs/ui/index.js.map +1 -1
  80. package/lib/commonjs/ui/oauth/browserAuthTransport.js +168 -0
  81. package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -0
  82. package/lib/commonjs/ui/oauth/completeOAuthCode.js +78 -0
  83. package/lib/commonjs/ui/oauth/completeOAuthCode.js.map +1 -0
  84. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js +48 -0
  85. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js.map +1 -0
  86. package/lib/commonjs/ui/oauth/oauthHandshake.js +53 -0
  87. package/lib/commonjs/ui/oauth/oauthHandshake.js.map +1 -0
  88. package/lib/commonjs/ui/oauth/oauthPopup.js +229 -0
  89. package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -0
  90. package/lib/commonjs/ui/oauth/oauthPopupMessages.js +141 -0
  91. package/lib/commonjs/ui/oauth/oauthPopupMessages.js.map +1 -0
  92. package/lib/commonjs/ui/oauth/types.js +2 -0
  93. package/lib/commonjs/ui/oauth/types.js.map +1 -0
  94. package/lib/commonjs/ui/screens/AccountMembersScreen.js +4 -3
  95. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  96. package/lib/commonjs/ui/screens/CreateAccountScreen.js +7 -6
  97. package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
  98. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +4 -3
  99. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  100. package/lib/commonjs/ui/screens/FAQScreen.js +3 -2
  101. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/FeedbackScreen.js +11 -10
  103. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/FileManagementScreen.js +19 -18
  105. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  106. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +4 -3
  107. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  108. package/lib/commonjs/ui/screens/ManageAccountScreen.js +2 -2
  109. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  110. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +3 -3
  111. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  112. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +9 -8
  113. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  114. package/lib/commonjs/ui/screens/ProfileScreen.js +10 -10
  115. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  116. package/lib/commonjs/ui/screens/UserListScreen.js +3 -3
  117. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  118. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +3 -2
  119. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  120. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js +4 -3
  121. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
  122. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js +4 -3
  123. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -1
  124. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +4 -3
  125. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  126. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js +3 -2
  127. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -1
  128. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +3 -2
  129. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  130. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +4 -3
  131. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  132. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +4 -3
  133. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  134. package/lib/commonjs/ui/server.js +2 -5
  135. package/lib/commonjs/ui/server.js.map +1 -1
  136. package/lib/commonjs/ui/session/authStore.js +6 -75
  137. package/lib/commonjs/ui/session/authStore.js.map +1 -1
  138. package/lib/commonjs/ui/session/createSessionClient.js +11 -3
  139. package/lib/commonjs/ui/session/createSessionClient.js.map +1 -1
  140. package/lib/commonjs/ui/session/identityBinding.js +95 -0
  141. package/lib/commonjs/ui/session/identityBinding.js.map +1 -0
  142. package/lib/commonjs/ui/session/index.js +13 -0
  143. package/lib/commonjs/ui/session/index.js.map +1 -1
  144. package/lib/commonjs/ui/session/nativeSecureStorage.js +90 -0
  145. package/lib/commonjs/ui/session/nativeSecureStorage.js.map +1 -0
  146. package/lib/commonjs/ui/session/tokenTransport.js +11 -1
  147. package/lib/commonjs/ui/session/tokenTransport.js.map +1 -1
  148. package/lib/commonjs/ui/utils/crossOriginRestore.js +3 -2
  149. package/lib/commonjs/ui/utils/crossOriginRestore.js.map +1 -1
  150. package/lib/commonjs/ui/utils/deliveryPlatform.js +58 -0
  151. package/lib/commonjs/ui/utils/deliveryPlatform.js.map +1 -0
  152. package/lib/commonjs/ui/utils/oauthReturn.js +70 -46
  153. package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -1
  154. package/lib/module/index.js +27 -4
  155. package/lib/module/index.js.map +1 -1
  156. package/lib/module/notifications/deviceNotifications.js +371 -0
  157. package/lib/module/notifications/deviceNotifications.js.map +1 -0
  158. package/lib/module/ui/boot/runProviderColdBoot.js +51 -9
  159. package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
  160. package/lib/module/ui/client.js +0 -1
  161. package/lib/module/ui/client.js.map +1 -1
  162. package/lib/module/ui/components/AvatarCameraBadge.js +1 -1
  163. package/lib/module/ui/components/AvatarCameraBadge.js.map +1 -1
  164. package/lib/module/ui/components/OxyAccountDialogScreen.js +14 -3
  165. package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
  166. package/lib/module/ui/components/OxyAuthChooser.js +74 -1126
  167. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  168. package/lib/module/ui/components/OxyConsentScreen.js +50 -12
  169. package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
  170. package/lib/module/ui/components/OxyProvider.js +4 -4
  171. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  172. package/lib/module/ui/components/OxySignInButton.js +76 -42
  173. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  174. package/lib/module/ui/components/OxySignInRequestSurface.js +141 -0
  175. package/lib/module/ui/components/OxySignInRequestSurface.js.map +1 -0
  176. package/lib/module/ui/components/ProfileButton.js +1 -1
  177. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  178. package/lib/module/ui/components/SettingsIcon.js +1 -1
  179. package/lib/module/ui/components/SettingsIcon.js.map +1 -1
  180. package/lib/module/ui/components/authChooser/AccountsMenuView.js +523 -0
  181. package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -0
  182. package/lib/module/ui/components/authChooser/SignInEntryView.js +85 -0
  183. package/lib/module/ui/components/authChooser/SignInEntryView.js.map +1 -0
  184. package/lib/module/ui/components/authChooser/SignInRequestView.js +101 -0
  185. package/lib/module/ui/components/authChooser/SignInRequestView.js.map +1 -0
  186. package/lib/module/ui/components/authChooser/SignUpView.js +184 -0
  187. package/lib/module/ui/components/authChooser/SignUpView.js.map +1 -0
  188. package/lib/module/ui/components/authChooser/TroubleDisclosure.js +57 -0
  189. package/lib/module/ui/components/authChooser/TroubleDisclosure.js.map +1 -0
  190. package/lib/module/ui/components/authChooser/primitives.js +163 -0
  191. package/lib/module/ui/components/authChooser/primitives.js.map +1 -0
  192. package/lib/module/ui/components/authChooser/requestSurfaces.js +143 -0
  193. package/lib/module/ui/components/authChooser/requestSurfaces.js.map +1 -0
  194. package/lib/module/ui/components/authChooser/signInProgress.js +50 -0
  195. package/lib/module/ui/components/authChooser/signInProgress.js.map +1 -0
  196. package/lib/module/ui/components/{oxyAuthChooserStyles.js → authChooser/styles.js} +19 -1
  197. package/lib/module/ui/components/authChooser/styles.js.map +1 -0
  198. package/lib/module/ui/components/authChooser/types.js +66 -0
  199. package/lib/module/ui/components/authChooser/types.js.map +1 -0
  200. package/lib/module/ui/components/authChooser/useUsernameAvailability.js +46 -0
  201. package/lib/module/ui/components/authChooser/useUsernameAvailability.js.map +1 -0
  202. package/lib/module/ui/components/fileManagement/AnimatedButton.js +1 -1
  203. package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  204. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +1 -1
  205. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  206. package/lib/module/ui/components/fileManagement/FileViewer.js +1 -1
  207. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  208. package/lib/module/ui/components/fileManagement/UploadPreview.js +1 -1
  209. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  210. package/lib/module/ui/components/modals/DeleteAccountModal.js +1 -1
  211. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  212. package/lib/module/ui/components/payment/PaymentDetailsStep.js +1 -1
  213. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  214. package/lib/module/ui/components/payment/PaymentMethodStep.js +1 -1
  215. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  216. package/lib/module/ui/components/payment/PaymentReviewStep.js +1 -1
  217. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  218. package/lib/module/ui/components/payment/PaymentSuccessStep.js +1 -1
  219. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  220. package/lib/module/ui/components/payment/PaymentSummaryStep.js +1 -1
  221. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  222. package/lib/module/ui/context/OxyContext.js +203 -32
  223. package/lib/module/ui/context/OxyContext.js.map +1 -1
  224. package/lib/module/ui/context/commitSessionFlow.js +42 -0
  225. package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
  226. package/lib/module/ui/context/useOxyAccountGraph.js +13 -5
  227. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
  228. package/lib/module/ui/hooks/useSwitchableAccounts.js +6 -1
  229. package/lib/module/ui/hooks/useSwitchableAccounts.js.map +1 -1
  230. package/lib/module/ui/index.js +0 -1
  231. package/lib/module/ui/index.js.map +1 -1
  232. package/lib/module/ui/oauth/browserAuthTransport.js +165 -0
  233. package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -0
  234. package/lib/module/ui/oauth/completeOAuthCode.js +75 -0
  235. package/lib/module/ui/oauth/completeOAuthCode.js.map +1 -0
  236. package/lib/module/ui/oauth/legacyRedirectLanes.js +44 -0
  237. package/lib/module/ui/oauth/legacyRedirectLanes.js.map +1 -0
  238. package/lib/module/ui/oauth/oauthHandshake.js +50 -0
  239. package/lib/module/ui/oauth/oauthHandshake.js.map +1 -0
  240. package/lib/module/ui/oauth/oauthPopup.js +221 -0
  241. package/lib/module/ui/oauth/oauthPopup.js.map +1 -0
  242. package/lib/module/ui/oauth/oauthPopupMessages.js +135 -0
  243. package/lib/module/ui/oauth/oauthPopupMessages.js.map +1 -0
  244. package/lib/module/ui/oauth/types.js +2 -0
  245. package/lib/module/ui/oauth/types.js.map +1 -0
  246. package/lib/module/ui/screens/AccountMembersScreen.js +1 -1
  247. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  248. package/lib/module/ui/screens/CreateAccountScreen.js +1 -1
  249. package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
  250. package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
  251. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  252. package/lib/module/ui/screens/FAQScreen.js +1 -1
  253. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  254. package/lib/module/ui/screens/FeedbackScreen.js +1 -1
  255. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  256. package/lib/module/ui/screens/FileManagementScreen.js +2 -1
  257. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  258. package/lib/module/ui/screens/LanguageSelectorScreen.js +1 -1
  259. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  260. package/lib/module/ui/screens/ManageAccountScreen.js +1 -1
  261. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  262. package/lib/module/ui/screens/PaymentGatewayScreen.js +1 -1
  263. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  264. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1 -1
  265. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  266. package/lib/module/ui/screens/ProfileScreen.js +1 -1
  267. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  268. package/lib/module/ui/screens/UserListScreen.js +1 -1
  269. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  270. package/lib/module/ui/screens/WelcomeNewUserScreen.js +1 -1
  271. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  272. package/lib/module/ui/screens/fileManagement/FileLibraryError.js +1 -1
  273. package/lib/module/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
  274. package/lib/module/ui/screens/fileManagement/FileListSection.js +1 -1
  275. package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -1
  276. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +2 -1
  277. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  278. package/lib/module/ui/screens/fileManagement/UploadBar.js +1 -1
  279. package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -1
  280. package/lib/module/ui/screens/trust/TrustCenterScreen.js +1 -1
  281. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  282. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
  283. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  284. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +1 -1
  285. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  286. package/lib/module/ui/server.js +0 -2
  287. package/lib/module/ui/server.js.map +1 -1
  288. package/lib/module/ui/session/authStore.js +5 -75
  289. package/lib/module/ui/session/authStore.js.map +1 -1
  290. package/lib/module/ui/session/createSessionClient.js +11 -3
  291. package/lib/module/ui/session/createSessionClient.js.map +1 -1
  292. package/lib/module/ui/session/identityBinding.js +89 -0
  293. package/lib/module/ui/session/identityBinding.js.map +1 -0
  294. package/lib/module/ui/session/index.js +5 -2
  295. package/lib/module/ui/session/index.js.map +1 -1
  296. package/lib/module/ui/session/nativeSecureStorage.js +88 -0
  297. package/lib/module/ui/session/nativeSecureStorage.js.map +1 -0
  298. package/lib/module/ui/session/tokenTransport.js +11 -1
  299. package/lib/module/ui/session/tokenTransport.js.map +1 -1
  300. package/lib/module/ui/utils/crossOriginRestore.js +4 -3
  301. package/lib/module/ui/utils/crossOriginRestore.js.map +1 -1
  302. package/lib/module/ui/utils/deliveryPlatform.js +55 -0
  303. package/lib/module/ui/utils/deliveryPlatform.js.map +1 -0
  304. package/lib/module/ui/utils/oauthReturn.js +70 -46
  305. package/lib/module/ui/utils/oauthReturn.js.map +1 -1
  306. package/lib/typescript/commonjs/index.d.ts +9 -1
  307. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  308. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts +141 -0
  309. package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts.map +1 -0
  310. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +34 -2
  311. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/ui/client.d.ts +0 -1
  313. package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  315. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +16 -29
  316. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts.map +1 -1
  318. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  319. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +17 -12
  320. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  321. package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts +108 -0
  322. package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts.map +1 -0
  323. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts +1 -1
  324. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts.map +1 -1
  325. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts +38 -0
  326. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -0
  327. package/lib/typescript/commonjs/ui/components/authChooser/SignInEntryView.d.ts +32 -0
  328. package/lib/typescript/commonjs/ui/components/authChooser/SignInEntryView.d.ts.map +1 -0
  329. package/lib/typescript/commonjs/ui/components/authChooser/SignInRequestView.d.ts +34 -0
  330. package/lib/typescript/commonjs/ui/components/authChooser/SignInRequestView.d.ts.map +1 -0
  331. package/lib/typescript/commonjs/ui/components/authChooser/SignUpView.d.ts +34 -0
  332. package/lib/typescript/commonjs/ui/components/authChooser/SignUpView.d.ts.map +1 -0
  333. package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts +36 -0
  334. package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -0
  335. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts +55 -0
  336. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts.map +1 -0
  337. package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts +58 -0
  338. package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts.map +1 -0
  339. package/lib/typescript/commonjs/ui/components/authChooser/signInProgress.d.ts +26 -0
  340. package/lib/typescript/commonjs/ui/components/authChooser/signInProgress.d.ts.map +1 -0
  341. package/lib/typescript/{module/ui/components/oxyAuthChooserStyles.d.ts → commonjs/ui/components/authChooser/styles.d.ts} +19 -1
  342. package/lib/typescript/commonjs/ui/components/authChooser/styles.d.ts.map +1 -0
  343. package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts +103 -0
  344. package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts.map +1 -0
  345. package/lib/typescript/commonjs/ui/components/authChooser/useUsernameAvailability.d.ts +16 -0
  346. package/lib/typescript/commonjs/ui/components/authChooser/useUsernameAvailability.d.ts.map +1 -0
  347. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +1 -1
  348. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  349. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  350. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts +40 -0
  351. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
  352. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +44 -1
  353. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  354. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +7 -1
  355. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  356. package/lib/typescript/commonjs/ui/hooks/useSwitchableAccounts.d.ts.map +1 -1
  357. package/lib/typescript/commonjs/ui/index.d.ts +0 -1
  358. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  359. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts +56 -0
  360. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -0
  361. package/lib/typescript/commonjs/ui/oauth/completeOAuthCode.d.ts +49 -0
  362. package/lib/typescript/commonjs/ui/oauth/completeOAuthCode.d.ts.map +1 -0
  363. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  364. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  365. package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts +50 -0
  366. package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts.map +1 -0
  367. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts +77 -0
  368. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -0
  369. package/lib/typescript/commonjs/ui/oauth/oauthPopupMessages.d.ts +67 -0
  370. package/lib/typescript/commonjs/ui/oauth/oauthPopupMessages.d.ts.map +1 -0
  371. package/lib/typescript/commonjs/ui/oauth/types.d.ts +176 -0
  372. package/lib/typescript/commonjs/ui/oauth/types.d.ts.map +1 -0
  373. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  374. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  375. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  376. package/lib/typescript/commonjs/ui/server.d.ts +0 -2
  377. package/lib/typescript/commonjs/ui/server.d.ts.map +1 -1
  378. package/lib/typescript/commonjs/ui/session/authStore.d.ts +3 -7
  379. package/lib/typescript/commonjs/ui/session/authStore.d.ts.map +1 -1
  380. package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts +8 -1
  381. package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts.map +1 -1
  382. package/lib/typescript/commonjs/ui/session/identityBinding.d.ts +66 -0
  383. package/lib/typescript/commonjs/ui/session/identityBinding.d.ts.map +1 -0
  384. package/lib/typescript/commonjs/ui/session/index.d.ts +6 -2
  385. package/lib/typescript/commonjs/ui/session/index.d.ts.map +1 -1
  386. package/lib/typescript/commonjs/ui/session/nativeSecureStorage.d.ts +25 -0
  387. package/lib/typescript/commonjs/ui/session/nativeSecureStorage.d.ts.map +1 -0
  388. package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts +8 -1
  389. package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts.map +1 -1
  390. package/lib/typescript/commonjs/ui/types/navigation.d.ts +44 -0
  391. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  392. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts.map +1 -1
  393. package/lib/typescript/commonjs/ui/utils/deliveryPlatform.d.ts +33 -0
  394. package/lib/typescript/commonjs/ui/utils/deliveryPlatform.d.ts.map +1 -0
  395. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +1 -1
  396. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  397. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +30 -16
  398. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -1
  399. package/lib/typescript/module/index.d.ts +9 -1
  400. package/lib/typescript/module/index.d.ts.map +1 -1
  401. package/lib/typescript/module/notifications/deviceNotifications.d.ts +141 -0
  402. package/lib/typescript/module/notifications/deviceNotifications.d.ts.map +1 -0
  403. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +34 -2
  404. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
  405. package/lib/typescript/module/ui/client.d.ts +0 -1
  406. package/lib/typescript/module/ui/client.d.ts.map +1 -1
  407. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  408. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +16 -29
  409. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  410. package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts.map +1 -1
  411. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  412. package/lib/typescript/module/ui/components/OxySignInButton.d.ts +17 -12
  413. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  414. package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts +108 -0
  415. package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts.map +1 -0
  416. package/lib/typescript/module/ui/components/SettingsIcon.d.ts +1 -1
  417. package/lib/typescript/module/ui/components/SettingsIcon.d.ts.map +1 -1
  418. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts +38 -0
  419. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -0
  420. package/lib/typescript/module/ui/components/authChooser/SignInEntryView.d.ts +32 -0
  421. package/lib/typescript/module/ui/components/authChooser/SignInEntryView.d.ts.map +1 -0
  422. package/lib/typescript/module/ui/components/authChooser/SignInRequestView.d.ts +34 -0
  423. package/lib/typescript/module/ui/components/authChooser/SignInRequestView.d.ts.map +1 -0
  424. package/lib/typescript/module/ui/components/authChooser/SignUpView.d.ts +34 -0
  425. package/lib/typescript/module/ui/components/authChooser/SignUpView.d.ts.map +1 -0
  426. package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts +36 -0
  427. package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -0
  428. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts +55 -0
  429. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts.map +1 -0
  430. package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts +58 -0
  431. package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts.map +1 -0
  432. package/lib/typescript/module/ui/components/authChooser/signInProgress.d.ts +26 -0
  433. package/lib/typescript/module/ui/components/authChooser/signInProgress.d.ts.map +1 -0
  434. package/lib/typescript/{commonjs/ui/components/oxyAuthChooserStyles.d.ts → module/ui/components/authChooser/styles.d.ts} +19 -1
  435. package/lib/typescript/module/ui/components/authChooser/styles.d.ts.map +1 -0
  436. package/lib/typescript/module/ui/components/authChooser/types.d.ts +103 -0
  437. package/lib/typescript/module/ui/components/authChooser/types.d.ts.map +1 -0
  438. package/lib/typescript/module/ui/components/authChooser/useUsernameAvailability.d.ts +16 -0
  439. package/lib/typescript/module/ui/components/authChooser/useUsernameAvailability.d.ts.map +1 -0
  440. package/lib/typescript/module/ui/components/payment/types.d.ts +1 -1
  441. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  442. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  443. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts +40 -0
  444. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
  445. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +44 -1
  446. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  447. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +7 -1
  448. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  449. package/lib/typescript/module/ui/hooks/useSwitchableAccounts.d.ts.map +1 -1
  450. package/lib/typescript/module/ui/index.d.ts +0 -1
  451. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  452. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts +56 -0
  453. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -0
  454. package/lib/typescript/module/ui/oauth/completeOAuthCode.d.ts +49 -0
  455. package/lib/typescript/module/ui/oauth/completeOAuthCode.d.ts.map +1 -0
  456. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts +40 -0
  457. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
  458. package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts +50 -0
  459. package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts.map +1 -0
  460. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts +77 -0
  461. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -0
  462. package/lib/typescript/module/ui/oauth/oauthPopupMessages.d.ts +67 -0
  463. package/lib/typescript/module/ui/oauth/oauthPopupMessages.d.ts.map +1 -0
  464. package/lib/typescript/module/ui/oauth/types.d.ts +176 -0
  465. package/lib/typescript/module/ui/oauth/types.d.ts.map +1 -0
  466. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  467. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  468. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  469. package/lib/typescript/module/ui/server.d.ts +0 -2
  470. package/lib/typescript/module/ui/server.d.ts.map +1 -1
  471. package/lib/typescript/module/ui/session/authStore.d.ts +3 -7
  472. package/lib/typescript/module/ui/session/authStore.d.ts.map +1 -1
  473. package/lib/typescript/module/ui/session/createSessionClient.d.ts +8 -1
  474. package/lib/typescript/module/ui/session/createSessionClient.d.ts.map +1 -1
  475. package/lib/typescript/module/ui/session/identityBinding.d.ts +66 -0
  476. package/lib/typescript/module/ui/session/identityBinding.d.ts.map +1 -0
  477. package/lib/typescript/module/ui/session/index.d.ts +6 -2
  478. package/lib/typescript/module/ui/session/index.d.ts.map +1 -1
  479. package/lib/typescript/module/ui/session/nativeSecureStorage.d.ts +25 -0
  480. package/lib/typescript/module/ui/session/nativeSecureStorage.d.ts.map +1 -0
  481. package/lib/typescript/module/ui/session/tokenTransport.d.ts +8 -1
  482. package/lib/typescript/module/ui/session/tokenTransport.d.ts.map +1 -1
  483. package/lib/typescript/module/ui/types/navigation.d.ts +44 -0
  484. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  485. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts.map +1 -1
  486. package/lib/typescript/module/ui/utils/deliveryPlatform.d.ts +33 -0
  487. package/lib/typescript/module/ui/utils/deliveryPlatform.d.ts.map +1 -0
  488. package/lib/typescript/module/ui/utils/fileManagement.d.ts +1 -1
  489. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  490. package/lib/typescript/module/ui/utils/oauthReturn.d.ts +30 -16
  491. package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -1
  492. package/package.json +15 -7
  493. package/src/index.ts +50 -5
  494. package/src/notifications/deviceNotifications.ts +395 -0
  495. package/src/ui/boot/__tests__/coldBootWebAuthMode.test.ts +281 -0
  496. package/src/ui/boot/runProviderColdBoot.ts +83 -13
  497. package/src/ui/client.ts +0 -1
  498. package/src/ui/components/AvatarCameraBadge.tsx +1 -1
  499. package/src/ui/components/OxyAccountDialogScreen.tsx +20 -3
  500. package/src/ui/components/OxyAuthChooser.tsx +91 -1230
  501. package/src/ui/components/OxyConsentScreen.tsx +56 -13
  502. package/src/ui/components/OxyProvider.tsx +4 -4
  503. package/src/ui/components/OxySignInButton.tsx +119 -78
  504. package/src/ui/components/OxySignInRequestSurface.tsx +202 -0
  505. package/src/ui/components/ProfileButton.tsx +1 -1
  506. package/src/ui/components/SettingsIcon.tsx +1 -1
  507. package/src/ui/components/__tests__/OxyConsentScreen.test.tsx +27 -0
  508. package/src/ui/components/authChooser/AccountsMenuView.tsx +569 -0
  509. package/src/ui/components/authChooser/SignInEntryView.tsx +121 -0
  510. package/src/ui/components/authChooser/SignInRequestView.tsx +130 -0
  511. package/src/ui/components/authChooser/SignUpView.tsx +174 -0
  512. package/src/ui/components/authChooser/TroubleDisclosure.tsx +73 -0
  513. package/src/ui/components/authChooser/primitives.tsx +144 -0
  514. package/src/ui/components/authChooser/requestSurfaces.tsx +120 -0
  515. package/src/ui/components/authChooser/signInProgress.ts +54 -0
  516. package/src/ui/components/{oxyAuthChooserStyles.ts → authChooser/styles.ts} +18 -0
  517. package/src/ui/components/authChooser/types.ts +120 -0
  518. package/src/ui/components/authChooser/useUsernameAvailability.ts +60 -0
  519. package/src/ui/components/fileManagement/AnimatedButton.tsx +1 -1
  520. package/src/ui/components/fileManagement/FileDetailsModal.tsx +1 -1
  521. package/src/ui/components/fileManagement/FileViewer.tsx +1 -1
  522. package/src/ui/components/fileManagement/UploadPreview.tsx +1 -1
  523. package/src/ui/components/modals/DeleteAccountModal.tsx +1 -1
  524. package/src/ui/components/payment/PaymentDetailsStep.tsx +1 -1
  525. package/src/ui/components/payment/PaymentMethodStep.tsx +1 -1
  526. package/src/ui/components/payment/PaymentReviewStep.tsx +1 -1
  527. package/src/ui/components/payment/PaymentSuccessStep.tsx +1 -1
  528. package/src/ui/components/payment/PaymentSummaryStep.tsx +1 -1
  529. package/src/ui/components/payment/types.ts +1 -1
  530. package/src/ui/context/OxyContext.tsx +220 -24
  531. package/src/ui/context/__tests__/commitSessionFlow.test.ts +89 -0
  532. package/src/ui/context/commitSessionFlow.ts +61 -0
  533. package/src/ui/context/oxyContextTypes.ts +45 -1
  534. package/src/ui/context/useOxyAccountGraph.ts +19 -5
  535. package/src/ui/hooks/useSwitchableAccounts.ts +12 -1
  536. package/src/ui/index.ts +0 -1
  537. package/src/ui/oauth/__tests__/browserAuthTransport.test.ts +335 -0
  538. package/src/ui/oauth/__tests__/completeOAuthCode.test.ts +142 -0
  539. package/src/ui/oauth/__tests__/oauthPopup.test.ts +326 -0
  540. package/src/ui/oauth/__tests__/oauthPopupMessages.test.ts +189 -0
  541. package/src/ui/oauth/__tests__/sharedCompletionPath.test.ts +174 -0
  542. package/src/ui/oauth/browserAuthTransport.ts +187 -0
  543. package/src/ui/oauth/completeOAuthCode.ts +93 -0
  544. package/src/ui/oauth/legacyRedirectLanes.ts +43 -0
  545. package/src/ui/oauth/oauthHandshake.ts +74 -0
  546. package/src/ui/oauth/oauthPopup.ts +219 -0
  547. package/src/ui/oauth/oauthPopupMessages.ts +136 -0
  548. package/src/ui/oauth/types.ts +150 -0
  549. package/src/ui/screens/AccountMembersScreen.tsx +1 -1
  550. package/src/ui/screens/CreateAccountScreen.tsx +1 -1
  551. package/src/ui/screens/EditProfileFieldScreen.tsx +1 -1
  552. package/src/ui/screens/FAQScreen.tsx +1 -1
  553. package/src/ui/screens/FeedbackScreen.tsx +2 -1
  554. package/src/ui/screens/FileManagementScreen.tsx +2 -1
  555. package/src/ui/screens/LanguageSelectorScreen.tsx +1 -1
  556. package/src/ui/screens/ManageAccountScreen.tsx +1 -1
  557. package/src/ui/screens/PaymentGatewayScreen.tsx +1 -1
  558. package/src/ui/screens/PremiumSubscriptionScreen.tsx +1 -1
  559. package/src/ui/screens/ProfileScreen.tsx +1 -1
  560. package/src/ui/screens/UserListScreen.tsx +1 -1
  561. package/src/ui/screens/WelcomeNewUserScreen.tsx +1 -1
  562. package/src/ui/screens/fileManagement/FileLibraryError.tsx +1 -1
  563. package/src/ui/screens/fileManagement/FileListSection.tsx +1 -1
  564. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +2 -1
  565. package/src/ui/screens/fileManagement/UploadBar.tsx +1 -1
  566. package/src/ui/screens/trust/TrustCenterScreen.tsx +1 -1
  567. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +1 -1
  568. package/src/ui/screens/trust/TrustRewardsScreen.tsx +1 -1
  569. package/src/ui/server.ts +0 -2
  570. package/src/ui/session/__tests__/createSessionClient.test.ts +26 -0
  571. package/src/ui/session/__tests__/tokenTransport.test.ts +34 -0
  572. package/src/ui/session/authStore.ts +5 -89
  573. package/src/ui/session/createSessionClient.ts +15 -2
  574. package/src/ui/session/identityBinding.ts +116 -0
  575. package/src/ui/session/index.ts +6 -2
  576. package/src/ui/session/nativeSecureStorage.ts +98 -0
  577. package/src/ui/session/tokenTransport.ts +14 -1
  578. package/src/ui/types/navigation.ts +44 -1
  579. package/src/ui/utils/crossOriginRestore.ts +4 -7
  580. package/src/ui/utils/deliveryPlatform.ts +65 -0
  581. package/src/ui/utils/fileManagement.ts +1 -1
  582. package/src/ui/utils/oauthReturn.ts +74 -65
  583. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  584. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  585. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  586. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  587. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  588. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  589. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  590. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  591. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  592. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  593. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  594. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  595. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  596. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  597. package/lib/commonjs/ui/components/FontLoader.js +0 -35
  598. package/lib/commonjs/ui/components/FontLoader.js.map +0 -1
  599. package/lib/commonjs/ui/components/FontLoader.native.js +0 -88
  600. package/lib/commonjs/ui/components/FontLoader.native.js.map +0 -1
  601. package/lib/commonjs/ui/components/oxyAuthChooserStyles.js.map +0 -1
  602. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  603. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  604. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  605. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  606. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  607. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  608. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  609. package/lib/module/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  610. package/lib/module/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  611. package/lib/module/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  612. package/lib/module/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  613. package/lib/module/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  614. package/lib/module/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  615. package/lib/module/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  616. package/lib/module/ui/components/FontLoader.js +0 -29
  617. package/lib/module/ui/components/FontLoader.js.map +0 -1
  618. package/lib/module/ui/components/FontLoader.native.js +0 -83
  619. package/lib/module/ui/components/FontLoader.native.js.map +0 -1
  620. package/lib/module/ui/components/oxyAuthChooserStyles.js.map +0 -1
  621. package/lib/typescript/commonjs/ui/components/FontLoader.d.ts +0 -24
  622. package/lib/typescript/commonjs/ui/components/FontLoader.d.ts.map +0 -1
  623. package/lib/typescript/commonjs/ui/components/FontLoader.native.d.ts +0 -13
  624. package/lib/typescript/commonjs/ui/components/FontLoader.native.d.ts.map +0 -1
  625. package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts.map +0 -1
  626. package/lib/typescript/module/ui/components/FontLoader.d.ts +0 -24
  627. package/lib/typescript/module/ui/components/FontLoader.d.ts.map +0 -1
  628. package/lib/typescript/module/ui/components/FontLoader.native.d.ts +0 -13
  629. package/lib/typescript/module/ui/components/FontLoader.native.d.ts.map +0 -1
  630. package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts.map +0 -1
  631. package/src/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  632. package/src/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  633. package/src/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  634. package/src/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  635. package/src/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  636. package/src/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  637. package/src/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  638. package/src/ui/components/FontLoader.native.tsx +0 -88
  639. package/src/ui/components/FontLoader.tsx +0 -27
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Runtime validation for the popup OAuth `postMessage` channel.
3
+ *
4
+ * Everything arriving on `window`'s `message` event is untrusted: any frame on
5
+ * the page, any other popup, and any browser extension can post to us. This
6
+ * module is the ONLY place that decides whether an incoming event is a genuine
7
+ * authorization response, and it answers with a value — never a thrown error.
8
+ *
9
+ * A message is accepted only when ALL of these hold:
10
+ * 1. `event.origin` is EXACTLY the authorize endpoint's origin,
11
+ * 2. `event.source` is the exact `Window` reference we opened,
12
+ * 3. `event.data` matches one of the two frozen message shapes,
13
+ * 4. the `state` it carries matches the one this RP sent.
14
+ *
15
+ * Failing (1)–(3) is indistinguishable from unrelated page traffic, so the
16
+ * message is IGNORED and the flow keeps waiting. Failing (4) means our own
17
+ * popup answered a different request than the one in flight, which is terminal:
18
+ * it is reported as a mismatch rather than left to hang until the timeout.
19
+ */
20
+
21
+ import { logger } from '@oxyhq/core';
22
+ import type { OAuthPopupHandle, OxyOAuthMessage } from './types';
23
+
24
+ /** `postMessage` discriminator for a successful authorization. */
25
+ export const OXY_OAUTH_CODE_MESSAGE_TYPE = 'oxy:oauth:code';
26
+
27
+ /** `postMessage` discriminator for a typed OAuth failure. */
28
+ export const OXY_OAUTH_ERROR_MESSAGE_TYPE = 'oxy:oauth:error';
29
+
30
+ /** Verdict for one incoming `message` event. */
31
+ export type OAuthPopupMessageVerdict =
32
+ /** Not ours (wrong origin/source) or not a valid message — keep waiting. */
33
+ | { kind: 'ignore' }
34
+ | { kind: 'code'; code: string; state: string }
35
+ | { kind: 'oauth-error'; error: string; errorDescription?: string }
36
+ /** Well-formed, from our popup, but bound to a different authorize request. */
37
+ | { kind: 'state-mismatch' };
38
+
39
+ /** What {@link readOAuthPopupMessage} validates an event against. */
40
+ export interface OAuthPopupMessageContext {
41
+ /** Exact origin of the authorize endpoint (`new URL(authorizeUrl).origin`). */
42
+ expectedOrigin: string;
43
+ /** The CSRF `state` this RP sent on the authorize request. */
44
+ expectedState: string;
45
+ /** The exact popup reference `window.open()` returned. */
46
+ popup: OAuthPopupHandle;
47
+ }
48
+
49
+ function isNonEmptyString(value: unknown): value is string {
50
+ return typeof value === 'string' && value.length > 0;
51
+ }
52
+
53
+ /**
54
+ * Reference equality across two `unknown` values.
55
+ *
56
+ * `event.source` is a `WindowProxy` and {@link OAuthPopupHandle} is a narrow
57
+ * structural type, so comparing them directly is a type error. Widening both to
58
+ * `unknown` keeps the check a plain identity comparison — which is exactly the
59
+ * security property we want — without a cast.
60
+ */
61
+ function isSameWindowReference(a: unknown, b: unknown): boolean {
62
+ return a === b;
63
+ }
64
+
65
+ /**
66
+ * Parse untrusted `event.data` into one of the two frozen message shapes, or
67
+ * `null` when it is anything else (including `null`, primitives, arrays, and
68
+ * objects with missing/wrong-typed fields).
69
+ *
70
+ * Unknown extra properties are tolerated but never read: only the fields below
71
+ * are ever surfaced, so a hostile sender cannot smuggle values past this point.
72
+ */
73
+ export function parseOAuthPopupMessage(data: unknown): OxyOAuthMessage | null {
74
+ if (typeof data !== 'object' || data === null || Array.isArray(data)) return null;
75
+ const record = data as Record<string, unknown>;
76
+
77
+ if (record.type === OXY_OAUTH_CODE_MESSAGE_TYPE) {
78
+ if (!isNonEmptyString(record.code) || !isNonEmptyString(record.state)) return null;
79
+ return { type: OXY_OAUTH_CODE_MESSAGE_TYPE, code: record.code, state: record.state };
80
+ }
81
+
82
+ if (record.type === OXY_OAUTH_ERROR_MESSAGE_TYPE) {
83
+ if (!isNonEmptyString(record.error)) return null;
84
+ return {
85
+ type: OXY_OAUTH_ERROR_MESSAGE_TYPE,
86
+ error: record.error,
87
+ ...(isNonEmptyString(record.errorDescription)
88
+ ? { errorDescription: record.errorDescription }
89
+ : {}),
90
+ ...(isNonEmptyString(record.state) ? { state: record.state } : {}),
91
+ };
92
+ }
93
+
94
+ return null;
95
+ }
96
+
97
+ /**
98
+ * Classify one `message` event against the in-flight authorize request.
99
+ *
100
+ * Never throws. See the module header for the acceptance rules.
101
+ */
102
+ export function readOAuthPopupMessage(
103
+ event: MessageEvent,
104
+ context: OAuthPopupMessageContext,
105
+ ): OAuthPopupMessageVerdict {
106
+ if (event.origin !== context.expectedOrigin) return { kind: 'ignore' };
107
+ if (!isSameWindowReference(event.source, context.popup)) return { kind: 'ignore' };
108
+
109
+ const message = parseOAuthPopupMessage(event.data);
110
+ if (!message) {
111
+ // Origin and source matched, so this came from the IdP window we opened —
112
+ // a shape we cannot read is worth a breadcrumb, unlike ordinary page noise.
113
+ logger.debug(
114
+ 'Ignored an unrecognised message from the OAuth popup',
115
+ { component: 'oauthPopupMessages' },
116
+ );
117
+ return { kind: 'ignore' };
118
+ }
119
+
120
+ if (message.type === OXY_OAUTH_CODE_MESSAGE_TYPE) {
121
+ if (message.state !== context.expectedState) return { kind: 'state-mismatch' };
122
+ return { kind: 'code', code: message.code, state: message.state };
123
+ }
124
+
125
+ // An error MAY carry `state` (the IdP omits it when the request never got far
126
+ // enough to bind one). When present it must match: a foreign error must not be
127
+ // able to end an unrelated in-flight sign-in.
128
+ if (message.state !== undefined && message.state !== context.expectedState) {
129
+ return { kind: 'state-mismatch' };
130
+ }
131
+ return {
132
+ kind: 'oauth-error',
133
+ error: message.error,
134
+ ...(message.errorDescription ? { errorDescription: message.errorDescription } : {}),
135
+ };
136
+ }
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Typed contracts shared by the browser "Sign in with Oxy" OAuth transports.
3
+ *
4
+ * Two transports deliver the same authorization code to the same completion
5
+ * path (see `completeOAuthCode.ts`):
6
+ *
7
+ * - `redirect` — the historical full-page hand-off to `auth.oxy.so/authorize`.
8
+ * The RP tab navigates away and comes back to its registered `redirect_uri`
9
+ * with `?code=…&state=…`; cold boot finishes the exchange.
10
+ * - `popup` — a small `auth.oxy.so` window opened from the user's click. The RP
11
+ * stays mounted with its route and unsaved state intact; the IdP delivers the
12
+ * result to `window.opener` via `postMessage` and closes itself.
13
+ *
14
+ * Only the authorization code, the CSRF `state`, and a typed OAuth error ever
15
+ * cross the `postMessage` channel. Access tokens, device secrets, and the PKCE
16
+ * `code_verifier` NEVER do — the opener keeps the verifier and performs the code
17
+ * exchange itself.
18
+ */
19
+
20
+ /** How a web relying party hands the user to the IdP for third-party sign-in. */
21
+ export type WebAuthMode = 'popup' | 'redirect';
22
+
23
+ /**
24
+ * Minimal structural handle over a popup `Window` — exactly what the popup
25
+ * transport needs: navigate it once the authorize URL is built, detect the user
26
+ * closing it (`closed`, polled — there is no cross-origin close event), and
27
+ * close it programmatically on completion. Satisfied directly by the value
28
+ * `window.open()` returns.
29
+ *
30
+ * Deliberately NOT `Window`: the transport must never read cross-origin
31
+ * properties off the popup, and a narrow handle makes that impossible to do by
32
+ * accident (and trivial to fake in tests).
33
+ */
34
+ export interface OAuthPopupHandle {
35
+ readonly closed: boolean;
36
+ close(): void;
37
+ location: { href: string };
38
+ }
39
+
40
+ /**
41
+ * The RP-side OAuth handshake for one authorize request: the CSRF `state` sent
42
+ * to the IdP and the PKCE `code_verifier` replayed on the token exchange.
43
+ *
44
+ * In `redirect` mode it is persisted to `sessionStorage` across the full-page
45
+ * navigation; in `popup` mode it never leaves memory.
46
+ */
47
+ export interface OAuthHandshake {
48
+ /** Opaque CSRF token echoed back by the IdP and validated before any exchange. */
49
+ state: string;
50
+ /** The PKCE secret. Never crosses `postMessage`, a URL, or storage in popup mode. */
51
+ codeVerifier: string;
52
+ }
53
+
54
+ /** Successful authorization delivered by the IdP over `postMessage`. */
55
+ export interface OxyOAuthCodeMessage {
56
+ type: 'oxy:oauth:code';
57
+ code: string;
58
+ state: string;
59
+ }
60
+
61
+ /** Typed OAuth failure delivered by the IdP over `postMessage`. */
62
+ export interface OxyOAuthErrorMessage {
63
+ type: 'oxy:oauth:error';
64
+ error: string;
65
+ errorDescription?: string;
66
+ state?: string;
67
+ }
68
+
69
+ /** The ONLY two message shapes that may cross the popup channel. */
70
+ export type OxyOAuthMessage = OxyOAuthCodeMessage | OxyOAuthErrorMessage;
71
+
72
+ /** Session material handed to the provider's commit funnel after an exchange. */
73
+ export interface OAuthSessionCommitInput {
74
+ sessionId: string;
75
+ accessToken?: string;
76
+ deviceId?: string;
77
+ deviceSecret?: string;
78
+ userId: string;
79
+ expiresAt?: string;
80
+ user?: { id: string; username?: string; avatar?: string };
81
+ }
82
+
83
+ /**
84
+ * Terminal outcome of one popup sign-in attempt. Every expected path — the user
85
+ * closing the window, a timeout, an IdP error — is a value, never a thrown
86
+ * exception.
87
+ */
88
+ export type OAuthPopupOutcome =
89
+ /** The IdP delivered an authorization code whose `state` matched. */
90
+ | { kind: 'code'; code: string; state: string }
91
+ /** The IdP delivered a typed OAuth error (`access_denied`, `login_required`, …). */
92
+ | { kind: 'oauth-error'; error: string; errorDescription?: string }
93
+ /** A well-formed message from our popup carried the wrong `state`. */
94
+ | { kind: 'state-mismatch' }
95
+ /** The user dismissed the popup without completing sign-in. */
96
+ | { kind: 'closed' }
97
+ /** No result arrived within the allotted window. */
98
+ | { kind: 'timed-out' }
99
+ /** No DOM message host (SSR / native) — the popup transport does not apply. */
100
+ | { kind: 'unsupported' };
101
+
102
+ /** Why the shared completion path could not produce a session. */
103
+ export type OAuthCompletionFailure = 'state-mismatch' | 'exchange-failed';
104
+
105
+ /** Result of the ONE completion path both transports run. */
106
+ export type OAuthCompletionResult =
107
+ | { ok: true }
108
+ | { ok: false; reason: OAuthCompletionFailure };
109
+
110
+ /** Why the transport fell back to a full-page redirect. */
111
+ export type WebOAuthRedirectReason =
112
+ /** `webAuthMode: 'redirect'` — the configured transport. */
113
+ | 'redirect-mode'
114
+ /** The browser refused `window.open` (blocker, or no gesture attribution). */
115
+ | 'popup-blocked'
116
+ /** The popup opened but could not be navigated to the authorize URL. */
117
+ | 'popup-navigation-failed';
118
+
119
+ /** Why a web sign-in attempt failed outright. */
120
+ export type WebOAuthFailureReason =
121
+ /** The handshake could not be persisted for the redirect return (no/blocked storage). */
122
+ | 'handshake-storage'
123
+ /** The `state` returned by the IdP did not match the one we sent. */
124
+ | 'state-mismatch'
125
+ /** `POST /auth/oauth/token` or the session commit failed. */
126
+ | 'exchange-failed'
127
+ /** The IdP reported a typed OAuth error. */
128
+ | 'idp-error';
129
+
130
+ /** Why a web sign-in attempt was not applicable at all. */
131
+ export type WebOAuthUnsupportedReason =
132
+ /** Not a browser (native / SSR) — native uses `openAuthorizeUrlNative`. */
133
+ | 'no-browser'
134
+ /** `sessionMode: 'identity'` has no third-party OAuth lane by construction. */
135
+ | 'identity-bound'
136
+ /** No `clientId` is configured on the provider. */
137
+ | 'missing-client-id';
138
+
139
+ /** Terminal, typed outcome of a web third-party sign-in attempt. */
140
+ export type WebOAuthSignInResult =
141
+ /** A session was committed; the RP is authenticated without a reload. */
142
+ | { status: 'signed-in' }
143
+ /** The tab is navigating to the IdP; nothing else will resolve in this document. */
144
+ | { status: 'redirecting'; via: WebOAuthRedirectReason }
145
+ /** The user dismissed the popup. */
146
+ | { status: 'cancelled' }
147
+ /** No result arrived within the allotted window. */
148
+ | { status: 'timed-out' }
149
+ | { status: 'failed'; reason: WebOAuthFailureReason; description?: string }
150
+ | { status: 'unsupported'; reason: WebOAuthUnsupportedReason };
@@ -5,7 +5,7 @@ import {
5
5
  TouchableOpacity,
6
6
  ActivityIndicator,
7
7
  } from 'react-native';
8
- import { Ionicons } from '@expo/vector-icons';
8
+ import Ionicons from '@expo/vector-icons/Ionicons';
9
9
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
10
10
  import { toast } from '@oxyhq/bloom';
11
11
  import { surfaces } from '@oxyhq/bloom/surfaces';
@@ -1,7 +1,7 @@
1
1
  import type React from 'react';
2
2
  import { useState, useCallback, useRef, useEffect } from 'react';
3
3
  import { View, ActivityIndicator } from 'react-native';
4
- import { Ionicons } from '@expo/vector-icons';
4
+ import Ionicons from '@expo/vector-icons/Ionicons';
5
5
  import type { AccountKind, CreateAccountInput, OrganizationCategory } from '@oxyhq/core';
6
6
  import { ORGANIZATION_CATEGORIES } from '@oxyhq/core';
7
7
  import type { BaseScreenProps } from '../types/navigation';
@@ -6,7 +6,7 @@ import {
6
6
  TouchableOpacity,
7
7
  type TextInputProps,
8
8
  } from 'react-native';
9
- import { Ionicons } from '@expo/vector-icons';
9
+ import Ionicons from '@expo/vector-icons/Ionicons';
10
10
  import type { BaseScreenProps } from '../types/navigation';
11
11
  import { useTheme } from '@oxyhq/bloom/theme';
12
12
  import { Text } from '@oxyhq/bloom/typography';
@@ -1,7 +1,7 @@
1
1
  import type React from 'react';
2
2
  import { useState, useEffect, useCallback, useMemo } from 'react';
3
3
  import { View, ScrollView, StyleSheet } from 'react-native';
4
- import { Ionicons } from '@expo/vector-icons';
4
+ import Ionicons from '@expo/vector-icons/Ionicons';
5
5
  import { toast } from '@oxyhq/bloom';
6
6
  import { useTheme } from '@oxyhq/bloom/theme';
7
7
  import { Search } from '@oxyhq/bloom/search';
@@ -10,7 +10,8 @@ import type { BaseScreenProps } from '../types/navigation';
10
10
  import { normalizeTheme } from '@oxyhq/core';
11
11
  import { packageInfo } from '@oxyhq/core';
12
12
  import { useTheme } from '@oxyhq/bloom/theme';
13
- import { Ionicons, type MaterialCommunityIcons } from '@expo/vector-icons';
13
+ import Ionicons from '@expo/vector-icons/Ionicons';
14
+ import type MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
14
15
  import { toast } from '@oxyhq/bloom';
15
16
  import { H2, Text } from '@oxyhq/bloom/typography';
16
17
  import { Button } from '@oxyhq/bloom/button';
@@ -17,7 +17,8 @@ import type { FileManagementScreenProps } from '../types/fileManagement';
17
17
  import { toast } from '@oxyhq/bloom';
18
18
  import { surfaces } from '@oxyhq/bloom/surfaces';
19
19
  import * as Skeleton from '@oxyhq/bloom/skeleton';
20
- import { Ionicons, MaterialCommunityIcons } from '@expo/vector-icons';
20
+ import Ionicons from '@expo/vector-icons/Ionicons';
21
+ import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
21
22
  import { Pressable } from 'react-native';
22
23
  import type { FileMetadata } from '@oxyhq/core';
23
24
  import { queryKeys } from '../hooks/queries/queryKeys';
@@ -2,7 +2,7 @@ import React, { useCallback, useMemo, useState } from 'react';
2
2
  import { View, StyleSheet, TouchableOpacity } from 'react-native';
3
3
  import type { BaseScreenProps } from '../types/navigation';
4
4
  import { useTheme } from '@oxyhq/bloom/theme';
5
- import { Ionicons } from '@expo/vector-icons';
5
+ import Ionicons from '@expo/vector-icons/Ionicons';
6
6
  import { toast } from '@oxyhq/bloom';
7
7
  import { Text } from '@oxyhq/bloom/typography';
8
8
  import { Search } from '@oxyhq/bloom/search';
@@ -6,7 +6,7 @@ import {
6
6
  ActivityIndicator,
7
7
  Platform,
8
8
  } from 'react-native';
9
- import { Ionicons } from '@expo/vector-icons';
9
+ import Ionicons from '@expo/vector-icons/Ionicons';
10
10
  import { toast } from '@oxyhq/bloom';
11
11
  import { surfaces } from '@oxyhq/bloom/surfaces';
12
12
  import { useTheme } from '@oxyhq/bloom/theme';
@@ -10,7 +10,7 @@ import type { BaseScreenProps } from '../types/navigation';
10
10
  import { Button } from '@oxyhq/bloom/button';
11
11
  import { useTheme } from '@oxyhq/bloom/theme';
12
12
  import { H4 } from '@oxyhq/bloom/typography';
13
- import { Ionicons } from '@expo/vector-icons';
13
+ import Ionicons from '@expo/vector-icons/Ionicons';
14
14
  import { useI18n } from '../hooks/useI18n';
15
15
  import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
16
16
  import QRCode from 'react-native-qrcode-svg';
@@ -16,7 +16,7 @@ import {
16
16
  SegmentedControlItem,
17
17
  SegmentedControlItemText,
18
18
  } from '@oxyhq/bloom/segmented-control';
19
- import { Ionicons } from '@expo/vector-icons';
19
+ import Ionicons from '@expo/vector-icons/Ionicons';
20
20
  import { useI18n } from '../hooks/useI18n';
21
21
  import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
22
22
  import { useOxy } from '../context/OxyContext';
@@ -10,7 +10,7 @@ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list'
10
10
  import { Avatar } from '@oxyhq/bloom/avatar';
11
11
  import FollowButton from '../components/FollowButton';
12
12
  import { useFollow } from '../hooks/useFollow';
13
- import { Ionicons } from '@expo/vector-icons';
13
+ import Ionicons from '@expo/vector-icons/Ionicons';
14
14
  import { useI18n } from '../hooks/useI18n';
15
15
  import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
16
16
  import { useOxy } from '../context/OxyContext';
@@ -14,7 +14,7 @@ import { H6, Text } from '@oxyhq/bloom/typography';
14
14
  import { Button } from '@oxyhq/bloom/button';
15
15
  import { Avatar } from '@oxyhq/bloom/avatar';
16
16
  import FollowButton from '../components/FollowButton';
17
- import { Ionicons } from '@expo/vector-icons';
17
+ import Ionicons from '@expo/vector-icons/Ionicons';
18
18
  import { useI18n } from '../hooks/useI18n';
19
19
  import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
20
20
  import { useOxy } from '../context/OxyContext';
@@ -3,7 +3,7 @@ import { useCallback, useMemo, useRef, useState } from 'react';
3
3
  import { View, StyleSheet, Platform, Animated } from 'react-native';
4
4
  import type { BaseScreenProps } from '../types/navigation';
5
5
  import { Avatar } from '@oxyhq/bloom/avatar';
6
- import { Ionicons } from '@expo/vector-icons';
6
+ import Ionicons from '@expo/vector-icons/Ionicons';
7
7
  import { toast } from '@oxyhq/bloom';
8
8
  import { useTheme } from '@oxyhq/bloom/theme';
9
9
  import { Button } from '@oxyhq/bloom/button';
@@ -1,6 +1,6 @@
1
1
  import type React from 'react';
2
2
  import { View, Text, TouchableOpacity } from 'react-native';
3
- import { Ionicons } from '@expo/vector-icons';
3
+ import Ionicons from '@expo/vector-icons/Ionicons';
4
4
 
5
5
  export interface FileLibraryErrorProps {
6
6
  title: string;
@@ -7,7 +7,7 @@ import {
7
7
  RefreshControl,
8
8
  ActivityIndicator,
9
9
  } from 'react-native';
10
- import { Ionicons } from '@expo/vector-icons';
10
+ import Ionicons from '@expo/vector-icons/Ionicons';
11
11
  import type { FileMetadata } from '@oxyhq/core';
12
12
  import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
13
13
  import type { useTheme } from '@oxyhq/bloom/theme';
@@ -12,7 +12,8 @@ import {
12
12
  type LayoutChangeEvent,
13
13
  } from 'react-native';
14
14
  import { Image as ExpoImage } from 'expo-image';
15
- import { Ionicons, MaterialCommunityIcons } from '@expo/vector-icons';
15
+ import Ionicons from '@expo/vector-icons/Ionicons';
16
+ import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
16
17
  import * as Skeleton from '@oxyhq/bloom/skeleton';
17
18
  import type { FileMetadata } from '@oxyhq/core';
18
19
  import { computePhotoGridLayout } from './photoGridLayout';
@@ -1,6 +1,6 @@
1
1
  import type React from 'react';
2
2
  import { View, Text, ActivityIndicator, StyleSheet, Platform, type ViewStyle } from 'react-native';
3
- import { Ionicons } from '@expo/vector-icons';
3
+ import Ionicons from '@expo/vector-icons/Ionicons';
4
4
 
5
5
  export interface UploadBarProps {
6
6
  /** Aggregate upload progress, or null when indeterminate. */
@@ -2,7 +2,7 @@ import type React from 'react';
2
2
  import { useEffect, useMemo, useState } from 'react';
3
3
  import { View, StyleSheet } from 'react-native';
4
4
  import type { ReputationTransaction, TrustTier } from '@oxyhq/core';
5
- import { Ionicons } from '@expo/vector-icons';
5
+ import Ionicons from '@expo/vector-icons/Ionicons';
6
6
  import { Chip } from '@oxyhq/bloom/chip';
7
7
  import { useTheme } from '@oxyhq/bloom/theme';
8
8
  import { H1, Text } from '@oxyhq/bloom/typography';
@@ -13,7 +13,7 @@ import { useTheme } from '@oxyhq/bloom/theme';
13
13
  import { H6, Text } from '@oxyhq/bloom/typography';
14
14
  import { Chip } from '@oxyhq/bloom/chip';
15
15
  import { Button } from '@oxyhq/bloom/button';
16
- import { Ionicons } from '@expo/vector-icons';
16
+ import Ionicons from '@expo/vector-icons/Ionicons';
17
17
  import type { BaseScreenProps } from '../../types/navigation';
18
18
  import { Avatar } from '@oxyhq/bloom/avatar';
19
19
  import { useI18n } from '../../hooks/useI18n';
@@ -3,7 +3,7 @@ import { useMemo, useState, useEffect } from 'react';
3
3
  import { View, StyleSheet } from 'react-native';
4
4
  import type { BaseScreenProps } from '../../types/navigation';
5
5
  import { useSurfaceHeader } from '../../hooks/useSurfaceHeader';
6
- import { Ionicons } from '@expo/vector-icons';
6
+ import Ionicons from '@expo/vector-icons/Ionicons';
7
7
  import { useTheme } from '@oxyhq/bloom/theme';
8
8
  import { H1, H4, H5, Text } from '@oxyhq/bloom/typography';
9
9
  import { useI18n } from '../../hooks/useI18n';
package/src/ui/server.ts CHANGED
@@ -20,8 +20,6 @@ export const LogoIcon = noopComponent;
20
20
  export const LogoText = noopComponent;
21
21
  export const FollowButton = noopComponent;
22
22
  export const OxyPayButton = noopComponent;
23
- export const FontLoader = noopComponent;
24
- export const setupFonts = async (): Promise<boolean> => true;
25
23
 
26
24
  // Context
27
25
  export const useOxy = noopHook;
@@ -83,4 +83,30 @@ describe('createSessionClient', () => {
83
83
  expect(ioMock).toHaveBeenCalledTimes(1);
84
84
  client.stop();
85
85
  });
86
+
87
+ test('threads the pinned-account resolver through: a pinned registerAndActivate only ADDS', async () => {
88
+ // `sessionMode: 'identity'`. The pin reaching `SessionClient` is observable
89
+ // here: a pinned client's own session is minted for the pinned account
90
+ // explicitly, so registering it must never SWITCH the shared device session
91
+ // (which would re-elect the active account under every other app on it).
92
+ const oxy = fakeOxy();
93
+
94
+ const { client } = createSessionClient(oxy as never, undefined, () => 'pinned-account');
95
+ await client.registerAndActivate('pinned-account');
96
+
97
+ const paths = oxy.makeRequest.mock.calls.map((call) => call[1]);
98
+ expect(paths).toContain('/session/device/add');
99
+ expect(paths).not.toContain('/session/device/switch');
100
+ });
101
+
102
+ test('a resolver reporting no pin (account mode) leaves registerAndActivate switching', async () => {
103
+ const oxy = fakeOxy();
104
+
105
+ const { client } = createSessionClient(oxy as never, undefined, () => null);
106
+ await client.registerAndActivate('u1');
107
+
108
+ const paths = oxy.makeRequest.mock.calls.map((call) => call[1]);
109
+ expect(paths).toContain('/session/device/add');
110
+ expect(paths).toContain('/session/device/switch');
111
+ });
86
112
  });
@@ -106,6 +106,40 @@ describe('createTokenTransport', () => {
106
106
  await expect(Promise.all([first, second])).resolves.toEqual([undefined, undefined]);
107
107
  });
108
108
 
109
+ test('never mints while identity-bound, even when the device switched to another account', async () => {
110
+ // `sessionMode: 'identity'`: the bearer belongs to the PINNED account and is
111
+ // minted for it by the cold boot / re-mint lane. Converging it on
112
+ // `state.activeAccountId` — here a DIFFERENT account another app switched the
113
+ // device to — is exactly the drift the mode prevents, so the transport must
114
+ // short-circuit even though the bearer/active-account check disagrees.
115
+ const refreshAccessToken = jest.fn(async () => 'minted-token');
116
+ const oxy = fakeOxy('pinned-account', refreshAccessToken);
117
+ const transport = createTokenTransport(oxy as never, () => 'pinned-account');
118
+
119
+ await transport.ensureActiveToken({
120
+ ...state,
121
+ accounts: [
122
+ { accountId: 'pinned-account', sessionId: 'sess-pinned', authuser: 0 },
123
+ { accountId: 'a1', sessionId: 'sess-a1', authuser: 1 },
124
+ ],
125
+ activeAccountId: 'a1',
126
+ });
127
+
128
+ expect(refreshAccessToken).not.toHaveBeenCalled();
129
+ expect(oxy.getCurrentUserId).not.toHaveBeenCalled();
130
+ });
131
+
132
+ test('a resolver reporting no pin (every account-mode provider) behaves exactly as an absent one', async () => {
133
+ const refreshAccessToken = jest.fn(async () => 'minted-token');
134
+ const oxy = fakeOxy('previous-account', refreshAccessToken);
135
+ const transport = createTokenTransport(oxy as never, () => null);
136
+
137
+ await transport.ensureActiveToken(state);
138
+
139
+ expect(refreshAccessToken).toHaveBeenCalledTimes(1);
140
+ expect(refreshAccessToken).toHaveBeenCalledWith('preflight');
141
+ });
142
+
109
143
  test('treats a throwing bearer-account check as a mismatch and still mints', async () => {
110
144
  const refreshAccessToken = jest.fn(async () => 'minted-token');
111
145
  const oxy = fakeOxy(null, refreshAccessToken);