@oxy.so/services 4.0.7 → 6.1.0

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 (403) hide show
  1. package/README.md +2 -2
  2. package/lib/commonjs/assets/assets/signIn/slide-1.jpg +0 -0
  3. package/lib/commonjs/assets/assets/signIn/slide-1.jpg.d.ts +3 -0
  4. package/lib/commonjs/assets/assets/signIn/slide-2.jpg +0 -0
  5. package/lib/commonjs/assets/assets/signIn/slide-2.jpg.d.ts +3 -0
  6. package/lib/commonjs/assets/assets/signIn/slide-3.jpg +0 -0
  7. package/lib/commonjs/assets/assets/signIn/slide-3.jpg.d.ts +3 -0
  8. package/lib/commonjs/assets/assets/signIn/slide-4.jpg +0 -0
  9. package/lib/commonjs/assets/assets/signIn/slide-4.jpg.d.ts +3 -0
  10. package/lib/commonjs/assets/signIn/slide-1.jpg +0 -0
  11. package/lib/commonjs/assets/signIn/slide-2.jpg +0 -0
  12. package/lib/commonjs/assets/signIn/slide-3.jpg +0 -0
  13. package/lib/commonjs/assets/signIn/slide-4.jpg +0 -0
  14. package/lib/commonjs/index.js +77 -8
  15. package/lib/commonjs/index.js.map +1 -1
  16. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js +11 -58
  17. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -1
  18. package/lib/commonjs/ui/components/OxyAuthChooser.js +36 -45
  19. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  20. package/lib/commonjs/ui/components/OxyProvider.js +0 -2
  21. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  22. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  23. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +30 -16
  24. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  25. package/lib/commonjs/ui/components/authChooser/primitives.js +7 -52
  26. package/lib/commonjs/ui/components/authChooser/primitives.js.map +1 -1
  27. package/lib/commonjs/ui/components/authChooser/signInFailureMessage.js +1 -7
  28. package/lib/commonjs/ui/components/authChooser/signInFailureMessage.js.map +1 -1
  29. package/lib/commonjs/ui/components/authChooser/styles.js +0 -31
  30. package/lib/commonjs/ui/components/authChooser/styles.js.map +1 -1
  31. package/lib/commonjs/ui/components/authChooser/types.js +2 -2
  32. package/lib/commonjs/ui/components/authChooser/types.js.map +1 -1
  33. package/lib/commonjs/ui/components/oauthNavigation.js +1 -1
  34. package/lib/commonjs/ui/components/signIn/InlineCommonsQr.js +161 -0
  35. package/lib/commonjs/ui/components/signIn/InlineCommonsQr.js.map +1 -0
  36. package/lib/commonjs/ui/components/signIn/OxyAccountPicker.js +111 -0
  37. package/lib/commonjs/ui/components/signIn/OxyAccountPicker.js.map +1 -0
  38. package/lib/commonjs/ui/components/signIn/OxyAuthScreen.js +160 -0
  39. package/lib/commonjs/ui/components/signIn/OxyAuthScreen.js.map +1 -0
  40. package/lib/commonjs/ui/components/signIn/OxyCreateAccountPanel.js +236 -0
  41. package/lib/commonjs/ui/components/signIn/OxyCreateAccountPanel.js.map +1 -0
  42. package/lib/commonjs/ui/components/signIn/OxyDeleteAccountPanel.js +114 -0
  43. package/lib/commonjs/ui/components/signIn/OxyDeleteAccountPanel.js.map +1 -0
  44. package/lib/commonjs/ui/components/signIn/OxyLinkCommonsPanel.js +275 -0
  45. package/lib/commonjs/ui/components/signIn/OxyLinkCommonsPanel.js.map +1 -0
  46. package/lib/commonjs/ui/components/signIn/OxyRecoverAccountPanel.js +170 -0
  47. package/lib/commonjs/ui/components/signIn/OxyRecoverAccountPanel.js.map +1 -0
  48. package/lib/commonjs/ui/components/signIn/OxySignInPanel.js +371 -0
  49. package/lib/commonjs/ui/components/signIn/OxySignInPanel.js.map +1 -0
  50. package/lib/commonjs/ui/components/signIn/OxySignUpPanel.js +78 -0
  51. package/lib/commonjs/ui/components/signIn/OxySignUpPanel.js.map +1 -0
  52. package/lib/commonjs/ui/components/signIn/accountFlowParts.js +244 -0
  53. package/lib/commonjs/ui/components/signIn/accountFlowParts.js.map +1 -0
  54. package/lib/commonjs/ui/components/signIn/artwork.js +21 -0
  55. package/lib/commonjs/ui/components/signIn/artwork.js.map +1 -0
  56. package/lib/commonjs/ui/components/signIn/passkeyError.js +46 -0
  57. package/lib/commonjs/ui/components/signIn/passkeyError.js.map +1 -0
  58. package/lib/commonjs/ui/components/signIn/signInMethods.js +46 -0
  59. package/lib/commonjs/ui/components/signIn/signInMethods.js.map +1 -0
  60. package/lib/commonjs/ui/context/OxyContext.js +16 -16
  61. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  62. package/lib/commonjs/ui/context/commitSessionFlow.js +0 -43
  63. package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
  64. package/lib/commonjs/ui/context/passkeyFlow.js +22 -0
  65. package/lib/commonjs/ui/context/passkeyFlow.js.map +1 -1
  66. package/lib/commonjs/ui/hooks/accountDialogSnapshot.js +15 -1
  67. package/lib/commonjs/ui/hooks/accountDialogSnapshot.js.map +1 -1
  68. package/lib/commonjs/ui/hooks/useDeviceSwitcher.js +1 -3
  69. package/lib/commonjs/ui/hooks/useDeviceSwitcher.js.map +1 -1
  70. package/lib/commonjs/ui/oauth/browserAuthTransport.js +11 -4
  71. package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -1
  72. package/lib/commonjs/ui/oauth/oauthHandshake.js +3 -0
  73. package/lib/commonjs/ui/oauth/oauthHandshake.js.map +1 -1
  74. package/lib/commonjs/ui/oauth/oauthPopup.js +2 -3
  75. package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -1
  76. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +0 -23
  77. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/EditProfileScreen.js +0 -8
  79. package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/ManageAccountScreen.js +3 -4
  81. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
  83. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  84. package/lib/commonjs/ui/session/authStore.js +0 -21
  85. package/lib/commonjs/ui/session/authStore.js.map +1 -1
  86. package/lib/commonjs/ui/utils/accountDeletionHandoff.js +2 -2
  87. package/lib/commonjs/ui/utils/accountDeletionHandoff.js.map +1 -1
  88. package/lib/module/assets/assets/signIn/slide-1.jpg +0 -0
  89. package/lib/module/assets/assets/signIn/slide-1.jpg.d.ts +3 -0
  90. package/lib/module/assets/assets/signIn/slide-2.jpg +0 -0
  91. package/lib/module/assets/assets/signIn/slide-2.jpg.d.ts +3 -0
  92. package/lib/module/assets/assets/signIn/slide-3.jpg +0 -0
  93. package/lib/module/assets/assets/signIn/slide-3.jpg.d.ts +3 -0
  94. package/lib/module/assets/assets/signIn/slide-4.jpg +0 -0
  95. package/lib/module/assets/assets/signIn/slide-4.jpg.d.ts +3 -0
  96. package/lib/module/assets/signIn/slide-1.jpg +0 -0
  97. package/lib/module/assets/signIn/slide-2.jpg +0 -0
  98. package/lib/module/assets/signIn/slide-3.jpg +0 -0
  99. package/lib/module/assets/signIn/slide-4.jpg +0 -0
  100. package/lib/module/index.js +14 -6
  101. package/lib/module/index.js.map +1 -1
  102. package/lib/module/ui/components/OxyAccountDialogScreen.js +14 -59
  103. package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
  104. package/lib/module/ui/components/OxyAuthChooser.js +37 -46
  105. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  106. package/lib/module/ui/components/OxyProvider.js +0 -2
  107. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  108. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  109. package/lib/module/ui/components/authChooser/AccountsMenuView.js +22 -10
  110. package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  111. package/lib/module/ui/components/authChooser/primitives.js +1 -44
  112. package/lib/module/ui/components/authChooser/primitives.js.map +1 -1
  113. package/lib/module/ui/components/authChooser/signInFailureMessage.js +1 -7
  114. package/lib/module/ui/components/authChooser/signInFailureMessage.js.map +1 -1
  115. package/lib/module/ui/components/authChooser/styles.js +0 -31
  116. package/lib/module/ui/components/authChooser/styles.js.map +1 -1
  117. package/lib/module/ui/components/authChooser/types.js +2 -2
  118. package/lib/module/ui/components/authChooser/types.js.map +1 -1
  119. package/lib/module/ui/components/oauthNavigation.js +1 -1
  120. package/lib/module/ui/components/signIn/InlineCommonsQr.js +157 -0
  121. package/lib/module/ui/components/signIn/InlineCommonsQr.js.map +1 -0
  122. package/lib/module/ui/components/signIn/OxyAccountPicker.js +106 -0
  123. package/lib/module/ui/components/signIn/OxyAccountPicker.js.map +1 -0
  124. package/lib/module/ui/components/signIn/OxyAuthScreen.js +151 -0
  125. package/lib/module/ui/components/signIn/OxyAuthScreen.js.map +1 -0
  126. package/lib/module/ui/components/signIn/OxyCreateAccountPanel.js +231 -0
  127. package/lib/module/ui/components/signIn/OxyCreateAccountPanel.js.map +1 -0
  128. package/lib/module/ui/components/signIn/OxyDeleteAccountPanel.js +109 -0
  129. package/lib/module/ui/components/signIn/OxyDeleteAccountPanel.js.map +1 -0
  130. package/lib/module/ui/components/signIn/OxyLinkCommonsPanel.js +270 -0
  131. package/lib/module/ui/components/signIn/OxyLinkCommonsPanel.js.map +1 -0
  132. package/lib/module/ui/components/signIn/OxyRecoverAccountPanel.js +165 -0
  133. package/lib/module/ui/components/signIn/OxyRecoverAccountPanel.js.map +1 -0
  134. package/lib/module/ui/components/signIn/OxySignInPanel.js +366 -0
  135. package/lib/module/ui/components/signIn/OxySignInPanel.js.map +1 -0
  136. package/lib/module/ui/components/signIn/OxySignUpPanel.js +75 -0
  137. package/lib/module/ui/components/signIn/OxySignUpPanel.js.map +1 -0
  138. package/lib/module/ui/components/signIn/accountFlowParts.js +235 -0
  139. package/lib/module/ui/components/signIn/accountFlowParts.js.map +1 -0
  140. package/lib/module/ui/components/signIn/artwork.js +16 -0
  141. package/lib/module/ui/components/signIn/artwork.js.map +1 -0
  142. package/lib/module/ui/components/signIn/passkeyError.js +40 -0
  143. package/lib/module/ui/components/signIn/passkeyError.js.map +1 -0
  144. package/lib/module/ui/components/signIn/signInMethods.js +42 -0
  145. package/lib/module/ui/components/signIn/signInMethods.js.map +1 -0
  146. package/lib/module/ui/context/OxyContext.js +17 -17
  147. package/lib/module/ui/context/OxyContext.js.map +1 -1
  148. package/lib/module/ui/context/commitSessionFlow.js +0 -42
  149. package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
  150. package/lib/module/ui/context/passkeyFlow.js +21 -0
  151. package/lib/module/ui/context/passkeyFlow.js.map +1 -1
  152. package/lib/module/ui/hooks/accountDialogSnapshot.js +14 -1
  153. package/lib/module/ui/hooks/accountDialogSnapshot.js.map +1 -1
  154. package/lib/module/ui/hooks/useDeviceSwitcher.js +3 -5
  155. package/lib/module/ui/hooks/useDeviceSwitcher.js.map +1 -1
  156. package/lib/module/ui/oauth/browserAuthTransport.js +11 -4
  157. package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -1
  158. package/lib/module/ui/oauth/oauthHandshake.js +3 -0
  159. package/lib/module/ui/oauth/oauthHandshake.js.map +1 -1
  160. package/lib/module/ui/oauth/oauthPopup.js +2 -3
  161. package/lib/module/ui/oauth/oauthPopup.js.map +1 -1
  162. package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -24
  163. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  164. package/lib/module/ui/screens/EditProfileScreen.js +0 -8
  165. package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
  166. package/lib/module/ui/screens/ManageAccountScreen.js +4 -5
  167. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  168. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
  169. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  170. package/lib/module/ui/session/authStore.js +1 -22
  171. package/lib/module/ui/session/authStore.js.map +1 -1
  172. package/lib/module/ui/utils/accountDeletionHandoff.js +3 -3
  173. package/lib/module/ui/utils/accountDeletionHandoff.js.map +1 -1
  174. package/lib/typescript/assets/signIn/slide-1.jpg.d.ts +3 -0
  175. package/lib/typescript/assets/signIn/slide-2.jpg.d.ts +3 -0
  176. package/lib/typescript/assets/signIn/slide-3.jpg.d.ts +3 -0
  177. package/lib/typescript/assets/signIn/slide-4.jpg.d.ts +3 -0
  178. package/lib/typescript/commonjs/index.d.ts +16 -2
  179. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  180. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  181. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +5 -12
  182. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  184. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts +1 -1
  185. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  186. package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  187. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts +0 -19
  188. package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts.map +1 -1
  189. package/lib/typescript/commonjs/ui/components/authChooser/signInFailureMessage.d.ts +1 -5
  190. package/lib/typescript/commonjs/ui/components/authChooser/signInFailureMessage.d.ts.map +1 -1
  191. package/lib/typescript/commonjs/ui/components/authChooser/styles.d.ts +0 -31
  192. package/lib/typescript/commonjs/ui/components/authChooser/styles.d.ts.map +1 -1
  193. package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts +2 -7
  194. package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts.map +1 -1
  195. package/lib/typescript/commonjs/ui/components/oauthNavigation.d.ts +1 -1
  196. package/lib/typescript/commonjs/ui/components/signIn/InlineCommonsQr.d.ts +20 -0
  197. package/lib/typescript/commonjs/ui/components/signIn/InlineCommonsQr.d.ts.map +1 -0
  198. package/lib/typescript/commonjs/ui/components/signIn/OxyAccountPicker.d.ts +34 -0
  199. package/lib/typescript/commonjs/ui/components/signIn/OxyAccountPicker.d.ts.map +1 -0
  200. package/lib/typescript/commonjs/ui/components/signIn/OxyAuthScreen.d.ts +43 -0
  201. package/lib/typescript/commonjs/ui/components/signIn/OxyAuthScreen.d.ts.map +1 -0
  202. package/lib/typescript/commonjs/ui/components/signIn/OxyCreateAccountPanel.d.ts +24 -0
  203. package/lib/typescript/commonjs/ui/components/signIn/OxyCreateAccountPanel.d.ts.map +1 -0
  204. package/lib/typescript/commonjs/ui/components/signIn/OxyDeleteAccountPanel.d.ts +16 -0
  205. package/lib/typescript/commonjs/ui/components/signIn/OxyDeleteAccountPanel.d.ts.map +1 -0
  206. package/lib/typescript/commonjs/ui/components/signIn/OxyLinkCommonsPanel.d.ts +21 -0
  207. package/lib/typescript/commonjs/ui/components/signIn/OxyLinkCommonsPanel.d.ts.map +1 -0
  208. package/lib/typescript/commonjs/ui/components/signIn/OxyRecoverAccountPanel.d.ts +20 -0
  209. package/lib/typescript/commonjs/ui/components/signIn/OxyRecoverAccountPanel.d.ts.map +1 -0
  210. package/lib/typescript/commonjs/ui/components/signIn/OxySignInPanel.d.ts +43 -0
  211. package/lib/typescript/commonjs/ui/components/signIn/OxySignInPanel.d.ts.map +1 -0
  212. package/lib/typescript/commonjs/ui/components/signIn/OxySignUpPanel.d.ts +17 -0
  213. package/lib/typescript/commonjs/ui/components/signIn/OxySignUpPanel.d.ts.map +1 -0
  214. package/lib/typescript/commonjs/ui/components/signIn/accountFlowParts.d.ts +60 -0
  215. package/lib/typescript/commonjs/ui/components/signIn/accountFlowParts.d.ts.map +1 -0
  216. package/lib/typescript/commonjs/ui/components/signIn/artwork.d.ts +8 -0
  217. package/lib/typescript/commonjs/ui/components/signIn/artwork.d.ts.map +1 -0
  218. package/lib/typescript/commonjs/ui/components/signIn/passkeyError.d.ts +16 -0
  219. package/lib/typescript/commonjs/ui/components/signIn/passkeyError.d.ts.map +1 -0
  220. package/lib/typescript/commonjs/ui/components/signIn/signInMethods.d.ts +39 -0
  221. package/lib/typescript/commonjs/ui/components/signIn/signInMethods.d.ts.map +1 -0
  222. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  223. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts +0 -40
  224. package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
  225. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +15 -10
  226. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
  227. package/lib/typescript/commonjs/ui/context/passkeyFlow.d.ts +16 -1
  228. package/lib/typescript/commonjs/ui/context/passkeyFlow.d.ts.map +1 -1
  229. package/lib/typescript/commonjs/ui/hooks/accountDialogSnapshot.d.ts +7 -1
  230. package/lib/typescript/commonjs/ui/hooks/accountDialogSnapshot.d.ts.map +1 -1
  231. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  232. package/lib/typescript/commonjs/ui/hooks/useDeviceSwitcher.d.ts.map +1 -1
  233. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts +9 -0
  234. package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  235. package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts +3 -0
  236. package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts.map +1 -1
  237. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts +2 -3
  238. package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -1
  239. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts +1 -1
  240. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  241. package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
  242. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  243. package/lib/typescript/commonjs/ui/session/authStore.d.ts +0 -30
  244. package/lib/typescript/commonjs/ui/session/authStore.d.ts.map +1 -1
  245. package/lib/typescript/commonjs/ui/types/navigation.d.ts +0 -26
  246. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  247. package/lib/typescript/module/index.d.ts +16 -2
  248. package/lib/typescript/module/index.d.ts.map +1 -1
  249. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  250. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +5 -12
  251. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  252. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  253. package/lib/typescript/module/ui/components/ProfileButton.d.ts +1 -1
  254. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  255. package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
  256. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts +0 -19
  257. package/lib/typescript/module/ui/components/authChooser/primitives.d.ts.map +1 -1
  258. package/lib/typescript/module/ui/components/authChooser/signInFailureMessage.d.ts +1 -5
  259. package/lib/typescript/module/ui/components/authChooser/signInFailureMessage.d.ts.map +1 -1
  260. package/lib/typescript/module/ui/components/authChooser/styles.d.ts +0 -31
  261. package/lib/typescript/module/ui/components/authChooser/styles.d.ts.map +1 -1
  262. package/lib/typescript/module/ui/components/authChooser/types.d.ts +2 -7
  263. package/lib/typescript/module/ui/components/authChooser/types.d.ts.map +1 -1
  264. package/lib/typescript/module/ui/components/oauthNavigation.d.ts +1 -1
  265. package/lib/typescript/module/ui/components/signIn/InlineCommonsQr.d.ts +20 -0
  266. package/lib/typescript/module/ui/components/signIn/InlineCommonsQr.d.ts.map +1 -0
  267. package/lib/typescript/module/ui/components/signIn/OxyAccountPicker.d.ts +34 -0
  268. package/lib/typescript/module/ui/components/signIn/OxyAccountPicker.d.ts.map +1 -0
  269. package/lib/typescript/module/ui/components/signIn/OxyAuthScreen.d.ts +43 -0
  270. package/lib/typescript/module/ui/components/signIn/OxyAuthScreen.d.ts.map +1 -0
  271. package/lib/typescript/module/ui/components/signIn/OxyCreateAccountPanel.d.ts +24 -0
  272. package/lib/typescript/module/ui/components/signIn/OxyCreateAccountPanel.d.ts.map +1 -0
  273. package/lib/typescript/module/ui/components/signIn/OxyDeleteAccountPanel.d.ts +16 -0
  274. package/lib/typescript/module/ui/components/signIn/OxyDeleteAccountPanel.d.ts.map +1 -0
  275. package/lib/typescript/module/ui/components/signIn/OxyLinkCommonsPanel.d.ts +21 -0
  276. package/lib/typescript/module/ui/components/signIn/OxyLinkCommonsPanel.d.ts.map +1 -0
  277. package/lib/typescript/module/ui/components/signIn/OxyRecoverAccountPanel.d.ts +20 -0
  278. package/lib/typescript/module/ui/components/signIn/OxyRecoverAccountPanel.d.ts.map +1 -0
  279. package/lib/typescript/module/ui/components/signIn/OxySignInPanel.d.ts +43 -0
  280. package/lib/typescript/module/ui/components/signIn/OxySignInPanel.d.ts.map +1 -0
  281. package/lib/typescript/module/ui/components/signIn/OxySignUpPanel.d.ts +17 -0
  282. package/lib/typescript/module/ui/components/signIn/OxySignUpPanel.d.ts.map +1 -0
  283. package/lib/typescript/module/ui/components/signIn/accountFlowParts.d.ts +60 -0
  284. package/lib/typescript/module/ui/components/signIn/accountFlowParts.d.ts.map +1 -0
  285. package/lib/typescript/module/ui/components/signIn/artwork.d.ts +8 -0
  286. package/lib/typescript/module/ui/components/signIn/artwork.d.ts.map +1 -0
  287. package/lib/typescript/module/ui/components/signIn/passkeyError.d.ts +16 -0
  288. package/lib/typescript/module/ui/components/signIn/passkeyError.d.ts.map +1 -0
  289. package/lib/typescript/module/ui/components/signIn/signInMethods.d.ts +39 -0
  290. package/lib/typescript/module/ui/components/signIn/signInMethods.d.ts.map +1 -0
  291. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  292. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts +0 -40
  293. package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
  294. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +15 -10
  295. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
  296. package/lib/typescript/module/ui/context/passkeyFlow.d.ts +16 -1
  297. package/lib/typescript/module/ui/context/passkeyFlow.d.ts.map +1 -1
  298. package/lib/typescript/module/ui/hooks/accountDialogSnapshot.d.ts +7 -1
  299. package/lib/typescript/module/ui/hooks/accountDialogSnapshot.d.ts.map +1 -1
  300. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  301. package/lib/typescript/module/ui/hooks/useDeviceSwitcher.d.ts.map +1 -1
  302. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts +9 -0
  303. package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -1
  304. package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts +3 -0
  305. package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts.map +1 -1
  306. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts +2 -3
  307. package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -1
  308. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts +1 -1
  309. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  310. package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -1
  311. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  312. package/lib/typescript/module/ui/session/authStore.d.ts +0 -30
  313. package/lib/typescript/module/ui/session/authStore.d.ts.map +1 -1
  314. package/lib/typescript/module/ui/types/navigation.d.ts +0 -26
  315. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  316. package/package.json +4 -7
  317. package/src/assets/signIn/slide-1.jpg +0 -0
  318. package/src/assets/signIn/slide-1.jpg.d.ts +3 -0
  319. package/src/assets/signIn/slide-2.jpg +0 -0
  320. package/src/assets/signIn/slide-2.jpg.d.ts +3 -0
  321. package/src/assets/signIn/slide-3.jpg +0 -0
  322. package/src/assets/signIn/slide-3.jpg.d.ts +3 -0
  323. package/src/assets/signIn/slide-4.jpg +0 -0
  324. package/src/assets/signIn/slide-4.jpg.d.ts +3 -0
  325. package/src/index.ts +27 -7
  326. package/src/ui/components/OxyAccountDialogScreen.tsx +11 -72
  327. package/src/ui/components/OxyAuthChooser.tsx +37 -54
  328. package/src/ui/components/OxyProvider.tsx +0 -2
  329. package/src/ui/components/ProfileButton.tsx +1 -4
  330. package/src/ui/components/authChooser/AccountsMenuView.tsx +28 -8
  331. package/src/ui/components/authChooser/primitives.tsx +1 -39
  332. package/src/ui/components/authChooser/signInFailureMessage.ts +1 -7
  333. package/src/ui/components/authChooser/styles.ts +0 -31
  334. package/src/ui/components/authChooser/types.ts +2 -7
  335. package/src/ui/components/oauthNavigation.ts +1 -1
  336. package/src/ui/components/signIn/InlineCommonsQr.tsx +135 -0
  337. package/src/ui/components/signIn/OxyAccountPicker.tsx +129 -0
  338. package/src/ui/components/signIn/OxyAuthScreen.tsx +123 -0
  339. package/src/ui/components/signIn/OxyCreateAccountPanel.tsx +207 -0
  340. package/src/ui/components/signIn/OxyDeleteAccountPanel.tsx +106 -0
  341. package/src/ui/components/signIn/OxyLinkCommonsPanel.tsx +222 -0
  342. package/src/ui/components/signIn/OxyRecoverAccountPanel.tsx +154 -0
  343. package/src/ui/components/signIn/OxySignInPanel.tsx +392 -0
  344. package/src/ui/components/signIn/OxySignUpPanel.tsx +86 -0
  345. package/src/ui/components/signIn/accountFlowParts.tsx +204 -0
  346. package/src/ui/components/signIn/artwork.ts +13 -0
  347. package/src/ui/components/signIn/passkeyError.ts +44 -0
  348. package/src/ui/components/signIn/signInMethods.ts +51 -0
  349. package/src/ui/context/OxyContext.tsx +23 -19
  350. package/src/ui/context/__tests__/commitSessionFlow.test.ts +0 -89
  351. package/src/ui/context/__tests__/passkeyFlow.test.ts +59 -1
  352. package/src/ui/context/commitSessionFlow.ts +0 -61
  353. package/src/ui/context/oxyContextTypes.ts +16 -10
  354. package/src/ui/context/passkeyFlow.ts +28 -0
  355. package/src/ui/hooks/accountDialogSnapshot.ts +20 -1
  356. package/src/ui/hooks/useDeviceSwitcher.ts +3 -11
  357. package/src/ui/oauth/__tests__/browserAuthTransport.test.ts +21 -0
  358. package/src/ui/oauth/browserAuthTransport.ts +14 -4
  359. package/src/ui/oauth/oauthHandshake.ts +4 -1
  360. package/src/ui/oauth/oauthPopup.ts +2 -3
  361. package/src/ui/screens/EditProfileFieldScreen.tsx +1 -27
  362. package/src/ui/screens/EditProfileScreen.tsx +0 -6
  363. package/src/ui/screens/ManageAccountScreen.tsx +4 -5
  364. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +1 -1
  365. package/src/ui/session/authStore.ts +0 -37
  366. package/src/ui/types/navigation.ts +0 -26
  367. package/src/ui/utils/accountDeletionHandoff.ts +3 -3
  368. package/lib/commonjs/ui/components/authChooser/SignInEntryView.js +0 -132
  369. package/lib/commonjs/ui/components/authChooser/SignInEntryView.js.map +0 -1
  370. package/lib/commonjs/ui/components/authChooser/SignUpView.js +0 -77
  371. package/lib/commonjs/ui/components/authChooser/SignUpView.js.map +0 -1
  372. package/lib/commonjs/ui/components/passkeyHubPopup.js +0 -33
  373. package/lib/commonjs/ui/components/passkeyHubPopup.js.map +0 -1
  374. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js +0 -48
  375. package/lib/commonjs/ui/oauth/legacyRedirectLanes.js.map +0 -1
  376. package/lib/module/ui/components/authChooser/SignInEntryView.js +0 -127
  377. package/lib/module/ui/components/authChooser/SignInEntryView.js.map +0 -1
  378. package/lib/module/ui/components/authChooser/SignUpView.js +0 -73
  379. package/lib/module/ui/components/authChooser/SignUpView.js.map +0 -1
  380. package/lib/module/ui/components/passkeyHubPopup.js +0 -29
  381. package/lib/module/ui/components/passkeyHubPopup.js.map +0 -1
  382. package/lib/module/ui/oauth/legacyRedirectLanes.js +0 -44
  383. package/lib/module/ui/oauth/legacyRedirectLanes.js.map +0 -1
  384. package/lib/typescript/commonjs/ui/components/authChooser/SignInEntryView.d.ts +0 -39
  385. package/lib/typescript/commonjs/ui/components/authChooser/SignInEntryView.d.ts.map +0 -1
  386. package/lib/typescript/commonjs/ui/components/authChooser/SignUpView.d.ts +0 -31
  387. package/lib/typescript/commonjs/ui/components/authChooser/SignUpView.d.ts.map +0 -1
  388. package/lib/typescript/commonjs/ui/components/passkeyHubPopup.d.ts +0 -23
  389. package/lib/typescript/commonjs/ui/components/passkeyHubPopup.d.ts.map +0 -1
  390. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts +0 -40
  391. package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts.map +0 -1
  392. package/lib/typescript/module/ui/components/authChooser/SignInEntryView.d.ts +0 -39
  393. package/lib/typescript/module/ui/components/authChooser/SignInEntryView.d.ts.map +0 -1
  394. package/lib/typescript/module/ui/components/authChooser/SignUpView.d.ts +0 -31
  395. package/lib/typescript/module/ui/components/authChooser/SignUpView.d.ts.map +0 -1
  396. package/lib/typescript/module/ui/components/passkeyHubPopup.d.ts +0 -23
  397. package/lib/typescript/module/ui/components/passkeyHubPopup.d.ts.map +0 -1
  398. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts +0 -40
  399. package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts.map +0 -1
  400. package/src/ui/components/authChooser/SignInEntryView.tsx +0 -157
  401. package/src/ui/components/authChooser/SignUpView.tsx +0 -76
  402. package/src/ui/components/passkeyHubPopup.ts +0 -28
  403. package/src/ui/oauth/legacyRedirectLanes.ts +0 -43
