myaidev-method 0.2.7 → 0.2.9

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 (163) hide show
  1. package/.claude/agents/wordpress-admin.md +271 -0
  2. package/.env.example +0 -1
  3. package/COOLIFY_DEPLOYMENT.md +1 -1
  4. package/DEV_WORKFLOW_GUIDE.md +1 -1
  5. package/PACKAGE_FIXES_SUMMARY.md +319 -0
  6. package/PAYLOADCMS_AUTH_UPDATE.md +248 -0
  7. package/PUBLISHING_GUIDE.md +1 -1
  8. package/README.md +7 -7
  9. package/USER_GUIDE.md +261 -1
  10. package/WORDPRESS_ADMIN_SCRIPTS.md +1 -1
  11. package/bin/cli.js +36 -0
  12. package/dist/server/.tsbuildinfo +1 -0
  13. package/dist/server/auth/controllers/AuthController.d.ts +34 -0
  14. package/dist/server/auth/controllers/AuthController.d.ts.map +1 -0
  15. package/dist/server/auth/controllers/AuthController.js +43 -0
  16. package/dist/server/auth/controllers/AuthController.js.map +1 -0
  17. package/dist/server/auth/example-usage.d.ts +53 -0
  18. package/dist/server/auth/example-usage.d.ts.map +1 -0
  19. package/dist/server/auth/example-usage.js +129 -0
  20. package/dist/server/auth/example-usage.js.map +1 -0
  21. package/dist/server/auth/index.d.ts +11 -0
  22. package/dist/server/auth/index.d.ts.map +1 -0
  23. package/dist/server/auth/index.js +15 -0
  24. package/dist/server/auth/index.js.map +1 -0
  25. package/dist/server/auth/layers.d.ts +19 -0
  26. package/dist/server/auth/layers.d.ts.map +1 -0
  27. package/dist/server/auth/layers.js +33 -0
  28. package/dist/server/auth/layers.js.map +1 -0
  29. package/dist/server/auth/middleware/authMiddleware.d.ts +24 -0
  30. package/dist/server/auth/middleware/authMiddleware.d.ts.map +1 -0
  31. package/dist/server/auth/middleware/authMiddleware.js +65 -0
  32. package/dist/server/auth/middleware/authMiddleware.js.map +1 -0
  33. package/dist/server/auth/routes/authRoutes.d.ts +11 -0
  34. package/dist/server/auth/routes/authRoutes.d.ts.map +1 -0
  35. package/dist/server/auth/routes/authRoutes.js +213 -0
  36. package/dist/server/auth/routes/authRoutes.js.map +1 -0
  37. package/dist/server/auth/services/AuditLogService.d.ts +21 -0
  38. package/dist/server/auth/services/AuditLogService.d.ts.map +1 -0
  39. package/dist/server/auth/services/AuditLogService.js +28 -0
  40. package/dist/server/auth/services/AuditLogService.js.map +1 -0
  41. package/dist/server/auth/services/AuthService.d.ts +27 -0
  42. package/dist/server/auth/services/AuthService.d.ts.map +1 -0
  43. package/dist/server/auth/services/AuthService.js +246 -0
  44. package/dist/server/auth/services/AuthService.js.map +1 -0
  45. package/dist/server/auth/services/PasswordService.d.ts +12 -0
  46. package/dist/server/auth/services/PasswordService.d.ts.map +1 -0
  47. package/dist/server/auth/services/PasswordService.js +31 -0
  48. package/dist/server/auth/services/PasswordService.js.map +1 -0
  49. package/dist/server/auth/services/SessionRepository.d.ts +24 -0
  50. package/dist/server/auth/services/SessionRepository.d.ts.map +1 -0
  51. package/dist/server/auth/services/SessionRepository.js +101 -0
  52. package/dist/server/auth/services/SessionRepository.js.map +1 -0
  53. package/dist/server/auth/services/TokenService.d.ts +12 -0
  54. package/dist/server/auth/services/TokenService.d.ts.map +1 -0
  55. package/dist/server/auth/services/TokenService.js +86 -0
  56. package/dist/server/auth/services/TokenService.js.map +1 -0
  57. package/dist/server/auth/services/UserRepository.d.ts +23 -0
  58. package/dist/server/auth/services/UserRepository.d.ts.map +1 -0
  59. package/dist/server/auth/services/UserRepository.js +168 -0
  60. package/dist/server/auth/services/UserRepository.js.map +1 -0
  61. package/dist/server/auth/services/example.d.ts +26 -0
  62. package/dist/server/auth/services/example.d.ts.map +1 -0
  63. package/dist/server/auth/services/example.js +221 -0
  64. package/dist/server/auth/services/example.js.map +1 -0
  65. package/dist/server/auth/services/index.d.ts +6 -0
  66. package/dist/server/auth/services/index.d.ts.map +1 -0
  67. package/dist/server/auth/services/index.js +7 -0
  68. package/dist/server/auth/services/index.js.map +1 -0
  69. package/dist/server/database/db.d.ts +28 -0
  70. package/dist/server/database/db.d.ts.map +1 -0
  71. package/dist/server/database/db.js +91 -0
  72. package/dist/server/database/db.js.map +1 -0
  73. package/dist/server/database/schema.sql +95 -0
  74. package/dist/server/hono/app.d.ts +10 -0
  75. package/dist/server/hono/app.d.ts.map +1 -0
  76. package/dist/server/hono/app.js +26 -0
  77. package/dist/server/hono/app.js.map +1 -0
  78. package/dist/server/hono/routes.d.ts +12 -0
  79. package/dist/server/hono/routes.d.ts.map +1 -0
  80. package/dist/server/hono/routes.js +40 -0
  81. package/dist/server/hono/routes.js.map +1 -0
  82. package/dist/server/main.d.ts +2 -0
  83. package/dist/server/main.d.ts.map +1 -0
  84. package/dist/server/main.js +94 -0
  85. package/dist/server/main.js.map +1 -0
  86. package/dist/server/user-management/DirectoryService.d.ts +62 -0
  87. package/dist/server/user-management/DirectoryService.d.ts.map +1 -0
  88. package/dist/server/user-management/DirectoryService.js +201 -0
  89. package/dist/server/user-management/DirectoryService.js.map +1 -0
  90. package/dist/server/user-management/LinuxUserService.d.ts +71 -0
  91. package/dist/server/user-management/LinuxUserService.d.ts.map +1 -0
  92. package/dist/server/user-management/LinuxUserService.js +192 -0
  93. package/dist/server/user-management/LinuxUserService.js.map +1 -0
  94. package/dist/server/user-management/QuotaService.d.ts +59 -0
  95. package/dist/server/user-management/QuotaService.d.ts.map +1 -0
  96. package/dist/server/user-management/QuotaService.js +148 -0
  97. package/dist/server/user-management/QuotaService.js.map +1 -0
  98. package/dist/server/user-management/UserManagementService.d.ts +74 -0
  99. package/dist/server/user-management/UserManagementService.d.ts.map +1 -0
  100. package/dist/server/user-management/UserManagementService.js +122 -0
  101. package/dist/server/user-management/UserManagementService.js.map +1 -0
  102. package/dist/server/user-management/index.d.ts +26 -0
  103. package/dist/server/user-management/index.d.ts.map +1 -0
  104. package/dist/server/user-management/index.js +26 -0
  105. package/dist/server/user-management/index.js.map +1 -0
  106. package/dist/server/user-management/layers.d.ts +27 -0
  107. package/dist/server/user-management/layers.d.ts.map +1 -0
  108. package/dist/server/user-management/layers.js +37 -0
  109. package/dist/server/user-management/layers.js.map +1 -0
  110. package/dist/shared/types.d.ts +94 -0
  111. package/dist/shared/types.d.ts.map +1 -0
  112. package/dist/shared/types.js +32 -0
  113. package/dist/shared/types.js.map +1 -0
  114. package/package.json +26 -6
  115. package/src/lib/payloadcms-utils.js +5 -12
  116. package/src/server/auth/ARCHITECTURE.md +575 -0
  117. package/src/server/auth/IMPLEMENTATION_SUMMARY.md +287 -0
  118. package/src/server/auth/QUICK_START.md +283 -0
  119. package/src/server/auth/README.md +290 -0
  120. package/src/server/auth/controllers/AuthController.ts +129 -0
  121. package/src/server/auth/example-usage.ts +159 -0
  122. package/src/server/auth/index.ts +19 -0
  123. package/src/server/auth/layers.ts +57 -0
  124. package/src/server/auth/middleware/authMiddleware.ts +118 -0
  125. package/src/server/auth/routes/authRoutes.ts +319 -0
  126. package/src/server/auth/services/AuditLogService.ts +81 -0
  127. package/src/server/auth/services/AuthService.ts +408 -0
  128. package/src/server/auth/services/IMPLEMENTATION_SUMMARY.md +404 -0
  129. package/src/server/auth/services/PasswordService.ts +85 -0
  130. package/src/server/auth/services/README.md +361 -0
  131. package/src/server/auth/services/SessionRepository.ts +227 -0
  132. package/src/server/auth/services/TokenService.ts +174 -0
  133. package/src/server/auth/services/UserRepository.ts +318 -0
  134. package/src/server/auth/services/example.ts +346 -0
  135. package/src/server/auth/services/index.ts +6 -0
  136. package/src/server/database/db.ts +161 -0
  137. package/src/server/database/schema.sql +95 -0
  138. package/src/server/hono/app.ts +41 -0
  139. package/src/server/main.ts +115 -0
  140. package/src/server/user-management/DirectoryService.ts +348 -0
  141. package/src/server/user-management/LinuxUserService.ts +338 -0
  142. package/src/server/user-management/QuotaService.ts +256 -0
  143. package/src/server/user-management/README.md +333 -0
  144. package/src/server/user-management/UserManagementService.ts +335 -0
  145. package/src/server/user-management/index.ts +26 -0
  146. package/src/server/user-management/layers.ts +51 -0
  147. package/src/shared/types.ts +111 -0
  148. package/src/templates/claude/agents/payloadcms-publish.md +34 -14
  149. package/src/templates/codex/commands/myai-astro-publish.md +8 -2
  150. package/src/templates/codex/commands/myai-content-writer.md +8 -2
  151. package/src/templates/codex/commands/myai-coolify-deploy.md +8 -2
  152. package/src/templates/codex/commands/myai-dev-architect.md +8 -2
  153. package/src/templates/codex/commands/myai-dev-code.md +8 -2
  154. package/src/templates/codex/commands/myai-dev-docs.md +8 -2
  155. package/src/templates/codex/commands/myai-dev-review.md +8 -2
  156. package/src/templates/codex/commands/myai-dev-test.md +8 -2
  157. package/src/templates/codex/commands/myai-docusaurus-publish.md +8 -2
  158. package/src/templates/codex/commands/myai-mintlify-publish.md +8 -2
  159. package/src/templates/codex/commands/myai-payloadcms-publish.md +17 -3
  160. package/src/templates/codex/commands/myai-sparc-workflow.md +8 -2
  161. package/src/templates/codex/commands/myai-wordpress-admin.md +8 -2
  162. package/src/templates/codex/commands/myai-wordpress-publish.md +8 -2
  163. package/src/templates/docs/wordpress-troubleshoot.js +2 -2
