create-authenik8-app 2.0.5 → 2.0.7

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 @@
13
13
  <p align="center">
14
14
  <img src="./assets/giffy-ezgif.com-video-to-gif-converter.gif" width="600" />
15
15
  </p>
16
+
16
17
  ---
17
18
 
18
19
  ## Usage
package/dist/bin/index.js CHANGED
@@ -9,28 +9,7 @@ import { execSync } from "child_process";
9
9
  import { fileURLToPath } from "url";
10
10
  import { spawnSync } from "child_process";
11
11
  import os from "os";
12
- function step(name, fn) {
13
- return { name, fn };
14
- }
15
- let state = {};
16
12
  let answers = {};
17
- const stateFile = (project) => path.join(process.cwd(), project, ".authenik8-state.json");
18
- function saveState(project, state) {
19
- fs.ensureDirSync(path.join(process.cwd(), project));
20
- fs.writeJsonSync(stateFile(project), state, { spaces: 2 });
21
- }
22
- function loadState(project) {
23
- const file = stateFile(project);
24
- if (!fs.existsSync(file))
25
- return null;
26
- return fs.readJsonSync(file);
27
- }
28
- function clearState(project) {
29
- const file = stateFile(project);
30
- if (fs.existsSync(file))
31
- fs.removeSync(file);
32
- }
33
- const isResume = process.argv.includes("--resume");
34
13
  const platform = os.platform();
35
14
  // 'linux' | 'darwin' | 'win32'
36
15
  const isTermux = process.env.PREFIX?.includes("com.termux") ||
@@ -49,28 +28,17 @@ function getBestHashLib() {
49
28
  // but still fallback later if needed
50
29
  return "bcryptjs";
51
30
  }
