@morojs/moro 1.0.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +57 -2
  2. package/dist/core/auth/morojs-adapter.d.ts +94 -0
  3. package/dist/core/auth/morojs-adapter.js +288 -0
  4. package/dist/core/auth/morojs-adapter.js.map +1 -0
  5. package/dist/core/config/file-loader.d.ts +18 -0
  6. package/dist/core/config/file-loader.js +345 -0
  7. package/dist/core/config/file-loader.js.map +1 -0
  8. package/dist/core/config/index.d.ts +6 -0
  9. package/dist/core/config/index.js +15 -0
  10. package/dist/core/config/index.js.map +1 -1
  11. package/dist/core/config/loader.d.ts +2 -1
  12. package/dist/core/config/loader.js +15 -2
  13. package/dist/core/config/loader.js.map +1 -1
  14. package/dist/core/config/utils.js +50 -3
  15. package/dist/core/config/utils.js.map +1 -1
  16. package/dist/core/http/http-server.d.ts +2 -0
  17. package/dist/core/http/http-server.js +52 -9
  18. package/dist/core/http/http-server.js.map +1 -1
  19. package/dist/core/middleware/built-in/auth-helpers.d.ts +124 -0
  20. package/dist/core/middleware/built-in/auth-helpers.js +338 -0
  21. package/dist/core/middleware/built-in/auth-helpers.js.map +1 -0
  22. package/dist/core/middleware/built-in/auth-providers.d.ts +125 -0
  23. package/dist/core/middleware/built-in/auth-providers.js +394 -0
  24. package/dist/core/middleware/built-in/auth-providers.js.map +1 -0
  25. package/dist/core/middleware/built-in/auth.d.ts +29 -1
  26. package/dist/core/middleware/built-in/auth.js +259 -16
  27. package/dist/core/middleware/built-in/auth.js.map +1 -1
  28. package/dist/core/middleware/built-in/index.d.ts +3 -1
  29. package/dist/core/middleware/built-in/index.js +19 -1
  30. package/dist/core/middleware/built-in/index.js.map +1 -1
  31. package/dist/index.d.ts +5 -1
  32. package/dist/index.js +11 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/moro.d.ts +1 -0
  35. package/dist/moro.js +19 -1
  36. package/dist/moro.js.map +1 -1
  37. package/dist/types/auth.d.ts +367 -0
  38. package/dist/types/auth.js +28 -0
  39. package/dist/types/auth.js.map +1 -0
  40. package/package.json +6 -2
  41. package/src/core/auth/README.md +339 -0
  42. package/src/core/auth/morojs-adapter.ts +402 -0
  43. package/src/core/config/file-loader.ts +398 -0
  44. package/src/core/config/index.ts +18 -0
  45. package/src/core/config/loader.ts +18 -2
  46. package/src/core/config/utils.ts +53 -3
  47. package/src/core/http/http-server.ts +61 -10
  48. package/src/core/middleware/built-in/auth-helpers.ts +401 -0
  49. package/src/core/middleware/built-in/auth-providers.ts +480 -0
  50. package/src/core/middleware/built-in/auth.ts +306 -16
  51. package/src/core/middleware/built-in/index.ts +22 -0
  52. package/src/index.ts +30 -1
  53. package/src/moro.ts +29 -1
  54. package/src/types/auth.ts +440 -0
  55. package/tsconfig.json +1 -1
