create-nexwire 4.0.0 → 4.1.1

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 (173) hide show
  1. package/README.md +5 -4
  2. package/express/README.md +13 -7
  3. package/express/package.json +2 -2
  4. package/express/src/config/session.ts +1 -1
  5. package/express/src/database/migrations/sqlite/meta/0000_snapshot.json +1 -1
  6. package/express/src/database/migrations/sqlite/meta/_journal.json +1 -1
  7. package/express/src/database/schema.ts +3 -3
  8. package/express/src/framework/cache/cache.ts +82 -81
  9. package/express/src/framework/database/seed.ts +1 -1
  10. package/express/src/framework/facade.ts +1 -24
  11. package/express/src/framework/http/app.ts +5 -5
  12. package/express/src/framework/http/openapi.ts +1 -1
  13. package/express/src/framework/http/router.ts +3 -18
  14. package/express/src/framework/http/types.ts +19 -0
  15. package/express/src/framework/http/validation.ts +18 -18
  16. package/express/src/framework/maker-cli/middleware/core.mjs +41 -47
  17. package/express/src/framework/maker-cli/module/core.mjs +920 -684
  18. package/express/src/framework/maker-cli/module/index.mjs +202 -140
  19. package/express/src/framework/maker-cli/runtime/core.mjs +1 -2
  20. package/express/src/framework/maker-cli/stubs/controller/openapi.ts.stub +40 -14
  21. package/express/src/framework/maker-cli/stubs/controller/openapi.with-model.ts.stub +40 -15
  22. package/express/src/framework/maker-cli/stubs/controller/plain.ts.stub +42 -16
  23. package/express/src/framework/maker-cli/stubs/controller/standalone.ts.stub +47 -0
  24. package/express/src/framework/maker-cli/stubs/facade/name.ts.stub +12 -0
  25. package/express/src/framework/maker-cli/stubs/helper/name.ts.stub +14 -0
  26. package/express/src/framework/maker-cli/stubs/middleware/name.local.ts.stub +15 -0
  27. package/express/src/framework/maker-cli/stubs/model/name.mysql.ts.stub +9 -8
  28. package/express/src/framework/maker-cli/stubs/model/name.postgresql.ts.stub +9 -8
  29. package/express/src/framework/maker-cli/stubs/model/name.sqlite.ts.stub +9 -8
  30. package/express/src/framework/maker-cli/stubs/notification/route.api.ts.stub +50 -50
  31. package/express/src/framework/maker-cli/stubs/notification/route.plain.ts.stub +11 -11
  32. package/express/src/framework/maker-cli/stubs/route/api.ts.stub +93 -79
  33. package/express/src/framework/maker-cli/stubs/route/plain.ts.stub +23 -10
  34. package/express/src/framework/maker-cli/stubs/route/standalone.api.ts.stub +113 -0
  35. package/express/src/framework/maker-cli/stubs/route/standalone.plain.ts.stub +37 -0
  36. package/express/src/framework/maker-cli/stubs/{controller/schema.plain.ts.stub → schema/name.plain.ts.stub} +13 -13
  37. package/express/src/framework/maker-cli/stubs/{controller/schema.ts.stub → schema/name.ts.stub} +32 -32
  38. package/express/src/framework/maker-cli/stubs/service/name.plain.ts.stub +67 -0
  39. package/express/src/framework/maker-cli/stubs/service/name.ts.stub +65 -0
  40. package/express/src/framework/maker-cli/stubs/type/name.ts.stub +22 -0
  41. package/express/src/framework/maker-cli/utils/naming.mjs +56 -13
  42. package/express/src/framework/modules/discover.ts +57 -54
  43. package/express/src/framework/notification/index.ts +1 -1
  44. package/express/src/framework/realtime/broadcast.ts +46 -46
  45. package/express/src/framework/server.ts +2 -1
  46. package/express/src/framework/session/session.ts +102 -98
  47. package/express/src/framework/support/mail.ts +48 -48
  48. package/express/src/framework/support/status-codes.ts +75 -0
  49. package/express/src/middlewares/auth-middleware.ts +1 -1
  50. package/express/src/modules/auth/__tests__/forgetpass.test.ts +200 -0
  51. package/express/src/modules/auth/__tests__/login.test.ts +171 -0
  52. package/express/src/modules/auth/__tests__/logout.test.ts +60 -0
  53. package/express/src/modules/auth/__tests__/logoutalldevices.test.ts +49 -0
  54. package/express/src/modules/auth/__tests__/me.test.ts +91 -0
  55. package/express/src/modules/auth/__tests__/refreshtoken.test.ts +305 -0
  56. package/express/src/modules/auth/__tests__/register.test.ts +291 -0
  57. package/express/src/modules/auth/__tests__/resetpass.test.ts +206 -0
  58. package/express/src/modules/auth/__tests__/verifyemail.test.ts +183 -0
  59. package/express/src/modules/auth/controllers/auth.ts +254 -0
  60. package/express/src/modules/auth/controllers/{role.controller.ts → role.ts} +25 -15
  61. package/{hono/src/modules/auth/database/models/notifications.ts → express/src/modules/auth/database/models/notification.ts} +1 -1
  62. package/express/src/modules/auth/database/models/role.ts +1 -1
  63. package/express/src/modules/auth/database/models/user.ts +1 -1
  64. package/express/src/modules/auth/facade.ts +12 -0
  65. package/express/src/modules/auth/{controllers/auth.helpers.ts → helpers/auth.ts} +3 -4
  66. package/express/src/modules/auth/jobs/registeruser.ts +23 -23
  67. package/express/src/modules/auth/routes/{api.ts → index.ts} +150 -150
  68. package/express/src/modules/auth/routes/role.ts +33 -33
  69. package/{hono/src/modules/auth/controllers/auth.schema.ts → express/src/modules/auth/schemas/auth.ts} +102 -102
  70. package/express/src/modules/auth/services/forgetpassword.ts +66 -0
  71. package/express/src/modules/auth/services/login.ts +63 -0
  72. package/express/src/modules/auth/services/logout.ts +25 -0
  73. package/express/src/modules/auth/services/logoutalldevices.ts +19 -0
  74. package/express/src/modules/auth/services/me.ts +31 -0
  75. package/express/src/modules/auth/services/refreshtoken.ts +110 -0
  76. package/express/src/modules/auth/services/register.ts +141 -0
  77. package/express/src/modules/auth/services/resetpassword.ts +69 -0
  78. package/express/src/modules/auth/services/verifyemail.ts +77 -0
  79. package/express/src/modules/auth/types/auth.ts +31 -0
  80. package/express/src/resources/src/assets/images/logo.png +0 -0
  81. package/express/src/resources/src/pages/auth/forgetPassword.vue +1 -0
  82. package/express/src/resources/src/pages/auth/login.vue +1 -1
  83. package/express/src/storage/database/nexwire.sqlite +0 -0
  84. package/hono/README.md +13 -7
  85. package/hono/package.json +1 -1
  86. package/hono/src/config/session.ts +1 -1
  87. package/hono/src/database/migrations/sqlite/meta/0000_snapshot.json +1 -1
  88. package/hono/src/database/migrations/sqlite/meta/_journal.json +1 -1
  89. package/hono/src/database/schema.ts +3 -3
  90. package/hono/src/framework/cache/cache.ts +82 -81
  91. package/hono/src/framework/database/seed.ts +1 -1
  92. package/hono/src/framework/http/app.ts +5 -5
  93. package/hono/src/framework/http/validation.ts +21 -21
  94. package/hono/src/framework/maker-cli/middleware/core.mjs +40 -46
  95. package/hono/src/framework/maker-cli/module/core.mjs +401 -168
  96. package/hono/src/framework/maker-cli/module/index.mjs +73 -11
  97. package/hono/src/framework/maker-cli/stubs/controller/openapi.ts.stub +28 -16
  98. package/hono/src/framework/maker-cli/stubs/controller/openapi.with-model.ts.stub +28 -17
  99. package/hono/src/framework/maker-cli/stubs/controller/plain.ts.stub +28 -16
  100. package/hono/src/framework/maker-cli/stubs/controller/standalone.ts.stub +56 -0
  101. package/hono/src/framework/maker-cli/stubs/facade/name.ts.stub +12 -0
  102. package/hono/src/framework/maker-cli/stubs/helper/name.ts.stub +14 -0
  103. package/hono/src/framework/maker-cli/stubs/middleware/name.local.ts.stub +15 -0
  104. package/hono/src/framework/maker-cli/stubs/model/name.mysql.ts.stub +9 -8
  105. package/hono/src/framework/maker-cli/stubs/model/name.postgresql.ts.stub +9 -8
  106. package/hono/src/framework/maker-cli/stubs/model/name.sqlite.ts.stub +9 -8
  107. package/hono/src/framework/maker-cli/stubs/notification/route.api.ts.stub +49 -49
  108. package/hono/src/framework/maker-cli/stubs/notification/route.plain.ts.stub +11 -11
  109. package/hono/src/framework/maker-cli/stubs/route/api.ts.stub +93 -79
  110. package/hono/src/framework/maker-cli/stubs/route/plain.ts.stub +23 -10
  111. package/hono/src/framework/maker-cli/stubs/route/standalone.api.ts.stub +112 -0
  112. package/hono/src/framework/maker-cli/stubs/route/standalone.plain.ts.stub +37 -0
  113. package/hono/src/framework/maker-cli/stubs/{controller/schema.plain.ts.stub → schema/name.plain.ts.stub} +13 -13
  114. package/hono/src/framework/maker-cli/stubs/{controller/schema.ts.stub → schema/name.ts.stub} +32 -32
  115. package/hono/src/framework/maker-cli/stubs/service/name.plain.ts.stub +67 -0
  116. package/hono/src/framework/maker-cli/stubs/service/name.ts.stub +65 -0
  117. package/hono/src/framework/maker-cli/stubs/type/name.ts.stub +22 -0
  118. package/hono/src/framework/maker-cli/utils/naming.mjs +56 -13
  119. package/hono/src/framework/modules/discover.ts +57 -54
  120. package/hono/src/framework/notification/index.ts +1 -1
  121. package/hono/src/framework/realtime/broadcast.ts +46 -46
  122. package/hono/src/framework/server.ts +1 -1
  123. package/hono/src/framework/session/session.ts +121 -116
  124. package/hono/src/middlewares/auth-middleware.ts +1 -1
  125. package/hono/src/modules/auth/__tests__/forgetpass.test.ts +170 -0
  126. package/hono/src/modules/auth/__tests__/login.test.ts +154 -0
  127. package/hono/src/modules/auth/__tests__/logout.test.ts +53 -0
  128. package/hono/src/modules/auth/__tests__/logoutalldevices.test.ts +34 -0
  129. package/hono/src/modules/auth/__tests__/me.test.ts +87 -0
  130. package/hono/src/modules/auth/__tests__/refreshtoken.test.ts +305 -0
  131. package/hono/src/modules/auth/__tests__/register.test.ts +258 -0
  132. package/hono/src/modules/auth/__tests__/resetpass.test.ts +214 -0
  133. package/hono/src/modules/auth/__tests__/verifyemail.test.ts +189 -0
  134. package/hono/src/modules/auth/controllers/auth.ts +238 -0
  135. package/hono/src/modules/auth/controllers/{role.controller.ts → role.ts} +25 -25
  136. package/{express/src/modules/auth/database/models/notifications.ts → hono/src/modules/auth/database/models/notification.ts} +1 -1
  137. package/hono/src/modules/auth/database/models/role.ts +1 -1
  138. package/hono/src/modules/auth/database/models/user.ts +1 -1
  139. package/hono/src/modules/auth/facade.ts +12 -0
  140. package/hono/src/modules/auth/{controllers/auth.helpers.ts → helpers/auth.ts} +5 -6
  141. package/hono/src/modules/auth/jobs/registeruser.ts +23 -23
  142. package/hono/src/modules/auth/routes/{api.ts → index.ts} +150 -150
  143. package/hono/src/modules/auth/routes/role.ts +33 -33
  144. package/{express/src/modules/auth/controllers/auth.schema.ts → hono/src/modules/auth/schemas/auth.ts} +102 -102
  145. package/hono/src/modules/auth/services/forgetpassword.ts +58 -0
  146. package/hono/src/modules/auth/services/login.ts +61 -0
  147. package/hono/src/modules/auth/services/logout.ts +24 -0
  148. package/hono/src/modules/auth/services/logoutalldevices.ts +19 -0
  149. package/hono/src/modules/auth/services/me.ts +31 -0
  150. package/hono/src/modules/auth/services/refreshtoken.ts +110 -0
  151. package/hono/src/modules/auth/services/register.ts +132 -0
  152. package/hono/src/modules/auth/services/resetpassword.ts +69 -0
  153. package/hono/src/modules/auth/services/verifyemail.ts +77 -0
  154. package/hono/src/modules/auth/types/auth.ts +31 -0
  155. package/hono/src/resources/src/assets/images/logo.png +0 -0
  156. package/hono/src/storage/database/nexwire.sqlite +0 -0
  157. package/package.json +1 -1
  158. package/express/src/framework/maker-cli/stubs/example/console.ts.stub +0 -34
  159. package/express/src/framework/maker-cli/stubs/example/controller.ts.stub +0 -418
  160. package/express/src/framework/maker-cli/stubs/example/job.ts.stub +0 -75
  161. package/express/src/framework/maker-cli/stubs/example/route.api.ts.stub +0 -207
  162. package/express/src/framework/maker-cli/stubs/example/route.plain.ts.stub +0 -18
  163. package/express/src/framework/maker-cli/stubs/example/schema.plain.ts.stub +0 -42
  164. package/express/src/framework/maker-cli/stubs/example/schema.ts.stub +0 -42
  165. package/express/src/modules/auth/controllers/auth.controller.ts +0 -358
  166. package/hono/src/framework/maker-cli/stubs/example/console.ts.stub +0 -34
  167. package/hono/src/framework/maker-cli/stubs/example/controller.ts.stub +0 -505
  168. package/hono/src/framework/maker-cli/stubs/example/job.ts.stub +0 -75
  169. package/hono/src/framework/maker-cli/stubs/example/route.api.ts.stub +0 -207
  170. package/hono/src/framework/maker-cli/stubs/example/route.plain.ts.stub +0 -18
  171. package/hono/src/framework/maker-cli/stubs/example/schema.plain.ts.stub +0 -42
  172. package/hono/src/framework/maker-cli/stubs/example/schema.ts.stub +0 -42
  173. package/hono/src/modules/auth/controllers/auth.controller.ts +0 -413
