@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.
- package/README.md +16 -46
- package/lib/commonjs/index.js +84 -10
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/notifications/deviceNotifications.js +380 -0
- package/lib/commonjs/notifications/deviceNotifications.js.map +1 -0
- package/lib/commonjs/ui/boot/runProviderColdBoot.js +51 -9
- package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/commonjs/ui/client.js +0 -13
- package/lib/commonjs/ui/client.js.map +1 -1
- package/lib/commonjs/ui/components/AvatarCameraBadge.js +3 -2
- package/lib/commonjs/ui/components/AvatarCameraBadge.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAccountDialogScreen.js +14 -3
- package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAuthChooser.js +70 -1121
- package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/commonjs/ui/components/OxyConsentScreen.js +50 -12
- package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +4 -4
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js +74 -40
- package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInRequestSurface.js +147 -0
- package/lib/commonjs/ui/components/OxySignInRequestSurface.js.map +1 -0
- package/lib/commonjs/ui/components/ProfileButton.js +4 -3
- package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
- package/lib/commonjs/ui/components/SettingsIcon.js +3 -2
- package/lib/commonjs/ui/components/SettingsIcon.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +527 -0
- package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/SignInEntryView.js +90 -0
- package/lib/commonjs/ui/components/authChooser/SignInEntryView.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/SignInRequestView.js +106 -0
- package/lib/commonjs/ui/components/authChooser/SignInRequestView.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/SignUpView.js +188 -0
- package/lib/commonjs/ui/components/authChooser/SignUpView.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js +61 -0
- package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/primitives.js +170 -0
- package/lib/commonjs/ui/components/authChooser/primitives.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/requestSurfaces.js +153 -0
- package/lib/commonjs/ui/components/authChooser/requestSurfaces.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/signInProgress.js +54 -0
- package/lib/commonjs/ui/components/authChooser/signInProgress.js.map +1 -0
- package/lib/commonjs/ui/components/{oxyAuthChooserStyles.js → authChooser/styles.js} +19 -1
- package/lib/commonjs/ui/components/authChooser/styles.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/types.js +70 -0
- package/lib/commonjs/ui/components/authChooser/types.js.map +1 -0
- package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js +50 -0
- package/lib/commonjs/ui/components/authChooser/useUsernameAvailability.js.map +1 -0
- package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js +3 -2
- package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +3 -2
- package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js +15 -14
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +6 -5
- package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +3 -2
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +6 -6
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +5 -5
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +10 -9
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +4 -3
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +6 -5
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +200 -29
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/commitSessionFlow.js +43 -0
- package/lib/commonjs/ui/context/commitSessionFlow.js.map +1 -1
- package/lib/commonjs/ui/context/useOxyAccountGraph.js +13 -5
- package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSwitchableAccounts.js +6 -1
- package/lib/commonjs/ui/hooks/useSwitchableAccounts.js.map +1 -1
- package/lib/commonjs/ui/index.js +0 -13
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/oauth/browserAuthTransport.js +168 -0
- package/lib/commonjs/ui/oauth/browserAuthTransport.js.map +1 -0
- package/lib/commonjs/ui/oauth/completeOAuthCode.js +78 -0
- package/lib/commonjs/ui/oauth/completeOAuthCode.js.map +1 -0
- package/lib/commonjs/ui/oauth/legacyRedirectLanes.js +48 -0
- package/lib/commonjs/ui/oauth/legacyRedirectLanes.js.map +1 -0
- package/lib/commonjs/ui/oauth/oauthHandshake.js +53 -0
- package/lib/commonjs/ui/oauth/oauthHandshake.js.map +1 -0
- package/lib/commonjs/ui/oauth/oauthPopup.js +229 -0
- package/lib/commonjs/ui/oauth/oauthPopup.js.map +1 -0
- package/lib/commonjs/ui/oauth/oauthPopupMessages.js +141 -0
- package/lib/commonjs/ui/oauth/oauthPopupMessages.js.map +1 -0
- package/lib/commonjs/ui/oauth/types.js +2 -0
- package/lib/commonjs/ui/oauth/types.js.map +1 -0
- package/lib/commonjs/ui/screens/AccountMembersScreen.js +4 -3
- package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/CreateAccountScreen.js +7 -6
- package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +4 -3
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FAQScreen.js +3 -2
- package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js +11 -10
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +19 -18
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +4 -3
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ManageAccountScreen.js +2 -2
- package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +3 -3
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +9 -8
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +10 -10
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/UserListScreen.js +3 -3
- package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +3 -2
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js +4 -3
- package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/FileListSection.js +4 -3
- package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +4 -3
- package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
- package/lib/commonjs/ui/screens/fileManagement/UploadBar.js +3 -2
- package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +3 -2
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +4 -3
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +4 -3
- package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
- package/lib/commonjs/ui/server.js +2 -5
- package/lib/commonjs/ui/server.js.map +1 -1
- package/lib/commonjs/ui/session/authStore.js +6 -75
- package/lib/commonjs/ui/session/authStore.js.map +1 -1
- package/lib/commonjs/ui/session/createSessionClient.js +11 -3
- package/lib/commonjs/ui/session/createSessionClient.js.map +1 -1
- package/lib/commonjs/ui/session/identityBinding.js +95 -0
- package/lib/commonjs/ui/session/identityBinding.js.map +1 -0
- package/lib/commonjs/ui/session/index.js +13 -0
- package/lib/commonjs/ui/session/index.js.map +1 -1
- package/lib/commonjs/ui/session/nativeSecureStorage.js +90 -0
- package/lib/commonjs/ui/session/nativeSecureStorage.js.map +1 -0
- package/lib/commonjs/ui/session/tokenTransport.js +11 -1
- package/lib/commonjs/ui/session/tokenTransport.js.map +1 -1
- package/lib/commonjs/ui/utils/crossOriginRestore.js +3 -2
- package/lib/commonjs/ui/utils/crossOriginRestore.js.map +1 -1
- package/lib/commonjs/ui/utils/deliveryPlatform.js +58 -0
- package/lib/commonjs/ui/utils/deliveryPlatform.js.map +1 -0
- package/lib/commonjs/ui/utils/oauthReturn.js +70 -46
- package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -1
- package/lib/module/index.js +27 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/notifications/deviceNotifications.js +371 -0
- package/lib/module/notifications/deviceNotifications.js.map +1 -0
- package/lib/module/ui/boot/runProviderColdBoot.js +51 -9
- package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/module/ui/client.js +0 -1
- package/lib/module/ui/client.js.map +1 -1
- package/lib/module/ui/components/AvatarCameraBadge.js +1 -1
- package/lib/module/ui/components/AvatarCameraBadge.js.map +1 -1
- package/lib/module/ui/components/OxyAccountDialogScreen.js +14 -3
- package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
- package/lib/module/ui/components/OxyAuthChooser.js +74 -1126
- package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/module/ui/components/OxyConsentScreen.js +50 -12
- package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +4 -4
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/OxySignInButton.js +76 -42
- package/lib/module/ui/components/OxySignInButton.js.map +1 -1
- package/lib/module/ui/components/OxySignInRequestSurface.js +141 -0
- package/lib/module/ui/components/OxySignInRequestSurface.js.map +1 -0
- package/lib/module/ui/components/ProfileButton.js +1 -1
- package/lib/module/ui/components/ProfileButton.js.map +1 -1
- package/lib/module/ui/components/SettingsIcon.js +1 -1
- package/lib/module/ui/components/SettingsIcon.js.map +1 -1
- package/lib/module/ui/components/authChooser/AccountsMenuView.js +523 -0
- package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -0
- package/lib/module/ui/components/authChooser/SignInEntryView.js +85 -0
- package/lib/module/ui/components/authChooser/SignInEntryView.js.map +1 -0
- package/lib/module/ui/components/authChooser/SignInRequestView.js +101 -0
- package/lib/module/ui/components/authChooser/SignInRequestView.js.map +1 -0
- package/lib/module/ui/components/authChooser/SignUpView.js +184 -0
- package/lib/module/ui/components/authChooser/SignUpView.js.map +1 -0
- package/lib/module/ui/components/authChooser/TroubleDisclosure.js +57 -0
- package/lib/module/ui/components/authChooser/TroubleDisclosure.js.map +1 -0
- package/lib/module/ui/components/authChooser/primitives.js +163 -0
- package/lib/module/ui/components/authChooser/primitives.js.map +1 -0
- package/lib/module/ui/components/authChooser/requestSurfaces.js +143 -0
- package/lib/module/ui/components/authChooser/requestSurfaces.js.map +1 -0
- package/lib/module/ui/components/authChooser/signInProgress.js +50 -0
- package/lib/module/ui/components/authChooser/signInProgress.js.map +1 -0
- package/lib/module/ui/components/{oxyAuthChooserStyles.js → authChooser/styles.js} +19 -1
- package/lib/module/ui/components/authChooser/styles.js.map +1 -0
- package/lib/module/ui/components/authChooser/types.js +66 -0
- package/lib/module/ui/components/authChooser/types.js.map +1 -0
- package/lib/module/ui/components/authChooser/useUsernameAvailability.js +46 -0
- package/lib/module/ui/components/authChooser/useUsernameAvailability.js.map +1 -0
- package/lib/module/ui/components/fileManagement/AnimatedButton.js +1 -1
- package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileDetailsModal.js +1 -1
- package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileViewer.js +1 -1
- package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/module/ui/components/fileManagement/UploadPreview.js +1 -1
- package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
- package/lib/module/ui/components/modals/DeleteAccountModal.js +1 -1
- package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentDetailsStep.js +1 -1
- package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentMethodStep.js +1 -1
- package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentReviewStep.js +1 -1
- package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSuccessStep.js +1 -1
- package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
- package/lib/module/ui/components/payment/PaymentSummaryStep.js +1 -1
- package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +203 -32
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/commitSessionFlow.js +42 -0
- package/lib/module/ui/context/commitSessionFlow.js.map +1 -1
- package/lib/module/ui/context/useOxyAccountGraph.js +13 -5
- package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
- package/lib/module/ui/hooks/useSwitchableAccounts.js +6 -1
- package/lib/module/ui/hooks/useSwitchableAccounts.js.map +1 -1
- package/lib/module/ui/index.js +0 -1
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/oauth/browserAuthTransport.js +165 -0
- package/lib/module/ui/oauth/browserAuthTransport.js.map +1 -0
- package/lib/module/ui/oauth/completeOAuthCode.js +75 -0
- package/lib/module/ui/oauth/completeOAuthCode.js.map +1 -0
- package/lib/module/ui/oauth/legacyRedirectLanes.js +44 -0
- package/lib/module/ui/oauth/legacyRedirectLanes.js.map +1 -0
- package/lib/module/ui/oauth/oauthHandshake.js +50 -0
- package/lib/module/ui/oauth/oauthHandshake.js.map +1 -0
- package/lib/module/ui/oauth/oauthPopup.js +221 -0
- package/lib/module/ui/oauth/oauthPopup.js.map +1 -0
- package/lib/module/ui/oauth/oauthPopupMessages.js +135 -0
- package/lib/module/ui/oauth/oauthPopupMessages.js.map +1 -0
- package/lib/module/ui/oauth/types.js +2 -0
- package/lib/module/ui/oauth/types.js.map +1 -0
- package/lib/module/ui/screens/AccountMembersScreen.js +1 -1
- package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/module/ui/screens/CreateAccountScreen.js +1 -1
- package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
- package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/module/ui/screens/FAQScreen.js +1 -1
- package/lib/module/ui/screens/FAQScreen.js.map +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +2 -1
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/module/ui/screens/ManageAccountScreen.js +1 -1
- package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +1 -1
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/UserListScreen.js +1 -1
- package/lib/module/ui/screens/UserListScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/FileLibraryError.js +1 -1
- package/lib/module/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/FileListSection.js +1 -1
- package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +2 -1
- package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
- package/lib/module/ui/screens/fileManagement/UploadBar.js +1 -1
- package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustCenterScreen.js +1 -1
- package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRewardsScreen.js +1 -1
- package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
- package/lib/module/ui/server.js +0 -2
- package/lib/module/ui/server.js.map +1 -1
- package/lib/module/ui/session/authStore.js +5 -75
- package/lib/module/ui/session/authStore.js.map +1 -1
- package/lib/module/ui/session/createSessionClient.js +11 -3
- package/lib/module/ui/session/createSessionClient.js.map +1 -1
- package/lib/module/ui/session/identityBinding.js +89 -0
- package/lib/module/ui/session/identityBinding.js.map +1 -0
- package/lib/module/ui/session/index.js +5 -2
- package/lib/module/ui/session/index.js.map +1 -1
- package/lib/module/ui/session/nativeSecureStorage.js +88 -0
- package/lib/module/ui/session/nativeSecureStorage.js.map +1 -0
- package/lib/module/ui/session/tokenTransport.js +11 -1
- package/lib/module/ui/session/tokenTransport.js.map +1 -1
- package/lib/module/ui/utils/crossOriginRestore.js +4 -3
- package/lib/module/ui/utils/crossOriginRestore.js.map +1 -1
- package/lib/module/ui/utils/deliveryPlatform.js +55 -0
- package/lib/module/ui/utils/deliveryPlatform.js.map +1 -0
- package/lib/module/ui/utils/oauthReturn.js +70 -46
- package/lib/module/ui/utils/oauthReturn.js.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +9 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts +141 -0
- package/lib/typescript/commonjs/notifications/deviceNotifications.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +34 -2
- package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/client.d.ts +0 -1
- package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +16 -29
- package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +17 -12
- package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts +108 -0
- package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts +38 -0
- package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/SignInEntryView.d.ts +32 -0
- package/lib/typescript/commonjs/ui/components/authChooser/SignInEntryView.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/SignInRequestView.d.ts +34 -0
- package/lib/typescript/commonjs/ui/components/authChooser/SignInRequestView.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/SignUpView.d.ts +34 -0
- package/lib/typescript/commonjs/ui/components/authChooser/SignUpView.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts +36 -0
- package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts +55 -0
- package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts +58 -0
- package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/signInProgress.d.ts +26 -0
- package/lib/typescript/commonjs/ui/components/authChooser/signInProgress.d.ts.map +1 -0
- package/lib/typescript/{module/ui/components/oxyAuthChooserStyles.d.ts → commonjs/ui/components/authChooser/styles.d.ts} +19 -1
- package/lib/typescript/commonjs/ui/components/authChooser/styles.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts +103 -0
- package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/authChooser/useUsernameAvailability.d.ts +16 -0
- package/lib/typescript/commonjs/ui/components/authChooser/useUsernameAvailability.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/payment/types.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts +40 -0
- package/lib/typescript/commonjs/ui/context/commitSessionFlow.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +44 -1
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +7 -1
- package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useSwitchableAccounts.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/index.d.ts +0 -1
- package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts +56 -0
- package/lib/typescript/commonjs/ui/oauth/browserAuthTransport.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/oauth/completeOAuthCode.d.ts +49 -0
- package/lib/typescript/commonjs/ui/oauth/completeOAuthCode.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts +40 -0
- package/lib/typescript/commonjs/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts +50 -0
- package/lib/typescript/commonjs/ui/oauth/oauthHandshake.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts +77 -0
- package/lib/typescript/commonjs/ui/oauth/oauthPopup.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/oauth/oauthPopupMessages.d.ts +67 -0
- package/lib/typescript/commonjs/ui/oauth/oauthPopupMessages.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/oauth/types.d.ts +176 -0
- package/lib/typescript/commonjs/ui/oauth/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/server.d.ts +0 -2
- package/lib/typescript/commonjs/ui/server.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/authStore.d.ts +3 -7
- package/lib/typescript/commonjs/ui/session/authStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts +8 -1
- package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/identityBinding.d.ts +66 -0
- package/lib/typescript/commonjs/ui/session/identityBinding.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/session/index.d.ts +6 -2
- package/lib/typescript/commonjs/ui/session/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/nativeSecureStorage.d.ts +25 -0
- package/lib/typescript/commonjs/ui/session/nativeSecureStorage.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts +8 -1
- package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/types/navigation.d.ts +44 -0
- package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/deliveryPlatform.d.ts +33 -0
- package/lib/typescript/commonjs/ui/utils/deliveryPlatform.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +1 -1
- package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +30 -16
- package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +9 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/notifications/deviceNotifications.d.ts +141 -0
- package/lib/typescript/module/notifications/deviceNotifications.d.ts.map +1 -0
- package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +34 -2
- package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/module/ui/client.d.ts +0 -1
- package/lib/typescript/module/ui/client.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +16 -29
- package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxySignInButton.d.ts +17 -12
- package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts +108 -0
- package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/SettingsIcon.d.ts +1 -1
- package/lib/typescript/module/ui/components/SettingsIcon.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts +38 -0
- package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/SignInEntryView.d.ts +32 -0
- package/lib/typescript/module/ui/components/authChooser/SignInEntryView.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/SignInRequestView.d.ts +34 -0
- package/lib/typescript/module/ui/components/authChooser/SignInRequestView.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/SignUpView.d.ts +34 -0
- package/lib/typescript/module/ui/components/authChooser/SignUpView.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts +36 -0
- package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/primitives.d.ts +55 -0
- package/lib/typescript/module/ui/components/authChooser/primitives.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts +58 -0
- package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/signInProgress.d.ts +26 -0
- package/lib/typescript/module/ui/components/authChooser/signInProgress.d.ts.map +1 -0
- package/lib/typescript/{commonjs/ui/components/oxyAuthChooserStyles.d.ts → module/ui/components/authChooser/styles.d.ts} +19 -1
- package/lib/typescript/module/ui/components/authChooser/styles.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/types.d.ts +103 -0
- package/lib/typescript/module/ui/components/authChooser/types.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/authChooser/useUsernameAvailability.d.ts +16 -0
- package/lib/typescript/module/ui/components/authChooser/useUsernameAvailability.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/payment/types.d.ts +1 -1
- package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/commitSessionFlow.d.ts +40 -0
- package/lib/typescript/module/ui/context/commitSessionFlow.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +44 -1
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +7 -1
- package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useSwitchableAccounts.d.ts.map +1 -1
- package/lib/typescript/module/ui/index.d.ts +0 -1
- package/lib/typescript/module/ui/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts +56 -0
- package/lib/typescript/module/ui/oauth/browserAuthTransport.d.ts.map +1 -0
- package/lib/typescript/module/ui/oauth/completeOAuthCode.d.ts +49 -0
- package/lib/typescript/module/ui/oauth/completeOAuthCode.d.ts.map +1 -0
- package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts +40 -0
- package/lib/typescript/module/ui/oauth/legacyRedirectLanes.d.ts.map +1 -0
- package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts +50 -0
- package/lib/typescript/module/ui/oauth/oauthHandshake.d.ts.map +1 -0
- package/lib/typescript/module/ui/oauth/oauthPopup.d.ts +77 -0
- package/lib/typescript/module/ui/oauth/oauthPopup.d.ts.map +1 -0
- package/lib/typescript/module/ui/oauth/oauthPopupMessages.d.ts +67 -0
- package/lib/typescript/module/ui/oauth/oauthPopupMessages.d.ts.map +1 -0
- package/lib/typescript/module/ui/oauth/types.d.ts +176 -0
- package/lib/typescript/module/ui/oauth/types.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
- package/lib/typescript/module/ui/server.d.ts +0 -2
- package/lib/typescript/module/ui/server.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/authStore.d.ts +3 -7
- package/lib/typescript/module/ui/session/authStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/createSessionClient.d.ts +8 -1
- package/lib/typescript/module/ui/session/createSessionClient.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/identityBinding.d.ts +66 -0
- package/lib/typescript/module/ui/session/identityBinding.d.ts.map +1 -0
- package/lib/typescript/module/ui/session/index.d.ts +6 -2
- package/lib/typescript/module/ui/session/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/nativeSecureStorage.d.ts +25 -0
- package/lib/typescript/module/ui/session/nativeSecureStorage.d.ts.map +1 -0
- package/lib/typescript/module/ui/session/tokenTransport.d.ts +8 -1
- package/lib/typescript/module/ui/session/tokenTransport.d.ts.map +1 -1
- package/lib/typescript/module/ui/types/navigation.d.ts +44 -0
- package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/deliveryPlatform.d.ts +33 -0
- package/lib/typescript/module/ui/utils/deliveryPlatform.d.ts.map +1 -0
- package/lib/typescript/module/ui/utils/fileManagement.d.ts +1 -1
- package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/oauthReturn.d.ts +30 -16
- package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -1
- package/package.json +15 -7
- package/src/index.ts +50 -5
- package/src/notifications/deviceNotifications.ts +395 -0
- package/src/ui/boot/__tests__/coldBootWebAuthMode.test.ts +281 -0
- package/src/ui/boot/runProviderColdBoot.ts +83 -13
- package/src/ui/client.ts +0 -1
- package/src/ui/components/AvatarCameraBadge.tsx +1 -1
- package/src/ui/components/OxyAccountDialogScreen.tsx +20 -3
- package/src/ui/components/OxyAuthChooser.tsx +91 -1230
- package/src/ui/components/OxyConsentScreen.tsx +56 -13
- package/src/ui/components/OxyProvider.tsx +4 -4
- package/src/ui/components/OxySignInButton.tsx +119 -78
- package/src/ui/components/OxySignInRequestSurface.tsx +202 -0
- package/src/ui/components/ProfileButton.tsx +1 -1
- package/src/ui/components/SettingsIcon.tsx +1 -1
- package/src/ui/components/__tests__/OxyConsentScreen.test.tsx +27 -0
- package/src/ui/components/authChooser/AccountsMenuView.tsx +569 -0
- package/src/ui/components/authChooser/SignInEntryView.tsx +121 -0
- package/src/ui/components/authChooser/SignInRequestView.tsx +130 -0
- package/src/ui/components/authChooser/SignUpView.tsx +174 -0
- package/src/ui/components/authChooser/TroubleDisclosure.tsx +73 -0
- package/src/ui/components/authChooser/primitives.tsx +144 -0
- package/src/ui/components/authChooser/requestSurfaces.tsx +120 -0
- package/src/ui/components/authChooser/signInProgress.ts +54 -0
- package/src/ui/components/{oxyAuthChooserStyles.ts → authChooser/styles.ts} +18 -0
- package/src/ui/components/authChooser/types.ts +120 -0
- package/src/ui/components/authChooser/useUsernameAvailability.ts +60 -0
- package/src/ui/components/fileManagement/AnimatedButton.tsx +1 -1
- package/src/ui/components/fileManagement/FileDetailsModal.tsx +1 -1
- package/src/ui/components/fileManagement/FileViewer.tsx +1 -1
- package/src/ui/components/fileManagement/UploadPreview.tsx +1 -1
- package/src/ui/components/modals/DeleteAccountModal.tsx +1 -1
- package/src/ui/components/payment/PaymentDetailsStep.tsx +1 -1
- package/src/ui/components/payment/PaymentMethodStep.tsx +1 -1
- package/src/ui/components/payment/PaymentReviewStep.tsx +1 -1
- package/src/ui/components/payment/PaymentSuccessStep.tsx +1 -1
- package/src/ui/components/payment/PaymentSummaryStep.tsx +1 -1
- package/src/ui/components/payment/types.ts +1 -1
- package/src/ui/context/OxyContext.tsx +220 -24
- package/src/ui/context/__tests__/commitSessionFlow.test.ts +89 -0
- package/src/ui/context/commitSessionFlow.ts +61 -0
- package/src/ui/context/oxyContextTypes.ts +45 -1
- package/src/ui/context/useOxyAccountGraph.ts +19 -5
- package/src/ui/hooks/useSwitchableAccounts.ts +12 -1
- package/src/ui/index.ts +0 -1
- package/src/ui/oauth/__tests__/browserAuthTransport.test.ts +335 -0
- package/src/ui/oauth/__tests__/completeOAuthCode.test.ts +142 -0
- package/src/ui/oauth/__tests__/oauthPopup.test.ts +326 -0
- package/src/ui/oauth/__tests__/oauthPopupMessages.test.ts +189 -0
- package/src/ui/oauth/__tests__/sharedCompletionPath.test.ts +174 -0
- package/src/ui/oauth/browserAuthTransport.ts +187 -0
- package/src/ui/oauth/completeOAuthCode.ts +93 -0
- package/src/ui/oauth/legacyRedirectLanes.ts +43 -0
- package/src/ui/oauth/oauthHandshake.ts +74 -0
- package/src/ui/oauth/oauthPopup.ts +219 -0
- package/src/ui/oauth/oauthPopupMessages.ts +136 -0
- package/src/ui/oauth/types.ts +150 -0
- package/src/ui/screens/AccountMembersScreen.tsx +1 -1
- package/src/ui/screens/CreateAccountScreen.tsx +1 -1
- package/src/ui/screens/EditProfileFieldScreen.tsx +1 -1
- package/src/ui/screens/FAQScreen.tsx +1 -1
- package/src/ui/screens/FeedbackScreen.tsx +2 -1
- package/src/ui/screens/FileManagementScreen.tsx +2 -1
- package/src/ui/screens/LanguageSelectorScreen.tsx +1 -1
- package/src/ui/screens/ManageAccountScreen.tsx +1 -1
- package/src/ui/screens/PaymentGatewayScreen.tsx +1 -1
- package/src/ui/screens/PremiumSubscriptionScreen.tsx +1 -1
- package/src/ui/screens/ProfileScreen.tsx +1 -1
- package/src/ui/screens/UserListScreen.tsx +1 -1
- package/src/ui/screens/WelcomeNewUserScreen.tsx +1 -1
- package/src/ui/screens/fileManagement/FileLibraryError.tsx +1 -1
- package/src/ui/screens/fileManagement/FileListSection.tsx +1 -1
- package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +2 -1
- package/src/ui/screens/fileManagement/UploadBar.tsx +1 -1
- package/src/ui/screens/trust/TrustCenterScreen.tsx +1 -1
- package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +1 -1
- package/src/ui/screens/trust/TrustRewardsScreen.tsx +1 -1
- package/src/ui/server.ts +0 -2
- package/src/ui/session/__tests__/createSessionClient.test.ts +26 -0
- package/src/ui/session/__tests__/tokenTransport.test.ts +34 -0
- package/src/ui/session/authStore.ts +5 -89
- package/src/ui/session/createSessionClient.ts +15 -2
- package/src/ui/session/identityBinding.ts +116 -0
- package/src/ui/session/index.ts +6 -2
- package/src/ui/session/nativeSecureStorage.ts +98 -0
- package/src/ui/session/tokenTransport.ts +14 -1
- package/src/ui/types/navigation.ts +44 -1
- package/src/ui/utils/crossOriginRestore.ts +4 -7
- package/src/ui/utils/deliveryPlatform.ts +65 -0
- package/src/ui/utils/fileManagement.ts +1 -1
- package/src/ui/utils/oauthReturn.ts +74 -65
- package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
- package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
- package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
- package/lib/commonjs/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
- package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
- package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
- package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
- package/lib/commonjs/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
- package/lib/commonjs/ui/components/FontLoader.js +0 -35
- package/lib/commonjs/ui/components/FontLoader.js.map +0 -1
- package/lib/commonjs/ui/components/FontLoader.native.js +0 -88
- package/lib/commonjs/ui/components/FontLoader.native.js.map +0 -1
- package/lib/commonjs/ui/components/oxyAuthChooserStyles.js.map +0 -1
- package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
- package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
- package/lib/module/assets/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
- package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
- package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
- package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
- package/lib/module/assets/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
- package/lib/module/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
- package/lib/module/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
- package/lib/module/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
- package/lib/module/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
- package/lib/module/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
- package/lib/module/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
- package/lib/module/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
- package/lib/module/ui/components/FontLoader.js +0 -29
- package/lib/module/ui/components/FontLoader.js.map +0 -1
- package/lib/module/ui/components/FontLoader.native.js +0 -83
- package/lib/module/ui/components/FontLoader.native.js.map +0 -1
- package/lib/module/ui/components/oxyAuthChooserStyles.js.map +0 -1
- package/lib/typescript/commonjs/ui/components/FontLoader.d.ts +0 -24
- package/lib/typescript/commonjs/ui/components/FontLoader.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/FontLoader.native.d.ts +0 -13
- package/lib/typescript/commonjs/ui/components/FontLoader.native.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/FontLoader.d.ts +0 -24
- package/lib/typescript/module/ui/components/FontLoader.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/FontLoader.native.d.ts +0 -13
- package/lib/typescript/module/ui/components/FontLoader.native.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts.map +0 -1
- package/src/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
- package/src/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
- package/src/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
- package/src/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
- package/src/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
- package/src/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
- package/src/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
- package/src/ui/components/FontLoader.native.tsx +0 -88
- package/src/ui/components/FontLoader.tsx +0 -27
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sign-in ENTRY (`signin` / `add` views) — ONE primary action.
|
|
3
|
+
*
|
|
4
|
+
* Issue #691, Phase 5: the normal experience presents no menu of authentication
|
|
5
|
+
* methods. The user sees "Continue with Oxy"; Oxy — not the user — then picks
|
|
6
|
+
* how the request reaches their Commons identity, and the request surface shows
|
|
7
|
+
* honest progress. Everything else (a QR from another device, a passkey on this
|
|
8
|
+
* device, getting Commons, creating an account) lives behind "Having trouble?".
|
|
9
|
+
*
|
|
10
|
+
* Existing accounts still render ABOVE the CTA: "continue as one of these" is a
|
|
11
|
+
* choice of WHO, not of HOW, so it is not one of the competing method buttons
|
|
12
|
+
* the issue removes.
|
|
13
|
+
*
|
|
14
|
+
* On web this view is transient — the container auto-starts the flow the instant
|
|
15
|
+
* the view is reached, because the request surface (QR, or "Check Commons on
|
|
16
|
+
* your phone") IS the primary route there, never something behind a tap.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type React from 'react';
|
|
20
|
+
import { View } from 'react-native';
|
|
21
|
+
import { Button } from '@oxyhq/bloom/button';
|
|
22
|
+
import type { AccountDialogSnapshot } from '@oxyhq/core';
|
|
23
|
+
import TroubleDisclosure from './TroubleDisclosure';
|
|
24
|
+
import { AccountRow, Dividerish, SubtleLink } from './primitives';
|
|
25
|
+
import { authChooserStyles as styles } from './styles';
|
|
26
|
+
import type {
|
|
27
|
+
OxyAuthChooserHandlers,
|
|
28
|
+
OxySignInSurfaceAction,
|
|
29
|
+
SignInAlternatives,
|
|
30
|
+
Theme,
|
|
31
|
+
Translate,
|
|
32
|
+
} from './types';
|
|
33
|
+
|
|
34
|
+
interface SignInEntryViewProps {
|
|
35
|
+
snapshot: AccountDialogSnapshot;
|
|
36
|
+
theme: Theme;
|
|
37
|
+
t: Translate;
|
|
38
|
+
handlers: OxyAuthChooserHandlers;
|
|
39
|
+
/** The ONE primary action. Starts the flow; Oxy chooses the route from there. */
|
|
40
|
+
onContinueWithOxy: () => void;
|
|
41
|
+
alternatives: SignInAlternatives;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const SignInEntryView: React.FC<SignInEntryViewProps> = ({
|
|
45
|
+
snapshot,
|
|
46
|
+
theme,
|
|
47
|
+
t,
|
|
48
|
+
handlers,
|
|
49
|
+
onContinueWithOxy,
|
|
50
|
+
alternatives,
|
|
51
|
+
}) => {
|
|
52
|
+
// The entry has no chosen route yet, so nothing here can have failed: the
|
|
53
|
+
// alternatives stay behind the disclosure unconditionally.
|
|
54
|
+
const troubleActions: OxySignInSurfaceAction[] = [
|
|
55
|
+
{
|
|
56
|
+
key: 'scan-qr-link',
|
|
57
|
+
label: t('accountSwitcher.scanQr'),
|
|
58
|
+
onPress: alternatives.onShowQr,
|
|
59
|
+
},
|
|
60
|
+
...(alternatives.passkeyAvailable
|
|
61
|
+
? [
|
|
62
|
+
{
|
|
63
|
+
key: 'passkey-signin-link',
|
|
64
|
+
label: alternatives.passkeyPending
|
|
65
|
+
? t('accountSwitcher.passkeySigningIn')
|
|
66
|
+
: t('accountSwitcher.useIdentityOnDevice'),
|
|
67
|
+
onPress: alternatives.onSignInWithPasskey,
|
|
68
|
+
disabled: alternatives.passkeyPending,
|
|
69
|
+
},
|
|
70
|
+
]
|
|
71
|
+
: []),
|
|
72
|
+
{
|
|
73
|
+
key: 'get-commons-link',
|
|
74
|
+
label: t('accountSwitcher.getCommons'),
|
|
75
|
+
onPress: alternatives.onGetCommons,
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<View style={styles.signInBlock}>
|
|
81
|
+
{snapshot.accounts.length > 0 ? (
|
|
82
|
+
<View style={styles.rows}>
|
|
83
|
+
{snapshot.accounts.map((account) => (
|
|
84
|
+
<AccountRow
|
|
85
|
+
key={account.accountId}
|
|
86
|
+
account={account}
|
|
87
|
+
theme={theme}
|
|
88
|
+
switching={snapshot.switchingAccountId === account.accountId}
|
|
89
|
+
disabled={snapshot.switchingAccountId !== null}
|
|
90
|
+
onPress={() => handlers.onSwitch(account.accountId)}
|
|
91
|
+
/>
|
|
92
|
+
))}
|
|
93
|
+
<Dividerish theme={theme} label={t('signin.or')} />
|
|
94
|
+
</View>
|
|
95
|
+
) : null}
|
|
96
|
+
|
|
97
|
+
<Button
|
|
98
|
+
variant="primary"
|
|
99
|
+
onPress={onContinueWithOxy}
|
|
100
|
+
style={styles.primaryButton}
|
|
101
|
+
testID="continue-with-oxy"
|
|
102
|
+
>
|
|
103
|
+
{t('accountSwitcher.continueWithOxy')}
|
|
104
|
+
</Button>
|
|
105
|
+
|
|
106
|
+
{/* Account CREATION is not an authentication method — it is the way in for
|
|
107
|
+
someone who has no Oxy ID yet — so it keeps its own subordinate link
|
|
108
|
+
rather than hiding behind a troubleshooting affordance. */}
|
|
109
|
+
<SubtleLink
|
|
110
|
+
label={t('signin.createAccountLink')}
|
|
111
|
+
theme={theme}
|
|
112
|
+
onPress={alternatives.onCreateAccount}
|
|
113
|
+
testID="create-account-link"
|
|
114
|
+
/>
|
|
115
|
+
|
|
116
|
+
<TroubleDisclosure actions={troubleActions} revealed={false} theme={theme} t={t} />
|
|
117
|
+
</View>
|
|
118
|
+
);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export default SignInEntryView;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ACTIVE REQUEST surface (`qr` view) as the account dialog drives it —
|
|
3
|
+
* `AccountDialogController`'s device flow bound to the shared, presentational
|
|
4
|
+
* {@link OxySignInRequestSurface} (issue #691, Phase 5).
|
|
5
|
+
*
|
|
6
|
+
* This module owns WIRING only. Every pixel comes from the shared surface, which
|
|
7
|
+
* the auth.oxy.so IdP mounts from its own OAuth-bound request; there is one
|
|
8
|
+
* implementation of the request presentation, not two. What lives here is what
|
|
9
|
+
* only the account dialog knows:
|
|
10
|
+
*
|
|
11
|
+
* - which of the controller's facts map onto the surface's props;
|
|
12
|
+
* - which alternatives are genuine ones for the CURRENT presentation (the
|
|
13
|
+
* passkey ceremony is pointless once the request is already being confirmed,
|
|
14
|
+
* and a QR link is redundant while the QR itself is the primary visual);
|
|
15
|
+
* - the one piece of local intent the controller has no opinion on: leaving the
|
|
16
|
+
* acquisition surface via "I have Commons on another device".
|
|
17
|
+
*
|
|
18
|
+
* Failures are NOT rendered here. The container toasts them at the point they
|
|
19
|
+
* arrive (owner mandate: no error renders inline inside the dialog); this view
|
|
20
|
+
* only reports that the request failed, so the surface can offer "Try again".
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import type React from 'react';
|
|
24
|
+
import { useState } from 'react';
|
|
25
|
+
import type { AccountDialogSnapshot } from '@oxyhq/core';
|
|
26
|
+
import OxySignInRequestSurface from '../OxySignInRequestSurface';
|
|
27
|
+
import type { OxySignInSurfaceAction, SignInAlternatives, Translate } from './types';
|
|
28
|
+
|
|
29
|
+
interface SignInRequestViewProps {
|
|
30
|
+
snapshot: AccountDialogSnapshot;
|
|
31
|
+
t: Translate;
|
|
32
|
+
/** Restart the request after a failure. */
|
|
33
|
+
onRetry: () => void;
|
|
34
|
+
alternatives: SignInAlternatives;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const SignInRequestView: React.FC<SignInRequestViewProps> = ({
|
|
38
|
+
snapshot,
|
|
39
|
+
t,
|
|
40
|
+
onRetry,
|
|
41
|
+
alternatives,
|
|
42
|
+
}) => {
|
|
43
|
+
const { signIn, commonsAvailability } = snapshot;
|
|
44
|
+
// Set only from the disclosure's own "I have Commons on another device" —
|
|
45
|
+
// an explicit user choice to leave the acquisition surface, never inferred.
|
|
46
|
+
const [qrRequested, setQrRequested] = useState(false);
|
|
47
|
+
|
|
48
|
+
const failed = signIn.phase === 'error';
|
|
49
|
+
// A same-device QR is a dead end without Commons, so the acquisition surface
|
|
50
|
+
// leads — until the user explicitly asks for the QR anyway.
|
|
51
|
+
const acquiring = !failed && commonsAvailability === 'unavailable' && !qrRequested;
|
|
52
|
+
|
|
53
|
+
// A ceremony is pointless once the request is already being confirmed, and a
|
|
54
|
+
// ceremony FAILURE is toasted by the container — this link never renders an
|
|
55
|
+
// error of its own (owner mandate).
|
|
56
|
+
const passkeyAction: OxySignInSurfaceAction[] =
|
|
57
|
+
alternatives.passkeyAvailable && signIn.phase !== 'authorized' && signIn.phase !== 'completed'
|
|
58
|
+
? [
|
|
59
|
+
{
|
|
60
|
+
key: 'passkey-signin-link',
|
|
61
|
+
label: alternatives.passkeyPending
|
|
62
|
+
? t('accountSwitcher.passkeySigningIn')
|
|
63
|
+
: t('accountSwitcher.useIdentityOnDevice'),
|
|
64
|
+
onPress: alternatives.onSignInWithPasskey,
|
|
65
|
+
disabled: alternatives.passkeyPending,
|
|
66
|
+
},
|
|
67
|
+
]
|
|
68
|
+
: [];
|
|
69
|
+
|
|
70
|
+
const troubleActions = ((): OxySignInSurfaceAction[] => {
|
|
71
|
+
// Nothing about the chosen route is actionable any more — only the
|
|
72
|
+
// authentication alternatives are.
|
|
73
|
+
if (failed) return passkeyAction;
|
|
74
|
+
if (acquiring) {
|
|
75
|
+
return [
|
|
76
|
+
{
|
|
77
|
+
key: 'show-qr-anyway-link',
|
|
78
|
+
label: t('accountSwitcher.showQrAnyway'),
|
|
79
|
+
onPress: () => setQrRequested(true),
|
|
80
|
+
},
|
|
81
|
+
...passkeyAction,
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
return [
|
|
85
|
+
// Redundant while the QR already IS the primary surface.
|
|
86
|
+
...(signIn.route === 'qr'
|
|
87
|
+
? []
|
|
88
|
+
: [
|
|
89
|
+
{
|
|
90
|
+
key: 'scan-qr-link',
|
|
91
|
+
label: t('accountSwitcher.scanQr'),
|
|
92
|
+
onPress: alternatives.onShowQr,
|
|
93
|
+
},
|
|
94
|
+
]),
|
|
95
|
+
...passkeyAction,
|
|
96
|
+
{
|
|
97
|
+
key: 'get-commons-link',
|
|
98
|
+
label: t('accountSwitcher.getCommons'),
|
|
99
|
+
onPress: alternatives.onGetCommons,
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
})();
|
|
103
|
+
|
|
104
|
+
return (
|
|
105
|
+
<OxySignInRequestSurface
|
|
106
|
+
route={signIn.route}
|
|
107
|
+
progress={signIn.progress}
|
|
108
|
+
qrPayload={signIn.qrPayload}
|
|
109
|
+
routeFailed={signIn.routeFailed}
|
|
110
|
+
failed={failed}
|
|
111
|
+
onRetry={onRetry}
|
|
112
|
+
onAcquireCommons={acquiring ? alternatives.onGetCommons : undefined}
|
|
113
|
+
subordinate={[
|
|
114
|
+
// Account CREATION is not an authentication method, and on web this
|
|
115
|
+
// surface is the FIRST one a signed-out user sees (the entry auto-starts
|
|
116
|
+
// straight through it) — so the way in for someone with no Oxy ID stays
|
|
117
|
+
// visible as a subordinate link rather than hiding behind a
|
|
118
|
+
// troubleshooting affordance.
|
|
119
|
+
{
|
|
120
|
+
key: 'create-account-link',
|
|
121
|
+
label: t('signin.createAccountLink'),
|
|
122
|
+
onPress: alternatives.onCreateAccount,
|
|
123
|
+
},
|
|
124
|
+
]}
|
|
125
|
+
alternatives={troubleActions}
|
|
126
|
+
/>
|
|
127
|
+
);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export default SignInRequestView;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account creation (`signup` view).
|
|
3
|
+
*
|
|
4
|
+
* Commons is ALWAYS the priority path (owner mandate) and leads everywhere it
|
|
5
|
+
* appears: native shows only "Create your identity in Commons" (or "Get Commons"
|
|
6
|
+
* first, when it is not installed); web on a first-party Oxy origin leads with
|
|
7
|
+
* the SAME "Get Commons" CTA, with inline passkey creation offered UNDERNEATH as
|
|
8
|
+
* the de-emphasized "don't want to install anything" alternative — never
|
|
9
|
+
* co-equal, never a competing button. Anywhere else (a non-Oxy web origin,
|
|
10
|
+
* before the b2 hub-relay ships) shows an honest "not available here yet"
|
|
11
|
+
* handoff instead of a broken button.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type React from 'react';
|
|
15
|
+
import { useState } from 'react';
|
|
16
|
+
import { TextInput, View } from 'react-native';
|
|
17
|
+
import { Button } from '@oxyhq/bloom/button';
|
|
18
|
+
import { Text } from '@oxyhq/bloom/typography';
|
|
19
|
+
import type { AccountDialogSnapshot, OxyServices } from '@oxyhq/core';
|
|
20
|
+
import { isWebBrowser } from '../../utils/isWebBrowser';
|
|
21
|
+
import { Dividerish, SubtleLink } from './primitives';
|
|
22
|
+
import { authChooserStyles as styles } from './styles';
|
|
23
|
+
import type { PasskeyMode, Theme, Translate } from './types';
|
|
24
|
+
import { useUsernameAvailability, type UsernameStatus } from './useUsernameAvailability';
|
|
25
|
+
|
|
26
|
+
interface SignUpViewProps {
|
|
27
|
+
snapshot: AccountDialogSnapshot;
|
|
28
|
+
theme: Theme;
|
|
29
|
+
t: Translate;
|
|
30
|
+
oxyServices: OxyServices;
|
|
31
|
+
passkeyMode: PasskeyMode;
|
|
32
|
+
onCreateWithPasskey: (username: string) => void;
|
|
33
|
+
createPending: boolean;
|
|
34
|
+
/** Open the auth.oxy.so hub popup (b2) — the 'hub' mode's only path. */
|
|
35
|
+
onOpenHub: () => void;
|
|
36
|
+
/** Deep-link into Commons' own identity-creation screen (installed only). */
|
|
37
|
+
onCreateIdentityInCommons: () => void;
|
|
38
|
+
/** Open the Commons store listing / landing page for this platform. */
|
|
39
|
+
onGetCommons: () => void;
|
|
40
|
+
onBackToSignIn: () => void;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const SignUpView: React.FC<SignUpViewProps> = ({
|
|
44
|
+
snapshot,
|
|
45
|
+
theme,
|
|
46
|
+
t,
|
|
47
|
+
oxyServices,
|
|
48
|
+
passkeyMode,
|
|
49
|
+
onCreateWithPasskey,
|
|
50
|
+
createPending,
|
|
51
|
+
onOpenHub,
|
|
52
|
+
onCreateIdentityInCommons,
|
|
53
|
+
onGetCommons,
|
|
54
|
+
onBackToSignIn,
|
|
55
|
+
}) => {
|
|
56
|
+
const [username, setUsername] = useState('');
|
|
57
|
+
const { status: usernameStatus, check: checkUsername } = useUsernameAvailability(oxyServices, t);
|
|
58
|
+
const canSubmit = username.trim().length >= 3 && usernameStatus === 'available' && !createPending;
|
|
59
|
+
|
|
60
|
+
// Native — Commons owns identity creation. Deep-link straight in when it is
|
|
61
|
+
// installed, else lead with the same "Get Commons" acquisition CTA.
|
|
62
|
+
if (!isWebBrowser()) {
|
|
63
|
+
const commonsInstalled = snapshot.commonsAvailability === 'available';
|
|
64
|
+
return (
|
|
65
|
+
<View style={styles.centeredBlock}>
|
|
66
|
+
<Button
|
|
67
|
+
variant="primary"
|
|
68
|
+
onPress={commonsInstalled ? onCreateIdentityInCommons : onGetCommons}
|
|
69
|
+
style={styles.primaryButton}
|
|
70
|
+
>
|
|
71
|
+
{commonsInstalled ? t('signup.createInCommons') : t('accountSwitcher.getCommons')}
|
|
72
|
+
</Button>
|
|
73
|
+
<SubtleLink label={t('signup.backToSignInLink')} theme={theme} onPress={onBackToSignIn} />
|
|
74
|
+
</View>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Web, first-party Oxy origin. Commons leads with a "Get Commons" CTA; passkey
|
|
79
|
+
// creation is the de-emphasized alternative underneath for someone who doesn't
|
|
80
|
+
// want to install anything — a secondary button introduced by its own "No
|
|
81
|
+
// Commons?" framing, the same subordination the sign-in surfaces use.
|
|
82
|
+
if (passkeyMode === 'direct') {
|
|
83
|
+
return (
|
|
84
|
+
<View style={styles.signInBlock}>
|
|
85
|
+
<Text style={[styles.qrHeadline, { color: theme.colors.text }]}>
|
|
86
|
+
{t('signup.commonsHeadline')}
|
|
87
|
+
</Text>
|
|
88
|
+
<Text style={[styles.mutedText, { color: theme.colors.textSecondary }]}>
|
|
89
|
+
{t('signup.commonsExplainer')}
|
|
90
|
+
</Text>
|
|
91
|
+
<Button variant="primary" onPress={onGetCommons} style={styles.primaryButton}>
|
|
92
|
+
{t('accountSwitcher.getCommons')}
|
|
93
|
+
</Button>
|
|
94
|
+
|
|
95
|
+
<Dividerish theme={theme} label={t('signin.or')} />
|
|
96
|
+
|
|
97
|
+
<Text style={[styles.mutedText, { color: theme.colors.textSecondary }]}>
|
|
98
|
+
{t('signup.passkeyAlternative')}
|
|
99
|
+
</Text>
|
|
100
|
+
<TextInput
|
|
101
|
+
style={[styles.usernameInput, { borderColor: theme.colors.border, color: theme.colors.text }]}
|
|
102
|
+
placeholder={t('signup.usernamePlaceholder')}
|
|
103
|
+
placeholderTextColor={theme.colors.textSecondary}
|
|
104
|
+
value={username}
|
|
105
|
+
autoCapitalize="none"
|
|
106
|
+
autoCorrect={false}
|
|
107
|
+
autoComplete="username"
|
|
108
|
+
onChangeText={(value) => {
|
|
109
|
+
setUsername(value);
|
|
110
|
+
checkUsername(value.trim());
|
|
111
|
+
}}
|
|
112
|
+
testID="signup-username-input"
|
|
113
|
+
/>
|
|
114
|
+
<UsernameStatusText status={usernameStatus} theme={theme} t={t} />
|
|
115
|
+
<Button
|
|
116
|
+
variant="secondary"
|
|
117
|
+
onPress={() => onCreateWithPasskey(username.trim())}
|
|
118
|
+
disabled={!canSubmit}
|
|
119
|
+
style={styles.secondaryButton}
|
|
120
|
+
testID="signup-create-button"
|
|
121
|
+
>
|
|
122
|
+
{createPending ? t('signup.creating') : t('signup.createAccount')}
|
|
123
|
+
</Button>
|
|
124
|
+
<SubtleLink label={t('signup.backToSignInLink')} theme={theme} onPress={onBackToSignIn} />
|
|
125
|
+
</View>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Web, non-Oxy origin (b2): a passkey ceremony cannot run locally here — the
|
|
130
|
+
// same WebAuthn RP-ID boundary the sign-in surfaces hit — so this opens the
|
|
131
|
+
// auth.oxy.so hub popup. Completing EITHER a sign-in OR a fresh sign-up there
|
|
132
|
+
// relays the resulting session back through the SAME poll/socket engine.
|
|
133
|
+
return (
|
|
134
|
+
<View style={styles.centeredBlock}>
|
|
135
|
+
<Text style={[styles.mutedText, { color: theme.colors.textSecondary }]}>
|
|
136
|
+
{t('signup.hubExplainer')}
|
|
137
|
+
</Text>
|
|
138
|
+
<Button variant="primary" onPress={onOpenHub} style={styles.primaryButton}>
|
|
139
|
+
{t('signup.continueInWindow')}
|
|
140
|
+
</Button>
|
|
141
|
+
<SubtleLink label={t('signup.backToSignInLink')} theme={theme} onPress={onBackToSignIn} />
|
|
142
|
+
</View>
|
|
143
|
+
);
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/** The inline availability verdict. Network FAILURES are toasted, never shown here. */
|
|
147
|
+
const UsernameStatusText: React.FC<{ status: UsernameStatus; theme: Theme; t: Translate }> = ({
|
|
148
|
+
status,
|
|
149
|
+
theme,
|
|
150
|
+
t,
|
|
151
|
+
}) => {
|
|
152
|
+
if (status === 'idle') return null;
|
|
153
|
+
if (status === 'checking') {
|
|
154
|
+
return (
|
|
155
|
+
<Text style={[styles.mutedText, { color: theme.colors.textSecondary }]}>
|
|
156
|
+
{t('signup.usernameChecking')}
|
|
157
|
+
</Text>
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
if (status === 'available') {
|
|
161
|
+
return (
|
|
162
|
+
<Text style={[styles.mutedText, { color: theme.colors.success }]}>
|
|
163
|
+
{t('signup.usernameAvailable')}
|
|
164
|
+
</Text>
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
return (
|
|
168
|
+
<Text style={[styles.mutedText, { color: theme.colors.error }]}>
|
|
169
|
+
{t('signup.usernameTaken')}
|
|
170
|
+
</Text>
|
|
171
|
+
);
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export default SignUpView;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The "Having trouble?" progressive disclosure (issue #691, Phase 5).
|
|
3
|
+
*
|
|
4
|
+
* The normal sign-in surface presents ONE primary action. Every alternative —
|
|
5
|
+
* scanning a QR from another device, a passkey on this device, getting Commons,
|
|
6
|
+
* creating an account — lives here, hidden until the user asks for it or the
|
|
7
|
+
* chosen primary route fails.
|
|
8
|
+
*
|
|
9
|
+
* Two renderings, deliberately not one controlled component:
|
|
10
|
+
* - `revealed` (the primary route failed, or there IS no primary route): the
|
|
11
|
+
* alternatives ARE the surface's content now, so they render plainly. There
|
|
12
|
+
* is nothing left to hide them behind.
|
|
13
|
+
* - otherwise: Bloom's own `Collapsible`, whose trigger is the small
|
|
14
|
+
* "Having trouble?" affordance.
|
|
15
|
+
*
|
|
16
|
+
* Splitting on `revealed` is what keeps the open state where it belongs — inside
|
|
17
|
+
* Bloom's uncontrolled disclosure — instead of forcing a hand-rolled controlled
|
|
18
|
+
* copy of it here.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type React from 'react';
|
|
22
|
+
import { View } from 'react-native';
|
|
23
|
+
import { Collapsible } from '@oxyhq/bloom/collapsible';
|
|
24
|
+
import { SubtleLink } from './primitives';
|
|
25
|
+
import { authChooserStyles as styles } from './styles';
|
|
26
|
+
import type { OxySignInSurfaceAction, Theme, Translate } from './types';
|
|
27
|
+
|
|
28
|
+
interface TroubleDisclosureProps {
|
|
29
|
+
/** The alternative routes out of the current surface. Always subordinate links. */
|
|
30
|
+
actions: readonly OxySignInSurfaceAction[];
|
|
31
|
+
/**
|
|
32
|
+
* `true` when the primary route could not be carried out (`signIn.routeFailed`)
|
|
33
|
+
* or the surface has no working primary at all (a failed request). The
|
|
34
|
+
* alternatives are shown without asking.
|
|
35
|
+
*/
|
|
36
|
+
revealed: boolean;
|
|
37
|
+
theme: Theme;
|
|
38
|
+
t: Translate;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const TroubleDisclosure: React.FC<TroubleDisclosureProps> = ({ actions, revealed, theme, t }) => {
|
|
42
|
+
if (actions.length === 0) return null;
|
|
43
|
+
|
|
44
|
+
const links = (
|
|
45
|
+
<View style={styles.troubleActions}>
|
|
46
|
+
{actions.map((action) => (
|
|
47
|
+
<SubtleLink
|
|
48
|
+
key={action.key}
|
|
49
|
+
label={action.label}
|
|
50
|
+
theme={theme}
|
|
51
|
+
onPress={action.onPress}
|
|
52
|
+
disabled={action.disabled}
|
|
53
|
+
testID={action.key}
|
|
54
|
+
/>
|
|
55
|
+
))}
|
|
56
|
+
</View>
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
if (revealed) return links;
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<Collapsible
|
|
63
|
+
title={t('accountSwitcher.havingTrouble')}
|
|
64
|
+
style={styles.troubleTrigger}
|
|
65
|
+
titleStyle={[styles.linkText, { color: theme.colors.textSecondary }]}
|
|
66
|
+
testID="trouble-disclosure"
|
|
67
|
+
>
|
|
68
|
+
{links}
|
|
69
|
+
</Collapsible>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default TroubleDisclosure;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The small presentational building blocks shared across the auth chooser's
|
|
3
|
+
* views. One responsibility each, no controller access, no side effects — they
|
|
4
|
+
* take props and render.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type React from 'react';
|
|
8
|
+
import { useState } from 'react';
|
|
9
|
+
import { Pressable, View } from 'react-native';
|
|
10
|
+
import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';
|
|
11
|
+
import { Avatar } from '@oxyhq/bloom/avatar';
|
|
12
|
+
import { Text } from '@oxyhq/bloom/typography';
|
|
13
|
+
import { BloomColorScope } from '@oxyhq/bloom/theme';
|
|
14
|
+
import type { SwitchableAccount } from '@oxyhq/core';
|
|
15
|
+
import { authChooserStyles as styles } from './styles';
|
|
16
|
+
import { resolveAccentHex, toPreset, type Theme } from './types';
|
|
17
|
+
|
|
18
|
+
/** Diameter of a row avatar (the sign-in view's account rows). */
|
|
19
|
+
const ROW_AVATAR_SIZE = 40;
|
|
20
|
+
|
|
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
|
+
/**
|
|
50
|
+
* A SUBORDINATE action: a small centred text link, never a button.
|
|
51
|
+
*
|
|
52
|
+
* This is the single visual grammar for everything that is not the surface's one
|
|
53
|
+
* primary action (issue #691) — the sign-up entry, and every alternative revealed
|
|
54
|
+
* behind "Having trouble?". Keeping them all on one component is what stops an
|
|
55
|
+
* alternative from quietly growing into a co-equal button again.
|
|
56
|
+
*/
|
|
57
|
+
export const SubtleLink: React.FC<{
|
|
58
|
+
label: string;
|
|
59
|
+
theme: Theme;
|
|
60
|
+
onPress: () => void;
|
|
61
|
+
disabled?: boolean;
|
|
62
|
+
testID?: string;
|
|
63
|
+
}> = ({ label, theme, onPress, disabled, testID }) => (
|
|
64
|
+
<Pressable
|
|
65
|
+
onPress={onPress}
|
|
66
|
+
disabled={disabled}
|
|
67
|
+
accessibilityRole="button"
|
|
68
|
+
accessibilityLabel={label}
|
|
69
|
+
style={styles.footerLink}
|
|
70
|
+
testID={testID}
|
|
71
|
+
>
|
|
72
|
+
<Text style={[styles.linkText, { color: theme.colors.textSecondary }]}>{label}</Text>
|
|
73
|
+
</Pressable>
|
|
74
|
+
);
|
|
75
|
+
|
|
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
|
+
/**
|
|
86
|
+
* An account row on the sign-in entry — "continue as one of these" rather than a
|
|
87
|
+
* choice of authentication METHOD, which is why it stays above the primary CTA
|
|
88
|
+
* instead of behind the trouble disclosure.
|
|
89
|
+
*/
|
|
90
|
+
export const AccountRow: React.FC<{
|
|
91
|
+
account: SwitchableAccount;
|
|
92
|
+
theme: Theme;
|
|
93
|
+
switching: boolean;
|
|
94
|
+
disabled: boolean;
|
|
95
|
+
onPress: () => void;
|
|
96
|
+
}> = ({ account, theme, switching, disabled, onPress }) => {
|
|
97
|
+
const accent = resolveAccentHex(account.color, theme.colors.primary);
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<BloomColorScope colorPreset={toPreset(account.color)} asChild>
|
|
101
|
+
<Pressable
|
|
102
|
+
style={[
|
|
103
|
+
styles.accountRow,
|
|
104
|
+
{
|
|
105
|
+
borderColor: account.isCurrent ? accent : theme.colors.border,
|
|
106
|
+
backgroundColor: theme.colors.card,
|
|
107
|
+
},
|
|
108
|
+
disabled && !switching ? styles.rowDisabled : null,
|
|
109
|
+
]}
|
|
110
|
+
onPress={onPress}
|
|
111
|
+
disabled={disabled}
|
|
112
|
+
accessibilityRole="button"
|
|
113
|
+
accessibilityState={{ selected: account.isCurrent, disabled }}
|
|
114
|
+
accessibilityLabel={account.displayName}
|
|
115
|
+
>
|
|
116
|
+
<View style={[styles.avatarRing, { borderColor: account.isCurrent ? accent : 'transparent' }]}>
|
|
117
|
+
<Avatar
|
|
118
|
+
source={account.avatarUrl ?? undefined}
|
|
119
|
+
variant="thumb"
|
|
120
|
+
name={account.displayName}
|
|
121
|
+
size={ROW_AVATAR_SIZE}
|
|
122
|
+
/>
|
|
123
|
+
</View>
|
|
124
|
+
<View style={styles.rowMeta}>
|
|
125
|
+
<Text style={[styles.rowName, { color: theme.colors.text }]} numberOfLines={1}>
|
|
126
|
+
{account.displayName}
|
|
127
|
+
</Text>
|
|
128
|
+
{account.email ? (
|
|
129
|
+
<Text style={[styles.rowHandle, { color: theme.colors.textSecondary }]} numberOfLines={1}>
|
|
130
|
+
{account.email}
|
|
131
|
+
</Text>
|
|
132
|
+
) : null}
|
|
133
|
+
</View>
|
|
134
|
+
{switching ? (
|
|
135
|
+
<MaterialCommunityIcons name="loading" size={20} color={accent} />
|
|
136
|
+
) : account.isCurrent ? (
|
|
137
|
+
<MaterialCommunityIcons name="check-circle" size={20} color={accent} />
|
|
138
|
+
) : (
|
|
139
|
+
<MaterialCommunityIcons name="chevron-right" size={20} color={theme.colors.textSecondary} />
|
|
140
|
+
)}
|
|
141
|
+
</Pressable>
|
|
142
|
+
</BloomColorScope>
|
|
143
|
+
);
|
|
144
|
+
};
|