arkos 2.0.0-next.15 → 2.0.0-next.16

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 (186) hide show
  1. package/README.md +144 -145
  2. package/cli.js +1 -0
  3. package/dist/cjs/app.js +5 -0
  4. package/dist/cjs/app.js.map +1 -1
  5. package/dist/cjs/modules/auth/auth.router.js +3 -0
  6. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  7. package/dist/cjs/modules/auth/auth.service.js +2 -0
  8. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  9. package/dist/cjs/modules/base/base.controller.js +15 -3
  10. package/dist/cjs/modules/base/base.controller.js.map +1 -1
  11. package/dist/cjs/modules/base/base.middlewares.js +16 -11
  12. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  13. package/dist/cjs/modules/base/base.service.js +5 -1
  14. package/dist/cjs/modules/base/base.service.js.map +1 -1
  15. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +9 -0
  16. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  17. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +1 -1
  18. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  19. package/dist/cjs/modules/error-handler/utils/errors.js +20 -20
  20. package/dist/cjs/modules/error-handler/utils/errors.js.map +1 -1
  21. package/dist/cjs/modules/file-upload/file-upload.controller.js +8 -4
  22. package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
  23. package/dist/cjs/modules/file-upload/file-upload.router.js +2 -0
  24. package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
  25. package/dist/cjs/modules/swagger/swagger.router.js +8 -2
  26. package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
  27. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js +18 -0
  28. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js.map +1 -1
  29. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +5 -5
  30. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
  31. package/dist/cjs/types/index.js.map +1 -1
  32. package/dist/cjs/types/new-arkos-config.js.map +1 -1
  33. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js +86 -28
  34. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
  35. package/dist/cjs/utils/arkos-router/index.js +9 -6
  36. package/dist/cjs/utils/arkos-router/index.js.map +1 -1
  37. package/dist/cjs/utils/arkos-router/types/index.js.map +1 -1
  38. package/dist/cjs/utils/arkos-router/types/upload-config.js.map +1 -1
  39. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +17 -9
  40. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -1
  41. package/dist/cjs/utils/arkos-router/utils/helpers/index.js +9 -6
  42. package/dist/cjs/utils/arkos-router/utils/helpers/index.js.map +1 -1
  43. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js +334 -77
  44. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  45. package/dist/cjs/utils/bundler.js.map +1 -1
  46. package/dist/cjs/utils/cli/build.js +2 -3
  47. package/dist/cjs/utils/cli/build.js.map +1 -1
  48. package/dist/cjs/utils/cli/dev.js +8 -5
  49. package/dist/cjs/utils/cli/dev.js.map +1 -1
  50. package/dist/cjs/utils/cli/export-auth-action.js +5 -4
  51. package/dist/cjs/utils/cli/export-auth-action.js.map +1 -1
  52. package/dist/cjs/utils/cli/index.js +0 -16
  53. package/dist/cjs/utils/cli/index.js.map +1 -1
  54. package/dist/cjs/utils/cli/start.js +4 -2
  55. package/dist/cjs/utils/cli/start.js.map +1 -1
  56. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
  57. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +1 -1
  58. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  59. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js +4 -1
  60. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +1 -1
  61. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js +4 -4
  62. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js.map +1 -1
  63. package/dist/cjs/utils/cli/utils/template-generators.js +0 -6
  64. package/dist/cjs/utils/cli/utils/template-generators.js.map +1 -1
  65. package/dist/cjs/utils/define-config.js +5 -0
  66. package/dist/cjs/utils/define-config.js.map +1 -1
  67. package/dist/cjs/utils/features/api.features.js +23 -5
  68. package/dist/cjs/utils/features/api.features.js.map +1 -1
  69. package/dist/cjs/utils/helpers/arkos-config.helpers.js +7 -4
  70. package/dist/cjs/utils/helpers/arkos-config.helpers.js.map +1 -1
  71. package/dist/cjs/utils/helpers/fs.helpers.js +25 -24
  72. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  73. package/dist/cjs/utils/helpers/global.helpers.js +3 -2
  74. package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
  75. package/dist/cjs/utils/helpers/prisma.helpers.js +3 -1
  76. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  77. package/dist/cjs/utils/initialize-app.js +28 -1
  78. package/dist/cjs/utils/initialize-app.js.map +1 -1
  79. package/dist/cjs/utils/setup-app.js +50 -33
  80. package/dist/cjs/utils/setup-app.js.map +1 -1
  81. package/dist/esm/app.js +5 -1
  82. package/dist/esm/app.js.map +1 -1
  83. package/dist/esm/modules/auth/auth.router.js +3 -0
  84. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  85. package/dist/esm/modules/auth/auth.service.js +2 -0
  86. package/dist/esm/modules/auth/auth.service.js.map +1 -1
  87. package/dist/esm/modules/base/base.controller.js +15 -3
  88. package/dist/esm/modules/base/base.controller.js.map +1 -1
  89. package/dist/esm/modules/base/base.middlewares.js +16 -11
  90. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  91. package/dist/esm/modules/base/base.service.js +5 -1
  92. package/dist/esm/modules/base/base.service.js.map +1 -1
  93. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +9 -0
  94. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  95. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +1 -1
  96. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +1 -1
  97. package/dist/esm/modules/error-handler/utils/errors.js +20 -20
  98. package/dist/esm/modules/error-handler/utils/errors.js.map +1 -1
  99. package/dist/esm/modules/file-upload/file-upload.controller.js +8 -4
  100. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
  101. package/dist/esm/modules/file-upload/file-upload.router.js +2 -0
  102. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
  103. package/dist/esm/modules/swagger/swagger.router.js +8 -2
  104. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  105. package/dist/esm/modules/swagger/utils/get-open-api-login-html.js +18 -0
  106. package/dist/esm/modules/swagger/utils/get-open-api-login-html.js.map +1 -1
  107. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +5 -5
  108. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +1 -1
  109. package/dist/esm/types/index.js.map +1 -1
  110. package/dist/esm/types/new-arkos-config.js.map +1 -1
  111. package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js +86 -28
  112. package/dist/esm/utils/arkos-router/arkos-router-openapi-manager.js.map +1 -1
  113. package/dist/esm/utils/arkos-router/index.js +9 -6
  114. package/dist/esm/utils/arkos-router/index.js.map +1 -1
  115. package/dist/esm/utils/arkos-router/types/index.js.map +1 -1
  116. package/dist/esm/utils/arkos-router/types/upload-config.js.map +1 -1
  117. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +17 -9
  118. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -1
  119. package/dist/esm/utils/arkos-router/utils/helpers/index.js +9 -6
  120. package/dist/esm/utils/arkos-router/utils/helpers/index.js.map +1 -1
  121. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js +334 -77
  122. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  123. package/dist/esm/utils/bundler.js.map +1 -1
  124. package/dist/esm/utils/cli/build.js +3 -4
  125. package/dist/esm/utils/cli/build.js.map +1 -1
  126. package/dist/esm/utils/cli/dev.js +9 -6
  127. package/dist/esm/utils/cli/dev.js.map +1 -1
  128. package/dist/esm/utils/cli/export-auth-action.js +5 -4
  129. package/dist/esm/utils/cli/export-auth-action.js.map +1 -1
  130. package/dist/esm/utils/cli/index.js +0 -16
  131. package/dist/esm/utils/cli/index.js.map +1 -1
  132. package/dist/esm/utils/cli/start.js +4 -2
  133. package/dist/esm/utils/cli/start.js.map +1 -1
  134. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
  135. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +1 -1
  136. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +1 -1
  137. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js +4 -1
  138. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +1 -1
  139. package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js +4 -4
  140. package/dist/esm/utils/cli/utils/template-generator/templates/policy-template.js.map +1 -1
  141. package/dist/esm/utils/cli/utils/template-generators.js +0 -6
  142. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  143. package/dist/esm/utils/define-config.js +5 -0
  144. package/dist/esm/utils/define-config.js.map +1 -1
  145. package/dist/esm/utils/features/api.features.js +23 -5
  146. package/dist/esm/utils/features/api.features.js.map +1 -1
  147. package/dist/esm/utils/helpers/arkos-config.helpers.js +7 -4
  148. package/dist/esm/utils/helpers/arkos-config.helpers.js.map +1 -1
  149. package/dist/esm/utils/helpers/fs.helpers.js +25 -24
  150. package/dist/esm/utils/helpers/fs.helpers.js.map +1 -1
  151. package/dist/esm/utils/helpers/global.helpers.js +1 -1
  152. package/dist/esm/utils/helpers/global.helpers.js.map +1 -1
  153. package/dist/esm/utils/helpers/prisma.helpers.js +3 -1
  154. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
  155. package/dist/esm/utils/initialize-app.js +28 -1
  156. package/dist/esm/utils/initialize-app.js.map +1 -1
  157. package/dist/esm/utils/setup-app.js +51 -34
  158. package/dist/esm/utils/setup-app.js.map +1 -1
  159. package/dist/types/app.d.ts +5 -6
  160. package/dist/types/modules/auth/auth.service.d.ts +2 -6
  161. package/dist/types/modules/base/base.service.d.ts +2 -1
  162. package/dist/types/modules/swagger/utils/helpers/get-swagger-default-configs.d.ts +48 -2
  163. package/dist/types/types/index.d.ts +0 -21
  164. package/dist/types/types/new-arkos-config.d.ts +160 -14
  165. package/dist/types/utils/arkos-router/arkos-router-openapi-manager.d.ts +14 -1
  166. package/dist/types/utils/arkos-router/index.d.ts +75 -7
  167. package/dist/types/utils/arkos-router/types/index.d.ts +19 -6
  168. package/dist/types/utils/arkos-router/types/upload-config.d.ts +63 -7
  169. package/dist/types/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.d.ts +1 -1
  170. package/dist/types/utils/arkos-router/utils/helpers/index.d.ts +2 -0
  171. package/dist/types/utils/arkos-router/utils/helpers/upload-manager.d.ts +0 -36
  172. package/dist/types/utils/bundler.d.ts +1 -1
  173. package/dist/types/utils/cli/start.d.ts +1 -1
  174. package/dist/types/utils/helpers/fs.helpers.d.ts +1 -1
  175. package/dist/types/utils/helpers/global.helpers.d.ts +1 -0
  176. package/package.json +15 -15
  177. package/dist/cjs/utils/cli/utils/template-generator/templates/route-hook.template.js +0 -39
  178. package/dist/cjs/utils/cli/utils/template-generator/templates/route-hook.template.js.map +0 -1
  179. package/dist/cjs/utils/cli/utils/template-generator/templates/service-hook.template.js +0 -32
  180. package/dist/cjs/utils/cli/utils/template-generator/templates/service-hook.template.js.map +0 -1
  181. package/dist/esm/utils/cli/utils/template-generator/templates/route-hook.template.js +0 -36
  182. package/dist/esm/utils/cli/utils/template-generator/templates/route-hook.template.js.map +0 -1
  183. package/dist/esm/utils/cli/utils/template-generator/templates/service-hook.template.js +0 -29
  184. package/dist/esm/utils/cli/utils/template-generator/templates/service-hook.template.js.map +0 -1
  185. package/dist/types/utils/cli/utils/template-generator/templates/route-hook.template.d.ts +0 -2
  186. package/dist/types/utils/cli/utils/template-generator/templates/service-hook.template.d.ts +0 -2
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ![Header Image](https://www.arkosjs.com/img/arkos-readme-header.webp?v=2)
1
+ ![Header Image](https://www.arkosjs.com/img/arkos-readme-header.webp?v=3)
2
2
 
3
3
  <div align="center">
4
4
 
@@ -15,193 +15,171 @@
15
15
  <p>A tool for backend developers and teams who ship software with complex business logic under tight deadlines</p>
16
16
  </div>
17
17
 
18
- ---
19
-
20
18
  <div align="center">
21
19
 
22
20
  **[Installation](https://www.arkosjs.com/docs/getting-started/installation)** •
23
21
  **[Documentation](https://arkosjs.com/docs)** •
24
22
  **[Website](https://arkosjs.com)** •
23
+ **[Tutorial](https://arkosjs.com/learn)** •
25
24
  **[GitHub](https://github.com/uanela/arkos)** •
26
25
  **[Blog](https://www.arkosjs.com/blog)** •
27
26
  **[Npm](https://www.npmjs.com/package/arkos)**
28
27
 
29
28
  </div>
30
29
 
31
- ---
32
-
33
- ## Why Arkos?
34
-
35
- Every line of boilerplate code is a missed opportunity for innovation. Arkos.js gives developers back their time so they can focus on building what truly matters—**the core business logic**.
36
-
37
- **Perfect for:**
38
-
39
- - Backend developers shipping complex features under tight deadlines
40
- - Teams who want to scale fast without reinventing standard patterns
41
- - Projects that need production-ready auth, validation, and docs from day one
42
-
43
30
  ## Quick Start
44
31
 
45
- Get started with Arkos.js in seconds:
46
-
47
32
  ```bash
48
33
  pnpm create arkos@latest my-project
49
34
  ```
50
35
 
51
- **That's it!** You now have:
36
+ Your new project already has JWT auth, customizable CRUD routes, Swagger docs at `/api/docs`, file uploads, validation, and a full security middleware stack. Understand the generated [Project Structure](https://www.arkosjs.com/docs/getting-started/project-structure).
52
37
 
53
- - Production-ready REST API
54
- - JWT authentication
55
- - Auto-generated Swagger docs at `/api/docs`
56
- - File upload handling
57
- - Input validation
38
+ ## Your Entry Point
58
39
 
59
- ## See It In Action
40
+ ```typescript
41
+ // src/app.ts
42
+ import arkos from "arkos";
43
+ import postRouter from "@/src/modules/post/post.router"; // custom router
60
44
 
61
- **1. Define your Prisma model:**
45
+ const app = arkos();
62
46
 
63
- ```prisma
64
- model Post {
65
- id String @id @default(uuid())
66
- title String
67
- content String
68
- authorId String
69
- author User @relation(fields: [authorId], references: [id])
70
- createdAt DateTime @default(now())
71
- updatedAt DateTime @updatedAt
72
- }
73
- ```
47
+ app.use(postRouter);
74
48
 
75
- **2. Get instant REST endpoints:**
76
-
77
- ```
78
- POST /api/posts Create a new post
79
- GET /api/posts List all posts
80
- GET /api/posts/:id Get a specific post
81
- PATCH /api/posts/:id Update a post
82
- DELETE /api/posts/:id Delete a post
49
+ app.listen();
83
50
  ```
84
51
 
85
- All with built-in **authentication**, **validation**, and **documentation**. **Zero boilerplate.**
52
+ Arkos replaces the Express `app` — but it _is_ Express under the hood. You can still use `app.use()`, custom middleware, and raw Express code wherever you need it.
86
53
 
87
- **3. Add custom business logic with interceptors:**
54
+ ## Creating a Router Beyond Express
88
55
 
89
56
  ```typescript
90
- import { ArkosRequest, ArkosResponse, ArkosNextFunction } from "arkos";
91
- import { AppError } from "arkos/error-handler";
92
-
93
- export const beforeCreateOne = [
94
- async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {
95
- // Add custom validation
96
- if (req.body.title.length < 5) {
97
- throw new AppErr("Title is too short", 400, "TitleTooShort");
98
- }
99
-
100
- // Enrich data
101
- req.body.slug = req.body.title.toLowerCase().replace(/\s/g, "-");
102
- req.body.authorId = req.user.id;
103
-
104
- next();
105
- },
106
- ];
57
+ // src/modules/post/post.router.ts
58
+ import { ArkosRouter } from "arkos";
59
+ import CreatePostSchema from "@/src/modules/post/schemas/create-post.schema";
60
+ import postService from "@/src/modules/post/post.service";
61
+ import postPolicy from "@/src/modules/post/post.policy"; // Authorization component
62
+
63
+ const postRouter = ArkosRouter({ prefix: "/api/posts" });
64
+
65
+ postRouter.post(
66
+ {
67
+ path: "/", // auto registered into openapi
68
+ authentication: postPolicy.Create, // Authentication and authorization with RBAC
69
+ validation: { body: CreatePostSchema }, // auto documented into openapi requestBody
70
+ },
71
+ async (req, res) => {
72
+ const post = await postService.createOne(req.body); // no error handling need, arkos already handles it
73
+ res.json({ data: post });
74
+ }
75
+ );
76
+
77
+ export default postRouter;
107
78
  ```
108
79
 
109
- ## What You Get Out of the Box
110
-
111
- ### **Enterprise-Ready Authentication**
112
-
113
- - JWT token management with secure refresh tokens
114
- - Password hashing with bcrypt
115
- - Role-based access control (RBAC)
116
- - Production-ready from day one
117
-
118
- ### **Smart Data Validation**
80
+ See more about the enhanced express-based router (ArkosRouter) at [ArkosRouter Guide](https://www.arkosjs.com/docs/core-concepts/components/routers).
119
81
 
120
- - Automatic validation from Prisma models
121
- - Zod schema integration
122
- - Class-validator support
123
- - Zero configuration required
82
+ ## Define Permissions Once, Guard Everywhere
124
83
 
125
- ### **Bulletproof Security Stack**
126
-
127
- - Rate limiting to prevent abuse
128
- - CORS configuration
129
- - Input sanitization with helmet.js
130
- - Comprehensive error handling
131
-
132
- ### **Self-Documenting APIs**
84
+ ```typescript
85
+ // src/modules/post/post.policy.ts
86
+ import { ArkosPolicy } from "arkos";
133
87
 
134
- - Auto-generated OpenAPI/Swagger specifications
135
- - Beautiful interactive Scalar UI
136
- - Auto-sync with your routes
137
- - JSON schemas from Zod or Prisma models
88
+ const postPolicy: ArkosPolicy<"post"> = ArkosPolicy("post");
138
89
 
139
- ### **Intelligent File Processing**
90
+ postPolicy.rule("Create", ["Writer", "Admin"]);
91
+ postPolicy.rule("View", ["Writer", "Admin", "User"]);
140
92
 
141
- - Multer-powered file uploads
142
- - Automatic image and video optimization
143
- - Smart type validation
144
- - Easy local storage configuration
93
+ export default postPolicy;
94
+ ```
145
95
 
146
- ### **Effortless Email Integration**
96
+ Define who can do what, once, per resource. Arkos enforces it across every route that references the policy — no scattered middleware, no repeated role checks.
147
97
 
148
- - Built-in Nodemailer service
149
- - Template support
150
- - Clean, simple API
151
- - Just focus on your content
98
+ ## Automatic CRUD: One Model, Full REST Endpoints
152
99
 
153
- ### **Powerful Interceptors**
100
+ **Define The Prisma model:**
154
101
 
155
- - Before/after request hooks
156
- - Custom validation logic
157
- - Data transformation
158
- - Flexible middleware system
102
+ ```prisma
103
+ model Post {
104
+ id String @id @default(uuid())
105
+ title String
106
+ content String
107
+ authorId String
108
+ author User @relation(fields: [authorId], references: [id])
109
+ createdAt DateTime @default(now())
110
+ updatedAt DateTime @updatedAt
111
+ }
112
+ ```
159
113
 
160
- ### **Unmatched Prisma Integration**
114
+ **Get a full REST API — instantly:**
161
115
 
162
- - Seamless ORM integration
163
- - Automatic relation handling
164
- - Write less Prisma, build more data
165
- - Built on Prisma's rock-solid foundation
116
+ ```
117
+ POST /api/posts Create a post
118
+ GET /api/posts List all posts
119
+ GET /api/posts/:id Get a post
120
+ PATCH /api/posts/:id Update a post
121
+ DELETE /api/posts/:id Delete a post
122
+ ```
166
123
 
167
- ## Arkos vs Traditional Setup
124
+ Authenticated, validated, and documented. Zero boilerplate.
168
125
 
169
- | Task | Traditional Approach | With Arkos |
170
- | ------------------------ | --------------------------- | ---------------------- |
171
- | Setup JWT authentication | 2-3 hours of config | ✅ Built-in & ready |
172
- | Create CRUD routes | 30 min per model | ✅ Auto-generated |
173
- | Add input validation | Manual for each endpoint | ✅ Zod/Class-validator |
174
- | Setup API documentation | Install + configure Swagger | ✅ Auto-generated |
175
- | Configure file uploads | Multer setup + validation | ✅ Ready to use |
176
- | Add security middleware | Research + implement | ✅ Pre-configured |
177
- | **Total setup time** | **~8-12 hours** | **~5 minutes** |
126
+ **Customize just like normal router:**
178
127
 
179
- ## Features
128
+ ```typescript
129
+ // src/modules/post/post.router.ts
130
+ import { ArkosRouter, RouteHook } from "arkos";
131
+ import postPolicy from "@/src/modules/post/post.policy";
132
+ import UpdatePostSchema from "@/src/modules/post/post.schema";
133
+
134
+ export const hook: RouteHook<"prisma"> = {
135
+ findMany: { authentication: false }, // Making GET /api/posts public
136
+ createOne: { authentication: postPolicy.Create },
137
+ updateOne: {
138
+ authentication: postPolicy.Update,
139
+ validation: { body: UpdatePostSchema },
140
+ },
141
+ deleteOne: { authentication: postPolicy.Delete },
142
+ };
143
+
144
+ const postRouter = ArkosRouter({ prefix: "/api/posts" });
145
+
146
+ export default postRouter;
147
+ ```
180
148
 
181
- - **Automatic API Generation** - Instantly create RESTful routes from Prisma models
182
- - **Built-in Authentication** - JWT-based authentication with minimal setup
183
- - **Express Middlewares** - Pre-configured security, parsing, and error handling
184
- - **Data Validation** - Input validation and transformation capabilities
185
- - **Prisma Integration** - Seamless database management with relation fields support
186
- - **File Upload & Optimization** - Efficient handling of images, videos, and documents
187
- - **Interceptors Middlewares** - Customize request/response flow with hooks
188
- - **Nodemailer Integration** - Easy email sending functionality
189
- - **Swagger API Documentation** - Automatically generate API documentation
149
+ Your auto-generated CRUD routes accept the same config as any ArkosRouter route — authentication, validation, rate limiting, all in one place.
190
150
 
191
- **BETA VERSION**
151
+ **Add business logic exactly where you need it:**
192
152
 
193
- ## Trusted By Developers Building Daily
153
+ ```typescript
154
+ // src/modules/post/post.interceptor.ts
155
+ import { ArkosRequest, ArkosResponse, ArkosNextFunction } from "arkos";
156
+ import { BadRequestError } from "arkos/error-handler";
194
157
 
195
- > "Arkos.js changed how I work on the backend: with a Prisma model I already get CRUD routes, auth, and validation out-of-the-box — I saved a lot of time and could focus on business logic."
196
- > **— Gelson Matavela, Founder / Grupo Vergui**
158
+ export const beforeCreateOne = [
159
+ async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {
160
+ if (req.body.title.length < 5)
161
+ throw new BadRequestError("Title is too short", "TitleTooShort");
162
+
163
+ req.body.slug = req.body.title.toLowerCase().replace(/\s/g, "-");
164
+ req.body.authorId = req.user.id;
165
+ next();
166
+ },
167
+ ];
168
+ ```
197
169
 
198
- > "It removes boilerplate and provides a clean structure to build products. Built-in auth is powerful and ready. Automatic CRUD and docs save time, while interceptors allow flexible business logic."
199
- > **— Augusto Domingos, Tech Lead / DSAI For Moz**
170
+ Name the file, export the hook, and Arkos picks it up automatically. No registration needed.
200
171
 
201
- > "With Arkos.js, I can build backends in just a few minutes. It removes the boilerplate and lets me focus entirely on the core logic. Fast, simple, and incredibly productive."
202
- > **— Niuro Langa, Software Developer / SparkTech**
172
+ ## What You Stop Building From Scratch
203
173
 
204
- [See more testimonials →](https://arkosjs.com)
174
+ | What you'd normally write | What Arkos gives you |
175
+ | ---------------------------------------- | --------------------------------- |
176
+ | JWT setup, refresh tokens, bcrypt | ✅ Built-in auth system |
177
+ | 5 route handlers per Prisma model | ✅ Auto-generated CRUD |
178
+ | Zod/CV schemas per endpoint | ✅ Auto generate from your models |
179
+ | Swagger config + schema upkeep | ✅ Auto-generated OpenAPI docs |
180
+ | Multer setup + file type validation | ✅ File upload system |
181
+ | Rate limiting, CORS, Helmet, compression | ✅ Pre-configured security stack |
182
+ | **Total setup time** | **~5 minutes vs ~8–12 hours** |
205
183
 
206
184
  ## Documentation
207
185
 
@@ -211,8 +189,8 @@ For comprehensive guides, API reference, and examples, visit our [official docum
211
189
 
212
190
  - [Getting Started Guide](https://arkosjs.com/docs)
213
191
  - [Authentication Setup](https://arkosjs.com/docs/core-concepts/authentication/setup)
214
- - [Using Interceptors](https://arkosjs.com/docs/core-concepts/interceptors)
215
- - [File Uploads](https://arkosjs.com/docs/guides/file-uploads/setup)
192
+ - [Using Interceptors](https://arkosjs.com/docs/core-concepts/components/interceptors)
193
+ - [File Uploads](https://arkosjs.com/docs/guides/file-handling/file-uploads/setup)
216
194
  - [Validation](https://arkosjs.com/docs/guides/validation/setup)
217
195
  - [Email Service](https://arkosjs.com/docs/guides/email-service)
218
196
 
@@ -221,7 +199,7 @@ For comprehensive guides, API reference, and examples, visit our [official docum
221
199
  You can get the latest features we're testing before releasing them:
222
200
 
223
201
  ```bash
224
- pnpm create arkos@canary my-project
202
+ pnpm create arkos@next my-project
225
203
  ```
226
204
 
227
205
  ## Built With
@@ -241,25 +219,46 @@ Arkos.js is built on top of industry-leading tools:
241
219
 
242
220
  Contributions are welcome! We appreciate all contributions, from bug fixes to new features.
243
221
 
222
+ ## What Developers Say
223
+
224
+ > "Arkos.js changed how I work on the backend: with a Prisma model I already get CRUD routes, auth, and validation out-of-the-box — I saved a lot of time and could focus on business logic."
225
+ >
226
+ > **— Gelson Matavela, Founder / Grupo Vergui**
227
+
228
+ > "It removes boilerplate and provides a clean structure to build products. Built-in auth is powerful and ready. Automatic CRUD and docs save time, while interceptors allow flexible business logic."
229
+ >
230
+ > **— Augusto Domingos, Tech Lead / DSAI For Moz**
231
+
232
+ > "With Arkos.js, I can build backends in just a few minutes. It removes the boilerplate and lets me focus entirely on the core logic. Fast, simple, and incredibly productive."
233
+ >
234
+ > **— Niuro Langa, Software Developer / SparkTech**
235
+
236
+ [See more testimonials →](https://arkosjs.com)
237
+
238
+ ## Philosophy
239
+
240
+ Arkos sits between minimal frameworks like Express/Fastify and opinionated ones like NestJS/AdonisJS. It doesn't ask you to learn a new paradigm — it enhances the one most Node.js developers already use, by automating everything that's standardized and staying out of the way everywhere else.
241
+
242
+ Inspired by how Django and Laravel work in their ecosystems: batteries included, nothing forced on you.
243
+
244
+ > The name "Arkos" comes from the Greek word **ἀρχή** _(Arkhē)_, meaning "beginning" or "foundation".
245
+
244
246
  ## License
245
247
 
246
248
  This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
247
249
 
248
- ---
249
-
250
250
  <div align="center">
251
251
 
252
252
  **[Installation](https://www.arkosjs.com/docs/getting-started/installation)** •
253
253
  **[Documentation](https://arkosjs.com/docs)** •
254
254
  **[Website](https://arkosjs.com)** •
255
+ **[Tutorial](https://arkosjs.com/learn)** •
255
256
  **[GitHub](https://github.com/uanela/arkos)** •
256
257
  **[Blog](https://www.arkosjs.com/blog)** •
257
258
  **[Npm](https://www.npmjs.com/package/arkos)**
258
259
 
259
260
  Built with ❤️ by [Uanela Como](https://github.com/uanela) and contributors
260
261
 
261
- ---
262
-
263
262
  _The name "Arkos" comes from the Greek word "ἀρχή" (Arkhē), meaning "beginning" or "foundation", reflecting our goal of providing a solid foundation for backend development._
264
263
 
265
264
  </div>
package/cli.js CHANGED
@@ -27,6 +27,7 @@
27
27
 
28
28
  process.env.NO_CLI = "true";
29
29
  process.env.FORCE_COLOR = "3";
30
+ process.env.__ARKOS_CLI = "true";
30
31
  const child = spawn(process.execPath, args, {
31
32
  stdio: ["inherit", "inherit", "pipe"],
32
33
  });
package/dist/cjs/app.js CHANGED
@@ -36,6 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.app = void 0;
39
40
  exports.arkos = arkos;
40
41
  exports.getAppServer = getAppServer;
41
42
  require("./utils/helpers/arkos-config.helpers.js");
@@ -49,10 +50,13 @@ const exit_error_1 = __importDefault(require("./utils/helpers/exit-error.js"));
49
50
  const arkos_loadable_registry_1 = __importDefault(require("./components/arkos-loadable-registry/index.js"));
50
51
  const apply_arkos_router_proxy_1 = require("./utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js");
51
52
  const arkos_config_helpers_1 = require("./utils/helpers/arkos-config.helpers.js");
53
+ exports.app = (0, express_1.default)();
52
54
  let appServer;
53
55
  const docsLink = "https://www.arkosjs.com/docs/core-concepts/routing/setup#setting-up-your-app";
54
56
  let instanciated = false;
55
57
  function arkos() {
58
+ if (process.env.__ARKOS_CLI !== "true")
59
+ throw (0, exit_error_1.default)(`Arkos.js application must be started the built-in cli ${(0, arkos_config_helpers_1.isProduction)() ? "'arkos start' in production" : `'arkos dev' in development`} see https://www.arkosjs.com/docs/getting-started/installation#7-set-up-packagejson-scripts`);
56
60
  if (instanciated)
57
61
  throw (0, exit_error_1.default)(`arkos() must be called only once, see ${docsLink}`);
58
62
  const app = (0, apply_arkos_router_proxy_1.applyArkosRouterProxy)((0, express_1.default)(), {}, "app");
@@ -91,6 +95,7 @@ function arkos() {
91
95
  return cb || function () { };
92
96
  };
93
97
  app.listen = async function (...args) {
98
+ process.env.__ARKOS_SERVER_LISTENER = "arkos";
94
99
  if (state === "listening")
95
100
  throw (0, exit_error_1.default)(`app.listen() must only be called once, see ${docsLink}`);
96
101
  if (state === "building")
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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","sourcesContent":["import \"./utils/helpers/arkos-config.helpers\";\nimport express, { Express } from \"express\";\nimport setupApp from \"./utils/setup-app\";\nimport { Arkos, ArkosLoadable } from \"./types/arkos\";\nimport initializeApp, { addGlobalErrorHandler } from \"./utils/initialize-app\";\nimport { logAppStartup } from \"./server\";\nimport runtimeCliCommander from \"./utils/cli/utils/runtime-cli-commander\";\nimport { IncomingMessage, Server, ServerResponse } from \"http\";\nimport ExitError from \"./utils/helpers/exit-error\";\nimport loadableRegistry from \"./components/arkos-loadable-registry\";\nimport { applyArkosRouterProxy } from \"./utils/arkos-router/utils/helpers/apply-arkos-router-proxy\";\nimport { validateArkosConfig } from \"./utils/helpers/arkos-config.helpers\";\n\nlet appServer: Server<typeof IncomingMessage, typeof ServerResponse>;\nconst docsLink =\n \"https://www.arkosjs.com/docs/core-concepts/routing/setup#setting-up-your-app\";\nlet instanciated = false;\n\n/**\n * Creates and configures an Arkos application instance.\n *\n * Arkos extends Express with a small set of methods for registering routers,\n * loading route/service hooks, and booting the application. All Arkos-specific\n * setup (`app.build()`) must happen before the app starts\n * accepting requests.\n *\n * @example\n * ```ts\n * // Simple setup\n * import arkos from \"arkos\";\n *\n * const app = arkos();\n *\n * app.use(reportsRouter);\n *\n * app.listen();\n * ```\n *\n * @example\n * ```ts\n * // Custom HTTP server (e.g. for WebSockets)\n * import arkos from \"arkos\";\n * import http from \"http\";\n *\n * const app = arkos();\n *\n * app.use(reportsRouter);\n *\n * async function start() {\n * await app.build();\n *\n * const server = http.createServer(app);\n * app.listen(server)\n * }\n * main()\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/core-concepts/routing/setup}\n */\nexport function arkos(): Arkos {\n if (instanciated)\n throw ExitError(`arkos() must be called only once, see ${docsLink}`);\n\n const app = applyArkosRouterProxy(express(), {}, \"app\") as any as Arkos;\n setupApp(app);\n instanciated = true;\n\n type AppState = \"idle\" | \"building\" | \"built\" | \"listening\";\n let state: AppState = \"idle\";\n\n app.load = (...items: ArkosLoadable[]) => {\n if (state !== \"idle\")\n throw ExitError(\n `app.load() must be called before app.${state === \"listening\" ? \"listen\" : \"build\"}(), see ${docsLink}`\n );\n\n if (Array.isArray(items[0])) items = items[0];\n items = Array.isArray(items) ? items : [items];\n\n items.forEach((item) => loadableRegistry.register(item));\n return app;\n };\n\n function loadApp() {\n let _app = initializeApp(app);\n _app = addGlobalErrorHandler(_app);\n if (process.env.CLI_COMMAND) runtimeCliCommander.handle();\n return _app;\n }\n\n app.build = function () {\n if (state === \"built\" || state === \"building\")\n throw ExitError(`app.build() must only be called once, see ${docsLink}`);\n if (state === \"listening\")\n throw ExitError(\n `app.build() must be called before app.listen(), see ${docsLink}`\n );\n\n state = \"building\";\n const _app = loadApp();\n state = \"built\";\n return _app;\n };\n\n const originalListen = app.listen.bind(app) as any as Express[\"listen\"];\n type UserCallback = (err?: Error) => void;\n\n const defaultCb = (\n port: number | string,\n host: string,\n cb?: UserCallback\n ) => {\n logAppStartup(port, host);\n return cb || function () {};\n };\n\n app.listen = async function (...args): Promise<Server> {\n if (state === \"listening\")\n throw ExitError(`app.listen() must only be called once, see ${docsLink}`);\n if (state === \"building\")\n throw ExitError(\n `app.build() must be awaited before calling app.listen(), see ${docsLink}`\n );\n\n if (state === \"idle\") {\n state = \"listening\";\n loadApp();\n }\n\n validateArkosConfig();\n\n const port = Number(process.env.__PORT || process.env.PORT || \"8000\");\n const host = process.env.__HOST! || process.env.HOST || \"0.0.0.0\";\n\n if ((args as any)?.length === 0 || typeof args[0] === \"function\")\n appServer = originalListen(\n port,\n host,\n defaultCb(port, host, args[0] as UserCallback)\n );\n else if (args[0] instanceof Server || typeof args[0] === \"object\")\n appServer = args[0].listen(\n port,\n host,\n defaultCb(port, host, args[1] as UserCallback)\n );\n\n return appServer;\n };\n\n return app;\n}\n\nexport function getAppServer() {\n return appServer;\n}\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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","sourcesContent":["import \"./utils/helpers/arkos-config.helpers\";\nimport express, { Express } from \"express\";\nimport setupApp from \"./utils/setup-app\";\nimport { Arkos, ArkosLoadable } from \"./types/arkos\";\nimport initializeApp, { addGlobalErrorHandler } from \"./utils/initialize-app\";\nimport { logAppStartup } from \"./server\";\nimport runtimeCliCommander from \"./utils/cli/utils/runtime-cli-commander\";\nimport { IncomingMessage, Server, ServerResponse } from \"http\";\nimport ExitError from \"./utils/helpers/exit-error\";\nimport loadableRegistry from \"./components/arkos-loadable-registry\";\nimport { applyArkosRouterProxy } from \"./utils/arkos-router/utils/helpers/apply-arkos-router-proxy\";\nimport {\n isProduction,\n validateArkosConfig,\n} from \"./utils/helpers/arkos-config.helpers\";\nexport const app: express.Express = express();\n\nlet appServer: Server<typeof IncomingMessage, typeof ServerResponse>;\nconst docsLink =\n \"https://www.arkosjs.com/docs/core-concepts/routing/setup#setting-up-your-app\";\nlet instanciated = false;\n\n/**\n * Creates and configures an Arkos application instance.\n *\n * Arkos extends Express with a small set of methods for registering routers,\n * loading route/service hooks, and booting the application. All Arkos-specific\n * setup (`app.build()`) must happen before the app starts\n * accepting requests.\n *\n * @example\n * ```ts\n * // Simple setup\n * import arkos from \"arkos\";\n *\n * const app = arkos();\n *\n * app.use(reportsRouter);\n *\n * app.listen();\n * ```\n *\n * @example\n * ```ts\n * // Custom HTTP server (e.g. for WebSockets)\n * import arkos from \"arkos\";\n * import http from \"http\";\n *\n * const app = arkos();\n *\n * app.use(reportsRouter);\n *\n * await app.build();\n *\n * const server = http.createServer(app);\n * app.listen(server)\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/core-concepts/routing/setup}\n */\nexport function arkos(): Arkos {\n if (process.env.__ARKOS_CLI !== \"true\")\n throw ExitError(\n `Arkos.js application must be started the built-in cli ${isProduction() ? \"'arkos start' in production\" : `'arkos dev' in development`} see https://www.arkosjs.com/docs/getting-started/installation#7-set-up-packagejson-scripts`\n );\n\n if (instanciated)\n throw ExitError(`arkos() must be called only once, see ${docsLink}`);\n\n const app = applyArkosRouterProxy(express(), {}, \"app\") as any as Arkos;\n setupApp(app);\n instanciated = true;\n\n type AppState = \"idle\" | \"building\" | \"built\" | \"listening\";\n let state: AppState = \"idle\";\n\n app.load = (...items: ArkosLoadable[]) => {\n if (state !== \"idle\")\n throw ExitError(\n `app.load() must be called before app.${state === \"listening\" ? \"listen\" : \"build\"}(), see ${docsLink}`\n );\n\n if (Array.isArray(items[0])) items = items[0];\n items = Array.isArray(items) ? items : [items];\n\n items.forEach((item) => loadableRegistry.register(item));\n return app;\n };\n\n function loadApp() {\n let _app = initializeApp(app);\n _app = addGlobalErrorHandler(_app);\n if (process.env.CLI_COMMAND) runtimeCliCommander.handle();\n return _app;\n }\n\n app.build = function () {\n if (state === \"built\" || state === \"building\")\n throw ExitError(`app.build() must only be called once, see ${docsLink}`);\n if (state === \"listening\")\n throw ExitError(\n `app.build() must be called before app.listen(), see ${docsLink}`\n );\n\n state = \"building\";\n const _app = loadApp();\n state = \"built\";\n return _app;\n };\n\n const originalListen = app.listen.bind(app) as any as Express[\"listen\"];\n type UserCallback = (err?: Error) => void;\n\n const defaultCb = (\n port: number | string,\n host: string,\n cb?: UserCallback\n ) => {\n logAppStartup(port, host);\n return cb || function () {};\n };\n\n app.listen = async function (...args: any[]): Promise<Server> {\n process.env.__ARKOS_SERVER_LISTENER = \"arkos\";\n\n if (state === \"listening\")\n throw ExitError(`app.listen() must only be called once, see ${docsLink}`);\n if (state === \"building\")\n throw ExitError(\n `app.build() must be awaited before calling app.listen(), see ${docsLink}`\n );\n\n if (state === \"idle\") {\n state = \"listening\";\n loadApp();\n }\n\n validateArkosConfig();\n\n const port = Number(process.env.__PORT || process.env.PORT || \"8000\");\n const host = process.env.__HOST! || process.env.HOST || \"0.0.0.0\";\n\n if ((args as any)?.length === 0 || typeof args[0] === \"function\")\n appServer = originalListen(\n port,\n host,\n defaultCb(port, host, args[0] as UserCallback)\n );\n else if (args[0] instanceof Server || typeof args[0] === \"object\")\n appServer = args[0].listen(\n port,\n host,\n defaultCb(port, host, args[1] as UserCallback)\n );\n\n return appServer;\n };\n\n return app;\n}\n\nexport function getAppServer() {\n return appServer;\n}\n"]}
@@ -11,8 +11,11 @@ const arkos_loadable_registry_1 = __importDefault(require("../../components/arko
11
11
  const reader_1 = require("../../components/arkos-route-hook/reader.js");
12
12
  const auth_controller_1 = __importDefault(require("./auth.controller.js"));
13
13
  const auth_openapi_generator_1 = __importDefault(require("./utils/auth-openapi-generator.js"));
14
+ const prisma_helpers_1 = require("../../utils/helpers/prisma.helpers.js");
14
15
  function getAuthRouter() {
15
16
  const router = (0, arkos_router_1.default)();
17
+ if (!(0, prisma_helpers_1.getPrismaInstance)())
18
+ return router;
16
19
  const routeHook = arkos_loadable_registry_1.default.getItem("ArkosRouteHook", "auth");
17
20
  const op = (operation) => {
18
21
  const components = routeHook
@@ -1 +1 @@
1
- {"version":3,"file":"auth.router.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Options as RateLimitOptions } from \"express-rate-limit\";\nimport {\n addPrismaQueryOptionsToRequest,\n sendResponse,\n} from \"../base/base.middlewares\";\nimport { AuthPrismaQueryOptions } from \"../../types\";\nimport { processMiddleware } from \"../../utils/helpers/routers.helpers\";\nimport ArkosRouter from \"../../utils/arkos-router\";\nimport loadableRegistry from \"../../components/arkos-loadable-registry\";\nimport { routeHookReader } from \"../../components/arkos-route-hook/reader\";\nimport { ArkosAuthRouteHookInstance } from \"../../components/arkos-route-hook/types\";\nimport authController from \"./auth.controller\";\nimport authOpenAPIGenerator from \"./utils/auth-openapi-generator\";\n\nexport function getAuthRouter() {\n const router = ArkosRouter();\n const routeHook = loadableRegistry.getItem(\"ArkosRouteHook\", \"auth\");\n\n const op = (\n operation: keyof Omit<ArkosAuthRouteHookInstance, \"__type\" | \"moduleName\">\n ) => {\n const components = routeHook\n ? routeHookReader.forOperation(\"auth\", operation)\n : {\n before: [],\n after: [],\n onError: [],\n prismaArgs: {},\n routeConfig: {},\n };\n\n let endpointConfig = components.routeConfig || {};\n\n if (endpointConfig?.experimental?.openapi !== false)\n endpointConfig = {\n ...(endpointConfig || {}),\n experimental: {\n ...(endpointConfig?.experimental || {}),\n openapi: authOpenAPIGenerator.getOpenApiConfig(\n endpointConfig,\n operation\n ),\n },\n };\n\n components.routeConfig = endpointConfig;\n return components;\n };\n\n // GET /users/me - Get current user\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"getMe\");\n\n router.get(\n {\n ...routeConfig,\n path: \"/users/me\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { getMe: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"getMe\"\n ),\n ...processMiddleware(before),\n authController.getMe,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // PATCH /users/me - Update current user\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"updateMe\");\n\n router.patch(\n {\n ...routeConfig,\n path: \"/users/me\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { updateMe: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"updateMe\"\n ),\n ...processMiddleware(before),\n authController.updateMe,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // DELETE /users/me - Delete current user\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"deleteMe\");\n\n router.delete(\n {\n ...routeConfig,\n path: \"/users/me\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { deleteMe: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"deleteMe\"\n ),\n ...processMiddleware(before),\n authController.deleteMe,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n const rateLimitConfig: Partial<RateLimitOptions> = {\n windowMs: 5000,\n limit: 10,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n handler: (_, res) => {\n res.status(429).json({\n message: \"Too many requests, please try again later\",\n });\n },\n };\n // POST /auth/login - Login\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"login\");\n\n router.post(\n {\n authentication: false,\n rateLimit: rateLimitConfig,\n ...routeConfig,\n path: \"/auth/login\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { login: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"login\"\n ),\n ...processMiddleware(before),\n authController.login,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // DELETE /auth/logout - Logout\n {\n const { before, after, onError, routeConfig } = op(\"logout\");\n\n router.delete(\n {\n rateLimit: rateLimitConfig,\n ...routeConfig,\n path: \"/auth/logout\",\n },\n ...processMiddleware(before),\n authController.logout,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // POST /auth/signup - Signup\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"signup\");\n\n router.post(\n {\n authentication: false,\n rateLimit: rateLimitConfig,\n ...routeConfig,\n path: \"/auth/signup\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { signup: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"signup\"\n ),\n ...processMiddleware(before),\n authController.signup,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // POST /auth/update-password - Update password\n {\n const { before, after, onError, prismaArgs, routeConfig } =\n op(\"updatePassword\");\n\n router.post(\n {\n rateLimit: rateLimitConfig,\n ...routeConfig,\n path: \"/auth/update-password\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { updatePassword: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"updatePassword\"\n ),\n ...processMiddleware(before),\n authController.updatePassword,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, {\n type: \"error\",\n })\n );\n }\n\n // GET /auth-actions - Find many auth actions\n {\n const { before, after, onError, routeConfig } = op(\"findManyAuthAction\");\n\n router.get(\n {\n ...routeConfig,\n path: \"/auth-actions\",\n },\n ...processMiddleware(before),\n authController.findManyAuthAction,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, {\n type: \"error\",\n })\n );\n }\n\n // GET /auth-actions/:resourceName - Find one auth action\n {\n const { before, after, onError, routeConfig } = op(\"findOneAuthAction\");\n\n router.get(\n {\n ...routeConfig,\n path: \"/auth-actions/:resourceName\",\n },\n ...processMiddleware(before),\n authController.findOneAuthAction,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, {\n type: \"error\",\n })\n );\n }\n\n return router;\n}\n"]}
1
+ {"version":3,"file":"auth.router.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Options as RateLimitOptions } from \"express-rate-limit\";\nimport {\n addPrismaQueryOptionsToRequest,\n sendResponse,\n} from \"../base/base.middlewares\";\nimport { AuthPrismaQueryOptions } from \"../../types\";\nimport { processMiddleware } from \"../../utils/helpers/routers.helpers\";\nimport ArkosRouter from \"../../utils/arkos-router\";\nimport loadableRegistry from \"../../components/arkos-loadable-registry\";\nimport { routeHookReader } from \"../../components/arkos-route-hook/reader\";\nimport { ArkosAuthRouteHookInstance } from \"../../components/arkos-route-hook/types\";\nimport authController from \"./auth.controller\";\nimport authOpenAPIGenerator from \"./utils/auth-openapi-generator\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\n\nexport function getAuthRouter() {\n const router = ArkosRouter();\n if (!getPrismaInstance()) return router;\n\n const routeHook = loadableRegistry.getItem(\"ArkosRouteHook\", \"auth\");\n\n const op = (\n operation: keyof Omit<ArkosAuthRouteHookInstance, \"__type\" | \"moduleName\">\n ) => {\n const components = routeHook\n ? routeHookReader.forOperation(\"auth\", operation)\n : {\n before: [],\n after: [],\n onError: [],\n prismaArgs: {},\n routeConfig: {},\n };\n\n let endpointConfig = components.routeConfig || {};\n\n if (endpointConfig?.experimental?.openapi !== false)\n endpointConfig = {\n ...(endpointConfig || {}),\n experimental: {\n ...(endpointConfig?.experimental || {}),\n openapi: authOpenAPIGenerator.getOpenApiConfig(\n endpointConfig,\n operation\n ),\n },\n };\n\n components.routeConfig = endpointConfig;\n return components;\n };\n\n // GET /users/me - Get current user\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"getMe\");\n\n router.get(\n {\n ...routeConfig,\n path: \"/users/me\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { getMe: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"getMe\"\n ),\n ...processMiddleware(before),\n authController.getMe,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // PATCH /users/me - Update current user\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"updateMe\");\n\n router.patch(\n {\n ...routeConfig,\n path: \"/users/me\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { updateMe: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"updateMe\"\n ),\n ...processMiddleware(before),\n authController.updateMe,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // DELETE /users/me - Delete current user\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"deleteMe\");\n\n router.delete(\n {\n ...routeConfig,\n path: \"/users/me\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { deleteMe: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"deleteMe\"\n ),\n ...processMiddleware(before),\n authController.deleteMe,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n const rateLimitConfig: Partial<RateLimitOptions> = {\n windowMs: 5000,\n limit: 10,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n handler: (_, res) => {\n res.status(429).json({\n message: \"Too many requests, please try again later\",\n });\n },\n };\n // POST /auth/login - Login\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"login\");\n\n router.post(\n {\n authentication: false,\n rateLimit: rateLimitConfig,\n ...routeConfig,\n path: \"/auth/login\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { login: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"login\"\n ),\n ...processMiddleware(before),\n authController.login,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // DELETE /auth/logout - Logout\n {\n const { before, after, onError, routeConfig } = op(\"logout\");\n\n router.delete(\n {\n rateLimit: rateLimitConfig,\n ...routeConfig,\n path: \"/auth/logout\",\n },\n ...processMiddleware(before),\n authController.logout,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // POST /auth/signup - Signup\n {\n const { before, after, onError, prismaArgs, routeConfig } = op(\"signup\");\n\n router.post(\n {\n authentication: false,\n rateLimit: rateLimitConfig,\n ...routeConfig,\n path: \"/auth/signup\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { signup: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"signup\"\n ),\n ...processMiddleware(before),\n authController.signup,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, { type: \"error\" })\n );\n }\n\n // POST /auth/update-password - Update password\n {\n const { before, after, onError, prismaArgs, routeConfig } =\n op(\"updatePassword\");\n\n router.post(\n {\n rateLimit: rateLimitConfig,\n ...routeConfig,\n path: \"/auth/update-password\",\n },\n addPrismaQueryOptionsToRequest<any>(\n { updatePassword: prismaArgs } as AuthPrismaQueryOptions<any>,\n \"updatePassword\"\n ),\n ...processMiddleware(before),\n authController.updatePassword,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, {\n type: \"error\",\n })\n );\n }\n\n // GET /auth-actions - Find many auth actions\n {\n const { before, after, onError, routeConfig } = op(\"findManyAuthAction\");\n\n router.get(\n {\n ...routeConfig,\n path: \"/auth-actions\",\n },\n ...processMiddleware(before),\n authController.findManyAuthAction,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, {\n type: \"error\",\n })\n );\n }\n\n // GET /auth-actions/:resourceName - Find one auth action\n {\n const { before, after, onError, routeConfig } = op(\"findOneAuthAction\");\n\n router.get(\n {\n ...routeConfig,\n path: \"/auth-actions/:resourceName\",\n },\n ...processMiddleware(before),\n authController.findOneAuthAction,\n ...processMiddleware(after),\n sendResponse,\n ...processMiddleware(onError, {\n type: \"error\",\n })\n );\n }\n\n return router;\n}\n"]}
@@ -161,6 +161,8 @@ class AuthService {
161
161
  return req.secure || req.headers["x-forwarded-proto"] === "https";
162
162
  })(),
163
163
  sameSite,
164
+ domain: authConfigs?.jwt?.cookie?.domain || process.env.JWT_COOKIE_DOMAIN,
165
+ ...arkosConfig?.authentication?.jwt?.cookie,
164
166
  };
165
167
  }
166
168
  isPasswordHashed(password) {