create-authenik8-app 2.4.14 → 2.4.15

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 (227) hide show
  1. package/README.md +34 -516
  2. package/dist/src/bin/cli.d.ts +3 -0
  3. package/dist/src/bin/cli.d.ts.map +1 -0
  4. package/dist/src/bin/cli.js +112 -0
  5. package/dist/src/bin/cli.js.map +1 -0
  6. package/dist/src/bin/index.js +108 -23
  7. package/dist/src/bin/index.js.map +1 -1
  8. package/dist/src/commands/add/apply.d.ts +6 -0
  9. package/dist/src/commands/add/apply.d.ts.map +1 -0
  10. package/dist/src/commands/add/apply.js +123 -0
  11. package/dist/src/commands/add/apply.js.map +1 -0
  12. package/dist/src/commands/add/ci.d.ts +6 -0
  13. package/dist/src/commands/add/ci.d.ts.map +1 -0
  14. package/dist/src/commands/add/ci.js +108 -0
  15. package/dist/src/commands/add/ci.js.map +1 -0
  16. package/dist/src/commands/add/context.d.ts +5 -0
  17. package/dist/src/commands/add/context.d.ts.map +1 -0
  18. package/dist/src/commands/add/context.js +19 -0
  19. package/dist/src/commands/add/context.js.map +1 -0
  20. package/dist/src/commands/add/diff.d.ts +4 -0
  21. package/dist/src/commands/add/diff.d.ts.map +1 -0
  22. package/dist/src/commands/add/diff.js +114 -0
  23. package/dist/src/commands/add/diff.js.map +1 -0
  24. package/dist/src/commands/add/index.d.ts +6 -0
  25. package/dist/src/commands/add/index.d.ts.map +1 -0
  26. package/dist/src/commands/add/index.js +61 -0
  27. package/dist/src/commands/add/index.js.map +1 -0
  28. package/dist/src/commands/add/output.d.ts +5 -0
  29. package/dist/src/commands/add/output.d.ts.map +1 -0
  30. package/dist/src/commands/add/output.js +58 -0
  31. package/dist/src/commands/add/output.js.map +1 -0
  32. package/dist/src/commands/add/plan.d.ts +6 -0
  33. package/dist/src/commands/add/plan.d.ts.map +1 -0
  34. package/dist/src/commands/add/plan.js +93 -0
  35. package/dist/src/commands/add/plan.js.map +1 -0
  36. package/dist/src/commands/add/registry.d.ts +4 -0
  37. package/dist/src/commands/add/registry.d.ts.map +1 -0
  38. package/dist/src/commands/add/registry.js +37 -0
  39. package/dist/src/commands/add/registry.js.map +1 -0
  40. package/dist/src/commands/add/types.d.ts +37 -0
  41. package/dist/src/commands/add/types.d.ts.map +1 -0
  42. package/dist/src/commands/add/types.js +2 -0
  43. package/dist/src/commands/add/types.js.map +1 -0
  44. package/dist/src/commands/doctor/checks.d.ts +3 -0
  45. package/dist/src/commands/doctor/checks.d.ts.map +1 -0
  46. package/dist/src/commands/doctor/checks.js +353 -0
  47. package/dist/src/commands/doctor/checks.js.map +1 -0
  48. package/dist/src/commands/doctor/context.d.ts +5 -0
  49. package/dist/src/commands/doctor/context.d.ts.map +1 -0
  50. package/dist/src/commands/doctor/context.js +134 -0
  51. package/dist/src/commands/doctor/context.js.map +1 -0
  52. package/dist/src/commands/doctor/index.d.ts +9 -0
  53. package/dist/src/commands/doctor/index.d.ts.map +1 -0
  54. package/dist/src/commands/doctor/index.js +80 -0
  55. package/dist/src/commands/doctor/index.js.map +1 -0
  56. package/dist/src/commands/doctor/output.d.ts +4 -0
  57. package/dist/src/commands/doctor/output.d.ts.map +1 -0
  58. package/dist/src/commands/doctor/output.js +53 -0
  59. package/dist/src/commands/doctor/output.js.map +1 -0
  60. package/dist/src/commands/doctor/postGeneration.d.ts +7 -0
  61. package/dist/src/commands/doctor/postGeneration.d.ts.map +1 -0
  62. package/dist/src/commands/doctor/postGeneration.js +22 -0
  63. package/dist/src/commands/doctor/postGeneration.js.map +1 -0
  64. package/dist/src/commands/doctor/services.d.ts +5 -0
  65. package/dist/src/commands/doctor/services.d.ts.map +1 -0
  66. package/dist/src/commands/doctor/services.js +80 -0
  67. package/dist/src/commands/doctor/services.js.map +1 -0
  68. package/dist/src/commands/doctor/types.d.ts +69 -0
  69. package/dist/src/commands/doctor/types.d.ts.map +1 -0
  70. package/dist/src/commands/doctor/types.js +2 -0
  71. package/dist/src/commands/doctor/types.js.map +1 -0
  72. package/dist/src/commands/upgrade/context.d.ts +5 -0
  73. package/dist/src/commands/upgrade/context.d.ts.map +1 -0
  74. package/dist/src/commands/upgrade/context.js +57 -0
  75. package/dist/src/commands/upgrade/context.js.map +1 -0
  76. package/dist/src/commands/upgrade/index.d.ts +7 -0
  77. package/dist/src/commands/upgrade/index.d.ts.map +1 -0
  78. package/dist/src/commands/upgrade/index.js +35 -0
  79. package/dist/src/commands/upgrade/index.js.map +1 -0
  80. package/dist/src/commands/upgrade/migrations.d.ts +4 -0
  81. package/dist/src/commands/upgrade/migrations.d.ts.map +1 -0
  82. package/dist/src/commands/upgrade/migrations.js +22 -0
  83. package/dist/src/commands/upgrade/migrations.js.map +1 -0
  84. package/dist/src/commands/upgrade/output.d.ts +4 -0
  85. package/dist/src/commands/upgrade/output.d.ts.map +1 -0
  86. package/dist/src/commands/upgrade/output.js +52 -0
  87. package/dist/src/commands/upgrade/output.js.map +1 -0
  88. package/dist/src/commands/upgrade/plan.d.ts +3 -0
  89. package/dist/src/commands/upgrade/plan.d.ts.map +1 -0
  90. package/dist/src/commands/upgrade/plan.js +119 -0
  91. package/dist/src/commands/upgrade/plan.js.map +1 -0
  92. package/dist/src/commands/upgrade/types.d.ts +48 -0
  93. package/dist/src/commands/upgrade/types.d.ts.map +1 -0
  94. package/dist/src/commands/upgrade/types.js +2 -0
  95. package/dist/src/commands/upgrade/types.js.map +1 -0
  96. package/dist/src/lib/args.d.ts +21 -0
  97. package/dist/src/lib/args.d.ts.map +1 -1
  98. package/dist/src/lib/args.js +119 -1
  99. package/dist/src/lib/args.js.map +1 -1
  100. package/dist/src/lib/constants.d.ts +1 -1
  101. package/dist/src/lib/constants.d.ts.map +1 -1
  102. package/dist/src/lib/constants.js +3 -1
  103. package/dist/src/lib/constants.js.map +1 -1
  104. package/dist/src/lib/expressOAuth.d.ts +10 -0
  105. package/dist/src/lib/expressOAuth.d.ts.map +1 -0
  106. package/dist/src/lib/expressOAuth.js +164 -0
  107. package/dist/src/lib/expressOAuth.js.map +1 -0
  108. package/dist/src/lib/interruption.d.ts +14 -0
  109. package/dist/src/lib/interruption.d.ts.map +1 -0
  110. package/dist/src/lib/interruption.js +16 -0
  111. package/dist/src/lib/interruption.js.map +1 -0
  112. package/dist/src/lib/nonInteractive.d.ts +8 -0
  113. package/dist/src/lib/nonInteractive.d.ts.map +1 -0
  114. package/dist/src/lib/nonInteractive.js +111 -0
  115. package/dist/src/lib/nonInteractive.js.map +1 -0
  116. package/dist/src/lib/oauth.d.ts +9 -0
  117. package/dist/src/lib/oauth.d.ts.map +1 -0
  118. package/dist/src/lib/oauth.js +62 -0
  119. package/dist/src/lib/oauth.js.map +1 -0
  120. package/dist/src/lib/onboarding.d.ts +8 -0
  121. package/dist/src/lib/onboarding.d.ts.map +1 -0
  122. package/dist/src/lib/onboarding.js +35 -0
  123. package/dist/src/lib/onboarding.js.map +1 -0
  124. package/dist/src/lib/packageManagerCommands.d.ts +11 -0
  125. package/dist/src/lib/packageManagerCommands.d.ts.map +1 -0
  126. package/dist/src/lib/packageManagerCommands.js +34 -0
  127. package/dist/src/lib/packageManagerCommands.js.map +1 -0
  128. package/dist/src/lib/process.d.ts.map +1 -1
  129. package/dist/src/lib/process.js +9 -0
  130. package/dist/src/lib/process.js.map +1 -1
  131. package/dist/src/lib/projectManifest.d.ts +67 -0
  132. package/dist/src/lib/projectManifest.d.ts.map +1 -0
  133. package/dist/src/lib/projectManifest.js +134 -0
  134. package/dist/src/lib/projectManifest.js.map +1 -0
  135. package/dist/src/lib/release.d.ts +9 -0
  136. package/dist/src/lib/release.d.ts.map +1 -0
  137. package/dist/src/lib/release.js +48 -0
  138. package/dist/src/lib/release.js.map +1 -0
  139. package/dist/src/lib/rootCommand.d.ts +15 -0
  140. package/dist/src/lib/rootCommand.d.ts.map +1 -0
  141. package/dist/src/lib/rootCommand.js +17 -0
  142. package/dist/src/lib/rootCommand.js.map +1 -0
  143. package/dist/src/lib/schemas.d.ts +15 -6
  144. package/dist/src/lib/schemas.d.ts.map +1 -1
  145. package/dist/src/lib/schemas.js +8 -1
  146. package/dist/src/lib/schemas.js.map +1 -1
  147. package/dist/src/lib/semver.d.ts +10 -0
  148. package/dist/src/lib/semver.d.ts.map +1 -0
  149. package/dist/src/lib/semver.js +51 -0
  150. package/dist/src/lib/semver.js.map +1 -0
  151. package/dist/src/lib/types.d.ts +5 -1
  152. package/dist/src/lib/types.d.ts.map +1 -1
  153. package/dist/src/steps/configurePrisma.d.ts.map +1 -1
  154. package/dist/src/steps/configurePrisma.js +18 -23
  155. package/dist/src/steps/configurePrisma.js.map +1 -1
  156. package/dist/src/steps/configureReadme.d.ts +4 -0
  157. package/dist/src/steps/configureReadme.d.ts.map +1 -0
  158. package/dist/src/steps/configureReadme.js +22 -0
  159. package/dist/src/steps/configureReadme.js.map +1 -0
  160. package/dist/src/steps/createProject.d.ts.map +1 -1
  161. package/dist/src/steps/createProject.js +16 -170
  162. package/dist/src/steps/createProject.js.map +1 -1
  163. package/dist/src/steps/finalSetup.d.ts +3 -2
  164. package/dist/src/steps/finalSetup.d.ts.map +1 -1
  165. package/dist/src/steps/finalSetup.js +14 -9
  166. package/dist/src/steps/finalSetup.js.map +1 -1
  167. package/dist/src/steps/installDeps.d.ts +1 -0
  168. package/dist/src/steps/installDeps.d.ts.map +1 -1
  169. package/dist/src/steps/installDeps.js +11 -0
  170. package/dist/src/steps/installDeps.js.map +1 -1
  171. package/dist/src/steps/prompts.d.ts.map +1 -1
  172. package/dist/src/steps/prompts.js +32 -13
  173. package/dist/src/steps/prompts.js.map +1 -1
  174. package/dist/src/utils/output.d.ts.map +1 -1
  175. package/dist/src/utils/output.js +23 -11
  176. package/dist/src/utils/output.js.map +1 -1
  177. package/package.json +5 -4
  178. package/templates/express-auth/README.md +21 -12
  179. package/templates/express-auth/package.json +11 -7
  180. package/templates/express-auth/src/config/redis.ts +109 -0
  181. package/templates/express-auth/src/server.ts +2 -0
  182. package/templates/express-auth+/README.md +25 -18
  183. package/templates/express-auth+/package.json +11 -7
  184. package/templates/express-auth+/src/auth/auth.ts +2 -0
  185. package/templates/express-auth+/src/auth/controllers/password.controller.ts +12 -1
  186. package/templates/express-auth+/src/auth/routes/password.route.ts +1 -0
  187. package/templates/express-auth+/src/config/redis.ts +109 -0
  188. package/templates/express-auth+/src/utils/security.ts +12 -0
  189. package/templates/express-base/README.md +21 -12
  190. package/templates/express-base/package.json +11 -8
  191. package/templates/express-base/src/.env.example +1 -1
  192. package/templates/express-base/src/config/redis.ts +109 -0
  193. package/templates/express-base/src/server.ts +2 -0
  194. package/templates/fullstack/.env.example +3 -2
  195. package/templates/fullstack/PRESET_CONTRACT.md +7 -3
  196. package/templates/fullstack/README.md +45 -7
  197. package/templates/fullstack/apps/api/package.json +6 -4
  198. package/templates/fullstack/apps/api/prisma/migrations/20260721000000_init/migration.sql +163 -0
  199. package/templates/fullstack/apps/api/prisma/migrations/migration_lock.toml +3 -0
  200. package/templates/fullstack/apps/api/src/auth/authenik8.ts +13 -4
  201. package/templates/fullstack/apps/api/src/config/env.ts +9 -1
  202. package/templates/fullstack/apps/api/src/config/logger.ts +21 -11
  203. package/templates/fullstack/apps/api/tests/logger.test.ts +43 -0
  204. package/templates/fullstack/apps/web/package.json +3 -1
  205. package/templates/fullstack/apps/web/src/App.tsx +1 -1
  206. package/templates/fullstack/apps/web/src/auth/RouteGuards.tsx +1 -1
  207. package/templates/fullstack/apps/web/src/components/AppShell.tsx +90 -45
  208. package/templates/fullstack/apps/web/src/components/AuthShell.tsx +10 -7
  209. package/templates/fullstack/apps/web/src/components/Page.tsx +6 -3
  210. package/templates/fullstack/apps/web/src/features/projects/ProjectPages.tsx +1 -1
  211. package/templates/fullstack/apps/web/src/main.tsx +13 -6
  212. package/templates/fullstack/apps/web/src/pages/DashboardPage.tsx +163 -23
  213. package/templates/fullstack/apps/web/src/pages/StatusPages.tsx +1 -1
  214. package/templates/fullstack/apps/web/src/pages/auth/LoginPage.tsx +93 -17
  215. package/templates/fullstack/apps/web/src/pages/auth/OAuthCallbackPage.tsx +1 -1
  216. package/templates/fullstack/apps/web/src/pages/auth/RecoveryPages.tsx +1 -1
  217. package/templates/fullstack/apps/web/src/pages/auth/RegisterPage.tsx +1 -1
  218. package/templates/fullstack/apps/web/src/pages/auth/VerifyEmailPage.tsx +1 -1
  219. package/templates/fullstack/apps/web/src/styles.css +119 -43
  220. package/templates/fullstack/apps/web/vite.config.ts +12 -0
  221. package/templates/fullstack/docker-compose.yml +2 -2
  222. package/templates/fullstack/gitignore.template +1 -0
  223. package/templates/fullstack/package.json +17 -8
  224. package/templates/fullstack/scripts/run-local.mjs +157 -0
  225. package/templates/prisma/postgresql/.env.example +1 -2
  226. package/templates/prisma/sqlite/.env.example +1 -2
  227. package/templates/prisma/sqlite/client.ts +2 -2
