@oxy.so/services 6.2.0 → 8.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.
- package/README.md +80 -136
- package/lib/commonjs/assets/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/lib/commonjs/assets/assets/fonts/icons/manifest.json +5 -21
- package/lib/commonjs/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/lib/commonjs/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/lib/commonjs/assets/fonts/icons/manifest.json +5 -21
- package/lib/commonjs/index.js +21 -15
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/boot/runProviderColdBoot.js +2 -1
- package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAccountDialogScreen.js +2 -3
- package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAuthChooser.js +15 -32
- package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInRequestSurface.js.map +1 -1
- package/lib/commonjs/ui/components/ProfileButton.js +1 -1
- package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +2 -2
- package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/SignInRequestView.js +6 -17
- package/lib/commonjs/ui/components/authChooser/SignInRequestView.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js +1 -1
- package/lib/commonjs/ui/components/authChooser/primitives.js +1 -102
- package/lib/commonjs/ui/components/authChooser/primitives.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/requestSurfaces.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/signInProgress.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/styles.js +0 -33
- package/lib/commonjs/ui/components/authChooser/styles.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/types.js +0 -8
- package/lib/commonjs/ui/components/authChooser/types.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/InlineCommonsQr.js +1 -1
- package/lib/commonjs/ui/components/signIn/OxyAccountPicker.js +153 -58
- package/lib/commonjs/ui/components/signIn/OxyAccountPicker.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyAuthenticatorPanel.js +325 -0
- package/lib/commonjs/ui/components/signIn/OxyAuthenticatorPanel.js.map +1 -0
- package/lib/commonjs/ui/components/signIn/OxyDeleteAccountPanel.js +52 -56
- package/lib/commonjs/ui/components/signIn/OxyDeleteAccountPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyLinkCommonsPanel.js +48 -38
- package/lib/commonjs/ui/components/signIn/OxyLinkCommonsPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxyPasswordPanel.js +141 -0
- package/lib/commonjs/ui/components/signIn/OxyPasswordPanel.js.map +1 -0
- package/lib/commonjs/ui/components/signIn/OxySignInPanel.js +496 -201
- package/lib/commonjs/ui/components/signIn/OxySignInPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/OxySignUpPanel.js +211 -42
- package/lib/commonjs/ui/components/signIn/OxySignUpPanel.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/ReauthStep.js +186 -0
- package/lib/commonjs/ui/components/signIn/ReauthStep.js.map +1 -0
- package/lib/commonjs/ui/components/signIn/accountFlowParts.js +103 -26
- package/lib/commonjs/ui/components/signIn/accountFlowParts.js.map +1 -1
- package/lib/commonjs/ui/components/signIn/signInFlowStore.js +50 -0
- package/lib/commonjs/ui/components/signIn/signInFlowStore.js.map +1 -0
- package/lib/commonjs/ui/components/signIn/signInMethods.js +11 -25
- package/lib/commonjs/ui/components/signIn/signInMethods.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +125 -119
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +11 -10
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/context/useOxyAccountGraph.js +4 -4
- package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +1 -1
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +19 -9
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +4 -4
- package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/queryKeys.js +23 -3
- package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +8 -8
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useAuthMethods.js +27 -15
- package/lib/commonjs/ui/hooks/queries/useAuthMethods.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useFileQueries.js +5 -2
- package/lib/commonjs/ui/hooks/queries/useFileQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js +8 -8
- package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js +4 -3
- package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +6 -6
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAssets.js +36 -20
- package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAvatarPicker.js +6 -4
- package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
- package/lib/commonjs/ui/hooks/useDeviceManagement.js +5 -5
- package/lib/commonjs/ui/hooks/useDeviceManagement.js.map +1 -1
- package/lib/commonjs/ui/hooks/useDeviceSwitcher.js +2 -2
- package/lib/commonjs/ui/hooks/useDeviceSwitcher.js.map +1 -1
- package/lib/commonjs/ui/hooks/useFileDownloadUrl.js +1 -4
- package/lib/commonjs/ui/hooks/useFileDownloadUrl.js.map +1 -1
- package/lib/commonjs/ui/hooks/useFollow.js +2 -2
- package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
- package/lib/commonjs/ui/hooks/useFollowTarget.js +5 -5
- package/lib/commonjs/ui/hooks/useFollowTarget.js.map +1 -1
- package/lib/commonjs/ui/hooks/useI18n.js +4 -1
- package/lib/commonjs/ui/hooks/useI18n.js.map +1 -1
- package/lib/commonjs/ui/hooks/useResolvedFileUrls.js +2 -2
- package/lib/commonjs/ui/hooks/useResolvedFileUrls.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionManagement.js +3 -3
- package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/commonjs/ui/icons/subsetGlyphMaps.js +0 -16
- package/lib/commonjs/ui/icons/subsetGlyphMaps.js.map +1 -1
- package/lib/commonjs/ui/navigation/routes.js +6 -4
- package/lib/commonjs/ui/navigation/routes.js.map +1 -1
- package/lib/commonjs/ui/navigation/surfaceRegistry.js +1 -1
- package/lib/commonjs/ui/navigation/surfaceRegistry.js.map +1 -1
- package/lib/commonjs/ui/oauth/browserBridge.js +247 -0
- package/lib/commonjs/ui/oauth/browserBridge.js.map +1 -0
- package/lib/commonjs/ui/oauth/completeOAuthCode.js +1 -1
- package/lib/commonjs/ui/oauth/completeOAuthCode.js.map +1 -1
- package/lib/commonjs/ui/oauth/explicitOAuthConsent.js +1 -1
- package/lib/commonjs/ui/oauth/explicitOAuthConsent.js.map +1 -1
- package/lib/commonjs/ui/runtime/createOxyRuntime.js +9 -8
- package/lib/commonjs/ui/runtime/createOxyRuntime.js.map +1 -1
- package/lib/commonjs/ui/runtime/runtimeContext.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountMembersScreen.js +7 -7
- package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSecurityPanelScreen.js +35 -0
- package/lib/commonjs/ui/screens/AccountSecurityPanelScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +3 -3
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AppInfoScreen.js +5 -5
- package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AvatarCropScreen.js +3 -3
- package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ChangeAvatarScreen.js +1 -1
- package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/CreateAccountScreen.js +1 -1
- package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/DeleteAccountScreen.js +19 -0
- package/lib/commonjs/ui/screens/DeleteAccountScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/DomainsScreen.js +217 -0
- package/lib/commonjs/ui/screens/DomainsScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/EditProfileScreen.js +1 -1
- package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +25 -11
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HelpSupportScreen.js +1 -17
- package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LinkCommonsScreen.js +14 -0
- package/lib/commonjs/ui/screens/LinkCommonsScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/ManageAccountScreen.js +57 -61
- package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +52 -62
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +5 -13
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SearchSettingsScreen.js +15 -24
- package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SignInAuthenticatorScreen.js +14 -0
- package/lib/commonjs/ui/screens/SignInAuthenticatorScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/SignInPasswordScreen.js +20 -0
- package/lib/commonjs/ui/screens/SignInPasswordScreen.js.map +1 -0
- 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 +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +25 -17
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +2 -2
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +8 -14
- package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +11 -9
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/commonjs/ui/session/authStore.js +4 -4
- package/lib/commonjs/ui/session/authStore.js.map +1 -1
- package/lib/commonjs/ui/session/backgroundSession.js +5 -40
- package/lib/commonjs/ui/session/backgroundSession.js.map +1 -1
- package/lib/commonjs/ui/session/createSessionClient.js +3 -3
- package/lib/commonjs/ui/session/createSessionClient.js.map +1 -1
- package/lib/commonjs/ui/session/deviceCredentialTracker.js +42 -0
- package/lib/commonjs/ui/session/deviceCredentialTracker.js.map +1 -0
- package/lib/commonjs/ui/session/identityBinding.js +3 -3
- package/lib/commonjs/ui/session/identityBinding.js.map +1 -1
- package/lib/commonjs/ui/session/index.js +6 -6
- package/lib/commonjs/ui/session/index.js.map +1 -1
- package/lib/commonjs/ui/session/sharedDeviceCredentialStore.js +2 -2
- package/lib/commonjs/ui/session/sharedDeviceCredentialStore.js.map +1 -1
- package/lib/commonjs/ui/session/tokenTransport.js +3 -3
- package/lib/commonjs/ui/session/tokenTransport.js.map +1 -1
- package/lib/commonjs/ui/stores/assetStore.js +12 -0
- package/lib/commonjs/ui/stores/assetStore.js.map +1 -1
- package/lib/commonjs/ui/stores/followStore.js +6 -6
- package/lib/commonjs/ui/stores/followStore.js.map +1 -1
- package/lib/commonjs/ui/utils/accountDeletionHandoff.js +1 -4
- package/lib/commonjs/ui/utils/accountDeletionHandoff.js.map +1 -1
- package/lib/commonjs/ui/utils/avatarUtils.js +1 -1
- package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
- package/lib/commonjs/ui/utils/deviceCredential.js +11 -4
- package/lib/commonjs/ui/utils/deviceCredential.js.map +1 -1
- package/lib/commonjs/ui/utils/fileManagement.js +0 -10
- package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
- package/lib/commonjs/ui/utils/sessionHelpers.js +2 -2
- package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/module/assets/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/lib/module/assets/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/lib/module/assets/assets/fonts/icons/manifest.json +5 -21
- package/lib/module/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/lib/module/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/lib/module/assets/fonts/icons/manifest.json +5 -21
- package/lib/module/index.js +6 -6
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/boot/runProviderColdBoot.js +2 -1
- package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/module/ui/components/OxyAccountDialogScreen.js +2 -3
- package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
- package/lib/module/ui/components/OxyAuthChooser.js +15 -32
- package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/module/ui/components/OxySignInButton.js +1 -1
- package/lib/module/ui/components/OxySignInButton.js.map +1 -1
- package/lib/module/ui/components/OxySignInRequestSurface.js.map +1 -1
- package/lib/module/ui/components/ProfileButton.js +1 -1
- package/lib/module/ui/components/ProfileButton.js.map +1 -1
- package/lib/module/ui/components/authChooser/AccountsMenuView.js +1 -1
- package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
- package/lib/module/ui/components/authChooser/SignInRequestView.js +6 -17
- package/lib/module/ui/components/authChooser/SignInRequestView.js.map +1 -1
- package/lib/module/ui/components/authChooser/TroubleDisclosure.js +1 -1
- package/lib/module/ui/components/authChooser/primitives.js +2 -103
- package/lib/module/ui/components/authChooser/primitives.js.map +1 -1
- package/lib/module/ui/components/authChooser/requestSurfaces.js.map +1 -1
- package/lib/module/ui/components/authChooser/signInProgress.js.map +1 -1
- package/lib/module/ui/components/authChooser/styles.js +0 -33
- package/lib/module/ui/components/authChooser/styles.js.map +1 -1
- package/lib/module/ui/components/authChooser/types.js +0 -8
- package/lib/module/ui/components/authChooser/types.js.map +1 -1
- package/lib/module/ui/components/signIn/InlineCommonsQr.js +1 -1
- package/lib/module/ui/components/signIn/OxyAccountPicker.js +155 -58
- package/lib/module/ui/components/signIn/OxyAccountPicker.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyAuthenticatorPanel.js +321 -0
- package/lib/module/ui/components/signIn/OxyAuthenticatorPanel.js.map +1 -0
- package/lib/module/ui/components/signIn/OxyDeleteAccountPanel.js +54 -58
- package/lib/module/ui/components/signIn/OxyDeleteAccountPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyLinkCommonsPanel.js +48 -38
- package/lib/module/ui/components/signIn/OxyLinkCommonsPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/OxyPasswordPanel.js +136 -0
- package/lib/module/ui/components/signIn/OxyPasswordPanel.js.map +1 -0
- package/lib/module/ui/components/signIn/OxySignInPanel.js +496 -201
- package/lib/module/ui/components/signIn/OxySignInPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/OxySignUpPanel.js +212 -43
- package/lib/module/ui/components/signIn/OxySignUpPanel.js.map +1 -1
- package/lib/module/ui/components/signIn/ReauthStep.js +181 -0
- package/lib/module/ui/components/signIn/ReauthStep.js.map +1 -0
- package/lib/module/ui/components/signIn/accountFlowParts.js +97 -26
- package/lib/module/ui/components/signIn/accountFlowParts.js.map +1 -1
- package/lib/module/ui/components/signIn/signInFlowStore.js +44 -0
- package/lib/module/ui/components/signIn/signInFlowStore.js.map +1 -0
- package/lib/module/ui/components/signIn/signInMethods.js +11 -25
- package/lib/module/ui/components/signIn/signInMethods.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +121 -115
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +7 -7
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/context/useOxyAccountGraph.js +4 -4
- package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
- package/lib/module/ui/hooks/mutations/mutationFactory.js +1 -1
- package/lib/module/ui/hooks/mutations/useAccountMutations.js +19 -9
- package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/module/ui/hooks/mutations/useServicesMutations.js +4 -4
- package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
- package/lib/module/ui/hooks/queries/queryKeys.js +23 -3
- package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js +8 -8
- package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useAuthMethods.js +25 -14
- package/lib/module/ui/hooks/queries/useAuthMethods.js.map +1 -1
- package/lib/module/ui/hooks/queries/useFileQueries.js +5 -2
- package/lib/module/ui/hooks/queries/useFileQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/usePaymentQueries.js +8 -8
- package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useSecurityQueries.js +4 -3
- package/lib/module/ui/hooks/queries/useSecurityQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useServicesQueries.js +6 -6
- package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/module/ui/hooks/useAssets.js +36 -20
- package/lib/module/ui/hooks/useAssets.js.map +1 -1
- package/lib/module/ui/hooks/useAvatarPicker.js +6 -4
- package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
- package/lib/module/ui/hooks/useDeviceManagement.js +4 -4
- package/lib/module/ui/hooks/useDeviceManagement.js.map +1 -1
- package/lib/module/ui/hooks/useDeviceSwitcher.js +2 -2
- package/lib/module/ui/hooks/useDeviceSwitcher.js.map +1 -1
- package/lib/module/ui/hooks/useFileDownloadUrl.js +1 -4
- package/lib/module/ui/hooks/useFileDownloadUrl.js.map +1 -1
- package/lib/module/ui/hooks/useFollow.js +2 -2
- package/lib/module/ui/hooks/useFollow.js.map +1 -1
- package/lib/module/ui/hooks/useFollowTarget.js +5 -5
- package/lib/module/ui/hooks/useFollowTarget.js.map +1 -1
- package/lib/module/ui/hooks/useI18n.js +6 -3
- package/lib/module/ui/hooks/useI18n.js.map +1 -1
- package/lib/module/ui/hooks/useResolvedFileUrls.js +2 -2
- package/lib/module/ui/hooks/useResolvedFileUrls.js.map +1 -1
- package/lib/module/ui/hooks/useSessionManagement.js +3 -3
- package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/icons/subsetGlyphMaps.js +0 -16
- package/lib/module/ui/icons/subsetGlyphMaps.js.map +1 -1
- package/lib/module/ui/navigation/routes.js +6 -4
- package/lib/module/ui/navigation/routes.js.map +1 -1
- package/lib/module/ui/navigation/surfaceRegistry.js +1 -1
- package/lib/module/ui/navigation/surfaceRegistry.js.map +1 -1
- package/lib/module/ui/oauth/browserBridge.js +239 -0
- package/lib/module/ui/oauth/browserBridge.js.map +1 -0
- package/lib/module/ui/oauth/completeOAuthCode.js +1 -1
- package/lib/module/ui/oauth/completeOAuthCode.js.map +1 -1
- package/lib/module/ui/oauth/explicitOAuthConsent.js +1 -1
- package/lib/module/ui/oauth/explicitOAuthConsent.js.map +1 -1
- package/lib/module/ui/runtime/createOxyRuntime.js +4 -3
- package/lib/module/ui/runtime/createOxyRuntime.js.map +1 -1
- package/lib/module/ui/runtime/runtimeContext.js.map +1 -1
- package/lib/module/ui/screens/AccountMembersScreen.js +7 -7
- package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSecurityPanelScreen.js +32 -0
- package/lib/module/ui/screens/AccountSecurityPanelScreen.js.map +1 -0
- package/lib/module/ui/screens/AccountSettingsScreen.js +3 -3
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/module/ui/screens/AppInfoScreen.js +5 -5
- package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/module/ui/screens/AvatarCropScreen.js +3 -3
- package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/module/ui/screens/ChangeAvatarScreen.js +1 -1
- package/lib/module/ui/screens/ChangeAvatarScreen.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/DeleteAccountScreen.js +17 -0
- package/lib/module/ui/screens/DeleteAccountScreen.js.map +1 -0
- package/lib/module/ui/screens/DomainsScreen.js +212 -0
- package/lib/module/ui/screens/DomainsScreen.js.map +1 -0
- package/lib/module/ui/screens/EditProfileScreen.js +1 -1
- package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +25 -11
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/HelpSupportScreen.js +1 -17
- package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/module/ui/screens/LinkCommonsScreen.js +12 -0
- package/lib/module/ui/screens/LinkCommonsScreen.js.map +1 -0
- package/lib/module/ui/screens/ManageAccountScreen.js +58 -62
- package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/PrivacySettingsScreen.js +53 -63
- package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +5 -13
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SearchSettingsScreen.js +16 -25
- package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/SignInAuthenticatorScreen.js +12 -0
- package/lib/module/ui/screens/SignInAuthenticatorScreen.js.map +1 -0
- package/lib/module/ui/screens/SignInPasswordScreen.js +18 -0
- package/lib/module/ui/screens/SignInPasswordScreen.js.map +1 -0
- package/lib/module/ui/screens/UserListScreen.js +3 -3
- 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/trust/TrustCenterScreen.js +26 -18
- package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +2 -2
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRewardsScreen.js +9 -15
- package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRulesScreen.js +12 -10
- package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/module/ui/session/authStore.js +1 -1
- package/lib/module/ui/session/authStore.js.map +1 -1
- package/lib/module/ui/session/backgroundSession.js +5 -40
- package/lib/module/ui/session/backgroundSession.js.map +1 -1
- package/lib/module/ui/session/createSessionClient.js +1 -1
- package/lib/module/ui/session/createSessionClient.js.map +1 -1
- package/lib/module/ui/session/deviceCredentialTracker.js +38 -0
- package/lib/module/ui/session/deviceCredentialTracker.js.map +1 -0
- package/lib/module/ui/session/identityBinding.js +1 -1
- package/lib/module/ui/session/identityBinding.js.map +1 -1
- package/lib/module/ui/session/index.js +1 -1
- package/lib/module/ui/session/index.js.map +1 -1
- package/lib/module/ui/session/sharedDeviceCredentialStore.js +1 -1
- package/lib/module/ui/session/sharedDeviceCredentialStore.js.map +1 -1
- package/lib/module/ui/session/tokenTransport.js +3 -3
- package/lib/module/ui/session/tokenTransport.js.map +1 -1
- package/lib/module/ui/stores/assetStore.js +12 -0
- package/lib/module/ui/stores/assetStore.js.map +1 -1
- package/lib/module/ui/stores/followStore.js +6 -6
- package/lib/module/ui/stores/followStore.js.map +1 -1
- package/lib/module/ui/utils/accountDeletionHandoff.js +2 -5
- package/lib/module/ui/utils/accountDeletionHandoff.js.map +1 -1
- package/lib/module/ui/utils/avatarUtils.js +1 -1
- package/lib/module/ui/utils/avatarUtils.js.map +1 -1
- package/lib/module/ui/utils/deviceCredential.js +10 -3
- package/lib/module/ui/utils/deviceCredential.js.map +1 -1
- package/lib/module/ui/utils/fileManagement.js +0 -9
- package/lib/module/ui/utils/fileManagement.js.map +1 -1
- package/lib/module/ui/utils/sessionHelpers.js +2 -2
- package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +5 -5
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +3 -2
- package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts +2 -3
- package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +7 -7
- package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts +2 -1
- package/lib/typescript/commonjs/ui/components/OxySignInRequestSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/SignInRequestView.d.ts +3 -4
- package/lib/typescript/commonjs/ui/components/authChooser/SignInRequestView.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts +1 -34
- package/lib/typescript/commonjs/ui/components/authChooser/primitives.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts +2 -1
- package/lib/typescript/commonjs/ui/components/authChooser/requestSurfaces.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/signInFailureMessage.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/signInFailureMessage.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/signInProgress.d.ts +2 -1
- package/lib/typescript/commonjs/ui/components/authChooser/signInProgress.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/styles.d.ts +0 -33
- package/lib/typescript/commonjs/ui/components/authChooser/styles.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts +1 -12
- package/lib/typescript/commonjs/ui/components/authChooser/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/InlineCommonsQr.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/InlineCommonsQr.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyAccountPicker.d.ts +10 -4
- package/lib/typescript/commonjs/ui/components/signIn/OxyAccountPicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyAuthenticatorPanel.d.ts +19 -0
- package/lib/typescript/commonjs/ui/components/signIn/OxyAuthenticatorPanel.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/signIn/OxyDeleteAccountPanel.d.ts +10 -6
- package/lib/typescript/commonjs/ui/components/signIn/OxyDeleteAccountPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyLinkCommonsPanel.d.ts +6 -6
- package/lib/typescript/commonjs/ui/components/signIn/OxyLinkCommonsPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyPasswordPanel.d.ts +15 -0
- package/lib/typescript/commonjs/ui/components/signIn/OxyPasswordPanel.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/signIn/OxySignInPanel.d.ts +21 -19
- package/lib/typescript/commonjs/ui/components/signIn/OxySignInPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxySignUpPanel.d.ts +16 -7
- package/lib/typescript/commonjs/ui/components/signIn/OxySignUpPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/ReauthStep.d.ts +34 -0
- package/lib/typescript/commonjs/ui/components/signIn/ReauthStep.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/signIn/accountFlowParts.d.ts +38 -12
- package/lib/typescript/commonjs/ui/components/signIn/accountFlowParts.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/signIn/signInFlowStore.d.ts +20 -0
- package/lib/typescript/commonjs/ui/components/signIn/signInFlowStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/signIn/signInMethods.d.ts +8 -21
- package/lib/typescript/commonjs/ui/components/signIn/signInMethods.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts +2 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +4 -39
- package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +2 -1
- package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/accountDialogSnapshot.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/accountDialogSnapshot.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/mutationFactory.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +4 -4
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/useServicesMutations.d.ts +5 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/useServicesMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts +19 -1
- package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useAuthMethods.d.ts +13 -20
- package/lib/typescript/commonjs/ui/hooks/queries/useAuthMethods.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useFileQueries.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useFileQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/usePaymentQueries.d.ts +4 -4
- package/lib/typescript/commonjs/ui/hooks/queries/useSecurityQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts +3 -5
- package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts +5 -5
- package/lib/typescript/commonjs/ui/hooks/useAssets.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/useDeviceSwitcher.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/useDeviceSwitcher.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useFileDownloadUrl.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useFollow.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/useI18n.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useResolvedFileUrls.d.ts +9 -7
- package/lib/typescript/commonjs/ui/hooks/useResolvedFileUrls.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts +1 -1
- package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts +1 -1
- package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/icons/subsetGlyphMaps.d.ts +0 -16
- package/lib/typescript/commonjs/ui/icons/subsetGlyphMaps.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts +1 -1
- package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/navigation/routes.d.ts +1 -1
- package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/navigation/surfaceRegistry.d.ts +7 -5
- package/lib/typescript/commonjs/ui/navigation/surfaceRegistry.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/oauth/browserBridge.d.ts +97 -0
- package/lib/typescript/commonjs/ui/oauth/browserBridge.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/runtime/createOxyRuntime.d.ts +6 -2
- package/lib/typescript/commonjs/ui/runtime/createOxyRuntime.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/runtime/runtimeContext.d.ts +2 -1
- package/lib/typescript/commonjs/ui/runtime/runtimeContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/runtime/types.d.ts +2 -1
- package/lib/typescript/commonjs/ui/runtime/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountSecurityPanelScreen.d.ts +11 -0
- package/lib/typescript/commonjs/ui/screens/AccountSecurityPanelScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/DeleteAccountScreen.d.ts +6 -0
- package/lib/typescript/commonjs/ui/screens/DeleteAccountScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/{SavesCollectionsScreen.d.ts → DomainsScreen.d.ts} +1 -1
- package/lib/typescript/commonjs/ui/screens/DomainsScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LinkCommonsScreen.d.ts +6 -0
- package/lib/typescript/commonjs/ui/screens/LinkCommonsScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/SignInAuthenticatorScreen.d.ts +6 -0
- package/lib/typescript/commonjs/ui/screens/SignInAuthenticatorScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/SignInPasswordScreen.d.ts +6 -0
- package/lib/typescript/commonjs/ui/screens/SignInPasswordScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/authStore.d.ts +1 -1
- package/lib/typescript/commonjs/ui/session/authStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts +3 -4
- package/lib/typescript/commonjs/ui/session/backgroundSession.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts +2 -1
- package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/deviceCredentialTracker.d.ts +23 -0
- package/lib/typescript/commonjs/ui/session/deviceCredentialTracker.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/session/identityBinding.d.ts +1 -1
- package/lib/typescript/commonjs/ui/session/identityBinding.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/index.d.ts +1 -1
- package/lib/typescript/commonjs/ui/session/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/nativeSecureStorage.d.ts +1 -1
- package/lib/typescript/commonjs/ui/session/nativeSecureStorage.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/sharedDeviceCredentialStore.d.ts +1 -1
- package/lib/typescript/commonjs/ui/session/sharedDeviceCredentialStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts +3 -2
- package/lib/typescript/commonjs/ui/session/tokenTransport.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/stores/assetStore.d.ts +7 -0
- package/lib/typescript/commonjs/ui/stores/assetStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/types/navigation.d.ts +1 -1
- package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/accountDeletionHandoff.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/deviceCredential.d.ts +10 -3
- package/lib/typescript/commonjs/ui/utils/deviceCredential.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +1 -5
- package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +5 -5
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +3 -2
- package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts +2 -3
- package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +7 -7
- package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts +2 -1
- package/lib/typescript/module/ui/components/OxySignInRequestSurface.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts +1 -1
- package/lib/typescript/module/ui/components/authChooser/AccountsMenuView.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/SignInRequestView.d.ts +3 -4
- package/lib/typescript/module/ui/components/authChooser/SignInRequestView.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts +1 -1
- package/lib/typescript/module/ui/components/authChooser/primitives.d.ts +1 -34
- package/lib/typescript/module/ui/components/authChooser/primitives.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts +2 -1
- package/lib/typescript/module/ui/components/authChooser/requestSurfaces.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/signInFailureMessage.d.ts +1 -1
- package/lib/typescript/module/ui/components/authChooser/signInFailureMessage.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/signInProgress.d.ts +2 -1
- package/lib/typescript/module/ui/components/authChooser/signInProgress.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/styles.d.ts +0 -33
- package/lib/typescript/module/ui/components/authChooser/styles.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/types.d.ts +1 -12
- package/lib/typescript/module/ui/components/authChooser/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/InlineCommonsQr.d.ts +1 -1
- package/lib/typescript/module/ui/components/signIn/InlineCommonsQr.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyAccountPicker.d.ts +10 -4
- package/lib/typescript/module/ui/components/signIn/OxyAccountPicker.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyAuthenticatorPanel.d.ts +19 -0
- package/lib/typescript/module/ui/components/signIn/OxyAuthenticatorPanel.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/signIn/OxyDeleteAccountPanel.d.ts +10 -6
- package/lib/typescript/module/ui/components/signIn/OxyDeleteAccountPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyLinkCommonsPanel.d.ts +6 -6
- package/lib/typescript/module/ui/components/signIn/OxyLinkCommonsPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxyPasswordPanel.d.ts +15 -0
- package/lib/typescript/module/ui/components/signIn/OxyPasswordPanel.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/signIn/OxySignInPanel.d.ts +21 -19
- package/lib/typescript/module/ui/components/signIn/OxySignInPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/OxySignUpPanel.d.ts +16 -7
- package/lib/typescript/module/ui/components/signIn/OxySignUpPanel.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/ReauthStep.d.ts +34 -0
- package/lib/typescript/module/ui/components/signIn/ReauthStep.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/signIn/accountFlowParts.d.ts +38 -12
- package/lib/typescript/module/ui/components/signIn/accountFlowParts.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/signIn/signInFlowStore.d.ts +20 -0
- package/lib/typescript/module/ui/components/signIn/signInFlowStore.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/signIn/signInMethods.d.ts +8 -21
- package/lib/typescript/module/ui/components/signIn/signInMethods.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts +2 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +4 -39
- package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +2 -1
- package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/accountDialogSnapshot.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/accountDialogSnapshot.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/mutationFactory.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +4 -4
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/useServicesMutations.d.ts +5 -1
- package/lib/typescript/module/ui/hooks/mutations/useServicesMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts +19 -1
- package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useAuthMethods.d.ts +13 -20
- package/lib/typescript/module/ui/hooks/queries/useAuthMethods.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useFileQueries.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/queries/useFileQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/usePaymentQueries.d.ts +4 -4
- package/lib/typescript/module/ui/hooks/queries/useSecurityQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts +3 -5
- package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAssets.d.ts +5 -5
- package/lib/typescript/module/ui/hooks/useAssets.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/useDeviceSwitcher.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/useDeviceSwitcher.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useFileDownloadUrl.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useFollow.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/useI18n.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useResolvedFileUrls.d.ts +9 -7
- package/lib/typescript/module/ui/hooks/useResolvedFileUrls.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/Ionicons.d.ts +1 -1
- package/lib/typescript/module/ui/icons/Ionicons.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts +1 -1
- package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
- package/lib/typescript/module/ui/icons/subsetGlyphMaps.d.ts +0 -16
- package/lib/typescript/module/ui/icons/subsetGlyphMaps.d.ts.map +1 -1
- package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts +1 -1
- package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts.map +1 -1
- package/lib/typescript/module/ui/navigation/routes.d.ts +1 -1
- package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
- package/lib/typescript/module/ui/navigation/surfaceRegistry.d.ts +7 -5
- package/lib/typescript/module/ui/navigation/surfaceRegistry.d.ts.map +1 -1
- package/lib/typescript/module/ui/oauth/browserBridge.d.ts +97 -0
- package/lib/typescript/module/ui/oauth/browserBridge.d.ts.map +1 -0
- package/lib/typescript/module/ui/runtime/createOxyRuntime.d.ts +6 -2
- package/lib/typescript/module/ui/runtime/createOxyRuntime.d.ts.map +1 -1
- package/lib/typescript/module/ui/runtime/runtimeContext.d.ts +2 -1
- package/lib/typescript/module/ui/runtime/runtimeContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/runtime/types.d.ts +2 -1
- package/lib/typescript/module/ui/runtime/types.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountSecurityPanelScreen.d.ts +11 -0
- package/lib/typescript/module/ui/screens/AccountSecurityPanelScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/DeleteAccountScreen.d.ts +6 -0
- package/lib/typescript/module/ui/screens/DeleteAccountScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/{SavesCollectionsScreen.d.ts → DomainsScreen.d.ts} +1 -1
- package/lib/typescript/module/ui/screens/DomainsScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LinkCommonsScreen.d.ts +6 -0
- package/lib/typescript/module/ui/screens/LinkCommonsScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/SignInAuthenticatorScreen.d.ts +6 -0
- package/lib/typescript/module/ui/screens/SignInAuthenticatorScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/SignInPasswordScreen.d.ts +6 -0
- package/lib/typescript/module/ui/screens/SignInPasswordScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/authStore.d.ts +1 -1
- package/lib/typescript/module/ui/session/authStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/backgroundSession.d.ts +3 -4
- package/lib/typescript/module/ui/session/backgroundSession.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/createSessionClient.d.ts +2 -1
- package/lib/typescript/module/ui/session/createSessionClient.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/deviceCredentialTracker.d.ts +23 -0
- package/lib/typescript/module/ui/session/deviceCredentialTracker.d.ts.map +1 -0
- package/lib/typescript/module/ui/session/identityBinding.d.ts +1 -1
- package/lib/typescript/module/ui/session/identityBinding.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/index.d.ts +1 -1
- package/lib/typescript/module/ui/session/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/nativeSecureStorage.d.ts +1 -1
- package/lib/typescript/module/ui/session/nativeSecureStorage.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/sharedDeviceCredentialStore.d.ts +1 -1
- package/lib/typescript/module/ui/session/sharedDeviceCredentialStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/session/tokenTransport.d.ts +3 -2
- package/lib/typescript/module/ui/session/tokenTransport.d.ts.map +1 -1
- package/lib/typescript/module/ui/stores/assetStore.d.ts +7 -0
- package/lib/typescript/module/ui/stores/assetStore.d.ts.map +1 -1
- package/lib/typescript/module/ui/types/navigation.d.ts +1 -1
- package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/accountDeletionHandoff.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/deviceCredential.d.ts +10 -3
- package/lib/typescript/module/ui/utils/deviceCredential.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/fileManagement.d.ts +1 -5
- package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
- package/package.json +4 -5
- package/src/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
- package/src/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
- package/src/assets/fonts/icons/manifest.json +5 -21
- package/src/index.ts +8 -8
- package/src/ui/boot/__tests__/coldBootNoIdpRedirect.test.ts +4 -4
- package/src/ui/boot/runProviderColdBoot.ts +3 -9
- package/src/ui/components/OxyAccountDialogScreen.tsx +2 -3
- package/src/ui/components/OxyAuthChooser.tsx +13 -36
- package/src/ui/components/OxySignInButton.tsx +1 -1
- package/src/ui/components/OxySignInRequestSurface.tsx +2 -1
- package/src/ui/components/ProfileButton.tsx +1 -1
- package/src/ui/components/authChooser/AccountsMenuView.tsx +1 -6
- package/src/ui/components/authChooser/SignInRequestView.tsx +5 -23
- package/src/ui/components/authChooser/TroubleDisclosure.tsx +1 -1
- package/src/ui/components/authChooser/primitives.tsx +2 -96
- package/src/ui/components/authChooser/requestSurfaces.tsx +2 -1
- package/src/ui/components/authChooser/signInFailureMessage.ts +1 -1
- package/src/ui/components/authChooser/signInProgress.ts +2 -1
- package/src/ui/components/authChooser/styles.ts +0 -33
- package/src/ui/components/authChooser/types.ts +1 -13
- package/src/ui/components/signIn/InlineCommonsQr.tsx +2 -2
- package/src/ui/components/signIn/OxyAccountPicker.tsx +131 -66
- package/src/ui/components/signIn/OxyAuthenticatorPanel.tsx +294 -0
- package/src/ui/components/signIn/OxyDeleteAccountPanel.tsx +48 -61
- package/src/ui/components/signIn/OxyLinkCommonsPanel.tsx +43 -35
- package/src/ui/components/signIn/OxyPasswordPanel.tsx +117 -0
- package/src/ui/components/signIn/OxySignInPanel.tsx +534 -214
- package/src/ui/components/signIn/OxySignUpPanel.tsx +186 -56
- package/src/ui/components/signIn/ReauthStep.tsx +201 -0
- package/src/ui/components/signIn/accountFlowParts.tsx +139 -33
- package/src/ui/components/signIn/signInFlowStore.ts +41 -0
- package/src/ui/components/signIn/signInMethods.ts +10 -29
- package/src/ui/context/OxyContext.tsx +124 -145
- package/src/ui/context/hooks/useAuthOperations.ts +9 -8
- package/src/ui/context/oxyContextTypes.ts +4 -41
- package/src/ui/context/useOxyAccountGraph.ts +6 -5
- package/src/ui/hooks/accountDialogSnapshot.ts +1 -1
- package/src/ui/hooks/mutations/mutationFactory.ts +1 -1
- package/src/ui/hooks/mutations/useAccountMutations.ts +11 -10
- package/src/ui/hooks/mutations/useServicesMutations.ts +4 -4
- package/src/ui/hooks/queries/queryKeys.ts +26 -2
- package/src/ui/hooks/queries/useAccountQueries.ts +8 -8
- package/src/ui/hooks/queries/useAuthMethods.ts +22 -19
- package/src/ui/hooks/queries/useFileQueries.ts +2 -2
- package/src/ui/hooks/queries/usePaymentQueries.ts +8 -8
- package/src/ui/hooks/queries/useSecurityQueries.ts +4 -3
- package/src/ui/hooks/queries/useServicesQueries.ts +6 -6
- package/src/ui/hooks/useAssets.ts +26 -31
- package/src/ui/hooks/useAvatarPicker.ts +4 -4
- package/src/ui/hooks/useDeviceManagement.ts +4 -4
- package/src/ui/hooks/useDeviceSwitcher.ts +2 -7
- package/src/ui/hooks/useFileDownloadUrl.ts +1 -5
- package/src/ui/hooks/useFollow.ts +2 -2
- package/src/ui/hooks/useFollowTarget.ts +5 -5
- package/src/ui/hooks/useI18n.ts +6 -3
- package/src/ui/hooks/useResolvedFileUrls.ts +8 -6
- package/src/ui/hooks/useSessionManagement.ts +3 -3
- package/src/ui/icons/subsetGlyphMaps.ts +0 -16
- package/src/ui/navigation/__tests__/getSurfaceConfig.test.ts +1 -1
- package/src/ui/navigation/accountDialogManager.ts +1 -1
- package/src/ui/navigation/routes.ts +11 -8
- package/src/ui/navigation/surfaceRegistry.ts +8 -6
- package/src/ui/oauth/__tests__/browserAuthTransport.test.ts +8 -8
- package/src/ui/oauth/__tests__/browserBridge.test.ts +198 -0
- package/src/ui/oauth/__tests__/completeOAuthCode.test.ts +1 -1
- package/src/ui/oauth/__tests__/explicitOAuthConsent.test.ts +11 -11
- package/src/ui/oauth/__tests__/sharedCompletionPath.test.ts +7 -7
- package/src/ui/oauth/browserBridge.ts +234 -0
- package/src/ui/oauth/completeOAuthCode.ts +1 -1
- package/src/ui/oauth/explicitOAuthConsent.ts +1 -1
- package/src/ui/runtime/createOxyRuntime.ts +8 -16
- package/src/ui/runtime/runtimeContext.tsx +2 -1
- package/src/ui/runtime/types.ts +2 -1
- package/src/ui/screens/AccountMembersScreen.tsx +7 -7
- package/src/ui/screens/AccountSecurityPanelScreen.tsx +26 -0
- package/src/ui/screens/AccountSettingsScreen.tsx +3 -3
- package/src/ui/screens/AccountVerificationScreen.tsx +1 -1
- package/src/ui/screens/AppInfoScreen.tsx +5 -5
- package/src/ui/screens/AvatarCropScreen.tsx +3 -3
- package/src/ui/screens/ChangeAvatarScreen.tsx +1 -1
- package/src/ui/screens/CreateAccountScreen.tsx +1 -1
- package/src/ui/screens/DeleteAccountScreen.tsx +13 -0
- package/src/ui/screens/DomainsScreen.tsx +187 -0
- package/src/ui/screens/EditProfileScreen.tsx +1 -1
- package/src/ui/screens/FileManagementScreen.tsx +15 -21
- package/src/ui/screens/HelpSupportScreen.tsx +0 -15
- package/src/ui/screens/LinkCommonsScreen.tsx +13 -0
- package/src/ui/screens/ManageAccountScreen.tsx +47 -82
- package/src/ui/screens/PrivacySettingsScreen.tsx +48 -67
- package/src/ui/screens/ProfileScreen.tsx +5 -10
- package/src/ui/screens/SearchSettingsScreen.tsx +15 -27
- package/src/ui/screens/SignInAuthenticatorScreen.tsx +13 -0
- package/src/ui/screens/SignInPasswordScreen.tsx +13 -0
- package/src/ui/screens/UserListScreen.tsx +3 -3
- package/src/ui/screens/WelcomeNewUserScreen.tsx +1 -1
- package/src/ui/screens/trust/TrustCenterScreen.tsx +25 -29
- package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +2 -2
- package/src/ui/screens/trust/TrustRewardsScreen.tsx +9 -19
- package/src/ui/screens/trust/TrustRulesScreen.tsx +14 -14
- package/src/ui/session/__tests__/authStore.test.ts +1 -1
- package/src/ui/session/__tests__/backgroundSession.test.ts +2 -61
- package/src/ui/session/__tests__/createSessionClient.test.ts +7 -9
- package/src/ui/session/__tests__/sharedDeviceCredentialStore.test.ts +1 -1
- package/src/ui/session/__tests__/tokenTransport.test.ts +9 -7
- package/src/ui/session/authStore.ts +1 -7
- package/src/ui/session/backgroundSession.ts +5 -41
- package/src/ui/session/createSessionClient.ts +2 -6
- package/src/ui/session/deviceCredentialTracker.ts +49 -0
- package/src/ui/session/identityBinding.ts +1 -6
- package/src/ui/session/index.ts +1 -1
- package/src/ui/session/nativeSecureStorage.ts +1 -1
- package/src/ui/session/sharedDeviceCredentialStore.ts +1 -6
- package/src/ui/session/tokenTransport.ts +5 -4
- package/src/ui/stores/__tests__/followStore.test.ts +13 -15
- package/src/ui/stores/assetStore.ts +15 -0
- package/src/ui/stores/followStore.ts +7 -7
- package/src/ui/types/navigation.ts +2 -1
- package/src/ui/utils/accountDeletionHandoff.ts +2 -4
- package/src/ui/utils/avatarUtils.ts +1 -1
- package/src/ui/utils/deviceCredential.ts +11 -4
- package/src/ui/utils/fileManagement.ts +0 -12
- package/src/ui/utils/sessionHelpers.ts +2 -2
- package/lib/commonjs/ui/components/signIn/OxyCreateAccountPanel.js +0 -236
- package/lib/commonjs/ui/components/signIn/OxyCreateAccountPanel.js.map +0 -1
- package/lib/commonjs/ui/components/signIn/OxyRecoverAccountPanel.js +0 -170
- package/lib/commonjs/ui/components/signIn/OxyRecoverAccountPanel.js.map +0 -1
- package/lib/commonjs/ui/components/signIn/passkeyError.js +0 -46
- package/lib/commonjs/ui/components/signIn/passkeyError.js.map +0 -1
- package/lib/commonjs/ui/context/passkeyFlow.js +0 -114
- package/lib/commonjs/ui/context/passkeyFlow.js.map +0 -1
- package/lib/commonjs/ui/screens/FAQScreen.js +0 -162
- package/lib/commonjs/ui/screens/FAQScreen.js.map +0 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js +0 -601
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +0 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +0 -968
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +0 -1
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +0 -132
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +0 -1
- package/lib/commonjs/webauthn/passkeyClient.js +0 -39
- package/lib/commonjs/webauthn/passkeyClient.js.map +0 -1
- package/lib/commonjs/webauthn/passkeyClient.native.js +0 -34
- package/lib/commonjs/webauthn/passkeyClient.native.js.map +0 -1
- package/lib/commonjs/webauthn/passkeyClient.web.js +0 -57
- package/lib/commonjs/webauthn/passkeyClient.web.js.map +0 -1
- package/lib/module/ui/components/signIn/OxyCreateAccountPanel.js +0 -231
- package/lib/module/ui/components/signIn/OxyCreateAccountPanel.js.map +0 -1
- package/lib/module/ui/components/signIn/OxyRecoverAccountPanel.js +0 -165
- package/lib/module/ui/components/signIn/OxyRecoverAccountPanel.js.map +0 -1
- package/lib/module/ui/components/signIn/passkeyError.js +0 -40
- package/lib/module/ui/components/signIn/passkeyError.js.map +0 -1
- package/lib/module/ui/context/passkeyFlow.js +0 -107
- package/lib/module/ui/context/passkeyFlow.js.map +0 -1
- package/lib/module/ui/screens/FAQScreen.js +0 -157
- package/lib/module/ui/screens/FAQScreen.js.map +0 -1
- package/lib/module/ui/screens/FeedbackScreen.js +0 -599
- package/lib/module/ui/screens/FeedbackScreen.js.map +0 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +0 -963
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +0 -1
- package/lib/module/ui/screens/SavesCollectionsScreen.js +0 -127
- package/lib/module/ui/screens/SavesCollectionsScreen.js.map +0 -1
- package/lib/module/webauthn/passkeyClient.js +0 -33
- package/lib/module/webauthn/passkeyClient.js.map +0 -1
- package/lib/module/webauthn/passkeyClient.native.js +0 -28
- package/lib/module/webauthn/passkeyClient.native.js.map +0 -1
- package/lib/module/webauthn/passkeyClient.web.js +0 -52
- package/lib/module/webauthn/passkeyClient.web.js.map +0 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyCreateAccountPanel.d.ts +0 -24
- package/lib/typescript/commonjs/ui/components/signIn/OxyCreateAccountPanel.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/signIn/OxyRecoverAccountPanel.d.ts +0 -20
- package/lib/typescript/commonjs/ui/components/signIn/OxyRecoverAccountPanel.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/signIn/passkeyError.d.ts +0 -16
- package/lib/typescript/commonjs/ui/components/signIn/passkeyError.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/context/passkeyFlow.d.ts +0 -92
- package/lib/typescript/commonjs/ui/context/passkeyFlow.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts +0 -5
- package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts +0 -5
- package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts +0 -5
- package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/SavesCollectionsScreen.d.ts.map +0 -1
- package/lib/typescript/commonjs/webauthn/passkeyClient.d.ts +0 -20
- package/lib/typescript/commonjs/webauthn/passkeyClient.d.ts.map +0 -1
- package/lib/typescript/commonjs/webauthn/passkeyClient.native.d.ts +0 -15
- package/lib/typescript/commonjs/webauthn/passkeyClient.native.d.ts.map +0 -1
- package/lib/typescript/commonjs/webauthn/passkeyClient.web.d.ts +0 -36
- package/lib/typescript/commonjs/webauthn/passkeyClient.web.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/signIn/OxyCreateAccountPanel.d.ts +0 -24
- package/lib/typescript/module/ui/components/signIn/OxyCreateAccountPanel.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/signIn/OxyRecoverAccountPanel.d.ts +0 -20
- package/lib/typescript/module/ui/components/signIn/OxyRecoverAccountPanel.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/signIn/passkeyError.d.ts +0 -16
- package/lib/typescript/module/ui/components/signIn/passkeyError.d.ts.map +0 -1
- package/lib/typescript/module/ui/context/passkeyFlow.d.ts +0 -92
- package/lib/typescript/module/ui/context/passkeyFlow.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/FAQScreen.d.ts +0 -5
- package/lib/typescript/module/ui/screens/FAQScreen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts +0 -5
- package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts +0 -5
- package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/SavesCollectionsScreen.d.ts.map +0 -1
- package/lib/typescript/module/webauthn/passkeyClient.d.ts +0 -20
- package/lib/typescript/module/webauthn/passkeyClient.d.ts.map +0 -1
- package/lib/typescript/module/webauthn/passkeyClient.native.d.ts +0 -15
- package/lib/typescript/module/webauthn/passkeyClient.native.d.ts.map +0 -1
- package/lib/typescript/module/webauthn/passkeyClient.web.d.ts +0 -36
- package/lib/typescript/module/webauthn/passkeyClient.web.d.ts.map +0 -1
- package/src/ui/components/signIn/OxyCreateAccountPanel.tsx +0 -207
- package/src/ui/components/signIn/OxyRecoverAccountPanel.tsx +0 -154
- package/src/ui/components/signIn/passkeyError.ts +0 -44
- package/src/ui/context/__tests__/passkeyFlow.test.ts +0 -239
- package/src/ui/context/passkeyFlow.ts +0 -145
- package/src/ui/screens/FAQScreen.tsx +0 -200
- package/src/ui/screens/FeedbackScreen.tsx +0 -766
- package/src/ui/screens/PremiumSubscriptionScreen.tsx +0 -1103
- package/src/ui/screens/SavesCollectionsScreen.tsx +0 -167
- package/src/webauthn/passkeyClient.native.ts +0 -26
- package/src/webauthn/passkeyClient.ts +0 -31
- package/src/webauthn/passkeyClient.web.ts +0 -56
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The browser bridge, the app half (ADR 0029 D2): the window opens from the
|
|
3
|
+
* press, carries a PKCE-bound request, accepts only its own answer, joins, and
|
|
4
|
+
* always closes.
|
|
5
|
+
*/
|
|
6
|
+
import { createHash } from 'node:crypto';
|
|
7
|
+
import { OxyServices } from '@oxy.so/core';
|
|
8
|
+
import {
|
|
9
|
+
OXY_BRIDGE_CODE_MESSAGE_TYPE,
|
|
10
|
+
OXY_BRIDGE_ERROR_MESSAGE_TYPE,
|
|
11
|
+
OXY_BRIDGE_WINDOW_NAME,
|
|
12
|
+
openBridgeWindow,
|
|
13
|
+
readBridgeMessage,
|
|
14
|
+
resolveBridgeOrigin,
|
|
15
|
+
runBrowserBridge,
|
|
16
|
+
} from '../browserBridge';
|
|
17
|
+
import { trackDeviceCredential } from '../../session/deviceCredentialTracker';
|
|
18
|
+
import type { OAuthPopupHandle } from '../types';
|
|
19
|
+
|
|
20
|
+
const AUTH = 'https://auth.oxy.so';
|
|
21
|
+
const APP = 'https://mention.earth';
|
|
22
|
+
|
|
23
|
+
interface ControllablePopup extends OAuthPopupHandle {
|
|
24
|
+
close: jest.Mock;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function fakePopup(): ControllablePopup {
|
|
28
|
+
let closed = false;
|
|
29
|
+
return {
|
|
30
|
+
get closed() {
|
|
31
|
+
return closed;
|
|
32
|
+
},
|
|
33
|
+
close: jest.fn(() => {
|
|
34
|
+
closed = true;
|
|
35
|
+
}),
|
|
36
|
+
location: { href: '' },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function dispatchMessage(init: { data: unknown; origin: string; source: unknown }): void {
|
|
41
|
+
const event = new Event('message');
|
|
42
|
+
Object.assign(event, init);
|
|
43
|
+
window.dispatchEvent(event);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Wait until the popup has been navigated to the bridge, and read its query. */
|
|
47
|
+
async function navigated(popup: OAuthPopupHandle): Promise<URL> {
|
|
48
|
+
for (let i = 0; i < 100 && !popup.location.href; i += 1) {
|
|
49
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
50
|
+
}
|
|
51
|
+
return new URL(popup.location.href);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
afterEach(() => jest.restoreAllMocks());
|
|
55
|
+
|
|
56
|
+
describe('resolveBridgeOrigin', () => {
|
|
57
|
+
it('is auth.oxy.so by default and follows an authorize override', () => {
|
|
58
|
+
expect(resolveBridgeOrigin()).toBe(AUTH);
|
|
59
|
+
expect(resolveBridgeOrigin('http://localhost:8105/authorize')).toBe('http://localhost:8105');
|
|
60
|
+
expect(resolveBridgeOrigin('not a url')).toBeNull();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
describe('openBridgeWindow', () => {
|
|
65
|
+
it('opens an empty, tiny, separately named window', () => {
|
|
66
|
+
const handle = fakePopup();
|
|
67
|
+
const open = jest.spyOn(window, 'open').mockReturnValue(handle as unknown as Window);
|
|
68
|
+
expect(openBridgeWindow()).toBe(handle);
|
|
69
|
+
expect(open).toHaveBeenCalledWith('', OXY_BRIDGE_WINDOW_NAME, expect.stringContaining('width=1,height=1'));
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('is null when blocked or when open throws', () => {
|
|
73
|
+
jest.spyOn(window, 'open').mockReturnValue(null);
|
|
74
|
+
expect(openBridgeWindow()).toBeNull();
|
|
75
|
+
jest.spyOn(window, 'open').mockImplementation(() => {
|
|
76
|
+
throw new Error('blocked');
|
|
77
|
+
});
|
|
78
|
+
expect(openBridgeWindow()).toBeNull();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('readBridgeMessage', () => {
|
|
83
|
+
const popup = fakePopup();
|
|
84
|
+
const context = { expectedOrigin: AUTH, expectedState: 'st', popup };
|
|
85
|
+
const code = { type: OXY_BRIDGE_CODE_MESSAGE_TYPE, code: 'c1', state: 'st' };
|
|
86
|
+
|
|
87
|
+
it('accepts only its own window, origin and state', () => {
|
|
88
|
+
expect(readBridgeMessage({ origin: AUTH, source: popup as never, data: code }, context)).toEqual({ kind: 'code', code: 'c1' });
|
|
89
|
+
expect(readBridgeMessage({ origin: 'https://evil.example', source: popup as never, data: code }, context).kind).toBe('ignore');
|
|
90
|
+
expect(readBridgeMessage({ origin: AUTH, source: fakePopup() as never, data: code }, context).kind).toBe('ignore');
|
|
91
|
+
expect(readBridgeMessage({ origin: AUTH, source: popup as never, data: { ...code, state: 'other' } }, context).kind).toBe('ignore');
|
|
92
|
+
expect(readBridgeMessage({ origin: AUTH, source: popup as never, data: 'nope' }, context).kind).toBe('ignore');
|
|
93
|
+
expect(
|
|
94
|
+
readBridgeMessage(
|
|
95
|
+
{ origin: AUTH, source: popup as never, data: { type: OXY_BRIDGE_ERROR_MESSAGE_TYPE, error: 'x', state: 'st' } },
|
|
96
|
+
context,
|
|
97
|
+
),
|
|
98
|
+
).toEqual({ kind: 'error', error: 'x' });
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
describe('runBrowserBridge', () => {
|
|
103
|
+
it('navigates with a PKCE-bound request, joins with the verifier, and closes', async () => {
|
|
104
|
+
const oxy = new OxyServices({ baseURL: 'http://test.invalid' });
|
|
105
|
+
const join = jest.spyOn(oxy.devices, 'joinBrowser').mockResolvedValue({ deviceId: 'dev-1', deviceSecret: 'app-secret' });
|
|
106
|
+
const popup = fakePopup();
|
|
107
|
+
|
|
108
|
+
const result = runBrowserBridge({ popup, bridgeOrigin: AUTH, oxyServices: oxy, clientId: 'oxy_dk_1', redirectUri: APP });
|
|
109
|
+
const url = await navigated(popup);
|
|
110
|
+
expect(url.origin + url.pathname).toBe(`${AUTH}/bridge`);
|
|
111
|
+
expect(url.searchParams.get('client_id')).toBe('oxy_dk_1');
|
|
112
|
+
expect(url.searchParams.get('redirect_uri')).toBe(APP);
|
|
113
|
+
expect(url.searchParams.get('code_challenge_method')).toBe('S256');
|
|
114
|
+
const state = url.searchParams.get('state');
|
|
115
|
+
const challenge = url.searchParams.get('code_challenge');
|
|
116
|
+
|
|
117
|
+
dispatchMessage({ origin: 'https://evil.example', source: popup, data: { type: OXY_BRIDGE_CODE_MESSAGE_TYPE, code: 'forged', state } });
|
|
118
|
+
dispatchMessage({ origin: AUTH, source: popup, data: { type: OXY_BRIDGE_CODE_MESSAGE_TYPE, code: 'code-1', state } });
|
|
119
|
+
|
|
120
|
+
expect(await result).toEqual({ ok: true, deviceId: 'dev-1', deviceSecret: 'app-secret' });
|
|
121
|
+
const [request] = join.mock.calls[0];
|
|
122
|
+
expect(request.code).toBe('code-1');
|
|
123
|
+
expect(request.clientId).toBe('oxy_dk_1');
|
|
124
|
+
expect(request.redirectUri).toBe(APP);
|
|
125
|
+
// The verifier is the one whose S256 digest was sent as the challenge.
|
|
126
|
+
expect(createHash('sha256').update(request.codeVerifier).digest('base64url')).toBe(challenge);
|
|
127
|
+
expect(popup.close).toHaveBeenCalled();
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('reports a bridge error, a closed window and a timeout, closing the window each time', async () => {
|
|
131
|
+
const oxy = new OxyServices({ baseURL: 'http://test.invalid' });
|
|
132
|
+
const join = jest.spyOn(oxy.devices, 'joinBrowser');
|
|
133
|
+
|
|
134
|
+
let popup = fakePopup();
|
|
135
|
+
let result = runBrowserBridge({ popup, bridgeOrigin: AUTH, oxyServices: oxy, clientId: 'c', redirectUri: APP });
|
|
136
|
+
let state = (await navigated(popup)).searchParams.get('state');
|
|
137
|
+
dispatchMessage({ origin: AUTH, source: popup, data: { type: OXY_BRIDGE_ERROR_MESSAGE_TYPE, error: 'invalid_client', state } });
|
|
138
|
+
expect(await result).toEqual({ ok: false, reason: 'bridge-error' });
|
|
139
|
+
expect(popup.close).toHaveBeenCalled();
|
|
140
|
+
|
|
141
|
+
popup = fakePopup();
|
|
142
|
+
result = runBrowserBridge({ popup, bridgeOrigin: AUTH, oxyServices: oxy, clientId: 'c', redirectUri: APP });
|
|
143
|
+
await navigated(popup);
|
|
144
|
+
popup.close();
|
|
145
|
+
expect(await result).toEqual({ ok: false, reason: 'closed' });
|
|
146
|
+
|
|
147
|
+
popup = fakePopup();
|
|
148
|
+
result = runBrowserBridge({ popup, bridgeOrigin: AUTH, oxyServices: oxy, clientId: 'c', redirectUri: APP, timeoutMs: 50 });
|
|
149
|
+
state = (await navigated(popup)).searchParams.get('state');
|
|
150
|
+
expect(state).toBeTruthy();
|
|
151
|
+
expect(await result).toEqual({ ok: false, reason: 'timed-out' });
|
|
152
|
+
expect(popup.close).toHaveBeenCalled();
|
|
153
|
+
expect(join).not.toHaveBeenCalled();
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('a failed join is a failed bridge, never a thrown error', async () => {
|
|
157
|
+
const oxy = new OxyServices({ baseURL: 'http://test.invalid' });
|
|
158
|
+
jest.spyOn(oxy.devices, 'joinBrowser').mockRejectedValue(new Error('invalid_grant'));
|
|
159
|
+
const popup = fakePopup();
|
|
160
|
+
const result = runBrowserBridge({ popup, bridgeOrigin: AUTH, oxyServices: oxy, clientId: 'c', redirectUri: APP });
|
|
161
|
+
const state = (await navigated(popup)).searchParams.get('state');
|
|
162
|
+
dispatchMessage({ origin: AUTH, source: popup, data: { type: OXY_BRIDGE_CODE_MESSAGE_TYPE, code: 'code-1', state } });
|
|
163
|
+
expect(await result).toEqual({ ok: false, reason: 'join-failed' });
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
describe('trackDeviceCredential', () => {
|
|
168
|
+
it('knows the held credential synchronously once the store has been read', async () => {
|
|
169
|
+
let stored: { sessionId: string; userId: string; deviceId?: string; deviceSecret?: string } | null = null;
|
|
170
|
+
const store = trackDeviceCredential({
|
|
171
|
+
load: async () => stored,
|
|
172
|
+
save: async (state) => {
|
|
173
|
+
stored = state;
|
|
174
|
+
return true;
|
|
175
|
+
},
|
|
176
|
+
clear: async () => {
|
|
177
|
+
stored = null;
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
expect(store.heldDeviceCredential()).toBeUndefined();
|
|
181
|
+
await store.load();
|
|
182
|
+
expect(store.heldDeviceCredential()).toBeNull();
|
|
183
|
+
await store.save({ sessionId: '', userId: '', deviceId: 'd', deviceSecret: 's' });
|
|
184
|
+
expect(store.heldDeviceCredential()).toEqual({ deviceId: 'd', deviceSecret: 's' });
|
|
185
|
+
await store.clear();
|
|
186
|
+
expect(store.heldDeviceCredential()).toBeNull();
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
describe('hasPersistedSessionCredential', () => {
|
|
191
|
+
it('a credential without an account cannot bring a lost session back', async () => {
|
|
192
|
+
const { hasPersistedSessionCredential } = await import('../../utils/deviceCredential');
|
|
193
|
+
const store = (state: unknown) => ({ load: async () => state, save: async () => true, clear: async () => undefined }) as never;
|
|
194
|
+
expect(await hasPersistedSessionCredential(store({ sessionId: 's', userId: 'u', deviceId: 'd', deviceSecret: 'x' }))).toBe(true);
|
|
195
|
+
expect(await hasPersistedSessionCredential(store({ sessionId: '', userId: '', deviceId: 'd', deviceSecret: 'x' }))).toBe(false);
|
|
196
|
+
expect(await hasPersistedSessionCredential(store(null))).toBe(false);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
@@ -15,7 +15,7 @@ const SESSION = {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
function makeOxyServices(exchange: jest.Mock): OxyServices {
|
|
18
|
-
return {
|
|
18
|
+
return { auth: { oauth: { exchangeCode: exchange } } } as unknown as OxyServices;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
describe('completeOAuthCode', () => {
|
|
@@ -44,16 +44,16 @@ function makeContext(
|
|
|
44
44
|
platform,
|
|
45
45
|
mode: "popup",
|
|
46
46
|
oxyServices: {
|
|
47
|
-
getPublicApplication,
|
|
48
|
-
exchangeOAuthCode,
|
|
47
|
+
apps: { getPublic: getPublicApplication },
|
|
48
|
+
auth: { oauth: { exchangeCode: exchangeOAuthCode } },
|
|
49
49
|
} as unknown as OxyServices,
|
|
50
50
|
clientId: CLIENT_ID,
|
|
51
51
|
identityBound: false,
|
|
52
52
|
expectedUserId: USER_ID,
|
|
53
53
|
commitSession,
|
|
54
54
|
...overrides,
|
|
55
|
-
getPublicApplication,
|
|
56
|
-
exchangeOAuthCode,
|
|
55
|
+
apps: { getPublic: getPublicApplication },
|
|
56
|
+
auth: { oauth: { exchangeCode: exchangeOAuthCode } },
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -148,7 +148,7 @@ describe("requestOAuthConsent", () => {
|
|
|
148
148
|
expect(authorizeUrl?.searchParams.get("code_challenge_method")).toBe(
|
|
149
149
|
"S256",
|
|
150
150
|
);
|
|
151
|
-
const exchange = context.
|
|
151
|
+
const exchange = context.auth.oauth.exchangeCode.mock.calls[0][0];
|
|
152
152
|
await expect(computeCodeChallenge(exchange.codeVerifier)).resolves.toBe(
|
|
153
153
|
authorizeUrl?.searchParams.get("code_challenge"),
|
|
154
154
|
);
|
|
@@ -167,7 +167,7 @@ describe("requestOAuthConsent", () => {
|
|
|
167
167
|
scopes: EXACT_SCOPES,
|
|
168
168
|
}),
|
|
169
169
|
).resolves.toEqual({ status: "failed", reason: "native-callback-invalid" });
|
|
170
|
-
expect(wrongTarget.
|
|
170
|
+
expect(wrongTarget.auth.oauth.exchangeCode).not.toHaveBeenCalled();
|
|
171
171
|
|
|
172
172
|
const wrongState = makeContext("native");
|
|
173
173
|
openNative.mockResolvedValueOnce({
|
|
@@ -179,7 +179,7 @@ describe("requestOAuthConsent", () => {
|
|
|
179
179
|
scopes: EXACT_SCOPES,
|
|
180
180
|
}),
|
|
181
181
|
).resolves.toEqual({ status: "failed", reason: "state-mismatch" });
|
|
182
|
-
expect(wrongState.
|
|
182
|
+
expect(wrongState.auth.oauth.exchangeCode).not.toHaveBeenCalled();
|
|
183
183
|
expect(wrongState.commitSession).not.toHaveBeenCalled();
|
|
184
184
|
});
|
|
185
185
|
|
|
@@ -199,7 +199,7 @@ describe("requestOAuthConsent", () => {
|
|
|
199
199
|
scopes,
|
|
200
200
|
}),
|
|
201
201
|
).resolves.toEqual({ status: "failed", reason: "invalid-scopes" });
|
|
202
|
-
expect(context.
|
|
202
|
+
expect(context.apps.getPublic).not.toHaveBeenCalled();
|
|
203
203
|
expect(openNative).not.toHaveBeenCalled();
|
|
204
204
|
},
|
|
205
205
|
);
|
|
@@ -213,7 +213,7 @@ describe("requestOAuthConsent", () => {
|
|
|
213
213
|
}),
|
|
214
214
|
).resolves.toEqual({ status: "failed", reason: "scope-not-configured" });
|
|
215
215
|
expect(openNative).not.toHaveBeenCalled();
|
|
216
|
-
expect(context.
|
|
216
|
+
expect(context.auth.oauth.exchangeCode).not.toHaveBeenCalled();
|
|
217
217
|
});
|
|
218
218
|
|
|
219
219
|
it.each([
|
|
@@ -228,14 +228,14 @@ describe("requestOAuthConsent", () => {
|
|
|
228
228
|
await expect(
|
|
229
229
|
requestOAuthConsent(context, { redirectUri, scopes: EXACT_SCOPES }),
|
|
230
230
|
).resolves.toEqual({ status: "failed", reason: "invalid-redirect-uri" });
|
|
231
|
-
expect(context.
|
|
231
|
+
expect(context.apps.getPublic).not.toHaveBeenCalled();
|
|
232
232
|
expect(openNative).not.toHaveBeenCalled();
|
|
233
233
|
},
|
|
234
234
|
);
|
|
235
235
|
|
|
236
236
|
it("does not commit or report consent when OAuth returns another user", async () => {
|
|
237
237
|
const context = makeContext("native");
|
|
238
|
-
context.
|
|
238
|
+
context.auth.oauth.exchangeCode.mockResolvedValue({
|
|
239
239
|
sessionId: "other-session",
|
|
240
240
|
accessToken: "other-token",
|
|
241
241
|
user: { id: "another-user" },
|
|
@@ -42,12 +42,12 @@ function makeContext(mode: 'popup' | 'redirect'): WebOAuthTransportContext & {
|
|
|
42
42
|
const exchangeOAuthCode = jest.fn();
|
|
43
43
|
return {
|
|
44
44
|
mode,
|
|
45
|
-
oxyServices: { exchangeOAuthCode } as unknown as OxyServices,
|
|
45
|
+
oxyServices: { auth: { oauth: { exchangeCode: exchangeOAuthCode } } } as unknown as OxyServices,
|
|
46
46
|
clientId: CLIENT_ID,
|
|
47
47
|
authorizeBaseUrl: `${IDP_ORIGIN}/authorize`,
|
|
48
48
|
identityBound: false,
|
|
49
49
|
commitSession: jest.fn().mockResolvedValue(undefined),
|
|
50
|
-
exchangeOAuthCode,
|
|
50
|
+
auth: { oauth: { exchangeCode: exchangeOAuthCode } },
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -97,12 +97,12 @@ describe('shared OAuth completion path', () => {
|
|
|
97
97
|
// Nothing was persisted, so there is nothing for this lane to clean up.
|
|
98
98
|
expect(input.cleanup).toBeUndefined();
|
|
99
99
|
// The transport never exchanges the code itself.
|
|
100
|
-
expect(context.
|
|
100
|
+
expect(context.auth.oauth.exchangeCode).not.toHaveBeenCalled();
|
|
101
101
|
});
|
|
102
102
|
|
|
103
103
|
it('the redirect return leg completes through completeOAuthCode with the persisted handshake', async () => {
|
|
104
104
|
const exchangeOAuthCode = jest.fn();
|
|
105
|
-
const oxyServices = { exchangeOAuthCode } as unknown as OxyServices;
|
|
105
|
+
const oxyServices = { auth: { oauth: { exchangeCode: exchangeOAuthCode } } } as unknown as OxyServices;
|
|
106
106
|
sessionStorage.setItem(OXY_OAUTH_STATE_STORAGE_KEY, 'state-from-storage');
|
|
107
107
|
sessionStorage.setItem(OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY, 'verifier-from-storage');
|
|
108
108
|
window.history.replaceState({}, '', '/feed?code=code-2&state=state-from-storage');
|
|
@@ -139,7 +139,7 @@ describe('shared OAuth completion path', () => {
|
|
|
139
139
|
|
|
140
140
|
await expect(
|
|
141
141
|
tryCompleteOAuthReturn({
|
|
142
|
-
oxyServices: {
|
|
142
|
+
oxyServices: { auth: { oauth: { exchangeCode: jest.fn() } } } as unknown as OxyServices,
|
|
143
143
|
clientId: CLIENT_ID,
|
|
144
144
|
commitSession: jest.fn().mockResolvedValue(undefined),
|
|
145
145
|
}),
|
|
@@ -151,7 +151,7 @@ describe('shared OAuth completion path', () => {
|
|
|
151
151
|
|
|
152
152
|
await expect(
|
|
153
153
|
tryCompleteOAuthReturn({
|
|
154
|
-
oxyServices: {
|
|
154
|
+
oxyServices: { auth: { oauth: { exchangeCode: jest.fn() } } } as unknown as OxyServices,
|
|
155
155
|
clientId: null,
|
|
156
156
|
commitSession: jest.fn().mockResolvedValue(undefined),
|
|
157
157
|
}),
|
|
@@ -164,7 +164,7 @@ describe('shared OAuth completion path', () => {
|
|
|
164
164
|
|
|
165
165
|
await expect(
|
|
166
166
|
tryCompleteOAuthReturn({
|
|
167
|
-
oxyServices: {
|
|
167
|
+
oxyServices: { auth: { oauth: { exchangeCode: jest.fn() } } } as unknown as OxyServices,
|
|
168
168
|
clientId: CLIENT_ID,
|
|
169
169
|
commitSession: jest.fn().mockResolvedValue(undefined),
|
|
170
170
|
}),
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The browser bridge, the app half (ADR 0029 D2).
|
|
3
|
+
*
|
|
4
|
+
* Different domains share no storage, so the browser's ONE Oxy session lives on
|
|
5
|
+
* auth.oxy.so. The first time a person presses sign-in in an Oxy web app that
|
|
6
|
+
* holds no device credential, the app opens `auth.oxy.so/bridge` from that press:
|
|
7
|
+
* a page with no UI that proves (or registers) auth.oxy.so's device, posts this
|
|
8
|
+
* app a one-use code bound to its client id, its exact redirect URI and a PKCE
|
|
9
|
+
* challenge, and closes. The app redeems the code with the verifier only it
|
|
10
|
+
* holds (`POST /session/device/join`) and from then on holds its own credential
|
|
11
|
+
* on the shared device — it never opens the bridge again.
|
|
12
|
+
*
|
|
13
|
+
* Three browser realities, the same ones as the OAuth popup (`oauthPopup.ts`):
|
|
14
|
+
* the window must be opened SYNCHRONOUSLY from the press (gesture attribution),
|
|
15
|
+
* so it is opened empty and navigated once the PKCE pair exists; a cross-origin
|
|
16
|
+
* window fires nothing when it closes, so `closed` is polled; and its result
|
|
17
|
+
* arrives only as a `postMessage`, accepted from the auth origin and from that
|
|
18
|
+
* exact window, carrying this attempt's `state`.
|
|
19
|
+
*
|
|
20
|
+
* Nothing here is required for signing in: a blocked window, a timeout or any
|
|
21
|
+
* failure only means this app signs in on a device of its own, as before.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { AUTH_WEB_ORIGIN, generateOAuthState, generatePkcePair, logger } from '@oxy.so/core';
|
|
25
|
+
import type { OxyServices } from '@oxy.so/core';
|
|
26
|
+
import type { OAuthPopupHandle } from './types';
|
|
27
|
+
|
|
28
|
+
/** `postMessage` discriminator for a join code from the bridge. */
|
|
29
|
+
export const OXY_BRIDGE_CODE_MESSAGE_TYPE = 'oxy:bridge:code';
|
|
30
|
+
/** `postMessage` discriminator for a bridge that could not produce a code. */
|
|
31
|
+
export const OXY_BRIDGE_ERROR_MESSAGE_TYPE = 'oxy:bridge:error';
|
|
32
|
+
|
|
33
|
+
/** Its own name, so it never reuses (and navigates away) the sign-in popup. */
|
|
34
|
+
export const OXY_BRIDGE_WINDOW_NAME = 'oxy-bridge';
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* How long the bridge may take (ms). It normally answers in a few hundred ms; the
|
|
38
|
+
* ceiling only stops a wedged window from holding the attempt open.
|
|
39
|
+
*/
|
|
40
|
+
export const DEFAULT_BRIDGE_TIMEOUT_MS = 15_000;
|
|
41
|
+
|
|
42
|
+
const CLOSE_POLL_INTERVAL_MS = 250;
|
|
43
|
+
const CLOSE_GRACE_MS = 300;
|
|
44
|
+
|
|
45
|
+
/** The auth origin the bridge lives on: the authorize override's, else auth.oxy.so. */
|
|
46
|
+
export function resolveBridgeOrigin(authorizeBaseUrl?: string): string | null {
|
|
47
|
+
if (!authorizeBaseUrl) return AUTH_WEB_ORIGIN;
|
|
48
|
+
try {
|
|
49
|
+
const origin = new URL(authorizeBaseUrl).origin;
|
|
50
|
+
return origin.startsWith('http') ? origin : null;
|
|
51
|
+
} catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
interface BridgeHost {
|
|
57
|
+
open?: (url: string, target: string, features: string) => OAuthPopupHandle | null;
|
|
58
|
+
addEventListener?: (type: 'message', listener: (event: MessageEvent) => void) => void;
|
|
59
|
+
removeEventListener?: (type: 'message', listener: (event: MessageEvent) => void) => void;
|
|
60
|
+
screenX?: number;
|
|
61
|
+
screenY?: number;
|
|
62
|
+
outerWidth?: number;
|
|
63
|
+
outerHeight?: number;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function bridgeHost(): BridgeHost | null {
|
|
67
|
+
const win = (globalThis as { window?: BridgeHost }).window;
|
|
68
|
+
return win ?? null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Open the bridge window, EMPTY, as small as the browser allows and centred over
|
|
73
|
+
* the app. MUST be called synchronously from the press. Returns `null` when the
|
|
74
|
+
* browser blocked it or there is no DOM — never throws.
|
|
75
|
+
*/
|
|
76
|
+
export function openBridgeWindow(): OAuthPopupHandle | null {
|
|
77
|
+
const win = bridgeHost();
|
|
78
|
+
if (!win || typeof win.open !== 'function') return null;
|
|
79
|
+
const left = Math.round((win.screenX ?? 0) + (win.outerWidth ?? 0) / 2);
|
|
80
|
+
const top = Math.round((win.screenY ?? 0) + (win.outerHeight ?? 0) / 2);
|
|
81
|
+
const features = `popup=yes,width=1,height=1,left=${left},top=${top},menubar=no,toolbar=no,location=no,status=no`;
|
|
82
|
+
try {
|
|
83
|
+
return win.open('', OXY_BRIDGE_WINDOW_NAME, features) ?? null;
|
|
84
|
+
} catch (error) {
|
|
85
|
+
logger.debug('Could not open the browser bridge window', { component: 'browserBridge' }, error);
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function closeBridgeWindow(popup: OAuthPopupHandle): void {
|
|
91
|
+
try {
|
|
92
|
+
if (!popup.closed) popup.close();
|
|
93
|
+
} catch {
|
|
94
|
+
// Already gone.
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** The fields of a `message` event the verdict reads. */
|
|
99
|
+
interface BridgeMessageEvent {
|
|
100
|
+
origin: string;
|
|
101
|
+
source: unknown;
|
|
102
|
+
data: unknown;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Verdict for one `message` event. */
|
|
106
|
+
export type BridgeMessageVerdict =
|
|
107
|
+
| { kind: 'ignore' }
|
|
108
|
+
| { kind: 'code'; code: string }
|
|
109
|
+
| { kind: 'error'; error: string };
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Classify one `message` event. Accepted only from the bridge origin AND the
|
|
113
|
+
* exact window this attempt opened, in one of the two shapes, with this
|
|
114
|
+
* attempt's `state`; everything else is page noise and ignored.
|
|
115
|
+
*/
|
|
116
|
+
export function readBridgeMessage(
|
|
117
|
+
event: BridgeMessageEvent,
|
|
118
|
+
context: { expectedOrigin: string; expectedState: string; popup: unknown },
|
|
119
|
+
): BridgeMessageVerdict {
|
|
120
|
+
if (event.origin !== context.expectedOrigin) return { kind: 'ignore' };
|
|
121
|
+
if (event.source !== context.popup) return { kind: 'ignore' };
|
|
122
|
+
const data = event.data as Record<string, unknown> | null;
|
|
123
|
+
if (typeof data !== 'object' || data === null) return { kind: 'ignore' };
|
|
124
|
+
if (data.state !== context.expectedState) return { kind: 'ignore' };
|
|
125
|
+
if (data.type === OXY_BRIDGE_CODE_MESSAGE_TYPE && typeof data.code === 'string' && data.code.length > 0) {
|
|
126
|
+
return { kind: 'code', code: data.code };
|
|
127
|
+
}
|
|
128
|
+
if (data.type === OXY_BRIDGE_ERROR_MESSAGE_TYPE && typeof data.error === 'string') {
|
|
129
|
+
return { kind: 'error', error: data.error };
|
|
130
|
+
}
|
|
131
|
+
return { kind: 'ignore' };
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export interface RunBrowserBridgeOptions {
|
|
135
|
+
/** The window {@link openBridgeWindow} returned from the press. */
|
|
136
|
+
popup: OAuthPopupHandle;
|
|
137
|
+
/** Where the bridge lives ({@link resolveBridgeOrigin}). */
|
|
138
|
+
bridgeOrigin: string;
|
|
139
|
+
oxyServices: OxyServices;
|
|
140
|
+
/** This app's registered client id. */
|
|
141
|
+
clientId: string;
|
|
142
|
+
/** This app's EXACT registered redirect URI; its origin is where the code is posted. */
|
|
143
|
+
redirectUri: string;
|
|
144
|
+
/** @default DEFAULT_BRIDGE_TIMEOUT_MS */
|
|
145
|
+
timeoutMs?: number;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export type BrowserBridgeResult =
|
|
149
|
+
| { ok: true; deviceId: string; deviceSecret: string }
|
|
150
|
+
| { ok: false; reason: 'closed' | 'timed-out' | 'bridge-error' | 'join-failed' | 'no-browser' };
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Drive an opened bridge window to a device credential for this app. Settles
|
|
154
|
+
* exactly once, closes the window whatever the outcome, and never rejects.
|
|
155
|
+
*/
|
|
156
|
+
export async function runBrowserBridge(options: RunBrowserBridgeOptions): Promise<BrowserBridgeResult> {
|
|
157
|
+
const { popup, bridgeOrigin, oxyServices, clientId, redirectUri } = options;
|
|
158
|
+
const host = bridgeHost();
|
|
159
|
+
if (!host || typeof host.addEventListener !== 'function' || typeof host.removeEventListener !== 'function') {
|
|
160
|
+
closeBridgeWindow(popup);
|
|
161
|
+
return { ok: false, reason: 'no-browser' };
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const [pkce, state] = await Promise.all([generatePkcePair(), generateOAuthState()]);
|
|
165
|
+
const url = new URL('/bridge', bridgeOrigin);
|
|
166
|
+
url.searchParams.set('client_id', clientId);
|
|
167
|
+
url.searchParams.set('redirect_uri', redirectUri);
|
|
168
|
+
url.searchParams.set('state', state);
|
|
169
|
+
url.searchParams.set('code_challenge', pkce.codeChallenge);
|
|
170
|
+
url.searchParams.set('code_challenge_method', 'S256');
|
|
171
|
+
try {
|
|
172
|
+
popup.location.href = url.toString();
|
|
173
|
+
} catch {
|
|
174
|
+
return { ok: false, reason: 'closed' };
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const verdict = await awaitBridgeMessage(host, {
|
|
178
|
+
popup,
|
|
179
|
+
expectedOrigin: bridgeOrigin,
|
|
180
|
+
expectedState: state,
|
|
181
|
+
timeoutMs: options.timeoutMs ?? DEFAULT_BRIDGE_TIMEOUT_MS,
|
|
182
|
+
});
|
|
183
|
+
if (verdict.kind !== 'code') return { ok: false, reason: verdict.kind };
|
|
184
|
+
|
|
185
|
+
try {
|
|
186
|
+
const joined = await oxyServices.devices.joinBrowser({
|
|
187
|
+
code: verdict.code,
|
|
188
|
+
codeVerifier: pkce.codeVerifier,
|
|
189
|
+
clientId,
|
|
190
|
+
redirectUri,
|
|
191
|
+
});
|
|
192
|
+
return { ok: true, deviceId: joined.deviceId, deviceSecret: joined.deviceSecret };
|
|
193
|
+
} catch (error) {
|
|
194
|
+
logger.warn('Joining the browser device failed', { component: 'browserBridge' }, error);
|
|
195
|
+
return { ok: false, reason: 'join-failed' };
|
|
196
|
+
}
|
|
197
|
+
} catch (error) {
|
|
198
|
+
logger.warn('The browser bridge failed', { component: 'browserBridge' }, error);
|
|
199
|
+
return { ok: false, reason: 'bridge-error' };
|
|
200
|
+
} finally {
|
|
201
|
+
closeBridgeWindow(popup);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function awaitBridgeMessage(
|
|
206
|
+
host: BridgeHost,
|
|
207
|
+
context: { popup: OAuthPopupHandle; expectedOrigin: string; expectedState: string; timeoutMs: number },
|
|
208
|
+
): Promise<{ kind: 'code'; code: string } | { kind: 'closed' | 'timed-out' | 'bridge-error' }> {
|
|
209
|
+
return new Promise((resolve) => {
|
|
210
|
+
let settled = false;
|
|
211
|
+
let closeGrace: ReturnType<typeof setTimeout> | null = null;
|
|
212
|
+
const onMessage = (event: MessageEvent): void => {
|
|
213
|
+
const verdict = readBridgeMessage(event, context);
|
|
214
|
+
if (verdict.kind === 'code') settle({ kind: 'code', code: verdict.code });
|
|
215
|
+
else if (verdict.kind === 'error') settle({ kind: 'bridge-error' });
|
|
216
|
+
};
|
|
217
|
+
const timeout = setTimeout(() => settle({ kind: 'timed-out' }), context.timeoutMs);
|
|
218
|
+
const poll = setInterval(() => {
|
|
219
|
+
if (!context.popup.closed || closeGrace !== null) return;
|
|
220
|
+
// The bridge posts and THEN closes; let an already-queued message win.
|
|
221
|
+
closeGrace = setTimeout(() => settle({ kind: 'closed' }), CLOSE_GRACE_MS);
|
|
222
|
+
}, CLOSE_POLL_INTERVAL_MS);
|
|
223
|
+
function settle(outcome: { kind: 'code'; code: string } | { kind: 'closed' | 'timed-out' | 'bridge-error' }): void {
|
|
224
|
+
if (settled) return;
|
|
225
|
+
settled = true;
|
|
226
|
+
host.removeEventListener?.('message', onMessage);
|
|
227
|
+
clearTimeout(timeout);
|
|
228
|
+
clearInterval(poll);
|
|
229
|
+
if (closeGrace !== null) clearTimeout(closeGrace);
|
|
230
|
+
resolve(outcome);
|
|
231
|
+
}
|
|
232
|
+
host.addEventListener?.('message', onMessage);
|
|
233
|
+
});
|
|
234
|
+
}
|
|
@@ -68,7 +68,7 @@ export async function completeOAuthCode(
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
try {
|
|
71
|
-
const result = await input.oxyServices.
|
|
71
|
+
const result = await input.oxyServices.auth.oauth.exchangeCode({
|
|
72
72
|
code: input.code,
|
|
73
73
|
clientId: input.clientId,
|
|
74
74
|
redirectUri: input.redirectUri,
|
|
@@ -165,7 +165,7 @@ export async function requestOAuthConsent(
|
|
|
165
165
|
|
|
166
166
|
let application: PublicApplication;
|
|
167
167
|
try {
|
|
168
|
-
application = await context.oxyServices.
|
|
168
|
+
application = await context.oxyServices.apps.getPublic(
|
|
169
169
|
context.clientId,
|
|
170
170
|
);
|
|
171
171
|
} catch {
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
import type { DeviceDirectory, DeviceSessionState } from '@oxy.so/contracts';
|
|
2
|
-
import type { ClientSession,
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
activeUserOf,
|
|
7
|
-
deviceStateToClientSessions,
|
|
8
|
-
mergeSessions as mergeSessionLists,
|
|
9
|
-
normalizeAndSortSessions,
|
|
10
|
-
normalizeUserIdentity,
|
|
11
|
-
resolveActiveContext,
|
|
12
|
-
sessionsArraysEqual,
|
|
13
|
-
} from '@oxy.so/core';
|
|
2
|
+
import type { ClientSession, User } from '@oxy.so/core';
|
|
3
|
+
import type { DeviceContext } from '@oxy.so/core/session';
|
|
4
|
+
import { accountIdsOf, activeSessionIdOf, activeUserOf, deviceStateToClientSessions, resolveActiveContext } from '@oxy.so/core/session';
|
|
5
|
+
import { mergeSessions as mergeSessionLists, normalizeAndSortSessions, normalizeUserIdentity, sessionsArraysEqual } from '@oxy.so/core';
|
|
14
6
|
import type { IdentitySessionBinding } from '../session/identityBinding';
|
|
15
7
|
import type { OxyRuntimeSnapshot, OxyRuntimeStatus, OxyTokenStatus } from './types';
|
|
16
8
|
|
|
@@ -36,8 +28,8 @@ export interface SubjectTransition {
|
|
|
36
28
|
* pretends to implement.
|
|
37
29
|
*/
|
|
38
30
|
export interface RuntimeClient {
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
session: { readonly accessToken: string | null };
|
|
32
|
+
users: { getMany(ids: string[]): Promise<User[]> };
|
|
41
33
|
}
|
|
42
34
|
|
|
43
35
|
export interface RuntimeSessionClient {
|
|
@@ -257,7 +249,7 @@ export function createOxyRuntime(config: OxyRuntimeConfig): OxyRuntime {
|
|
|
257
249
|
error: null,
|
|
258
250
|
storageReady: false,
|
|
259
251
|
tokenReady: true,
|
|
260
|
-
hasAccessToken: Boolean(oxyServices.
|
|
252
|
+
hasAccessToken: Boolean(oxyServices.session.accessToken),
|
|
261
253
|
authResolved: false,
|
|
262
254
|
switching: false,
|
|
263
255
|
};
|
|
@@ -423,7 +415,7 @@ export function createOxyRuntime(config: OxyRuntimeConfig): OxyRuntime {
|
|
|
423
415
|
const ids = accountIdsOf(state);
|
|
424
416
|
let users: User[] = [];
|
|
425
417
|
try {
|
|
426
|
-
users = ids.length > 0 ? await oxyServices.
|
|
418
|
+
users = ids.length > 0 ? await oxyServices.users.getMany(ids) : [];
|
|
427
419
|
} catch (fetchError) {
|
|
428
420
|
logger('Failed to resolve account profiles during the device projection', fetchError);
|
|
429
421
|
return;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createContext, useContext } from 'react';
|
|
2
2
|
import type { DeviceDirectory } from '@oxy.so/contracts';
|
|
3
|
-
import type { DeviceContext
|
|
3
|
+
import type { DeviceContext } from '@oxy.so/core/session';
|
|
4
|
+
import type { User } from '@oxy.so/core';
|
|
4
5
|
import type { OxyRuntime } from './createOxyRuntime';
|
|
5
6
|
import type { OxyRuntimeStatus } from './types';
|
|
6
7
|
import { useRuntimeSelector, useRuntimeSnapshot } from './useRuntimeSnapshot';
|
package/src/ui/runtime/types.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DeviceDirectory, DeviceSessionState } from '@oxy.so/contracts';
|
|
2
|
-
import type { ClientSession,
|
|
2
|
+
import type { ClientSession, User } from '@oxy.so/core';
|
|
3
|
+
import type { DeviceContext } from '@oxy.so/core/session';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* The runtime's coarse verdict about this device's session.
|