@@ -11,4 +11,4 @@ export const roles = sqliteTable("roles", {
11
11
 
12
12
  export const rolesRelations = relations(roles, ({ many }) => ({
13
13
  users: many(users)
14
- }));
14
+ }));
@@ -43,4 +43,4 @@ export const usersRelations = relations(users, ({ one }) => ({
43
43
  fields: [users.roleId],
44
44
  references: [roles.id]
45
45
  })
46
- }));
46
+ }));
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Public API for the auth module.
3
+ *
4
+ * Other modules import from this file, never from controllers/ or services/ directly.
5
+ * Re-export the pieces they are allowed to depend on:
6
+ *
7
+ * export { list, findOne } from "./services/auth.js";
8
+ *
9
+ * Rule: a facade must never import another module's facade.
10
+ */
11
+
12
+ export { getCurrentUser, hasRole } from "@/modules/auth/helpers/auth.js";
@@ -3,8 +3,7 @@ import { eq } from "drizzle-orm";
3
3
  import type { Request, Response } from "express";
4
4
  import { jwtConfig } from "@/config/index.js";
5
5
  import { cookie, db, jwt } from "@/framework/facade.js";
6
- import { refreshTokens } from "@/modules/auth/database/models/user.js";
7
- import { users } from "@/modules/auth/database/models/user.js";
6
+ import { refreshTokens, users } from "@/modules/auth/database/models/user.js";
8
7
 