@@ -0,0 +1,338 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sessionHelpers = exports.authResponses = exports.authUtils = void 0;
4
+ exports.requireAuth = requireAuth;
5
+ exports.requireRole = requireRole;
6
+ exports.requirePermission = requirePermission;
7
+ exports.requireAdmin = requireAdmin;
8
+ exports.guestOnly = guestOnly;
9
+ exports.optionalAuth = optionalAuth;
10
+ exports.withAuth = withAuth;
11
+ exports.protectedRoute = protectedRoute;
12
+ /**
13
+ * Auth Guard Middleware - Protects routes with authentication and authorization
14
+ */
15
+ function requireAuth(options = {}) {
16
+ return async (req, res, next) => {
17
+ const auth = req.auth;
18
+ if (!auth) {
19
+ throw new Error('Auth middleware must be installed before using requireAuth');
20
+ }
21
+ // Check if already authenticated and should redirect
22
+ if (auth.isAuthenticated && options.redirectOnAuth) {
23
+ return res.redirect(options.redirectOnAuth);
24
+ }
25
+ // Check authentication requirement
26
+ if (!options.allowUnauthenticated && !auth.isAuthenticated) {
27
+ if (options.onUnauthorized) {
28
+ return options.onUnauthorized(req, res);
29
+ }
30
+ if (options.redirectTo) {
31
+ return res.redirect(`${options.redirectTo}?callbackUrl=${encodeURIComponent(req.url)}`);
32
+ }
33
+ return res.status(401).json({
34
+ error: 'Authentication required',
35
+ message: 'You must be logged in to access this resource',
36
+ signInUrl: '/api/auth/signin',
37
+ });
38
+ }
39
+ // Skip further checks if not authenticated but allowed
40
+ if (!auth.isAuthenticated && options.allowUnauthenticated) {
41
+ return next();
42
+ }
43
+ const user = auth.user;
44
+ // Check roles if specified
45
+ if (options.roles && options.roles.length > 0) {
46
+ const userRoles = user?.roles || [];
47
+ const hasRole = options.roles.some(role => userRoles.includes(role));
48
+ if (!hasRole) {
49
+ if (options.onForbidden) {
50
+ return options.onForbidden(req, res);
51
+ }
52
+ return res.status(403).json({
53
+ error: 'Insufficient permissions',
54
+ message: `Required roles: ${options.roles.join(', ')}`,
55
+ userRoles,
56
+ });
57
+ }
58
+ }
59
+ // Check permissions if specified
60
+ if (options.permissions && options.permissions.length > 0) {
61
+ const userPermissions = user?.permissions || [];
62
+ const hasPermission = options.permissions.every(permission => userPermissions.includes(permission));
63
+ if (!hasPermission) {
64
+ if (options.onForbidden) {
65
+ return options.onForbidden(req, res);
66
+ }
67
+ return res.status(403).json({
68
+ error: 'Insufficient permissions',
69
+ message: `Required permissions: ${options.permissions.join(', ')}`,
70
+ userPermissions,
71
+ });
72
+ }
73
+ }
74
+ // Custom authorization function
75
+ if (options.authorize) {
76
+ try {
77
+ const authorized = await options.authorize(user);
78
+ if (!authorized) {
79
+ if (options.onForbidden) {
80
+ return options.onForbidden(req, res);
81
+ }
82
+ return res.status(403).json({
83
+ error: 'Access denied',
84
+ message: 'Custom authorization check failed',
85
+ });
86
+ }
87
+ }
88
+ catch (error) {
89
+ return res.status(500).json({
90
+ error: 'Authorization error',
91
+ message: 'Failed to verify authorization',
92
+ });
93
+ }
94
+ }
95
+ // All checks passed
96
+ next();
97
+ };
98
+ }
99
+ /**
100
+ * Role-based access control middleware
101
+ */
102
+ function requireRole(role, options = {}) {
103
+ const roles = Array.isArray(role) ? role : [role];
104
+ return requireAuth({ ...options, roles });
105
+ }
106
+ /**
107
+ * Permission-based access control middleware
108
+ */
109
+ function requirePermission(permission, options = {}) {
110
+ const permissions = Array.isArray(permission) ? permission : [permission];
111
+ return requireAuth({ ...options, permissions });
112
+ }
113
+ /**
114
+ * Admin-only access middleware
115
+ */
116
+ function requireAdmin(options = {}) {
117
+ return requireRole('admin', options);
118
+ }
119
+ /**
120
+ * Guest-only middleware (redirect if authenticated)
121
+ */
122
+ function guestOnly(redirectTo = '/dashboard') {
123
+ return requireAuth({
124
+ allowUnauthenticated: true,
125
+ redirectOnAuth: redirectTo,
126
+ });
127
+ }
128
+ /**
129
+ * Optional auth middleware (allows both authenticated and unauthenticated)
130
+ */
131
+ function optionalAuth() {
132
+ return requireAuth({
133
+ allowUnauthenticated: true,
134
+ });
135
+ }
136
+ /**
137
+ * Route-level auth decorator
138
+ */
139
+ function withAuth(options = {}) {
140
+ return function (target, propertyKey, descriptor) {
141
+ const originalMethod = descriptor.value;
142
+ descriptor.value = async function (req, res, next) {
143
+ if (options.requireAuth !== false) {
144
+ const authMiddleware = requireAuth({
145
+ roles: options.roles,
146
+ redirectTo: options.redirectTo,
147
+ });
148
+ await new Promise((resolve, reject) => {
149
+ authMiddleware(req, res, (error) => {
150
+ if (error)
151
+ reject(error);
152
+ else
153
+ resolve();
154
+ });
155
+ });
156
+ }
157
+ return originalMethod.call(this, req, res, next);
158
+ };
159
+ return descriptor;
160
+ };
161
+ }
162
+ /**
163
+ * Auth utilities for manual checks in route handlers
164
+ */
165
+ exports.authUtils = {
166
+ /**
167
+ * Check if user is authenticated
168
+ */
169
+ isAuthenticated(req) {
170
+ return req.auth?.isAuthenticated || false;
171
+ },
172
+ /**
173
+ * Get current user
174
+ */
175
+ getUser(req) {
176
+ return req.auth?.user || null;
177
+ },
178
+ /**
179
+ * Check if user has role
180
+ */
181
+ hasRole(req, role) {
182
+ const user = this.getUser(req);
183
+ if (!user?.roles)
184
+ return false;
185
+ const roles = Array.isArray(role) ? role : [role];
186
+ return roles.some(r => user.roles.includes(r));
187
+ },
188
+ /**
189
+ * Check if user has permission
190
+ */
191
+ hasPermission(req, permission) {
192
+ const user = this.getUser(req);
193
+ if (!user?.permissions)
194
+ return false;
195
+ const permissions = Array.isArray(permission) ? permission : [permission];
196
+ return permissions.every(p => user.permissions.includes(p));
197
+ },
198
+ /**
199
+ * Check if user is admin
200
+ */
201
+ isAdmin(req) {
202
+ return this.hasRole(req, 'admin');
203
+ },
204
+ /**
205
+ * Get user ID
206
+ */
207
+ getUserId(req) {
208
+ return this.getUser(req)?.id || null;
209
+ },
210
+ /**
211
+ * Force authentication check and redirect if needed
212
+ */
213
+ ensureAuth(req, res, redirectTo = '/api/auth/signin') {
214
+ if (!this.isAuthenticated(req)) {
215
+ res.redirect(`${redirectTo}?callbackUrl=${encodeURIComponent(req.url)}`);
216
+ return false;
217
+ }
218
+ return true;
219
+ },
220
+ /**
221
+ * Create auth response for API endpoints
222
+ */
223
+ createAuthResponse(req) {
224
+ const auth = req.auth;
225
+ return {
226
+ isAuthenticated: auth?.isAuthenticated || false,
227
+ user: auth?.user || null,
228
+ session: auth?.session || null,
229
+ timestamp: new Date().toISOString(),
230
+ };
231
+ },
232
+ };
233
+ /**
234
+ * API Response helpers for auth endpoints
235
+ */
236
+ exports.authResponses = {
237
+ unauthorized: (res, message = 'Authentication required') => {
238
+ return res.status(401).json({
239
+ error: 'Unauthorized',
240
+ message,
241
+ code: 'AUTH_REQUIRED',
242
+ signInUrl: '/api/auth/signin',
243
+ });
244
+ },
245
+ forbidden: (res, message = 'Insufficient permissions') => {
246
+ return res.status(403).json({
247
+ error: 'Forbidden',
248
+ message,
249
+ code: 'INSUFFICIENT_PERMISSIONS',
250
+ });
251
+ },
252
+ authSuccess: (res, user, message = 'Authentication successful') => {
253
+ return res.json({
254
+ success: true,
255
+ message,
256
+ user: {
257
+ id: user.id,
258
+ name: user.name,
259
+ email: user.email,
260
+ roles: user.roles || [],
261
+ permissions: user.permissions || [],
262
+ },
263
+ });
264
+ },
265
+ authError: (res, error, message = 'Authentication failed') => {
266
+ return res.status(400).json({
267
+ error,
268
+ message,
269
+ code: 'AUTH_ERROR',
270
+ });
271
+ },
272
+ };
273
+ /**
274
+ * Higher-order function to create protected route handlers
275
+ */
276
+ function protectedRoute(handler, options = {}) {
277
+ return async (req, res, next) => {
278
+ const authMiddleware = requireAuth(options);
279
+ return new Promise((resolve, reject) => {
280
+ authMiddleware(req, res, (error) => {
281
+ if (error) {
282
+ reject(error);
283
+ }
284
+ else {
285
+ Promise.resolve(handler(req, res, next))
286
+ .then(() => resolve())
287
+ .catch(reject);
288
+ }
289
+ });
290
+ });
291
+ };
292
+ }
293
+ /**
294
+ * Session management helpers
295
+ */
296
+ exports.sessionHelpers = {
297
+ /**
298
+ * Store data in session
299
+ */
300
+ async setSessionData(req, key, value) {
301
+ if (req.session) {
302
+ req.session[key] = value;
303
+ await req.session.save();
304
+ }
305
+ },
306
+ /**
307
+ * Get data from session
308
+ */
309
+ getSessionData(req, key) {
310
+ return req.session?.[key] || null;
311
+ },
312
+ /**
313
+ * Remove data from session
314
+ */
315
+ async removeSessionData(req, key) {
316
+ if (req.session && key in req.session.data) {
317
+ delete req.session.data[key];
318
+ await req.session.save();
319
+ }
320
+ },
321
+ /**
322
+ * Clear entire session
323
+ */
324
+ async clearSession(req) {
325
+ if (req.session) {
326
+ await req.session.destroy();
327
+ }
328
+ },
329
+ /**
330
+ * Regenerate session ID
331
+ */
332
+ async regenerateSession(req) {
333
+ if (req.session) {
334
+ return await req.session.regenerate();
335
+ }
336
+ },
337
+ };
338
+ //# sourceMappingURL=auth-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helpers.js","sourceRoot":"","sources":["../../../../src/core/middleware/built-in/auth-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { AuthProvider } from '../../../types/auth';
2
+ /**
3
+ * Popular OAuth Providers for Auth.js
4
+ * These extend the basic providers with more options and popular services
5
+ */
6
+ export declare const extendedProviders: {
7
+ github: (options: {
8
+ clientId: string;
9
+ clientSecret: string;
10
+ scope?: string;
11
+ allowSignup?: boolean;
12
+ }) => AuthProvider;
13
+ google: (options: {
14
+ clientId: string;
15
+ clientSecret: string;
16
+ scope?: string;
17
+ hostedDomain?: string;
18
+ }) => AuthProvider;
19
+ microsoft: (options: {
20
+ clientId: string;
21
+ clientSecret: string;
22
+ tenant?: string;
23
+ scope?: string;
24
+ }) => AuthProvider;
25
+ apple: (options: {
26
+ clientId: string;
27
+ clientSecret: string;
28
+ scope?: string;
29
+ }) => AuthProvider;
30
+ linkedin: (options: {
31
+ clientId: string;
32
+ clientSecret: string;
33
+ scope?: string;
34
+ }) => AuthProvider;
35
+ facebook: (options: {
36
+ clientId: string;
37
+ clientSecret: string;
38
+ scope?: string;
39
+ }) => AuthProvider;
40
+ twitter: (options: {
41
+ clientId: string;
42
+ clientSecret: string;
43
+ version?: "1.0a" | "2.0";
44
+ }) => AuthProvider;
45
+ slack: (options: {
46
+ clientId: string;
47
+ clientSecret: string;
48
+ scope?: string;
49
+ }) => AuthProvider;
50
+ gitlab: (options: {
51
+ clientId: string;
52
+ clientSecret: string;
53
+ domain?: string;
54
+ scope?: string;
55
+ }) => AuthProvider;
56
+ spotify: (options: {
57
+ clientId: string;
58
+ clientSecret: string;
59
+ scope?: string;
60
+ }) => AuthProvider;
61
+ twitch: (options: {
62
+ clientId: string;
63
+ clientSecret: string;
64
+ scope?: string;
65
+ }) => AuthProvider;
66
+ notion: (options: {
67
+ clientId: string;
68
+ clientSecret: string;
69
+ }) => AuthProvider;
70
+ };
71
+ /**
72
+ * Enterprise/SAML providers
73
+ */
74
+ export declare const enterpriseProviders: {
75
+ saml: (options: {
76
+ name: string;
77
+ entryPoint: string;
78
+ issuer: string;
79
+ cert: string;
80
+ callbackUrl?: string;
81
+ }) => AuthProvider;
82
+ okta: (options: {
83
+ clientId: string;
84
+ clientSecret: string;
85
+ domain: string;
86
+ authorizationServerId?: string;
87
+ }) => AuthProvider;
88
+ auth0: (options: {
89
+ clientId: string;
90
+ clientSecret: string;
91
+ domain: string;
92
+ audience?: string;
93
+ }) => AuthProvider;
94
+ cognito: (options: {
95
+ clientId: string;
96
+ clientSecret: string;
97
+ domain: string;
98
+ region?: string;
99
+ }) => AuthProvider;
100
+ };
101
+ /**
102
+ * Helper function to create custom OAuth provider
103
+ */
104
+ export declare function createCustomOAuthProvider(config: {
105
+ id: string;
106
+ name: string;
107
+ clientId: string;
108
+ clientSecret: string;
109
+ authorizationUrl: string;
110
+ tokenUrl: string;
111
+ userinfoUrl: string;
112
+ scope?: string;
113
+ profileMapper?: (profile: any) => any;
114
+ }): AuthProvider;
115
+ /**
116
+ * Helper function to create custom OIDC provider
117
+ */
118
+ export declare function createCustomOIDCProvider(config: {
119
+ id: string;
120
+ name: string;
121
+ clientId: string;
122
+ clientSecret: string;
123
+ issuer: string;
124
+ profileMapper?: (profile: any) => any;
125
+ }): AuthProvider;