@oxyhq/services 5.7.5 → 5.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -76
- package/lib/commonjs/core/index.js +177 -102
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/index.js +88 -29
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/node/createAuth.js +585 -7
- package/lib/commonjs/node/createAuth.js.map +1 -1
- package/lib/commonjs/node/index.js +38 -1
- package/lib/commonjs/node/index.js.map +1 -1
- package/lib/commonjs/ui/components/Avatar.js +15 -6
- package/lib/commonjs/ui/components/Avatar.js.map +1 -1
- package/lib/commonjs/ui/components/GroupedItem.js +58 -13
- package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
- package/lib/commonjs/ui/components/GroupedSection.js +7 -1
- package/lib/commonjs/ui/components/GroupedSection.js.map +1 -1
- package/lib/commonjs/ui/components/Header.js +322 -0
- package/lib/commonjs/ui/components/Header.js.map +1 -0
- package/lib/commonjs/ui/components/OxyProvider.js +23 -7
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/index.js +7 -0
- package/lib/commonjs/ui/components/index.js.map +1 -1
- package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +1 -1
- package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -1
- package/lib/commonjs/ui/components/internal/TextField.js +606 -546
- package/lib/commonjs/ui/components/internal/TextField.js.map +1 -1
- package/lib/commonjs/ui/components/internal/TextField.md +436 -0
- package/lib/commonjs/ui/context/OxyContext.js +122 -78
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionSocket.js +5 -2
- package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/commonjs/ui/navigation/OxyRouter.js +1 -1
- package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +6 -6
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountManagementDemo.js +3 -3
- package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +241 -598
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +1151 -406
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +135 -237
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AppInfoScreen.js +246 -463
- package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FeedbackScreen.js +3 -3
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +808 -650
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/RecoverAccountScreen.js +51 -72
- package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SessionManagementScreen.js +11 -29
- package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SignInScreen.js +30 -303
- package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SignUpScreen.js +4 -4
- package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +19 -31
- package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -1
- package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +7 -10
- package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
- package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js +11 -5
- package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
- package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js +11 -4
- package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
- package/lib/commonjs/ui/stores/authStore.js +12 -0
- package/lib/commonjs/ui/stores/authStore.js.map +1 -1
- package/lib/commonjs/ui/styles/authStyles.js +337 -0
- package/lib/commonjs/ui/styles/authStyles.js.map +1 -0
- package/lib/commonjs/ui/styles/index.js +11 -0
- package/lib/commonjs/ui/styles/index.js.map +1 -1
- package/lib/module/core/index.js +177 -41
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/index.js +26 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/node/createAuth.js +584 -7
- package/lib/module/node/createAuth.js.map +1 -1
- package/lib/module/node/index.js +7 -1
- package/lib/module/node/index.js.map +1 -1
- package/lib/module/ui/components/Avatar.js +15 -6
- package/lib/module/ui/components/Avatar.js.map +1 -1
- package/lib/module/ui/components/GroupedItem.js +59 -14
- package/lib/module/ui/components/GroupedItem.js.map +1 -1
- package/lib/module/ui/components/GroupedSection.js +7 -1
- package/lib/module/ui/components/GroupedSection.js.map +1 -1
- package/lib/module/ui/components/Header.js +317 -0
- package/lib/module/ui/components/Header.js.map +1 -0
- package/lib/module/ui/components/OxyProvider.js +25 -9
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/index.js +1 -0
- package/lib/module/ui/components/index.js.map +1 -1
- package/lib/module/ui/components/internal/GroupedPillButtons.js +1 -1
- package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -1
- package/lib/module/ui/components/internal/TextField.js +607 -547
- package/lib/module/ui/components/internal/TextField.js.map +1 -1
- package/lib/module/ui/components/internal/TextField.md +436 -0
- package/lib/module/ui/context/OxyContext.js +121 -77
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/hooks/useSessionSocket.js +5 -2
- package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/module/ui/navigation/OxyRouter.js +1 -1
- package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +6 -6
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountManagementDemo.js +3 -3
- package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +242 -597
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +1152 -407
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +135 -237
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/AppInfoScreen.js +248 -465
- package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/module/ui/screens/FeedbackScreen.js +3 -3
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/PaymentGatewayScreen.js +809 -651
- package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
- package/lib/module/ui/screens/RecoverAccountScreen.js +53 -74
- package/lib/module/ui/screens/RecoverAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/SessionManagementScreen.js +11 -29
- package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/SignInScreen.js +32 -305
- package/lib/module/ui/screens/SignInScreen.js.map +1 -1
- package/lib/module/ui/screens/SignUpScreen.js +5 -5
- package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
- package/lib/module/ui/screens/internal/SignInPasswordStep.js +19 -31
- package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -1
- package/lib/module/ui/screens/internal/SignInUsernameStep.js +7 -10
- package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
- package/lib/module/ui/screens/internal/SignUpIdentityStep.js +11 -5
- package/lib/module/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
- package/lib/module/ui/screens/internal/SignUpSecurityStep.js +11 -4
- package/lib/module/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
- package/lib/module/ui/stores/authStore.js +12 -0
- package/lib/module/ui/stores/authStore.js.map +1 -1
- package/lib/module/ui/styles/authStyles.js +332 -0
- package/lib/module/ui/styles/authStyles.js.map +1 -0
- package/lib/module/ui/styles/index.js +1 -0
- package/lib/module/ui/styles/index.js.map +1 -1
- package/lib/typescript/core/index.d.ts +68 -24
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +13 -3
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/node/createAuth.d.ts +112 -0
- package/lib/typescript/node/createAuth.d.ts.map +1 -1
- package/lib/typescript/node/index.d.ts +2 -0
- package/lib/typescript/node/index.d.ts.map +1 -1
- package/lib/typescript/ui/components/Avatar.d.ts.map +1 -1
- package/lib/typescript/ui/components/GroupedItem.d.ts +6 -0
- package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
- package/lib/typescript/ui/components/GroupedSection.d.ts +6 -0
- package/lib/typescript/ui/components/GroupedSection.d.ts.map +1 -1
- package/lib/typescript/ui/components/Header.d.ts +22 -0
- package/lib/typescript/ui/components/Header.d.ts.map +1 -0
- package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/ui/components/index.d.ts +1 -0
- package/lib/typescript/ui/components/index.d.ts.map +1 -1
- package/lib/typescript/ui/components/internal/TextField.d.ts +31 -16
- package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts +5 -2
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
- package/lib/typescript/ui/navigation/types.d.ts +9 -2
- package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +5 -1
- package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts +1 -1
- package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts +0 -1
- package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts.map +1 -1
- package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
- package/lib/typescript/ui/styles/authStyles.d.ts +326 -0
- package/lib/typescript/ui/styles/authStyles.d.ts.map +1 -0
- package/lib/typescript/ui/styles/index.d.ts +1 -0
- package/lib/typescript/ui/styles/index.d.ts.map +1 -1
- package/package.json +1 -4
- package/src/core/index.ts +195 -41
- package/src/index.ts +72 -4
- package/src/node/createAuth.ts +623 -7
- package/src/node/index.ts +19 -1
- package/src/ui/components/Avatar.tsx +11 -5
- package/src/ui/components/GroupedItem.tsx +57 -9
- package/src/ui/components/GroupedSection.tsx +12 -0
- package/src/ui/components/Header.tsx +364 -0
- package/src/ui/components/OxyProvider.tsx +31 -15
- package/src/ui/components/index.ts +1 -0
- package/src/ui/components/internal/GroupedPillButtons.tsx +1 -1
- package/src/ui/components/internal/TextField.md +436 -0
- package/src/ui/components/internal/TextField.tsx +720 -620
- package/src/ui/context/OxyContext.tsx +150 -63
- package/src/ui/hooks/useSessionSocket.ts +5 -2
- package/src/ui/navigation/OxyRouter.tsx +1 -1
- package/src/ui/navigation/types.ts +10 -2
- package/src/ui/screens/AccountCenterScreen.tsx +5 -5
- package/src/ui/screens/AccountManagementDemo.tsx +9 -9
- package/src/ui/screens/AccountOverviewScreen.tsx +265 -414
- package/src/ui/screens/AccountSettingsScreen.tsx +1165 -403
- package/src/ui/screens/AccountSwitcherScreen.tsx +158 -202
- package/src/ui/screens/AppInfoScreen.tsx +270 -497
- package/src/ui/screens/FeedbackScreen.tsx +3 -3
- package/src/ui/screens/PaymentGatewayScreen.tsx +668 -365
- package/src/ui/screens/ProfileScreen.tsx +5 -5
- package/src/ui/screens/RecoverAccountScreen.tsx +46 -74
- package/src/ui/screens/SessionManagementScreen.tsx +14 -22
- package/src/ui/screens/SignInScreen.tsx +27 -294
- package/src/ui/screens/SignUpScreen.tsx +5 -5
- package/src/ui/screens/internal/SignInPasswordStep.tsx +11 -22
- package/src/ui/screens/internal/SignInUsernameStep.tsx +3 -10
- package/src/ui/screens/internal/SignUpIdentityStep.tsx +2 -5
- package/src/ui/screens/internal/SignUpSecurityStep.tsx +3 -4
- package/src/ui/stores/authStore.ts +12 -0
- package/src/ui/styles/authStyles.ts +352 -0
- package/src/ui/styles/index.ts +1 -0
- package/lib/commonjs/core/auth-manager.js +0 -440
- package/lib/commonjs/core/auth-manager.js.map +0 -1
- package/lib/commonjs/core/use-auth.js +0 -244
- package/lib/commonjs/core/use-auth.js.map +0 -1
- package/lib/module/core/auth-manager.js +0 -432
- package/lib/module/core/auth-manager.js.map +0 -1
- package/lib/module/core/use-auth.js +0 -235
- package/lib/module/core/use-auth.js.map +0 -1
- package/lib/typescript/core/auth-manager.d.ts +0 -136
- package/lib/typescript/core/auth-manager.d.ts.map +0 -1
- package/lib/typescript/core/use-auth.d.ts +0 -79
- package/lib/typescript/core/use-auth.d.ts.map +0 -1
- package/src/__tests__/middleware.test.ts +0 -105
- package/src/__tests__/setup.ts +0 -10
- package/src/__tests__/zero-config-auth.test.ts +0 -607
- package/src/core/auth-manager.ts +0 -500
- package/src/core/use-auth.tsx +0 -245
package/src/core/use-auth.tsx
DELETED
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zero-Config Authentication Hook for React/React Native
|
|
3
|
-
*
|
|
4
|
-
* Provides automatic authentication state management with minimal setup required.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { useState, useEffect, useCallback, useContext, createContext, ReactNode } from 'react';
|
|
8
|
-
import { AuthenticationManager, getAuthManager, initializeAuth } from './auth-manager';
|
|
9
|
-
|
|
10
|
-
interface AuthState {
|
|
11
|
-
isAuthenticated: boolean;
|
|
12
|
-
isLoading: boolean;
|
|
13
|
-
user: any | null;
|
|
14
|
-
error: string | null;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
interface AuthContextValue extends AuthState {
|
|
18
|
-
login: (username: string, password: string) => Promise<void>;
|
|
19
|
-
register: (username: string, email: string, password: string) => Promise<void>;
|
|
20
|
-
logout: () => Promise<void>;
|
|
21
|
-
getCurrentUser: () => Promise<any>;
|
|
22
|
-
checkUsernameAvailability: (username: string) => Promise<{ available: boolean; message: string }>;
|
|
23
|
-
checkEmailAvailability: (email: string) => Promise<{ available: boolean; message: string }>;
|
|
24
|
-
clearError: () => void;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const AuthContext = createContext<AuthContextValue | null>(null);
|
|
28
|
-
|
|
29
|
-
interface AuthProviderProps {
|
|
30
|
-
children: ReactNode;
|
|
31
|
-
baseURL?: string;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Authentication Provider Component
|
|
36
|
-
*
|
|
37
|
-
* Wrap your app with this provider to enable zero-config authentication.
|
|
38
|
-
* All authentication state will be automatically managed.
|
|
39
|
-
*/
|
|
40
|
-
export function AuthProvider({ children, baseURL = 'https://api.oxy.so' }: AuthProviderProps) {
|
|
41
|
-
const [state, setState] = useState<AuthState>({
|
|
42
|
-
isAuthenticated: false,
|
|
43
|
-
isLoading: true,
|
|
44
|
-
user: null,
|
|
45
|
-
error: null,
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
const authManager = initializeAuth(baseURL);
|
|
49
|
-
|
|
50
|
-
// Update state when auth manager state changes
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
const unsubscribe = authManager.onAuthStateChange((authState) => {
|
|
53
|
-
setState(prevState => ({
|
|
54
|
-
...prevState,
|
|
55
|
-
isAuthenticated: authState.isAuthenticated,
|
|
56
|
-
user: authState.user,
|
|
57
|
-
isLoading: false,
|
|
58
|
-
}));
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
return unsubscribe;
|
|
62
|
-
}, [authManager]);
|
|
63
|
-
|
|
64
|
-
const login = useCallback(async (username: string, password: string) => {
|
|
65
|
-
setState(prev => ({ ...prev, isLoading: true, error: null }));
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
await authManager.login({ username, password });
|
|
69
|
-
// State will be updated via the auth state change listener
|
|
70
|
-
} catch (error) {
|
|
71
|
-
setState(prev => ({
|
|
72
|
-
...prev,
|
|
73
|
-
isLoading: false,
|
|
74
|
-
error: error instanceof Error ? error.message : 'Login failed',
|
|
75
|
-
}));
|
|
76
|
-
throw error;
|
|
77
|
-
}
|
|
78
|
-
}, [authManager]);
|
|
79
|
-
|
|
80
|
-
const register = useCallback(async (username: string, email: string, password: string) => {
|
|
81
|
-
setState(prev => ({ ...prev, isLoading: true, error: null }));
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
await authManager.register({ username, email, password });
|
|
85
|
-
// State will be updated via the auth state change listener
|
|
86
|
-
} catch (error) {
|
|
87
|
-
setState(prev => ({
|
|
88
|
-
...prev,
|
|
89
|
-
isLoading: false,
|
|
90
|
-
error: error instanceof Error ? error.message : 'Registration failed',
|
|
91
|
-
}));
|
|
92
|
-
throw error;
|
|
93
|
-
}
|
|
94
|
-
}, [authManager]);
|
|
95
|
-
|
|
96
|
-
const logout = useCallback(async () => {
|
|
97
|
-
setState(prev => ({ ...prev, isLoading: true, error: null }));
|
|
98
|
-
|
|
99
|
-
try {
|
|
100
|
-
await authManager.logout();
|
|
101
|
-
// State will be updated via the auth state change listener
|
|
102
|
-
} catch (error) {
|
|
103
|
-
console.error('Logout error:', error);
|
|
104
|
-
setState(prev => ({
|
|
105
|
-
...prev,
|
|
106
|
-
isLoading: false,
|
|
107
|
-
error: error instanceof Error ? error.message : 'Logout failed',
|
|
108
|
-
}));
|
|
109
|
-
}
|
|
110
|
-
}, [authManager]);
|
|
111
|
-
|
|
112
|
-
const getCurrentUser = useCallback(async () => {
|
|
113
|
-
try {
|
|
114
|
-
return await authManager.getCurrentUser();
|
|
115
|
-
} catch (error) {
|
|
116
|
-
setState(prev => ({
|
|
117
|
-
...prev,
|
|
118
|
-
error: error instanceof Error ? error.message : 'Failed to get current user',
|
|
119
|
-
}));
|
|
120
|
-
throw error;
|
|
121
|
-
}
|
|
122
|
-
}, [authManager]);
|
|
123
|
-
|
|
124
|
-
const checkUsernameAvailability = useCallback(async (username: string) => {
|
|
125
|
-
return await authManager.checkUsernameAvailability(username);
|
|
126
|
-
}, [authManager]);
|
|
127
|
-
|
|
128
|
-
const checkEmailAvailability = useCallback(async (email: string) => {
|
|
129
|
-
return await authManager.checkEmailAvailability(email);
|
|
130
|
-
}, [authManager]);
|
|
131
|
-
|
|
132
|
-
const clearError = useCallback(() => {
|
|
133
|
-
setState(prev => ({ ...prev, error: null }));
|
|
134
|
-
}, []);
|
|
135
|
-
|
|
136
|
-
const contextValue: AuthContextValue = {
|
|
137
|
-
...state,
|
|
138
|
-
login,
|
|
139
|
-
register,
|
|
140
|
-
logout,
|
|
141
|
-
getCurrentUser,
|
|
142
|
-
checkUsernameAvailability,
|
|
143
|
-
checkEmailAvailability,
|
|
144
|
-
clearError,
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
return (
|
|
148
|
-
<AuthContext.Provider value={contextValue}>
|
|
149
|
-
{children}
|
|
150
|
-
</AuthContext.Provider>
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Authentication Hook
|
|
156
|
-
*
|
|
157
|
-
* Use this hook in any component to access authentication state and methods.
|
|
158
|
-
* No additional setup required - just wrap your app with AuthProvider.
|
|
159
|
-
*/
|
|
160
|
-
export function useAuth(): AuthContextValue {
|
|
161
|
-
const context = useContext(AuthContext);
|
|
162
|
-
|
|
163
|
-
if (!context) {
|
|
164
|
-
throw new Error('useAuth must be used within an AuthProvider');
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return context;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Higher-Order Component for authentication
|
|
172
|
-
*
|
|
173
|
-
* Wraps a component to ensure user is authenticated before rendering.
|
|
174
|
-
* Automatically redirects to login if not authenticated.
|
|
175
|
-
*/
|
|
176
|
-
export function withAuth<P extends object>(
|
|
177
|
-
Component: React.ComponentType<P>,
|
|
178
|
-
options: {
|
|
179
|
-
redirectTo?: () => void;
|
|
180
|
-
LoadingComponent?: React.ComponentType;
|
|
181
|
-
requireAuth?: boolean;
|
|
182
|
-
} = {}
|
|
183
|
-
) {
|
|
184
|
-
const {
|
|
185
|
-
redirectTo,
|
|
186
|
-
LoadingComponent = () => null,
|
|
187
|
-
requireAuth = true,
|
|
188
|
-
} = options;
|
|
189
|
-
|
|
190
|
-
return function AuthenticatedComponent(props: P) {
|
|
191
|
-
const { isAuthenticated, isLoading } = useAuth();
|
|
192
|
-
|
|
193
|
-
if (isLoading) {
|
|
194
|
-
return <LoadingComponent />;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (requireAuth && !isAuthenticated) {
|
|
198
|
-
if (redirectTo) {
|
|
199
|
-
redirectTo();
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Default behavior - render nothing if not authenticated
|
|
204
|
-
return null;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
if (!requireAuth && isAuthenticated) {
|
|
208
|
-
// Component should only be shown to non-authenticated users
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
return <Component {...props} />;
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Hook for authenticated API calls
|
|
218
|
-
*
|
|
219
|
-
* Returns an authenticated HTTP client that automatically handles tokens.
|
|
220
|
-
*/
|
|
221
|
-
export function useOxyClient() {
|
|
222
|
-
const authManager = getAuthManager();
|
|
223
|
-
return authManager.getClient();
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Hook for authentication status only (minimal re-renders)
|
|
228
|
-
*/
|
|
229
|
-
export function useAuthStatus(): { isAuthenticated: boolean; isLoading: boolean } {
|
|
230
|
-
const { isAuthenticated, isLoading } = useAuth();
|
|
231
|
-
return { isAuthenticated, isLoading };
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Hook for current user data
|
|
236
|
-
*/
|
|
237
|
-
export function useCurrentUser(): { user: any | null; isLoading: boolean; refetch: () => Promise<any> } {
|
|
238
|
-
const { user, isLoading, getCurrentUser } = useAuth();
|
|
239
|
-
|
|
240
|
-
return {
|
|
241
|
-
user,
|
|
242
|
-
isLoading,
|
|
243
|
-
refetch: getCurrentUser,
|
|
244
|
-
};
|
|
245
|
-
}
|