@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
package/README.md CHANGED
@@ -24,6 +24,7 @@ Moro eliminates the pain points of traditional Node.js frameworks with **intelli
24
24
 
25
25
  - **Multi-Runtime Support** - Deploy to Node.js, Vercel Edge, AWS Lambda, Cloudflare Workers
26
26
  - **Intelligent Routing** - Chainable + schema-first APIs with automatic middleware ordering
27
+ - **Enterprise Authentication** - Auth.js integration with RBAC, OAuth, and native adapter
27
28
  - **Zod Validation** - Type-safe, functional validation with full TypeScript inference
28
29
  - **Native Performance** - Zero framework overhead, optimized for each runtime
29
30
  - **Functional Architecture** - No decorators, pure functional patterns
@@ -167,6 +168,56 @@ app.route({
167
168
  });
168
169
  ```
169
170
 
171
+ ### Authentication & Security
172
+
173
+ Built-in Auth.js integration with enterprise features:
174
+
175
+ ```typescript
176
+ import { auth, requireAuth, authUtils } from '@morojs/moro/middleware';
177
+
178
+ // Setup Auth.js with multiple providers
179
+ app.use(auth({
180
+ providers: [
181
+ providers.github({
182
+ clientId: process.env.GITHUB_CLIENT_ID!,
183
+ clientSecret: process.env.GITHUB_CLIENT_SECRET!,
184
+ }),
185
+ providers.google({
186
+ clientId: process.env.GOOGLE_CLIENT_ID!,
187
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
188
+ }),
189
+ ],
190
+ secret: process.env.AUTH_SECRET!,
191
+ }));
192
+
193
+ // Protect routes with role-based access
194
+ app.get('/admin/users', withMiddleware(requireAuth({
195
+ roles: ['admin']
196
+ }), (req, res) => {
197
+ return { users: getAllUsers() };
198
+ }));
199
+
200
+ // Manual authentication checks
201
+ app.get('/profile', (req, res) => {
202
+ if (!authUtils.isAuthenticated(req)) {
203
+ return authResponses.unauthorized(res);
204
+ }
205
+
206
+ return {
207
+ user: authUtils.getUser(req),
208
+ permissions: authUtils.getUserPermissions(req)
209
+ };
210
+ });
211
+ ```
212
+
213
+ **Features:**
214
+ - **OAuth Providers** - GitHub, Google, Microsoft, LinkedIn, Discord
215
+ - **Enterprise SSO** - Okta, Auth0, AWS Cognito
216
+ - **Role-Based Access Control (RBAC)** - Fine-grained permissions
217
+ - **Native Auth.js Adapter** - Zero external dependencies
218
+ - **Security Audit Logging** - Track authentication events
219
+ - **Production Ready** - JWT sessions, CSRF protection, secure cookies
220
+
170
221
  ### Functional Modules
171
222
 
172
223
  ```typescript
@@ -193,6 +244,8 @@ await app.loadModule(UsersModule);
193
244
 
194
245
  ### **Complete Guides**
195
246
  - [**Getting Started**](./docs/GETTING_STARTED.md) - Detailed setup and first app
247
+ - [**Authentication Guide**](./docs/AUTH_GUIDE.md) - Complete Auth.js integration with RBAC
248
+ - [**Native Auth Adapter**](./docs/NATIVE_AUTH_ADAPTER.md) - Custom `@auth/morojs` adapter
196
249
  - [**API Reference**](./docs/API.md) - Complete framework API documentation
197
250
  - [**Migration Guide**](./docs/MIGRATION.md) - From Express, Fastify, NestJS
198
251
  - [**Performance Guide**](./docs/PERFORMANCE.md) - Optimization and benchmarks
@@ -202,6 +255,7 @@ await app.loadModule(UsersModule);
202
255
  ### **Key Concepts**
203
256
  - **Multi-Runtime Support** - Same API works on Node.js, Edge, Lambda, and Workers
204
257
  - **Intelligent Routing** - Automatic middleware ordering eliminates Express.js pain points
258
+ - **Enterprise Authentication** - Auth.js integration with OAuth, RBAC, and native adapter
205
259
  - **Functional Architecture** - No decorators, pure functions, better performance