52
- function createSaver(projectName, ctx) {
53
- return (step, extra) => {
54
- saveState(projectName, {
55
- step,
56
- projectName,
57
- ...ctx.state,
58
- ...ctx.answers,
59
- ...extra,
60
- });
61
- };
62
- }
63
31
  function generateHashModule(hashLib) {
64
32
  if (hashLib === "argon2") {
65
33
  return `
66
34
  import argon2 from "argon2";
67
35
 
68
36
  export const hashPassword = (password: string) => {
69
- return argon2.hash(password);
37
+ return argon2.hash(password);
70
38
  };
71
39
 
72
40
  export const comparePassword = (password: string, hash: string) => {
73
- return argon2.verify(hash, password);
41
+ return argon2.verify(hash, password);
74
42
  };
75
43
  `;
76
44
  }
@@ -78,11 +46,11 @@ export const comparePassword = (password: string, hash: string) => {
78
46
  import bcrypt from "bcryptjs";
79
47
 
80
48
  export const hashPassword = (password: string) => {
81
- return bcrypt.hash(password, 10);
49
+ return bcrypt.hash(password, 10);
82
50
  };
83
51
 
84
52
  export const comparePassword = (password: string, hash: string) => {
85
- return bcrypt.compare(password, hash);
53
+ return bcrypt.compare(password, hash);
86
54
  };
87
55
  `;
88
56
  }
@@ -94,97 +62,128 @@ if (!projectName) {
94
62
  process.exit(1);
95
63
  }
96
64
  const isProduction = process.argv.includes("--production-ready");
65
+ const isResume = process.argv.includes("--resume");
97
66
  const targetDir = path.join(process.cwd(), projectName);
98
67
  let projectCreated = false;
99
- const exists = fs.existsSync(targetDir);
100
- if (isResume) {
68
+ const stepOrder = [
69
+ "start",
70
+ "prompts",
71
+ "project-created",
72
+ "auth-installed",
73
+ "prisma-configured",
74
+ "deps-installed",
75
+ "prisma-generated",
76
+ "production-configured",
77
+ "git-initialized",
78
+ "done",
79
+ ];
80
+ const stateFile = path.join(targetDir, ".authenik8-state.json");
81
+ function hasReachedStep(currentStep, targetStep) {
82
+ return stepOrder.indexOf(currentStep) >= stepOrder.indexOf(targetStep);
83
+ }
84
+ function saveState(step, extra = {}) {
85
+ fs.ensureDirSync(targetDir);
86
+ fs.writeJsonSync(stateFile, {
87
+ step,
88
+ projectName,
89
+ ...answers,
90
+ ...extra,
91
+ }, { spaces: 2 });
92
+ }
93
+ function loadState() {
94
+ if (!fs.existsSync(stateFile))
95
+ return null;
96
+ return fs.readJsonSync(stateFile);
101
97
  }
102
- if (exists && !isResume) {
103
- const { action } = await inquirer.prompt([
104
- {
105
- type: "list",
106
- name: "action",
107
- message: `Folder "${projectName}" already exists. What do you want to do?`,
108
- choices: [
109
- { name: "Resume setup", value: "resume" },
110
- { name: "Overwrite", value: "overwrite" },
111
- { name: "Cancel", value: "cancel" },
112
- ],
113
- },
114
- ]);
115
- if (action === "resume") {
116
- // trigger resume logic
98
+ function clearState() {
99
+ if (fs.existsSync(stateFile)) {
100
+ fs.removeSync(stateFile);
117
101
  }
118
- if (action === "overwrite") {
119
- await fs.remove(targetDir);
102
+ }
103
+ function isInterruptedError(err) {
104
+ return (typeof err === "object" &&
105
+ err !== null &&
106
+ "signal" in err &&
107
+ (err.signal === "SIGINT" ||
108
+ err.signal === "SIGTERM"));
109
+ }
110
+ function exitForInterrupt(err) {
111
+ if (isInterruptedError(err)) {
112
+ throw err;
120
113
  }
121
- if (action === "cancel") {
122
- process.exit(0);
114
+ console.error(err);
115
+ process.exit(1);
116
+ }
117
+ async function cleanupIncompleteProject() {
118
+ if (projectCreated && fs.existsSync(targetDir)) {
119
+ await fs.remove(targetDir);
120
+ console.log("🧹 Cleaned up incomplete project.");
123
121
  }
124
122
  }
125
123
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
126
124
  const cleanLogo = `
127
125
 
128
- █████╗ █████╗
126
+ █████╗ █████╗
129
127
  ██╔══██╗ ██╔══██╗
130
128
  ███████║ ╚█████╔╝
131
129
  ██╔══██║ ██╔══██╗
132
130
  ██║ ██║ ╚█████╔╝
133
131
  ╚═╝ ╚═╝ ╚════╝
134
132
 
135
- A8
133
+ A8
134
+
136
135
  Authenik8 CLI
137
- Build Faster
138
- More , Secure
136
+ Build Faster
137
+ More , Secure
139
138
  `;
140
139
  const glitchFrames = [
141
- `
142
- █████╗ █████╗
143
- ██╔══██╗ ██▒▒▒▒██
144
- ███████║ ╚█████╔╝
145
- ██╔══██║ ██▒▒▒▒██
146
- ██║ ██║ ╚█████╔╝
147
- ╚═╝ ╚═╝ ╚════╝
140
+ `
141
+ █████╗ █████╗
142
+ ██╔══██╗ ██▒▒▒▒██
143
+ ███████║ ╚█████╔╝
144
+ ██╔══██║ ██▒▒▒▒██
145
+ ██║ ██║ ╚█████╔╝
146
+ ╚═╝ ╚═╝ ╚════╝
148
147
 
149
- A8
150
- Authenik8 CLI
148
+ A8
149
+ Authenik8 CLI
151
150
 
152
- More
151
+ More
153
152
  `,
154
153
  `
155
- ██▓▓██╗ ██▓▓██╗
156
- ██▒▒██╔╝ ██▒▒██╔╝
157
- ██▒▒▒▒██ ╚█████╔╝
158
- ██▓▓██╔╝ ██▒▒██╗
159
- ██▒▒██║ ╚█████╔╝
160
- ╚═════╝ ╚════╝
161
-
162
- A8
163
- Authenik8 CLI
164
- Faster
154
+ ██▓▓██╗ ██▓▓██╗
155
+ ██▒▒██╔╝ ██▒▒██╔╝
156
+ ██▒▒▒▒██ ╚█████╔╝
157
+ ██▓▓██╔╝ ██▒▒██╗
158
+ ██▒▒██║ ╚█████╔╝
159
+ ╚═════╝ ╚════╝
160
+
161
+ A8
162
+ Authenik8 CLI
163
+ Faster
165
164
  `,
166
165
  `
167
- ██▒▒██╗ ██▒▒██╗
168
- ██▓▓██╔╝ ██▓▓██╔╝
169
- ██▒▒▒▒██ ╚█████╔╝
170
- ██▓▓██╔╝ ██▓▓██╗
171
- ██▒▒██║ ╚█████╔╝
172
- ╚═════╝ ╚════╝
173
-
174
- A8
175
- Authenik8 CLI
176
- Build
166
+ ██▒▒██╗ ██▒▒██╗
167
+ ██▓▓██╔╝ ██▓▓██╔╝
168
+ ██▒▒▒▒██ ╚█████╔╝
169
+ ██▓▓██╔╝ ██▓▓██╗
170
+ ██▒▒██║ ╚█████╔╝
171
+ ╚═════╝ ╚════╝
172
+
173
+ A8
174
+ Authenik8 CLI
175
+ Build
177
176
  `,
178
177
  `
179
- ██▓▓██╗ ██▓▓██╗
180
- ██▒▒██╔╝ ██▒▒██╔╝
181
- ██▒▒▒▒██ ╚█████╔╝
182
- ██▓▓██╔╝ ██▒▒██╗
183
- ██▒▒██║ ╚█████╔╝
184
- ╚═════╝ ╚════╝
178
+ ██▓▓██╗ ██▓▓██╗
179
+ ██▒▒██╔╝ ██▒▒██╔╝
180
+ ██▒▒▒▒██ ╚█████╔╝
181
+ ██▓▓██╔╝ ██▒▒██╗
182
+ ██▒▒██║ ╚█████╔╝
183
+ ╚═════╝ ╚════╝
185
184
 
186
- A8
187
- Authenik8 CLI
185
+ A8
186
+ Authenik8 CLI
188
187
 
189
188
  `
190
189
  ];
@@ -217,246 +216,323 @@ async function showBootLogo() {
217
216
  await sleep(800);
218
217
  boot.succeed("Engine ready");
219
218
  }
220
- //const isResume = process.argv.includes("--resume");
221
219
  async function main() {
222
- await showBootLogo();
223
- if (process.argv.includes("--help")) {
224
- console.log(`
220
+ process.on("SIGINT", async () => {
221
+ console.log("\n👋 Authenik8 setup cancelled.");
222
+ await cleanupIncompleteProject();
223
+ process.exit(0);
224
+ });
225
+ try {
226
+ await showBootLogo();
227
+ if (process.argv.includes("--help")) {
228
+ console.log(`
225
229
  Authenik8 CLI
226
230
 
227
231
  Usage:
228
- create-authenik8-app <project-name>
232
+ create-authenik8-app <project-name>
229
233
 
230
234
  Options:
231
- --resume Resume project setup(in development)
232
- --help Show this help message
233
- --production-ready production mode
235
+ --resume Resume project setup(in development)
236
+ --help Show this help message
237
+ --production-ready production mode
234
238
  Features:
235
- - Express backend (default)
236
- - Optional Prisma ORM
237
- - PostgreSQL (production)
238
- - SQLite (quick start)
239
- - Optional Git initialization
240
- - Optional OAuth
239
+
240
+ Express backend (default)
241
+
242
+ Optional Prisma ORM
243
+
244
+ PostgreSQL (production)
245
+
246
+ SQLite (quick start)
247
+
248
+ Optional Git initialization
249
+
250
+ Optional OAuth
251
+
241
252
 
242
253
  Examples:
243
- create-authenik8-app my-app
254
+ create-authenik8-app my-app
244
255
  `);
245
- process.exit(0);
246
- }
247
- console.log(chalk.gray(`
256
+ process.exit(0);
257
+ }
258
+ console.log(chalk.gray(`
248
259
  Available options:
249
- Authentication setup:
250
- • base (JWT only)
251
- • auth (JWT + Password/Email auth)
252
- • auth-oauth(JWT+ Password/Email + oauth)
253
-
254
- Frameworks:
255
- • Express
256
- • Fastify(coming soon)
257
-
258
- Database (if Prisma enabled):
259
- • PostgreSQL
260
- • SQLite (quick start)
261
-
262
- Features:
263
- • Prisma ORM (optional)
264
- • Git initialization (optional)
265
- • OAuth + Auth
260
+ Authentication setup:
261
+ • base (JWT only)
262
+ • auth (JWT + Password/Email auth)
263
+ • auth-oauth(JWT+ Password/Email + oauth)
264
+
265
+ Frameworks:
266
+ • Express
267
+ • Fastify(coming soon)
268
+
269
+ Database (if Prisma enabled):
270
+ • PostgreSQL
271
+ • SQLite (quick start)
272
+
273
+ Features:
274
+ • Prisma ORM (optional)
275
+ • Git initialization (optional)
276
+ • OAuth + Auth
266
277
  `));
267
- answers = await inquirer.prompt([
268
- {
269
- type: "list",
270
- name: "framework",
271
- message: "Choose framework:",
272
- choices: ["Express", "Fastify (coming soon)"],
273
- default: state.framework ?? "Express",
274
- },
275
- {
276
- type: "confirm",
277
- name: "usePrisma",
278
- message: "Use Prisma?",
279
- default: state.usePrisma ?? true,
280
- },
281
- {
282
- type: "list",
283
- name: "database",
284
- message: "Choose database:",
285
- choices: [
286
- { name: "PostgreSQL", value: "postgresql(recommended for auth)" },
287
- { name: "SQLite (quick start, limited features)", value: "sqlite" }
288
- ],
289
- when: (answers) => answers.usePrisma,
290
- default: state.database ?? "sqlite",
291
- },
292
- {
293
- type: "confirm",
294
- name: "useGit",
295
- message: "Initialize git?",
296
- default: state.useGit ?? true,
297
- }, {
298
- type: "list",
299
- name: "authMode",
300
- message: "Choose authentication setup:",
301
- choices: [
302
- { name: "JWT only (no auth routes)", value: "base" },
303
- { name: "Email + Password Auth", value: "auth" },
304
- { name: "Full Auth (Password + OAuth)", value: "auth-oauth" },
305
- ],
306
- default: state.authMode ?? "base"
307
- }
308
- ]);
309
- function assertRequired(value, name) {
310
- if (value === undefined || value === null || value === "") {
311
- console.log(`❌ Missing required input: ${name}`);
278
+ const savedState = loadState();
279
+ let currentStep = "start";
280
+ if (!isResume && fs.existsSync(targetDir)) {
281
+ if (savedState) {
282
+ console.log(chalk.red(`❌ "${projectName}" already contains an incomplete Authenik8 setup. Run again with --resume.`));
283
+ }
284
+ else {
285
+ console.log(chalk.red(`❌ Directory "${projectName}" already exists.`));
286
+ }
312
287
  process.exit(1);
313
288
  }
314
- }
315
- const finalConfig = {
316
- ...state,
317
- ...answers,
318
- };
319
- assertRequired(finalConfig.framework, "framework");
320
- assertRequired(finalConfig.authMode, "authMode");
321
- if (finalConfig.usePrisma && !finalConfig.database) {
322
- finalConfig.database = "sqlite";
323
- }
324
- if (finalConfig.usePrisma) {
325
- assertRequired(finalConfig.database, "database");
326
- }
327
- if (finalConfig.usePrisma && !answers.database && !state.database) {
328
- console.log(chalk.gray("ℹ️ Defaulting to SQLite (quick start)"));
329
- }
330
- if (!answers.authMode || !answers.framework) {
331
- console.log("❌ Invalid setup state. Restart CLI.");
332
- process.exit(1);
333
- }
334
- console.log(chalk.cyan("\n⚙️ Setting things up...\n"));
335
- const templateRoot = path.resolve(__dirname, "../../templates");
336
- let templateName = "express-base";
337
- if (answers.authMode === "auth") {
338
- templateName = "express-auth";
339
- }
340
- if (answers.authMode === "auth-oauth") {
341
- templateName = "express-auth+";
342
- }
343
- const templatePath = path.join(templateRoot, templateName);
344
- // 📁 Create project (SPINNER)
345
- const createSpinner = ora("Creating project structure...").start();
346
- try {
347
- await fs.copy(templatePath, targetDir);
348
- projectCreated = true;
349
- createSpinner.succeed("Project files created");
350
- }
351
- catch (err) {
352
- createSpinner.fail("Failed to create project");
353
- console.error(err);
354
- process.exit(1);
355
- }
356
- let selectedHash = "bcryptjs"; // default safe fallback
357
- if (answers.authMode !== "base") {
358
- const authSpinner = ora("Installing password auth...").start();
359
- selectedHash = getBestHashLib();
360
- try {
361
- spawnSync("npm", ["install", selectedHash], {
362
- cwd: targetDir,
363
- stdio: "ignore"
364
- });
365
- authSpinner.succeed(`Password auth ready ${selectedHash}`);
289
+ if (isResume) {
290
+ if (!savedState) {
291
+ console.log(chalk.red(`❌ No saved setup state found for "${projectName}".`));
292
+ process.exit(1);
293
+ }
294
+ answers = {
295
+ framework: savedState.framework,
296
+ usePrisma: savedState.usePrisma,
297
+ database: savedState.database,
298
+ useGit: savedState.useGit,
299
+ authMode: savedState.authMode,
300
+ };
301
+ currentStep = savedState.step;
302
+ console.log(chalk.yellow(`\n↻ Resuming setup for ${projectName} from "${currentStep}"...\n`));
303
+ }
304
+ else {
305
+ answers = await inquirer.prompt([
306
+ {
307
+ type: "list",
308
+ name: "framework",
309
+ message: "Choose framework:",
310
+ choices: ["Express", "Fastify (coming soon)"],
311
+ default: "Express",
312
+ },
313
+ {
314
+ type: "confirm",
315
+ name: "usePrisma",
316
+ message: "Use Prisma?",
317
+ default: true,
318
+ },
319
+ {
320
+ type: "list",
321
+ name: "database",
322
+ message: "Choose database:",
323
+ choices: [
324
+ { name: "PostgreSQL", value: "postgresql" },
325
+ { name: "SQLite ", value: "sqlite" }
326
+ ],
327
+ when: (answers) => answers.usePrisma,
328
+ default: "sqlite",
329
+ },
330
+ {
331
+ type: "confirm",
332
+ name: "useGit",
333
+ message: "Initialize git?",
334
+ default: true,
335
+ }, {
336
+ type: "list",
337
+ name: "authMode",
338
+ message: "Choose authentication setup:",
339
+ choices: [
340
+ { name: "JWT only", value: "base" },
341
+ { name: "Email + Password Auth", value: "auth" },
342
+ { name: "Full Auth (Password + OAuth)", value: "auth-oauth" },
343
+ ],
344
+ default: "base"
345
+ }
346
+ ]);
347
+ saveState("prompts");
348
+ currentStep = "prompts";
366
349
  }
367
- catch (err) {
368
- if (selectedHash !== "bcryptjs") {
369
- authSpinner.warn(`${selectedHash} failed, falling back to bcryptjs`);
370
- spawnSync("npm", ["install", "bcryptjs"], {
350
+ function assertRequired(value, name) {
351
+ if (value === undefined || value === null || value === "") {
352
+ console.log(`❌ Missing required input: ${name}`);
353
+ process.exit(1);
354
+ }
355
+ }
356
+ assertRequired(answers.framework, "framework");
357
+ assertRequired(answers.authMode, "authMode");
358
+ if (answers.usePrisma) {
359
+ if (!answers.database) {
360
+ answers.database = "sqlite";
361
+ }
362
+ assertRequired(answers.database, "database");
363
+ }
364
+ console.log(chalk.cyan("\n⚙️ Setting things up...\n"));
365
+ const templateRoot = path.resolve(__dirname, "../../templates");
366
+ let templateName = "express-base";
367
+ if (answers.authMode === "auth") {
368
+ templateName = "express-auth";
369
+ }
370
+ if (answers.authMode === "auth-oauth") {
371
+ templateName = "express-auth+";
372
+ }
373
+ const templatePath = path.join(templateRoot, templateName);
374
+ // 📁 Create project (SPINNER)
375
+ if (!hasReachedStep(currentStep, "project-created")) {
376
+ const createSpinner = ora("Creating project structure...").start();
377
+ try {
378
+ await fs.copy(templatePath, targetDir);
379
+ projectCreated = true;
380
+ createSpinner.succeed("Project files created");
381
+ saveState("project-created");
382
+ currentStep = "project-created";
383
+ }
384
+ catch (err) {
385
+ createSpinner.fail("Failed to create project");
386
+ console.error(err);
387
+ process.exit(1);
388
+ }
389
+ }
390
+ else {
391
+ console.log(chalk.gray("↷ Skipping project creation (already completed)"));
392
+ }
393
+ let selectedHash = "bcryptjs"; // default safe fallback
394
+ if (!hasReachedStep(currentStep, "auth-installed")) {
395
+ if (answers.authMode !== "base") {
396
+ const authSpinner = ora("Installing password auth...").start();
397
+ selectedHash = getBestHashLib();
398
+ const installResult = spawnSync("npm", ["install", selectedHash], {
371
399
  cwd: targetDir,
372
- stdio: "ignore",
400
+ stdio: "ignore"
373
401
  });
374
- selectedHash = "bcryptjs";
375
- authSpinner.succeed("Password auth ready (bcryptjs fallback)");
402
+ if (!installResult.error && installResult.status === 0) {
403
+ authSpinner.succeed(`Password auth ready ${selectedHash}`);
404
+ }
405
+ else {
406
+ if (selectedHash !== "bcryptjs") {
407
+ authSpinner.warn(`${selectedHash} failed, falling back to bcryptjs`);
408
+ const fallbackResult = spawnSync("npm", ["install", "bcryptjs"], {
409
+ cwd: targetDir,
410
+ stdio: "ignore",
411
+ });
412
+ if (!fallbackResult.error && fallbackResult.status === 0) {
413
+ selectedHash = "bcryptjs";
414
+ authSpinner.succeed("Password auth ready (bcryptjs fallback)");
415
+ }
416
+ else {
417
+ authSpinner.fail("Failed to install password auth");
418
+ process.exit(1);
419
+ }
420
+ }
421
+ else {
422
+ authSpinner.fail("Failed to install password auth");
423
+ process.exit(1);
424
+ }
425
+ }
376
426
  }
377
- else {
378
- authSpinner.fail("Failed to install password auth");
379
- process.exit(1);
427
+ if (answers.authMode !== "base") {
428
+ const hashLib = selectedHash;
429
+ await fs.writeFile(path.join(targetDir, "src/utils/hash.ts"), generateHashModule(hashLib));
430
+ //const deps = [];
431
+ //if (hashLib === "argon2") deps.push("argon2");
432
+ //if (hashLib === "bcryptjs") deps.push("bcryptjs");
433
+ //if (deps.length) {
434
+ //execSync(`npm install ${deps.join(" ")}`, {
435
+ //cwd: targetDir,
436
+ //stdio: "ignore",
437
+ //});
438
+ //};
380
439
  }
440
+ saveState("auth-installed", answers.authMode !== "base" ? { hashLib: selectedHash } : {});
441
+ currentStep = "auth-installed";
381
442
  }
382
- }
383
- const hashLib = getBestHashLib(); // or CLI decision
384
- await fs.writeFile(path.join(targetDir, "src/utils/hash.ts"), generateHashModule(hashLib));
385
- const deps = [];
386
- if (hashLib === "argon2")
387
- deps.push("argon2");
388
- if (hashLib === "bcryptjs")
389
- deps.push("bcryptjs");
390
- if (deps.length) {
391
- execSync(`npm install ${deps.join(" ")}`, {
392
- cwd: targetDir,
393
- stdio: "ignore",
394
- });
395
- }
396
- ;
397
- if (answers.usePrisma) {
398
- const prismaSpinner = ora("Adding Prisma setup...").start();
399
- try {
400
- const dbType = answers.database ===
401
- "postgresql" ? "postgresql"
402
- : "sqlite";
403
- const prismaTemplatePath = path.join(templateRoot, `prisma/${dbType}`);
404
- // Copy prisma schema
405
- await fs.copy(path.join(prismaTemplatePath, "schema.prisma"), path.join(targetDir, "prisma/schema.prisma"));
406
- // Copy env
407
- await fs.copy(path.join(prismaTemplatePath, ".env"), path.join(targetDir, ".env"));
443
+ else {
444
+ selectedHash = savedState?.hashLib ?? selectedHash;
445
+ console.log(chalk.gray(" Skipping auth setup (already completed)"));
446
+ }
447
+ if (!hasReachedStep(currentStep, "prisma-configured")) {
408
448
  const pkgPath = path.join(targetDir, "package.json");
409
449
  const pkg = await fs.readJson(pkgPath);
410
- await fs.writeJson(pkgPath, pkg, { spaces: 2 });
411
- // Inject dependencies
412
450
  pkg.dependencies = {
413
451
  ...pkg.dependencies,
414
- "@prisma/client": "5.22.0",
452
+ ioredis: "^5.8.1",
415
453
  };
416
- pkg.devDependencies = {
417
- ...pkg.devDependencies,
418
- prisma: "5.22.0",
419
- };
420
- // Add scripts
421
- pkg.scripts = {
422
- ...pkg.scripts,
423
- "prisma:generate": "prisma generate",
424
- "prisma:migrate": "prisma migrate dev",
425
- };
426
- prismaSpinner.succeed(`Prisma (${dbType}) configured`);
427
- }
428
- catch (err) {
429
- prismaSpinner.fail("Failed to setup Prisma");
430
- console.error(err);
431
- }
432
- const installSpinner = ora("Installing dependencies...(this may take a few minutes)").start();
433
- try {
434
- execSync("npm install", {
435
- cwd: targetDir,
436
- stdio: "ignore",
437
- });
438
- installSpinner.succeed("Dependencies installed");
454
+ if (answers.usePrisma) {
455
+ const prismaSpinner = ora("Adding Prisma setup...").start();
456
+ try {
457
+ const dbType = answers.database ===
458
+ "postgresql" ? "postgresql"
459
+ : "sqlite";
460
+ const prismaTemplatePath = path.join(templateRoot, `prisma/${dbType}`);
461
+ // Copy prisma schema
462
+ await fs.copy(path.join(prismaTemplatePath, "schema.prisma"), path.join(targetDir, "prisma/schema.prisma"));
463
+ // Copy env
464
+ await fs.copy(path.join(prismaTemplatePath, ".env"), path.join(targetDir, ".env"));
465
+ // Inject dependencies
466
+ pkg.dependencies = {
467
+ ...pkg.dependencies,
468
+ "@prisma/client": "5.22.0",
469
+ };
470
+ pkg.devDependencies = {
471
+ ...pkg.devDependencies,
472
+ prisma: "5.22.0",
473
+ };
474
+ // Add scripts
475
+ pkg.scripts = {
476
+ ...pkg.scripts,
477
+ "prisma:generate": "prisma generate",
478
+ "prisma:migrate": "prisma migrate dev",
479
+ };
480
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
481
+ prismaSpinner.succeed(`Prisma (${dbType}) configured`);
482
+ }
483
+ catch (err) {
484
+ prismaSpinner.fail("Failed to setup Prisma");
485
+ exitForInterrupt(err);
486
+ }
487
+ }
488
+ await fs.writeJson(pkgPath, pkg, { spaces: 2 });
489
+ saveState("prisma-configured", answers.authMode !== "base" ? { hashLib: selectedHash } : {});
490
+ currentStep = "prisma-configured";
439
491
  }
440
- catch (err) {
441
- installSpinner.fail("Failed to install dependencies");
442
- console.error(err);
443
- process.exit(1);
492
+ else {
493
+ console.log(chalk.gray(" Skipping Prisma/package setup (already completed)"));
444
494
  }
445
- if (answers.usePrisma) {
446
- const prismaGenSpinner = ora("Generating Prisma client...").start();
495
+ if (!hasReachedStep(currentStep, "deps-installed")) {
496
+ const installSpinner = ora("Installing dependencies...(this may take a few minutes)").start();
447
497
  try {
448
- execSync("npx prisma@5.22.0 generate", {
498
+ execSync("npm install", {
449
499
  cwd: targetDir,
450
- stdio: "ignore"
500
+ stdio: "ignore",
451
501
  });
452
- prismaGenSpinner.succeed("Prisma client generated");
502
+ installSpinner.succeed("Dependencies installed");
453
503
  }
454
504
  catch (err) {
455
- prismaGenSpinner.fail("Failed to generate Prisma client");
456
- console.error(err);
505
+ installSpinner.fail("Failed to install dependencies");
506
+ exitForInterrupt(err);
457
507
  }
508
+ saveState("deps-installed", answers.authMode !== "base" ? { hashLib: selectedHash } : {});
509
+ currentStep = "deps-installed";
458
510
  }
459
- if (isProduction) {
511
+ else {
512
+ console.log(chalk.gray("↷ Skipping dependency install (already completed)"));
513
+ }
514
+ if (!hasReachedStep(currentStep, "prisma-generated")) {
515
+ if (answers.usePrisma) {
516
+ const prismaGenSpinner = ora("Generating Prisma client...").start();
517
+ try {
518
+ execSync("npx prisma@5.22.0 generate", {
519
+ cwd: targetDir,
520
+ stdio: "ignore"
521
+ });
522
+ prismaGenSpinner.succeed("Prisma client generated");
523
+ }
524
+ catch (err) {
525
+ prismaGenSpinner.fail("Failed to generate Prisma client");
526
+ exitForInterrupt(err);
527
+ }
528
+ }
529
+ saveState("prisma-generated", answers.authMode !== "base" ? { hashLib: selectedHash } : {});
530
+ currentStep = "prisma-generated";
531
+ }
532
+ else {
533
+ console.log(chalk.gray("↷ Skipping Prisma client generation (already completed)"));
534
+ }
535
+ if (isProduction && !hasReachedStep(currentStep, "production-configured")) {
460
536
  const pm2Spinner = ora("Setting up production mode (PM2)...").start();
461
537
  try {
462
538
  execSync("npm install pm2", {
@@ -467,77 +543,88 @@ Available options:
467
543
  }
468
544
  catch (err) {
469
545
  pm2Spinner.fail("Failed to install PM2");
546
+ exitForInterrupt(err);
470
547
  }
548
+ saveState("production-configured", answers.authMode !== "base" ? { hashLib: selectedHash } : {});
549
+ currentStep = "production-configured";
471
550
  }
472
- }
473
- if (answers.useGit) {
474
- const gitSpinner = ora("Initializing git...").start();
475
- try {
476
- execSync("git init", {
477
- cwd: targetDir,
478
- stdio: "ignore",
479
- });
480
- gitSpinner.succeed("Git initialized");
551
+ if (!hasReachedStep(currentStep, "git-initialized")) {
552
+ if (answers.useGit) {
553
+ const gitSpinner = ora("Initializing git...").start();
554
+ try {
555
+ execSync("git init", {
556
+ cwd: targetDir,
557
+ stdio: "ignore",
558
+ });
559
+ gitSpinner.succeed("Git initialized");
560
+ }
561
+ catch (err) {
562
+ gitSpinner.fail("Git init failed");
563
+ }
564
+ }
565
+ saveState("git-initialized", answers.authMode !== "base" ? { hashLib: selectedHash } : {});
566
+ currentStep = "git-initialized";
481
567
  }
482
- catch (err) {
483
- gitSpinner.fail("Git init failed");
568
+ else {
569
+ console.log(chalk.gray(" Skipping git init (already completed)"));
484
570
  }
485
- }
486
- console.log(chalk.green.bold("\n🎉 Authenik8 app created successfully!\n"));
487
- if (isProduction) {
488
- fs.appendFileSync(path.join(targetDir, "README.md"), `
571
+ console.log(chalk.green.bold("\n🎉 Authenik8 app created successfully!\n"));
572
+ if (isProduction) {
573
+ fs.appendFileSync(path.join(targetDir, "README.md"), `
489
574
 
490
- ## 🚀 Production Mode
575
+ 🚀 Production Mode
491
576
 
492
577
  This project is configured for production using PM2.
493
578
 
494
- ### Start app in cluster mode:
579
+ Start app in cluster mode:
580
+
495
581
  npm run pm2:start
496
582
 
497
- ### View logs:
583
+ View logs:
584
+
498
585
  npm run pm2:logs
499
586
 
500
- ### Stop app:
587
+ Stop app:
588
+
501
589
  npm run pm2:stop
502
590
 
503
- `);
504
- }
505
- console.log(chalk.white(`
591
+ `);
592
+ }
593
+ console.log(chalk.white(`
506
594
  Next steps:
507
595
 
508
- cd ${projectName}
509
- redis-server --daemonize yes
510
- npm run dev
596
+ cd ${projectName}
597
+ redis-server --daemonize yes
598
+ npm run dev
511
599
 
512
- Auth Features:
513
- ${answers.authMode === "base"
514
- ? "✓ JWT only"
515
- : answers.authMode === "auth"
516
- ? "✓ Email + Password"
517
- : "✓ Password + OAuth (Google/GitHub)"}
518
-
600
+ Auth Features:
601
+ ${answers.authMode === "base"
602
+ ? "✓ JWT only"
603
+ : answers.authMode === "auth"
604
+ ? "✓ Email + Password"
605
+ : "✓ Password + OAuth (Google/GitHub)"}
519
606
 
520
607
  🛠 Stack:
521
- ✔ Express
522
- ✔ ${answers.usePrisma ? (answers.database.includes("postgresql") ? "PostgreSQL" : "SQLite") : "No database"}
523
- ✔ ${answers.usePrisma ? "Prisma ORM" : "No ORM"}
608
+ ✔ Express
609
+ ✔ ${answers.usePrisma ? (answers.database === "postgresql" ? "PostgreSQL" : "SQLite") : "No database"}
610
+ ✔ ${answers.usePrisma ? "Prisma ORM" : "No ORM"}
524
611
 
525
- 📡 Endpoints:
612
+ 📡 API Routes:
526
613
  ${answers.authMode === "base"
527
- ? `
614
+ ? `
528
615
  GET /public
529
616
  GET /guest
530
617
  GET /protected
531
618
  POST /refresh
532
619
  `
533
- : answers.authMode === "auth"
534
- ? `
620
+ : answers.authMode === "auth"
621
+ ? `
535
622
  POST /auth/register
536
623
  POST /auth/login
537
624
  POST /auth/refresh
538
625
  GET /protected
539
626
  `
540
- : `
627
+ : `
541
628
  POST /auth/register
542
629
  POST /auth/login
543
630
  POST /auth/refresh
@@ -546,11 +633,10 @@ ${answers.authMode === "base"
546
633
  GET /protected
547
634
  `}
548
635
 
549
-
550
636
  🔥 You're ready to build.
551
- `));
552
- if (isProduction) {
553
- console.log(`
637
+ `));
638
+ if (isProduction) {
639
+ console.log(`
554
640
  🚀 Production Ready Enabled:
555
641
 
556
642
  ✔ PM2 installed
@@ -558,18 +644,25 @@ ${answers.authMode === "base"
558
644
  ✔ Memory auto-restart (300MB)
559
645
 
560
646
  Run:
561
- npm run pm2:start
647
+ npm run pm2:start
562
648
  `);
649
+ }
650
+ saveState("done", answers.authMode !== "base" ? { hashLib: selectedHash } : {});
651
+ clearState();
652
+ }
653
+ catch (err) {
654
+ console.error("Fatal error", err);
655
+ process.exit(1);
563
656
  }
564
657
  }
565
658
  main().catch(async (err) => {
566
659
  if (err instanceof ExitPromptError) {
567
660
  console.log("\n👋 Authenik8 setup cancelled.");
568
- if (projectCreated && fs.existsSync(targetDir)) {
569
- await fs.remove(targetDir);
570
- console.log("🧹 Cleaned up incomplete project.");
571
- }
661
+ await cleanupIncompleteProject();
572
662
  process.exit(0);
573
663
  }
664
+ console.error(chalk.red("\n❌ Unexpected error:"), err);
665
+ await cleanupIncompleteProject();
666
+ process.exit(1);
574
667
  });
575
668
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-authenik8-app",
3
- "version": "2.0.5",
4
- "description": "Create production-ready backend APIs in seconds. Authenik8 scaffolds Express + Prisma projects with JWT authentication, database setup (PostgreSQL or SQLite), and scalable architecture out of the box.",
3
+ "version": "2.0.7",
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.",
5
5
  "bin": {
6
6
  "create-authenik8-app": "dist/bin/index.js"
7
7
  },
@@ -29,7 +29,6 @@
29
29
  "author": "Karabo Seeisa",
30
30
  "type": "module",
31
31
  "dependencies": {
32
- "argon2": "^0.44.0",
33
32
  "authenik8-core": "^1.0.3",
34
33
  "chalk": "^5.6.2",
35
34
  "fs-extra": "^11.3.4",
@@ -41,9 +40,12 @@
41
40
  "dist",
42
41
  "templates"
43
42
  ],
43
+ "scripts": {
44
+ "test:templates": "node --import tsx --test tests/template-servers.test.mjs"
45
+ },
44
46
  "devDependencies": {
45
47
  "@types/express": "^5.0.6",
46
48
  "@types/fs-extra": "^11.0.4",
47
- "@types/node": "^25.5.0"
49
+ "@types/node": "^25.5.2"
48
50
  }
49
51
  }
File without changes
@@ -1,12 +1,17 @@
1
1
  import express from "express";
2
2
  import { getAuth } from "./auth";
3
3
 
4
+
4
5
  const router = express.Router();
5
6
 
6
- router.get("/protected", (req, res,next) => {
7
- const auth = getAuth();
8
- return auth.requireAdmin(req,res,next);},(req,res)=>{
9
- res.json({ message: "Protected route" });
7
+
8
+ router.get("/protected", (req, res, next) => {
9
+
10
+ const auth = getAuth()
11
+
12
+ auth.requireAdmin(req, res, next);
13
+ }, (req, res) => {
14
+ res.json({ message: "Protected route" });
10
15
  });
11
16
 
12
17
  export default router;
File without changes
@@ -1,4 +1,3 @@
1
-
2
- DATABASE_URL="postgresql://postgres:password@localhost:5432/authenik8_dev"
3
-
4
- DIRECT_URL="postgresql://postgres:password@localhost:5432/authenik8_dev"
1
+ DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public"
2
+ #localdev
3
+ DATABASE_URL="postgresql://postgres:password@localhost:5432/authenik8"
@@ -1,9 +0,0 @@
1
- JWT_SECRET=your_secret
2
- REFRESH_SECRET=your_secret
3
-
4
-
5
- # OAuth (if used)
6
- GOOGLE_CLIENT_ID=
7
- GOOGLE_CLIENT_SECRET=
8
- GITHUB_CLIENT_ID=
9
- GITHUB_CLIENT_SECRET=
@@ -1,9 +0,0 @@
1
- JWT_SECRET=your_secret
2
- REFRESH_SECRET=your_secret
3
-
4
-
5
- # OAuth (if used)
6
- GOOGLE_CLIENT_ID=
7
- GOOGLE_CLIENT_SECRET=
8
- GITHUB_CLIENT_ID=
9
- GITHUB_CLIENT_SECRET=