create-warlock 4.1.9 → 4.1.11

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 (38) hide show
  1. package/esm/commands/create-warlock-app/index.mjs +1 -1
  2. package/esm/commands/create-warlock-app/index.mjs.map +1 -1
  3. package/esm/helpers/app.mjs +24 -0
  4. package/esm/helpers/app.mjs.map +1 -1
  5. package/package.json +1 -1
  6. package/templates/warlock/skills/api-design/SKILL.md +461 -0
  7. package/templates/warlock/skills/code-standards/SKILL.md +595 -0
  8. package/templates/warlock/skills/data-and-persistence/SKILL.md +330 -0
  9. package/templates/warlock/skills/git-workflow/SKILL.md +282 -0
  10. package/templates/warlock/skills/module-boundaries/SKILL.md +283 -0
  11. package/templates/warlock/skills/observability-and-resilience/SKILL.md +306 -0
  12. package/templates/warlock/skills/security-baseline/SKILL.md +352 -0
  13. package/templates/warlock/skills/testing-strategy/SKILL.md +323 -0
  14. package/templates/warlock/src/app/auth/controllers/forgot-password.controller.ts +1 -6
  15. package/templates/warlock/src/app/auth/controllers/login.controller.ts +1 -4
  16. package/templates/warlock/src/app/auth/controllers/logout-all.controller.ts +2 -10
  17. package/templates/warlock/src/app/auth/controllers/logout.controller.ts +2 -10
  18. package/templates/warlock/src/app/auth/controllers/me.controller.ts +2 -9
  19. package/templates/warlock/src/app/auth/controllers/refresh-token.controller.ts +1 -5
  20. package/templates/warlock/src/app/auth/controllers/reset-password.controller.ts +1 -1
  21. package/templates/warlock/src/app/auth/main.ts +1 -3
  22. package/templates/warlock/src/app/auth/models/otp/migrations/22-12-2025_10-30-20.otp-migration.ts +1 -8
  23. package/templates/warlock/src/app/auth/requests/guarded.request.ts +3 -4
  24. package/templates/warlock/src/app/auth/services/forgot-password.service.ts +3 -5
  25. package/templates/warlock/src/app/auth/services/otp.service.ts +5 -15
  26. package/templates/warlock/src/app/auth/services/reset-password.service.ts +1 -3
  27. package/templates/warlock/src/app/posts/models/post/migrations/09-01-2026_02-07-51-post.migration.ts +1 -9
  28. package/templates/warlock/src/app/posts/routes.ts +1 -4
  29. package/templates/warlock/src/app/shared/components/HomePageComponent.tsx +37 -59
  30. package/templates/warlock/src/app/shared/controllers/home-page.controller.ts +18 -0
  31. package/templates/warlock/src/app/shared/controllers/home-page.controller.tsx +2 -9
  32. package/templates/warlock/src/app/uploads/controllers/fetch-uploaded-file.controller.ts +2 -5
  33. package/templates/warlock/src/app/users/events/inject-created-by-user.into-model.event.ts +1 -1
  34. package/templates/warlock/src/app/users/models/user/user.model.ts +4 -8
  35. package/templates/warlock/src/app/users/routes.ts +1 -4
  36. package/templates/warlock/src/app/users/services/login-social.ts +1 -4
  37. package/templates/warlock/src/config/cache.ts +1 -2
  38. package/templates/warlock/src/config/database.ts +1 -4
@@ -6,10 +6,7 @@ import { loginService } from "../services/auth.service";
6
6
  * Login controller
7
7
  * POST /auth/login
8
8
  */