@@ -0,0 +1,287 @@
1
+ # Authentication Implementation Summary
2
+
3
+ ## Completed Components
4
+
5
+ ### 1. AuthService (/src/server/auth/services/AuthService.ts)
6
+ **High-level authentication orchestration service**
7
+
8
+ ✅ **register(username, email, password, ipAddress?, userAgent?)**
9
+ - Validates username (3-32 chars, alphanumeric + underscore)
10
+ - Validates email format
11
+ - Validates password strength (8+ chars, uppercase, lowercase, number)
12
+ - Checks for duplicate email/username
13
+ - Hashes password with bcrypt
14
+ - Generates unique Linux username (sanitized, lowercase, unique)
15
+ - Creates user in database
16
+ - Logs USER_REGISTERED audit event
17
+
18
+ ✅ **login(email, password, ipAddress?, userAgent?)**
19
+ - Finds user by email
20
+ - Checks account lockout status (5 failed attempts = 15 min lockout)
21
+ - Verifies password
22
+ - Increments failed attempts on failure
23
+ - Resets failed attempts on success
24
+ - Updates last login timestamp
25
+ - Creates session with token hash
26
+ - Generates JWT token (RS256, 7 day expiry)
27
+ - Logs USER_LOGIN or LOGIN_FAILED audit event
28
+
29
+ ✅ **logout(sessionId, userId)**
30
+ - Revokes session in database
31
+ - Logs USER_LOGOUT audit event
32
+
33
+ ✅ **verifyToken(token)**
34
+ - Verifies JWT signature and expiry
35
+ - Hashes token to find session
36
+ - Checks session not expired or revoked
37
+ - Finds and validates user (active status)
38
+ - Returns user and session objects
39
+
40
+ ### 2. authMiddleware (/src/server/auth/middleware/authMiddleware.ts)
41
+ **Hono middleware for authentication**
42
+
43
+ ✅ **Token Extraction**
44
+ - Supports `Authorization: Bearer <token>` header
45
+ - Supports `auth_token` httpOnly cookie
46
+ - Returns 401 if no token found
47
+
48
+ ✅ **Token Verification**
49
+ - Calls AuthService.verifyToken()
50
+ - Handles all error types (AuthError, DatabaseError)
51
+ - Uses Effect.runPromise with AppLayer
52
+
53
+ ✅ **Context Injection**
54
+ - Injects `user` into Hono context (c.set('user', user))
55
+ - Injects `session` into Hono context (c.set('session', session))
56
+ - TypeScript declaration extends ContextVariableMap
57
+
58
+ ✅ **Error Handling**
59
+ - AuthError → 401 Unauthorized
60
+ - DatabaseError → 500 Internal Server Error
61
+ - Unknown errors → 500 Internal Server Error
62
+
63
+ ### 3. authRoutes (/src/server/auth/routes/authRoutes.ts)
64
+ **Hono router with authentication endpoints**
65
+
66
+ ✅ **POST /api/auth/register**
67
+ - Validates required fields (username, email, password)
68
+ - Extracts IP address (x-forwarded-for, x-real-ip headers)
69
+ - Extracts user agent
70
+ - Calls AuthService.register()
71
+ - Returns user object (201 Created)
72
+ - Error handling: ValidationError → 400, AuthError → 400, DatabaseError → 500
73
+
74
+ ✅ **POST /api/auth/login**
75
+ - Validates required fields (email, password)
76
+ - Extracts IP address and user agent
77
+ - Calls AuthService.login()
78
+ - Sets httpOnly cookie with token
79
+ - Returns user object + token (200 OK)
80
+ - Error handling: AuthError → 401, DatabaseError → 500
81
+
82
+ ✅ **POST /api/auth/logout** (protected)
83
+ - Requires authMiddleware
84
+ - Gets user and session from context
85
+ - Calls AuthService.logout()
86
+ - Clears auth_token cookie
87
+ - Returns success message (200 OK)
88
+ - Error handling: DatabaseError → 500
89
+
90
+ ✅ **GET /api/auth/me** (protected)
91
+ - Requires authMiddleware
92
+ - Gets user from context
93
+ - Returns user profile data
94
+ - Includes: id, username, email, emailVerified, createdAt, lastLoginAt
95
+ - Error handling: Generic 500 for unexpected errors
96
+
97
+ ### 4. AuthController (/src/server/auth/controllers/AuthController.ts)
98
+ **Optional Effect-TS controller for clean architecture**
99
+
100
+ ✅ **register(data, ipAddress?, userAgent?)**
101
+ - Wraps AuthService.register()
102
+ - Returns formatted user object
103
+ - Effect-TS service pattern
104
+
105
+ ✅ **login(data, ipAddress?, userAgent?)**
106
+ - Wraps AuthService.login()
107
+ - Returns formatted response with user + token
108
+ - Effect-TS service pattern
109
+
110
+ ✅ **logout(sessionId, userId)**
111
+ - Wraps AuthService.logout()
112
+ - Effect-TS service pattern
113
+
114
+ ✅ **me(user)**
115
+ - Returns formatted user profile
116
+ - Synchronous Effect.succeed
117
+ - Effect-TS service pattern
118
+
119
+ ### 5. AppLayer (middleware/authMiddleware.ts)
120
+ **Complete dependency layer composition**
121
+
122
+ ✅ **Layer Structure**
123
+ ```typescript
124
+ Layer.mergeAll(
125
+ DatabaseService.Live,
126
+ PasswordService.Live,
127
+ TokenService.Live
128
+ ).pipe(
129
+ Layer.provideMerge(UserRepository.Live),
130
+ Layer.provideMerge(SessionRepository.Live),
131
+ Layer.provideMerge(AuditLogService.Live),
132
+ Layer.provideMerge(AuthService.Live)
133
+ )
134
+ ```
135
+
136
+ ### 6. Supporting Files
137
+
138
+ ✅ **/src/server/auth/index.ts**
139
+ - Barrel export for all auth modules
140
+ - Clean public API
141
+
142
+ ✅ **/src/server/auth/README.md**
143
+ - Comprehensive documentation
144
+ - Architecture overview
145
+ - Security features
146
+ - Usage examples
147
+ - API reference
148
+ - Testing guide
149
+
150
+ ✅ **/src/server/auth/example-usage.ts**
151
+ - Complete Hono integration example
152
+ - Protected route examples
153
+ - Admin route example
154
+ - curl command examples
155
+ - Setup instructions
156
+
157
+ ## Security Features Implemented
158
+
159
+ ### Password Security
160
+ ✅ Minimum 8 characters
161
+ ✅ Uppercase + lowercase + number requirements
162
+ ✅ bcrypt hashing (12 rounds)
163
+ ✅ Password strength validation
164
+
165
+ ### Account Lockout
166
+ ✅ 5 failed attempts trigger
167
+ ✅ 15 minute lockout duration
168
+ ✅ Automatic unlock after duration
169
+ ✅ Failed attempts reset on success
170
+
171
+ ### Session Management
172
+ ✅ JWT with RS256 signing
173
+ ✅ 7 day token expiration
174
+ ✅ Session stored with SHA-256 token hash
175
+ ✅ Session validation on every request
176
+ ✅ Revocable sessions
177
+
178
+ ### Cookie Security
179
+ ✅ httpOnly flag
180
+ ✅ secure flag (production only)
181
+ ✅ sameSite=strict
182
+ ✅ 7 day maxAge
183
+ ✅ path=/
184
+
185
+ ### Linux Username Generation
186
+ ✅ Sanitized from username
187
+ ✅ Lowercase alphanumeric + underscores
188
+ ✅ Must start with letter
189
+ ✅ Max 32 characters
190
+ ✅ Guaranteed uniqueness with counter suffix
191
+
192
+ ### Audit Logging
193
+ ✅ USER_REGISTERED events
194
+ ✅ USER_LOGIN events
195
+ ✅ USER_LOGOUT events
196
+ ✅ LOGIN_FAILED events
197
+ ✅ IP address tracking
198
+ ✅ User agent tracking
199
+
200
+ ## Effect-TS Patterns Used
201
+
202
+ ### Context.Tag Pattern
203
+ ✅ All services extend Context.Tag
204
+ ✅ Type-safe dependency injection
205
+ ✅ Service interface definitions
206
+
207
+ ### Layer Pattern
208
+ ✅ All services provide Layer.Live
209
+ ✅ Layer composition with provideMerge
210
+ ✅ Complete dependency graph
211
+
212
+ ### Effect.gen Pattern
213
+ ✅ All async operations use Effect.gen
214
+ ✅ yield* for Effect composition
215
+ ✅ Type-safe error handling
216
+
217
+ ### Typed Errors
218
+ ✅ AuthError for authentication failures
219
+ ✅ ValidationError for input validation
220
+ ✅ DatabaseError for persistence failures
221
+ ✅ No `as` type casting used
222
+
223
+ ## Integration Points
224
+
225
+ ### Hono Framework
226
+ ✅ Hono router for routes
227
+ ✅ Hono middleware pattern
228
+ ✅ Context variable injection
229
+ ✅ Cookie utilities (getCookie, setCookie)
230
+
231
+ ### Effect Runtime
232
+ ✅ Effect.runPromise for HTTP handlers
233
+ ✅ Effect.provide with AppLayer
234
+ ✅ Proper error handling in async context
235
+
236
+ ### Database
237
+ ✅ DatabaseService dependency
238
+ ✅ UserRepository for user operations
239
+ ✅ SessionRepository for session operations
240
+ ✅ AuditLogService for logging
241
+
242
+ ## Files Created
243
+
244
+ 1. `/src/server/auth/services/AuthService.ts` - Main auth orchestration
245
+ 2. `/src/server/auth/middleware/authMiddleware.ts` - Hono middleware
246
+ 3. `/src/server/auth/routes/authRoutes.ts` - HTTP routes
247
+ 4. `/src/server/auth/controllers/AuthController.ts` - Optional controller
248
+ 5. `/src/server/auth/index.ts` - Barrel exports
249
+ 6. `/src/server/auth/README.md` - Documentation
250
+ 7. `/src/server/auth/example-usage.ts` - Usage examples
251
+ 8. `/src/server/auth/IMPLEMENTATION_SUMMARY.md` - This file
252
+
253
+ ## Testing Checklist
254
+
255
+ - [ ] Test user registration with valid data
256
+ - [ ] Test registration with duplicate email
257
+ - [ ] Test registration with duplicate username
258
+ - [ ] Test registration with weak password
259
+ - [ ] Test registration with invalid email
260
+ - [ ] Test login with correct credentials
261
+ - [ ] Test login with wrong password
262
+ - [ ] Test account lockout after 5 failed attempts
263
+ - [ ] Test lockout expiry after 15 minutes
264
+ - [ ] Test successful login resets failed attempts
265
+ - [ ] Test logout revokes session
266
+ - [ ] Test protected route with valid token
267
+ - [ ] Test protected route with expired token
268
+ - [ ] Test protected route with revoked session
269
+ - [ ] Test protected route with no token
270
+ - [ ] Test token from Authorization header
271
+ - [ ] Test token from cookie
272
+ - [ ] Test Linux username generation
273
+ - [ ] Test Linux username uniqueness
274
+ - [ ] Test audit log entries
275
+
276
+ ## Next Steps
277
+
278
+ 1. **Write Tests**: Create comprehensive test suite using vitest
279
+ 2. **Environment Variables**: Add JWT secret configuration (optional, currently using generated keys)
280
+ 3. **Rate Limiting**: Add rate limiting middleware for login endpoint
281
+ 4. **Email Verification**: Implement email verification flow
282
+ 5. **Password Reset**: Add password reset functionality
283
+ 6. **OAuth Integration**: Add OAuth2 providers (Google, GitHub, Microsoft)
284
+ 7. **Two-Factor Auth**: Implement TOTP-based 2FA
285
+ 8. **Session Management UI**: Add user session management endpoints
286
+ 9. **Admin API**: Add admin endpoints for user management
287
+ 10. **Monitoring**: Add Prometheus metrics for auth operations
@@ -0,0 +1,283 @@
1
+ # Authentication Quick Start Guide
2
+
3
+ ## 🚀 5-Minute Integration
4
+
5
+ ### 1. Install Dependencies
6
+ ```bash
7
+ npm install hono effect bcrypt jose
8
+ npm install -D @types/bcrypt
9
+ ```
10
+
11
+ ### 2. Initialize Database
12
+ ```bash
13
+ node --import tsx/esm src/server/database/init-db.ts
14
+ ```
15
+
16
+ ### 3. Create Your Server
17
+ ```typescript
18
+ // src/server/index.ts
19
+ import { Hono } from "hono";
20
+ import { authRouter, authMiddleware } from "./auth/index.js";
21
+
22
+ const app = new Hono();
23
+
24
+ // Public routes
25
+ app.route("/api/auth", authRouter);
26
+
27
+ // Protected routes
28
+ app.get("/api/protected", authMiddleware, (c) => {
29
+ const user = c.get("user");
30
+ return c.json({ message: `Hello ${user.username}` });
31
+ });
32
+
33
+ export default app;
34
+ ```
35
+
36
+ ### 4. Test It
37
+ ```bash
38
+ # Register
39
+ curl -X POST http://localhost:3000/api/auth/register \
40
+ -H "Content-Type: application/json" \
41
+ -d '{"username":"john","email":"john@example.com","password":"SecurePass123"}'
42
+
43
+ # Login
44
+ curl -X POST http://localhost:3000/api/auth/login \
45
+ -H "Content-Type: application/json" \
46
+ -d '{"email":"john@example.com","password":"SecurePass123"}' \
47
+ -c cookies.txt
48
+
49
+ # Access protected route
50
+ curl http://localhost:3000/api/protected \
51
+ -b cookies.txt
52
+ ```
53
+
54
+ ## 📚 Key Endpoints
55
+
56
+ | Method | Endpoint | Auth | Description |
57
+ |--------|----------|------|-------------|
58
+ | POST | `/api/auth/register` | No | Create new account |
59
+ | POST | `/api/auth/login` | No | Login and get token |
60
+ | POST | `/api/auth/logout` | Yes | Revoke session |
61
+ | GET | `/api/auth/me` | Yes | Get current user |
62
+
63
+ ## 🔐 Security Features
64
+
65
+ ✅ **Password**: bcrypt (12 rounds), min 8 chars, uppercase + lowercase + number
66
+ ✅ **Tokens**: JWT with RS256, 7-day expiry, httpOnly cookies
67
+ ✅ **Lockout**: 5 failed attempts = 15 minute lockout
68
+ ✅ **Sessions**: Revocable, tracked with IP/user agent
69
+ ✅ **Audit**: All auth events logged
70
+
71
+ ## 🛡️ Protected Routes
72
+
73
+ ```typescript
74
+ // Single route
75
+ app.get("/api/secret", authMiddleware, (c) => {
76
+ const user = c.get("user");
77
+ const session = c.get("session");
78
+ // Your logic here
79
+ });
80
+
81
+ // Route group
82
+ const protectedRoutes = new Hono();
83
+ protectedRoutes.use("*", authMiddleware);
84
+ protectedRoutes.get("/profile", (c) => { /* ... */ });
85
+ protectedRoutes.get("/settings", (c) => { /* ... */ });
86
+ app.route("/api/protected", protectedRoutes);
87
+ ```
88
+
89
+ ## 📝 Response Formats
90
+
91
+ ### Success: Register
92
+ ```json
93
+ {
94
+ "user": {
95
+ "id": "uuid",
96
+ "username": "john",
97
+ "email": "john@example.com",
98
+ "emailVerified": false
99
+ }
100
+ }
101
+ ```
102
+
103
+ ### Success: Login
104
+ ```json
105
+ {
106
+ "user": {
107
+ "id": "uuid",
108
+ "username": "john",
109
+ "email": "john@example.com",
110
+ "emailVerified": false
111
+ },
112
+ "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
113
+ }
114
+ ```
115
+
116
+ ### Error: Validation
117
+ ```json
118
+ {
119
+ "error": "VALIDATION_ERROR",
120
+ "field": "password",
121
+ "message": "Password must be at least 8 characters long"
122
+ }
123
+ ```
124
+
125
+ ### Error: Authentication
126
+ ```json
127
+ {
128
+ "error": "AuthError",
129
+ "message": "Invalid email or password"
130
+ }
131
+ ```
132
+
133
+ ## 🔧 Environment Variables
134
+
135
+ ```bash
136
+ # Optional - defaults to development settings
137
+ NODE_ENV=production # Enables secure cookies
138
+ PORT=3000 # Server port
139
+ ```
140
+
141
+ ## 🎯 Common Patterns
142
+
143
+ ### Custom Error Handling
144
+ ```typescript
145
+ app.post("/api/auth/login", async (c) => {
146
+ try {
147
+ const loginEffect = Effect.gen(function* () {
148
+ const authService = yield* AuthService;
149
+ return yield* authService.login(email, password, ip, ua);
150
+ });
151
+
152
+ const result = await Effect.runPromise(
153
+ Effect.provide(loginEffect, AppLayer)
154
+ );
155
+
156
+ return c.json(result, 200);
157
+ } catch (error) {
158
+ // Your custom error handling
159
+ if (error._tag === "AuthError") {
160
+ logSecurityEvent(error);
161
+ }
162
+ return handleError(error);
163
+ }
164
+ });
165
+ ```
166
+
167
+ ### Admin Check
168
+ ```typescript
169
+ const adminMiddleware: MiddlewareHandler = async (c, next) => {
170
+ const user = c.get("user");
171
+
172
+ // Add your admin check logic
173
+ const isAdmin = user.email.endsWith("@admin.com");
174
+
175
+ if (!isAdmin) {
176
+ return c.json({ error: "FORBIDDEN" }, 403);
177
+ }
178
+
179
+ await next();
180
+ };
181
+
182
+ app.get("/api/admin/*", authMiddleware, adminMiddleware, (c) => {
183
+ // Admin-only logic
184
+ });
185
+ ```
186
+
187
+ ### Token from Request
188
+ ```typescript
189
+ import { getCookie } from "hono/cookie";
190
+
191
+ const token = c.req.header("Authorization")?.substring(7)
192
+ || getCookie(c, "auth_token");
193
+ ```
194
+
195
+ ### Manual Token Verification
196
+ ```typescript
197
+ import { Effect } from "effect";
198
+ import { AppLayer } from "./auth/middleware/authMiddleware.js";
199
+ import { AuthService } from "./auth/services/AuthService.js";
200
+
201
+ const verifyEffect = Effect.gen(function* () {
202
+ const authService = yield* AuthService;
203
+ return yield* authService.verifyToken(token);
204
+ });
205
+
206
+ const { user, session } = await Effect.runPromise(
207
+ Effect.provide(verifyEffect, AppLayer)
208
+ );
209
+ ```
210
+
211
+ ## 🐛 Debugging
212
+
213
+ ### Enable Verbose Logging
214
+ ```typescript
215
+ // Add to service methods
216
+ Effect.tap(() =>
217
+ Effect.sync(() => console.log("Debug info here"))
218
+ )
219
+ ```
220
+
221
+ ### Check Session Status
222
+ ```typescript
223
+ const session = c.get("session");
224
+ console.log({
225
+ id: session.id,
226
+ expires: new Date(session.expiresAt),
227
+ isRevoked: session.isRevoked,
228
+ });
229
+ ```
230
+
231
+ ### View Audit Logs
232
+ ```sql
233
+ -- Check recent auth events
234
+ SELECT * FROM audit_logs
235
+ WHERE action LIKE 'USER_%'
236
+ ORDER BY created_at DESC
237
+ LIMIT 10;
238
+ ```
239
+
240
+ ## 🔍 Troubleshooting
241
+
242
+ **401 Unauthorized**
243
+ - Token missing or malformed
244
+ - Token expired (>7 days)
245
+ - Session revoked
246
+ - User account inactive
247
+
248
+ **400 Bad Request**
249
+ - Validation failed
250
+ - Email/username already exists
251
+ - Password too weak
252
+
253
+ **Account Locked**
254
+ - 5+ failed login attempts
255
+ - Wait 15 minutes or contact admin
256
+
257
+ **TypeScript Errors**
258
+ - Ensure `tsconfig.json` has `"target": "ES2022"` or higher
259
+ - Check Effect-TS version compatibility
260
+
261
+ ## 📖 Full Documentation
262
+
263
+ - **README.md** - Complete API reference and security details
264
+ - **ARCHITECTURE.md** - System design and data flow diagrams
265
+ - **IMPLEMENTATION_SUMMARY.md** - Implementation checklist and features
266
+ - **example-usage.ts** - Complete Hono integration example
267
+
268
+ ## 💡 Next Steps
269
+
270
+ 1. Add rate limiting to login endpoint
271
+ 2. Implement email verification
272
+ 3. Add password reset flow
273
+ 4. Set up OAuth2 providers
274
+ 5. Enable two-factor authentication
275
+ 6. Add session management UI
276
+
277
+ ## 🤝 Support
278
+
279
+ For issues or questions:
280
+ 1. Check existing documentation
281
+ 2. Review example-usage.ts
282
+ 3. Inspect audit logs for security events
283
+ 4. Verify database schema is initialized