@oxyhq/services 5.26.3 → 5.27.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/dist/web/oxy-services.esm.js +2 -0
- package/dist/web/oxy-services.esm.js.map +1 -0
- package/dist/web/types/assets/icons/OxyServices.d.ts +28 -0
- package/dist/web/types/assets/illustrations/HighFive.d.ts +8 -0
- package/dist/web/types/constants/version.d.ts +13 -0
- package/dist/web/types/core/AuthManager.d.ts +143 -0
- package/dist/web/types/core/CrossDomainAuth.d.ts +160 -0
- package/dist/web/types/core/HttpService.d.ts +163 -0
- package/dist/web/types/core/OxyServices.base.d.ts +126 -0
- package/dist/web/types/core/OxyServices.d.ts +81 -0
- package/dist/web/types/core/OxyServices.errors.d.ts +11 -0
- package/dist/web/types/core/index.d.ts +20 -0
- package/dist/web/types/core/mixins/OxyServices.analytics.d.ts +66 -0
- package/dist/web/types/core/mixins/OxyServices.assets.d.ts +135 -0
- package/dist/web/types/core/mixins/OxyServices.auth.d.ts +186 -0
- package/dist/web/types/core/mixins/OxyServices.developer.d.ts +99 -0
- package/dist/web/types/core/mixins/OxyServices.devices.d.ts +96 -0
- package/dist/web/types/core/mixins/OxyServices.features.d.ts +228 -0
- package/dist/web/types/core/mixins/OxyServices.fedcm.d.ts +200 -0
- package/dist/web/types/core/mixins/OxyServices.karma.d.ts +85 -0
- package/dist/web/types/core/mixins/OxyServices.language.d.ts +81 -0
- package/dist/web/types/core/mixins/OxyServices.location.d.ts +64 -0
- package/dist/web/types/core/mixins/OxyServices.payment.d.ts +111 -0
- package/dist/web/types/core/mixins/OxyServices.popup.d.ts +205 -0
- package/dist/web/types/core/mixins/OxyServices.privacy.d.ts +122 -0
- package/dist/web/types/core/mixins/OxyServices.redirect.d.ts +245 -0
- package/dist/web/types/core/mixins/OxyServices.security.d.ts +78 -0
- package/dist/web/types/core/mixins/OxyServices.user.d.ts +184 -0
- package/dist/web/types/core/mixins/OxyServices.utility.d.ts +93 -0
- package/dist/web/types/core/mixins/index.d.ts +30 -0
- package/dist/web/types/core/mixins/mixinHelpers.d.ts +31 -0
- package/dist/web/types/crypto/index.d.ts +11 -0
- package/dist/web/types/crypto/keyManager.d.ts +189 -0
- package/dist/web/types/crypto/polyfill.d.ts +12 -0
- package/dist/web/types/crypto/recoveryPhrase.d.ts +58 -0
- package/dist/web/types/crypto/signatureService.d.ts +86 -0
- package/dist/web/types/i18n/index.d.ts +3 -0
- package/dist/web/types/index.d.ts +62 -0
- package/dist/web/types/lib/sonner-safe.d.ts +8 -0
- package/dist/web/types/lib/sonner.d.ts +11 -0
- package/dist/web/types/lib/sonner.web.d.ts +14 -0
- package/dist/web/types/models/interfaces.d.ts +415 -0
- package/dist/web/types/models/session.d.ts +27 -0
- package/dist/web/types/node/index.d.ts +9 -0
- package/dist/web/types/shared/index.d.ts +28 -0
- package/dist/web/types/shared/utils/colorUtils.d.ts +104 -0
- package/dist/web/types/shared/utils/debugUtils.d.ts +48 -0
- package/dist/web/types/shared/utils/errorUtils.d.ts +97 -0
- package/dist/web/types/shared/utils/index.d.ts +13 -0
- package/dist/web/types/shared/utils/networkUtils.d.ts +139 -0
- package/dist/web/types/shared/utils/themeUtils.d.ts +90 -0
- package/dist/web/types/ui/client.d.ts +33 -0
- package/dist/web/types/ui/components/ActivityIndicator.d.ts +44 -0
- package/dist/web/types/ui/components/AnimationExample.d.ts +3 -0
- package/dist/web/types/ui/components/AutoHeightScrollView.d.ts +22 -0
- package/dist/web/types/ui/components/Avatar.d.ts +60 -0
- package/dist/web/types/ui/components/BottomSheet.d.ts +28 -0
- package/dist/web/types/ui/components/BottomSheetRouter.d.ts +8 -0
- package/dist/web/types/ui/components/CrossFadeIcon.d.ts +26 -0
- package/dist/web/types/ui/components/EmptyState.d.ts +7 -0
- package/dist/web/types/ui/components/ErrorBoundary.d.ts +30 -0
- package/dist/web/types/ui/components/FollowButton.d.ts +17 -0
- package/dist/web/types/ui/components/FontLoader.d.ts +14 -0
- package/dist/web/types/ui/components/GroupedItem.d.ts +23 -0
- package/dist/web/types/ui/components/GroupedSection.d.ts +24 -0
- package/dist/web/types/ui/components/Header.d.ts +37 -0
- package/dist/web/types/ui/components/HelperText.d.ts +46 -0
- package/dist/web/types/ui/components/Icon.d.ts +59 -0
- package/dist/web/types/ui/components/IconButton/IconButton.d.ts +98 -0
- package/dist/web/types/ui/components/IconButton/utils.d.ts +18 -0
- package/dist/web/types/ui/components/LoadingState.d.ts +8 -0
- package/dist/web/types/ui/components/OxyLogo.d.ts +28 -0
- package/dist/web/types/ui/components/OxyPayButton.d.ts +28 -0
- package/dist/web/types/ui/components/OxyProvider.d.ts +33 -0
- package/dist/web/types/ui/components/OxySignInButton.d.ts +64 -0
- package/dist/web/types/ui/components/ProfileCard.d.ts +17 -0
- package/dist/web/types/ui/components/QuickActions.d.ts +14 -0
- package/dist/web/types/ui/components/Section.d.ts +11 -0
- package/dist/web/types/ui/components/SectionTitle.d.ts +9 -0
- package/dist/web/types/ui/components/SettingRow.d.ts +19 -0
- package/dist/web/types/ui/components/SignInModal.d.ts +17 -0
- package/dist/web/types/ui/components/StepBasedScreen.d.ts +25 -0
- package/dist/web/types/ui/components/Surface.d.ts +75 -0
- package/dist/web/types/ui/components/TextField/Addons/Outline.d.ts +15 -0
- package/dist/web/types/ui/components/TextField/Addons/Underline.d.ts +18 -0
- package/dist/web/types/ui/components/TextField/Adornment/TextFieldAdornment.d.ts +44 -0
- package/dist/web/types/ui/components/TextField/Adornment/TextFieldAffix.d.ts +72 -0
- package/dist/web/types/ui/components/TextField/Adornment/TextFieldIcon.d.ts +77 -0
- package/dist/web/types/ui/components/TextField/Adornment/enums.d.ts +12 -0
- package/dist/web/types/ui/components/TextField/Adornment/types.d.ts +11 -0
- package/dist/web/types/ui/components/TextField/Adornment/utils.d.ts +11 -0
- package/dist/web/types/ui/components/TextField/Label/InputLabel.d.ts +4 -0
- package/dist/web/types/ui/components/TextField/Label/LabelBackground.d.ts +3 -0
- package/dist/web/types/ui/components/TextField/TextFieldFlat.d.ts +3 -0
- package/dist/web/types/ui/components/TextField/TextFieldOutlined.d.ts +3 -0
- package/dist/web/types/ui/components/TextField/constants.d.ts +31 -0
- package/dist/web/types/ui/components/TextField/helpers.d.ts +96 -0
- package/dist/web/types/ui/components/TextField/types.d.ts +155 -0
- package/dist/web/types/ui/components/TextField.d.ts +191 -0
- package/dist/web/types/ui/components/TouchableRipple/Pressable.d.ts +12 -0
- package/dist/web/types/ui/components/TouchableRipple/TouchableRipple.d.ts +61 -0
- package/dist/web/types/ui/components/TouchableRipple/utils.d.ts +10 -0
- package/dist/web/types/ui/components/Typography/AnimatedText.d.ts +34 -0
- package/dist/web/types/ui/components/Typography/types.d.ts +18 -0
- package/dist/web/types/ui/components/WebOxyProvider.d.ts +51 -0
- package/dist/web/types/ui/components/feedback/FormInput.d.ts +19 -0
- package/dist/web/types/ui/components/feedback/ProgressIndicator.d.ts +10 -0
- package/dist/web/types/ui/components/feedback/constants.d.ts +4 -0
- package/dist/web/types/ui/components/feedback/feedbackStyles.d.ts +279 -0
- package/dist/web/types/ui/components/feedback/index.d.ts +6 -0
- package/dist/web/types/ui/components/feedback/types.d.ts +45 -0
- package/dist/web/types/ui/components/feedback/useFeedbackForm.d.ts +8 -0
- package/dist/web/types/ui/components/fileManagement/AnimatedButton.d.ts +15 -0
- package/dist/web/types/ui/components/fileManagement/FileDetailsModal.d.ts +14 -0
- package/dist/web/types/ui/components/fileManagement/FileViewer.d.ts +17 -0
- package/dist/web/types/ui/components/fileManagement/UploadPreview.d.ts +20 -0
- package/dist/web/types/ui/components/fileManagement/styles.d.ts +859 -0
- package/dist/web/types/ui/components/icon/FAIRWalletIcon.d.ts +8 -0
- package/dist/web/types/ui/components/icon/OxyIcon.d.ts +9 -0
- package/dist/web/types/ui/components/icon/index.d.ts +3 -0
- package/dist/web/types/ui/components/index.d.ts +16 -0
- package/dist/web/types/ui/components/internal/GroupedPillButtons.d.ts +17 -0
- package/dist/web/types/ui/components/internal/PinInput.d.ts +22 -0
- package/dist/web/types/ui/components/modals/DeleteAccountModal.d.ts +18 -0
- package/dist/web/types/ui/components/modals/index.d.ts +1 -0
- package/dist/web/types/ui/components/payment/PaymentDetailsStep.d.ts +20 -0
- package/dist/web/types/ui/components/payment/PaymentMethodStep.d.ts +13 -0
- package/dist/web/types/ui/components/payment/PaymentReviewStep.d.ts +15 -0
- package/dist/web/types/ui/components/payment/PaymentSuccessStep.d.ts +9 -0
- package/dist/web/types/ui/components/payment/PaymentSummaryStep.d.ts +14 -0
- package/dist/web/types/ui/components/payment/constants.d.ts +6 -0
- package/dist/web/types/ui/components/payment/index.d.ts +8 -0
- package/dist/web/types/ui/components/payment/paymentStyles.d.ts +395 -0
- package/dist/web/types/ui/components/payment/types.d.ts +39 -0
- package/dist/web/types/ui/components/photogrid/JustifiedPhotoGrid.d.ts +26 -0
- package/dist/web/types/ui/components/styles/overlay.d.ts +3 -0
- package/dist/web/types/ui/components/styles/shadow.d.ts +2 -0
- package/dist/web/types/ui/components/theming.d.ts +7 -0
- package/dist/web/types/ui/components/types.d.ts +79 -0
- package/dist/web/types/ui/components/utils/forwardRef.d.ts +11 -0
- package/dist/web/types/ui/components/utils/hasTouchHandler.d.ts +5 -0
- package/dist/web/types/ui/components/utils/roundLayoutSize.d.ts +1 -0
- package/dist/web/types/ui/components/utils/splitStyles.d.ts +19 -0
- package/dist/web/types/ui/constants/iconColors.d.ts +129 -0
- package/dist/web/types/ui/constants/spacing.d.ts +32 -0
- package/dist/web/types/ui/constants/theme.d.ts +96 -0
- package/dist/web/types/ui/context/OxyContext.d.ts +74 -0
- package/dist/web/types/ui/context/ThemeContext.d.ts +18 -0
- package/dist/web/types/ui/context/hooks/useAuthOperations.d.ts +39 -0
- package/dist/web/types/ui/context/hooks/useDeviceManagement.d.ts +26 -0
- package/dist/web/types/ui/context/hooks/useLanguageManagement.d.ts +24 -0
- package/dist/web/types/ui/context/hooks/useSessionManagement.d.ts +40 -0
- package/dist/web/types/ui/hooks/index.d.ts +6 -0
- package/dist/web/types/ui/hooks/mutations/index.d.ts +8 -0
- package/dist/web/types/ui/hooks/mutations/mutationFactory.d.ts +75 -0
- package/dist/web/types/ui/hooks/mutations/useAccountMutations.d.ts +68 -0
- package/dist/web/types/ui/hooks/mutations/useServicesMutations.d.ts +22 -0
- package/dist/web/types/ui/hooks/queries/index.d.ts +10 -0
- package/dist/web/types/ui/hooks/queries/queryKeys.d.ts +64 -0
- package/dist/web/types/ui/hooks/queries/useAccountQueries.d.ts +42 -0
- package/dist/web/types/ui/hooks/queries/useSecurityQueries.d.ts +14 -0
- package/dist/web/types/ui/hooks/queries/useServicesQueries.d.ts +31 -0
- package/dist/web/types/ui/hooks/queryClient.d.ts +18 -0
- package/dist/web/types/ui/hooks/useAssets.d.ts +34 -0
- package/dist/web/types/ui/hooks/useAsyncAction.d.ts +50 -0
- package/dist/web/types/ui/hooks/useAuth.d.ts +73 -0
- package/dist/web/types/ui/hooks/useColorScheme.d.ts +7 -0
- package/dist/web/types/ui/hooks/useDeviceManagement.d.ts +26 -0
- package/dist/web/types/ui/hooks/useFileDownloadUrl.d.ts +18 -0
- package/dist/web/types/ui/hooks/useFileFiltering.d.ts +28 -0
- package/dist/web/types/ui/hooks/useFollow.d.ts +61 -0
- package/dist/web/types/ui/hooks/useFollow.types.d.ts +32 -0
- package/dist/web/types/ui/hooks/useI18n.d.ts +4 -0
- package/dist/web/types/ui/hooks/useLanguageManagement.d.ts +24 -0
- package/dist/web/types/ui/hooks/useProfileEditing.d.ts +35 -0
- package/dist/web/types/ui/hooks/useQueryClient.d.ts +6 -0
- package/dist/web/types/ui/hooks/useSessionManagement.d.ts +40 -0
- package/dist/web/types/ui/hooks/useSessionSocket.d.ts +13 -0
- package/dist/web/types/ui/hooks/useSettingToggle.d.ts +56 -0
- package/dist/web/types/ui/hooks/useStorage.d.ts +15 -0
- package/dist/web/types/ui/hooks/useThemeColors.d.ts +93 -0
- package/dist/web/types/ui/hooks/useThemeStyles.d.ts +44 -0
- package/dist/web/types/ui/hooks/useWebSSO.d.ts +57 -0
- package/dist/web/types/ui/index.d.ts +7 -0
- package/dist/web/types/ui/isFrontend.d.ts +2 -0
- package/dist/web/types/ui/navigation/bottomSheetManager.d.ts +26 -0
- package/dist/web/types/ui/navigation/routes.d.ts +5 -0
- package/dist/web/types/ui/screens/AccountCenterScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/AccountOverviewScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/AccountSettingsScreen.d.ts +7 -0
- package/dist/web/types/ui/screens/AccountSwitcherScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/AccountVerificationScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/AppInfoScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/EditProfileFieldScreen.d.ts +12 -0
- package/dist/web/types/ui/screens/FAQScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/FeedbackScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/FileManagementScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/FollowersListScreen.d.ts +8 -0
- package/dist/web/types/ui/screens/FollowingListScreen.d.ts +8 -0
- package/dist/web/types/ui/screens/HelpSupportScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/HistoryViewScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/LanguageSelectorScreen.d.ts +6 -0
- package/dist/web/types/ui/screens/LearnMoreUsernamesScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/LegalDocumentsScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/OxyAuthScreen.d.ts +16 -0
- package/dist/web/types/ui/screens/PaymentGatewayScreen.d.ts +14 -0
- package/dist/web/types/ui/screens/PremiumSubscriptionScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/PrivacySettingsScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/ProfileScreen.d.ts +8 -0
- package/dist/web/types/ui/screens/SavesCollectionsScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/SearchSettingsScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/SessionManagementScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/UserLinksScreen.d.ts +14 -0
- package/dist/web/types/ui/screens/UserListScreen.d.ts +10 -0
- package/dist/web/types/ui/screens/WelcomeNewUserScreen.d.ts +12 -0
- package/dist/web/types/ui/screens/karma/KarmaAboutScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/karma/KarmaCenterScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/karma/KarmaFAQScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/karma/KarmaLeaderboardScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/karma/KarmaRewardsScreen.d.ts +4 -0
- package/dist/web/types/ui/screens/karma/KarmaRulesScreen.d.ts +4 -0
- package/dist/web/types/ui/server.d.ts +42 -0
- package/dist/web/types/ui/stores/accountStore.d.ts +33 -0
- package/dist/web/types/ui/stores/assetStore.d.ts +53 -0
- package/dist/web/types/ui/stores/authStore.d.ts +16 -0
- package/dist/web/types/ui/stores/fileStore.d.ts +30 -0
- package/dist/web/types/ui/stores/followStore.d.ts +24 -0
- package/dist/web/types/ui/styles/authStyles.d.ts +331 -0
- package/dist/web/types/ui/styles/fonts.d.ts +20 -0
- package/dist/web/types/ui/styles/index.d.ts +4 -0
- package/dist/web/types/ui/styles/spacing.d.ts +48 -0
- package/dist/web/types/ui/styles/theme.d.ts +67 -0
- package/dist/web/types/ui/types/fileManagement.d.ts +40 -0
- package/dist/web/types/ui/types/navigation.d.ts +36 -0
- package/dist/web/types/ui/utils/authHelpers.d.ts +98 -0
- package/dist/web/types/ui/utils/avatarUtils.d.ts +33 -0
- package/dist/web/types/ui/utils/colorUtils.d.ts +9 -0
- package/dist/web/types/ui/utils/confirmAction.d.ts +6 -0
- package/dist/web/types/ui/utils/errorHandlers.d.ts +34 -0
- package/dist/web/types/ui/utils/fileManagement.d.ts +86 -0
- package/dist/web/types/ui/utils/iconNames.d.ts +111 -0
- package/dist/web/types/ui/utils/sessionHelpers.d.ts +63 -0
- package/dist/web/types/ui/utils/storageHelpers.d.ts +27 -0
- package/dist/web/types/ui/utils/themeUtils.d.ts +10 -0
- package/dist/web/types/ui/utils/userUtils.d.ts +28 -0
- package/dist/web/types/utils/apiUtils.d.ts +53 -0
- package/dist/web/types/utils/asyncUtils.d.ts +58 -0
- package/dist/web/types/utils/cache.d.ts +127 -0
- package/dist/web/types/utils/deviceManager.d.ts +65 -0
- package/dist/web/types/utils/errorUtils.d.ts +46 -0
- package/dist/web/types/utils/hookUtils.d.ts +101 -0
- package/dist/web/types/utils/index.d.ts +6 -0
- package/dist/web/types/utils/languageUtils.d.ts +37 -0
- package/dist/web/types/utils/loggerUtils.d.ts +48 -0
- package/dist/web/types/utils/platform.d.ts +40 -0
- package/dist/web/types/utils/platformInit.d.ts +8 -0
- package/dist/web/types/utils/requestUtils.d.ts +123 -0
- package/dist/web/types/utils/sessionUtils.d.ts +54 -0
- package/dist/web/types/utils/validationUtils.d.ts +85 -0
- package/dist/web/types/web/WebOxyContext.d.ts +151 -0
- package/dist/web/types/web/index.d.ts +52 -0
- package/dist/web/types/web.d.ts +53 -0
- package/package.json +77 -35
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mutation Factory - Creates standardized mutations with optimistic updates
|
|
3
|
+
*
|
|
4
|
+
* This factory reduces boilerplate code for mutations that follow the common pattern:
|
|
5
|
+
* 1. Cancel outgoing queries
|
|
6
|
+
* 2. Snapshot previous data
|
|
7
|
+
* 3. Apply optimistic update
|
|
8
|
+
* 4. On error: rollback and show toast
|
|
9
|
+
* 5. On success: update cache, stores, and invalidate queries
|
|
10
|
+
*/
|
|
11
|
+
import { QueryClient, UseMutationOptions } from '@tanstack/react-query';
|
|
12
|
+
import type { User } from '../../../models/interfaces';
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for creating a standard profile mutation
|
|
15
|
+
*/
|
|
16
|
+
export interface ProfileMutationConfig<TData, TVariables> {
|
|
17
|
+
/** The mutation function that makes the API call */
|
|
18
|
+
mutationFn: (variables: TVariables) => Promise<TData>;
|
|
19
|
+
/** Query keys to cancel before mutation */
|
|
20
|
+
cancelQueryKeys?: unknown[][];
|
|
21
|
+
/** Function to apply optimistic update to the user data */
|
|
22
|
+
optimisticUpdate?: (previousUser: User, variables: TVariables) => Partial<User>;
|
|
23
|
+
/** Error message to show on failure */
|
|
24
|
+
errorMessage?: string | ((error: Error) => string);
|
|
25
|
+
/** Success message to show (optional) */
|
|
26
|
+
successMessage?: string;
|
|
27
|
+
/** Whether to update authStore on success (default: true) */
|
|
28
|
+
updateAuthStore?: boolean;
|
|
29
|
+
/** Whether to invalidate user queries on success (default: true) */
|
|
30
|
+
invalidateUserQueries?: boolean;
|
|
31
|
+
/** Whether to invalidate account queries on success (default: true) */
|
|
32
|
+
invalidateAccountQueries?: boolean;
|
|
33
|
+
/** Custom onSuccess handler */
|
|
34
|
+
onSuccess?: (data: TData, variables: TVariables, queryClient: QueryClient) => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Creates a standard profile mutation with optimistic updates
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* const updateProfile = createProfileMutation({
|
|
42
|
+
* mutationFn: (updates) => oxyServices.updateProfile(updates),
|
|
43
|
+
* optimisticUpdate: (user, updates) => updates,
|
|
44
|
+
* errorMessage: 'Failed to update profile',
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function createProfileMutation<TVariables>(config: ProfileMutationConfig<User, TVariables>, queryClient: QueryClient, activeSessionId: string | null): UseMutationOptions<User, Error, TVariables, {
|
|
49
|
+
previousUser?: User;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Configuration for creating a generic mutation (non-profile)
|
|
53
|
+
*/
|
|
54
|
+
export interface GenericMutationConfig<TData, TVariables, TContext> {
|
|
55
|
+
/** The mutation function */
|
|
56
|
+
mutationFn: (variables: TVariables) => Promise<TData>;
|
|
57
|
+
/** Query key for optimistic data */
|
|
58
|
+
queryKey: unknown[];
|
|
59
|
+
/** Function to create optimistic data */
|
|
60
|
+
optimisticData?: (previous: TData | undefined, variables: TVariables) => TData;
|
|
61
|
+
/** Error message */
|
|
62
|
+
errorMessage?: string;
|
|
63
|
+
/** Success message */
|
|
64
|
+
successMessage?: string;
|
|
65
|
+
/** Additional queries to invalidate on success */
|
|
66
|
+
invalidateQueries?: unknown[][];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Creates a generic mutation with optimistic updates
|
|
70
|
+
*/
|
|
71
|
+
export declare function createGenericMutation<TData, TVariables>(config: GenericMutationConfig<TData, TVariables, {
|
|
72
|
+
previous?: TData;
|
|
73
|
+
}>, queryClient: QueryClient): UseMutationOptions<TData, Error, TVariables, {
|
|
74
|
+
previous?: TData;
|
|
75
|
+
}>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { User } from '../../../models/interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Update user profile with optimistic updates and offline queue support
|
|
4
|
+
*/
|
|
5
|
+
export declare const useUpdateProfile: () => import("@tanstack/react-query").UseMutationResult<User, Error, Partial<User>, {
|
|
6
|
+
previousUser: User | undefined;
|
|
7
|
+
}>;
|
|
8
|
+
/**
|
|
9
|
+
* Upload avatar with progress tracking and offline queue support
|
|
10
|
+
*/
|
|
11
|
+
export declare const useUploadAvatar: () => import("@tanstack/react-query").UseMutationResult<User, Error, {
|
|
12
|
+
uri: string;
|
|
13
|
+
type?: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
size?: number;
|
|
16
|
+
}, {
|
|
17
|
+
previousUser: User | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Update account settings
|
|
21
|
+
*/
|
|
22
|
+
export declare const useUpdateAccountSettings: () => import("@tanstack/react-query").UseMutationResult<any, Error, Record<string, any>, {
|
|
23
|
+
previousUser: User | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Update privacy settings with optimistic updates and authentication handling
|
|
27
|
+
*/
|
|
28
|
+
export declare const useUpdatePrivacySettings: () => import("@tanstack/react-query").UseMutationResult<Record<string, unknown>, Error, {
|
|
29
|
+
settings: Record<string, any>;
|
|
30
|
+
userId?: string;
|
|
31
|
+
}, {
|
|
32
|
+
previousPrivacySettings: unknown;
|
|
33
|
+
previousUser: User | undefined;
|
|
34
|
+
} | undefined>;
|
|
35
|
+
/** Uploaded file data structure from API */
|
|
36
|
+
interface UploadedFile {
|
|
37
|
+
id: string;
|
|
38
|
+
originalName?: string;
|
|
39
|
+
sha256?: string;
|
|
40
|
+
mime?: string;
|
|
41
|
+
size?: number;
|
|
42
|
+
createdAt?: string;
|
|
43
|
+
metadata?: Record<string, unknown>;
|
|
44
|
+
variants?: Array<{
|
|
45
|
+
type: string;
|
|
46
|
+
key: string;
|
|
47
|
+
width?: number;
|
|
48
|
+
height?: number;
|
|
49
|
+
readyAt?: string;
|
|
50
|
+
metadata?: Record<string, unknown>;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
/** Upload result type that supports both single file and batch responses */
|
|
54
|
+
interface UploadResult {
|
|
55
|
+
file?: UploadedFile;
|
|
56
|
+
files?: UploadedFile[];
|
|
57
|
+
id?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Upload file with authentication handling and progress tracking
|
|
61
|
+
*/
|
|
62
|
+
export declare const useUploadFile: () => import("@tanstack/react-query").UseMutationResult<UploadResult, Error, {
|
|
63
|
+
file: File;
|
|
64
|
+
visibility?: "private" | "public" | "unlisted";
|
|
65
|
+
metadata?: Record<string, any>;
|
|
66
|
+
onProgress?: (progress: number) => void;
|
|
67
|
+
}, unknown>;
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Switch active session
|
|
3
|
+
*/
|
|
4
|
+
export declare const useSwitchSession: () => import("@tanstack/react-query").UseMutationResult<void, Error, string, unknown>;
|
|
5
|
+
/**
|
|
6
|
+
* Logout from a session
|
|
7
|
+
*/
|
|
8
|
+
export declare const useLogoutSession: () => import("@tanstack/react-query").UseMutationResult<string, Error, string | undefined, {
|
|
9
|
+
previousSessions: unknown;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* Logout from all sessions
|
|
13
|
+
*/
|
|
14
|
+
export declare const useLogoutAll: () => import("@tanstack/react-query").UseMutationResult<void, Error, void, unknown>;
|
|
15
|
+
/**
|
|
16
|
+
* Update device name
|
|
17
|
+
*/
|
|
18
|
+
export declare const useUpdateDeviceName: () => import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Remove a device
|
|
21
|
+
*/
|
|
22
|
+
export declare const useRemoveDevice: () => import("@tanstack/react-query").UseMutationResult<string, Error, string, unknown>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query hooks for fetching Oxy services data.
|
|
5
|
+
* All hooks follow the same pattern with optional `enabled` parameter.
|
|
6
|
+
*/
|
|
7
|
+
export { useUserProfile, useUserProfiles, useCurrentUser, useUserById, useUserByUsername, useUsersBySessions, usePrivacySettings, } from './useAccountQueries';
|
|
8
|
+
export { useSessions, useSession, useDeviceSessions, useUserDevices, useSecurityInfo, } from './useServicesQueries';
|
|
9
|
+
export { useSecurityActivity, useRecentSecurityActivity, } from './useSecurityQueries';
|
|
10
|
+
export { queryKeys, invalidateAccountQueries, invalidateUserQueries, invalidateSessionQueries } from './queryKeys';
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized query keys for TanStack Query
|
|
3
|
+
*
|
|
4
|
+
* Following best practices:
|
|
5
|
+
* - Use arrays for hierarchical keys
|
|
6
|
+
* - Include all parameters in the key
|
|
7
|
+
* - Use consistent naming conventions
|
|
8
|
+
*/
|
|
9
|
+
export declare const queryKeys: {
|
|
10
|
+
readonly accounts: {
|
|
11
|
+
readonly all: readonly ["accounts"];
|
|
12
|
+
readonly lists: () => readonly ["accounts", "list"];
|
|
13
|
+
readonly list: (sessionIds: string[]) => readonly ["accounts", "list", string[]];
|
|
14
|
+
readonly details: () => readonly ["accounts", "detail"];
|
|
15
|
+
readonly detail: (sessionId: string) => readonly ["accounts", "detail", string];
|
|
16
|
+
readonly current: () => readonly ["accounts", "current"];
|
|
17
|
+
readonly settings: () => readonly ["accounts", "settings"];
|
|
18
|
+
};
|
|
19
|
+
readonly users: {
|
|
20
|
+
readonly all: readonly ["users"];
|
|
21
|
+
readonly lists: () => readonly ["users", "list"];
|
|
22
|
+
readonly list: (userIds: string[]) => readonly ["users", "list", string[]];
|
|
23
|
+
readonly details: () => readonly ["users", "detail"];
|
|
24
|
+
readonly detail: (userId: string) => readonly ["users", "detail", string];
|
|
25
|
+
readonly profile: (sessionId: string) => readonly ["users", "detail", string, "profile"];
|
|
26
|
+
};
|
|
27
|
+
readonly sessions: {
|
|
28
|
+
readonly all: readonly ["sessions"];
|
|
29
|
+
readonly lists: () => readonly ["sessions", "list"];
|
|
30
|
+
readonly list: (userId?: string) => readonly ["sessions", "list", string | undefined];
|
|
31
|
+
readonly details: () => readonly ["sessions", "detail"];
|
|
32
|
+
readonly detail: (sessionId: string) => readonly ["sessions", "detail", string];
|
|
33
|
+
readonly active: () => readonly ["sessions", "active"];
|
|
34
|
+
readonly device: (deviceId: string) => readonly ["sessions", "device", string];
|
|
35
|
+
};
|
|
36
|
+
readonly devices: {
|
|
37
|
+
readonly all: readonly ["devices"];
|
|
38
|
+
readonly lists: () => readonly ["devices", "list"];
|
|
39
|
+
readonly list: (userId?: string) => readonly ["devices", "list", string | undefined];
|
|
40
|
+
readonly details: () => readonly ["devices", "detail"];
|
|
41
|
+
readonly detail: (deviceId: string) => readonly ["devices", "detail", string];
|
|
42
|
+
};
|
|
43
|
+
readonly privacy: {
|
|
44
|
+
readonly all: readonly ["privacy"];
|
|
45
|
+
readonly settings: (userId?: string) => readonly ["privacy", "settings", string];
|
|
46
|
+
};
|
|
47
|
+
readonly security: {
|
|
48
|
+
readonly all: readonly ["security"];
|
|
49
|
+
readonly activity: (limit?: number, offset?: number, eventType?: string) => readonly ["security", "activity", number | undefined, number | undefined, string | undefined];
|
|
50
|
+
readonly recent: (limit: number) => readonly ["security", "recent", number];
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Helper to invalidate all account-related queries
|
|
55
|
+
*/
|
|
56
|
+
export declare const invalidateAccountQueries: (queryClient: any) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Helper to invalidate all user-related queries
|
|
59
|
+
*/
|
|
60
|
+
export declare const invalidateUserQueries: (queryClient: any) => void;
|
|
61
|
+
/**
|
|
62
|
+
* Helper to invalidate all session-related queries
|
|
63
|
+
*/
|
|
64
|
+
export declare const invalidateSessionQueries: (queryClient: any) => void;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get user profile by session ID
|
|
3
|
+
*/
|
|
4
|
+
export declare const useUserProfile: (sessionId: string | null, options?: {
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
7
|
+
/**
|
|
8
|
+
* Get multiple user profiles by session IDs (batch query)
|
|
9
|
+
*/
|
|
10
|
+
export declare const useUserProfiles: (sessionIds: string[], options?: {
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>[];
|
|
13
|
+
/**
|
|
14
|
+
* Get current authenticated user
|
|
15
|
+
*/
|
|
16
|
+
export declare const useCurrentUser: (options?: {
|
|
17
|
+
enabled?: boolean;
|
|
18
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
19
|
+
/**
|
|
20
|
+
* Get user by ID
|
|
21
|
+
*/
|
|
22
|
+
export declare const useUserById: (userId: string | null, options?: {
|
|
23
|
+
enabled?: boolean;
|
|
24
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
25
|
+
/**
|
|
26
|
+
* Get user profile by username
|
|
27
|
+
*/
|
|
28
|
+
export declare const useUserByUsername: (username: string | null, options?: {
|
|
29
|
+
enabled?: boolean;
|
|
30
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
31
|
+
/**
|
|
32
|
+
* Batch get users by session IDs (optimized single API call)
|
|
33
|
+
*/
|
|
34
|
+
export declare const useUsersBySessions: (sessionIds: string[], options?: {
|
|
35
|
+
enabled?: boolean;
|
|
36
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
37
|
+
/**
|
|
38
|
+
* Get privacy settings for a user
|
|
39
|
+
*/
|
|
40
|
+
export declare const usePrivacySettings: (userId?: string, options?: {
|
|
41
|
+
enabled?: boolean;
|
|
42
|
+
}) => import("@tanstack/react-query").UseQueryResult<unknown, Error>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SecurityActivity, SecurityEventType } from '../../../models/interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Get user's security activity with pagination
|
|
4
|
+
*/
|
|
5
|
+
export declare const useSecurityActivity: (options?: {
|
|
6
|
+
limit?: number;
|
|
7
|
+
offset?: number;
|
|
8
|
+
eventType?: SecurityEventType;
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
11
|
+
/**
|
|
12
|
+
* Get recent security activity (convenience hook)
|
|
13
|
+
*/
|
|
14
|
+
export declare const useRecentSecurityActivity: (limit?: number) => import("@tanstack/react-query").UseQueryResult<SecurityActivity[], Error>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ClientSession } from '../../../models/session';
|
|
2
|
+
/**
|
|
3
|
+
* Get all active sessions for the current user
|
|
4
|
+
*/
|
|
5
|
+
export declare const useSessions: (userId?: string, options?: {
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
}) => import("@tanstack/react-query").UseQueryResult<ClientSession[], Error>;
|
|
8
|
+
/**
|
|
9
|
+
* Get specific session by ID
|
|
10
|
+
*/
|
|
11
|
+
export declare const useSession: (sessionId: string | null, options?: {
|
|
12
|
+
enabled?: boolean;
|
|
13
|
+
}) => import("@tanstack/react-query").UseQueryResult<ClientSession, Error>;
|
|
14
|
+
/**
|
|
15
|
+
* Get device sessions for the current active session
|
|
16
|
+
*/
|
|
17
|
+
export declare const useDeviceSessions: (options?: {
|
|
18
|
+
enabled?: boolean;
|
|
19
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
20
|
+
/**
|
|
21
|
+
* Get user devices
|
|
22
|
+
*/
|
|
23
|
+
export declare const useUserDevices: (options?: {
|
|
24
|
+
enabled?: boolean;
|
|
25
|
+
}) => import("@tanstack/react-query").UseQueryResult<unknown, Error>;
|
|
26
|
+
/**
|
|
27
|
+
* Get security information
|
|
28
|
+
*/
|
|
29
|
+
export declare const useSecurityInfo: (options?: {
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
}) => import("@tanstack/react-query").UseQueryResult<any, Error>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
2
|
+
import type { StorageInterface } from '../utils/storageHelpers';
|
|
3
|
+
/**
|
|
4
|
+
* Custom persistence adapter for TanStack Query using our StorageInterface
|
|
5
|
+
*/
|
|
6
|
+
export declare const createPersistenceAdapter: (storage: StorageInterface) => {
|
|
7
|
+
persistClient: (client: any) => Promise<void>;
|
|
8
|
+
restoreClient: () => Promise<any>;
|
|
9
|
+
removeClient: () => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Create a QueryClient with offline-first configuration
|
|
13
|
+
*/
|
|
14
|
+
export declare const createQueryClient: (storage?: StorageInterface | null) => QueryClient;
|
|
15
|
+
/**
|
|
16
|
+
* Clear persisted query cache
|
|
17
|
+
*/
|
|
18
|
+
export declare const clearQueryCache: (storage: StorageInterface) => Promise<void>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { OxyServices } from '../../core/OxyServices';
|
|
2
|
+
import { Asset, AssetUploadProgress } from '../../models/interfaces';
|
|
3
|
+
export declare const setOxyAssetInstance: (instance: OxyServices) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Hook for managing assets with Zustand store integration
|
|
6
|
+
*/
|
|
7
|
+
export declare const useAssets: () => {
|
|
8
|
+
assets: Asset[];
|
|
9
|
+
uploadProgress: Record<string, AssetUploadProgress>;
|
|
10
|
+
loading: {
|
|
11
|
+
uploading: boolean;
|
|
12
|
+
linking: boolean;
|
|
13
|
+
deleting: boolean;
|
|
14
|
+
};
|
|
15
|
+
errors: {
|
|
16
|
+
upload?: string;
|
|
17
|
+
link?: string;
|
|
18
|
+
delete?: string;
|
|
19
|
+
};
|
|
20
|
+
upload: (file: File, metadata?: Record<string, any>) => Promise<Asset | null>;
|
|
21
|
+
link: (assetId: string, app: string, entityType: string, entityId: string) => Promise<void>;
|
|
22
|
+
unlink: (assetId: string, app: string, entityType: string, entityId: string) => Promise<void>;
|
|
23
|
+
getUrl: (assetId: string, variant?: string, expiresIn?: number) => Promise<string>;
|
|
24
|
+
getAsset: (assetId: string) => Promise<Asset>;
|
|
25
|
+
deleteAsset: (assetId: string, force?: boolean) => Promise<void>;
|
|
26
|
+
restore: (assetId: string) => Promise<void>;
|
|
27
|
+
getVariants: (assetId: string) => Promise<any>;
|
|
28
|
+
getAssetsByApp: (app: string) => Asset[];
|
|
29
|
+
getAssetsByEntity: (app: string, entityType: string, entityId: string) => Asset[];
|
|
30
|
+
getAssetUsageCount: (assetId: string) => number;
|
|
31
|
+
isAssetLinked: (assetId: string, app: string, entityType: string, entityId: string) => boolean;
|
|
32
|
+
clearErrors: () => void;
|
|
33
|
+
reset: () => void;
|
|
34
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
interface UseAsyncActionOptions<T> {
|
|
2
|
+
/** Function to execute */
|
|
3
|
+
action: () => Promise<T>;
|
|
4
|
+
/** Success message to display */
|
|
5
|
+
successMessage?: string;
|
|
6
|
+
/** Error message to display (or function to get message from error) */
|
|
7
|
+
errorMessage?: string | ((error: any) => string);
|
|
8
|
+
/** Callback on success */
|
|
9
|
+
onSuccess?: (result: T) => void;
|
|
10
|
+
/** Callback on error */
|
|
11
|
+
onError?: (error: any) => void;
|
|
12
|
+
/** Show loading toast */
|
|
13
|
+
showLoadingToast?: boolean;
|
|
14
|
+
/** Loading message */
|
|
15
|
+
loadingMessage?: string;
|
|
16
|
+
}
|
|
17
|
+
interface UseAsyncActionReturn<T> {
|
|
18
|
+
/** Execute the action */
|
|
19
|
+
execute: () => Promise<T | undefined>;
|
|
20
|
+
/** Whether the action is currently executing */
|
|
21
|
+
isLoading: boolean;
|
|
22
|
+
/** The last error that occurred */
|
|
23
|
+
error: Error | null;
|
|
24
|
+
/** Reset the error state */
|
|
25
|
+
resetError: () => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Hook for handling async actions with loading state, error handling, and toast notifications.
|
|
29
|
+
* Reduces boilerplate for common patterns like try-catch with toast feedback.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* const { execute, isLoading } = useAsyncAction({
|
|
33
|
+
* action: () => api.saveSettings(settings),
|
|
34
|
+
* successMessage: 'Settings saved!',
|
|
35
|
+
* errorMessage: 'Failed to save settings',
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* <Button onPress={execute} disabled={isLoading}>Save</Button>
|
|
39
|
+
*/
|
|
40
|
+
export declare function useAsyncAction<T = void>(options: UseAsyncActionOptions<T>): UseAsyncActionReturn<T>;
|
|
41
|
+
/**
|
|
42
|
+
* Simplified version that just executes an async action with toast feedback.
|
|
43
|
+
* Useful for one-off actions.
|
|
44
|
+
*/
|
|
45
|
+
export declare function executeWithToast<T>(action: () => Promise<T>, options?: {
|
|
46
|
+
successMessage?: string;
|
|
47
|
+
errorMessage?: string;
|
|
48
|
+
loadingMessage?: string;
|
|
49
|
+
}): Promise<T | undefined>;
|
|
50
|
+
export default useAsyncAction;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Auth Hook
|
|
3
|
+
*
|
|
4
|
+
* Provides a clean, standard interface for authentication across all platforms.
|
|
5
|
+
* This is the recommended way to access auth state in Oxy apps.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import { useAuth } from '@oxyhq/services';
|
|
10
|
+
*
|
|
11
|
+
* function MyComponent() {
|
|
12
|
+
* const { user, isAuthenticated, isLoading, signIn, signOut } = useAuth();
|
|
13
|
+
*
|
|
14
|
+
* if (isLoading) return <Loading />;
|
|
15
|
+
* if (!isAuthenticated) return <SignInButton onClick={() => signIn()} />;
|
|
16
|
+
* return <Welcome user={user} />;
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* Cross-domain SSO:
|
|
21
|
+
* - Web: Automatic via FedCM (Chrome 108+, Safari 16.4+)
|
|
22
|
+
* - Native: Automatic via shared Keychain/Account Manager
|
|
23
|
+
* - Manual sign-in: signIn() opens popup (web) or auth sheet (native)
|
|
24
|
+
*/
|
|
25
|
+
import { useOxy } from '../context/OxyContext';
|
|
26
|
+
import type { User } from '../../models/interfaces';
|
|
27
|
+
export interface AuthState {
|
|
28
|
+
/** Current authenticated user, null if not authenticated */
|
|
29
|
+
user: User | null;
|
|
30
|
+
/** Whether user is authenticated */
|
|
31
|
+
isAuthenticated: boolean;
|
|
32
|
+
/** Whether auth state is being determined (initial load) */
|
|
33
|
+
isLoading: boolean;
|
|
34
|
+
/** Whether the auth token is ready for API calls */
|
|
35
|
+
isReady: boolean;
|
|
36
|
+
/** Current error message, if any */
|
|
37
|
+
error: string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface AuthActions {
|
|
40
|
+
/**
|
|
41
|
+
* Sign in
|
|
42
|
+
* - Web: Opens popup to auth.oxy.so (no public key needed)
|
|
43
|
+
* - Native: Uses cryptographic identity from keychain
|
|
44
|
+
*/
|
|
45
|
+
signIn: (publicKey?: string) => Promise<User>;
|
|
46
|
+
/**
|
|
47
|
+
* Sign out current session
|
|
48
|
+
*/
|
|
49
|
+
signOut: () => Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Sign out all sessions across all devices
|
|
52
|
+
*/
|
|
53
|
+
signOutAll: () => Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Refresh auth state (re-check session validity)
|
|
56
|
+
*/
|
|
57
|
+
refresh: () => Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
export interface UseAuthReturn extends AuthState, AuthActions {
|
|
60
|
+
/** Access to full OxyServices instance for advanced usage */
|
|
61
|
+
oxyServices: ReturnType<typeof useOxy>['oxyServices'];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Unified auth hook for all Oxy apps
|
|
65
|
+
*
|
|
66
|
+
* Features:
|
|
67
|
+
* - Zero config: Just wrap with OxyProvider and use
|
|
68
|
+
* - Cross-platform: Same API on native and web
|
|
69
|
+
* - Auto SSO: Web apps automatically check for cross-domain sessions
|
|
70
|
+
* - Type-safe: Full TypeScript support
|
|
71
|
+
*/
|
|
72
|
+
export declare function useAuth(): UseAuthReturn;
|
|
73
|
+
export { useOxy } from '../context/OxyContext';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to get the current color scheme (theme).
|
|
3
|
+
* Returns the resolved theme from ThemeContext if available, otherwise falls back to React Native's useColorScheme.
|
|
4
|
+
*
|
|
5
|
+
* Always calls hooks in the same order to maintain React hook rules.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useColorScheme(): 'light' | 'dark';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ApiError } from '../../models/interfaces';
|
|
2
|
+
import type { OxyServices } from '../../core';
|
|
3
|
+
export interface UseDeviceManagementOptions {
|
|
4
|
+
oxyServices: OxyServices;
|
|
5
|
+
activeSessionId: string | null;
|
|
6
|
+
onError?: (error: ApiError) => void;
|
|
7
|
+
clearSessionState: () => Promise<void>;
|
|
8
|
+
logger?: (message: string, error?: unknown) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface UseDeviceManagementResult {
|
|
11
|
+
getDeviceSessions: () => Promise<Array<{
|
|
12
|
+
sessionId: string;
|
|
13
|
+
deviceId: string;
|
|
14
|
+
deviceName?: string;
|
|
15
|
+
lastActive?: string;
|
|
16
|
+
expiresAt?: string;
|
|
17
|
+
}>>;
|
|
18
|
+
logoutAllDeviceSessions: () => Promise<void>;
|
|
19
|
+
updateDeviceName: (deviceName: string) => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Provide device session management helpers tied to the current active session.
|
|
23
|
+
*
|
|
24
|
+
* @param options - Device management configuration
|
|
25
|
+
*/
|
|
26
|
+
export declare const useDeviceManagement: ({ oxyServices, activeSessionId, onError, clearSessionState, logger, }: UseDeviceManagementOptions) => UseDeviceManagementResult;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { OxyServices } from '../../core/OxyServices';
|
|
2
|
+
export declare const setOxyFileUrlInstance: (instance: OxyServices) => void;
|
|
3
|
+
export interface UseFileDownloadUrlOptions {
|
|
4
|
+
variant?: string;
|
|
5
|
+
expiresIn?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface UseFileDownloadUrlResult {
|
|
8
|
+
url: string | null;
|
|
9
|
+
loading: boolean;
|
|
10
|
+
error: Error | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Hook to resolve a file's download URL asynchronously.
|
|
14
|
+
*
|
|
15
|
+
* Prefers `getFileDownloadUrlAsync` and falls back to the synchronous
|
|
16
|
+
* `getFileDownloadUrl` helper if the async call fails.
|
|
17
|
+
*/
|
|
18
|
+
export declare const useFileDownloadUrl: (fileId?: string | null, options?: UseFileDownloadUrlOptions) => UseFileDownloadUrlResult;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { FileMetadata } from '../../models/interfaces';
|
|
2
|
+
export type ViewMode = 'all' | 'photos' | 'videos' | 'documents' | 'audio';
|
|
3
|
+
export type SortBy = 'date' | 'size' | 'name' | 'type';
|
|
4
|
+
export type SortOrder = 'asc' | 'desc';
|
|
5
|
+
interface UseFileFilteringOptions {
|
|
6
|
+
files: FileMetadata[];
|
|
7
|
+
initialViewMode?: ViewMode;
|
|
8
|
+
initialSortBy?: SortBy;
|
|
9
|
+
initialSortOrder?: SortOrder;
|
|
10
|
+
}
|
|
11
|
+
interface UseFileFilteringReturn {
|
|
12
|
+
filteredFiles: FileMetadata[];
|
|
13
|
+
viewMode: ViewMode;
|
|
14
|
+
setViewMode: (mode: ViewMode) => void;
|
|
15
|
+
searchQuery: string;
|
|
16
|
+
setSearchQuery: (query: string) => void;
|
|
17
|
+
sortBy: SortBy;
|
|
18
|
+
setSortBy: (sort: SortBy) => void;
|
|
19
|
+
sortOrder: SortOrder;
|
|
20
|
+
setSortOrder: (order: SortOrder) => void;
|
|
21
|
+
toggleSortOrder: () => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Hook for file filtering, sorting, and search functionality
|
|
25
|
+
* Extracts common file management logic for reuse across components
|
|
26
|
+
*/
|
|
27
|
+
export declare function useFileFiltering({ files, initialViewMode, initialSortBy, initialSortOrder, }: UseFileFilteringOptions): UseFileFilteringReturn;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare const useFollow: (userId?: string | string[]) => {
|
|
2
|
+
isFollowing: boolean;
|
|
3
|
+
isLoading: boolean;
|
|
4
|
+
error: string | null;
|
|
5
|
+
toggleFollow: () => Promise<void>;
|
|
6
|
+
setFollowStatus: (following: boolean) => void;
|
|
7
|
+
fetchStatus: () => Promise<void>;
|
|
8
|
+
clearError: () => void;
|
|
9
|
+
followerCount: number | null;
|
|
10
|
+
followingCount: number | null;
|
|
11
|
+
isLoadingCounts: boolean;
|
|
12
|
+
fetchUserCounts: () => Promise<void>;
|
|
13
|
+
setFollowerCount: (count: number) => void;
|
|
14
|
+
setFollowingCount: (count: number) => void;
|
|
15
|
+
followData?: undefined;
|
|
16
|
+
toggleFollowForUser?: undefined;
|
|
17
|
+
setFollowStatusForUser?: undefined;
|
|
18
|
+
fetchStatusForUser?: undefined;
|
|
19
|
+
fetchAllStatuses?: undefined;
|
|
20
|
+
clearErrorForUser?: undefined;
|
|
21
|
+
isAnyLoading?: undefined;
|
|
22
|
+
hasAnyError?: undefined;
|
|
23
|
+
allFollowing?: undefined;
|
|
24
|
+
allNotFollowing?: undefined;
|
|
25
|
+
} | {
|
|
26
|
+
followData: Record<string, {
|
|
27
|
+
isFollowing: boolean;
|
|
28
|
+
isLoading: boolean;
|
|
29
|
+
error: string | null;
|
|
30
|
+
}>;
|
|
31
|
+
toggleFollowForUser: (targetUserId: string) => Promise<void>;
|
|
32
|
+
setFollowStatusForUser: (targetUserId: string, following: boolean) => void;
|
|
33
|
+
fetchStatusForUser: (targetUserId: string) => Promise<void>;
|
|
34
|
+
fetchAllStatuses: () => Promise<void>;
|
|
35
|
+
clearErrorForUser: (targetUserId: string) => void;
|
|
36
|
+
isAnyLoading: boolean;
|
|
37
|
+
hasAnyError: boolean;
|
|
38
|
+
allFollowing: boolean;
|
|
39
|
+
allNotFollowing: boolean;
|
|
40
|
+
isFollowing?: undefined;
|
|
41
|
+
isLoading?: undefined;
|
|
42
|
+
error?: undefined;
|
|
43
|
+
toggleFollow?: undefined;
|
|
44
|
+
setFollowStatus?: undefined;
|
|
45
|
+
fetchStatus?: undefined;
|
|
46
|
+
clearError?: undefined;
|
|
47
|
+
followerCount?: undefined;
|
|
48
|
+
followingCount?: undefined;
|
|
49
|
+
isLoadingCounts?: undefined;
|
|
50
|
+
fetchUserCounts?: undefined;
|
|
51
|
+
setFollowerCount?: undefined;
|
|
52
|
+
setFollowingCount?: undefined;
|
|
53
|
+
};
|
|
54
|
+
export declare const useFollowerCounts: (userId: string) => {
|
|
55
|
+
followerCount: number;
|
|
56
|
+
followingCount: number;
|
|
57
|
+
isLoadingCounts: boolean;
|
|
58
|
+
fetchUserCounts: () => Promise<void>;
|
|
59
|
+
setFollowerCount: (count: number) => void;
|
|
60
|
+
setFollowingCount: (count: number) => void;
|
|
61
|
+
};
|