@@ -22,18 +22,15 @@
22
22
  */
23
23
 
24
24
  import type React from 'react';
25
- import { useCallback, useSyncExternalStore } from 'react';
25
+ import { useCallback } from 'react';
26
26
  import { StyleSheet, View } from 'react-native';
27
- import type { AccountDialogSnapshot } from '@oxy.so/core';
28
27
  import { useOxy } from '../context/OxyContext';
29
28
  import { useI18n } from '../hooks/useI18n';
30
29
  import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
31
30
  import type { BaseScreenProps } from '../types/navigation';
32
31
  import LogoText from './logo/LogoText';
33
32
  import OxyAuthChooser from './OxyAuthChooser';
34
- import { EMPTY_ACCOUNT_DIALOG_SNAPSHOT } from '../hooks/accountDialogSnapshot';
35
-
36
- type Translate = ReturnType<typeof useI18n>['t'];
33
+ import { useAccountDialogSnapshot } from '../hooks/accountDialogSnapshot';
37
34
 
38
35
  /**
39
36
  * The account MENU's nav bar carries the Oxy wordmark instead of a title — the
@@ -60,25 +57,9 @@ const OxyAccountDialogScreen: React.FC<BaseScreenProps> = ({ canGoBack }) => {
60
57
  const { accountDialogController: controller, closeAccountDialog } = useOxy();
61
58
  const { t } = useI18n();
62
59
 
63
- // A lightweight, header-only binding to the same controller `OxyAuthChooser`
64
- // binds independently — cheap, and the established pattern here (
65
- // `useDeviceSwitcher` also binds to this controller on its own).
66
- const subscribe = useCallback(
67
- (listener: () => void) => (controller ? controller.subscribe(listener) : () => undefined),
68
- [controller],
69
- );
70
- const getSnapshot = useCallback(
71
- () => (controller ? controller.getSnapshot() : EMPTY_ACCOUNT_DIALOG_SNAPSHOT),
72
- [controller],
73
- );
74
- const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
60
+ const snapshot = useAccountDialogSnapshot(controller);
75
61
 
76
62
  const { view } = snapshot;
77
- // Names the entry view "Add another account" rather than "Sign in" only when
78
- // THIS app is signed in. Not the directory's size: the device can go on
79
- // listing a shared identity (Commons') after the app signed out, and that
80
- // titled a signed-out sheet "Add another account" (OxyHQ/oxy#1375 item 21).
81
- const hasSignedInAccounts = snapshot.hasSession;
82
63
  // Where back leads is the CONTROLLER's answer (`snapshot.backView`), never a
83
64
  // table here: a host-side "back = accounts" assumed a signed-in origin and
84
65
  // opened the account menu for nobody on a signed-out Back from sign-up.
@@ -93,18 +74,15 @@ const OxyAccountDialogScreen: React.FC<BaseScreenProps> = ({ canGoBack }) => {
93
74
  // `closeAccountDialog` so the pop + state teardown stay in one place. Opened
94
75
  // cold (detached) it is the root frame → `canGoBack` is false → no back.
95
76
  const backsToHost = !showBack && (canGoBack?.() ?? false);
96
- // The account MENU is branded, not titled: its nav bar carries the Oxy
97
- // wordmark and no large title. The current account is named by the HERO block
98
- // `OxyAuthChooser` renders under it (email + large avatar + greeting), never
99
- // by the bar. Every OTHER view keeps the SHARED Dialog nav header the rest of
100
- // the SDK uses — a large in-content title/subtitle that collapses into the bar
101
- // on scroll — because their copy is informative.
102
- const copy = view === 'accounts' ? null : headerCopy(view, hasSignedInAccounts, t);
77
+ // The sign-in and sign-up screens carry their own header — the Oxy mark and
78
+ // the large title auth.oxy.so shows — so the bar holds only the way back.
79
+ // The account MENU is branded with the wordmark (the hero under it names the
80
+ // account); the active request is titled, route-agnostically, because Oxy
81
+ // picks how it travels (issue #691).
103
82
 
104
83
  useSurfaceHeader({
105
- titleContent: copy ? undefined : NAV_LOGO,
106
- title: copy?.title,
107
- subtitle: copy?.subtitle ?? undefined,
84
+ titleContent: view === 'accounts' ? NAV_LOGO : undefined,
85
+ title: view === 'qr' ? t('accountSwitcher.signInWithOxy') : undefined,
108
86
  onBack: showBack ? goBack : backsToHost ? closeAccountDialog : undefined,
109
87
  });
110
88
 
@@ -119,45 +97,6 @@ const OxyAccountDialogScreen: React.FC<BaseScreenProps> = ({ canGoBack }) => {
119
97
  );
120
98
  };
121
99
 
122
- // ---------------------------------------------------------------------------
123
- // Copy + helpers
124
- // ---------------------------------------------------------------------------
125
-
126
- function headerCopy(
127
- view: Exclude<AccountDialogSnapshot['view'], 'accounts'>,
128
- hasSignedInAccounts: boolean,
129
- t: Translate,
130
- ): { title: string; subtitle: string | null } {
131
- switch (view) {
132
- // The ACTIVE REQUEST. Its header is deliberately route-AGNOSTIC: Oxy picks
133
- // the delivery route (QR here, a push to the user's phone, or opening
134
- // Commons on this device — issue #691), so naming one of them in the bar
135
- // would contradict the other two. The route-specific status line lives in
136
- // the body, derived from `signIn.progress`, and is the only thing that
137
- // describes HOW the request is travelling.
138
- case 'qr':
139
- return {
140
- title: t('accountSwitcher.signInWithOxy') || 'Sign in with Oxy',
141
- subtitle: null,
142
- };
143
- case 'signup':
144
- return {
145
- title: t('signup.title') || 'Create your account',
146
- subtitle: t('signup.subtitle') || 'One identity for the whole ecosystem.',
147
- };
148
- default:
149
- return hasSignedInAccounts
150
- ? {
151
- title: t('signin.addAccountTitle') || 'Add another account',
152
- subtitle: t('signin.addAccountSubtitle') || 'Sign in with another account.',
153
- }
154
- : {
155
- title: t('signin.title') || 'Sign in',
156
- subtitle: t('signin.subtitle') || 'One identity for the whole ecosystem.',
157
- };
158
- }
159
- }
160
-
161
100
  /**
162
101
  * The screen gutter. In the Dialog's nav-header mode the surface adds NO content
163
102
  * padding of its own — the large title and each screen own theirs — so this must
@@ -169,7 +108,7 @@ const SCREEN_MARGIN = 20;
169
108
  const styles = StyleSheet.create({
170
109
  bodyContent: {
171
110
  paddingTop: 4,
172
- paddingBottom: 4,
111
+ paddingBottom: 20,
173
112
  paddingHorizontal: SCREEN_MARGIN,
174
113
  },
175
114
  });
@@ -15,17 +15,16 @@
15
15
  * responsibility each:
16
16
  *
17
17
  * - `accounts` → `AccountsMenuView` — the signed-in Oxy account menu.
18
- * - `add` / `signin` → `SignInEntryView` — ONE primary action, "Continue with
19
- * Oxy" (issue #691, Phase 5). On WEB this view is transient: the flow
20
- * auto-starts the instant the view is reached, because the request surface
21
- * (a QR on an unknown desktop, "Check Commons on your phone" where Oxy could
22
- * deliver) IS the primary route there, never something behind a second tap.
18
+ * - `add` / `signin` → `OxySignInPanel` — THE sign-in screen, the one
19
+ * auth.oxy.so renders too: the device's accounts, then "Continue with
20
+ * Oxy" (on the web, auth.oxy.so's window over the app).
23
21
  * - `qr` → `SignInRequestView` — the ACTIVE REQUEST: the controller-bound
24
22
  * wiring over the shared, presentational `OxySignInRequestSurface` (the same
25
23
  * component the auth.oxy.so IdP mounts from its OAuth-bound request). It maps
26
24
  * `snapshot.signIn` onto that surface's props; alternatives stay behind
27
25
  * "Having trouble?" until the chosen route reports `routeFailed`.
28
- * - `signup` → `SignUpView` — account creation, Commons-first.
26
+ * - `signup` → `OxySignUpPanel` — account creation: auth.oxy.so's window on
27
+ * the web, Commons on native.
29
28
  *
30
29
  * Per-account color re-theming uses Bloom's `APP_COLOR_PRESETS` + `BloomColorScope`
31
30
  * (same visual language auth.oxy.so uses). Base theming is `useTheme()` + a
@@ -39,7 +38,7 @@ import { Linking, Platform } from 'react-native';
39
38
  import { toast } from '@oxy.so/bloom/toast';
40
39
  import { surfaces } from '@oxy.so/bloom/surfaces';
41
40
  import { useTheme } from '@oxy.so/bloom/theme';
42
- import { IDENTITY_WEB_ORIGIN, getNormalizedUserHandle, type User } from '@oxy.so/core';
41
+ import { getNormalizedUserHandle, type OxyAuthScreen, type User } from '@oxy.so/core';
43
42
  import { useQueryClient } from '@tanstack/react-query';
44
43
  import { useOxy } from '../context/OxyContext';
45
44
  import { useDeviceSwitcher } from '../hooks/useDeviceSwitcher';
@@ -52,9 +51,7 @@ import { isWebBrowser } from '../utils/isWebBrowser';
52
51
  import { getCommonsAcquisitionUrl } from '../utils/commonsStoreLinks';
53
52
  import { useAccountStorageUsage } from '../hooks/queries/useServicesQueries';
54
53
  import AccountsMenuView from './authChooser/AccountsMenuView';
55
- import SignInEntryView from './authChooser/SignInEntryView';
56
54
  import SignInRequestView from './authChooser/SignInRequestView';
57
- import SignUpView from './authChooser/SignUpView';
58
55
  import { signInFailureMessage } from './authChooser/signInFailureMessage';
59
56
  import {
60
57
  resolveAccentHex,
@@ -66,9 +63,9 @@ import {
66
63
  type SignInAlternatives,
67
64
  } from './authChooser/types';
68
65
  import { EMPTY_ACCOUNT_DIALOG_SNAPSHOT } from '../hooks/accountDialogSnapshot';
66
+ import { OxySignInPanel } from './signIn/OxySignInPanel';
67
+ import { OxySignUpPanel } from './signIn/OxySignUpPanel';
69
68
 
70
- /** Commons' own identity-creation deep link (mirrors the `approve`/`attest`/`card` intents). */
71
- const COMMONS_CREATE_IDENTITY_URL = 'oxycommons://create-identity';
72
69
  /**
73
70
  * "Accounts by Oxy" management app — the canonical home for account settings,
74
71
  * data export, and storage management. The account-menu rows deep-link into it
@@ -90,12 +87,6 @@ const toastedFailureAttempt = new WeakMap<object, number>();
90
87
  export interface OxyAuthChooserProps {
91
88
  /** Called after a completed switch, sign-in, or sign-up. */
