@oxyhq/services 10.5.0 → 11.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/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/AccountMenu.js +9 -5
- package/lib/commonjs/ui/components/AccountMenu.js.map +1 -1
- package/lib/commonjs/ui/components/AnotherDeviceQR.js +51 -56
- package/lib/commonjs/ui/components/AnotherDeviceQR.js.map +1 -1
- package/lib/commonjs/ui/components/BottomSheetRouter.js +1 -0
- package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
- package/lib/commonjs/ui/components/FollowButton.js +18 -5
- package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +23 -7
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/SignInModal.js +20 -1
- package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js +19 -9
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +4 -2
- package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +153 -19
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +6 -17
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +5 -5
- package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +38 -38
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +2 -2
- package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/queryKeys.js +3 -3
- package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +1 -1
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js +16 -12
- package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +10 -6
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queryClient.js +6 -5
- package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
- package/lib/commonjs/ui/hooks/useOxyAuthSession.js +40 -2
- package/lib/commonjs/ui/hooks/useOxyAuthSession.js.map +1 -1
- package/lib/commonjs/ui/hooks/useProfileEditing.js +21 -0
- package/lib/commonjs/ui/hooks/useProfileEditing.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/screens/AccountVerificationScreen.js +100 -108
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AppInfoScreen.js +227 -273
- package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AvatarCropScreen.js +10 -4
- package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +20 -37
- package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js +89 -201
- package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +80 -208
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FAQScreen.js +56 -208
- package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js +303 -352
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +20 -20
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HelpSupportScreen.js +77 -89
- package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HistoryViewScreen.js +43 -58
- package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +67 -90
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +77 -177
- package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +113 -107
- package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ManageAccountScreen.js +55 -114
- package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/NotificationsScreen.js +67 -85
- package/lib/commonjs/ui/screens/NotificationsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/OxyAuthScreen.js +71 -135
- package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +15 -9
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PreferencesScreen.js +65 -83
- package/lib/commonjs/ui/screens/PreferencesScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +378 -1023
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +294 -242
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +192 -305
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +57 -97
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SearchSettingsScreen.js +41 -41
- package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/UserLinksScreen.js +17 -24
- package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/UserListScreen.js +83 -214
- package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +115 -77
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js +70 -57
- package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +136 -332
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js +47 -137
- package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +182 -115
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +138 -214
- package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +54 -92
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/commonjs/ui/utils/activeAuthuser.js +15 -9
- package/lib/commonjs/ui/utils/activeAuthuser.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/module/index.js.map +1 -1
- package/lib/module/ui/components/AccountMenu.js +10 -6
- package/lib/module/ui/components/AccountMenu.js.map +1 -1
- package/lib/module/ui/components/AnotherDeviceQR.js +50 -56
- package/lib/module/ui/components/AnotherDeviceQR.js.map +1 -1
- package/lib/module/ui/components/BottomSheetRouter.js +2 -1
- package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js +18 -5
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +23 -7
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/SignInModal.js +20 -1
- package/lib/module/ui/components/SignInModal.js.map +1 -1
- package/lib/module/ui/components/fileManagement/FileViewer.js +19 -9
- package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/module/ui/components/fileManagement/UploadPreview.js +4 -2
- package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +154 -20
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +6 -17
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/hooks/mutations/mutationFactory.js +5 -5
- package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
- package/lib/module/ui/hooks/mutations/useAccountMutations.js +38 -38
- package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/module/ui/hooks/mutations/useServicesMutations.js +2 -2
- package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
- package/lib/module/ui/hooks/queries/queryKeys.js +3 -3
- package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/usePaymentQueries.js +16 -12
- package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useServicesQueries.js +9 -6
- package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/module/ui/hooks/queryClient.js +6 -5
- package/lib/module/ui/hooks/queryClient.js.map +1 -1
- package/lib/module/ui/hooks/useOxyAuthSession.js +40 -2
- package/lib/module/ui/hooks/useOxyAuthSession.js.map +1 -1
- package/lib/module/ui/hooks/useProfileEditing.js +21 -0
- package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/module/ui/hooks/useSessionManagement.js +4 -3
- package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js +101 -109
- package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/module/ui/screens/AppInfoScreen.js +228 -275
- package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/module/ui/screens/AvatarCropScreen.js +10 -4
- package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/module/ui/screens/ConnectedAppsScreen.js +19 -39
- package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
- package/lib/module/ui/screens/CreateManagedAccountScreen.js +90 -202
- package/lib/module/ui/screens/CreateManagedAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/EditProfileFieldScreen.js +77 -205
- package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/module/ui/screens/FAQScreen.js +55 -207
- package/lib/module/ui/screens/FAQScreen.js.map +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js +301 -350
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +20 -20
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/HelpSupportScreen.js +78 -90
- package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
- package/lib/module/ui/screens/HistoryViewScreen.js +44 -59
- package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js +68 -91
- package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +75 -177
- package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
- package/lib/module/ui/screens/LegalDocumentsScreen.js +116 -108
- package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
- package/lib/module/ui/screens/ManageAccountScreen.js +52 -112
- package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/NotificationsScreen.js +68 -86
- package/lib/module/ui/screens/NotificationsScreen.js.map +1 -1
- package/lib/module/ui/screens/OxyAuthScreen.js +69 -134
- package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js +16 -10
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/PreferencesScreen.js +66 -84
- package/lib/module/ui/screens/PreferencesScreen.js.map +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +366 -1012
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/module/ui/screens/PrivacySettingsScreen.js +295 -243
- package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +189 -302
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SavesCollectionsScreen.js +58 -98
- package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/module/ui/screens/SearchSettingsScreen.js +42 -42
- package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/UserLinksScreen.js +18 -25
- package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
- package/lib/module/ui/screens/UserListScreen.js +81 -212
- package/lib/module/ui/screens/UserListScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js +114 -76
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustAboutScreen.js +69 -57
- package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustCenterScreen.js +135 -332
- package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustFAQScreen.js +48 -138
- package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +184 -117
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRewardsScreen.js +132 -208
- package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRulesScreen.js +58 -94
- package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/module/ui/utils/activeAuthuser.js +15 -9
- package/lib/module/ui/utils/activeAuthuser.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/typescript/commonjs/index.d.ts +1 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts +2 -0
- package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/AnotherDeviceQR.d.ts +12 -2
- package/lib/typescript/commonjs/ui/components/AnotherDeviceQR.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts +3 -2
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +34 -0
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +3 -0
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts +3 -3
- package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useOxyAuthSession.d.ts +22 -0
- package/lib/typescript/commonjs/ui/hooks/useOxyAuthSession.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts +3 -0
- package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts +2 -1
- package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/NotificationsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PreferencesScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.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/SavesCollectionsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.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/utils/activeAuthuser.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +1 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/AccountMenu.d.ts +2 -0
- package/lib/typescript/module/ui/components/AccountMenu.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/AnotherDeviceQR.d.ts +12 -2
- package/lib/typescript/module/ui/components/AnotherDeviceQR.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyProvider.d.ts +3 -2
- package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts +1 -1
- package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/OxyContext.d.ts +34 -0
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +3 -0
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts +3 -3
- package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useOxyAuthSession.d.ts +22 -0
- package/lib/typescript/module/ui/hooks/useOxyAuthSession.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts +3 -0
- package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts +2 -1
- package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/FAQScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/NotificationsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PreferencesScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.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/SavesCollectionsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.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/utils/activeAuthuser.d.ts.map +1 -1
- package/lib/typescript/types/expo-haptics.d.ts +42 -0
- package/package.json +24 -31
- package/src/index.ts +1 -0
- package/src/types/expo-haptics.d.ts +42 -0
- package/src/ui/components/AccountMenu.tsx +11 -5
- package/src/ui/components/AnotherDeviceQR.tsx +53 -45
- package/src/ui/components/BottomSheetRouter.tsx +2 -1
- package/src/ui/components/FollowButton.tsx +24 -5
- package/src/ui/components/OxyProvider.tsx +22 -8
- package/src/ui/components/SignInModal.tsx +21 -2
- package/src/ui/components/TouchableRipple/TouchableRipple.native.tsx +1 -1
- package/src/ui/components/fileManagement/FileViewer.tsx +9 -9
- package/src/ui/components/fileManagement/UploadPreview.tsx +2 -2
- package/src/ui/context/OxyContext.tsx +178 -21
- package/src/ui/context/hooks/useAuthOperations.ts +6 -17
- package/src/ui/hooks/mutations/mutationFactory.ts +5 -5
- package/src/ui/hooks/mutations/useAccountMutations.ts +38 -38
- package/src/ui/hooks/mutations/useServicesMutations.ts +2 -2
- package/src/ui/hooks/queries/queryKeys.ts +6 -3
- package/src/ui/hooks/queries/useAccountQueries.ts +1 -1
- package/src/ui/hooks/queries/usePaymentQueries.ts +12 -12
- package/src/ui/hooks/queries/useServicesQueries.ts +9 -6
- package/src/ui/hooks/queryClient.ts +5 -5
- package/src/ui/hooks/useOxyAuthSession.ts +76 -2
- package/src/ui/hooks/useProfileEditing.ts +24 -0
- package/src/ui/hooks/useSessionManagement.ts +9 -6
- package/src/ui/screens/AccountVerificationScreen.tsx +101 -113
- package/src/ui/screens/AppInfoScreen.tsx +200 -238
- package/src/ui/screens/AvatarCropScreen.tsx +17 -4
- package/src/ui/screens/ConnectedAppsScreen.tsx +16 -34
- package/src/ui/screens/CreateManagedAccountScreen.tsx +94 -170
- package/src/ui/screens/EditProfileFieldScreen.tsx +77 -190
- package/src/ui/screens/FAQScreen.tsx +77 -208
- package/src/ui/screens/FeedbackScreen.tsx +330 -239
- package/src/ui/screens/FileManagementScreen.tsx +20 -20
- package/src/ui/screens/HelpSupportScreen.tsx +67 -82
- package/src/ui/screens/HistoryViewScreen.tsx +32 -38
- package/src/ui/screens/LanguageSelectorScreen.tsx +79 -93
- package/src/ui/screens/LearnMoreUsernamesScreen.tsx +81 -164
- package/src/ui/screens/LegalDocumentsScreen.tsx +184 -123
- package/src/ui/screens/ManageAccountScreen.tsx +48 -114
- package/src/ui/screens/NotificationsScreen.tsx +107 -106
- package/src/ui/screens/OxyAuthScreen.tsx +76 -109
- package/src/ui/screens/PaymentGatewayScreen.tsx +16 -7
- package/src/ui/screens/PreferencesScreen.tsx +96 -116
- package/src/ui/screens/PremiumSubscriptionScreen.tsx +419 -872
- package/src/ui/screens/PrivacySettingsScreen.tsx +203 -185
- package/src/ui/screens/ProfileScreen.tsx +158 -200
- package/src/ui/screens/SavesCollectionsScreen.tsx +78 -125
- package/src/ui/screens/SearchSettingsScreen.tsx +52 -41
- package/src/ui/screens/UserLinksScreen.tsx +18 -25
- package/src/ui/screens/UserListScreen.tsx +95 -188
- package/src/ui/screens/WelcomeNewUserScreen.tsx +109 -36
- package/src/ui/screens/trust/TrustAboutScreen.tsx +52 -41
- package/src/ui/screens/trust/TrustCenterScreen.tsx +184 -222
- package/src/ui/screens/trust/TrustFAQScreen.tsx +64 -124
- package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +190 -67
- package/src/ui/screens/trust/TrustRewardsScreen.tsx +147 -182
- package/src/ui/screens/trust/TrustRulesScreen.tsx +77 -50
- package/src/ui/utils/activeAuthuser.ts +15 -9
- package/src/ui/utils/avatarUtils.ts +1 -1
- package/lib/commonjs/ui/components/feedback/FormInput.js +0 -72
- package/lib/commonjs/ui/components/feedback/FormInput.js.map +0 -1
- package/lib/commonjs/ui/components/feedback/feedbackStyles.js +0 -261
- package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +0 -1
- package/lib/module/ui/components/feedback/FormInput.js +0 -67
- package/lib/module/ui/components/feedback/FormInput.js.map +0 -1
- package/lib/module/ui/components/feedback/feedbackStyles.js +0 -256
- package/lib/module/ui/components/feedback/feedbackStyles.js.map +0 -1
- package/lib/typescript/commonjs/ui/components/feedback/FormInput.d.ts +0 -20
- package/lib/typescript/commonjs/ui/components/feedback/FormInput.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts +0 -279
- package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/feedback/FormInput.d.ts +0 -20
- package/lib/typescript/module/ui/components/feedback/FormInput.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts +0 -279
- package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts.map +0 -1
- package/src/ui/components/feedback/FormInput.tsx +0 -84
- package/src/ui/components/feedback/feedbackStyles.ts +0 -246
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxyhq/services",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "11.1.0",
|
|
4
4
|
"description": "OxyHQ Expo/React Native SDK — UI components, screens, and native features",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -106,29 +106,19 @@
|
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
108
|
"dependencies": {
|
|
109
|
-
"@
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
"@oxyhq/contracts": "^0.3.0"
|
|
110
|
+
},
|
|
111
|
+
"devDependencies": {
|
|
112
|
+
"nativewind": "5.0.0-preview.3",
|
|
113
|
+
"react-native-css": "^3.0.0",
|
|
114
|
+
"@react-native-async-storage/async-storage": "^2.0.0",
|
|
112
115
|
"@types/react": "*",
|
|
113
116
|
"copyfiles": "^2.4.1",
|
|
114
|
-
"expo-blur": "~56.0.3",
|
|
115
|
-
"expo-checkbox": "~56.0.1",
|
|
116
|
-
"expo-crypto": "~56.0.3",
|
|
117
|
-
"expo-print": "~56.0.3",
|
|
118
|
-
"expo-secure-store": "~56.0.4",
|
|
119
|
-
"lottie-react-native": "^7.3.4",
|
|
120
117
|
"react-native-keyboard-controller": "1.21.6",
|
|
121
118
|
"react-native-qrcode-svg": "^6.3.0",
|
|
122
|
-
"react-native-url-polyfill": "^2.0.0",
|
|
123
119
|
"socket.io-client": "^4.8.1",
|
|
124
|
-
"sonner": "^2.0.4",
|
|
125
|
-
"sonner-native": "^0.20.0",
|
|
126
120
|
"typescript": "^5.9.2",
|
|
127
|
-
"zustand": "^5.0.9"
|
|
128
|
-
},
|
|
129
|
-
"devDependencies": {
|
|
130
|
-
"nativewind": "5.0.0-preview.3",
|
|
131
|
-
"react-native-css": "^3.0.0",
|
|
121
|
+
"zustand": "^5.0.9",
|
|
132
122
|
"@biomejs/biome": "^1.9.4",
|
|
133
123
|
"@commitlint/cli": "^17.6.5",
|
|
134
124
|
"@commitlint/config-conventional": "^17.6.5",
|
|
@@ -145,6 +135,7 @@
|
|
|
145
135
|
"@types/node": "^20.19.9",
|
|
146
136
|
"expo-file-system": "~56.0.7",
|
|
147
137
|
"expo-font": "~56.0.5",
|
|
138
|
+
"expo-haptics": "~56.0.3",
|
|
148
139
|
"expo-image": "~56.0.8",
|
|
149
140
|
"expo-linear-gradient": "~56.0.4",
|
|
150
141
|
"husky": "^4.3.8",
|
|
@@ -160,8 +151,9 @@
|
|
|
160
151
|
},
|
|
161
152
|
"peerDependencies": {
|
|
162
153
|
"@expo/vector-icons": "^15.0.3",
|
|
163
|
-
"@oxyhq/bloom": ">=0.
|
|
164
|
-
"@oxyhq/core": "^3.
|
|
154
|
+
"@oxyhq/bloom": ">=0.16.0",
|
|
155
|
+
"@oxyhq/core": "^3.11.0",
|
|
156
|
+
"@react-native-async-storage/async-storage": "^2.0.0",
|
|
165
157
|
"@react-native-community/netinfo": "^11.4.1",
|
|
166
158
|
"@tanstack/query-async-storage-persister": "^5.100",
|
|
167
159
|
"@tanstack/query-sync-storage-persister": "^5.100",
|
|
@@ -172,17 +164,22 @@
|
|
|
172
164
|
"expo": ">=56.0.0",
|
|
173
165
|
"expo-document-picker": "~56.0.4",
|
|
174
166
|
"expo-file-system": "~56.0.7",
|
|
175
|
-
"expo-font": "
|
|
176
|
-
"expo-
|
|
167
|
+
"expo-font": ">=13.0.0",
|
|
168
|
+
"expo-haptics": "~56.0.3",
|
|
169
|
+
"expo-image": ">=2.0.0",
|
|
177
170
|
"expo-image-manipulator": "~56.0.3",
|
|
178
171
|
"expo-linear-gradient": "~56.0.4",
|
|
179
172
|
"react": ">=18.0.0",
|
|
180
173
|
"react-native": ">=0.85.0",
|
|
181
174
|
"react-native-gesture-handler": "~2.31.2",
|
|
175
|
+
"react-native-keyboard-controller": ">=1.21.0",
|
|
176
|
+
"react-native-qrcode-svg": "^6.3.0",
|
|
182
177
|
"react-native-reanimated": ">=4.3.0",
|
|
183
178
|
"react-native-safe-area-context": "~5.7.0",
|
|
184
179
|
"react-native-svg": ">=15.15.0",
|
|
185
|
-
"
|
|
180
|
+
"socket.io-client": "^4.8.0",
|
|
181
|
+
"zustand": "^5.0.0",
|
|
182
|
+
"nativewind": ">=5.0.0"
|
|
186
183
|
},
|
|
187
184
|
"peerDependenciesMeta": {
|
|
188
185
|
"nativewind": {
|
|
@@ -197,16 +194,16 @@
|
|
|
197
194
|
"@types/react": {
|
|
198
195
|
"optional": true
|
|
199
196
|
},
|
|
200
|
-
"react-native-
|
|
197
|
+
"react-native-keyboard-controller": {
|
|
201
198
|
"optional": true
|
|
202
199
|
},
|
|
203
|
-
"
|
|
200
|
+
"react-native-qrcode-svg": {
|
|
204
201
|
"optional": true
|
|
205
202
|
},
|
|
206
|
-
"expo
|
|
203
|
+
"expo": {
|
|
207
204
|
"optional": true
|
|
208
205
|
},
|
|
209
|
-
"expo-
|
|
206
|
+
"expo-haptics": {
|
|
210
207
|
"optional": true
|
|
211
208
|
},
|
|
212
209
|
"expo-linear-gradient": {
|
|
@@ -240,9 +237,5 @@
|
|
|
240
237
|
],
|
|
241
238
|
"typescript"
|
|
242
239
|
]
|
|
243
|
-
},
|
|
244
|
-
"overrides": {
|
|
245
|
-
"react-native-gesture-handler": "~2.31.2",
|
|
246
|
-
"react-native-reanimated": "4.3.1"
|
|
247
240
|
}
|
|
248
241
|
}
|
package/src/index.ts
CHANGED
|
@@ -30,6 +30,7 @@ setPlatformOS(Platform.OS as PlatformOS);
|
|
|
30
30
|
// ---------------------------------------------------------------------------
|
|
31
31
|
export { default as OxyProvider } from './ui/components/OxyProvider';
|
|
32
32
|
export { useOxy } from './ui/context/OxyContext';
|
|
33
|
+
export type { OxyContextState, PasswordSignInResult } from './ui/context/OxyContext';
|
|
33
34
|
export { useAuth } from './ui/hooks/useAuth';
|
|
34
35
|
export type { AuthState, AuthActions, UseAuthReturn } from './ui/hooks/useAuth';
|
|
35
36
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
declare module 'expo-haptics' {
|
|
2
|
+
export enum ImpactFeedbackStyle {
|
|
3
|
+
Light = 'light',
|
|
4
|
+
Medium = 'medium',
|
|
5
|
+
Heavy = 'heavy',
|
|
6
|
+
Rigid = 'rigid',
|
|
7
|
+
Soft = 'soft',
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export enum NotificationFeedbackType {
|
|
11
|
+
Success = 'success',
|
|
12
|
+
Warning = 'warning',
|
|
13
|
+
Error = 'error',
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export enum AndroidHaptics {
|
|
17
|
+
Confirm = 'confirm',
|
|
18
|
+
Reject = 'reject',
|
|
19
|
+
Toggle_On = 'toggle_on',
|
|
20
|
+
Toggle_Off = 'toggle_off',
|
|
21
|
+
Selection = 'selection',
|
|
22
|
+
Context_Click = 'context_click',
|
|
23
|
+
Keyboard_Tap = 'keyboard_tap',
|
|
24
|
+
Keyboard_Press = 'keyboard_press',
|
|
25
|
+
Keyboard_Release = 'keyboard_release',
|
|
26
|
+
Virtual_Key = 'virtual_key',
|
|
27
|
+
Virtual_Key_Release = 'virtual_key_release',
|
|
28
|
+
Long_Press = 'long_press',
|
|
29
|
+
Gesture_Start = 'gesture_start',
|
|
30
|
+
Gesture_End = 'gesture_end',
|
|
31
|
+
Clock_Tick = 'clock_tick',
|
|
32
|
+
Segment_Tick = 'segment_tick',
|
|
33
|
+
Segment_Frequent_Tick = 'segment_frequent_tick',
|
|
34
|
+
Text_Handle_Move = 'text_handle_move',
|
|
35
|
+
Drag_Start = 'drag_start',
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function impactAsync(style?: ImpactFeedbackStyle): Promise<void>;
|
|
39
|
+
export function notificationAsync(type?: NotificationFeedbackType): Promise<void>;
|
|
40
|
+
export function selectionAsync(): Promise<void>;
|
|
41
|
+
export function performAndroidHapticsAsync(type: AndroidHaptics): Promise<void>;
|
|
42
|
+
}
|
|
@@ -19,7 +19,7 @@ import { useTheme } from '@oxyhq/bloom/theme';
|
|
|
19
19
|
import Avatar from './Avatar';
|
|
20
20
|
import { useOxy } from '../context/OxyContext';
|
|
21
21
|
import { useI18n } from '../hooks/useI18n';
|
|
22
|
-
import { logger as loggerUtil } from '@oxyhq/core';
|
|
22
|
+
import { isDev, logger as loggerUtil } from '@oxyhq/core';
|
|
23
23
|
import { buildAccountRows, type AccountRow } from './accountMenuRows';
|
|
24
24
|
import { useDeviceAccounts } from '../hooks/useDeviceAccounts';
|
|
25
25
|
|
|
@@ -53,6 +53,8 @@ export interface AccountMenuProps {
|
|
|
53
53
|
onAddAccount: () => void;
|
|
54
54
|
/** Optional anchor (web only). Native ignores this and uses bottom-sheet style. */
|
|
55
55
|
anchor?: AccountMenuAnchor | null;
|
|
56
|
+
/** Called before the active identity changes so apps can clear tenant-scoped state. */
|
|
57
|
+
onBeforeSessionChange?: () => void | Promise<void>;
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
const isWeb = Platform.OS === 'web';
|
|
@@ -76,6 +78,7 @@ const AccountMenu: React.FC<AccountMenuProps> = ({
|
|
|
76
78
|
onNavigateManage,
|
|
77
79
|
onAddAccount,
|
|
78
80
|
anchor,
|
|
81
|
+
onBeforeSessionChange,
|
|
79
82
|
}) => {
|
|
80
83
|
const {
|
|
81
84
|
activeSessionId,
|
|
@@ -131,18 +134,19 @@ const AccountMenu: React.FC<AccountMenuProps> = ({
|
|
|
131
134
|
}
|
|
132
135
|
setBusySessionId(sessionId);
|
|
133
136
|
try {
|
|
137
|
+
await onBeforeSessionChange?.();
|
|
134
138
|
await switchSession(sessionId);
|
|
135
139
|
toast.success(t('accountSwitcher.toasts.switchSuccess') || 'Switched account');
|
|
136
140
|
onClose();
|
|
137
141
|
} catch (error) {
|
|
138
|
-
if (!
|
|
142
|
+
if (!isDev()) {
|
|
139
143
|
loggerUtil.warn('Switch account failed', { component: 'AccountMenu' }, error as unknown);
|
|
140
144
|
}
|
|
141
145
|
toast.error(t('accountSwitcher.toasts.switchFailed') || 'Failed to switch account');
|
|
142
146
|
} finally {
|
|
143
147
|
setBusySessionId(null);
|
|
144
148
|
}
|
|
145
|
-
}, [activeSessionId, busySessionId, switchSession, t, onClose]);
|
|
149
|
+
}, [activeSessionId, busySessionId, switchSession, t, onClose, onBeforeSessionChange]);
|
|
146
150
|
|
|
147
151
|
// Sign out a SPECIFIC inactive account from its per-row icon. `removeSession`
|
|
148
152
|
// is the SDK's canonical per-session sign-out: it targets the given session
|
|
@@ -171,6 +175,7 @@ const AccountMenu: React.FC<AccountMenuProps> = ({
|
|
|
171
175
|
}
|
|
172
176
|
setSigningOut(true);
|
|
173
177
|
try {
|
|
178
|
+
await onBeforeSessionChange?.();
|
|
174
179
|
await logout();
|
|
175
180
|
toast.success(t('common.actions.signedOut') || 'Signed out');
|
|
176
181
|
onClose();
|
|
@@ -180,7 +185,7 @@ const AccountMenu: React.FC<AccountMenuProps> = ({
|
|
|
180
185
|
} finally {
|
|
181
186
|
setSigningOut(false);
|
|
182
187
|
}
|
|
183
|
-
}, [signingOut, logout, t, onClose]);
|
|
188
|
+
}, [signingOut, logout, t, onClose, onBeforeSessionChange]);
|
|
184
189
|
|
|
185
190
|
const performSignOutAll = useCallback(async () => {
|
|
186
191
|
if (signingOutAll) {
|
|
@@ -188,6 +193,7 @@ const AccountMenu: React.FC<AccountMenuProps> = ({
|
|
|
188
193
|
}
|
|
189
194
|
setSigningOutAll(true);
|
|
190
195
|
try {
|
|
196
|
+
await onBeforeSessionChange?.();
|
|
191
197
|
await logoutAll();
|
|
192
198
|
toast.success(t('accountSwitcher.toasts.signOutAllSuccess') || 'Signed out of all accounts');
|
|
193
199
|
onClose();
|
|
@@ -197,7 +203,7 @@ const AccountMenu: React.FC<AccountMenuProps> = ({
|
|
|
197
203
|
} finally {
|
|
198
204
|
setSigningOutAll(false);
|
|
199
205
|
}
|
|
200
|
-
}, [signingOutAll, logoutAll, t, onClose]);
|
|
206
|
+
}, [signingOutAll, logoutAll, t, onClose, onBeforeSessionChange]);
|
|
201
207
|
|
|
202
208
|
// Escape-to-close + focus management (web only).
|
|
203
209
|
useEffect(() => {
|
|
@@ -8,64 +8,96 @@
|
|
|
8
8
|
* inside a tap-to-expand disclosure so it never competes with the primary CTA.
|
|
9
9
|
*
|
|
10
10
|
* The QR plate stays white intentionally — high contrast is required for
|
|
11
|
-
* reliable scanning regardless of the app theme.
|
|
11
|
+
* reliable scanning regardless of the app theme. That single plate (and its
|
|
12
|
+
* fixed dimensions) is the only StyleSheet/hardcoded-color in this component;
|
|
13
|
+
* everything else is composed from Bloom typography + centralized token classes.
|
|
12
14
|
*/
|
|
13
15
|
|
|
14
16
|
import type React from 'react';
|
|
15
17
|
import { useState, useCallback } from 'react';
|
|
16
|
-
import { View,
|
|
18
|
+
import { View, TouchableOpacity, StyleSheet } from 'react-native';
|
|
17
19
|
import QRCode from 'react-native-qrcode-svg';
|
|
18
20
|
import { useTheme } from '@oxyhq/bloom/theme';
|
|
21
|
+
import { Text } from '@oxyhq/bloom/typography';
|
|
22
|
+
import * as Icons from '@oxyhq/bloom/icons';
|
|
19
23
|
|
|
20
24
|
export interface AnotherDeviceQRProps {
|
|
21
|
-
/** The QR payload (`oxyauth://<token>`). Empty string renders nothing. */
|
|
25
|
+
/** The legacy QR payload (`oxyauth://<token>`). Empty string renders nothing. */
|
|
22
26
|
qrData: string;
|
|
27
|
+
/**
|
|
28
|
+
* The secure "Sign in with Oxy" handoff payload (`oxycommons://approve?...`).
|
|
29
|
+
* Preferred over `qrData` when present — it carries the PUBLIC authorize code
|
|
30
|
+
* (never the secret session token), so the Oxy identity app on another device
|
|
31
|
+
* can scan it to approve. Falls back to `qrData` when the handoff backend has
|
|
32
|
+
* not returned a payload.
|
|
33
|
+
*/
|
|
34
|
+
qrPayload?: string | null;
|
|
23
35
|
}
|
|
24
36
|
|
|
25
37
|
/** Size, in px, of the rendered QR symbol. */
|
|
26
38
|
const QR_SIZE = 200;
|
|
27
39
|
|
|
40
|
+
/** High-contrast QR colors — intentionally fixed (NOT themed) for scan reliability. */
|
|
41
|
+
const QR_PLATE_BG = '#FFFFFF';
|
|
42
|
+
const QR_FOREGROUND = '#000000';
|
|
43
|
+
|
|
28
44
|
/**
|
|
29
45
|
* Collapsed disclosure that reveals a high-contrast QR for signing in on a
|
|
30
46
|
* second device with the Oxy Accounts app.
|
|
31
47
|
*/
|
|
32
|
-
const AnotherDeviceQR: React.FC<AnotherDeviceQRProps> = ({ qrData }) => {
|
|
33
|
-
const
|
|
48
|
+
const AnotherDeviceQR: React.FC<AnotherDeviceQRProps> = ({ qrData, qrPayload }) => {
|
|
49
|
+
const bloomTheme = useTheme();
|
|
34
50
|
const [expanded, setExpanded] = useState(false);
|
|
35
51
|
|
|
36
52
|
const toggle = useCallback(() => {
|
|
37
53
|
setExpanded((prev) => !prev);
|
|
38
54
|
}, []);
|
|
39
55
|
|
|
40
|
-
|
|
56
|
+
// Prefer the secure handoff payload (public authorize code) over the legacy
|
|
57
|
+
// token QR; fall back to `qrData` until the handoff backend is available.
|
|
58
|
+
const value = qrPayload || qrData;
|
|
59
|
+
|
|
60
|
+
if (!value) {
|
|
41
61
|
return null;
|
|
42
62
|
}
|
|
43
63
|
|
|
44
64
|
return (
|
|
45
|
-
<View
|
|
65
|
+
<View className="w-full items-center">
|
|
46
66
|
<TouchableOpacity
|
|
47
|
-
|
|
67
|
+
className="flex-row items-center justify-center gap-space-8 py-space-12 px-space-8"
|
|
48
68
|
onPress={toggle}
|
|
49
69
|
accessibilityRole="button"
|
|
50
70
|
accessibilityState={{ expanded }}
|
|
51
71
|
accessibilityHint="Reveals a QR code to sign in using the Oxy Accounts app on another device"
|
|
52
72
|
>
|
|
53
|
-
<
|
|
73
|
+
<Icons.QrCode_Stroke2_Corner0_Rounded
|
|
74
|
+
size="sm"
|
|
75
|
+
style={{ color: bloomTheme.colors.textSecondary }}
|
|
76
|
+
/>
|
|
77
|
+
<Text className="font-sansSemibold text-body text-text-secondary">
|
|
54
78
|
Sign in on another device
|
|
55
79
|
</Text>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
80
|
+
{expanded ? (
|
|
81
|
+
<Icons.ChevronTop_Stroke2_Corner0_Rounded
|
|
82
|
+
size="sm"
|
|
83
|
+
style={{ color: bloomTheme.colors.textSecondary }}
|
|
84
|
+
/>
|
|
85
|
+
) : (
|
|
86
|
+
<Icons.ChevronRight_Stroke2_Corner0_Rounded
|
|
87
|
+
size="sm"
|
|
88
|
+
style={{ color: bloomTheme.colors.textSecondary }}
|
|
89
|
+
/>
|
|
90
|
+
)}
|
|
59
91
|
</TouchableOpacity>
|
|
60
92
|
|
|
61
93
|
{expanded && (
|
|
62
|
-
<View
|
|
94
|
+
<View className="items-center mt-space-8 gap-space-12">
|
|
63
95
|
{/* The QR plate is intentionally white for scan reliability. */}
|
|
64
|
-
<View style={
|
|
65
|
-
<QRCode value={
|
|
96
|
+
<View style={styles.qrPlate}>
|
|
97
|
+
<QRCode value={value} size={QR_SIZE} backgroundColor={QR_PLATE_BG} color={QR_FOREGROUND} />
|
|
66
98
|
</View>
|
|
67
|
-
<Text
|
|
68
|
-
Scan with the Oxy
|
|
99
|
+
<Text className="font-sans text-caption text-text-tertiary text-center">
|
|
100
|
+
Scan with the Oxy app
|
|
69
101
|
</Text>
|
|
70
102
|
</View>
|
|
71
103
|
)}
|
|
@@ -73,38 +105,14 @@ const AnotherDeviceQR: React.FC<AnotherDeviceQRProps> = ({ qrData }) => {
|
|
|
73
105
|
);
|
|
74
106
|
};
|
|
75
107
|
|
|
108
|
+
// Measured/positioned layout only (no theming): the high-contrast QR plate keeps
|
|
109
|
+
// a fixed white background + padding so the symbol scans reliably regardless of
|
|
110
|
+
// the app theme. This is the single intentional non-token surface in the file.
|
|
76
111
|
const styles = StyleSheet.create({
|
|
77
|
-
container: {
|
|
78
|
-
width: '100%',
|
|
79
|
-
alignItems: 'center',
|
|
80
|
-
},
|
|
81
|
-
toggle: {
|
|
82
|
-
flexDirection: 'row',
|
|
83
|
-
alignItems: 'center',
|
|
84
|
-
justifyContent: 'center',
|
|
85
|
-
paddingVertical: 12,
|
|
86
|
-
paddingHorizontal: 8,
|
|
87
|
-
},
|
|
88
|
-
toggleText: {
|
|
89
|
-
fontSize: 14,
|
|
90
|
-
fontWeight: '600',
|
|
91
|
-
},
|
|
92
|
-
chevron: {
|
|
93
|
-
fontSize: 16,
|
|
94
|
-
marginLeft: 8,
|
|
95
|
-
},
|
|
96
|
-
body: {
|
|
97
|
-
alignItems: 'center',
|
|
98
|
-
marginTop: 8,
|
|
99
|
-
},
|
|
100
112
|
qrPlate: {
|
|
101
113
|
padding: 16,
|
|
102
114
|
borderRadius: 16,
|
|
103
|
-
|
|
104
|
-
hint: {
|
|
105
|
-
marginTop: 12,
|
|
106
|
-
fontSize: 12,
|
|
107
|
-
textAlign: 'center',
|
|
115
|
+
backgroundColor: QR_PLATE_BG,
|
|
108
116
|
},
|
|
109
117
|
});
|
|
110
118
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useRef, useEffect, useCallback, useMemo, type ErrorInfo } from 'react';
|
|
2
|
-
import { BackHandler, View, StyleSheet, Text, type StyleProp, type ViewStyle } from 'react-native';
|
|
2
|
+
import { BackHandler, Platform, View, StyleSheet, Text, type StyleProp, type ViewStyle } from 'react-native';
|
|
3
3
|
import { useStore } from 'zustand';
|
|
4
4
|
import type { RouteName } from '../navigation/routes';
|
|
5
5
|
import { getScreenComponent, getSheetConfig, isValidRoute } from '../navigation/routes';
|
|
@@ -115,6 +115,7 @@ const BottomSheetRouter: React.FC<BottomSheetRouterProps> = ({ onScreenChange, o
|
|
|
115
115
|
// Android back button
|
|
116
116
|
useEffect(() => {
|
|
117
117
|
if (!isOpen) return;
|
|
118
|
+
if (Platform.OS !== 'android') return;
|
|
118
119
|
const handler = BackHandler.addEventListener('hardwareBackPress', () => {
|
|
119
120
|
handleGoBack();
|
|
120
121
|
return true;
|
|
@@ -11,8 +11,10 @@ import {
|
|
|
11
11
|
import { useOxy } from '../context/OxyContext';
|
|
12
12
|
import { toast } from '@oxyhq/bloom';
|
|
13
13
|
import { useFollow, useFollowForButton } from '../hooks/useFollow';
|
|
14
|
+
import { useFollowStore } from '../stores/followStore';
|
|
14
15
|
import { useTheme } from '@oxyhq/bloom/theme';
|
|
15
16
|
import type { OxyServices, BulkFollowResult, BulkUnfollowResult } from '@oxyhq/core';
|
|
17
|
+
import { useShallow } from 'zustand/react/shallow';
|
|
16
18
|
|
|
17
19
|
const DEFAULT_FOLLOW_ALL_LABEL = 'Follow all';
|
|
18
20
|
const DEFAULT_FOLLOWED_ALL_LABEL = 'Following';
|
|
@@ -122,7 +124,7 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
122
124
|
{showLoadingState && isLoading ? (
|
|
123
125
|
<ActivityIndicator
|
|
124
126
|
size="small"
|
|
125
|
-
color={isFollowing ? colors.text : colors.
|
|
127
|
+
color={isFollowing ? colors.text : colors.primaryForeground}
|
|
126
128
|
/>
|
|
127
129
|
) : (
|
|
128
130
|
<Text
|
|
@@ -138,6 +140,7 @@ const FollowButtonInner = memo(function FollowButtonInner({
|
|
|
138
140
|
|
|
139
141
|
const FollowButtonMultiInner = memo(function FollowButtonMultiInner({
|
|
140
142
|
userIds,
|
|
143
|
+
initiallyAllFollowing = false,
|
|
141
144
|
size = 'medium',
|
|
142
145
|
followAllLabel = DEFAULT_FOLLOW_ALL_LABEL,
|
|
143
146
|
followedAllLabel = DEFAULT_FOLLOWED_ALL_LABEL,
|
|
@@ -156,11 +159,27 @@ const FollowButtonMultiInner = memo(function FollowButtonMultiInner({
|
|
|
156
159
|
const unfollowAllUsers = 'unfollowAllUsers' in follow ? follow.unfollowAllUsers : undefined;
|
|
157
160
|
const isAnyLoading = 'isAnyLoading' in follow ? follow.isAnyLoading : false;
|
|
158
161
|
|
|
162
|
+
const initialFollowStatuses = useFollowStore(
|
|
163
|
+
useShallow((state) => {
|
|
164
|
+
const statuses: Record<string, boolean | null> = {};
|
|
165
|
+
for (const uid of userIds) {
|
|
166
|
+
statuses[uid] = Object.prototype.hasOwnProperty.call(state.followingUsers, uid)
|
|
167
|
+
? state.followingUsers[uid]
|
|
168
|
+
: null;
|
|
169
|
+
}
|
|
170
|
+
return statuses;
|
|
171
|
+
})
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
const hasKnownNotFollowing = userIds.some((uid) => initialFollowStatuses[uid] === false);
|
|
175
|
+
|
|
159
176
|
// `allFollowing` is store-derived (LIVE aggregate of each target's follow
|
|
160
177
|
// status) — it reacts in real time as individual members are followed or
|
|
161
|
-
// unfollowed elsewhere.
|
|
162
|
-
//
|
|
163
|
-
|
|
178
|
+
// unfollowed elsewhere. `initiallyAllFollowing` preserves the public initial
|
|
179
|
+
// state contract until the store learns that any member is not followed. Only
|
|
180
|
+
// `isSubmitting` is transient local state for the in-flight bulk call.
|
|
181
|
+
const storeAllFollowing = 'allFollowing' in follow ? follow.allFollowing : false;
|
|
182
|
+
const allFollowing = storeAllFollowing || (initiallyAllFollowing && !hasKnownNotFollowing);
|
|
164
183
|
const fetchAllStatuses = 'fetchAllStatuses' in follow ? follow.fetchAllStatuses : undefined;
|
|
165
184
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
166
185
|
|
|
@@ -244,7 +263,7 @@ const FollowButtonMultiInner = memo(function FollowButtonMultiInner({
|
|
|
244
263
|
{showLoadingState && isLoading ? (
|
|
245
264
|
<ActivityIndicator
|
|
246
265
|
size="small"
|
|
247
|
-
color={allFollowing ? colors.text : colors.
|
|
266
|
+
color={allFollowing ? colors.text : colors.primaryForeground}
|
|
248
267
|
/>
|
|
249
268
|
) : (
|
|
250
269
|
<Text
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { lazy, Suspense, useEffect, useRef, useState, type ComponentType, type FC, type ReactNode } from 'react';
|
|
2
2
|
import { AppState, Platform, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
4
|
+
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
3
5
|
import type { OxyProviderProps } from '../types/navigation';
|
|
4
6
|
import { OxyContextProvider, type OxyContextProviderProps } from '../context/OxyContext';
|
|
5
7
|
import { QueryClientProvider, focusManager, onlineManager } from '@tanstack/react-query';
|
|
@@ -27,6 +29,9 @@ import { createPlatformStorage, type StorageInterface } from '../utils/storageHe
|
|
|
27
29
|
const BOOT_BG_COLOR = '#ffffff';
|
|
28
30
|
|
|
29
31
|
const bootStyles = StyleSheet.create({
|
|
32
|
+
providerRoot: {
|
|
33
|
+
flex: 1,
|
|
34
|
+
},
|
|
30
35
|
bootShell: {
|
|
31
36
|
flex: 1,
|
|
32
37
|
backgroundColor: BOOT_BG_COLOR,
|
|
@@ -69,8 +74,9 @@ const LazySignInModal = lazy((): Promise<{ default: ComponentType }> =>
|
|
|
69
74
|
* OxyProvider - Universal provider for Expo apps (native + web)
|
|
70
75
|
*
|
|
71
76
|
* Provides authentication, session management, query client, and UI overlays.
|
|
72
|
-
*
|
|
73
|
-
* consuming app
|
|
77
|
+
* Wraps its own overlay stack in SafeAreaProvider and GestureHandlerRootView so
|
|
78
|
+
* BottomSheetRouter and SignInModal can safely render even when a consuming app
|
|
79
|
+
* has not mounted those providers yet.
|
|
74
80
|
*
|
|
75
81
|
* Usage:
|
|
76
82
|
* ```tsx
|
|
@@ -276,9 +282,13 @@ const OxyProvider: FC<OxyProviderProps> = ({
|
|
|
276
282
|
// until children can mount under a real <QueryClientProvider>.
|
|
277
283
|
if (!queryClient) {
|
|
278
284
|
return (
|
|
279
|
-
<
|
|
280
|
-
<
|
|
281
|
-
|
|
285
|
+
<GestureHandlerRootView style={bootStyles.providerRoot}>
|
|
286
|
+
<SafeAreaProvider>
|
|
287
|
+
<KeyboardWrapper>
|
|
288
|
+
<View style={bootStyles.bootShell} />
|
|
289
|
+
</KeyboardWrapper>
|
|
290
|
+
</SafeAreaProvider>
|
|
291
|
+
</GestureHandlerRootView>
|
|
282
292
|
);
|
|
283
293
|
}
|
|
284
294
|
|
|
@@ -314,9 +324,13 @@ const OxyProvider: FC<OxyProviderProps> = ({
|
|
|
314
324
|
);
|
|
315
325
|
|
|
316
326
|
return (
|
|
317
|
-
<
|
|
318
|
-
|
|
319
|
-
|
|
327
|
+
<GestureHandlerRootView style={bootStyles.providerRoot}>
|
|
328
|
+
<SafeAreaProvider>
|
|
329
|
+
<KeyboardWrapper>
|
|
330
|
+
{coreContent}
|
|
331
|
+
</KeyboardWrapper>
|
|
332
|
+
</SafeAreaProvider>
|
|
333
|
+
</GestureHandlerRootView>
|
|
320
334
|
);
|
|
321
335
|
};
|
|
322
336
|
|
|
@@ -103,7 +103,7 @@ const SignInModalContent: React.FC<SignInModalContentProps> = ({
|
|
|
103
103
|
switchSession,
|
|
104
104
|
clientId,
|
|
105
105
|
}) => {
|
|
106
|
-
const { qrData, isLoading, error, isWaiting, openAuthApproval, retry } = useOxyAuthSession(
|
|
106
|
+
const { qrData, qrPayload, isLoading, error, isWaiting, openAuthApproval, openSameDeviceApproval, retry } = useOxyAuthSession(
|
|
107
107
|
oxyServices,
|
|
108
108
|
clientId,
|
|
109
109
|
switchSession,
|
|
@@ -192,6 +192,20 @@ const SignInModalContent: React.FC<SignInModalContentProps> = ({
|
|
|
192
192
|
Continue with Oxy
|
|
193
193
|
</Button>
|
|
194
194
|
|
|
195
|
+
{/* Same-device "Sign in with Oxy" handoff — deep-links into the
|
|
196
|
+
native Oxy app to approve. Shown only when the handoff backend
|
|
197
|
+
returned a payload. */}
|
|
198
|
+
{qrPayload && (
|
|
199
|
+
<Button
|
|
200
|
+
variant="secondary"
|
|
201
|
+
onPress={openSameDeviceApproval}
|
|
202
|
+
icon={<OxyLogo variant="icon" size={20} fillColor={theme.colors.text} style={styles.buttonIcon} />}
|
|
203
|
+
style={styles.secondaryButton}
|
|
204
|
+
>
|
|
205
|
+
Sign in with the Oxy app
|
|
206
|
+
</Button>
|
|
207
|
+
)}
|
|
208
|
+
|
|
195
209
|
{/* Waiting status */}
|
|
196
210
|
{isWaiting && (
|
|
197
211
|
<View style={styles.statusContainer}>
|
|
@@ -204,7 +218,7 @@ const SignInModalContent: React.FC<SignInModalContentProps> = ({
|
|
|
204
218
|
|
|
205
219
|
{/* Collapsed "sign in on another device" QR disclosure */}
|
|
206
220
|
<View style={styles.qrSection}>
|
|
207
|
-
<AnotherDeviceQR qrData={qrData} />
|
|
221
|
+
<AnotherDeviceQR qrData={qrData} qrPayload={qrPayload} />
|
|
208
222
|
</View>
|
|
209
223
|
</>
|
|
210
224
|
)}
|
|
@@ -274,6 +288,11 @@ const styles = StyleSheet.create({
|
|
|
274
288
|
width: '100%',
|
|
275
289
|
borderRadius: 12,
|
|
276
290
|
},
|
|
291
|
+
secondaryButton: {
|
|
292
|
+
width: '100%',
|
|
293
|
+
borderRadius: 12,
|
|
294
|
+
marginTop: 12,
|
|
295
|
+
},
|
|
277
296
|
buttonIcon: {
|
|
278
297
|
marginRight: 10,
|
|
279
298
|
},
|
|
@@ -28,7 +28,7 @@ export type Props = PressableProps & {
|
|
|
28
28
|
background?: PressableAndroidRippleConfig;
|
|
29
29
|
centered?: boolean;
|
|
30
30
|
disabled?: boolean;
|
|
31
|
-
onPress?: (e: GestureResponderEvent) =>
|
|
31
|
+
onPress?: (e: GestureResponderEvent) => void | null;
|
|
32
32
|
onLongPress?: (e: GestureResponderEvent) => void;
|
|
33
33
|
onPressIn?: (e: GestureResponderEvent) => void;
|
|
34
34
|
onPressOut?: (e: GestureResponderEvent) => void;
|