@oxyhq/services 5.7.3 → 5.7.4

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.
Files changed (37) hide show
  1. package/README.md +287 -80
  2. package/lib/commonjs/node/index.js +49 -2
  3. package/lib/commonjs/node/index.js.map +1 -1
  4. package/lib/commonjs/node/middleware.js +227 -0
  5. package/lib/commonjs/node/middleware.js.map +1 -0
  6. package/lib/commonjs/ui/index.js +16 -1
  7. package/lib/commonjs/ui/index.js.map +1 -1
  8. package/lib/commonjs/ui/zero-config/index.js +25 -0
  9. package/lib/commonjs/ui/zero-config/index.js.map +1 -0
  10. package/lib/commonjs/ui/zero-config/provider.js +278 -0
  11. package/lib/commonjs/ui/zero-config/provider.js.map +1 -0
  12. package/lib/module/node/index.js +11 -1
  13. package/lib/module/node/index.js.map +1 -1
  14. package/lib/module/node/middleware.js +199 -0
  15. package/lib/module/node/middleware.js.map +1 -0
  16. package/lib/module/ui/index.js +16 -1
  17. package/lib/module/ui/index.js.map +1 -1
  18. package/lib/module/ui/zero-config/index.js +8 -0
  19. package/lib/module/ui/zero-config/index.js.map +1 -0
  20. package/lib/module/ui/zero-config/provider.js +270 -0
  21. package/lib/module/ui/zero-config/provider.js.map +1 -0
  22. package/lib/typescript/node/index.d.ts +7 -1
  23. package/lib/typescript/node/index.d.ts.map +1 -1
  24. package/lib/typescript/node/middleware.d.ts +92 -0
  25. package/lib/typescript/node/middleware.d.ts.map +1 -0
  26. package/lib/typescript/ui/index.d.ts +2 -1
  27. package/lib/typescript/ui/index.d.ts.map +1 -1
  28. package/lib/typescript/ui/zero-config/index.d.ts +5 -0
  29. package/lib/typescript/ui/zero-config/index.d.ts.map +1 -0
  30. package/lib/typescript/ui/zero-config/provider.d.ts +84 -0
  31. package/lib/typescript/ui/zero-config/provider.d.ts.map +1 -0
  32. package/package.json +6 -1
  33. package/src/node/index.ts +17 -1
  34. package/src/node/middleware.ts +234 -0
  35. package/src/ui/index.ts +19 -1
  36. package/src/ui/zero-config/index.ts +11 -0
  37. package/src/ui/zero-config/provider.tsx +310 -0
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ createOxyAuth: true,
8
+ createOptionalOxyAuth: true,
9
+ createOxyExpressApp: true,
10
+ OxyServices: true
11
+ };
12
+ Object.defineProperty(exports, "OxyServices", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _core.OxyServices;
16
+ }
17
+ });
18
+ exports.createOptionalOxyAuth = createOptionalOxyAuth;
19
+ exports.createOxyAuth = createOxyAuth;
20
+ exports.createOxyExpressApp = createOxyExpressApp;
21
+ var _core = require("../core");
22
+ var _interfaces = require("../models/interfaces");
23
+ Object.keys(_interfaces).forEach(function (key) {
24
+ if (key === "default" || key === "__esModule") return;
25
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
26
+ if (key in exports && exports[key] === _interfaces[key]) return;
27
+ Object.defineProperty(exports, key, {
28
+ enumerable: true,
29
+ get: function () {
30
+ return _interfaces[key];
31
+ }
32
+ });
33
+ });
34
+ /**
35
+ * Zero-config Express middleware for OxyHQ Services authentication
36
+ *
37
+ * This provides a simple, one-line solution for adding authentication to Express apps.
38
+ * Simply import and use: app.use('/api', createOxyAuth())
39
+ */
40
+
41
+ /**
42
+ * Creates zero-config authentication middleware for Express.js
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * import express from 'express';
47
+ * import { createOxyAuth } from '@oxyhq/services/node';
48
+ *
49
+ * const app = express();
50
+ *
51
+ * // Zero-config auth for all /api routes
52
+ * app.use('/api', createOxyAuth());
53
+ *
54
+ * // Now all routes under /api automatically have req.user available
55
+ * app.get('/api/profile', (req, res) => {
56
+ * res.json({ user: req.user }); // req.user is automatically available
57
+ * });
58
+ * ```
59
+ */
60
+ function createOxyAuth(config = {}) {
61
+ const {
62
+ baseURL = process.env.OXY_API_URL || 'http://localhost:3001',
63
+ loadUser = true,
64
+ publicPaths = [],
65
+ onError
66
+ } = config;
67
+ const oxy = new _core.OxyServices({
68
+ baseURL
69
+ });
70
+ return async (req, res, next) => {
71
+ // Check if this is a public path
72
+ const isPublicPath = publicPaths.some(path => req.path === path || req.path.startsWith(path + '/'));
73
+ if (isPublicPath) {
74
+ return next();
75
+ }
76
+ try {
77
+ const authHeader = req.headers['authorization'];
78
+ const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
79
+
80
+ if (!token) {
81
+ const error = {
82
+ message: 'Access token required',
83
+ code: 'MISSING_TOKEN',
84
+ status: 401
85
+ };
86
+ if (onError) {
87
+ return onError(error, req, res);
88
+ }
89
+ return res.status(401).json({
90
+ error: 'Access token required',
91
+ code: 'MISSING_TOKEN'
92
+ });
93
+ }
94
+
95
+ // Validate token using the OxyServices client
96
+ const authResult = await oxy.authenticateToken(token);
97
+ if (!authResult.valid) {
98
+ const error = {
99
+ message: authResult.error || 'Invalid token',
100
+ code: 'INVALID_TOKEN',
101
+ status: 403
102
+ };
103
+ if (onError) {
104
+ return onError(error, req, res);
105
+ }
106
+ return res.status(403).json({
107
+ error: authResult.error || 'Invalid token',
108
+ code: 'INVALID_TOKEN'
109
+ });
110
+ }
111
+
112
+ // Attach user data to request
113
+ req.userId = authResult.userId;
114
+ req.accessToken = token;
115
+ if (loadUser && authResult.user) {
116
+ req.user = authResult.user;
117
+ } else {
118
+ req.user = {
119
+ id: authResult.userId
120
+ };
121
+ }
122
+ next();
123
+ } catch (error) {
124
+ const apiError = {
125
+ message: error.message || 'Authentication failed',
126
+ code: error.code || 'AUTH_ERROR',
127
+ status: error.status || 500
128
+ };
129
+ if (onError) {
130
+ return onError(apiError, req, res);
131
+ }
132
+ res.status(apiError.status).json({
133
+ error: apiError.message,
134
+ code: apiError.code
135
+ });
136
+ }
137
+ };
138
+ }
139
+
140
+ /**
141
+ * Creates optional authentication middleware
142
+ * This middleware will attach user data if a valid token is present, but won't fail if missing
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * import { createOptionalOxyAuth } from '@oxyhq/services/node';
147
+ *
148
+ * app.use('/api', createOptionalOxyAuth());
149
+ *
150
+ * app.get('/api/content', (req, res) => {
151
+ * if (req.user) {
152
+ * // User is authenticated, show personalized content
153
+ * res.json({ content: 'personalized', user: req.user });
154
+ * } else {
155
+ * // Anonymous user, show public content
156
+ * res.json({ content: 'public' });
157
+ * }
158
+ * });
159
+ * ```
160
+ */
161
+ function createOptionalOxyAuth(config = {}) {
162
+ const {
163
+ baseURL = process.env.OXY_API_URL || 'http://localhost:3001',
164
+ loadUser = true
165
+ } = config;
166
+ const oxy = new _core.OxyServices({
167
+ baseURL
168
+ });
169
+ return async (req, res, next) => {
170
+ try {
171
+ const authHeader = req.headers['authorization'];
172
+ const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
173
+
174
+ if (!token) {
175
+ // No token provided, continue without authentication
176
+ return next();
177
+ }
178
+
179
+ // Validate token using the OxyServices client
180
+ const authResult = await oxy.authenticateToken(token);
181
+ if (authResult.valid) {
182
+ // Attach user data to request if token is valid
183
+ req.userId = authResult.userId;
184
+ req.accessToken = token;
185
+ if (loadUser && authResult.user) {
186
+ req.user = authResult.user;
187
+ } else {
188
+ req.user = {
189
+ id: authResult.userId
190
+ };
191
+ }
192
+ }
193
+ next();
194
+ } catch (error) {
195
+ // If there's an error, continue without authentication
196
+ // This makes the middleware truly optional
197
+ next();
198
+ }
199
+ };
200
+ }
201
+
202
+ /**
203
+ * Utility function to quickly set up a complete Express app with authentication
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * import { createOxyExpressApp } from '@oxyhq/services/node';
208
+ *
209
+ * const app = createOxyExpressApp();
210
+ *
211
+ * // All routes automatically have authentication and req.user available
212
+ * app.get('/api/profile', (req, res) => {
213
+ * res.json({ user: req.user });
214
+ * });
215
+ *
216
+ * app.listen(3000);
217
+ * ```
218
+ */
219
+ function createOxyExpressApp(config = {}) {
220
+ // This is a lightweight helper - users should import express themselves
221
+ // We'll provide the middleware setup instructions instead
222
+
223
+ throw new Error('createOxyExpressApp is not implemented yet. Please use createOxyAuth() middleware with your existing Express app.');
224
+ }
225
+
226
+ // Re-export for convenience
227
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_core","require","_interfaces","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","createOxyAuth","config","baseURL","process","env","OXY_API_URL","loadUser","publicPaths","onError","oxy","OxyServices","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":[]}
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "OxyServices", {
10
10
  return _core.OxyServices;
11
11
  }