92
89
  onComplete?: () => void;
93
- /**
94
- * @deprecated No effect. The web sign-in entry no longer auto-starts a
95
- * device-flow request: its primary action opens the identity origin
96
- * (`id.oxy.so`) in a popup, which a browser only allows from a user gesture.
97
- */
98
- autoStartSignIn?: boolean;
99
90
  }
100
91
 
101
92
  /**
@@ -111,6 +102,7 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({ onComplete }) => {
111
102
  logout,
112
103
  openAvatarPicker,
113
104
  user,
105
+ continueOnAuth,
114
106
  } = useOxy();
115
107
  const theme = useTheme();
116
108
  const { t } = useI18n();
@@ -120,13 +112,23 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({ onComplete }) => {
120
112
  // so the two switchers cannot drift.
121
113
  const { principals } = useDeviceSwitcher();
122
114
 
123
- // Web sign-in and sign-up run at the identity origin (`id.oxy.so`), never
124
- // on this page, whatever this page's origin: that is where the passkey
125
- // ceremony can run for any app AND where the account's identity is created
126
- // and kept sealed under the passkey (one identity, two carriers). Native has
127
- // no passkey path: Commons owns identity there ('none').
115
+ // On the web every sign-in and sign-up runs in auth.oxy.so's window over the
116
+ // app (`continueOnAuth`): the passkey belongs to that origin, and the
117
+ // browser's session lives there, shared by every Oxy app. Native has no
118
+ // passkey path: Commons owns identity there ('none').
128
119
  const passkeyMode = useMemo<PasskeyMode>(() => (isWebBrowser() ? 'hub' : 'none'), []);
129
120
 
121
+ /** auth.oxy.so's window; this surface closes once it signs the app in. */
122
+ const openOnOxy = useCallback(
123
+ (screen: OxyAuthScreen) => {
124
+ void continueOnAuth(screen).then((result) => {
125
+ if (result.status === 'signed-in') onComplete?.();
126
+ else if (result.status === 'failed') toast.error(t('signin.errors.failed'));
127
+ });
128
+ },
129
+ [continueOnAuth, onComplete, t],
130
+ );
131
+
130
132
  // Bind the headless controller. `getSnapshot` returns a stable reference