@@ -0,0 +1,14 @@
1
+ import type { PackageManager, StepName } from "./types.js";
2
+ export type ShutdownSignal = "SIGINT" | "SIGTERM";
3
+ type RestartCommandOptions = {
4
+ projectName: string;
5
+ productionReady: boolean;
6
+ resume: boolean;
7
+ skipInstall?: boolean;
8
+ packageManager?: PackageManager;
9
+ };
10
+ export declare function canResumeSetup(step: StepName): boolean;
11
+ export declare function restartCommand(options: RestartCommandOptions): string;
12
+ export declare function interruptionExitCode(signal: ShutdownSignal): number;
13
+ export {};
14
+ //# sourceMappingURL=interruption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interruption.d.ts","sourceRoot":"","sources":["../../../src/lib/interruption.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElD,KAAK,qBAAqB,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEtD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CASrE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEnE"}
@@ -0,0 +1,16 @@
1
+ export function canResumeSetup(step) {
2
+ return step !== "start" && step !== "done";
3
+ }
4
+ export function restartCommand(options) {
5
+ const flags = [
6
+ ...(options.packageManager ? ["--package-manager", options.packageManager] : []),
7
+ ...(options.skipInstall ? ["--no-install"] : []),
8
+ ...(options.productionReady ? ["--production-ready"] : []),
9
+ ...(options.resume ? ["--resume"] : []),
10
+ ];
11
+ return ["npx", "create-authenik8-app", options.projectName, ...flags].join(" ");
12
+ }
13
+ export function interruptionExitCode(signal) {
14
+ return signal === "SIGINT" ? 130 : 143;
15
+ }
16
+ //# sourceMappingURL=interruption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interruption.js","sourceRoot":"","sources":["../../../src/lib/interruption.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,sBAAsB,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACzC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { CliArguments } from "./args.js";
2
+ import type { CliState } from "./types.js";
3
+ type NonInteractiveEnvironment = {
4
+ bunAvailable: boolean;
5
+ };
6
+ export declare function resolveNonInteractiveAnswers(options: CliArguments, environment: NonInteractiveEnvironment): Partial<CliState>;
7
+ export {};
8
+ //# sourceMappingURL=nonInteractive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonInteractive.d.ts","sourceRoot":"","sources":["../../../src/lib/nonInteractive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,KAAK,EAAE,QAAQ,EAA8B,MAAM,YAAY,CAAC;AAEvE,KAAK,yBAAyB,GAAG;IAC/B,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AA8BF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,yBAAyB,GACrC,OAAO,CAAC,QAAQ,CAAC,CAyEnB"}
@@ -0,0 +1,111 @@
1
+ import { firstZodIssue, promptAnswersSchema } from "./schemas.js";
2
+ function fail(message) {
3
+ throw new Error(`Invalid non-interactive configuration: ${message}`);
4
+ }
5
+ function rejectOAuthOption(options) {
6
+ if (options.oauthProviders !== undefined) {
7
+ fail("--oauth/--no-oauth only applies to auth-oauth and fullstack presets");
8
+ }
9
+ }
10
+ function productionRuntime(options, environment) {
11
+ if (!options.productionReady) {
12
+ if (options.runtime !== undefined) {
13
+ fail("--runtime requires --production-ready for Express presets");
14
+ }
15
+ return undefined;
16
+ }
17
+ const runtime = options.runtime ?? "node";
18
+ if (runtime === "bun" && !environment.bunAvailable) {
19
+ fail("the Bun runtime was selected but bun is not available on PATH");
20
+ }
21
+ return runtime;
22
+ }
23
+ export function resolveNonInteractiveAnswers(options, environment) {
24
+ if (!options.nonInteractive)
25
+ fail("--non-interactive or --yes is required");
26
+ if (options.resume)
27
+ fail("--resume cannot be combined with non-interactive generation");
28
+ const authMode = options.preset ?? fail("--preset is required");
29
+ const useGit = options.useGit ?? false;
30
+ let raw;
31
+ if (authMode === "base") {
32
+ rejectOAuthOption(options);
33
+ if (options.usePrisma === undefined)
34
+ fail("the base preset requires --prisma or --no-prisma");
35
+ if (options.usePrisma && !options.database)
36
+ fail("--prisma requires --database sqlite or postgresql");
37
+ if (!options.usePrisma && options.database)
38
+ fail("--database cannot be used with --no-prisma");
39
+ const runtime = productionRuntime(options, environment);
40
+ raw = {
41
+ framework: "Express",
42
+ authMode,
43
+ usePrisma: options.usePrisma,
44
+ ...(options.database ? { database: options.database } : {}),
45
+ useGit,
46
+ ...(runtime ? { runtime } : {}),
47
+ };
48
+ }
49
+ else if (authMode === "auth") {
50
+ rejectOAuthOption(options);
51
+ if (options.usePrisma === false)
52
+ fail("the auth preset requires Prisma");
53
+ if (!options.database)
54
+ fail("the auth preset requires --database sqlite or postgresql");
55
+ const runtime = productionRuntime(options, environment);
56
+ raw = {
57
+ framework: "Express",
58
+ authMode,
59
+ usePrisma: true,
60
+ database: options.database,
61
+ useGit,
62
+ ...(runtime ? { runtime } : {}),
63
+ };
64
+ }
65
+ else if (authMode === "auth-oauth") {
66
+ if (options.usePrisma === false)
67
+ fail("the auth-oauth preset requires Prisma");
68
+ if (!options.database)
69
+ fail("the auth-oauth preset requires --database sqlite or postgresql");
70
+ const oauthProviders = options.oauthProviders;
71
+ if (!oauthProviders?.length)
72
+ fail("the auth-oauth preset requires --oauth google, github, or google,github");
73
+ const runtime = productionRuntime(options, environment);
74
+ raw = {
75
+ framework: "Express",
76
+ authMode,
77
+ usePrisma: true,
78
+ database: options.database,
79
+ oauthProviders,
80
+ useGit,
81
+ ...(runtime ? { runtime } : {}),
82
+ };
83
+ }
84
+ else {
85
+ if (options.productionReady)
86
+ fail("--production-ready configures PM2 and is only available for Express presets");
87
+ if (options.usePrisma === false)
88
+ fail("the fullstack preset requires Prisma");
89
+ if (options.database && options.database !== "postgresql") {
90
+ fail("the fullstack preset requires PostgreSQL");
91
+ }
92
+ if (options.runtime && options.runtime !== "node") {
93
+ fail("the fullstack preset requires the Node.js runtime");
94
+ }
95
+ if (options.oauthProviders === undefined) {
96
+ fail("the fullstack preset requires --oauth google,github or --no-oauth");
97
+ }
98
+ const oauthProviders = options.oauthProviders;
99
+ raw = {
100
+ framework: "Express",
101
+ authMode,
102
+ authMethods: ["password", ...oauthProviders],
103
+ useGit,
104
+ };
105
+ }
106
+ const result = promptAnswersSchema.safeParse(raw);
107
+ if (!result.success)
108
+ fail(firstZodIssue(result.error));
109
+ return result.data;
110
+ }
111
+ //# sourceMappingURL=nonInteractive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonInteractive.js","sourceRoot":"","sources":["../../../src/lib/nonInteractive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAOlE,SAAS,IAAI,CAAC,OAAe;IAC3B,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAqB;IAC9C,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAqB,EACrB,WAAsC;IAEtC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QACnD,IAAI,CAAC,+DAA+D,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAAqB,EACrB,WAAsC;IAEtC,IAAI,CAAC,OAAO,CAAC,cAAc;QAAE,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,6DAA6D,CAAC,CAAC;IACxF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,IAAI,GAA4B,CAAC;IAEjC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC9F,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACtG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACxD,GAAG,GAAG;YACJ,SAAS,EAAE,SAAS;YACpB,QAAQ;YACR,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM;YACN,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK;YAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,0DAA0D,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACxD,GAAG,GAAG;YACJ,SAAS,EAAE,SAAS;YACpB,QAAQ;YACR,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM;YACN,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK;YAAE,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC9F,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,cAAc,EAAE,MAAM;YAAE,IAAI,CAAC,yEAAyE,CAAC,CAAC;QAC7G,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACxD,GAAG,GAAG;YACJ,SAAS,EAAE,SAAS;YACpB,QAAQ;YACR,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc;YACd,MAAM;YACN,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,OAAO,CAAC,eAAe;YAAE,IAAI,CAAC,6EAA6E,CAAC,CAAC;QACjH,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK;YAAE,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1D,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAClD,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,cAAc,GAAwB,OAAO,CAAC,cAAc,CAAC;QACnE,GAAG,GAAG;YACJ,SAAS,EAAE,SAAS;YACpB,QAAQ;YACR,WAAW,EAAE,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC;YAC5C,MAAM;SACP,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const oauthProviders: readonly ["google", "github"];
2
+ export type OAuthProvider = (typeof oauthProviders)[number];
3
+ export type OAuthEnvironmentPreset = "express" | "fullstack";
4
+ export declare function supportedOAuthProviders(providers: readonly string[] | undefined): OAuthProvider[];
5
+ export declare function filterOAuthEnvironment(source: string, enabledProviders: readonly OAuthProvider[]): string;
6
+ /** Add only missing provider keys; existing credentials are never rewritten. */
7
+ export declare function ensureOAuthEnvironment(source: string, provider: OAuthProvider, preset: OAuthEnvironmentPreset): string;
8
+ export declare function configureOAuthEnvironmentFiles(targetDir: string, enabledProviders: readonly OAuthProvider[]): Promise<void>;
9
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/lib/oauth.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,+BAAgC,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,WAAW,CAAC;AAE7D,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACvC,aAAa,EAAE,CAIjB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,SAAS,aAAa,EAAE,GACzC,MAAM,CAgBR;AA8BD,gFAAgF;AAChF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAUR;AAED,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,SAAS,aAAa,EAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,62 @@
1
+ import fs from "fs-extra";
2
+ import path from "node:path";
3
+ export const oauthProviders = ["google", "github"];
4
+ export function supportedOAuthProviders(providers) {
5
+ return (providers ?? []).filter((provider) => oauthProviders.includes(provider));
6
+ }
7
+ export function filterOAuthEnvironment(source, enabledProviders) {
8
+ const enabledPrefixes = new Set(enabledProviders.map((provider) => provider.toUpperCase()));
9
+ return source
10
+ .replace(/\r\n/g, "\n")
11
+ .split("\n")
12
+ .filter((line) => {
13
+ if (line.startsWith("AUTHENIK8_OAUTH_PROVIDERS="))
14
+ return false;
15
+ const provider = line.match(/^(GOOGLE|GITHUB)_/)?.[1];
16
+ return !provider || enabledPrefixes.has(provider);
17
+ })
18
+ .join("\n")
19
+ .replace(/\n*$/, "\n");
20
+ }
21
+ function environmentEntries(provider, preset) {
22
+ const upper = provider.toUpperCase();
23
+ const callbackPath = preset === "fullstack"
24
+ ? `/api/auth/oauth/${provider}/callback`
25
+ : `/auth/${provider}/callback`;
26
+ const clientId = preset === "express" ? `"change-me-${provider}-client-id"` : "";
27
+ const clientSecret = preset === "express"
28
+ ? `"change-me-${provider}-client-secret"`
29
+ : "";
30
+ return [
31
+ [`${upper}_CLIENT_ID`, clientId],
32
+ [`${upper}_CLIENT_SECRET`, clientSecret],
33
+ [`${upper}_REDIRECT_URI`, preset === "express"
34
+ ? `"http://localhost:3000${callbackPath}"`
35
+ : `http://localhost:3000${callbackPath}`],
36
+ ];
37
+ }
38
+ function hasEnvironmentName(source, name) {
39
+ return source.split(/\r?\n/).some((line) => new RegExp(`^(?:export\\s+)?${name}\\s*=`).test(line));
40
+ }
41
+ /** Add only missing provider keys; existing credentials are never rewritten. */
42
+ export function ensureOAuthEnvironment(source, provider, preset) {
43
+ const normalized = source.replace(/\r\n/g, "\n");
44
+ const newline = source.includes("\r\n") ? "\r\n" : "\n";
45
+ const additions = environmentEntries(provider, preset)
46
+ .filter(([name]) => !hasEnvironmentName(normalized, name))
47
+ .map(([name, value]) => `${name}=${value}`);
48
+ if (additions.length === 0)
49
+ return source;
50
+ const separator = source.length === 0 || source.endsWith("\n") ? "" : newline;
51
+ return `${source}${separator}${additions.join(newline)}${newline}`;
52
+ }
53
+ export async function configureOAuthEnvironmentFiles(targetDir, enabledProviders) {
54
+ for (const filename of [".env", ".env.example"]) {
55
+ const envPath = path.join(targetDir, filename);
56
+ if (!(await fs.pathExists(envPath)))
57
+ continue;
58
+ const source = await fs.readFile(envPath, "utf8");
59
+ await fs.writeFile(envPath, filterOAuthEnvironment(source, enabledProviders));
60
+ }
61
+ }
62
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/lib/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAK5D,MAAM,UAAU,uBAAuB,CACrC,SAAwC;IAExC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAA6B,EAAE,CACtE,cAAc,CAAC,QAAQ,CAAC,QAAyB,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,gBAA0C;IAE1C,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAC3D,CAAC;IAEF,OAAO,MAAM;SACV,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;SACtB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,IAAI,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAAC;YAAE,OAAO,KAAK,CAAC;QAEhE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAuB,EACvB,MAA8B;IAE9B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,MAAM,KAAK,WAAW;QACzC,CAAC,CAAC,mBAAmB,QAAQ,WAAW;QACxC,CAAC,CAAC,SAAS,QAAQ,WAAW,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,QAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,MAAM,YAAY,GAAG,MAAM,KAAK,SAAS;QACvC,CAAC,CAAC,cAAc,QAAQ,iBAAiB;QACzC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,CAAC,GAAG,KAAK,YAAY,EAAE,QAAQ,CAAC;QAChC,CAAC,GAAG,KAAK,gBAAgB,EAAE,YAAY,CAAC;QACxC,CAAC,GAAG,KAAK,eAAe,EAAE,MAAM,KAAK,SAAS;gBAC5C,CAAC,CAAC,yBAAyB,YAAY,GAAG;gBAC1C,CAAC,CAAC,wBAAwB,YAAY,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,IAAY;IACtD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,IAAI,MAAM,CAAC,mBAAmB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,QAAuB,EACvB,MAA8B;IAE9B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC;SACnD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IAE9C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9E,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,SAAiB,EACjB,gBAA0C;IAE1C,KAAK,MAAM,QAAQ,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAAE,SAAS;QAE9C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,SAAS,CAChB,OAAO,EACP,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CACjD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AuthMode, PackageManager } from "./types.js";
2
+ export type FirstSuccessGuide = {
3
+ title: string;
4
+ steps: readonly string[];
5
+ };
6
+ export declare function doctorCommand(packageManager: PackageManager): string;
7
+ export declare function firstSuccessGuide(authMode: AuthMode): FirstSuccessGuide;
8
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../../src/lib/onboarding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,wBAAgB,aAAa,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CAMpE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,iBAAiB,CA+BvE"}
@@ -0,0 +1,35 @@
1
+ import { packageCommand } from "./packageManagerCommands.js";
2
+ export function doctorCommand(packageManager) {
3
+ return packageCommand(packageManager, "create-authenik8-app@latest", "doctor");
4
+ }
5
+ export function firstSuccessGuide(authMode) {
6
+ if (authMode === "fullstack") {
7
+ return {
8
+ title: "Sign in to the generated application",
9
+ steps: [
10
+ "Open http://localhost:5173 after the development server starts.",
11
+ "Use SEED_ADMIN_EMAIL and SEED_ADMIN_PASSWORD from .env.",
12
+ "Change the seeded password before sharing the environment.",
13
+ ],
14
+ };
15
+ }
16
+ if (authMode === "auth" || authMode === "auth-oauth") {
17
+ return {
18
+ title: "Complete an authenticated API request",
19
+ steps: [
20
+ "Open README.md and follow the 3-Minute Verification.",
21
+ "Register, sign in, and call GET /protected with the access token.",
22
+ "Rotate the refresh token once and replace the previous value.",
23
+ ],
24
+ };
25
+ }
26
+ return {
27
+ title: "Verify the JWT boundary",
28
+ steps: [
29
+ "Open README.md and follow the 3-Minute Verification.",
30
+ "Confirm GET /public succeeds and GET /protected rejects a missing token.",
31
+ "Connect your trusted identity source before calling auth.issueTokens().",
32
+ ],
33
+ };
34
+ }
35
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../../src/lib/onboarding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQ7D,MAAM,UAAU,aAAa,CAAC,cAA8B;IAC1D,OAAO,cAAc,CACnB,cAAc,EACd,6BAA6B,EAC7B,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,sCAAsC;YAC7C,KAAK,EAAE;gBACL,iEAAiE;gBACjE,yDAAyD;gBACzD,4DAA4D;aAC7D;SACF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACrD,OAAO;YACL,KAAK,EAAE,uCAAuC;YAC9C,KAAK,EAAE;gBACL,sDAAsD;gBACtD,mEAAmE;gBACnE,+DAA+D;aAChE;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,yBAAyB;QAChC,KAAK,EAAE;YACL,sDAAsD;YACtD,0EAA0E;YAC1E,yEAAyE;SAC1E;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { PackageManager } from "./types.js";
2
+ export declare function installCommand(packageManager: PackageManager): string;
3
+ export declare function runScriptCommand(packageManager: PackageManager, script: string): string;
4
+ export declare function packageCommand(packageManager: PackageManager, packageName: string, arguments_?: string): string;
5
+ export declare function binaryCommand(packageManager: PackageManager, binary: string, arguments_?: string): string;
6
+ export declare function productionReadmeCommands(packageManager: PackageManager): {
7
+ start: string;
8
+ logs: string;
9
+ stop: string;
10
+ };
11
+ //# sourceMappingURL=packageManagerCommands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageManagerCommands.d.ts","sourceRoot":"","sources":["../../../src/lib/packageManagerCommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,cAAc,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CAErE;AAED,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAgB,cAAc,CAC5B,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,UAAU,SAAK,GACd,MAAM,CASR;AAED,wBAAgB,aAAa,CAC3B,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,UAAU,SAAK,GACd,MAAM,CASR;AAED,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,cAAc,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAM/C"}
@@ -0,0 +1,34 @@
1
+ export function installCommand(packageManager) {
2
+ return `${packageManager} install`;
3
+ }
4
+ export function runScriptCommand(packageManager, script) {
5
+ return `${packageManager} run ${script}`;
6
+ }
7
+ export function packageCommand(packageManager, packageName, arguments_ = "") {
8
+ const suffix = arguments_ ? ` ${arguments_}` : "";
9
+ if (packageManager === "pnpm") {
10
+ return `pnpm dlx ${packageName}${suffix}`;
11
+ }
12
+ if (packageManager === "bun") {
13
+ return `bunx ${packageName}${suffix}`;
14
+ }
15
+ return `npx ${packageName}${suffix}`;
16
+ }
17
+ export function binaryCommand(packageManager, binary, arguments_ = "") {
18
+ const suffix = arguments_ ? ` ${arguments_}` : "";
19
+ if (packageManager === "pnpm") {
20
+ return `pnpm exec ${binary}${suffix}`;
21
+ }
22
+ if (packageManager === "bun") {
23
+ return `bunx ${binary}${suffix}`;
24
+ }
25
+ return `npx ${binary}${suffix}`;
26
+ }
27
+ export function productionReadmeCommands(packageManager) {
28
+ return {
29
+ start: runScriptCommand(packageManager, "pm2:start"),
30
+ logs: runScriptCommand(packageManager, "pm2:logs"),
31
+ stop: runScriptCommand(packageManager, "pm2:stop"),
32
+ };
33
+ }
34
+ //# sourceMappingURL=packageManagerCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageManagerCommands.js","sourceRoot":"","sources":["../../../src/lib/packageManagerCommands.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,cAA8B;IAC3D,OAAO,GAAG,cAAc,UAAU,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,cAA8B,EAC9B,MAAc;IAEd,OAAO,GAAG,cAAc,QAAQ,MAAM,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,cAA8B,EAC9B,WAAmB,EACnB,UAAU,GAAG,EAAE;IAEf,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,YAAY,WAAW,GAAG,MAAM,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,QAAQ,WAAW,GAAG,MAAM,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,WAAW,GAAG,MAAM,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,cAA8B,EAC9B,MAAc,EACd,UAAU,GAAG,EAAE;IAEf,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,aAAa,MAAM,GAAG,MAAM,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,QAAQ,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,MAAM,GAAG,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,cAA8B;IAE9B,OAAO;QACL,KAAK,EAAE,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC;QACpD,IAAI,EAAE,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC;QAClD,IAAI,EAAE,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC;KACnD,CAAC;AACJ,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;AAY7C,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ClF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,kBAAmB,QAc3D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,kBAAmB,UAQlE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,kBAAmB,GAAG,OAAO,CAQ/E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,kBAAmB,GAAG,OAAO,CAQ3E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,kBAAmB,GAAG,OAAO,CAY1E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE9D;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;AAY7C,wBAAgB,GAAG,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,kBAAmB,QAoB3D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,kBAAmB,UAQlE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,kBAAmB,GAAG,OAAO,CAQ/E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,kBAAmB,GAAG,OAAO,CAQ3E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,kBAAmB,GAAG,OAAO,CAY1E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,WAQ9C;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,iBAIlD"}
@@ -14,6 +14,7 @@ export function run(cmd, args, options) {
14
14
  stdio: options.stdio ?? "ignore",
15
15
  env: options.env,
16
16
  shell: process.platform === "win32",
17
+ detached: process.platform !== "win32",
17
18
  windowsHide: true,
18
19
  });