9
8
  export function hasRole(auth: any, rolesToMatch: string[]) {
10
9
  const role = String(auth?.role || "").toLowerCase();
@@ -18,7 +17,7 @@ export async function getCurrentUser(auth: any) {
18
17
  with: { role: true },
19
18
  columns: {
20
19
  password: false,
21
- rememberToken: false,
20
+ rememberToken: false
22
21
  }
23
22
  });
24
23
  }
@@ -62,7 +61,7 @@ export async function revokeCurrentRefreshToken(req: Request, _res: Response) {
62
61
  }
63
62
  }
64
63
 
65
- export async function issueTokens(_req: Request, res: Response, user: any, options?: { remember?: boolean; }) {
64
+ export async function issueTokens(_req: Request, res: Response, user: any, options?: { remember?: boolean }) {
66
65
  const remember = !!options?.remember;
67
66
  const refreshExpiry = remember ? jwtConfig.refreshRememberExpirySeconds : jwtConfig.refreshExpirySeconds;
68
67
  const role = user.role || null;
@@ -1,23 +1,23 @@
1
- import { DateTime as Datetime } from "luxon";
2
- import { dispatchEvent, mail, shouldQueue } from "@/framework/facade.js";
3
-
4
- shouldQueue("user:signup", "mail", async (job: any) => {
5
- const { email, name, password, userId } = job.data;
6
-
7
- await mail.sendMail({
8
- to: email,
9
- subject: "Account Creation",
10
- html: `
11
- <p>Hello ${name},</p>
12
- <p>Your account was created successfully.</p>
13
- <p>Email: ${email}</p>
14
- <p>Password: ${password}</p>
15
- `
16
- });
17
-
18
- await dispatchEvent("admin.user.registered", { userId, name, email, createdAt: Datetime.now() }, { broadcast: { roles: ["admin"] } });
19
-
20
- await dispatchEvent("user.registered", { message: "Welcome! Your account has been created." }, { broadcast: { users: [userId] } });
21
-
22
- return { ok: true, userId };
23
- });
1
+ import { DateTime as Datetime } from "luxon";
2
+ import { dispatchEvent, mail, shouldQueue } from "@/framework/facade.js";
3
+
4
+ shouldQueue("user:signup", "mail", async (job: any) => {
5
+ const { email, name, userId } = job.data;
6
+
7
+ await mail.sendMail({
8
+ to: email,
9
+ subject: "Welcome to <AppName>",
10
+ html: `
11
+ <p>Hello ${name},</p>
12
+ <p>Your account was created successfully.</p>
13
+ <p>You can log in with the email and password you chose during signup.</p>
14
+ <p><a href="https://app.example.com/login">Log in</a></p>
15
+ `
16
+ });
17
+
18
+ await dispatchEvent("admin.user.registered", { userId, name, email, createdAt: Datetime.now() }, { broadcast: { roles: ["admin"] } });
19
+
20
+ await dispatchEvent("user.registered", { message: "Welcome! Your account has been created." }, { broadcast: { users: [userId] } });
21
+
22
+ return { ok: true, userId };
23
+ });
@@ -1,150 +1,150 @@
1
- import { createRoute, createRouter, HttpStatusCodes, jsonContent, z } from "@/framework/facade.js";
2
- import { loginLimiter } from "@/framework/http/ratelimiter.js";
3
- import { authMiddleware } from "@/middlewares/auth-middleware.js";
4
- import {
5
- forgotPassword,
6
- login,
7
- logout,
8
- logoutAllDevices,
9
- me,
10
- refreshToken,
11
- register,
12
- resetPassword,
13
- verifyEmail
14
- } from "@/modules/auth/controllers/auth.controller.js";
15
- import {
16
- AuthResponseSchema,
17
- ForgotPasswordSchema,
18
- LoginSchema,
19
- MessageSchema,
20
- RefreshTokenSchema,
21
- RegisterSchema,
22
- ResetPasswordSchema,
23
- UserSchema,
24
- VerifyEmailSchema
25
- } from "@/modules/auth/controllers/auth.schema.js";
26
-
27
- const registerRoute = createRoute({
28
- path: "/register",
29
- method: "post",
30
- tags: ["Auth"],
31
- description: "Register a new user",
32
- request: {
33
- body: jsonContent(RegisterSchema, "Register payload")
34
- },
35
- responses: {
36
- [HttpStatusCodes.CREATED]: jsonContent(AuthResponseSchema, "Registered")
37
- }
38
- });
39
-
40
- const loginRoute = createRoute({
41
- path: "/login",
42
- method: "post",
43
- tags: ["Auth"],
44
- description: "Login user",
45
- request: {
46
- body: jsonContent(LoginSchema, "Login payload")
47
- },
48
- responses: {
49
- [HttpStatusCodes.OK]: jsonContent(AuthResponseSchema, "Logged in")
50
- }
51
- });
52
-
53
- const meRoute = createRoute({
54
- path: "/me",
55
- method: "get",
56
- tags: ["Auth"],
57
- description: "Get authenticated user",
58
- responses: {
59
- [HttpStatusCodes.OK]: jsonContent(z.object({ message: z.string(), data: UserSchema }), "Authenticated user")
60
- }
61
- });
62
-
63
- const logoutRoute = createRoute({
64
- path: "/logout",
65
- method: "post",
66
- tags: ["Auth"],
67
- description: "Logout user from current device",
68
- responses: {
69
- [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Logged out")
70
- }
71
- });
72
-
73
- const logoutAllDevicesRoute = createRoute({
74
- path: "/logout-all",
75
- method: "post",
76
- tags: ["Auth"],
77
- description: "Logout user from all devices",
78
- responses: {
79
- [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Logged out from all devices")
80
- }
81
- });
82
-
83
- const forgotPasswordRoute = createRoute({
84
- path: "/forgot-password",
85
- method: "post",
86
- tags: ["Auth"],
87
- description: "Send reset password email",
88
- request: {
89
- body: jsonContent(ForgotPasswordSchema, "Forgot password payload")
90
- },
91
- responses: {
92
- [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Reset email sent")
93
- }
94
- });
95
-
96
- const resetPasswordRoute = createRoute({
97
- path: "/reset-password",
98
- method: "post",
99
- tags: ["Auth"],
100
- description: "Reset password using token",
101
- request: {
102
- body: jsonContent(ResetPasswordSchema, "Reset password payload")
103
- },
104
- responses: {
105
- [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Password reset")
106
- }
107
- });
108
-
109
- const refreshTokenRoute = createRoute({
110
- path: "/refresh-token",
111
- method: "post",
112
- tags: ["Auth"],
113
- description: "Refresh access token",
114
- request: {
115
- body: jsonContent(RefreshTokenSchema, "Refresh token payload")
116
- },
117
- responses: {
118
- [HttpStatusCodes.OK]: jsonContent(AuthResponseSchema, "Token refreshed")
119
- }
120
- });
121
-
122
- const verifyEmailRoute = createRoute({
123
- path: "/verify-email",
124
- method: "post",
125
- tags: ["Auth"],
126
- description: "Verify user email using token",
127
- request: {
128
- body: jsonContent(VerifyEmailSchema, "Verify email payload")
129
- },
130
- responses: {
131
- [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Email verified")
132
- }
133
- });
134
-
135
- const publicRoute = createRouter()
136
- .group(loginLimiter)
137
- .api(registerRoute, register)
138
- .api(loginRoute, login)
139
- .api(forgotPasswordRoute, forgotPassword)
140
- .api(resetPasswordRoute, resetPassword)
141
- .api(verifyEmailRoute, verifyEmail)
142
- .api(refreshTokenRoute, refreshToken);
143
-
144
- const protectedRoute = createRouter()
145
- .group(authMiddleware)
146
- .api(meRoute, me)
147
- .api(logoutRoute, logout)
148
- .api(logoutAllDevicesRoute, logoutAllDevices);
149
-
150
- export default createRouter().route("/", publicRoute).route("/", protectedRoute);
1
+ import { createRoute, createRouter, HttpStatusCodes, jsonContent, z } from "@/framework/facade.js";
2
+ import { loginLimiter } from "@/framework/http/ratelimiter.js";
3
+ import { authMiddleware } from "@/middlewares/auth-middleware.js";
4
+ import {
5
+ forgotPassword,
6
+ login,
7
+ logout,
8
+ logoutAllDevices,
9
+ me,
10
+ refreshToken,
11
+ register,
12
+ resetPassword,
13
+ verifyEmail
14
+ } from "@/modules/auth/controllers/auth.js";
15
+ import {
16
+ AuthResponseSchema,
17
+ ForgotPasswordSchema,
18
+ LoginSchema,
19
+ MessageSchema,
20
+ RefreshTokenSchema,
21
+ RegisterSchema,
22
+ ResetPasswordSchema,
23
+ UserSchema,
24
+ VerifyEmailSchema
25
+ } from "@/modules/auth/schemas/auth.js";
26
+
27
+ const registerRoute = createRoute({
28
+ path: "/register",
29
+ method: "post",
30
+ tags: ["Auth"],
31
+ description: "Register a new user",
32
+ request: {
33
+ body: jsonContent(RegisterSchema, "Register payload")
34
+ },
35
+ responses: {
36
+ [HttpStatusCodes.CREATED]: jsonContent(AuthResponseSchema, "Registered")
37
+ }
38
+ });
39
+
40
+ const loginRoute = createRoute({
41
+ path: "/login",
42
+ method: "post",
43
+ tags: ["Auth"],
44
+ description: "Login user",
45
+ request: {
46
+ body: jsonContent(LoginSchema, "Login payload")
47
+ },
48
+ responses: {
49
+ [HttpStatusCodes.OK]: jsonContent(AuthResponseSchema, "Logged in")
50
+ }
51
+ });
52
+
53
+ const meRoute = createRoute({
54
+ path: "/me",
55
+ method: "get",
56
+ tags: ["Auth"],
57
+ description: "Get authenticated user",
58
+ responses: {
59
+ [HttpStatusCodes.OK]: jsonContent(z.object({ message: z.string(), data: UserSchema }), "Authenticated user")
60
+ }
61
+ });
62
+
63
+ const logoutRoute = createRoute({
64
+ path: "/logout",
65
+ method: "post",
66
+ tags: ["Auth"],
67
+ description: "Logout user from current device",
68
+ responses: {
69
+ [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Logged out")
70
+ }
71
+ });
72
+
73
+ const logoutAllDevicesRoute = createRoute({
74
+ path: "/logout-all",
75
+ method: "post",
76
+ tags: ["Auth"],
77
+ description: "Logout user from all devices",
78
+ responses: {
79
+ [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Logged out from all devices")
80
+ }
81
+ });
82
+
83
+ const forgotPasswordRoute = createRoute({
84
+ path: "/forgot-password",
85
+ method: "post",
86
+ tags: ["Auth"],
87
+ description: "Send reset password email",
88
+ request: {
89
+ body: jsonContent(ForgotPasswordSchema, "Forgot password payload")
90
+ },
91
+ responses: {
92
+ [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Reset email sent")
93
+ }
94
+ });
95
+
96
+ const resetPasswordRoute = createRoute({
97
+ path: "/reset-password",
98
+ method: "post",
99
+ tags: ["Auth"],
100
+ description: "Reset password using token",
101
+ request: {
102
+ body: jsonContent(ResetPasswordSchema, "Reset password payload")
103
+ },
104
+ responses: {
105
+ [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Password reset")
106
+ }
107
+ });
108
+
109
+ const refreshTokenRoute = createRoute({
110
+ path: "/refresh-token",
111
+ method: "post",
112
+ tags: ["Auth"],
113
+ description: "Refresh access token",
114
+ request: {
115
+ body: jsonContent(RefreshTokenSchema, "Refresh token payload")
116
+ },
117
+ responses: {
118
+ [HttpStatusCodes.OK]: jsonContent(AuthResponseSchema, "Token refreshed")
119
+ }
120
+ });
121
+
122
+ const verifyEmailRoute = createRoute({
123
+ path: "/verify-email",
124
+ method: "post",
125
+ tags: ["Auth"],
126
+ description: "Verify user email using token",
127
+ request: {
128
+ body: jsonContent(VerifyEmailSchema, "Verify email payload")
129
+ },
130
+ responses: {
131
+ [HttpStatusCodes.OK]: jsonContent(MessageSchema, "Email verified")
132
+ }
133
+ });
134
+
135
+ const publicRoute = createRouter()
136
+ .group(loginLimiter)
137
+ .api(registerRoute, register)
138
+ .api(loginRoute, login)
139
+ .api(forgotPasswordRoute, forgotPassword)
140
+ .api(resetPasswordRoute, resetPassword)
141
+ .api(verifyEmailRoute, verifyEmail)
142
+ .api(refreshTokenRoute, refreshToken);
143
+
144
+ const protectedRoute = createRouter()
145
+ .group(authMiddleware)
146
+ .api(meRoute, me)
147
+ .api(logoutRoute, logout)
148
+ .api(logoutAllDevicesRoute, logoutAllDevices);
149
+
150
+ export default createRouter().route("/", publicRoute).route("/", protectedRoute);
@@ -1,33 +1,33 @@
1
- import { createRoute, createRouter, HttpStatusCodes, jsonContent, z } from "@/framework/facade.js";
2
- import { authMiddleware } from "@/middlewares/auth-middleware.js";
3
- import { requireRole } from "@/middlewares/role-middleware.js";
4
- import { IdParamsSchema, RoleSchema } from "@/modules/auth/controllers/auth.schema.js";
5
- import { index, show } from "@/modules/auth/controllers/role.controller.js";
6
-
7
- const indexRoute = createRoute({
8
- path: "/role",
9
- method: "get",
10
- tags: ["Role"],
11
- description: "List all roles",
12
- responses: {
13
- [HttpStatusCodes.OK]: jsonContent(z.object({ message: z.string(), data: z.array(RoleSchema) }), "Role list")
14
- }
15
- });
16
-
17
- const showRoute = createRoute({
18
- path: "/role/{id}",
19
- method: "get",
20
- tags: ["Role"],
21
- description: "Show one role",
22
- request: {
23
- params: IdParamsSchema
24
- },
25
- responses: {
26
- [HttpStatusCodes.OK]: jsonContent(z.object({ message: z.string(), data: RoleSchema.nullable() }), "Role item")
27
- }
28
- });
29
-
30
- export default createRouter()
31
- .group(authMiddleware)
32
- .api(indexRoute, [requireRole("admin")], index)
33
- .api(showRoute, [requireRole("admin")], show);
1
+ import { createRoute, createRouter, HttpStatusCodes, jsonContent, z } from "@/framework/facade.js";
2
+ import { authMiddleware } from "@/middlewares/auth-middleware.js";
3
+ import { requireRole } from "@/middlewares/role-middleware.js";
4
+ import { index, show } from "@/modules/auth/controllers/role.js";
5
+ import { IdParamsSchema, RoleSchema } from "@/modules/auth/schemas/auth.js";
6
+
7
+ const indexRoute = createRoute({
8
+ path: "/role",
9
+ method: "get",
10
+ tags: ["Role"],
11
+ description: "List all roles",
12
+ responses: {
13
+ [HttpStatusCodes.OK]: jsonContent(z.object({ message: z.string(), data: z.array(RoleSchema) }), "Role list")
14
+ }
15
+ });
16
+
17
+ const showRoute = createRoute({
18
+ path: "/role/{id}",
19
+ method: "get",
20
+ tags: ["Role"],
21
+ description: "Show one role",
22
+ request: {
23
+ params: IdParamsSchema
24
+ },
25
+ responses: {
26
+ [HttpStatusCodes.OK]: jsonContent(z.object({ message: z.string(), data: RoleSchema.nullable() }), "Role item")
27
+ }
28
+ });
29
+
30
+ export default createRouter()
31
+ .group(authMiddleware)
32
+ .api(indexRoute, [requireRole("admin")], index)
33
+ .api(showRoute, [requireRole("admin")], show);