131
133
  // between changes, so it is `useSyncExternalStore`-safe. Guard the no-provider
132
134
  // loading state (`controller` is `null`) with an inert store.
@@ -140,7 +142,8 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({ onComplete }) => {
140
142
  if (!controller) return () => undefined;
141
143
  const maybeToastSignInError = () => {
142
144
  const { signIn } = controller.getSnapshot();
143
- if (signIn.phase !== 'error') return;
145
+ // The embedded QR's failures are its own to handle (it renews itself).
146
+ if (signIn.phase !== 'error' || signIn.inline) return;
144
147
  if (toastedFailureAttempt.get(controller) === signIn.attempt) return;
145
148
  toastedFailureAttempt.set(controller, signIn.attempt);
146
149
  const message = signInFailureMessage(signIn.failure, t);
@@ -363,18 +366,14 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({ onComplete }) => {
363
366
  const alternatives = useMemo<SignInAlternatives>(
364
367
  () => ({
365
368
  passkeyAvailable: passkeyMode !== 'none',
366
- // Called straight from the press: the popup opens before any await.
367
- onSignInWithPasskey: () => void controller?.startPasskeyHubSignIn(),
369
+ // auth.oxy.so asserts the passkey, in its window.
370
+ onSignInWithPasskey: () => openOnOxy('signin'),
368
371
  onShowQr: () => void controller?.showQr(),
369
372
  onGetCommons: () => openExternal(getCommonsAcquisitionUrl(Platform.OS)),
370
- // Web: the identity origin creates the account and its identity in the
371
- // same window a sign-in uses. Native: Commons creates the identity.
372
- onCreateAccount: () => {
373
- if (passkeyMode === 'hub') void controller?.startPasskeyHubSignIn();
374
- else controller?.startSignup();
375
- },
373
+ // Web: the account is made on auth.oxy.so. Native: Commons makes it.
374
+ onCreateAccount: () => (passkeyMode === 'hub' ? openOnOxy('signup') : controller?.startSignup()),
376
375
  }),
377
- [passkeyMode, controller, openExternal],
376
+ [passkeyMode, controller, openExternal, openOnOxy],
378
377
  );
379
378
 
380
379
  // Real storage usage for the account menu's "Oxy storage" block. Disabled
@@ -420,7 +419,6 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({ onComplete }) => {
420
419
  onSignOut: () => {
421
420
  void handleSignOut();
422
421
  },
423
- onOpenIdentity: passkeyMode === 'hub' ? () => openUrl(`${IDENTITY_WEB_ORIGIN}/`) : undefined,
424
422
  customItems: (consumerHooks?.menuItems ?? []).map((item) => ({
425
423
  ...item,
426
424
  onPress: () => {
@@ -429,7 +427,7 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({ onComplete }) => {
429
427
  },
430
428
  })),
431
429
  };
432
- }, [consumerHooks, onComplete, showBottomSheet, handleSignOut, openExternal, passkeyMode]);
430
+ }, [consumerHooks, onComplete, showBottomSheet, handleSignOut, openExternal]);
433
431
 