12
12
  });
13
- exports.useOxy = exports.useFollow = exports.useAuthStore = exports.toast = exports.setupFonts = exports.fontStyles = exports.fontFamilies = exports.ProfileScreen = exports.OxySignInButton = void 0;
13
+ exports.useOxyZeroConfig = exports.useOxyApi = exports.useOxy = exports.useFollow = exports.useAuthStore = exports.toast = exports.setupFonts = exports.fontStyles = exports.fontFamilies = exports.ProfileScreen = exports.OxyZeroConfigProvider = exports.OxySignInButton = void 0;
14
14
  var _isFrontend = _interopRequireDefault(require("./isFrontend"));
15
15
  var _core = require("../core");
16
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -51,6 +51,11 @@ let OxyProvider = exports.OxyProvider = void 0,
51
51
  fontFamilies = exports.fontFamilies = void 0,
52
52
  fontStyles = exports.fontStyles = void 0,
53
53
  toast = exports.toast = void 0;
54
+
55
+ // Zero-config exports
56
+ let OxyZeroConfigProvider = exports.OxyZeroConfigProvider = void 0,
57
+ useOxyZeroConfig = exports.useOxyZeroConfig = void 0,
58
+ useOxyApi = exports.useOxyApi = void 0;
54
59
  if (_isFrontend.default) {
55
60
  exports.OxyProvider = OxyProvider = require('./components/OxyProvider').default;
56
61
  exports.OxySignInButton = OxySignInButton = require('./components/OxySignInButton').default;
@@ -72,6 +77,11 @@ if (_isFrontend.default) {
72
77
  exports.fontFamilies = fontFamilies = require('./styles/fonts').fontFamilies;
73
78
  exports.fontStyles = fontStyles = require('./styles/fonts').fontStyles;
74
79
  exports.toast = toast = require('../lib/sonner').toast;
80
+
81
+ // Zero-config components
82
+ exports.OxyZeroConfigProvider = OxyZeroConfigProvider = require('./zero-config').OxyZeroConfigProvider;
83
+ exports.useOxyZeroConfig = useOxyZeroConfig = require('./zero-config').useOxyZeroConfig;
84
+ exports.useOxyApi = useOxyApi = require('./zero-config').useOxyApi;
75
85
  } else {
76
86
  // Backend: no-op fallbacks
77
87
  const noopComponent = () => null;
@@ -96,6 +106,11 @@ if (_isFrontend.default) {
96
106
  exports.fontFamilies = fontFamilies = {};
97
107
  exports.fontStyles = fontStyles = {};
98
108
  exports.toast = toast = () => {};
109
+
110
+ // Zero-config no-ops
111
+ exports.OxyZeroConfigProvider = OxyZeroConfigProvider = noopComponent;
112
+ exports.useOxyZeroConfig = useOxyZeroConfig = noopHook;
113
+ exports.useOxyApi = useOxyApi = () => ({});
99
114
  }
100
115
 
101
116
  // Re-export core services for convenience in UI context
@@ -1 +1 @@
1
- {"version":3,"names":["_isFrontend","_interopRequireDefault","require","_core","e","__esModule","default","OxyProvider","exports","OxySignInButton","OxyLogo","Avatar","FollowButton","OxyPayButton","FontLoader","setupFonts","OxyIcon","useOxy","useOxyAuth","useOxyUser","useOxyKarma","useOxyPayments","useOxyDevices","useOxyNotifications","useOxySocket","useOxyQR","useOxyIAP","OxyContextProvider","OxyContextState","OxyContextProviderProps","useFollow","ProfileScreen","OxyRouter","useAuthStore","fontFamilies","fontStyles","toast","isFrontend","noopComponent","noopHook"],"sourceRoot":"../../../src","sources":["ui/index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_isFrontend","_interopRequireDefault","require","_core","e","__esModule","default","OxyProvider","exports","OxySignInButton","OxyLogo","Avatar","FollowButton","OxyPayButton","FontLoader","setupFonts","OxyIcon","useOxy","useOxyAuth","useOxyUser","useOxyKarma","useOxyPayments","useOxyDevices","useOxyNotifications","useOxySocket","useOxyQR","useOxyIAP","OxyContextProvider","OxyContextState","OxyContextProviderProps","useFollow","ProfileScreen","OxyRouter","useAuthStore","fontFamilies","fontStyles","toast","OxyZeroConfigProvider","useOxyZeroConfig","useOxyApi","isFrontend","noopComponent","noopHook"],"sourceRoot":"../../../src","sources":["ui/index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "OxyZeroConfigProvider", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _provider.OxyZeroConfigProvider;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "useOxyApi", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _provider.useOxyApi;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "useOxyZeroConfig", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _provider.useOxyZeroConfig;
22
+ }
23
+ });
24
+ var _provider = require("./provider");
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_provider","require"],"sourceRoot":"../../../../src","sources":["ui/zero-config/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,SAAA,GAAAC,OAAA","ignoreList":[]}
@@ -0,0 +1,278 @@
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
@@ -0,0 +1 @@
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,9 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  /**
4
- * OxyHQServices Node.js Entry Point
4
+ * Node.js-specific exports for OxyHQ Services
5
+ *
6
+ * This module provides zero-config Express.js middleware and utilities
7
+ * for backend integration with OxyHQ Services.
5
8
  */
6
9
 
10
+ // Export the zero-config middleware
11
+ export { createOxyAuth, createOptionalOxyAuth, createOxyExpressApp } from './middleware';
12
+
7
13
  // ------------- Core Imports -------------
8
14
  import { OxyServices, OXY_CLOUD_URL } from '../core'; // Adjusted path
9
15
  import { createAuth } from './createAuth';
@@ -18,6 +24,10 @@ export { createAuth };
18
24
  // ------------- Model Exports -------------
19
25
  export { Models }; // Export all models as a namespace
20
26
  export * from '../models/interfaces'; // Export all models directly
27
+ export * from '../models/secureSession';
28
+
29
+ // Re-export utilities
30
+ export { DeviceManager } from '../utils/deviceManager';
21
31
 
22
32
  // Default export for consistency or specific use cases if needed
23
33
  export default OxyServices;
@@ -1 +1 @@
1
- {"version":3,"names":["OxyServices","OXY_CLOUD_URL","createAuth","Models"],"sourceRoot":"../../../src","sources":["node/index.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA;AACA,SAASA,WAAW,EAAEC,aAAa,QAAQ,SAAS,CAAC,CAAC;AACtD,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAO,KAAKC,MAAM,MAAM,sBAAsB,CAAC,CAAC;;AAEhD;AACA,SAASH,WAAW,EAAEC,aAAa;;AAEnC;AACA,SAASC,UAAU;;AAEnB;AACA,SAASC,MAAM,GAAG,CAAE;AACpB,cAAc,sBAAsB,CAAC,CAAC;;AAEtC;AACA,eAAeH,WAAW","ignoreList":[]}
1
+ {"version":3,"names":["createOxyAuth","createOptionalOxyAuth","createOxyExpressApp","OxyServices","OXY_CLOUD_URL","createAuth","Models","DeviceManager"],"sourceRoot":"../../../src","sources":["node/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SACEA,aAAa,EACbC,qBAAqB,EACrBC,mBAAmB,QAGd,cAAc;;AAErB;AACA,SAASC,WAAW,EAAEC,aAAa,QAAQ,SAAS,CAAC,CAAC;AACtD,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAO,KAAKC,MAAM,MAAM,sBAAsB,CAAC,CAAC;;AAEhD;AACA,SAASH,WAAW,EAAEC,aAAa;;AAEnC;AACA,SAASC,UAAU;;AAEnB;AACA,SAASC,MAAM,GAAG,CAAE;AACpB,cAAc,sBAAsB,CAAC,CAAC;AACtC,cAAc,yBAAyB;;AAEvC;AACA,SAASC,aAAa,QAAQ,wBAAwB;;AAEtD;AACA,eAAeJ,WAAW","ignoreList":[]}