19
20
  activeProcesses.add(child);
@@ -55,6 +56,14 @@ export function killAllProcesses(platform = process.platform) {
55
56
  windowsHide: true,
56
57
  });
57
58
  }
59
+ else if (proc.pid) {
60
+ try {
61
+ process.kill(-proc.pid, "SIGTERM");
62
+ }
63
+ catch {
64
+ proc.kill("SIGTERM");
65
+ }
66
+ }
58
67
  else {
59
68
  proc.kill("SIGTERM");
60
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/lib/process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/lib/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { z } from "zod";
2
+ import type { AuthMode, Database, OAuthProviderName, PackageManager, Runtime } from "./types.js";
3
+ export declare const PROJECT_MANIFEST_FILENAME = "authenik8.json";
4
+ export declare const PROJECT_MANIFEST_VERSION: 1;
5
+ export declare const projectManifestSchema: z.ZodObject<{
6
+ schemaVersion: z.ZodLiteral<1>;
7
+ projectName: z.ZodString;
8
+ generatedBy: z.ZodObject<{
9
+ package: z.ZodLiteral<"create-authenik8-app">;
10
+ version: z.ZodString;
11
+ }, z.core.$strict>;
12
+ engine: z.ZodObject<{
13
+ package: z.ZodLiteral<"authenik8-core">;
14
+ version: z.ZodString;
15
+ }, z.core.$strict>;
16
+ preset: z.ZodEnum<{
17
+ fullstack: "fullstack";
18
+ base: "base";
19
+ auth: "auth";
20
+ "auth-oauth": "auth-oauth";
21
+ }>;
22
+ packageManager: z.ZodEnum<{
23
+ npm: "npm";
24
+ pnpm: "pnpm";
25
+ bun: "bun";
26
+ }>;
27
+ runtime: z.ZodEnum<{
28
+ bun: "bun";
29
+ node: "node";
30
+ }>;
31
+ database: z.ZodNullable<z.ZodEnum<{
32
+ sqlite: "sqlite";
33
+ postgresql: "postgresql";
34
+ }>>;
35
+ features: z.ZodObject<{
36
+ prisma: z.ZodBoolean;
37
+ oauthProviders: z.ZodArray<z.ZodEnum<{
38
+ google: "google";
39
+ github: "github";
40
+ }>>;
41
+ pm2: z.ZodBoolean;
42
+ }, z.core.$strict>;
43
+ }, z.core.$strict>;
44
+ export type ProjectManifest = z.infer<typeof projectManifestSchema>;
45
+ export type ProjectManifestInput = {
46
+ projectName: string;
47
+ generatorVersion: string;
48
+ preset: AuthMode;
49
+ packageManager: PackageManager;
50
+ runtime: Runtime;
51
+ database?: Database;
52
+ usePrisma: boolean;
53
+ oauthProviders?: OAuthProviderName[];
54
+ productionReady: boolean;
55
+ };
56
+ export type ProjectManifestReadResult = {
57
+ status: "valid";
58
+ manifest: ProjectManifest;
59
+ } | {
60
+ status: "missing";
61
+ } | {
62
+ status: "invalid";
63
+ message: string;
64
+ };
65
+ export declare function writeProjectManifest(targetDir: string, input: ProjectManifestInput): Promise<ProjectManifest>;
66
+ export declare function readProjectManifest(rootDir: string): Promise<ProjectManifestReadResult>;
67
+ //# sourceMappingURL=projectManifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectManifest.d.ts","sourceRoot":"","sources":["../../../src/lib/projectManifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAC;AAInD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4DhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,QAAQ,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACjC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAgB3C,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,CAAC,CA+B1B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAkB7F"}
@@ -0,0 +1,134 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import path from "node:path";
3
+ import fs from "fs-extra";
4
+ import { z } from "zod";
5
+ import { authModeSchema, databaseSchema, firstZodIssue, oauthProvidersSchema, packageManagerSchema, projectNameSchema, runtimeSchema, } from "./schemas.js";
6
+ export const PROJECT_MANIFEST_FILENAME = "authenik8.json";
7
+ export const PROJECT_MANIFEST_VERSION = 1;
8
+ const packageVersionSchema = z.string().trim().min(1).max(100);
9
+ export const projectManifestSchema = z.strictObject({
10
+ schemaVersion: z.literal(PROJECT_MANIFEST_VERSION),
11
+ projectName: projectNameSchema,
12
+ generatedBy: z.strictObject({
13
+ package: z.literal("create-authenik8-app"),
14
+ version: packageVersionSchema,
15
+ }),
16
+ engine: z.strictObject({
17
+ package: z.literal("authenik8-core"),
18
+ version: packageVersionSchema,
19
+ }),
20
+ preset: authModeSchema,
21
+ packageManager: packageManagerSchema,
22
+ runtime: runtimeSchema,
23
+ database: databaseSchema.nullable(),
24
+ features: z.strictObject({
25
+ prisma: z.boolean(),
26
+ oauthProviders: oauthProvidersSchema,
27
+ pm2: z.boolean(),
28
+ }),
29
+ }).superRefine((manifest, context) => {
30
+ const issue = (path, message) => context.addIssue({
31
+ code: "custom",
32
+ path,
33
+ message,
34
+ });
35
+ if (manifest.preset === "fullstack") {
36
+ if (!manifest.features.prisma)
37
+ issue(["features", "prisma"], "fullstack requires Prisma");
38
+ if (manifest.database !== "postgresql")
39
+ issue(["database"], "fullstack requires PostgreSQL");
40
+ if (manifest.runtime !== "node")
41
+ issue(["runtime"], "fullstack requires Node.js");
42
+ if (manifest.packageManager !== "npm")
43
+ issue(["packageManager"], "fullstack requires npm workspaces");
44
+ if (manifest.features.pm2)
45
+ issue(["features", "pm2"], "PM2 generation only applies to Express presets");
46
+ }
47
+ if (manifest.preset === "base") {
48
+ if (manifest.features.prisma !== (manifest.database !== null)) {
49
+ issue(["database"], "database must be null exactly when Prisma is disabled");
50
+ }
51
+ if (manifest.features.oauthProviders.length > 0) {
52
+ issue(["features", "oauthProviders"], "the base preset does not include OAuth providers");
53
+ }
54
+ }
55
+ if (manifest.preset === "auth" || manifest.preset === "auth-oauth") {
56
+ if (!manifest.features.prisma || manifest.database === null) {
57
+ issue(["features", "prisma"], `${manifest.preset} requires Prisma and a database`);
58
+ }
59
+ }
60
+ if (manifest.preset !== "fullstack" && !manifest.features.pm2 && manifest.runtime !== "node") {
61
+ issue(["runtime"], "Express presets use Node.js unless PM2 runtime generation is enabled");
62
+ }
63
+ if (manifest.preset === "auth" && manifest.features.oauthProviders.length > 0) {
64
+ issue(["features", "oauthProviders"], "the auth preset does not include OAuth providers");
65
+ }
66
+ if (manifest.preset === "auth-oauth" && manifest.features.oauthProviders.length === 0) {
67
+ issue(["features", "oauthProviders"], "the auth-oauth preset requires an OAuth provider");
68
+ }
69
+ });
70
+ async function declaredEngineVersion(targetDir, preset) {
71
+ const packagePath = preset === "fullstack"
72
+ ? path.join(targetDir, "apps/api/package.json")
73
+ : path.join(targetDir, "package.json");
74
+ const packageJson = await fs.readJson(packagePath);
75
+ const version = packageJson.dependencies?.["authenik8-core"]
76
+ ?? packageJson.devDependencies?.["authenik8-core"];
77
+ if (!version?.trim())
78
+ throw new Error("Generated project does not declare authenik8-core");
79
+ return version;
80
+ }
81
+ export async function writeProjectManifest(targetDir, input) {
82
+ const manifest = projectManifestSchema.parse({
83
+ schemaVersion: PROJECT_MANIFEST_VERSION,
84
+ projectName: input.projectName,
85
+ generatedBy: {
86
+ package: "create-authenik8-app",
87
+ version: input.generatorVersion,
88
+ },
89
+ engine: {
90
+ package: "authenik8-core",
91
+ version: await declaredEngineVersion(targetDir, input.preset),
92
+ },
93
+ preset: input.preset,
94
+ packageManager: input.packageManager,
95
+ runtime: input.runtime,
96
+ database: input.database ?? null,
97
+ features: {
98
+ prisma: input.usePrisma,
99
+ oauthProviders: input.oauthProviders ?? [],
100
+ pm2: input.productionReady,
101
+ },
102
+ });
103
+ const manifestPath = path.join(targetDir, PROJECT_MANIFEST_FILENAME);
104
+ const temporaryPath = `${manifestPath}.${process.pid}-${randomUUID()}.tmp`;
105
+ try {
106
+ await fs.writeJson(temporaryPath, manifest, { spaces: 2 });
107
+ await fs.move(temporaryPath, manifestPath, { overwrite: true });
108
+ }
109
+ finally {
110
+ await fs.remove(temporaryPath);
111
+ }
112
+ return manifest;
113
+ }
114
+ export async function readProjectManifest(rootDir) {
115
+ const manifestPath = path.join(rootDir, PROJECT_MANIFEST_FILENAME);
116
+ if (!(await fs.pathExists(manifestPath)))
117
+ return { status: "missing" };
118
+ let source;
119
+ try {
120
+ source = await fs.readJson(manifestPath);
121
+ }
122
+ catch {
123
+ return { status: "invalid", message: `${PROJECT_MANIFEST_FILENAME} is not valid JSON` };
124
+ }
125
+ const result = projectManifestSchema.safeParse(source);
126
+ if (!result.success) {
127
+ return {
128
+ status: "invalid",
129
+ message: `${PROJECT_MANIFEST_FILENAME} is invalid: ${firstZodIssue(result.error)}`,
130
+ };
131
+ }
132
+ return { status: "valid", manifest: result.data };
133
+ }
134
+ //# sourceMappingURL=projectManifest.js.map