434
432
  if (!controller) {
435
433
  return null;
@@ -462,29 +460,14 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({ onComplete }) => {
462
460
  }
463
461
 
464
462
  if (view === 'signup') {
465
- return (
466
- <SignUpView
467
- snapshot={snapshot}
468
- theme={theme}
469
- t={t}
470
- passkeyMode={passkeyMode}
471
- onOpenHub={() => void controller.startPasskeyHubSignIn()}
472
- onCreateIdentityInCommons={() => openExternal(COMMONS_CREATE_IDENTITY_URL)}
473
- onGetCommons={alternatives.onGetCommons}
474
- onBackToSignIn={() => controller.setView('signin')}
475
- />
476
- );
463
+ return <OxySignUpPanel onSignIn={() => controller.setView('signin')} onCreateOnWeb={() => openOnOxy('signup')} />;
477
464
  }
478
465
 
479
466
  return (
480
- <SignInEntryView
481
- snapshot={snapshot}
482
- principals={principals}
483
- theme={theme}
484
- t={t}
485
- handlers={handlers}
486
- onContinueWithOxy={() => void controller.signInWithOxy()}
487
- alternatives={alternatives}
467
+ <OxySignInPanel
468
+ host="dialog"
469
+ onSignedIn={() => onComplete?.()}
470
+ onCreateAccount={alternatives.onCreateAccount}
488
471
  />
489
472
  );
490
473
  };