206
260
  - **Type Safety** - Zod provides compile-time and runtime type safety
207
261
 
@@ -209,9 +263,10 @@ await app.loadModule(UsersModule);
209
263
 
210
264
  **Same API everywhere** - Write once, deploy to any runtime
211
265
  **No middleware dependencies** - Framework handles optimal ordering
266
+ **Enterprise authentication** - Auth.js integration with native adapter
212
267
  **Full type safety** - Zod provides end-to-end TypeScript inference
213
268
  **Clean APIs** - Chainable and schema-first approaches
214
- **Production ready** - Circuit breakers, rate limiting, events
269
+ **Production ready** - Circuit breakers, rate limiting, events, RBAC
215
270
  **Performance optimized** - Runtime-specific adapters
216
271
 
217
272
  ## Contributing
@@ -228,6 +283,6 @@ MIT © [Moro Framework Team](https://morojs.com)
228
283
 
229
284
  **Ready to deploy everywhere with one codebase?**
230
285
 
231
- [Get Started](./docs/GETTING_STARTED.md) • [GitHub](https://github.com/Moro-JS/moro) • [npm](https://www.npmjs.com/package/@morojs/moro)
286
+ [Get Started](./docs/GETTING_STARTED.md) • [GitHub](https://github.com/Moro-JS/moro) • [npm](https://www.npmjs.com/package/@morojs/moro) • [Discord](https://morojs.com/discord)
232
287
 
233
288
  </div>
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Auth.js Adapter for MoroJS
3
+ *
4
+ * This adapter allows Auth.js to work seamlessly with MoroJS framework.
5
+ * It can be contributed to the Auth.js project as @auth/morojs
6
+ *
7
+ * @see https://authjs.dev/guides/adapters/creating-a-custom-adapter
8
+ * @see https://github.com/nextauthjs/next-auth/tree/main/packages
9
+ */
10
+ export interface AuthConfig {
11
+ providers: any[];
12
+ secret?: string;
13
+ session?: any;
14
+ callbacks?: any;
15
+ events?: any;
16
+ pages?: any;
17
+ adapter?: any;
18
+ debug?: boolean;
19
+ basePath?: string;
20
+ [key: string]: any;
21
+ }
22
+ export interface Session {
23
+ user: {
24
+ id: string;
25
+ name?: string | null;
26
+ email?: string | null;
27
+ image?: string | null;
28
+ [key: string]: any;
29
+ };
30
+ expires: string;
31
+ [key: string]: any;
32
+ }
33
+ export type AuthAction = 'signin' | 'signout' | 'callback' | 'session' | 'providers' | 'csrf';
34
+ export interface MoroJSAuthConfig extends Omit<AuthConfig, 'raw'> {
35
+ /**
36
+ * Base path for auth routes in MoroJS
37
+ * @default "/api/auth"
38
+ */
39
+ basePath?: string;
40
+ /**
41
+ * MoroJS-specific options
42
+ */
43
+ morojs?: {
44
+ /**
45
+ * Enable MoroJS-specific logging
46
+ * @default false
47
+ */
48
+ debug?: boolean;
49
+ /**
50
+ * Custom request/response transformers
51
+ */
52
+ transformers?: {
53
+ request?: (req: any) => any;
54
+ response?: (res: any) => any;
55
+ };
56
+ };
57
+ }
58
+ export interface MoroJSRequest {
59
+ url?: string;
60
+ method?: string;
61
+ headers?: Record<string, string>;
62
+ body?: any;
63
+ query?: Record<string, string>;
64
+ cookies?: Record<string, string>;
65
+ }
66
+ export interface MoroJSResponse {
67
+ status(code: number): MoroJSResponse;
68
+ json(data: any): Promise<void>;
69
+ redirect(url: string): void;
70
+ setHeader(name: string, value: string): void;
71
+ cookie(name: string, value: string, options?: any): void;
72
+ send(data: any): void;
73
+ end(data?: any): void;
74
+ headersSent: boolean;
75
+ }
76
+ /**
77
+ * Main MoroJS Auth.js handler
78
+ *
79
+ * This is the core function that integrates Auth.js with MoroJS
80
+ */
81
+ export declare function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
82
+ handler: (req: MoroJSRequest, res: MoroJSResponse) => Promise<void>;
83
+ auth: (req: MoroJSRequest) => Promise<Session | null>;
84
+ }>;
85
+ /**
86
+ * MoroJS Auth middleware factory
87
+ *
88
+ * This creates a MoroJS-compatible middleware for authentication
89
+ */
90
+ export declare function createAuthMiddleware(config: MoroJSAuthConfig): (app: any) => Promise<void>;
91
+ /**
92
+ * Default export for convenience
93
+ */
94
+ export default MoroJSAuth;
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /**
3
+ * Auth.js Adapter for MoroJS
4
+ *
5
+ * This adapter allows Auth.js to work seamlessly with MoroJS framework.
6
+ * It can be contributed to the Auth.js project as @auth/morojs
7
+ *
8
+ * @see https://authjs.dev/guides/adapters/creating-a-custom-adapter
9
+ * @see https://github.com/nextauthjs/next-auth/tree/main/packages
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MoroJSAuth = MoroJSAuth;
13
+ exports.createAuthMiddleware = createAuthMiddleware;
14
+ // Mock Auth function - would be imported from @auth/core
15
+ const Auth = async (request, config) => {
16
+ // This is a placeholder implementation
17
+ // In the real version, this would be the actual Auth.js core function
18
+ const url = new URL(request.url);
19
+ const pathname = url.pathname;
20
+ if (pathname === '/session') {
21
+ return new Response(JSON.stringify({ user: null }), {
22
+ status: 200,
23
+ headers: { 'content-type': 'application/json' },
24
+ });
25
+ }
26
+ return new Response('Not implemented', { status: 501 });
27
+ };
28
+ /**
29
+ * Convert MoroJS request to Auth.js Web API Request
30
+ */
31
+ function toWebRequest(req, basePath) {
32
+ const url = new URL(req.url || '/', 'http://localhost:3000');
33
+ // Handle auth routes
34
+ if (url.pathname.startsWith(basePath)) {
35
+ url.pathname = url.pathname.replace(basePath, '');
36
+ }
37
+ const headers = new Headers();
38
+ if (req.headers) {
39
+ Object.entries(req.headers).forEach(([key, value]) => {
40
+ headers.set(key, value);
41
+ });
42
+ }
43
+ // Add cookies to headers if not present
44
+ if (req.cookies && Object.keys(req.cookies).length > 0) {
45
+ const cookieHeader = Object.entries(req.cookies)
46
+ .map(([name, value]) => `${name}=${value}`)
47
+ .join('; ');
48
+ if (!headers.has('cookie')) {
49
+ headers.set('cookie', cookieHeader);
50
+ }
51
+ }
52
+ const body = req.body ? JSON.stringify(req.body) : undefined;
53
+ return new Request(url.toString(), {
54
+ method: req.method || 'GET',
55
+ headers,
56
+ body,
57
+ });
58
+ }
59
+ /**
60
+ * Convert Auth.js Web API Response to MoroJS response
61
+ */
62
+ async function fromWebResponse(webResponse, moroResponse) {
63
+ // Set status
64
+ moroResponse.status(webResponse.status);
65
+ // Set headers
66
+ webResponse.headers.forEach((value, key) => {
67
+ if (key.toLowerCase() === 'set-cookie') {
68
+ // Handle cookies specially for MoroJS
69
+ const cookies = value.split(', ');
70
+ cookies.forEach(cookie => {
71
+ const [nameValue, ...options] = cookie.split('; ');
72
+ const [name, cookieValue] = nameValue.split('=');
73
+ // Parse cookie options
74
+ const cookieOptions = {};
75
+ options.forEach(option => {
76
+ const [optKey, optValue] = option.split('=');
77
+ switch (optKey.toLowerCase()) {
78
+ case 'max-age':
79
+ cookieOptions.maxAge = parseInt(optValue, 10);
80
+ break;
81
+ case 'expires':
82
+ cookieOptions.expires = new Date(optValue);
83
+ break;
84
+ case 'httponly':
85
+ cookieOptions.httpOnly = true;
86
+ break;
87
+ case 'secure':
88
+ cookieOptions.secure = true;
89
+ break;
90
+ case 'samesite':
91
+ cookieOptions.sameSite = optValue;
92
+ break;
93
+ case 'path':
94
+ cookieOptions.path = optValue;
95
+ break;
96
+ case 'domain':
97
+ cookieOptions.domain = optValue;
98
+ break;
99
+ }
100
+ });
101
+ moroResponse.cookie(name, cookieValue, cookieOptions);
102
+ });
103
+ }
104
+ else if (key.toLowerCase() === 'location') {
105
+ // Handle redirects
106
+ moroResponse.redirect(value);
107
+ return;
108
+ }
109
+ else {
110
+ moroResponse.setHeader(key, value);
111
+ }
112
+ });
113
+ // Handle response body
114
+ const contentType = webResponse.headers.get('content-type');
115
+ if (webResponse.status >= 300 && webResponse.status < 400) {
116
+ // Redirect - already handled above
117
+ return;
118
+ }
119
+ else if (contentType?.includes('application/json')) {
120
+ const data = await webResponse.json();
121
+ await moroResponse.json(data);
122
+ }
123
+ else {
124
+ const text = await webResponse.text();
125
+ moroResponse.send(text);
126
+ }
127
+ }
128
+ /**
129
+ * Main MoroJS Auth.js handler
130
+ *
131
+ * This is the core function that integrates Auth.js with MoroJS
132
+ */
133
+ async function MoroJSAuth(config) {
134
+ const basePath = config.basePath || '/api/auth';
135
+ return {
136
+ /**
137
+ * Main request handler for auth routes
138
+ */
139
+ handler: async (req, res) => {
140
+ try {
141
+ // Convert MoroJS request to Web API request
142
+ const webRequest = toWebRequest(req, basePath);
143
+ // Determine the auth action from the URL
144
+ const url = new URL(webRequest.url);
145
+ const action = url.pathname.split('/')[1] || 'session';
146
+ // Apply request transformer if provided
147
+ let transformedRequest = webRequest;
148
+ if (config.morojs?.transformers?.request) {
149
+ transformedRequest = config.morojs.transformers.request(webRequest);
150
+ }
151
+ // Call Auth.js core
152
+ const authResponse = await Auth(transformedRequest, {
153
+ ...config,
154
+ basePath,
155
+ raw: (code, ...message) => {
156
+ if (config.morojs?.debug) {
157
+ console.log(`[MoroJS Auth] ${code}:`, ...message);
158
+ }
159
+ },
160
+ });
161
+ // Apply response transformer if provided
162
+ let finalResponse = authResponse;
163
+ if (config.morojs?.transformers?.response) {
164
+ finalResponse = config.morojs.transformers.response(authResponse);
165
+ }
166
+ // Convert Web API response to MoroJS response
167
+ await fromWebResponse(finalResponse, res);
168
+ }
169
+ catch (error) {
170
+ console.error('[MoroJS Auth] Error:', error);
171
+ // Robust error handling - check if response methods exist
172
+ if (typeof res.status === 'function' && typeof res.json === 'function') {
173
+ res.status(500).json({
174
+ error: 'Internal server error',
175
+ message: config.morojs?.debug ? error.message : 'Authentication error',
176
+ });
177
+ }
178
+ else {
179
+ // Fallback to basic Node.js response methods
180
+ res.statusCode = 500;
181
+ res.setHeader('Content-Type', 'application/json');
182
+ res.end(JSON.stringify({
183
+ error: 'Internal server error',
184
+ message: config.morojs?.debug ? error.message : 'Authentication error',
185
+ }));
186
+ }
187
+ }
188
+ },
189
+ /**
190
+ * Get session for the current request
191
+ */
192
+ auth: async (req) => {
193
+ try {
194
+ // Create a session request
195
+ const sessionUrl = new URL('/session', 'http://localhost:3000');
196
+ const sessionRequest = new Request(sessionUrl.toString(), {
197
+ method: 'GET',
198
+ headers: req.headers ? new Headers(req.headers) : new Headers(),
199
+ });
200
+ // Get session from Auth.js
201
+ const response = await Auth(sessionRequest, {
202
+ ...config,
203
+ basePath,
204
+ });
205
+ if (response.status === 200) {
206
+ const session = await response.json();
207
+ return session;
208
+ }
209
+ return null;
210
+ }
211
+ catch (error) {
212
+ if (config.morojs?.debug) {
213
+ console.error('[MoroJS Auth] Session error:', error);
214
+ }
215
+ return null;
216
+ }
217
+ },
218
+ };
219
+ }
220
+ /**
221
+ * MoroJS Auth middleware factory
222
+ *
223
+ * This creates a MoroJS-compatible middleware for authentication
224
+ */
225
+ function createAuthMiddleware(config) {
226
+ console.log('🏭 createAuthMiddleware called - creating middleware function');
227
+ // Return a function that MoroJS can call directly
228
+ return async (app) => {
229
+ console.log('🔧 Installing Auth.js middleware...');
230
+ console.log('📦 App object received:', typeof app, app.constructor.name);
231
+ // Get the hooks from the app's middleware system
232
+ const hooks = app.coreFramework?.middlewareManager?.hooks || app.middlewareManager?.hooks;
233
+ if (!hooks) {
234
+ console.error('❌ Could not access MoroJS hooks system');
235
+ return;
236
+ }
237
+ const options = {};
238
+ const mergedConfig = { ...config, ...options };
239
+ const { handler, auth } = await MoroJSAuth(mergedConfig);
240
+ const basePath = mergedConfig.basePath || '/api/auth';
241
+ // Register request hook
242
+ hooks.before('request', async (context) => {
243
+ console.log('🔒 Native adapter hook starting...');
244
+ const req = context.request;
245
+ console.log('📝 Request path:', req.path || req.url);
246
+ try {
247
+ // Just add auth object to request - don't touch response
248
+ req.auth = {
249
+ session: null,
250
+ user: null,
251
+ isAuthenticated: false,
252
+ // Helper methods
253
+ getSession: () => Promise.resolve(null),
254
+ getUser: () => null,
255
+ // Sign in/out helpers (redirect to auth routes)
256
+ signIn: (provider, options) => {
257
+ const params = new URLSearchParams();
258
+ if (provider)
259
+ params.set('provider', provider);
260
+ if (options?.callbackUrl)
261
+ params.set('callbackUrl', options.callbackUrl);
262
+ const signInUrl = `${basePath}/signin${provider ? `/${provider}` : ''}${params.toString() ? `?${params.toString()}` : ''}`;
263
+ return { url: signInUrl };
264
+ },
265
+ signOut: (options) => {
266
+ const params = new URLSearchParams();
267
+ if (options?.callbackUrl)
268
+ params.set('callbackUrl', options.callbackUrl);
269
+ const signOutUrl = `${basePath}/signout${params.toString() ? `?${params.toString()}` : ''}`;
270
+ return { url: signOutUrl };
271
+ },
272
+ };
273
+ console.log('✅ Native adapter hook completed successfully');
274
+ }
275
+ catch (error) {
276
+ console.error('❌ Error in native adapter hook:', error);
277
+ throw error;
278
+ }
279
+ });
280
+ console.log('✅ Auth.js middleware installed successfully!');
281
+ };
282
+ }
283
+ // Types are already exported above, no need to re-export
284
+ /**
285
+ * Default export for convenience
286
+ */
287
+ exports.default = MoroJSAuth;
288
+ //# sourceMappingURL=morojs-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morojs-adapter.js","sourceRoot":"","sources":["../../../src/core/auth/morojs-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { AppConfig } from './schema';
2
+ /**
3
+ * Find and load configuration from moro.config.js (synchronously)
4
+ * @param cwd Current working directory to search for config files
5
+ * @returns Partial configuration object or null if no config file found
6
+ */
7
+ export declare function loadConfigFileSync(cwd?: string): Partial<AppConfig> | null;
8
+ /**
9
+ * Find and load configuration from moro.config.js or moro.config.ts (async)
10
+ * @param cwd Current working directory to search for config files
11
+ * @returns Partial configuration object or null if no config file found
12
+ */
13
+ export declare function loadConfigFile(cwd?: string): Promise<Partial<AppConfig> | null>;
14
+ /**
15
+ * Convert a configuration object to environment variable mappings
16
+ * This function flattens the config object and sets corresponding environment variables
17
+ */
18
+ export declare function applyConfigAsEnvironmentVariables(config: Partial<AppConfig>): void;