create-authenik8-app 2.4.12 → 2.4.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +160 -57
  2. package/assets/logo.svg +53 -0
  3. package/dist/src/bin/index.js +199 -125
  4. package/dist/src/bin/index.js.map +1 -1
  5. package/dist/src/lib/args.d.ts +18 -0
  6. package/dist/src/lib/args.d.ts.map +1 -0
  7. package/dist/src/lib/args.js +82 -0
  8. package/dist/src/lib/args.js.map +1 -0
  9. package/dist/src/lib/constants.d.ts +1 -0
  10. package/dist/src/lib/constants.d.ts.map +1 -1
  11. package/dist/src/lib/constants.js +10 -11
  12. package/dist/src/lib/constants.js.map +1 -1
  13. package/dist/src/lib/preflight.d.ts +3 -0
  14. package/dist/src/lib/preflight.d.ts.map +1 -0
  15. package/dist/src/lib/preflight.js +21 -0
  16. package/dist/src/lib/preflight.js.map +1 -0
  17. package/dist/src/lib/process.d.ts +6 -2
  18. package/dist/src/lib/process.d.ts.map +1 -1
  19. package/dist/src/lib/process.js +66 -8
  20. package/dist/src/lib/process.js.map +1 -1
  21. package/dist/src/lib/projectName.d.ts +2 -0
  22. package/dist/src/lib/projectName.d.ts.map +1 -0
  23. package/dist/src/lib/projectName.js +6 -0
  24. package/dist/src/lib/projectName.js.map +1 -0
  25. package/dist/src/lib/schemas.d.ts +192 -0
  26. package/dist/src/lib/schemas.d.ts.map +1 -0
  27. package/dist/src/lib/schemas.js +171 -0
  28. package/dist/src/lib/schemas.js.map +1 -0
  29. package/dist/src/lib/state.d.ts.map +1 -1
  30. package/dist/src/lib/state.js +20 -3
  31. package/dist/src/lib/state.js.map +1 -1
  32. package/dist/src/lib/types.d.ts +6 -13
  33. package/dist/src/lib/types.d.ts.map +1 -1
  34. package/dist/src/lib/ui.d.ts +8 -3
  35. package/dist/src/lib/ui.d.ts.map +1 -1
  36. package/dist/src/lib/ui.js +76 -112
  37. package/dist/src/lib/ui.js.map +1 -1
  38. package/dist/src/steps/configurePrisma.d.ts.map +1 -1
  39. package/dist/src/steps/configurePrisma.js +83 -9
  40. package/dist/src/steps/configurePrisma.js.map +1 -1
  41. package/dist/src/steps/createProject.d.ts +2 -1
  42. package/dist/src/steps/createProject.d.ts.map +1 -1
  43. package/dist/src/steps/createProject.js +148 -27
  44. package/dist/src/steps/createProject.js.map +1 -1
  45. package/dist/src/steps/finalSetup.d.ts +3 -3
  46. package/dist/src/steps/finalSetup.d.ts.map +1 -1
  47. package/dist/src/steps/finalSetup.js +24 -28
  48. package/dist/src/steps/finalSetup.js.map +1 -1
  49. package/dist/src/steps/installAuth.d.ts +1 -1
  50. package/dist/src/steps/installAuth.d.ts.map +1 -1
  51. package/dist/src/steps/installAuth.js +5 -4
  52. package/dist/src/steps/installAuth.js.map +1 -1
  53. package/dist/src/steps/installDeps.d.ts +11 -4
  54. package/dist/src/steps/installDeps.d.ts.map +1 -1
  55. package/dist/src/steps/installDeps.js +45 -77
  56. package/dist/src/steps/installDeps.js.map +1 -1
  57. package/dist/src/steps/prompts.d.ts +1 -1
  58. package/dist/src/steps/prompts.d.ts.map +1 -1
  59. package/dist/src/steps/prompts.js +42 -30
  60. package/dist/src/steps/prompts.js.map +1 -1
  61. package/dist/src/utils/jwk.d.ts +2 -0
  62. package/dist/src/utils/jwk.d.ts.map +1 -0
  63. package/dist/src/utils/jwk.js +44 -0
  64. package/dist/src/utils/jwk.js.map +1 -0
  65. package/dist/src/utils/output.d.ts +1 -1
  66. package/dist/src/utils/output.d.ts.map +1 -1
  67. package/dist/src/utils/output.js +75 -68
  68. package/dist/src/utils/output.js.map +1 -1
  69. package/package.json +17 -9
  70. package/templates/AGENT_IDENTITY.md +112 -0
  71. package/templates/THREAT_MODEL.md +27 -5
  72. package/templates/express-auth/README.md +13 -10
  73. package/templates/express-auth/docker-compose.yml +10 -0
  74. package/templates/express-auth/gitignore.template +6 -0
  75. package/templates/express-auth/package.json +12 -5
  76. package/templates/express-auth/src/app.ts +2 -0
  77. package/templates/express-auth/src/controllers/auth.controller.ts +2 -6
  78. package/templates/express-auth/src/controllers/protected.controller.ts +25 -10
  79. package/templates/express-auth/src/middleware/auth.middleware.ts +1 -0
  80. package/templates/express-auth/src/routes/protected.routes.ts +3 -1
  81. package/templates/express-auth/src/server.ts +6 -12
  82. package/templates/express-auth/src/utils/security.ts +119 -32
  83. package/templates/express-auth+/README.md +13 -10
  84. package/templates/express-auth+/docker-compose.yml +10 -0
  85. package/templates/express-auth+/gitignore.template +6 -0
  86. package/templates/express-auth+/package.json +12 -5
  87. package/templates/express-auth+/src/auth/auth.ts +3 -2
  88. package/templates/express-auth+/src/auth/controllers/password.controller.ts +3 -7
  89. package/templates/express-auth+/src/auth/controllers/protected.controller.ts +26 -11
  90. package/templates/express-auth+/src/auth/identity.adapter.ts +90 -0
  91. package/templates/express-auth+/src/auth/middleware/auth.middleware.ts +3 -4
  92. package/templates/express-auth+/src/auth/routes/protected.routes.ts +2 -2
  93. package/templates/express-auth+/src/oauth-providers/github/src/auth/auth.ts +3 -2
  94. package/templates/express-auth+/src/oauth-providers/google/src/auth/auth.ts +3 -2
  95. package/templates/express-auth+/src/oauth-providers/google-github/src/auth/auth.ts +3 -2
  96. package/templates/express-auth+/src/server.ts +5 -10
  97. package/templates/express-auth+/src/utils/security.ts +109 -28
  98. package/templates/express-base/README.md +13 -6
  99. package/templates/express-base/app.ts +2 -0
  100. package/templates/express-base/controllers/base.controller.ts +33 -19
  101. package/templates/express-base/docker-compose.yml +10 -0
  102. package/templates/express-base/gitignore.template +6 -0
  103. package/templates/express-base/package.json +11 -5
  104. package/templates/express-base/routes/base.routes.ts +1 -1
  105. package/templates/express-base/src/.env.example +7 -2
  106. package/templates/express-base/src/server.ts +6 -12
  107. package/templates/express-base/tsconfig.json +7 -40
  108. package/templates/express-base/utils/security.ts +111 -15
  109. package/templates/fullstack/.env.example +24 -0
  110. package/templates/fullstack/PRESET_CONTRACT.md +46 -0
  111. package/templates/fullstack/README.md +65 -0
  112. package/templates/fullstack/THREAT_MODEL.md +30 -0
  113. package/templates/fullstack/apps/api/package.json +48 -0
  114. package/templates/fullstack/apps/api/prisma/schema.prisma +124 -0
  115. package/templates/fullstack/apps/api/prisma/seed.ts +36 -0
  116. package/templates/fullstack/apps/api/prisma.config.ts +18 -0
  117. package/templates/fullstack/apps/api/src/app.ts +68 -0
  118. package/templates/fullstack/apps/api/src/auth/auth.controller.ts +125 -0
  119. package/templates/fullstack/apps/api/src/auth/auth.routes.ts +50 -0
  120. package/templates/fullstack/apps/api/src/auth/auth.service.ts +257 -0
  121. package/templates/fullstack/apps/api/src/auth/authenik8.ts +67 -0
  122. package/templates/fullstack/apps/api/src/auth/cookies.ts +36 -0
  123. package/templates/fullstack/apps/api/src/config/env.ts +72 -0
  124. package/templates/fullstack/apps/api/src/config/logger.ts +17 -0
  125. package/templates/fullstack/apps/api/src/config/mailer.ts +32 -0
  126. package/templates/fullstack/apps/api/src/config/origins.ts +27 -0
  127. package/templates/fullstack/apps/api/src/config/prisma.ts +9 -0
  128. package/templates/fullstack/apps/api/src/middleware/authenticate.ts +35 -0
  129. package/templates/fullstack/apps/api/src/middleware/csrf.ts +60 -0
  130. package/templates/fullstack/apps/api/src/middleware/origin.ts +12 -0
  131. package/templates/fullstack/apps/api/src/middleware/request-id.ts +9 -0
  132. package/templates/fullstack/apps/api/src/modules/admin/admin.controller.ts +17 -0
  133. package/templates/fullstack/apps/api/src/modules/admin/admin.routes.ts +14 -0
  134. package/templates/fullstack/apps/api/src/modules/admin/admin.service.ts +54 -0
  135. package/templates/fullstack/apps/api/src/modules/projects/project.controller.ts +22 -0
  136. package/templates/fullstack/apps/api/src/modules/projects/project.policy.ts +14 -0
  137. package/templates/fullstack/apps/api/src/modules/projects/project.repository.ts +20 -0
  138. package/templates/fullstack/apps/api/src/modules/projects/project.routes.ts +21 -0
  139. package/templates/fullstack/apps/api/src/modules/projects/project.service.ts +41 -0
  140. package/templates/fullstack/apps/api/src/modules/users/user.controller.ts +26 -0
  141. package/templates/fullstack/apps/api/src/modules/users/user.presenter.ts +13 -0
  142. package/templates/fullstack/apps/api/src/modules/users/user.routes.ts +21 -0
  143. package/templates/fullstack/apps/api/src/modules/users/user.service.ts +71 -0
  144. package/templates/fullstack/apps/api/src/openapi.ts +32 -0
  145. package/templates/fullstack/apps/api/src/server.ts +29 -0
  146. package/templates/fullstack/apps/api/src/types.ts +15 -0
  147. package/templates/fullstack/apps/api/src/utils/crypto.ts +4 -0
  148. package/templates/fullstack/apps/api/src/utils/http.ts +33 -0
  149. package/templates/fullstack/apps/api/src/utils/sealed-value.ts +37 -0
  150. package/templates/fullstack/apps/api/tests/project.policy.test.ts +26 -0
  151. package/templates/fullstack/apps/api/tests/registration.test.ts +69 -0
  152. package/templates/fullstack/apps/api/tests/security.test.ts +98 -0
  153. package/templates/fullstack/apps/api/tests/validation.test.ts +37 -0
  154. package/templates/fullstack/apps/api/tsconfig.json +16 -0
  155. package/templates/fullstack/apps/api/vitest.config.ts +9 -0
  156. package/templates/fullstack/apps/web/index.html +14 -0
  157. package/templates/fullstack/apps/web/package.json +31 -0
  158. package/templates/fullstack/apps/web/public/authenik8-logo.svg +53 -0
  159. package/templates/fullstack/apps/web/src/App.tsx +45 -0
  160. package/templates/fullstack/apps/web/src/auth/AuthProvider.tsx +53 -0
  161. package/templates/fullstack/apps/web/src/auth/RouteGuards.tsx +16 -0
  162. package/templates/fullstack/apps/web/src/auth/providers.ts +3 -0
  163. package/templates/fullstack/apps/web/src/components/AppShell.tsx +80 -0
  164. package/templates/fullstack/apps/web/src/components/AuthShell.tsx +26 -0
  165. package/templates/fullstack/apps/web/src/components/Page.tsx +30 -0
  166. package/templates/fullstack/apps/web/src/features/projects/ProjectPages.tsx +79 -0
  167. package/templates/fullstack/apps/web/src/main.tsx +24 -0
  168. package/templates/fullstack/apps/web/src/pages/DashboardPage.tsx +48 -0
  169. package/templates/fullstack/apps/web/src/pages/StatusPages.tsx +8 -0
  170. package/templates/fullstack/apps/web/src/pages/admin/AuditPage.tsx +19 -0
  171. package/templates/fullstack/apps/web/src/pages/admin/UsersPage.tsx +24 -0
  172. package/templates/fullstack/apps/web/src/pages/auth/LoginPage.tsx +51 -0
  173. package/templates/fullstack/apps/web/src/pages/auth/OAuthCallbackPage.tsx +26 -0
  174. package/templates/fullstack/apps/web/src/pages/auth/RecoveryPages.tsx +53 -0
  175. package/templates/fullstack/apps/web/src/pages/auth/RegisterPage.tsx +86 -0
  176. package/templates/fullstack/apps/web/src/pages/auth/VerifyEmailPage.tsx +24 -0
  177. package/templates/fullstack/apps/web/src/pages/settings/ProfilePage.tsx +34 -0
  178. package/templates/fullstack/apps/web/src/pages/settings/SecurityPage.tsx +57 -0
  179. package/templates/fullstack/apps/web/src/styles.css +289 -0
  180. package/templates/fullstack/apps/web/src/token-storage.test.ts +12 -0
  181. package/templates/fullstack/apps/web/tsconfig.app.json +19 -0
  182. package/templates/fullstack/apps/web/tsconfig.json +7 -0
  183. package/templates/fullstack/apps/web/tsconfig.node.json +10 -0
  184. package/templates/fullstack/apps/web/vite.config.ts +18 -0
  185. package/templates/fullstack/docker-compose.yml +35 -0
  186. package/templates/fullstack/docs/PRODUCTION.md +30 -0
  187. package/templates/fullstack/gitignore.template +8 -0
  188. package/templates/fullstack/package.json +39 -0
  189. package/templates/fullstack/packages/api-client/package.json +20 -0
  190. package/templates/fullstack/packages/api-client/src/index.ts +203 -0
  191. package/templates/fullstack/packages/api-client/tsconfig.json +14 -0
  192. package/templates/fullstack/packages/contracts/package.json +20 -0
  193. package/templates/fullstack/packages/contracts/src/index.ts +146 -0
  194. package/templates/fullstack/packages/contracts/tsconfig.json +13 -0
  195. package/templates/fullstack/packages/ui/package.json +22 -0
  196. package/templates/fullstack/packages/ui/src/index.tsx +33 -0
  197. package/templates/fullstack/packages/ui/tsconfig.json +14 -0
  198. package/templates/prisma/postgresql/.env.example +6 -2
  199. package/templates/prisma/postgresql/client.ts +17 -0
  200. package/templates/prisma/postgresql/prisma.config.ts +12 -0
  201. package/templates/prisma/postgresql/schema.prisma +0 -1
  202. package/templates/prisma/sqlite/.env.example +6 -2
  203. package/templates/prisma/sqlite/client.ts +16 -0
  204. package/templates/prisma/sqlite/prisma.config.ts +12 -0
  205. package/templates/prisma/sqlite/schema.prisma +0 -1
  206. package/dist/src/tests/templated-routes.test.d.ts +0 -2
  207. package/dist/src/tests/templated-routes.test.d.ts.map +0 -1
  208. package/dist/src/tests/templated-routes.test.js +0 -325
  209. package/dist/src/tests/templated-routes.test.js.map +0 -1
  210. package/dist/templates/THREAT_MODEL.md +0 -138
  211. package/dist/templates/express-auth/src/controllers/protected.controller.d.ts +0 -8
  212. package/dist/templates/express-auth/src/controllers/protected.controller.d.ts.map +0 -1
  213. package/dist/templates/express-auth/src/controllers/protected.controller.js +0 -50
  214. package/dist/templates/express-auth/src/controllers/protected.controller.js.map +0 -1
  215. package/dist/templates/express-auth/src/routes/protected.routes.d.ts +0 -2
  216. package/dist/templates/express-auth/src/routes/protected.routes.d.ts.map +0 -1
  217. package/dist/templates/express-auth/src/routes/protected.routes.js +0 -16
  218. package/dist/templates/express-auth/src/routes/protected.routes.js.map +0 -1
  219. package/dist/templates/express-auth/src/utils/security.d.ts +0 -8
  220. package/dist/templates/express-auth/src/utils/security.d.ts.map +0 -1
  221. package/dist/templates/express-auth/src/utils/security.js +0 -55
  222. package/dist/templates/express-auth/src/utils/security.js.map +0 -1
  223. package/dist/templates/express-base/controllers/base.controller.d.ts +0 -12
  224. package/dist/templates/express-base/controllers/base.controller.d.ts.map +0 -1
  225. package/dist/templates/express-base/controllers/base.controller.js +0 -77
  226. package/dist/templates/express-base/controllers/base.controller.js.map +0 -1
  227. package/dist/templates/express-base/routes/base.routes.d.ts +0 -2
  228. package/dist/templates/express-base/routes/base.routes.d.ts.map +0 -1
  229. package/dist/templates/express-base/routes/base.routes.js +0 -20
  230. package/dist/templates/express-base/routes/base.routes.js.map +0 -1
  231. package/dist/templates/express-base/utils/security.d.ts +0 -5
  232. package/dist/templates/express-base/utils/security.d.ts.map +0 -1
  233. package/dist/templates/express-base/utils/security.js +0 -40
  234. package/dist/templates/express-base/utils/security.js.map +0 -1
  235. package/dist/templates/package.json +0 -27
