create-authenik8-app 2.1.0 → 2.1.2

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.
package/README.md CHANGED
@@ -13,6 +13,7 @@ if this saved you time, a ⭐ helps a lot
13
13
  ![Node](https://img.shields.io/badge/node-%3E=18-green)
14
14
  ![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)
15
15
  ![Maintained](https://img.shields.io/badge/maintained-yes-success)
16
+ ![CI](https://github.com/COD434/create-authenik8-app/actions/workflows/ci.yml/badge.svg)
16
17
 
17
18
 
18
19
  ![subtitle](https://readme-typing-svg.demolab.com?font=Fira+Code&size=18&pause=1000&color=00C2FF&width=600&lines=Production-ready+Auth+Generator;JWT+%2B+OAuth+%2B+Prisma+%2B+Redis;Identity+Engine+powered+authentication+system)
@@ -28,19 +29,17 @@ if this saved you time, a ⭐ helps a lot
28
29
 
29
30
  Create a new project:
30
31
 
31
- ``
32
+ ```
32
33
  bash
33
34
  npx create-authenik8-app my-app
34
- ``
35
-
36
- Then:
37
35
 
38
36
  cd my-app
39
37
 
40
38
  redis-server --daemonize yes
41
39
 
42
40
  npm run dev
43
-
41
+ ```
42
+ Your production-ready auth backend will be ready in 2min.
44
43
 
45
44
  ---
46
45
 
@@ -48,9 +47,9 @@ npm run dev
48
47
 
49
48
  • A fully working Express authentication starter with:
50
49
 
51
- • JWT authentication (access + refresh tokens)
50
+ • JWT authentication (access + refresh tokens) with secure rotation
52
51
 
53
- Secure refresh token rotation
52
+ Secure refresh token rotation
54
53
 
55
54
  • Redis-based token storage
56
55
 
@@ -64,21 +63,22 @@ npm run dev
64
63
 
65
64
  • .env file generated automatically
66
65
 
66
+ • Production extras (PM2 cluster, Helmet, rate limiting, memory guards)
67
67
 
68
68
 
69
69
  ---
70
70
 
71
71
  ## Why Authenik8?
72
72
 
73
- Authentication systems usually require:
73
+ Most developers waste days (or weeks) on:
74
74
 
75
- manual JWT setup
75
+ Manual JWT setup
76
76
 
77
- refresh token handling
77
+ • Secure refresh token handling
78
78
 
79
- Redis/session configuration
79
+ Redis session configuration
80
80
 
81
- access control logic
81
+ • Proper access control
82
82
 
83
83
 
84
84
  Authenik8 provides all of this out of the box so you can start building your API immediately.
@@ -88,19 +88,16 @@ Authenik8 provides all of this out of the box so you can start building your API
88
88
 
89
89
  ## Requirements
90
90
 
91
- Node.js 18+
91
+ Node.js 18+
92
92
 
93
- Redis (required for refresh tokens)
93
+ Redis (required for refresh tokens & security features)
94
94
 
95
+ Redis (Local)
96
+ ```
97
+ Bash
95
98
 
96
-
97
- ---
98
-
99
- ## Redis Setup
100
-
101
- Local
102
-
103
- redis-server --daemomize yes
99
+ redis-server --daemonize yes
100
+ ```
104
101
 
105
102
 
106
103
  ---
@@ -109,86 +106,164 @@ redis-server --daemomize yes
109
106
 
110
107
  Generated automatically:
111
108
 
109
+ The CLI generates these automatically:
112
110
 
111
+ ```
113
112
  JWT_SECRET=your-secret
114
113
  REFRESH_SECRET=your-refresh-secret
115
-
116
114
  REDIS_HOST=127.0.0.1
117
115
  REDIS_PORT=6379
118
-
116
+ ```
119
117
 
120
118
 
121
119
  ---
122
120
 
123
121
 
124
-
125
122
  ## RBAC Example
126
123
 
127
124
  Example of a protected route:
128
- ``
125
+ ```
129
126
  app.get("/admin", auth.requireAdmin, (req, res) => {
130
127
  res.json({ message: "Admin only route" });
131
128
  });
132
- ``
129
+ ```
130
+
131
+ ---
132
+
133
+ ## How It Works (Key Concept)
134
+
135
+ Authenik8 is not just another auth library.
136
+ It is an auth system generator.
137
+ At its core is the Identity Engine ``(authenik8-core)`` that treats authentication as an
138
+
139
+ # identity resolution problem:
140
+
141
+ • Unifies credentials (email/password) + OAuth providers
142
+
143
+ • Prevents duplicate identities
144
+
145
+ • Handles account linking intelligently
146
+
147
+ • Normalizes data across providers
148
+
149
+ This design makes future additions (MFA, WebAuthn, etc.) much cleaner.
133
150
 
134
151
  ---
135
152
  ## Powered by
136
153
 
137
- authenik8-core
154
+ authenik8-core (v1.0.3) — battle-tested identity & token engine
138
155
 
139
156
  ---
140
157
 
141
- ## Design Goal
158
+ ## Production Enhancements
142
159
 
143
- Authenik8 is not an auth library.
144
- It is an auth system generator.
145
- It removes setup time and enforces consistent backend security patterns by default.
160
+ PM2 cluster mode + auto-restart
161
+
162
+ Memory usage guardrails
163
+
164
+ • Security middleware (Helmet, rate limiting, etc.)
165
+
166
+ ---
167
+
168
+ ## The Identity Engine
146
169
 
147
- Authenik8 treats authentication as an identity resolution problem, not just a login system.
170
+ At the heart of Authenik8 is the **Identity Engine** , a unified authentication core built into `authenik8-core`.
148
171
 
149
- At the core is an Identity Engine that ensures consistent user identity across:
150
- - credentials (email/password)
151
- - OAuth providers
152
- - future authentication strategies
172
+ ---
173
+
174
+ ### Why a dedicated Identity Engine?
175
+
176
+ Traditional auth systems treat login as separate, isolated flows:
177
+
178
+ • Email/password goes one way
179
+
180
+ • Google OAuth another way
181
+
182
+ • GitHub yet another
183
+
184
+ This leads to duplicate accounts, inconsistent data, fragile linking logic, and security gaps.
185
+
186
+ The **Identity Engine** solves this by treating authentication as an **identity resolution problem** instead of just credential validation.
153
187
 
154
188
  ---
155
189
 
156
- ## OAuth
190
+ ### What the Identity Engine does
191
+
192
+ • **Unified Identity Resolution**
193
+ It intelligently resolves any login method (credentials, OAuth, or future strategies) into a single, consistent user identity in your system.
157
194
 
158
- Google
159
- Github
160
- OAuth in Authenik8 is not a direct provider integration layer.
195
+ **Smart Account Linking**
196
+ Automatically detects when a user already exists (via email or other signals) and offers secure linking instead of creating duplicates.
161
197
 
162
- It is implemented through an internal Identity Engine that sits inside `authenik8-core`.
198
+ **Profile Normalization**
199
+ Converts provider-specific data (Google profile, GitHub profile, etc.) into your app’s clean, unified user schema.
163
200
 
164
- The Identity Engine is responsible for:
165
- - Resolving OAuth profiles into system identities
166
- - Handling login vs account linking flows
167
- - Preventing duplicate identity creation across providers
168
- - Normalizing provider-specific user data into a unified schema
201
+ **Secure Token Lifecycle Management**
202
+ Handles JWT access + refresh tokens with rotation, JTI-based replay protection, and Redis-backed stateful control.
169
203
 
170
- This allows OAuth support to remain consistent regardless of provider complexity.
204
+ - **Consistent Security Layer**
205
+ Applies the same high-security rules (rate limiting, IP awareness, session controls) across all authentication methods.
171
206
 
172
207
  ---
173
208
 
174
- ### Production Enhancements
209
+ ### OAuth Through the Identity Engine
210
+
211
+ OAuth (Google, GitHub, and more coming) is **not** implemented as direct Passport.js-style routes. Instead:
212
+
213
+ 1. The provider callback is received
214
+
215
+ 2. The Identity Engine resolves/normalizes the profile
216
+
217
+ 3. It decides: login existing user, link to existing account, or create new identity
218
+
219
+ 4. Returns consistent tokens and user data
220
+
221
+ This design makes adding new providers or authentication methods much cleaner and more secure.
222
+
223
+ ---
224
+
225
+ ## Authenik8 vs Passport.js
226
+
227
+ | Aspect | **Authenik8** | **Passport.js** |
228
+ |---------------------------|----------------------------------------------------|------------------------------------------|
229
+ | **Purpose** | Full auth system generator | Authentication middleware |
230
+ | **Setup Time** | \~30 seconds (complete project) | Hours to days |
231
+ | **JWT + Refresh Tokens** | Secure rotation + replay protection built-in | Manual implementation required |
232
+ | **OAuth** | Unified via Identity Engine (smart linking) | Separate strategies per provider |
233
+ | **RBAC** | Built-in middleware | Not included |
234
+ | **Production Features** | PM2, Helmet, rate limiting, memory guards | None (you add them) |
235
+ | **Identity Management** | Centralized Identity Engine | None |
236
+ | **Flexibility** | Medium (opinionated & extensible) | Very high |
237
+ | **Best For** | Fast, secure, consistent backends | Maximum customization |
238
+
239
+
240
+ Passport.js is a great flexible tool, but it leaves you to build secure JWT, refresh logic, OAuth linking, and RBAC yourself.
241
+ Authenik8 gives you a complete, production-ready authentication system from day one.
242
+
243
+
244
+ ---
245
+
246
+ ### Benefits for you
247
+
248
+ • No more duplicate user headaches
249
+
250
+ • Consistent security behavior across all login methods
175
251
 
176
- - PM2 cluster mode support
177
- - Auto restart on crashes
178
- - Memory usage guardrails
179
- - Basic security middleware (helmet, rate limiting)
252
+ • Easier future-proofing (MFA, WebAuthn, enterprise SSO, etc.)
180
253
 
254
+ • Cleaner, more maintainable codebase in your generated project
181
255
 
256
+ The Identity Engine is what makes Authenik8 feel like a coherent **authentication system** rather than a collection of routes and middleware.
182
257
 
183
258
  ---
184
259
 
185
260
  ## Notes
186
261
 
187
- Redis is required for refresh token handling
262
+ This generates a starter project, not a full framework
188
263
 
189
- This CLI generates a starter project, not a full framework
264
+ Redis is mandatory for security features
190
265
 
191
- RBAC is included via middleware (e.g. requireAdmin)
266
+ authenik8-core is closed-source for security reasons (implementation details)
192
267
 
193
268
 
194
269
 
package/dist/index.js CHANGED
@@ -8,10 +8,10 @@ import { initState, saveState, loadState, clearState, hasReachedStep, getState }
8
8
  import { killAllProcesses, run, getCommand } from "./lib/process.js";
9
9
  import { showBootLogo, renderStep, spinner } from "./lib/ui.js";
10
10
  import { runPrompts } from "./steps/prompts.js";
11
- import { createProject } from "./steps/createProject.js";
11
+ import { createProject, configurePackageJson } from "./steps/createProject.js";
12
12
  import { installAuth } from "./steps/installAuth.js";
13
13
  import { configurePrisma } from "./steps/configurePrisma.js";
14
- import { installDependencies, generatePrismaClient } from "./steps/installDeps.js";
14
+ import { installDependencies, detectPackageManager } from "./steps/installDeps.js";
15
15
  import { configureProduction, initGit, appendProductionReadme, resolveRuntime } from "./steps/finalSetup.js";
16
16
  import { printSummary } from "./utils/output.js";
17
17
  const __filename = fileURLToPath(import.meta.url);
@@ -135,11 +135,17 @@ Resumable steps:
135
135
  console.log(chalk.yellow(`\n↻ Resuming setup for ${projectName} from "${currentStep}"...\n`));
136
136
  }
137
137
  else {
138
- const promptAnswers = await runPrompts(getState());
138
+ const promptAnswers = await runPrompts(getState(), isProduction);
139
139
  saveState({ ...promptAnswers, step: "prompts" });
140
140
  currentStep = "prompts";
141
141
  }
142
+ const raw = getState();
143
+ if ((raw.authMode === "auth" || raw.authMode === "auth-oauth") && !raw.usePrisma) {
144
+ console.log(chalk.yellow("\n⚠ Auth and Auth+OAuth require Prisma — enabling automatically.\n"));
145
+ saveState({ usePrisma: true, database: raw.database ?? "sqlite" });
146
+ }
142
147
  const state = getState();
148
+ const runtime = resolveRuntime(state.runtime);
143
149
  assertRequired(state.framework, "framework");
144
150
  assertRequired(state.authMode, "authMode");
145
151
  if (state.usePrisma) {
@@ -170,7 +176,8 @@ Resumable steps:
170
176
  let selectedHash = "bcryptjs";
171
177
  if (!hasReachedStep(currentStep, "auth-installed")) {
172
178
  if (getState().authMode !== "base") {
173
- selectedHash = await installAuth(targetDir);
179
+ const pm = detectPackageManager();
180
+ selectedHash = await installAuth(targetDir, pm);
174
181
  }
175
182
  renderStep("auth-installed", isProduction);
176
183
  saveState({ step: "auth-installed", ...(getState().authMode !== "base" && { hashLib: selectedHash }) });
@@ -191,34 +198,24 @@ Resumable steps:
191
198
  else {
192
199
  console.log(chalk.gray("↷ Skipping Prisma/package setup (already completed)"));
193
200
  }
201
+ if (isProduction && !hasReachedStep(currentStep, "production-configured")) {
202
+ await configureProduction(targetDir, projectName, runtime);
203
+ }
194
204
  // Install deps
195
205
  if (!hasReachedStep(currentStep, "deps-installed")) {
196
206
  renderStep("deps-installed", isProduction);
207
+ configurePackageJson(targetDir, getState().usePrisma ?? false);
197
208
  await installDependencies(targetDir);
198
209
  saveState({ step: "deps-installed", ...(getState().authMode !== "base" && { hashLib: selectedHash }) });
199
210
  currentStep = "deps-installed";
200
211
  renderStep(currentStep, isProduction);
201
212
  }
202
213
  else {
203
- await run(getCommand("npm"), ["install"], { cwd: targetDir, stdio: "inherit" });
204
- }
205
- // Prisma generate
206
- if (!hasReachedStep(currentStep, "prisma-generated")) {
207
- if (getState().usePrisma) {
208
- await generatePrismaClient(targetDir);
209
- }
210
- saveState({ step: "prisma-generated", ...(getState().authMode !== "base" && { hashLib: selectedHash }) });
211
- currentStep = "prisma-generated";
212
- renderStep(currentStep, isProduction);
213
- }
214
- else {
215
- console.log(chalk.gray("↷ Skipping Prisma client generation (already completed)"));
214
+ //configurePackageJson(targetDir, getState().usePrisma ?? false);
215
+ await installDependencies(targetDir);
216
216
  }
217
217
  // Production setup
218
218
  if (isProduction && !hasReachedStep(currentStep, "production-configured")) {
219
- const state = getState();
220
- const runtime = resolveRuntime(state.runtime);
221
- await configureProduction(targetDir, projectName, runtime);
222
219
  saveState({ step: "production-configured", ...(getState().authMode !== "base" && { hashLib: selectedHash }) });
223
220
  currentStep = "production-configured";
224
221
  renderStep(currentStep, isProduction);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAC,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAC,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,sBAAsB,EAAC,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjE,IAAI,CAAC,cAAc,EAAE,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oHAAoH,CAAC,CAAC,CAAC;IAC7I,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,WAAW,GAAW,cAAc,CAAC;AAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;AAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;AAEnE,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;AAErD,KAAK,UAAU,wBAAwB;IACrC,IAAI,cAAc,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAU,EAAE,IAAY;IAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,gBAAgB,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,WAAW,WAAW,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,YAAY,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBjB,CAAC,CAAC;YACG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuB1B,CAAC,CAAC,CAAC;QAEA,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,WAAW,GAAa,OAAO,CAAC;QAEpC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,MAAM,WAAW,4EAA4E,CAAC,CACzG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,WAAW,mBAAmB,CAAC,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;;;;;;;;CAQ5B,CAAC,CAAC,CAAC;QACA,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,WAAW,IAAI,CAAC,CAAC,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACjC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,WAAW,UAAU,WAAW,QAAQ,CAAC,CAAC,CAAC;QAChG,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,EAAC,YAAY,CAAC,CAAC;YAChE,SAAS,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YACjD,WAAW,GAAG,SAAS,CAAC;QAC1B,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oEAAoE,CAAC,CAAC,CAAC;YAChG,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QAEG,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE9C,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC7C,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvD,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAEvD,oBAAoB;QACpB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACpD,UAAU,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;gBACzD,cAAc,GAAG,IAAI,CAAC;gBACtB,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBACvC,WAAW,GAAG,iBAAiB,CAAC;gBAChC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,eAAe;QACf,IAAI,YAAY,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACnD,IAAI,QAAQ,EAAE,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACpC,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;gBACjC,YAAY,GAAG,MAAM,WAAW,CAAC,SAAS,EAAC,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,UAAU,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAC3C,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;YACxG,WAAW,GAAG,gBAAgB,CAAC;YAC/B,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,UAAU,EAAE,OAAO,IAAI,YAAY,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAAE,CAAC;YACtD,MAAM,eAAe,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAC3D,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3G,WAAW,GAAG,mBAAmB,CAAC;YAClC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE,CAAC;YAC1E,MAAM,mBAAmB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACnD,UAAU,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAE3C,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;YAE/D,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAGrC,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;YACxG,WAAW,GAAG,gBAAgB,CAAC;YAC/B,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,iEAAiE;YACjE,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QAED,oBAAoB;QACpB,IAAI,YAAY,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE,CAAC;YAC1E,SAAS,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/G,WAAW,GAAG,uBAAuB,CAAC;YACtC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACxC,CAAC;QAED,WAAW;QACX,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACpD,IAAI,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC;gBACtB,UAAU,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;gBAC5C,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC;YACD,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;YACzG,WAAW,GAAG,iBAAiB,CAAC;YAChC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,SAAS;QACT,IAAI,YAAY,EAAE,CAAC;YACjB,sBAAsB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;QAED,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;QAEvC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,UAAU,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;YACnC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACzB,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,gBAAgB,EAAE,CAAC;QACnB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACvD,MAAM,wBAAwB,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,wBAAwB,EAAE,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnF;AAED,wBAAgB,gBAAgB,SAO/B;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,UAMrC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,WAQ9C;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,iBAIlD"}
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBnF;AAED,wBAAgB,gBAAgB,SAO/B;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,UAQrC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,WAQ9C;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,iBAIlD"}
@@ -37,6 +37,10 @@ export function getCommand(cmd) {
37
37
  return isWin ? "npm.cmd" : "npm";
38
38
  if (cmd === "npx")
39
39
  return isWin ? "npx.cmd" : "npx";
40
+ if (cmd === "pnpm")
41
+ return isWin ? "pnpm.cmd" : "pnpm";
42
+ if (cmd === "bun")
43
+ return isWin ? "bun.exe" : "bun";
40
44
  if (cmd === "git")
41
45
  return isWin ? "git.exe" : "git";
42
46
  return cmd;
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAgB,CAAC;AAEhD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,OAAmB;IAClE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,eAAe,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,QAAQ,IAAI,GAAG;QACf,CAAE,GAA2B,CAAC,MAAM,KAAK,QAAQ;YAC9C,GAA2B,CAAC,MAAM,KAAK,SAAS,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAY;IACjD,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAgB,CAAC;AAEhD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,OAAmB;IAClE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,eAAe,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3C,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IACvD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,QAAQ,IAAI,GAAG;QACf,CAAE,GAA2B,CAAC,MAAM,KAAK,QAAQ;YAC9C,GAA2B,CAAC,MAAM,KAAK,SAAS,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAY;IACjD,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { CliState } from "../lib/types.js";
2
2
  export declare function resolveTemplateName(authMode: string): string;
3
+ export declare function configurePackageJson(targetDir: string, usePrisma: boolean): void;
3
4
  export declare function createProject(state: CliState, targetDir: string, templateRoot: string): Promise<void>;
4
5
  //# sourceMappingURL=createProject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createProject.d.ts","sourceRoot":"","sources":["../../src/steps/createProject.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf"}
1
+ {"version":3,"file":"createProject.d.ts","sourceRoot":"","sources":["../../src/steps/createProject.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAiBhF;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -8,6 +8,21 @@ export function resolveTemplateName(authMode) {
8
8
  return "express-auth+";
9
9
  return "express-base";
10
10
  }
11
+ export function configurePackageJson(targetDir, usePrisma) {
12
+ const pkgPath = path.join(targetDir, "package.json");
13
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
14
+ if (!pkg.scripts.postinstall?.includes("prisma")) {
15
+ pkg.scripts.postinstall = "npx prisma@5.22.0 generate";
16
+ }
17
+ if (usePrisma) {
18
+ pkg.scripts ??= {};
19
+ pkg.scripts.postinstall = "npx prisma@5.22.0 generate";
20
+ pkg.scripts.dev = pkg.scripts.dev
21
+ ? `npx prisma@5.22.0 generate && ${pkg.scripts.dev}`
22
+ : "npx prisma@5.22.0 generate";
23
+ }
24
+ fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
25
+ }
11
26
  export async function createProject(state, targetDir, templateRoot) {
12
27
  const templateName = resolveTemplateName(state.authMode ?? "base");
13
28
  const templatePath = path.join(templateRoot, templateName);
@@ -1 +1 @@
1
- {"version":3,"file":"createProject.js","sourceRoot":"","sources":["../../src/steps/createProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC;IAC/C,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,eAAe,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAe,EACf,SAAiB,EACjB,YAAoB;IAEpB,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"createProject.js","sourceRoot":"","sources":["../../src/steps/createProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC;IAC/C,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,eAAe,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,SAAkB;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,4BAA4B,CAAC;IACzD,CAAC;IAEH,IAAI,SAAS,EAAE,CAAC;QACd,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC;QACnB,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,4BAA4B,CAAC;QACvD,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG;YAC/B,CAAC,CAAC,iCAAiC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;YACpD,CAAC,CAAC,4BAA4B,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAe,EACf,SAAiB,EACjB,YAAoB;IAEpB,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"finalSetup.d.ts","sourceRoot":"","sources":["../../src/steps/finalSetup.ts"],"names":[],"mappings":"AAOA,wBAAgB,MAAM,IAAI,OAAO,CAOhC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,KAAK,CAO3D;AAGD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAC,OAAO,EAAE,MAAM,GAAE,KAAK,GAAG,IAAI,CAuCnG;AAGD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAC,WAAW,EAAC,MAAM,EAAG,OAAO,EAAC,MAAM,GAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBrH;AAGD,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU9D;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAuBnF"}
1
+ {"version":3,"file":"finalSetup.d.ts","sourceRoot":"","sources":["../../src/steps/finalSetup.ts"],"names":[],"mappings":"AAUA,wBAAgB,MAAM,IAAI,OAAO,CAOhC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,KAAK,CAO3D;AAGD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAC,OAAO,EAAE,MAAM,GAAE,KAAK,GAAG,IAAI,CAuCnG;AAGD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAC,WAAW,EAAC,MAAM,EAAG,OAAO,EAAC,MAAM,GAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBnH;AAKH,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU9D;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAuBnF"}
@@ -3,6 +3,8 @@ import path from "path";
3
3
  import { run, getCommand, exitForInterrupt } from "../lib/process.js";
4
4
  import { spinner } from "../lib/ui.js";
5
5
  import { execSync } from "child_process";
6
+ const PM2_VERSION = "^5.4.2";
7
+ const TS_NODE_VERSION = "^10.9.2";
6
8
  export function hasBun() {
7
9
  try {
8
10
  execSync("bun --version", { stdio: "ignore" });
@@ -60,22 +62,17 @@ export function createPm2Config(targetDir, projectName, runtime) {
60
62
  fs.writeFileSync(configPath, content, "utf-8");
61
63
  }
62
64
  export async function configureProduction(targetDir, projectName, runtime) {
63
- spinner.start("Setting up production mode (PM2)...");
64
- try {
65
- await run(getCommand("npm"), ["install", "pm2"], {
66
- cwd: targetDir,
67
- stdio: "inherit",
68
- });
69
- if (runtime === "node") {
70
- await run(getCommand("npm"), ["install", "ts-node"], { cwd: targetDir, stdio: "inherit" });
71
- }
72
- createPm2Config(targetDir, projectName, runtime);
73
- spinner.stop();
74
- }
75
- catch (err) {
76
- spinner.fail("Failed to install PM2");
77
- exitForInterrupt(err);
65
+ const pkgPath = path.join(targetDir, "package.json");
66
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
67
+ pkg.dependencies["pm2"] = PM2_VERSION;
68
+ if (runtime === "node") {
69
+ pkg.dependencies["ts-node"] = TS_NODE_VERSION;
78
70
  }
71
+ pkg.scripts["pm2:start"] = "npx pm2 start ecosystem.config.js";
72
+ pkg.scripts["pm2:stop"] = `npx pm2 stop ${projectName}`;
73
+ pkg.scripts["pm2:logs"] = "npx pm2 logs";
74
+ fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
75
+ createPm2Config(targetDir, projectName, runtime);
79
76
  }
80
77
  export async function initGit(targetDir) {
81
78
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"finalSetup.js","sourceRoot":"","sources":["../../src/steps/finalSetup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"finalSetup.js","sourceRoot":"","sources":["../../src/steps/finalSetup.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export declare function installAuth(targetDir: string): Promise<string>;
1
+ import type { PackageManager } from "./installDeps.js";
2
+ export declare function installAuth(targetDir: string, pm: PackageManager): Promise<string>;
2
3
  //# sourceMappingURL=installAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installAuth.d.ts","sourceRoot":"","sources":["../../src/steps/installAuth.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
1
+ {"version":3,"file":"installAuth.d.ts","sourceRoot":"","sources":["../../src/steps/installAuth.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EAAC,EAAE,EAAE,cAAc,GACnC,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
@@ -3,29 +3,13 @@ import path from "path";
3
3
  import { run, getCommand, exitForInterrupt } from "../lib/process.js";
4
4
  import { getBestHashLib, generateHashModule } from "../utils/hash.js";
5
5
  import { spinner } from "../lib/ui.js";
6
- export async function installAuth(targetDir) {
7
- let selectedHash = getBestHashLib();
6
+ export async function installAuth(targetDir, pm) {
7
+ let selectedHash = getBestHashLib(pm);
8
8
  spinner.start("Installing password auth...");
9
- try {
10
- await run(getCommand("npm"), ["install", selectedHash], {
11
- cwd: targetDir,
12
- stdio: "ignore",
13
- });
14
- }
15
- catch {
16
- if (selectedHash !== "bcryptjs") {
17
- spinner.warn(`${selectedHash} failed, falling back to bcryptjs`);
18
- await run(getCommand("npm"), ["install", "bcryptjs"], {
19
- cwd: targetDir,
20
- stdio: "ignore",
21
- });
22
- selectedHash = "bcryptjs";
23
- }
24
- else {
25
- spinner.fail("Failed to install password auth");
26
- process.exit(1);
27
- }
28
- }
9
+ const pkgPath = path.join(targetDir, "package.json");
10
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
11
+ pkg.dependencies[selectedHash] = selectedHash === "argon2" ? "^0.31.2" : "^2.4.3";
12
+ fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
29
13
  spinner.stop();
30
14
  const hashLib = selectedHash;
31
15
  await fs.writeFile(path.join(targetDir, "src/utils/hash.ts"), generateHashModule(hashLib));
@@ -1 +1 @@
1
- {"version":3,"file":"installAuth.js","sourceRoot":"","sources":["../../src/steps/installAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAiB;IAEjB,IAAI,YAAY,GAAG,cAAc,EAAE,CAAC;IAEpC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;YACtD,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,mCAAmC,CAAC,CAAC;YACjE,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;gBACpD,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;YACH,YAAY,GAAG,UAAU,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,MAAM,OAAO,GAAG,YAAqC,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,EACzC,kBAAkB,CAAC,OAAO,CAAC,CAC5B,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"installAuth.js","sourceRoot":"","sources":["../../src/steps/installAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAKvC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAiB,EAAC,EAAkB;IAEpC,IAAI,YAAY,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAGtC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1D,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAElF,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1D,OAAO,CAAC,IAAI,EAAE,CAAC;IAEb,MAAM,OAAO,GAAG,YAAqC,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,EACzC,kBAAkB,CAAC,OAAO,CAAC,CAC5B,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -1,3 +1,4 @@
1
+ export type PackageManager = "pnpm" | "bun" | "npm";
2
+ export declare function detectPackageManager(): PackageManager;
1
3
  export declare function installDependencies(targetDir: string): Promise<void>;
2
- export declare function generatePrismaClient(targetDir: string): Promise<void>;
3
4
  //# sourceMappingURL=installDeps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installDeps.d.ts","sourceRoot":"","sources":["../../src/steps/installDeps.ts"],"names":[],"mappings":"AAGA,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1E;AAED,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY3E"}
1
+ {"version":3,"file":"installDeps.d.ts","sourceRoot":"","sources":["../../src/steps/installDeps.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD,wBAAgB,oBAAoB,IAAI,cAAc,CAYrD;AAgBD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1E"}
@@ -1,31 +1,50 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ import { execSync } from "child_process";
1
4
  import { run, getCommand, exitForInterrupt } from "../lib/process.js";
2
5
  import { spinner } from "../lib/ui.js";
3
- export async function installDependencies(targetDir) {
4
- spinner.start("Installing dependencies...(this may take a few minutes)");
6
+ export function detectPackageManager() {
5
7
  try {
6
- await run(getCommand("npm"), ["install"], {
7
- cwd: targetDir,
8
- stdio: "inherit",
9
- });
10
- spinner.stop();
8
+ if (process.env.npm_execpath?.includes("pnpm"))
9
+ return "pnpm";
10
+ if (process.env.npm_execpath?.includes("bun"))
11
+ return "bun";
12
+ execSync("pnpm --version", { stdio: "ignore" });
13
+ return "pnpm";
11
14
  }
12
- catch (err) {
13
- spinner.fail("Failed to install dependencies");
14
- exitForInterrupt(err);
15
+ catch { }
16
+ try {
17
+ execSync("bun --version", { stdio: "ignore" });
18
+ return "bun";
19
+ }
20
+ catch { }
21
+ return "npm";
22
+ }
23
+ function getInstallArgs(pm, targetDir) {
24
+ switch (pm) {
25
+ case "pnpm":
26
+ return ["install", "--prefer-offline"];
27
+ case "bun":
28
+ return ["install"];
29
+ case "npm":
30
+ default:
31
+ return ["install", "--prefer-offline", "--no-audit", "--no-fund"];
15
32
  }
16
33
  }
17
- export async function generatePrismaClient(targetDir) {
18
- spinner.start("Generating Prisma client...");
34
+ export async function installDependencies(targetDir) {
35
+ const pm = detectPackageManager();
36
+ spinner.start("Installing dependencies...(this may take a few minutes)");
19
37
  try {
20
- await run(getCommand("npx"), ["prisma@5.22.0", "generate"], {
38
+ await run(getCommand(pm), getInstallArgs(pm, targetDir), {
21
39
  cwd: targetDir,
22
- stdio: "ignore",
40
+ stdio: "inherit",
23
41
  });
24
42
  spinner.stop();
25
43
  }
26
44
  catch (err) {
27
- spinner.fail("Failed to generate Prisma client");
45
+ spinner.fail("Failed to install dependencies");
28
46
  exitForInterrupt(err);
47
+ throw err;
29
48
  }
30
49
  }
31
50
  //# sourceMappingURL=installDeps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"installDeps.js","sourceRoot":"","sources":["../../src/steps/installDeps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IACzD,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;YACxC,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB;IAC1D,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE;YAC1D,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACjD,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"installDeps.js","sourceRoot":"","sources":["../../src/steps/installDeps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5D,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,CAAC;QACH,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,SAAS,cAAc,CAAC,EAAkB,EAAE,SAAiB;IAC3D,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,MAAM;YACT,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACzC,KAAK,KAAK;YACR,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,KAAK,KAAK,CAAC;QACX;YACA,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAEpE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IACzD,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE;YACvD,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,GAAG,CAAC;IACV,CAAC;AACH,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import type { CliState } from "../lib/types.js";
2
- export declare function runPrompts(state: CliState): Promise<Partial<CliState>>;
2
+ export declare function runPrompts(state: CliState, isProduction: boolean): Promise<Partial<CliState>>;
3
3
  //# sourceMappingURL=prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/steps/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAsB,UAAU,CAAC,KAAK,EAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAyE3E"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/steps/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAsB,UAAU,CAAC,KAAK,EAAC,QAAQ,EAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CA0EjG"}
@@ -1,6 +1,6 @@
1
1
  import inquirer from "inquirer";
2
2
  import { hasBun } from "./finalSetup.js";
3
- export async function runPrompts(state) {
3
+ export async function runPrompts(state, isProduction) {
4
4
  const bunAvailable = hasBun();
5
5
  return inquirer.prompt([
6
6
  {
@@ -10,11 +10,23 @@ export async function runPrompts(state) {
10
10
  choices: ["Express", "Fastify (coming soon)"],
11
11
  default: "Express",
12
12
  },
13
+ {
14
+ type: "list",
15
+ name: "authMode",
16
+ message: "Choose authentication setup:",
17
+ choices: [
18
+ { name: "JWT only", value: "base" },
19
+ { name: "Email + Password Auth", value: "auth" },
20
+ { name: "Full Auth (Password + OAuth)", value: "auth-oauth" },
21
+ ],
22
+ default: "base",
23
+ },
13
24
  {
14
25
  type: "confirm",
15
26
  name: "usePrisma",
16
27
  message: "Use Prisma?",
17
28
  default: true,
29
+ when: (answers) => answers.authMode === "base"
18
30
  },
19
31
  {
20
32
  type: "list",
@@ -24,7 +36,7 @@ export async function runPrompts(state) {
24
36
  { name: "PostgreSQL", value: "postgresql" },
25
37
  { name: "SQLite ", value: "sqlite" },
26
38
  ],
27
- when: (answers) => answers.usePrisma,
39
+ when: (answers) => answers.usePrisma || answers.authMode === "auth" || answers.authMode === "auth-oauth",
28
40
  default: "sqlite",
29
41
  },
30
42
  {
@@ -33,17 +45,6 @@ export async function runPrompts(state) {
33
45
  message: "Initialize git?",
34
46
  default: true,
35
47
  },
36
- {
37
- type: "list",
38
- name: "authMode",
39
- message: "Choose authentication setup:",
40
- choices: [
41
- { name: "JWT only", value: "base" },
42
- { name: "Email + Password Auth", value: "auth" },
43
- { name: "Full Auth (Password + OAuth)", value: "auth-oauth" },
44
- ],
45
- default: "base",
46
- },
47
48
  {
48
49
  type: "list",
49
50
  name: "runtime",
@@ -61,7 +62,7 @@ export async function runPrompts(state) {
61
62
  value: "node",
62
63
  },
63
64
  ],
64
- when: () => true,
65
+ when: () => isProduction,
65
66
  default: bunAvailable ? "bun" : "node"
66
67
  },
67
68
  ])
@@ -70,7 +71,6 @@ export async function runPrompts(state) {
70
71
  result.runtime = "node";
71
72
  }
72
73
  return result;
73
- console.log("Runtime:", result.runtime);
74
74
  });
75
75
  }
76
76
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/steps/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAEtC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAc;IAC/C,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrB;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,CAAC,SAAS,EAAE,uBAAuB,CAAC;YAC7C,OAAO,EAAE,SAAS;SACnB;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;aACrC;YACD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS;YACpC,OAAO,EAAE,QAAQ;SAClB;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,8BAA8B;YACvC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;gBACnC,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE;gBAChD,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,YAAY,EAAE;aAC9D;YACD,OAAO,EAAE,MAAM;SAChB;QACE;YACD,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,YAAY;wBAChB,CAAC,CAAC,2BAA2B;wBAC7B,CAAC,CAAC,qBAAqB;oBACzB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC,YAAY,IAAI,eAAe;iBAC3C;gBACD;oBACE,IAAI,EAAE,iCAAiC;oBACvC,KAAK,EAAE,MAAM;iBACd;aACF;YACD,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI;YAChB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;SACvC;KACF,CAAC;SACD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAA;AAEJ,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/steps/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAEtC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAc,EAAC,YAAqB;IACrE,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrB;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,CAAC,SAAS,EAAE,uBAAuB,CAAC;YAC7C,OAAO,EAAE,SAAS;SACnB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,8BAA8B;YACvC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;gBACnC,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE;gBAChD,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,YAAY,EAAE;aAC9D;YACD,OAAO,EAAE,MAAM;SAChB;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,IAAI;YACd,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM;SAC9C;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;aACrC;YACD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY;YACxG,OAAO,EAAE,QAAQ;SAClB;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE,IAAI;SACd;QAEE;YACD,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,YAAY;wBAChB,CAAC,CAAC,2BAA2B;wBAC7B,CAAC,CAAC,qBAAqB;oBACzB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC,YAAY,IAAI,eAAe;iBAC3C;gBACD;oBACE,IAAI,EAAE,iCAAiC;oBACvC,KAAK,EAAE,MAAM;iBACd;aACF;YACD,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;YACxB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;SACvC;KACF,CAAC;SACD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAA;AAEJ,CAAC"}
@@ -1,3 +1,4 @@
1
- export declare function getBestHashLib(): string;
1
+ import type { PackageManager } from "../steps/installDeps.js";
2
+ export declare function getBestHashLib(pm: PackageManager): string;
2
3
  export declare function generateHashModule(hashLib: "argon2" | "bcryptjs"): string;
3
4
  //# sourceMappingURL=hash.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CA0BzE"}
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAQ9D,wBAAgB,cAAc,CAAC,EAAE,EAAC,cAAc,GAAG,MAAM,CAaxD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CA0BzE"}
@@ -1,7 +1,10 @@
1
1
  import os from "os";
2
+ import { execSync } from "child_process";
2
3
  const platform = os.platform();
3
4
  const isTermux = process.env.PREFIX?.includes("com.termux") || process.env.TERMUX === "true";
4
- export function getBestHashLib() {
5
+ export function getBestHashLib(pm) {
6
+ if (pm !== "npm")
7
+ return "bcryptjs";
5
8
  if (isTermux)
6
9
  return "bcryptjs";
7
10
  if (platform === "win32")
@@ -10,6 +13,13 @@ export function getBestHashLib() {
10
13
  return "argon2";
11
14
  if (platform === "linux")
12
15
  return "argon2";
16
+ try {
17
+ execSync("node-gyp --version", { stdio: "ignore" });
18
+ return "argon2";
19
+ }
20
+ catch {
21
+ return "bcryptjs";
22
+ }
13
23
  return "bcryptjs";
14
24
  }
15
25
  export function generateHashModule(hashLib) {
@@ -1 +1 @@
1
- {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE/B,MAAM,QAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;AAE9E,MAAM,UAAU,cAAc;IAC5B,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC;IAChC,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC1C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA8B;IAC/D,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO;;;;;;;;;;CAUV,CAAC;IACA,CAAC;IAED,OAAO;;;;;;;;;;CAUR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE/B,MAAM,QAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;AAE9E,MAAM,UAAU,cAAc,CAAC,EAAiB;IAChD,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,UAAU,CAAC;IAClC,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC;IAChC,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC1C,IAAI,CAAC;QACD,QAAQ,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC;IACpB,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA8B;IAC/D,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO;;;;;;;;;;CAUV,CAAC;IACA,CAAC;IAED,OAAO;;;;;;;;;;CAUR,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-authenik8-app",
3
- "version": "2.1.0",
4
- "description": "Create production-ready backend APIs with a built-in identity engine. Authenik8 scaffolds Express + Prisma apps with JWT auth, refresh token rotation, account linking, Redis-backed security, and scalable architecture out of the box.",
3
+ "version": "2.1.2",
4
+ "description": " Fast Express + TypeScript auth starter with secure JWT, refresh rotation, Redis, RBAC, OAuth & Prisma.\nPowered by the Authenik8 Identity Engine.",
5
5
  "bin": {
6
6
  "create-authenik8-app": "dist/index.js"
7
7
  },
@@ -48,5 +48,9 @@
48
48
  "@types/express": "^5.0.6",
49
49
  "@types/fs-extra": "^11.0.4",
50
50
  "@types/node": "^25.5.2"
51
+ },
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "https://github.com/username/repo-name.git"
51
55
  }
52
56
  }
@@ -1,27 +1,24 @@
1
1
  {
2
2
  "name": "authenik8-app",
3
- "version": "1.0.6",
4
3
  "description": "Authenik8 generated Express auth app",
5
4
  "main": "dist/server.js",
6
5
  "type": "commonjs",
7
6
  "scripts": {
8
7
  "dev": "ts-node-dev --respawn --transpile-only src/server.ts",
9
8
  "build": "tsc",
10
- "pm2:start": "pm2 start ecosystem.config.js",
11
- "pm2:stop": "pm2 stop authenik8-app",
12
- "pm2:logs": "pm2 logs",
13
9
  "start": "node dist/server.js",
14
- "prisma:generate": "prisma generate",
15
10
  "prisma:migrate": "prisma migrate dev"
16
11
  },
17
12
  "dependencies": {
18
13
  "authenik8-core": "^1.0.3",
19
- "express": "^4.19.2"
14
+ "express": "^4.19.2",
15
+ "@prisma/client": "5.22.0"
20
16
  },
21
17
  "devDependencies": {
22
18
  "@types/express": "^4.17.21",
23
19
  "@types/node": "^20.0.0",
24
20
  "ts-node-dev": "^2.0.0",
25
- "typescript": "^5.0.0"
21
+ "typescript": "^5.0.0",
22
+ "prisma": "5.22.0"
26
23
  }
27
24
  }
@@ -1,27 +1,24 @@
1
1
  {
2
2
  "name": "authenik8-app",
3
- "version": "1.0.6",
4
3
  "description": "Authenik8 generated Express auth app",
5
4
  "main": "dist/server.js",
6
5
  "type": "commonjs",
7
6
  "scripts": {
8
7
  "dev": "ts-node-dev --respawn --transpile-only src/server.ts",
9
8
  "build": "tsc",
10
- "pm2:start": "pm2 start ecosystem.config.js",
11
- "pm2:stop": "pm2 stop authenik8-app",
12
- "pm2:logs": "pm2 logs",
13
9
  "start": "node dist/server.js",
14
- "prisma:generate": "prisma generate",
15
10
  "prisma:migrate": "prisma migrate dev"
16
11
  },
17
12
  "dependencies": {
18
13
  "authenik8-core": "^1.0.3",
19
- "express": "^4.19.2"
14
+ "express": "^4.19.2",
15
+ "@prisma/client": "5.22.0"
20
16
  },
21
17
  "devDependencies": {
22
18
  "@types/express": "^4.17.21",
23
19
  "@types/node": "^20.0.0",
24
20
  "ts-node-dev": "^2.0.0",
25
- "typescript": "^5.0.0"
21
+ "typescript": "^5.0.0",
22
+ "prisma": "5.22.0"
26
23
  }
27
24
  }
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "authenik8-app",
3
- "version": "1.0.5",
4
3
  "scripts": {
5
4
  "dev": "ts-node-dev --respawn --transpile-only ./src/server.ts",
6
- "pm2:start": "pm2 start ecosystem.config.js",
7
- "pm2:stop": "pm2 stop authenik8-app",
8
- "pm2:logs": "pm2 logs",
9
5
  "build": "tsc",
10
- "start": "node dist/server.js"
6
+ "start": "node dist/server.js",
7
+ "prisma:migrate": "prisma migrate"
11
8
  },
12
9
  "dependencies": {
13
10
  "authenik8-core": "^1.0.3",
14
11
  "dotenv": "^16.0.0",
15
- "express": "^4.18.2"
12
+ "express": "^4.18.2",
13
+ "@prisma/client": "5.22.0"
16
14
  },
17
15
  "devDependencies": {
18
16
  "ts-node-dev": "^2.0.0",
19
- "typescript": "^5.0.0"
17
+ "typescript": "^5.0.0",
18
+ "prisma": "5.22.0"
19
+
20
20
  },
21
21
  "type": "commonjs"
22
22
  }