@@ -90,7 +90,6 @@ const OxyProvider: FC<OxyProviderProps> = ({
90
90
  queryClient: providedQueryClient,
91
91
  requireAuth = 'off',
92
92
  backgroundSession = false,
93
- deviceCredentialStorage = 'persistent',
94
93
  language,
95
94
  }) => {
96
95
 
@@ -240,7 +239,6 @@ const OxyProvider: FC<OxyProviderProps> = ({
240
239
  sessionMode={sessionMode}
241
240
  webAuthMode={webAuthMode}
242
241
  backgroundSession={backgroundSession}
243
- deviceCredentialStorage={deviceCredentialStorage}
244
242
  platformStorage={platformStorage}
245
243
  onAuthStateChange={onAuthStateChange as OxyRuntimeProviderProps['onAuthStateChange']}
246
244
  >
@@ -1,9 +1,6 @@
1
1
  import type React from 'react';
2
2
  import { useCallback, useEffect, useMemo } from 'react';
3
- import {
4
- type StyleProp,
5
- type ViewStyle,
6
- } from 'react-native';
3
+ import type { StyleProp, ViewStyle } from 'react-native';
7
4
  import { View } from 'react-native-css/components';
8
5
  import { RiLoginBoxLine } from '@oxy.so/bloom/icons/RiLoginBoxLine';
9
6
  import { RiMoreLine } from '@oxy.so/bloom/icons/RiMoreLine';
@@ -51,7 +51,6 @@ import {
51
51
  type SwitcherPrincipalRow,
52
52
  } from '@oxy.so/core';
53
53
  import AvatarCameraBadge from '../AvatarCameraBadge';
54
- import { HoverPressable } from './primitives';
55
54
  import { authChooserStyles as styles } from './styles';
56
55
  import {
57
56
  resolveAccentHex,
@@ -63,6 +62,34 @@ import {
63
62
  type Translate,
64
63
  } from './types';
65
64
 
65
+ type HoverPressableProps = Omit<React.ComponentProps<typeof Pressable>, 'className'> & {
66
+ baseClassName: string;
67
+ hoverClassName: string;
68
+ };
69
+
70
+ /**
71
+ * A `Pressable` that appends a hover-tint NativeWind token while pointer-hovered.
72
+ * The Metro web pipeline here does NOT emit NativeWind `hover:` variants, so hover
73
+ * is driven by RN's cross-platform `onHoverIn`/`onHoverOut` (they fire only on web
74
+ * via react-native-web; a no-op on native) toggling a plain background token —
75
+ * the tint stays a NativeWind class, only the trigger is JS.
76
+ */
77
+ const HoverPressable: React.FC<HoverPressableProps> = ({
78
+ baseClassName,
79
+ hoverClassName,
80
+ ...rest
81
+ }) => {
82
+ const [hovered, setHovered] = useState(false);
83
+ return (
84
+ <Pressable
85
+ {...rest}
86
+ className={hovered ? `${baseClassName} ${hoverClassName}` : baseClassName}
87
+ onHoverIn={() => setHovered(true)}
88
+ onHoverOut={() => setHovered(false)}
89
+ />
90
+ );
91
+ };
92
+
66
93
  /**
67
94
  * Leading glyph for the rows that live in a Bloom grouped section (the MENU
68
95
  * block) and for the storage card's cloud, which lines its title up with them.
@@ -477,13 +504,6 @@ const AccountsMenuView: React.FC<AccountsMenuViewProps> = ({
477
504
  title={t('accountMenu.settings')}
478
505
  onPress={menu.onOpenSettings}
479
506
  />
480
- {menu.onOpenIdentity ? (
481
- <SettingsListItem
482
- icon={<MenuIcon name="shield-account-outline" theme={theme} />}
483
- title={t('accountMenu.identity')}
484
- onPress={menu.onOpenIdentity}
485
- />
486
- ) : null}
487
507
  <SettingsListItem
488
508
  icon={<MenuIcon name="help-circle-outline" theme={theme} />}
489
509
  title={t('accountMenu.help')}
@@ -5,8 +5,7 @@
5
5
  */
6
6
 
7
7
  import type React from 'react';
8
- import { useState } from 'react';
9
- import { Pressable, View } from 'react-native-css/components';
8
+ import { Pressable, View } from 'react-native';
10
9
  import MaterialCommunityIcons from '../../icons/MaterialCommunityIcons';
11
10
  import { Avatar } from '@oxy.so/bloom/avatar';
12
11
  import { BloomColorScope } from '@oxy.so/bloom/theme';
@@ -18,34 +17,6 @@ import { resolveAccentHex, toPreset, type Theme } from './types';
18
17
  /** Diameter of a row avatar (the sign-in view's account rows). */
19
18
  const ROW_AVATAR_SIZE = 40;
20
19
 
21
- type HoverPressableProps = Omit<React.ComponentProps<typeof Pressable>, 'className'> & {
22
- baseClassName: string;
23
- hoverClassName: string;
24
- };
25
-
26
- /**
27
- * A `Pressable` that appends a hover-tint NativeWind token while pointer-hovered.
28
- * The Metro web pipeline here does NOT emit NativeWind `hover:` variants, so hover
29
- * is driven by RN's cross-platform `onHoverIn`/`onHoverOut` (they fire only on web
30
- * via react-native-web; a no-op on native) toggling a plain background token —
31
- * the tint stays a NativeWind class, only the trigger is JS.
32
- */
33
- export const HoverPressable: React.FC<HoverPressableProps> = ({
34
- baseClassName,
35
- hoverClassName,
36
- ...rest
37
- }) => {
38
- const [hovered, setHovered] = useState(false);
39
- return (
40
- <Pressable
41
- {...rest}
42
- className={hovered ? `${baseClassName} ${hoverClassName}` : baseClassName}
43
- onHoverIn={() => setHovered(true)}
44
- onHoverOut={() => setHovered(false)}
45
- />
46
- );
47
- };
48
-
49
20
  /**
50
21
  * A SUBORDINATE action: a small centred text link, never a button.
51
22
  *
@@ -73,15 +44,6 @@ export const SubtleLink: React.FC<{
73
44
  </Pressable>
74
45
  );
75
46
 
76
- /** A labelled hairline separating two blocks ("or"). */
77
- export const Dividerish: React.FC<{ theme: Theme; label: string }> = ({ theme, label }) => (
78
- <View style={styles.dividerRow}>
79
- <View style={[styles.dividerLine, { backgroundColor: theme.colors.border }]} />
80
- <Text style={[styles.dividerText, { color: theme.colors.textSecondary }]}>{label}</Text>
81
- <View style={[styles.dividerLine, { backgroundColor: theme.colors.border }]} />
82
- </View>
83
- );
84
-
85
47
  /**
86
48
  * A `principal acting as account` row on the sign-in entry — "continue as one of
87
49
  * these" rather than a choice of authentication METHOD, which is why it stays
@@ -9,18 +9,12 @@
9
9
  import type { SignInFailureReason } from '@oxy.so/core';
10
10
  import type { Translate } from './types';
11
11
 
12
- /**
13
- * The toast for `failure`, or `null` when there is nothing to report: a
14
- * `'cancelled'` attempt is the user's own choice (they closed the window), and
15
- * the surface already offers "Try again" without scolding them for it.
16
- */
12
+ /** The toast for `failure`, or `null` when there is nothing to report. */
17
13
  export function signInFailureMessage(
18
14
  failure: SignInFailureReason | null,
19
15
  t: Translate,
20
16
  ): string | null {
21
17
  switch (failure) {
22
- case 'cancelled':
23
- return null;
24
18
  case 'denied':
25
19
  return t('accountSwitcher.signInFailures.denied');
26
20
  case 'expired':
@@ -140,42 +140,11 @@ export const authChooserStyles = StyleSheet.create({
140
140
  fontSize: 14,
141
141
  fontWeight: '600',
142
142
  },
143
- signInBlock: {
144
- width: '100%',
145
- },
146
143
  primaryButton: {
147
144
  width: '100%',
148
145
  borderRadius: 14,
149
146
  marginTop: 8,
150
147
  },
151
- secondaryButton: {
152
- width: '100%',
153
- borderRadius: 14,
154
- marginTop: 10,
155
- },
156
- usernameInput: {
157
- width: '100%',
158
- borderWidth: StyleSheet.hairlineWidth,
159
- borderRadius: 14,
160
- paddingVertical: 12,
161
- paddingHorizontal: 14,
162
- fontSize: 16,
163
- marginTop: 8,
164
- },
165
- dividerRow: {
166
- flexDirection: 'row',
167
- alignItems: 'center',
168
- width: '100%',
169
- marginVertical: 14,
170
- },
171
- dividerLine: {
172
- flex: 1,
173
- height: StyleSheet.hairlineWidth,
174
- },
175
- dividerText: {
176
- marginHorizontal: 12,
177
- fontSize: 13,
178
- },
179
148
  centeredBlock: {
180
149
  alignItems: 'center',
181
150
  justifyContent: 'center',
@@ -95,11 +95,6 @@ export interface AccountsMenuActions {
95
95
  onPrivacy: () => void;
96
96
  onTerms: () => void;
97
97
  onSignOut: () => void;
98
- /**
99
- * Open the person's identity at the identity origin (recovery phrase,
100
- * recovery, account deletion). Web only — `undefined` hides the row.
101
- */
102
- onOpenIdentity?: () => void;
103
98
  customItems: readonly {
104
99
  key: string;
105
100
  label: string;
@@ -111,8 +106,8 @@ export interface AccountsMenuActions {
111
106
  /**
112
107
  * Where a passkey sign-in or sign-up can run from the current surface.
113
108
  *
114
- * `'hub'` = web: it runs at the identity origin (`id.oxy.so`) in a popup, on
115
- * every web origin, first-party or not.
109
+ * `'hub'` = web: it runs in auth.oxy.so's window over the app
110
+ * (`continueOnAuth`), on every web origin.
116
111
  * `'none'` = native, where Commons owns identity.
117
112
  */
118
113
  export type PasskeyMode = 'hub' | 'none';
@@ -52,7 +52,7 @@ export interface OpenAuthorizeOptions {
52
52
  * (see `normalizeOAuthRedirectUri`), so the IdP always returns the tab to `/`,
53
53
  * and the return handlers restore this path. Doing it here rather than at each
54
54
  * call site is deliberate: every web authorize redirect — silent restore,
55
- * interactive sign-in, the passkey hub — funnels through this function, so a
55
+ * interactive sign-in, `continueOnAuth` — funnels through this function, so a
56
56
  * new flow cannot forget to preserve the page the visitor came from.
57
57
  */
58
58
  export function redirectToAuthorize(url: string): void {