@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.
- package/README.md +287 -80
- package/lib/commonjs/node/index.js +49 -2
- package/lib/commonjs/node/index.js.map +1 -1
- package/lib/commonjs/node/middleware.js +227 -0
- package/lib/commonjs/node/middleware.js.map +1 -0
- package/lib/commonjs/ui/index.js +16 -1
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/zero-config/index.js +25 -0
- package/lib/commonjs/ui/zero-config/index.js.map +1 -0
- package/lib/commonjs/ui/zero-config/provider.js +278 -0
- package/lib/commonjs/ui/zero-config/provider.js.map +1 -0
- package/lib/module/node/index.js +11 -1
- package/lib/module/node/index.js.map +1 -1
- package/lib/module/node/middleware.js +199 -0
- package/lib/module/node/middleware.js.map +1 -0
- package/lib/module/ui/index.js +16 -1
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/zero-config/index.js +8 -0
- package/lib/module/ui/zero-config/index.js.map +1 -0
- package/lib/module/ui/zero-config/provider.js +270 -0
- package/lib/module/ui/zero-config/provider.js.map +1 -0
- package/lib/typescript/node/index.d.ts +7 -1
- package/lib/typescript/node/index.d.ts.map +1 -1
- package/lib/typescript/node/middleware.d.ts +92 -0
- package/lib/typescript/node/middleware.d.ts.map +1 -0
- package/lib/typescript/ui/index.d.ts +2 -1
- package/lib/typescript/ui/index.d.ts.map +1 -1
- package/lib/typescript/ui/zero-config/index.d.ts +5 -0
- package/lib/typescript/ui/zero-config/index.d.ts.map +1 -0
- package/lib/typescript/ui/zero-config/provider.d.ts +84 -0
- package/lib/typescript/ui/zero-config/provider.d.ts.map +1 -0
- package/package.json +6 -1
- package/src/node/index.ts +17 -1
- package/src/node/middleware.ts +234 -0
- package/src/ui/index.ts +19 -1
- package/src/ui/zero-config/index.ts +11 -0
- 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":[]}
|
package/lib/commonjs/ui/index.js
CHANGED
|
@@ -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":";;;;;;;;;;;;;AAMA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;
|
|
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":[]}
|
package/lib/module/node/index.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
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,
|
|
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":[]}
|