@@ -1,26 +1,69 @@
1
1
  import fs from "fs-extra";
2
2
  import path from "path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { PRISMA_VERSION } from "../lib/constants.js";
3
5
  const supportedOAuthProviders = ["google", "github"];
4
6
  export function resolveTemplateName(authMode) {
7
+ if (authMode === "fullstack")
8
+ return "fullstack";
5
9
  if (authMode === "auth")
6
10
  return "express-auth";
7
11
  if (authMode === "auth-oauth")
8
12
  return "express-auth+";
9
13
  return "express-base";
10
14
  }
11
- export function configurePackageJson(targetDir, usePrisma) {
15
+ export function configurePackageJson(targetDir, usePrisma, packageManager = "npm") {
12
16
  const pkgPath = path.join(targetDir, "package.json");
13
17
  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
- }
18
+ if (Array.isArray(pkg.workspaces))
19
+ return;
20
+ pkg.scripts ??= {};
17
21
  if (usePrisma) {
22
+ if (!pkg.scripts.postinstall?.includes("prisma")) {
23
+ pkg.scripts.postinstall = "prisma generate";
24
+ }
18
25
  const currentDev = pkg.scripts.dev || "tsx watch src/index.ts";
19
- if (!currentDev.includes("prisma@5.22.0 generate")) {
20
- pkg.scripts.dev = `npx prisma@5.22.0 generate && ${currentDev}`;
26
+ if (!currentDev.includes("prisma generate")) {
27
+ pkg.scripts.dev = `prisma generate && ${currentDev}`;
28
+ }
29
+ if (packageManager === "bun") {
30
+ pkg.trustedDependencies = ["@prisma/engines", "better-sqlite3", "prisma"];
31
+ }
32
+ if (packageManager === "pnpm") {
33
+ fs.writeFileSync(path.join(targetDir, "pnpm-workspace.yaml"), [
34
+ "allowBuilds:",
35
+ ' "@prisma/engines": true',
36
+ " better-sqlite3: true",
37
+ " prisma: true",
38
+ "overrides:",
39
+ ' "@hono/node-server": "1.19.13"',
40
+ "",
41
+ ].join("\n"));
42
+ }
43
+ if (packageManager === "npm") {
44
+ pkg.allowScripts = {
45
+ [`prisma@${PRISMA_VERSION}`]: true,
46
+ [`@prisma/engines@${PRISMA_VERSION}`]: true,
47
+ ...(pkg.dependencies?.["@prisma/adapter-better-sqlite3"]
48
+ ? { "better-sqlite3": true }
49
+ : {}),
50
+ };
21
51
  }
22
52
  }
23
- fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
53
+ else {
54
+ for (const scriptName of ["postinstall", "prisma:generate", "prisma:migrate"]) {
55
+ if (pkg.scripts[scriptName]?.includes("prisma")) {
56
+ delete pkg.scripts[scriptName];
57
+ }
58
+ }
59
+ delete pkg.dependencies?.["@prisma/client"];
60
+ delete pkg.dependencies?.["@prisma/adapter-pg"];
61
+ delete pkg.dependencies?.["@prisma/adapter-better-sqlite3"];
62
+ delete pkg.devDependencies?.prisma;
63
+ delete pkg.trustedDependencies;
64
+ delete pkg.allowScripts;
65
+ }
66
+ fs.writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`);
24
67
  }
25
68
  function resolveOAuthProviders(state) {
26
69
  const selected = state.oauthProviders?.filter((provider) => supportedOAuthProviders.includes(provider));
@@ -38,24 +81,67 @@ function providerEnvBlock(provider) {
38
81
  },`;
39
82
  }
40
83
  function providerControllerBlock(provider) {
41
- return `${provider}Redirect(req: Request, res: Response) {
42
- requireProvider("${provider}", res)?.redirect(req, res);
84
+ return `async ${provider}Redirect(req: Request, res: Response) {
85
+ try {
86
+ await requireProvider("${provider}", res)?.redirect(req, res);
87
+ } catch {
88
+ if (!res.headersSent) res.status(500).json({ error: "OAuth redirect failed" });
89
+ }
43
90
  },
44
91
 
45
92
  async ${provider}Callback(req: Request, res: Response) {
46
- const provider = requireProvider("${provider}", res);
47
- if (!provider) return;
93
+ try {
94
+ const provider = requireProvider("${provider}", res);
95
+ if (!provider) return;
96
+
97
+ const result = await provider.handleCallback(req);
98
+ let response = result;
99
+
100
+ if (result.mode === "link" && !result.identity) {
101
+ if (!result.userId) {
102
+ return res.status(400).json({ error: "Authenticated user is required to link a provider" });
103
+ }
48
104
 
49
- const result = await provider.handleCallback(req);
105
+ await identityAdapter.linkProvider(
106
+ result.userId,
107
+ result.profile.provider,
108
+ result.profile.providerId,
109
+ );
110
+ response = {
111
+ ...result,
112
+ identity: { type: "LINK_PROVIDER", success: true },
113
+ };
114
+ }
50
115
 
51
- res.json({
52
- provider: "${provider}",
53
- ...result,
54
- });
116
+ if (
117
+ result.identity?.type === "LINK_REQUIRED" ||
118
+ result.identity?.type === "EXISTING_EMAIL_CONFLICT"
119
+ ) {
120
+ return res.status(409).json({ provider: "${provider}", ...result });
121
+ }
122
+
123
+ if (result.identity?.type === "INVALID_LINK_REQUEST") {
124
+ return res.status(400).json({ provider: "${provider}", ...result });
125
+ }
126
+
127
+ if (result.mode === "login" && (!result.accessToken || !result.refreshToken)) {
128
+ throw new Error("OAuth callback did not return an application session");
129
+ }
130
+
131
+ res.json({ provider: "${provider}", ...response });
132
+ } catch (error) {
133
+ res.status(400).json({
134
+ error: error instanceof Error ? error.message : "OAuth callback failed",
135
+ });
136
+ }
55
137
  },
56
138
 
57
- ${provider}Link(req: Request, res: Response) {
58
- requireProvider("${provider}", res)?.redirect(req, res, "link");
139
+ async ${provider}Link(req: Request, res: Response) {
140
+ try {
141
+ await requireProvider("${provider}", res)?.redirect(req, res, "link");
142
+ } catch {
143
+ if (!res.headersSent) res.status(500).json({ error: "OAuth link redirect failed" });
144
+ }
59
145
  },`;
60
146
  }
61
147
  function providerRoutesBlock(provider) {
@@ -71,7 +157,8 @@ async function writeProviderSpecificOAuthFiles(targetDir, providers) {
71
157
  const providerUnion = providers.map((provider) => `"${provider}"`).join(" | ");
72
158
  await fs.writeFile(authPath, `import { createAuthenik8 } from "authenik8-core";
73
159
  import dotenv from "dotenv";
74
- import { requiredEnv, requiredSecret } from "../utils/security";
160
+ import { agentIdentityConfig, authJwkConfig, requiredEnv, requiredSecret } from "../utils/security";
161
+ import { identityAdapter } from "./identity.adapter";
75
162
 
76
163
  dotenv.config();
77
164
 
@@ -85,9 +172,11 @@ function oauthConfig() {
85
172
 
86
173
  export async function initAuth() {
87
174
  authInstance= await createAuthenik8({
88
- jwtSecret: requiredSecret("JWT_SECRET"),
175
+ jwt: authJwkConfig(),
89
176
  refreshSecret: requiredSecret("REFRESH_SECRET"),
177
+ agent: agentIdentityConfig(),
90
178
  oauth: oauthConfig(),
179
+ identityAdapter,
91
180
  });
92
181
 
93
182
  }
@@ -120,6 +209,7 @@ export default router;
120
209
  `);
121
210
  await fs.writeFile(controllerPath, `import { Request, Response } from "express";
122
211
  import { getAuth } from "../auth";
212
+ import { identityAdapter } from "../identity.adapter";
123
213
 
124
214
  type OAuthProvider = ${providerUnion};
125
215
 
@@ -151,7 +241,7 @@ export const oauthController = {
151
241
  const callbackUrls = providers
152
242
  .map((provider) => `${providerTitle(provider)} callback URL:\n\n\`\`\`text\nhttp://localhost:3000/auth/${provider}/callback\n\`\`\``)
153
243
  .join("\n\n");
154
- let readme = await fs.readFile(readmePath, "utf-8");
244
+ let readme = (await fs.readFile(readmePath, "utf-8")).replace(/\r\n/g, "\n");
155
245
  readme = readme.replace("AUTHENIK8_OAUTH_PROVIDERS=google,github", `AUTHENIK8_OAUTH_PROVIDERS=${selectedList}`);
156
246
  readme = readme.replace(/GOOGLE_CLIENT_ID=your-google-client-id\nGOOGLE_CLIENT_SECRET=your-google-client-secret\nGOOGLE_REDIRECT_URI=http:\/\/localhost:3000\/auth\/google\/callback\nGITHUB_CLIENT_ID=your-github-client-id\nGITHUB_CLIENT_SECRET=your-github-client-secret\nGITHUB_REDIRECT_URI=http:\/\/localhost:3000\/auth\/github\/callback/, providers
157
247
  .flatMap((provider) => {
@@ -191,12 +281,43 @@ export async function createProject(state, targetDir, templateRoot) {
191
281
  if (!pkgExists) {
192
282
  throw new Error(`Template "${templateName}" is missing package.json at ${templatePath}`);
193
283
  }
194
- await fs.copy(templatePath, targetDir, {
195
- filter: (source) => !source.split(path.sep).includes("oauth-providers"),
196
- });
197
- await fs.copy(path.join(templateRoot, "THREAT_MODEL.md"), path.join(targetDir, "THREAT_MODEL.md"));
198
- if (state.authMode === "auth-oauth") {
199
- await writeProviderSpecificOAuthFiles(targetDir, resolveOAuthProviders(state));
284
+ const stageDir = path.join(path.dirname(targetDir), `.${path.basename(targetDir)}.authenik8-${randomUUID()}`);
285
+ try {
286
+ await fs.copy(templatePath, stageDir, {
287
+ filter: (source) => !source.split(path.sep).includes("oauth-providers"),
288
+ });
289
+ const generatedPkgPath = path.join(stageDir, "package.json");
290
+ const generatedPkg = await fs.readJson(generatedPkgPath);
291
+ generatedPkg.name = state.projectName;
292
+ await fs.writeJson(generatedPkgPath, generatedPkg, { spaces: 2 });
293
+ const packagedGitignore = path.join(stageDir, "gitignore.template");
294
+ if (await fs.pathExists(packagedGitignore)) {
295
+ await fs.move(packagedGitignore, path.join(stageDir, ".gitignore"), {
296
+ overwrite: true,
297
+ });
298
+ }
299
+ if (state.authMode === "fullstack") {
300
+ await fs.copy(path.join(templatePath, ".env.example"), path.join(stageDir, ".env"));
301
+ const providers = state.oauthProviders === undefined
302
+ ? [...supportedOAuthProviders]
303
+ : resolveOAuthProviders(state).filter((provider) => state.oauthProviders?.includes(provider));
304
+ await fs.writeFile(path.join(stageDir, "apps/web/src/auth/providers.ts"), `export type OAuthProvider = "google" | "github";\n\nexport const enabledOAuthProviders: readonly OAuthProvider[] = ${JSON.stringify(providers)};\n`);
305
+ }
306
+ if (state.authMode !== "fullstack") {
307
+ await fs.copy(path.join(templateRoot, "THREAT_MODEL.md"), path.join(stageDir, "THREAT_MODEL.md"));
308
+ }
309
+ await fs.copy(path.join(templateRoot, "AGENT_IDENTITY.md"), path.join(stageDir, "AGENT_IDENTITY.md"));
310
+ if (state.authMode === "auth-oauth") {
311
+ await writeProviderSpecificOAuthFiles(stageDir, resolveOAuthProviders(state));
312
+ }
313
+ if (await fs.pathExists(targetDir)) {
314
+ throw new Error(`Directory "${path.basename(targetDir)}" was created while setup was running.`);
315
+ }
316
+ await fs.move(stageDir, targetDir);
317
+ }
318
+ catch (error) {
319
+ await fs.remove(stageDir);
320
+ throw error;
200
321
  }
201
322
  }
202
323
  //# sourceMappingURL=createProject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createProject.js","sourceRoot":"","sources":["../../../src/steps/createProject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createProject.js","sourceRoot":"","sources":["../../../src/steps/createProject.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  export declare function hasBun(): boolean;
2
- export declare function resolveRuntime(runtime: any): "node" | "bun";
3
- export declare function createPm2Config(targetDir: string, projectName: string, runtime: "node" | "bun"): void;
2
+ export declare function resolveRuntime(runtime: unknown): "node" | "bun";
3
+ export declare function createPm2Config(targetDir: string, projectName: string, runtime: "node" | "bun", productionEntry?: string): void;
4
4
  export declare function configureProduction(targetDir: string, projectName: string, runtime: "node" | "bun"): Promise<void>;
5
- export declare function initGit(targetDir: string): Promise<void>;
5
+ export declare function initGit(targetDir: string): Promise<boolean>;
6
6
  export declare function appendProductionReadme(targetDir: string, projectName: string): void;
7
7
  //# sourceMappingURL=finalSetup.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"finalSetup.d.ts","sourceRoot":"","sources":["../../../src/steps/finalSetup.ts"],"names":[],"mappings":"AAWA,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAO/D;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GAAG,KAAK,EACvB,eAAe,SAAmB,GACjC,IAAI,CAsCN;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GAAG,KAAK,GACtB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAejE;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAuBnF"}
@@ -1,29 +1,20 @@
1
1
  import fs from "fs-extra";
2
2
  import path from "path";
3
- import { run, getCommand } from "../lib/process.js";
4
- import { spinner } from "../lib/ui.js";
5
- import { execSync } from "child_process";
3
+ import { commandExists, run, getCommand, exitForInterrupt, } from "../lib/process.js";
6
4
  const PM2_VERSION = "^5.4.2";
7
- const TS_NODE_VERSION = "^10.9.2";
8
5
  export function hasBun() {
9
- try {
10
- execSync("bun --version", { stdio: "ignore" });
11
- return true;
12
- }
13
- catch {
14
- return false;
15
- }
6
+ return commandExists("bun");
16
7
  }
17
8
  export function resolveRuntime(runtime) {
18
9
  if (runtime === "bun" && !hasBun()) {
19
- console.log("⚠️ Bun not found, falling back to Node");
10
+ console.log("Bun was not found; using Node instead.");
20
11
  return "node";
21
12
  }
22
13
  if (runtime === "bun")
23
14
  return "bun";
24
15
  return "node";
25
16
  }
26
- export function createPm2Config(targetDir, projectName, runtime) {
17
+ export function createPm2Config(targetDir, projectName, runtime, productionEntry = "dist/server.js") {
27
18
  const configPath = path.join(targetDir, "ecosystem.config.js");
28
19
  const useBun = runtime === "bun";
29
20
  const content = useBun
@@ -31,7 +22,7 @@ export function createPm2Config(targetDir, projectName, runtime) {
31
22
  apps: [
32
23
  {
33
24
  name: "${projectName}",
34
- script: "src/server.ts",
25
+ script: "${productionEntry}",
35
26
  interpreter: "bun",
36
27
  instances: "max",
37
28
  exec_mode: "cluster",
@@ -41,15 +32,14 @@ export function createPm2Config(targetDir, projectName, runtime) {
41
32
  }
42
33
  }
43
34
  ]
44
- }` :
45
- `module.exports = {
35
+ }`
36
+ : `module.exports = {
46
37
  apps: [
47
38
  {
48
39
  name: "${projectName}",
49
- script: "src/server.ts",
40
+ script: "${productionEntry}",
50
41
  instances: "max",
51
42
  interpreter:"node",
52
- interpreter_args: "-r ts-node/register",
53
43
  exec_mode: "cluster",
54
44
  watch: false,
55
45
  max_memory_restart: "300M",
@@ -65,35 +55,41 @@ export async function configureProduction(targetDir, projectName, runtime) {
65
55
  const pkgPath = path.join(targetDir, "package.json");
66
56
  const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
67
57
  pkg.dependencies["pm2"] = PM2_VERSION;
68
- if (runtime === "node") {
69
- pkg.dependencies["ts-node"] = TS_NODE_VERSION;
70
- }
71
- pkg.scripts["pm2:start"] = "npx pm2 start ecosystem.config.js";
58
+ delete pkg.dependencies["ts-node"];
59
+ const productionEntry = String(pkg.scripts.start ?? "node dist/server.js")
60
+ .replace(/^node\s+/, "")
61
+ .trim();
62
+ pkg.scripts["pm2:start"] = "npm run build && npx pm2 start ecosystem.config.js";
72
63
  pkg.scripts["pm2:stop"] = `npx pm2 stop ${projectName}`;
73
64
  pkg.scripts["pm2:logs"] = "npx pm2 logs";
74
65
  fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
75
- createPm2Config(targetDir, projectName, runtime);
66
+ createPm2Config(targetDir, projectName, runtime, productionEntry);
76
67
  }
77
68
  export async function initGit(targetDir) {
69
+ if (!commandExists("git"))
70
+ return false;
78
71
  try {
79
72
  await run(getCommand("git"), ["init"], {
80
73
  cwd: targetDir,
81
74
  stdio: "ignore",
82
75
  });
83
- spinner.stop();
76
+ return true;
84
77
  }
85
- catch {
86
- spinner.fail("Git init failed");
78
+ catch (error) {
79
+ await exitForInterrupt(error);
80
+ const message = error instanceof Error ? error.message.split("\n")[0] : String(error);
81
+ console.warn(`Git initialization skipped: ${message}`);
82
+ return false;
87
83
  }
88
84
  }
89
85
  export function appendProductionReadme(targetDir, projectName) {
90
86
  fs.appendFileSync(path.join(targetDir, "README.md"), `
91
87
 
92
- 🚀 Production Mode
88
+ ## Production Mode
93
89
 
94
90
  This project is configured for production using PM2.
95
91
 
96
- Start app in cluster mode:
92
+ Build and start the compiled app in cluster mode:
97
93
 
98
94
  npm run pm2:start
99
95
 
@@ -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,3 +1,3 @@
1
1
  import type { PackageManager } from "./installDeps.js";
2
- export declare function installAuth(targetDir: string, pm: PackageManager): Promise<string>;
2
+ export declare function installAuth(targetDir: string, pm: PackageManager): Promise<"bcryptjs">;
3
3
  //# sourceMappingURL=installAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installAuth.d.ts","sourceRoot":"","sources":["../../../src/steps/installAuth.ts"],"names":[],"mappings":"AAIA,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,CAqBjB"}
1
+ {"version":3,"file":"installAuth.d.ts","sourceRoot":"","sources":["../../../src/steps/installAuth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,cAAc,GACjB,OAAO,CAAC,UAAU,CAAC,CAoBrB"}
@@ -1,15 +1,16 @@
1
1
  import fs from "fs-extra";
2
2
  import path from "path";
3
3
  import { getBestHashLib, generateHashModule } from "../utils/hash.js";
4
- import { spinner } from "../lib/ui.js";
5
4
  export async function installAuth(targetDir, pm) {
6
- let selectedHash = getBestHashLib(pm);
7
- spinner.start("Installing password auth...");
5
+ const selectedHash = getBestHashLib(pm);
8
6
  const pkgPath = path.join(targetDir, "package.json");
9
7
  const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
10
8
  pkg.dependencies.bcryptjs = "^2.4.3";
9
+ pkg.devDependencies = {
10
+ ...pkg.devDependencies,
11
+ "@types/bcryptjs": "^2.4.6",
12
+ };
11
13
  fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
12
- spinner.stop();
13
14
  await fs.writeFile(path.join(targetDir, "src/utils/hash.ts"), generateHashModule("bcryptjs"));
14
15
  return selectedHash;
15
16
  }
@@ -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,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,QAAQ,GAAG,QAAQ,CAAC;IAErC,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,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,EACzC,kBAAkB,CAAC,UAAU,CAAC,CAC/B,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,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,EAAkB;IAElB,MAAM,YAAY,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAExC,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,QAAQ,GAAG,QAAQ,CAAC;IACrC,GAAG,CAAC,eAAe,GAAG;QACpB,GAAG,GAAG,CAAC,eAAe;QACtB,iBAAiB,EAAE,QAAQ;KAC5B,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAExD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,EACzC,kBAAkB,CAAC,UAAU,CAAC,CAC/B,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -1,5 +1,12 @@
1
- export type PackageManager = "pnpm" | "bun" | "npm";
2
- export declare function detectPackageManager(): PackageManager;
3
- export declare function ensureRedisServerInstalled(): void;
4
- export declare function installDependencies(targetDir: string): Promise<void>;
1
+ import type { PackageManager } from "../lib/types.js";
2
+ export type { PackageManager } from "../lib/types.js";
3
+ export type InstallResult = {
4
+ packageManager: PackageManager;
5
+ durationMs: number;
6
+ };
7
+ export declare function detectPackageManager(env?: NodeJS.ProcessEnv): PackageManager;
8
+ export declare function resolvePackageManagerForPreset(authMode: string | undefined, requested?: PackageManager, env?: NodeJS.ProcessEnv): PackageManager;
9
+ export declare function isPackageManagerAvailable(pm: PackageManager): boolean;
10
+ export declare function getInstallArgs(pm: PackageManager): string[];
11
+ export declare function installDependencies(targetDir: string, packageManager?: PackageManager): Promise<InstallResult>;
5
12
  //# sourceMappingURL=installDeps.d.ts.map
@@ -1 +1 @@
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;AAWpD,wBAAgB,oBAAoB,IAAI,cAAc,CAarD;AA6BD,wBAAgB,0BAA0B,IAAI,IAAI,CAWjD;AAeD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB1E"}
1
+ {"version":3,"file":"installDeps.d.ts","sourceRoot":"","sources":["../../../src/steps/installDeps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,CAQzF;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,CAAC,EAAE,cAAc,EAC1B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,cAAc,CAShB;AAED,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAErE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,EAAE,CAiB3D;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,CAAC,CAoBxB"}