9
- export const loginController: RequestHandler<Request<LoginSchema>> = async (
10
- request,
11
- response,
12
- ) => {
9
+ export const loginController: RequestHandler<Request<LoginSchema>> = async (request, response) => {
13
10
  const result = await loginService(request.validated(), {
14
11
  userAgent: request.userAgent,
15
12
  ip: request.ip,
@@ -1,19 +1,11 @@
1
- import {
2
- t,
3
- type Request,
4
- type RequestHandler,
5
- type Response,
6
- } from "@warlock.js/core";
1
+ import { t, type Request, type RequestHandler, type Response } from "@warlock.js/core";
7
2
  import { logoutAllService } from "../services/auth.service";
8
3
 
9
4
  /**
10
5
  * Logout from all devices controller
11
6
  * POST /auth/logout-all
12
7
  */
13
- export const logoutAllController: RequestHandler = async (
14
- request: Request,
15
- response: Response,
16
- ) => {
8
+ export const logoutAllController: RequestHandler = async (request: Request, response: Response) => {
17
9
  await logoutAllService(request.user);
18
10
 
19
11
  return response.success({
@@ -1,19 +1,11 @@
1
- import {
2
- t,
3
- type Request,
4
- type RequestHandler,
5
- type Response,
6
- } from "@warlock.js/core";
1
+ import { t, type Request, type RequestHandler, type Response } from "@warlock.js/core";
7
2
  import { logoutService } from "../services/auth.service";
8
3
 
9
4
  /**
10
5
  * Logout controller
11
6
  * POST /auth/logout
12
7
  */
13
- export const logoutController: RequestHandler = async (
14
- request: Request,
15
- response: Response,
16
- ) => {
8
+ export const logoutController: RequestHandler = async (request: Request, response: Response) => {
17
9
  await logoutService(request.user);
18
10
 
19
11
  return response.success({
@@ -1,17 +1,10 @@
1
- import {
2
- type Request,
3
- type RequestHandler,
4
- type Response,
5
- } from "@warlock.js/core";
1
+ import { type Request, type RequestHandler, type Response } from "@warlock.js/core";
6
2
 
7
3
  /**
8
4
  * Get current user controller
9
5
  * GET /auth/me
10
6
  */
11
- export const meController: RequestHandler = async (
12
- request: Request,
13
- response: Response,
14
- ) => {
7
+ export const meController: RequestHandler = async (request: Request, response: Response) => {
15
8
  return response.success({
16
9
  user: request.user,
17
10
  });
@@ -1,8 +1,4 @@
1
- import {
2
- type Request,
3
- type RequestHandler,
4
- type Response,
5
- } from "@warlock.js/core";
1
+ import { type Request, type RequestHandler, type Response } from "@warlock.js/core";
6
2
  import { v } from "@warlock.js/seal";
7
3
  import { refreshTokensService } from "../services/auth.service";
8
4
 
@@ -1,5 +1,5 @@
1
1
  import { t, type Request, type RequestHandler } from "@warlock.js/core";
2
- import { type ResetPasswordSchema, resetPasswordSchema } from "../schema/reset-password.schema";
2
+ import { resetPasswordSchema, type ResetPasswordSchema } from "../schema/reset-password.schema";
3
3
  import { resetPasswordService } from "../services/reset-password.service";
4
4
 
5
5
  /**
@@ -6,6 +6,4 @@ import { cleanupExpiredOtpsService } from "./services/otp.service";
6
6
  scheduler.newJob("cleanup-expired-otps", cleanupExpiredOtpsService).everyHour();
7
7
 
8
8
  // Cleanup expired refresh tokens every hour
9
- scheduler
10
- .newJob("cleanup-expired-tokens", () => authService.cleanupExpiredTokens())
11
- .everyHour();
9
+ scheduler.newJob("cleanup-expired-tokens", () => authService.cleanupExpiredTokens()).everyHour();
@@ -1,11 +1,4 @@
1
- import {
2
- bool,
3
- integer,
4
- json,
5
- Migration,
6
- string,
7
- timestamp,
8
- } from "@warlock.js/cascade";
1
+ import { bool, integer, json, Migration, string, timestamp } from "@warlock.js/cascade";
9
2
  import { OTP } from "../otp.model";
10
3
 
11
4
  export default Migration.create(
@@ -1,10 +1,9 @@
1
1
  import type { Request, RequestHandler } from "@warlock.js/core";
2
2
  import type { User } from "app/users/models/user";
3
3
 
4
- export type GuardedRequest<RequestPayload = unknown> =
5
- Request<RequestPayload> & {
6
- user: User;
7
- };
4
+ export type GuardedRequest<RequestPayload = unknown> = Request<RequestPayload> & {
5
+ user: User;
6
+ };
8
7
 
9
8
  export type GuardedRequestHandler<RequestPayload = unknown> = RequestHandler<
10
9
  GuardedRequest<RequestPayload>
@@ -16,15 +16,13 @@ export async function forgotPasswordService(email: string): Promise<void> {
16
16
  // Find user by email (silent fail for security)
17
17
  const user = await getFirstUserService({ email });
18
18
 
19
- // Create OTP
20
- const otp = await createOtpService({
19
+ // Create a password-reset OTP. Wire a mail service to deliver its code —
20
+ // e.g. `sendPasswordResetEmail(user, otp.get("code"))`.
21
+ await createOtpService({
21
22
  target: email,
22
23
  channel: "email",
23
24
  type: "password-reset",
24
25
  userId: user.id,
25
26
  userType: user.userType,
26
27
  });
27
-
28
- // TODO: Send email with OTP code using a mail service
29
- // await sendPasswordResetEmail(user, otp.get("code"));
30
28
  }
@@ -44,10 +44,7 @@ export type CreateOTPOptions = {
44
44
  /**
45
45
  * Generate OTP code
46
46
  */
47
- function generateCode(
48
- length: number = 6,
49
- alphanumeric: boolean = false,
50
- ): string {
47
+ function generateCode(length: number = 6, alphanumeric: boolean = false): string {
51
48
  if (alphanumeric) {
52
49
  // Generate alphanumeric code
53
50
  const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
@@ -66,9 +63,7 @@ function generateCode(
66
63
  /**
67
64
  * Create a new OTP
68
65
  */
69
- export async function createOtpService(
70
- options: CreateOTPOptions,
71
- ): Promise<OTP> {
66
+ export async function createOtpService(options: CreateOTPOptions): Promise<OTP> {
72
67
  const {
73
68
  target,
74
69
  channel,
@@ -140,10 +135,7 @@ export async function verifyOtpService(
140
135
  return otp;
141
136
  }
142
137
 
143
- export async function cleanupOtpService(
144
- target: string,
145
- type: OTPType,
146
- ): Promise<void> {
138
+ export async function cleanupOtpService(target: string, type: OTPType): Promise<void> {
147
139
  await OTP.delete({
148
140
  target,
149
141
  type,
@@ -173,11 +165,9 @@ export async function resendOtpService(
173
165
  * Cleanup expired OTPs
174
166
  */
175
167
  export async function cleanupExpiredOtpsService(): Promise<number> {
176
- const expiredOtps = await OTP.query()
177
- .where("expiresAt", "<", new Date())
178
- .get();
168
+ const expiredOtps = await OTP.query().where("expiresAt", "<", new Date()).get();
179
169
 
180
- await Promise.all(expiredOtps.map(otp => otp.destroy()));
170
+ await Promise.all(expiredOtps.map((otp) => otp.destroy()));
181
171
 
182
172
  return expiredOtps.length;
183
173
  }
@@ -13,9 +13,7 @@ type ResetPasswordOptions = {
13
13
  /**
14
14
  * Reset user password using OTP verification
15
15
  */
16
- export async function resetPasswordService(
17
- options: ResetPasswordOptions,
18
- ): Promise<User> {
16
+ export async function resetPasswordService(options: ResetPasswordOptions): Promise<User> {
19
17
  const { email, code, newPassword } = options;
20
18
 
21
19
  // Verify OTP
@@ -1,12 +1,4 @@
1
- import {
2
- bool,
3
- integer,
4
- json,
5
- Migration,
6
- string,
7
- text,
8
- timestamp,
9
- } from "@warlock.js/cascade";
1
+ import { bool, integer, json, Migration, string, text, timestamp } from "@warlock.js/cascade";
10
2
  import { Post } from "../post.model";
11
3
 
12
4
  export default Migration.create(Post, {
@@ -4,8 +4,5 @@ import { createNewPostController } from "./controllers/create-new-post.controlle
4
4
  import { updatePostController } from "./controllers/update-post.controller";
5
5
 
6
6
  guarded(() => {
7
- router
8
- .route("/posts")
9
- .create(createNewPostController)
10
- .update(updatePostController);
7
+ router.route("/posts").create(createNewPostController).update(updatePostController);
11
8
  });
@@ -13,11 +13,7 @@ export function HomePageComponent() {
13
13
  />
14
14
  <link rel="stylesheet" href={publicUrl("home.css")} />
15
15
  <link rel="preconnect" href="https://fonts.googleapis.com" />
16
- <link
17
- rel="preconnect"
18
- href="https://fonts.gstatic.com"
19
- crossOrigin="anonymous"
20
- />
16
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
21
17
  <link
22
18
  href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap"
23
19
  rel="stylesheet"
@@ -33,22 +29,13 @@ export function HomePageComponent() {
33
29
  <span>Warlock.js</span>
34
30
  </a>
35
31
  <nav className="warlock-nav">
36
- <a
37
- href="https://warlock.js.org"
38
- target="_blank"
39
- rel="noopener noreferrer">
32
+ <a href="https://warlock.js.org" target="_blank" rel="noopener noreferrer">
40
33
  Docs
41
34
  </a>
42
- <a
43
- href="https://github.com/warlockjs"
44
- target="_blank"
45
- rel="noopener noreferrer">
35
+ <a href="https://github.com/warlockjs" target="_blank" rel="noopener noreferrer">
46
36
  GitHub
47
37
  </a>
48
- <a
49
- href="https://discord.gg/x3W9SN2jvx"
50
- target="_blank"
51
- rel="noopener noreferrer">
38
+ <a href="https://discord.gg/x3W9SN2jvx" target="_blank" rel="noopener noreferrer">
52
39
  Discord
53
40
  </a>
54
41
  </nav>
@@ -61,20 +48,18 @@ export function HomePageComponent() {
61
48
  with Confidence
62
49
  </h1>
63
50
  <p>
64
- A powerful, elegant TypeScript framework designed for developers
65
- who demand excellence. Ship faster, scale better, and enjoy the
66
- journey.
51
+ A powerful, elegant TypeScript framework designed for developers who demand
52
+ excellence. Ship faster, scale better, and enjoy the journey.
67
53
  </p>
68
54
  <div className="warlock-cta">
69
- <a
70
- href="https://warlock.js.org"
71
- className="warlock-btn warlock-btn-primary">
55
+ <a href="https://warlock.js.org" className="warlock-btn warlock-btn-primary">
72
56
  <span>Get Started</span>
73
57
  <span>→</span>
74
58
  </a>
75
59
  <a
76
60
  href="https://github.com/warlockjs"
77
- className="warlock-btn warlock-btn-secondary">
61
+ className="warlock-btn warlock-btn-secondary"
62
+ >
78
63
  <span>View on GitHub</span>
79
64
  </a>
80
65
  </div>
@@ -92,8 +77,8 @@ export function HomePageComponent() {
92
77
  <span className="warlock-feature-icon">🚀</span>
93
78
  <h3>Lightning Fast</h3>
94
79
  <p>
95
- Blazing fast development server with instant hot reload.
96
- Build and deploy optimized production bundles in seconds.
80
+ Blazing fast development server with instant hot reload. Build and deploy
81
+ optimized production bundles in seconds.
97
82
  </p>
98
83
  </div>
99
84
 
@@ -101,9 +86,8 @@ export function HomePageComponent() {
101
86
  <span className="warlock-feature-icon">🎯</span>
102
87
  <h3>Type-Safe</h3>
103
88
  <p>
104
- Built with TypeScript from the ground up. Enjoy full type
105
- safety across your entire application with intelligent
106
- auto-completion.
89
+ Built with TypeScript from the ground up. Enjoy full type safety across your
90
+ entire application with intelligent auto-completion.
107
91
  </p>
108
92
  </div>
109
93
 
@@ -111,8 +95,8 @@ export function HomePageComponent() {
111
95
  <span className="warlock-feature-icon">🏗️</span>
112
96
  <h3>Battle-Tested Architecture</h3>
113
97
  <p>
114
- Proven patterns and best practices baked in. From routing to
115
- database management, we've got you covered.
98
+ Proven patterns and best practices baked in. From routing to database
99
+ management, we've got you covered.
116
100
  </p>
117
101
  </div>
118
102
 
@@ -120,9 +104,8 @@ export function HomePageComponent() {
120
104
  <span className="warlock-feature-icon">🔌</span>
121
105
  <h3>Powerful CLI</h3>
122
106
  <p>
123
- Scaffold components, run migrations, manage seeds, and more
124
- with an intuitive command-line interface that boosts
125
- productivity.
107
+ Scaffold components, run migrations, manage seeds, and more with an intuitive
108
+ command-line interface that boosts productivity.
126
109
  </p>
127
110
  </div>
128
111
 
@@ -130,8 +113,8 @@ export function HomePageComponent() {
130
113
  <span className="warlock-feature-icon">🎨</span>
131
114
  <h3>Flexible & Extensible</h3>
132
115
  <p>
133
- Plugin architecture allows you to extend core functionality.
134
- Build your own tools or use community packages.
116
+ Plugin architecture allows you to extend core functionality. Build your own
117
+ tools or use community packages.
135
118
  </p>
136
119
  </div>
137
120
 
@@ -139,8 +122,8 @@ export function HomePageComponent() {
139
122
  <span className="warlock-feature-icon">🌍</span>
140
123
  <h3>Multi-Tenant Ready</h3>
141
124
  <p>
142
- Built-in support for multi-tenancy. Scale from single to
143
- multi-tenant applications without architectural changes.
125
+ Built-in support for multi-tenancy. Scale from single to multi-tenant
126
+ applications without architectural changes.
144
127
  </p>
145
128
  </div>
146
129
  </div>
@@ -166,8 +149,8 @@ export function HomePageComponent() {
166
149
  </span>
167
150
  </code>
168
151
  <code className="warlock-code-line">
169
- <span className="warlock-code-command">npx</span> warlock
170
- add <span className="warlock-code-flag">react</span>
152
+ <span className="warlock-code-command">npx</span> warlock add{" "}
153
+ <span className="warlock-code-flag">react</span>
171
154
  </code>
172
155
  <code className="warlock-code-line">&nbsp;</code>
173
156
  <code className="warlock-code-line">
@@ -176,27 +159,22 @@ export function HomePageComponent() {
176
159
  </span>
177
160
  </code>
178
161
  <code className="warlock-code-line">
179
- <span className="warlock-code-command">npx</span> warlock
180
- add{" "}
181
- <span className="warlock-code-flag">
182
- mongodb redis test
183
- </span>
162
+ <span className="warlock-code-command">npx</span> warlock add{" "}
163
+ <span className="warlock-code-flag">mongodb redis test</span>
184
164
  </code>
185
165
  <code className="warlock-code-line">&nbsp;</code>
186
166
  <code className="warlock-code-line">
187
- <span className="warlock-code-comment">
188
- # List all available features
189
- </span>
167
+ <span className="warlock-code-comment"># List all available features</span>
190
168
  </code>
191
169
  <code className="warlock-code-line">
192
- <span className="warlock-code-command">npx</span> warlock
193
- add <span className="warlock-code-flag">--list</span>
170
+ <span className="warlock-code-command">npx</span> warlock add{" "}
171
+ <span className="warlock-code-flag">--list</span>
194
172
  </code>
195
173
  <code className="warlock-code-line">&nbsp;</code>
196
174
  <code className="warlock-code-line">
197
175
  <span className="warlock-code-comment">
198
- # ✨ Features: react, mongodb, postgres, mysql, redis, s3,
199
- mail, image, test, swagger, scheduler & more
176
+ # ✨ Features: react, mongodb, postgres, mysql, redis, s3, mail, image, test,
177
+ swagger, scheduler & more
200
178
  </span>
201
179
  </code>
202
180
  </div>
@@ -210,7 +188,8 @@ export function HomePageComponent() {
210
188
  href="https://discord.gg/x3W9SN2jvx"
211
189
  className="warlock-social-link"
212
190
  target="_blank"
213
- rel="noopener noreferrer">
191
+ rel="noopener noreferrer"
192
+ >
214
193
  <span className="warlock-social-icon">💬</span>
215
194
  <span>Join Discord</span>
216
195
  </a>
@@ -218,7 +197,8 @@ export function HomePageComponent() {
218
197
  href="https://github.com/warlockjs"
219
198
  className="warlock-social-link"
220
199
  target="_blank"
221
- rel="noopener noreferrer">
200
+ rel="noopener noreferrer"
201
+ >
222
202
  <span className="warlock-social-icon">⭐</span>
223
203
  <span>Star on GitHub</span>
224
204
  </a>
@@ -226,17 +206,15 @@ export function HomePageComponent() {
226
206
  href="https://warlock.js.org"
227
207
  className="warlock-social-link"
228
208
  target="_blank"
229
- rel="noopener noreferrer">
209
+ rel="noopener noreferrer"
210
+ >
230
211
  <span className="warlock-social-icon">📚</span>
231
212
  <span>Read Docs</span>
232
213
  </a>
233
214
  </div>
234
215
  <p className="warlock-footer-text">
235
216
  Built with ⚡ by the{" "}
236
- <a
237
- href="https://github.com/warlockjs"
238
- target="_blank"
239
- rel="noopener noreferrer">
217
+ <a href="https://github.com/warlockjs" target="_blank" rel="noopener noreferrer">
240
218
  Warlock.js Team
241
219
  </a>
242
220
  {" · "}
@@ -0,0 +1,18 @@
1
+ import { Application, type RequestHandler } from "@warlock.js/core";
2
+
3
+ /**
4
+ * Default welcome route — a dependency-free JSON response.
5
+ *
6
+ * Projects scaffolded with the `react` feature get the richer HTML welcome
7
+ * page (`home-page.controller.tsx` + `HomePageComponent.tsx`) instead; this
8
+ * plain controller is removed at scaffold time when React is selected.
9
+ */
10
+ export const homePageController: RequestHandler = async (_request, response) => {
11
+ return response.success({
12
+ message: "Welcome to Warlock 🧙 — your app is up and running!",
13
+ version: Application.version,
14
+ docs: "https://warlock.js.org",
15
+ });
16
+ };
17
+
18
+ homePageController.description = "Welcome Home Page";
@@ -1,14 +1,7 @@
1
- import {
2
- type Request,
3
- type RequestHandler,
4
- type Response,
5
- } from "@warlock.js/core";
1
+ import { type Request, type RequestHandler, type Response } from "@warlock.js/core";
6
2
  import { HomePageComponent } from "../components/HomePageComponent";
7
3
 
8
- export const homePageController: RequestHandler = async (
9
- _request: Request,
10
- response: Response,
11
- ) => {
4
+ export const homePageController: RequestHandler = async (_request: Request, response: Response) => {
12
5
  return response.render(<HomePageComponent />);
13
6
  };
14
7
 
@@ -1,12 +1,9 @@
1
- import { fileExistsAsync } from "@warlock.js/fs";
2
1
  import { CACHE_FOR } from "@warlock.js/cache";
3
2
  import { Image, type RequestHandler, storage } from "@warlock.js/core";
3
+ import { fileExistsAsync } from "@warlock.js/fs";
4
4
  import { v } from "@warlock.js/seal";
5
5
 
6
- export const fetchUploadedFileController: RequestHandler = async (
7
- request,
8
- response,
9
- ) => {
6
+ export const fetchUploadedFileController: RequestHandler = async (request, response) => {
10
7
  const absolutePath = storage.root(request.input("*"));
11
8
 
12
9
  const { w: width, h: height } = request.validated();
@@ -19,7 +19,7 @@ const saveSubscription = globalEvents.onSaving(async (model, { isInsert }) => {
19
19
  }
20
20
  });
21
21
 
22
- const deleteSubscription = globalEvents.onDeleting(async model => {
22
+ const deleteSubscription = globalEvents.onDeleting(async (model) => {
23
23
  const user = useCurrentUser();
24
24
 
25
25
  if (!user) return;
@@ -9,11 +9,7 @@ export const userSchema = globalColumnsSchema.extend({
9
9
  name: v.string().required(),
10
10
  email: v.email().requiredIfEmpty("id"),
11
11
  image: v.string(),
12
- password: v
13
- .string()
14
- .min(6)
15
- .requiredIfEmpty("id")
16
- .addTransformer(useHashedPassword()),
12
+ password: v.string().min(6).requiredIfEmpty("id").addTransformer(useHashedPassword()),
17
13
  });
18
14
 
19
15
  export type UserSchema = Infer<typeof userSchema>;
@@ -49,15 +45,15 @@ export class User extends Auth<UserSchema> {
49
45
 
50
46
  static {
51
47
  // Local scopes
52
- this.addScope("active", query => {
48
+ this.addScope("active", (query) => {
53
49
  query.where("isActive", true);
54
50
  });
55
51
 
56
- this.addScope("admins", query => {
52
+ this.addScope("admins", (query) => {
57
53
  query.where("role", "admin");
58
54
  });
59
55
 
60
- this.addScope("verified", query => {
56
+ this.addScope("verified", (query) => {
61
57
  query.where("emailVerified", true);
62
58
  });
63
59
 
@@ -4,8 +4,5 @@ import { createNewUserController } from "./controllers/create-new-user.controlle
4
4
  import { listUsersController } from "./controllers/list-users.controller";
5
5
 
6
6
  guarded(() => {
7
- router
8
- .route("/users")
9
- .list(listUsersController)
10
- .post(createNewUserController);
7
+ router.route("/users").list(listUsersController).post(createNewUserController);
11
8
  });
@@ -1,9 +1,6 @@
1
1
  import type { Request, Response } from "@warlock.js/core";
2
2
 
3
- export default async function loginSocial(
4
- request: Request,
5
- response: Response,
6
- ) {
3
+ export default async function loginSocial(request: Request, response: Response) {
7
4
  const user = request.user;
8
5
 
9
6
  const auth = await user.generateAccessToken();
@@ -20,8 +20,7 @@ const globalPrefix = () => {
20
20
  return cachePrefix;
21
21
  }
22
22
 
23
- const domain =
24
- request.originDomain || request.header("domain") || request.input("domain");
23
+ const domain = request.originDomain || request.header("domain") || request.input("domain");
25
24
 
26
25
  if (!domain) return cachePrefix;
27
26
 
@@ -5,10 +5,7 @@ import type {
5
5
  } from "@warlock.js/cascade";
6
6
  import { env } from "@warlock.js/core";
7
7
 
8
- const databaseConfigurations: ConnectionOptions<
9
- MongoDriverOptions,
10
- MongoClientOptions
11
- > = {
8
+ const databaseConfigurations: ConnectionOptions<MongoDriverOptions, MongoClientOptions> = {
12
9
  driver: env("DB_DRIVER", "mongodb"),
13
10
  name: "default",
14
11
  database: env("DB_NAME"),