@oxyhq/services 5.7.4 → 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 +125 -268
- package/lib/commonjs/core/index.js +172 -0
- 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 +31 -41
- 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/index.js +1 -16
- package/lib/commonjs/ui/index.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 +172 -0
- 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 +8 -12
- 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/index.js +1 -16
- package/lib/module/ui/index.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 +67 -0
- 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 +3 -7
- 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/index.d.ts +1 -2
- package/lib/typescript/ui/index.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 -6
- package/src/core/index.ts +189 -0
- package/src/index.ts +72 -4
- package/src/node/createAuth.ts +623 -7
- package/src/node/index.ts +20 -18
- 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/index.ts +1 -19
- 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/node/middleware.js +0 -227
- package/lib/commonjs/node/middleware.js.map +0 -1
- package/lib/commonjs/ui/zero-config/index.js +0 -25
- package/lib/commonjs/ui/zero-config/index.js.map +0 -1
- package/lib/commonjs/ui/zero-config/provider.js +0 -278
- package/lib/commonjs/ui/zero-config/provider.js.map +0 -1
- package/lib/module/node/middleware.js +0 -199
- package/lib/module/node/middleware.js.map +0 -1
- package/lib/module/ui/zero-config/index.js +0 -8
- package/lib/module/ui/zero-config/index.js.map +0 -1
- package/lib/module/ui/zero-config/provider.js +0 -270
- package/lib/module/ui/zero-config/provider.js.map +0 -1
- package/lib/typescript/node/middleware.d.ts +0 -92
- package/lib/typescript/node/middleware.d.ts.map +0 -1
- package/lib/typescript/ui/zero-config/index.d.ts +0 -5
- package/lib/typescript/ui/zero-config/index.d.ts.map +0 -1
- package/lib/typescript/ui/zero-config/provider.d.ts +0 -84
- package/lib/typescript/ui/zero-config/provider.d.ts.map +0 -1
- package/src/__tests__/middleware.test.ts +0 -105
- package/src/__tests__/setup.ts +0 -10
- package/src/node/middleware.ts +0 -234
- package/src/ui/zero-config/index.ts +0 -11
- package/src/ui/zero-config/provider.tsx +0 -310
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useOxyZeroConfig = exports.useOxyApi = exports.OxyZeroConfigProvider = void 0;
|
|
7
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
var _core = require("../../core");
|
|
9
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
-
/**
|
|
12
|
-
* Zero-config OxyHQ Provider and Hook for React/React Native
|
|
13
|
-
*
|
|
14
|
-
* This provides a simplified, one-line setup for frontend authentication
|
|
15
|
-
* with automatic token management and API integration.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
const OxyZeroConfigContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
19
|
-
/**
|
|
20
|
-
* Zero-config provider for OxyHQ Services
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```tsx
|
|
24
|
-
* import { OxyZeroConfigProvider } from '@oxyhq/services/ui';
|
|
25
|
-
*
|
|
26
|
-
* function App() {
|
|
27
|
-
* return (
|
|
28
|
-
* <OxyZeroConfigProvider>
|
|
29
|
-
* <MyApp />
|
|
30
|
-
* </OxyZeroConfigProvider>
|
|
31
|
-
* );
|
|
32
|
-
* }
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
const OxyZeroConfigProvider = ({
|
|
36
|
-
children,
|
|
37
|
-
apiUrl,
|
|
38
|
-
onAuthChange,
|
|
39
|
-
storagePrefix = 'oxy_zero'
|
|
40
|
-
}) => {
|
|
41
|
-
// Determine API URL with fallbacks
|
|
42
|
-
const finalApiUrl = apiUrl || typeof process !== 'undefined' && process.env?.REACT_APP_OXY_API_URL || 'http://localhost:3001';
|
|
43
|
-
|
|
44
|
-
// Initialize OxyServices
|
|
45
|
-
const [api] = (0, _react.useState)(() => new _core.OxyServices({
|
|
46
|
-
baseURL: finalApiUrl
|
|
47
|
-
}));
|
|
48
|
-
|
|
49
|
-
// State
|
|
50
|
-
const [user, setUser] = (0, _react.useState)(null);
|
|
51
|
-
const [isLoading, setIsLoading] = (0, _react.useState)(true);
|
|
52
|
-
const [error, setError] = (0, _react.useState)(null);
|
|
53
|
-
const isAuthenticated = user !== null;
|
|
54
|
-
|
|
55
|
-
// Storage helpers
|
|
56
|
-
const getStorageKey = key => `${storagePrefix}_${key}`;
|
|
57
|
-
const saveToStorage = (0, _react.useCallback)((key, value) => {
|
|
58
|
-
try {
|
|
59
|
-
if (typeof localStorage !== 'undefined') {
|
|
60
|
-
localStorage.setItem(getStorageKey(key), value);
|
|
61
|
-
}
|
|
62
|
-
} catch (error) {
|
|
63
|
-
console.warn('Failed to save to storage:', error);
|
|
64
|
-
}
|
|
65
|
-
}, [storagePrefix]);
|
|
66
|
-
const getFromStorage = (0, _react.useCallback)(key => {
|
|
67
|
-
try {
|
|
68
|
-
if (typeof localStorage !== 'undefined') {
|
|
69
|
-
return localStorage.getItem(getStorageKey(key));
|
|
70
|
-
}
|
|
71
|
-
} catch (error) {
|
|
72
|
-
console.warn('Failed to read from storage:', error);
|
|
73
|
-
}
|
|
74
|
-
return null;
|
|
75
|
-
}, [storagePrefix]);
|
|
76
|
-
const removeFromStorage = (0, _react.useCallback)(key => {
|
|
77
|
-
try {
|
|
78
|
-
if (typeof localStorage !== 'undefined') {
|
|
79
|
-
localStorage.removeItem(getStorageKey(key));
|
|
80
|
-
}
|
|
81
|
-
} catch (error) {
|
|
82
|
-
console.warn('Failed to remove from storage:', error);
|
|
83
|
-
}
|
|
84
|
-
}, [storagePrefix]);
|
|
85
|
-
|
|
86
|
-
// Initialize authentication state
|
|
87
|
-
(0, _react.useEffect)(() => {
|
|
88
|
-
const initAuth = async () => {
|
|
89
|
-
try {
|
|
90
|
-
setIsLoading(true);
|
|
91
|
-
setError(null);
|
|
92
|
-
|
|
93
|
-
// Try to restore tokens from storage
|
|
94
|
-
const savedAccessToken = getFromStorage('accessToken');
|
|
95
|
-
const savedRefreshToken = getFromStorage('refreshToken');
|
|
96
|
-
if (savedAccessToken && savedRefreshToken) {
|
|
97
|
-
// Set tokens in the API client
|
|
98
|
-
api.setTokens(savedAccessToken, savedRefreshToken);
|
|
99
|
-
|
|
100
|
-
// Validate the token
|
|
101
|
-
const isValid = await api.validate();
|
|
102
|
-
if (isValid) {
|
|
103
|
-
// Load user data
|
|
104
|
-
const currentUser = await api.getCurrentUser();
|
|
105
|
-
setUser(currentUser);
|
|
106
|
-
if (onAuthChange) {
|
|
107
|
-
onAuthChange(currentUser);
|
|
108
|
-
}
|
|
109
|
-
} else {
|
|
110
|
-
// Invalid token, clear storage
|
|
111
|
-
removeFromStorage('accessToken');
|
|
112
|
-
removeFromStorage('refreshToken');
|
|
113
|
-
api.clearTokens();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
} catch (error) {
|
|
117
|
-
console.warn('Failed to restore authentication:', error);
|
|
118
|
-
setError('Failed to restore authentication');
|
|
119
|
-
|
|
120
|
-
// Clear invalid tokens
|
|
121
|
-
removeFromStorage('accessToken');
|
|
122
|
-
removeFromStorage('refreshToken');
|
|
123
|
-
api.clearTokens();
|
|
124
|
-
} finally {
|
|
125
|
-
setIsLoading(false);
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
initAuth();
|
|
129
|
-
}, [api, getFromStorage, removeFromStorage, onAuthChange]);
|
|
130
|
-
|
|
131
|
-
// Login method
|
|
132
|
-
const login = (0, _react.useCallback)(async (username, password) => {
|
|
133
|
-
try {
|
|
134
|
-
setIsLoading(true);
|
|
135
|
-
setError(null);
|
|
136
|
-
const response = await api.login(username, password);
|
|
137
|
-
|
|
138
|
-
// Save tokens to storage
|
|
139
|
-
if (response.accessToken) {
|
|
140
|
-
saveToStorage('accessToken', response.accessToken);
|
|
141
|
-
}
|
|
142
|
-
if (response.refreshToken) {
|
|
143
|
-
saveToStorage('refreshToken', response.refreshToken);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Update state
|
|
147
|
-
setUser(response.user);
|
|
148
|
-
if (onAuthChange) {
|
|
149
|
-
onAuthChange(response.user);
|
|
150
|
-
}
|
|
151
|
-
return response.user;
|
|
152
|
-
} catch (error) {
|
|
153
|
-
const errorMessage = error.message || 'Login failed';
|
|
154
|
-
setError(errorMessage);
|
|
155
|
-
throw new Error(errorMessage);
|
|
156
|
-
} finally {
|
|
157
|
-
setIsLoading(false);
|
|
158
|
-
}
|
|
159
|
-
}, [api, saveToStorage, onAuthChange]);
|
|
160
|
-
|
|
161
|
-
// Logout method
|
|
162
|
-
const logout = (0, _react.useCallback)(async () => {
|
|
163
|
-
try {
|
|
164
|
-
setIsLoading(true);
|
|
165
|
-
await api.logout();
|
|
166
|
-
} catch (error) {
|
|
167
|
-
console.warn('Logout API call failed:', error);
|
|
168
|
-
} finally {
|
|
169
|
-
// Always clean up local state and storage
|
|
170
|
-
removeFromStorage('accessToken');
|
|
171
|
-
removeFromStorage('refreshToken');
|
|
172
|
-
api.clearTokens();
|
|
173
|
-
setUser(null);
|
|
174
|
-
setError(null);
|
|
175
|
-
setIsLoading(false);
|
|
176
|
-
if (onAuthChange) {
|
|
177
|
-
onAuthChange(null);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}, [api, removeFromStorage, onAuthChange]);
|
|
181
|
-
|
|
182
|
-
// Register method
|
|
183
|
-
const register = (0, _react.useCallback)(async (username, email, password) => {
|
|
184
|
-
try {
|
|
185
|
-
setIsLoading(true);
|
|
186
|
-
setError(null);
|
|
187
|
-
const response = await api.signUp(username, email, password);
|
|
188
|
-
|
|
189
|
-
// Save token from registration
|
|
190
|
-
if (response.token) {
|
|
191
|
-
saveToStorage('accessToken', response.token);
|
|
192
|
-
// Note: signUp doesn't return refreshToken in current API
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// Update state
|
|
196
|
-
setUser(response.user);
|
|
197
|
-
if (onAuthChange) {
|
|
198
|
-
onAuthChange(response.user);
|
|
199
|
-
}
|
|
200
|
-
return response.user;
|
|
201
|
-
} catch (error) {
|
|
202
|
-
const errorMessage = error.message || 'Registration failed';
|
|
203
|
-
setError(errorMessage);
|
|
204
|
-
throw new Error(errorMessage);
|
|
205
|
-
} finally {
|
|
206
|
-
setIsLoading(false);
|
|
207
|
-
}
|
|
208
|
-
}, [api, saveToStorage, onAuthChange]);
|
|
209
|
-
const contextValue = {
|
|
210
|
-
user,
|
|
211
|
-
isAuthenticated,
|
|
212
|
-
isLoading,
|
|
213
|
-
error,
|
|
214
|
-
login,
|
|
215
|
-
logout,
|
|
216
|
-
register,
|
|
217
|
-
api
|
|
218
|
-
};
|
|
219
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(OxyZeroConfigContext.Provider, {
|
|
220
|
-
value: contextValue,
|
|
221
|
-
children: children
|
|
222
|
-
});
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Zero-config hook for OxyHQ Services
|
|
227
|
-
*
|
|
228
|
-
* @example
|
|
229
|
-
* ```tsx
|
|
230
|
-
* function MyComponent() {
|
|
231
|
-
* const { user, login, logout, isAuthenticated } = useOxyZeroConfig();
|
|
232
|
-
*
|
|
233
|
-
* const handleLogin = () => {
|
|
234
|
-
* login('username', 'password');
|
|
235
|
-
* };
|
|
236
|
-
*
|
|
237
|
-
* if (isAuthenticated) {
|
|
238
|
-
* return <div>Welcome, {user?.username}!</div>;
|
|
239
|
-
* }
|
|
240
|
-
*
|
|
241
|
-
* return <button onClick={handleLogin}>Login</button>;
|
|
242
|
-
* }
|
|
243
|
-
* ```
|
|
244
|
-
*/
|
|
245
|
-
exports.OxyZeroConfigProvider = OxyZeroConfigProvider;
|
|
246
|
-
const useOxyZeroConfig = () => {
|
|
247
|
-
const context = (0, _react.useContext)(OxyZeroConfigContext);
|
|
248
|
-
if (!context) {
|
|
249
|
-
throw new Error('useOxyZeroConfig must be used within an OxyZeroConfigProvider');
|
|
250
|
-
}
|
|
251
|
-
return context;
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Hook for automatic API client with authentication
|
|
256
|
-
* This automatically includes the auth token in requests
|
|
257
|
-
*
|
|
258
|
-
* @example
|
|
259
|
-
* ```tsx
|
|
260
|
-
* function ProfileComponent() {
|
|
261
|
-
* const api = useOxyApi();
|
|
262
|
-
*
|
|
263
|
-
* const updateProfile = async (data) => {
|
|
264
|
-
* const user = await api.updateProfile(data);
|
|
265
|
-
* // Token is automatically included
|
|
266
|
-
* };
|
|
267
|
-
* }
|
|
268
|
-
* ```
|
|
269
|
-
*/
|
|
270
|
-
exports.useOxyZeroConfig = useOxyZeroConfig;
|
|
271
|
-
const useOxyApi = () => {
|
|
272
|
-
const {
|
|
273
|
-
api
|
|
274
|
-
} = useOxyZeroConfig();
|
|
275
|
-
return api;
|
|
276
|
-
};
|
|
277
|
-
exports.useOxyApi = useOxyApi;
|
|
278
|
-
//# sourceMappingURL=provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_core","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","OxyZeroConfigContext","createContext","OxyZeroConfigProvider","children","apiUrl","onAuthChange","storagePrefix","finalApiUrl","process","env","REACT_APP_OXY_API_URL","api","useState","OxyServices","baseURL","user","setUser","isLoading","setIsLoading","error","setError","isAuthenticated","getStorageKey","key","saveToStorage","useCallback","value","localStorage","setItem","console","warn","getFromStorage","getItem","removeFromStorage","removeItem","useEffect","initAuth","savedAccessToken","savedRefreshToken","setTokens","isValid","validate","currentUser","getCurrentUser","clearTokens","login","username","password","response","accessToken","refreshToken","errorMessage","message","Error","logout","register","email","signUp","token","contextValue","jsx","Provider","exports","useOxyZeroConfig","context","useContext","useOxyApi"],"sourceRoot":"../../../../src","sources":["ui/zero-config/provider.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Zero-config Express middleware for OxyHQ Services authentication
|
|
5
|
-
*
|
|
6
|
-
* This provides a simple, one-line solution for adding authentication to Express apps.
|
|
7
|
-
* Simply import and use: app.use('/api', createOxyAuth())
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { OxyServices } from '../core';
|
|
11
|
-
/**
|
|
12
|
-
* Creates zero-config authentication middleware for Express.js
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* import express from 'express';
|
|
17
|
-
* import { createOxyAuth } from '@oxyhq/services/node';
|
|
18
|
-
*
|
|
19
|
-
* const app = express();
|
|
20
|
-
*
|
|
21
|
-
* // Zero-config auth for all /api routes
|
|
22
|
-
* app.use('/api', createOxyAuth());
|
|
23
|
-
*
|
|
24
|
-
* // Now all routes under /api automatically have req.user available
|
|
25
|
-
* app.get('/api/profile', (req, res) => {
|
|
26
|
-
* res.json({ user: req.user }); // req.user is automatically available
|
|
27
|
-
* });
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export function createOxyAuth(config = {}) {
|
|
31
|
-
const {
|
|
32
|
-
baseURL = process.env.OXY_API_URL || 'http://localhost:3001',
|
|
33
|
-
loadUser = true,
|
|
34
|
-
publicPaths = [],
|
|
35
|
-
onError
|
|
36
|
-
} = config;
|
|
37
|
-
const oxy = new OxyServices({
|
|
38
|
-
baseURL
|
|
39
|
-
});
|
|
40
|
-
return async (req, res, next) => {
|
|
41
|
-
// Check if this is a public path
|
|
42
|
-
const isPublicPath = publicPaths.some(path => req.path === path || req.path.startsWith(path + '/'));
|
|
43
|
-
if (isPublicPath) {
|
|
44
|
-
return next();
|
|
45
|
-
}
|
|
46
|
-
try {
|
|
47
|
-
const authHeader = req.headers['authorization'];
|
|
48
|
-
const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
|
|
49
|
-
|
|
50
|
-
if (!token) {
|
|
51
|
-
const error = {
|
|
52
|
-
message: 'Access token required',
|
|
53
|
-
code: 'MISSING_TOKEN',
|
|
54
|
-
status: 401
|
|
55
|
-
};
|
|
56
|
-
if (onError) {
|
|
57
|
-
return onError(error, req, res);
|
|
58
|
-
}
|
|
59
|
-
return res.status(401).json({
|
|
60
|
-
error: 'Access token required',
|
|
61
|
-
code: 'MISSING_TOKEN'
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Validate token using the OxyServices client
|
|
66
|
-
const authResult = await oxy.authenticateToken(token);
|
|
67
|
-
if (!authResult.valid) {
|
|
68
|
-
const error = {
|
|
69
|
-
message: authResult.error || 'Invalid token',
|
|
70
|
-
code: 'INVALID_TOKEN',
|
|
71
|
-
status: 403
|
|
72
|
-
};
|
|
73
|
-
if (onError) {
|
|
74
|
-
return onError(error, req, res);
|
|
75
|
-
}
|
|
76
|
-
return res.status(403).json({
|
|
77
|
-
error: authResult.error || 'Invalid token',
|
|
78
|
-
code: 'INVALID_TOKEN'
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Attach user data to request
|
|
83
|
-
req.userId = authResult.userId;
|
|
84
|
-
req.accessToken = token;
|
|
85
|
-
if (loadUser && authResult.user) {
|
|
86
|
-
req.user = authResult.user;
|
|
87
|
-
} else {
|
|
88
|
-
req.user = {
|
|
89
|
-
id: authResult.userId
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
next();
|
|
93
|
-
} catch (error) {
|
|
94
|
-
const apiError = {
|
|
95
|
-
message: error.message || 'Authentication failed',
|
|
96
|
-
code: error.code || 'AUTH_ERROR',
|
|
97
|
-
status: error.status || 500
|
|
98
|
-
};
|
|
99
|
-
if (onError) {
|
|
100
|
-
return onError(apiError, req, res);
|
|
101
|
-
}
|
|
102
|
-
res.status(apiError.status).json({
|
|
103
|
-
error: apiError.message,
|
|
104
|
-
code: apiError.code
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Creates optional authentication middleware
|
|
112
|
-
* This middleware will attach user data if a valid token is present, but won't fail if missing
|
|
113
|
-
*
|
|
114
|
-
* @example
|
|
115
|
-
* ```typescript
|
|
116
|
-
* import { createOptionalOxyAuth } from '@oxyhq/services/node';
|
|
117
|
-
*
|
|
118
|
-
* app.use('/api', createOptionalOxyAuth());
|
|
119
|
-
*
|
|
120
|
-
* app.get('/api/content', (req, res) => {
|
|
121
|
-
* if (req.user) {
|
|
122
|
-
* // User is authenticated, show personalized content
|
|
123
|
-
* res.json({ content: 'personalized', user: req.user });
|
|
124
|
-
* } else {
|
|
125
|
-
* // Anonymous user, show public content
|
|
126
|
-
* res.json({ content: 'public' });
|
|
127
|
-
* }
|
|
128
|
-
* });
|
|
129
|
-
* ```
|
|
130
|
-
*/
|
|
131
|
-
export function createOptionalOxyAuth(config = {}) {
|
|
132
|
-
const {
|
|
133
|
-
baseURL = process.env.OXY_API_URL || 'http://localhost:3001',
|
|
134
|
-
loadUser = true
|
|
135
|
-
} = config;
|
|
136
|
-
const oxy = new OxyServices({
|
|
137
|
-
baseURL
|
|
138
|
-
});
|
|
139
|
-
return async (req, res, next) => {
|
|
140
|
-
try {
|
|
141
|
-
const authHeader = req.headers['authorization'];
|
|
142
|
-
const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
|
|
143
|
-
|
|
144
|
-
if (!token) {
|
|
145
|
-
// No token provided, continue without authentication
|
|
146
|
-
return next();
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Validate token using the OxyServices client
|
|
150
|
-
const authResult = await oxy.authenticateToken(token);
|
|
151
|
-
if (authResult.valid) {
|
|
152
|
-
// Attach user data to request if token is valid
|
|
153
|
-
req.userId = authResult.userId;
|
|
154
|
-
req.accessToken = token;
|
|
155
|
-
if (loadUser && authResult.user) {
|
|
156
|
-
req.user = authResult.user;
|
|
157
|
-
} else {
|
|
158
|
-
req.user = {
|
|
159
|
-
id: authResult.userId
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
next();
|
|
164
|
-
} catch (error) {
|
|
165
|
-
// If there's an error, continue without authentication
|
|
166
|
-
// This makes the middleware truly optional
|
|
167
|
-
next();
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Utility function to quickly set up a complete Express app with authentication
|
|
174
|
-
*
|
|
175
|
-
* @example
|
|
176
|
-
* ```typescript
|
|
177
|
-
* import { createOxyExpressApp } from '@oxyhq/services/node';
|
|
178
|
-
*
|
|
179
|
-
* const app = createOxyExpressApp();
|
|
180
|
-
*
|
|
181
|
-
* // All routes automatically have authentication and req.user available
|
|
182
|
-
* app.get('/api/profile', (req, res) => {
|
|
183
|
-
* res.json({ user: req.user });
|
|
184
|
-
* });
|
|
185
|
-
*
|
|
186
|
-
* app.listen(3000);
|
|
187
|
-
* ```
|
|
188
|
-
*/
|
|
189
|
-
export function createOxyExpressApp(config = {}) {
|
|
190
|
-
// This is a lightweight helper - users should import express themselves
|
|
191
|
-
// We'll provide the middleware setup instructions instead
|
|
192
|
-
|
|
193
|
-
throw new Error('createOxyExpressApp is not implemented yet. Please use createOxyAuth() middleware with your existing Express app.');
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Re-export for convenience
|
|
197
|
-
export { OxyServices } from '../core';
|
|
198
|
-
export * from '../models/interfaces';
|
|
199
|
-
//# sourceMappingURL=middleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["OxyServices","createOxyAuth","config","baseURL","process","env","OXY_API_URL","loadUser","publicPaths","onError","oxy","req","res","next","isPublicPath","some","path","startsWith","authHeader","headers","token","split","error","message","code","status","json","authResult","authenticateToken","valid","userId","accessToken","user","id","apiError","createOptionalOxyAuth","createOxyExpressApp","Error"],"sourceRoot":"../../../src","sources":["node/middleware.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["OxyZeroConfigProvider","useOxyZeroConfig","useOxyApi"],"sourceRoot":"../../../../src","sources":["ui/zero-config/index.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,SACEA,qBAAqB,EACrBC,gBAAgB,EAChBC,SAAS,QAGJ,YAAY","ignoreList":[]}
|