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.
- package/README.md +34 -516
- package/dist/src/bin/cli.d.ts +3 -0
- package/dist/src/bin/cli.d.ts.map +1 -0
- package/dist/src/bin/cli.js +112 -0
- package/dist/src/bin/cli.js.map +1 -0
- package/dist/src/bin/index.js +108 -23
- package/dist/src/bin/index.js.map +1 -1
- package/dist/src/commands/add/apply.d.ts +6 -0
- package/dist/src/commands/add/apply.d.ts.map +1 -0
- package/dist/src/commands/add/apply.js +123 -0
- package/dist/src/commands/add/apply.js.map +1 -0
- package/dist/src/commands/add/ci.d.ts +6 -0
- package/dist/src/commands/add/ci.d.ts.map +1 -0
- package/dist/src/commands/add/ci.js +108 -0
- package/dist/src/commands/add/ci.js.map +1 -0
- package/dist/src/commands/add/context.d.ts +5 -0
- package/dist/src/commands/add/context.d.ts.map +1 -0
- package/dist/src/commands/add/context.js +19 -0
- package/dist/src/commands/add/context.js.map +1 -0
- package/dist/src/commands/add/diff.d.ts +4 -0
- package/dist/src/commands/add/diff.d.ts.map +1 -0
- package/dist/src/commands/add/diff.js +114 -0
- package/dist/src/commands/add/diff.js.map +1 -0
- package/dist/src/commands/add/index.d.ts +6 -0
- package/dist/src/commands/add/index.d.ts.map +1 -0
- package/dist/src/commands/add/index.js +61 -0
- package/dist/src/commands/add/index.js.map +1 -0
- package/dist/src/commands/add/output.d.ts +5 -0
- package/dist/src/commands/add/output.d.ts.map +1 -0
- package/dist/src/commands/add/output.js +58 -0
- package/dist/src/commands/add/output.js.map +1 -0
- package/dist/src/commands/add/plan.d.ts +6 -0
- package/dist/src/commands/add/plan.d.ts.map +1 -0
- package/dist/src/commands/add/plan.js +93 -0
- package/dist/src/commands/add/plan.js.map +1 -0
- package/dist/src/commands/add/registry.d.ts +4 -0
- package/dist/src/commands/add/registry.d.ts.map +1 -0
- package/dist/src/commands/add/registry.js +37 -0
- package/dist/src/commands/add/registry.js.map +1 -0
- package/dist/src/commands/add/types.d.ts +37 -0
- package/dist/src/commands/add/types.d.ts.map +1 -0
- package/dist/src/commands/add/types.js +2 -0
- package/dist/src/commands/add/types.js.map +1 -0
- package/dist/src/commands/doctor/checks.d.ts +3 -0
- package/dist/src/commands/doctor/checks.d.ts.map +1 -0
- package/dist/src/commands/doctor/checks.js +353 -0
- package/dist/src/commands/doctor/checks.js.map +1 -0
- package/dist/src/commands/doctor/context.d.ts +5 -0
- package/dist/src/commands/doctor/context.d.ts.map +1 -0
- package/dist/src/commands/doctor/context.js +134 -0
- package/dist/src/commands/doctor/context.js.map +1 -0
- package/dist/src/commands/doctor/index.d.ts +9 -0
- package/dist/src/commands/doctor/index.d.ts.map +1 -0
- package/dist/src/commands/doctor/index.js +80 -0
- package/dist/src/commands/doctor/index.js.map +1 -0
- package/dist/src/commands/doctor/output.d.ts +4 -0
- package/dist/src/commands/doctor/output.d.ts.map +1 -0
- package/dist/src/commands/doctor/output.js +53 -0
- package/dist/src/commands/doctor/output.js.map +1 -0
- package/dist/src/commands/doctor/postGeneration.d.ts +7 -0
- package/dist/src/commands/doctor/postGeneration.d.ts.map +1 -0
- package/dist/src/commands/doctor/postGeneration.js +22 -0
- package/dist/src/commands/doctor/postGeneration.js.map +1 -0
- package/dist/src/commands/doctor/services.d.ts +5 -0
- package/dist/src/commands/doctor/services.d.ts.map +1 -0
- package/dist/src/commands/doctor/services.js +80 -0
- package/dist/src/commands/doctor/services.js.map +1 -0
- package/dist/src/commands/doctor/types.d.ts +69 -0
- package/dist/src/commands/doctor/types.d.ts.map +1 -0
- package/dist/src/commands/doctor/types.js +2 -0
- package/dist/src/commands/doctor/types.js.map +1 -0
- package/dist/src/commands/upgrade/context.d.ts +5 -0
- package/dist/src/commands/upgrade/context.d.ts.map +1 -0
- package/dist/src/commands/upgrade/context.js +57 -0
- package/dist/src/commands/upgrade/context.js.map +1 -0
- package/dist/src/commands/upgrade/index.d.ts +7 -0
- package/dist/src/commands/upgrade/index.d.ts.map +1 -0
- package/dist/src/commands/upgrade/index.js +35 -0
- package/dist/src/commands/upgrade/index.js.map +1 -0
- package/dist/src/commands/upgrade/migrations.d.ts +4 -0
- package/dist/src/commands/upgrade/migrations.d.ts.map +1 -0
- package/dist/src/commands/upgrade/migrations.js +22 -0
- package/dist/src/commands/upgrade/migrations.js.map +1 -0
- package/dist/src/commands/upgrade/output.d.ts +4 -0
- package/dist/src/commands/upgrade/output.d.ts.map +1 -0
- package/dist/src/commands/upgrade/output.js +52 -0
- package/dist/src/commands/upgrade/output.js.map +1 -0
- package/dist/src/commands/upgrade/plan.d.ts +3 -0
- package/dist/src/commands/upgrade/plan.d.ts.map +1 -0
- package/dist/src/commands/upgrade/plan.js +119 -0
- package/dist/src/commands/upgrade/plan.js.map +1 -0
- package/dist/src/commands/upgrade/types.d.ts +48 -0
- package/dist/src/commands/upgrade/types.d.ts.map +1 -0
- package/dist/src/commands/upgrade/types.js +2 -0
- package/dist/src/commands/upgrade/types.js.map +1 -0
- package/dist/src/lib/args.d.ts +21 -0
- package/dist/src/lib/args.d.ts.map +1 -1
- package/dist/src/lib/args.js +119 -1
- package/dist/src/lib/args.js.map +1 -1
- package/dist/src/lib/constants.d.ts +1 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +3 -1
- package/dist/src/lib/constants.js.map +1 -1
- package/dist/src/lib/expressOAuth.d.ts +10 -0
- package/dist/src/lib/expressOAuth.d.ts.map +1 -0
- package/dist/src/lib/expressOAuth.js +164 -0
- package/dist/src/lib/expressOAuth.js.map +1 -0
- package/dist/src/lib/interruption.d.ts +14 -0
- package/dist/src/lib/interruption.d.ts.map +1 -0
- package/dist/src/lib/interruption.js +16 -0
- package/dist/src/lib/interruption.js.map +1 -0
- package/dist/src/lib/nonInteractive.d.ts +8 -0
- package/dist/src/lib/nonInteractive.d.ts.map +1 -0
- package/dist/src/lib/nonInteractive.js +111 -0
- package/dist/src/lib/nonInteractive.js.map +1 -0
- package/dist/src/lib/oauth.d.ts +9 -0
- package/dist/src/lib/oauth.d.ts.map +1 -0
- package/dist/src/lib/oauth.js +62 -0
- package/dist/src/lib/oauth.js.map +1 -0
- package/dist/src/lib/onboarding.d.ts +8 -0
- package/dist/src/lib/onboarding.d.ts.map +1 -0
- package/dist/src/lib/onboarding.js +35 -0
- package/dist/src/lib/onboarding.js.map +1 -0
- package/dist/src/lib/packageManagerCommands.d.ts +11 -0
- package/dist/src/lib/packageManagerCommands.d.ts.map +1 -0
- package/dist/src/lib/packageManagerCommands.js +34 -0
- package/dist/src/lib/packageManagerCommands.js.map +1 -0
- package/dist/src/lib/process.d.ts.map +1 -1
- package/dist/src/lib/process.js +9 -0
- package/dist/src/lib/process.js.map +1 -1
- package/dist/src/lib/projectManifest.d.ts +67 -0
- package/dist/src/lib/projectManifest.d.ts.map +1 -0
- package/dist/src/lib/projectManifest.js +134 -0
- package/dist/src/lib/projectManifest.js.map +1 -0
- package/dist/src/lib/release.d.ts +9 -0
- package/dist/src/lib/release.d.ts.map +1 -0
- package/dist/src/lib/release.js +48 -0
- package/dist/src/lib/release.js.map +1 -0
- package/dist/src/lib/rootCommand.d.ts +15 -0
- package/dist/src/lib/rootCommand.d.ts.map +1 -0
- package/dist/src/lib/rootCommand.js +17 -0
- package/dist/src/lib/rootCommand.js.map +1 -0
- package/dist/src/lib/schemas.d.ts +15 -6
- package/dist/src/lib/schemas.d.ts.map +1 -1
- package/dist/src/lib/schemas.js +8 -1
- package/dist/src/lib/schemas.js.map +1 -1
- package/dist/src/lib/semver.d.ts +10 -0
- package/dist/src/lib/semver.d.ts.map +1 -0
- package/dist/src/lib/semver.js +51 -0
- package/dist/src/lib/semver.js.map +1 -0
- package/dist/src/lib/types.d.ts +5 -1
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/steps/configurePrisma.d.ts.map +1 -1
- package/dist/src/steps/configurePrisma.js +18 -23
- package/dist/src/steps/configurePrisma.js.map +1 -1
- package/dist/src/steps/configureReadme.d.ts +4 -0
- package/dist/src/steps/configureReadme.d.ts.map +1 -0
- package/dist/src/steps/configureReadme.js +22 -0
- package/dist/src/steps/configureReadme.js.map +1 -0
- package/dist/src/steps/createProject.d.ts.map +1 -1
- package/dist/src/steps/createProject.js +16 -170
- package/dist/src/steps/createProject.js.map +1 -1
- package/dist/src/steps/finalSetup.d.ts +3 -2
- package/dist/src/steps/finalSetup.d.ts.map +1 -1
- package/dist/src/steps/finalSetup.js +14 -9
- package/dist/src/steps/finalSetup.js.map +1 -1
- package/dist/src/steps/installDeps.d.ts +1 -0
- package/dist/src/steps/installDeps.d.ts.map +1 -1
- package/dist/src/steps/installDeps.js +11 -0
- package/dist/src/steps/installDeps.js.map +1 -1
- package/dist/src/steps/prompts.d.ts.map +1 -1
- package/dist/src/steps/prompts.js +32 -13
- package/dist/src/steps/prompts.js.map +1 -1
- package/dist/src/utils/output.d.ts.map +1 -1
- package/dist/src/utils/output.js +23 -11
- package/dist/src/utils/output.js.map +1 -1
- package/package.json +5 -4
- package/templates/express-auth/README.md +21 -12
- package/templates/express-auth/package.json +11 -7
- package/templates/express-auth/src/config/redis.ts +109 -0
- package/templates/express-auth/src/server.ts +2 -0
- package/templates/express-auth+/README.md +25 -18
- package/templates/express-auth+/package.json +11 -7
- package/templates/express-auth+/src/auth/auth.ts +2 -0
- package/templates/express-auth+/src/auth/controllers/password.controller.ts +12 -1
- package/templates/express-auth+/src/auth/routes/password.route.ts +1 -0
- package/templates/express-auth+/src/config/redis.ts +109 -0
- package/templates/express-auth+/src/utils/security.ts +12 -0
- package/templates/express-base/README.md +21 -12
- package/templates/express-base/package.json +11 -8
- package/templates/express-base/src/.env.example +1 -1
- package/templates/express-base/src/config/redis.ts +109 -0
- package/templates/express-base/src/server.ts +2 -0
- package/templates/fullstack/.env.example +3 -2
- package/templates/fullstack/PRESET_CONTRACT.md +7 -3
- package/templates/fullstack/README.md +45 -7
- package/templates/fullstack/apps/api/package.json +6 -4
- package/templates/fullstack/apps/api/prisma/migrations/20260721000000_init/migration.sql +163 -0
- package/templates/fullstack/apps/api/prisma/migrations/migration_lock.toml +3 -0
- package/templates/fullstack/apps/api/src/auth/authenik8.ts +13 -4
- package/templates/fullstack/apps/api/src/config/env.ts +9 -1
- package/templates/fullstack/apps/api/src/config/logger.ts +21 -11
- package/templates/fullstack/apps/api/tests/logger.test.ts +43 -0
- package/templates/fullstack/apps/web/package.json +3 -1
- package/templates/fullstack/apps/web/src/App.tsx +1 -1
- package/templates/fullstack/apps/web/src/auth/RouteGuards.tsx +1 -1
- package/templates/fullstack/apps/web/src/components/AppShell.tsx +90 -45
- package/templates/fullstack/apps/web/src/components/AuthShell.tsx +10 -7
- package/templates/fullstack/apps/web/src/components/Page.tsx +6 -3
- package/templates/fullstack/apps/web/src/features/projects/ProjectPages.tsx +1 -1
- package/templates/fullstack/apps/web/src/main.tsx +13 -6
- package/templates/fullstack/apps/web/src/pages/DashboardPage.tsx +163 -23
- package/templates/fullstack/apps/web/src/pages/StatusPages.tsx +1 -1
- package/templates/fullstack/apps/web/src/pages/auth/LoginPage.tsx +93 -17
- package/templates/fullstack/apps/web/src/pages/auth/OAuthCallbackPage.tsx +1 -1
- package/templates/fullstack/apps/web/src/pages/auth/RecoveryPages.tsx +1 -1
- package/templates/fullstack/apps/web/src/pages/auth/RegisterPage.tsx +1 -1
- package/templates/fullstack/apps/web/src/pages/auth/VerifyEmailPage.tsx +1 -1
- package/templates/fullstack/apps/web/src/styles.css +119 -43
- package/templates/fullstack/apps/web/vite.config.ts +12 -0
- package/templates/fullstack/docker-compose.yml +2 -2
- package/templates/fullstack/gitignore.template +1 -0
- package/templates/fullstack/package.json +17 -8
- package/templates/fullstack/scripts/run-local.mjs +157 -0
- package/templates/prisma/postgresql/.env.example +1 -2
- package/templates/prisma/sqlite/.env.example +1 -2
- package/templates/prisma/sqlite/client.ts +2 -2
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { compareSemanticVersions } from "../../lib/semver.js";
|
|
2
|
+
import { coreMigrationActions } from "./migrations.js";
|
|
3
|
+
function installCommand(packageManager) {
|
|
4
|
+
if (packageManager === "pnpm")
|
|
5
|
+
return "pnpm install --frozen-lockfile";
|
|
6
|
+
if (packageManager === "bun")
|
|
7
|
+
return "bun install --frozen-lockfile";
|
|
8
|
+
return "npm ci";
|
|
9
|
+
}
|
|
10
|
+
function engineUpgradeCommand(context) {
|
|
11
|
+
const dependency = `authenik8-core@${context.targetEngineVersion}`;
|
|
12
|
+
if (context.packageManager === "pnpm")
|
|
13
|
+
return `pnpm add ${dependency}`;
|
|
14
|
+
if (context.packageManager === "bun")
|
|
15
|
+
return `bun add ${dependency}`;
|
|
16
|
+
if (context.manifest.preset === "fullstack") {
|
|
17
|
+
return `npm install ${dependency} --workspace @authenik8/api`;
|
|
18
|
+
}
|
|
19
|
+
return `npm install ${dependency}`;
|
|
20
|
+
}
|
|
21
|
+
function blockedAction(id, title, detail) {
|
|
22
|
+
return { id, kind: "blocked", title, detail };
|
|
23
|
+
}
|
|
24
|
+
export function createUpgradePlan(context) {
|
|
25
|
+
const actions = [];
|
|
26
|
+
let status = "current";
|
|
27
|
+
if (context.declaredEngineVersion !== context.manifest.engine.version) {
|
|
28
|
+
actions.push(blockedAction("engine.manifest-drift", "Reconcile the engine declaration and project manifest", `package.json declares ${context.declaredEngineVersion}, while authenik8.json records ${context.manifest.engine.version}. Doctor must pass before an upgrade is planned.`));
|
|
29
|
+
status = "blocked";
|
|
30
|
+
}
|
|
31
|
+
if (context.installedEngineVersion
|
|
32
|
+
&& context.installedEngineVersion !== context.declaredEngineVersion) {
|
|
33
|
+
actions.push(blockedAction("engine.install-drift", "Restore a reproducible dependency installation", `Installed authenik8-core ${context.installedEngineVersion} does not match the ${context.declaredEngineVersion} declaration. Restore the lockfile installation before upgrading.`));
|
|
34
|
+
status = "blocked";
|
|
35
|
+
}
|
|
36
|
+
else if (!context.installedEngineVersion) {
|
|
37
|
+
actions.push({
|
|
38
|
+
id: "dependencies.install",
|
|
39
|
+
kind: "recommended",
|
|
40
|
+
title: "Install the declared dependency graph before validation",
|
|
41
|
+
detail: "The plan can compare declarations without node_modules, but Doctor must inspect the installed identity engine before an auth change is accepted.",
|
|
42
|
+
command: installCommand(context.packageManager),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const generatorOrder = compareSemanticVersions(context.manifest.generatedBy.version, context.targetGeneratorVersion);
|
|
46
|
+
if (generatorOrder === "invalid") {
|
|
47
|
+
actions.push(blockedAction("generator.invalid-version", "Use a semantic generator version", `Cannot compare project generator version ${context.manifest.generatedBy.version} with ${context.targetGeneratorVersion}.`));
|
|
48
|
+
status = "blocked";
|
|
49
|
+
}
|
|
50
|
+
else if (generatorOrder === "newer") {
|
|
51
|
+
actions.push(blockedAction("generator.downgrade", "Use a CLI that is at least as new as the project", `This project was generated by ${context.manifest.generatedBy.version}; the running CLI is ${context.targetGeneratorVersion} and cannot safely plan a downgrade.`));
|
|
52
|
+
status = "blocked";
|
|
53
|
+
}
|
|
54
|
+
else if (generatorOrder === "older") {
|
|
55
|
+
actions.push({
|
|
56
|
+
id: "generator.release-review",
|
|
57
|
+
kind: "required",
|
|
58
|
+
title: `Review generator changes through ${context.targetGeneratorVersion}`,
|
|
59
|
+
detail: "Generator upgrades are never inferred as source rewrites. Review the release notes and preview explicit add or migration recipes on a branch.",
|
|
60
|
+
references: ["create-authenik8-app release notes", "authenik8.json"],
|
|
61
|
+
});
|
|
62
|
+
if (status !== "blocked")
|
|
63
|
+
status = "upgrade-available";
|
|
64
|
+
}
|
|
65
|
+
const engineOrder = compareSemanticVersions(context.manifest.engine.version, context.targetEngineVersion);
|
|
66
|
+
if (engineOrder === "invalid") {
|
|
67
|
+
actions.push(blockedAction("engine.invalid-version", "Use an exact semantic engine version", `Cannot compare project engine version ${context.manifest.engine.version} with ${context.targetEngineVersion}.`));
|
|
68
|
+
status = "blocked";
|
|
69
|
+
}
|
|
70
|
+
else if (engineOrder === "newer") {
|
|
71
|
+
actions.push(blockedAction("engine.downgrade", "Use a CLI compatible with the declared identity engine", `The project targets authenik8-core ${context.manifest.engine.version}, newer than this CLI's ${context.targetEngineVersion} template contract.`));
|
|
72
|
+
status = "blocked";
|
|
73
|
+
}
|
|
74
|
+
else if (engineOrder === "older") {
|
|
75
|
+
actions.push(...coreMigrationActions(context.manifest.engine.version, context.targetEngineVersion));
|
|
76
|
+
actions.push({
|
|
77
|
+
id: "engine.upgrade",
|
|
78
|
+
kind: "required",
|
|
79
|
+
title: `Upgrade authenik8-core to ${context.targetEngineVersion}`,
|
|
80
|
+
detail: "Apply this only after reviewing every security-boundary action above. Keep the manifest unchanged until the dependency, generated integration, and Doctor all agree.",
|
|
81
|
+
command: engineUpgradeCommand(context),
|
|
82
|
+
references: ["authenik8-core CHANGELOG.md"],
|
|
83
|
+
});
|
|
84
|
+
if (status !== "blocked")
|
|
85
|
+
status = "upgrade-available";
|
|
86
|
+
}
|
|
87
|
+
if (status === "upgrade-available") {
|
|
88
|
+
actions.push({
|
|
89
|
+
id: "upgrade.verify",
|
|
90
|
+
kind: "required",
|
|
91
|
+
title: "Validate the upgraded auth boundary before updating metadata",
|
|
92
|
+
detail: "Run static and live-service diagnostics, exercise login, refresh rotation, OAuth callbacks, linking, and authorization, then update authenik8.json as the final audited change.",
|
|
93
|
+
command: `npx create-authenik8-app@${context.targetGeneratorVersion} doctor`,
|
|
94
|
+
references: ["THREAT_MODEL.md"],
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
schemaVersion: 1,
|
|
99
|
+
rootDir: context.rootDir,
|
|
100
|
+
preset: context.manifest.preset,
|
|
101
|
+
status,
|
|
102
|
+
versions: {
|
|
103
|
+
generator: {
|
|
104
|
+
project: context.manifest.generatedBy.version,
|
|
105
|
+
target: context.targetGeneratorVersion,
|
|
106
|
+
},
|
|
107
|
+
engine: {
|
|
108
|
+
manifest: context.manifest.engine.version,
|
|
109
|
+
declared: context.declaredEngineVersion,
|
|
110
|
+
...(context.installedEngineVersion
|
|
111
|
+
? { installed: context.installedEngineVersion }
|
|
112
|
+
: {}),
|
|
113
|
+
target: context.targetEngineVersion,
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
actions,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../../src/commands/upgrade/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AuthMode, PackageManager } from "../../lib/types.js";
|
|
2
|
+
import type { ProjectManifest } from "../../lib/projectManifest.js";
|
|
3
|
+
export type UpgradeStatus = "current" | "upgrade-available" | "blocked";
|
|
4
|
+
export type UpgradeActionKind = "required" | "recommended" | "blocked";
|
|
5
|
+
export type UpgradeAction = {
|
|
6
|
+
id: string;
|
|
7
|
+
kind: UpgradeActionKind;
|
|
8
|
+
title: string;
|
|
9
|
+
detail: string;
|
|
10
|
+
command?: string;
|
|
11
|
+
references?: string[];
|
|
12
|
+
};
|
|
13
|
+
export type UpgradeContext = {
|
|
14
|
+
rootDir: string;
|
|
15
|
+
appDir: string;
|
|
16
|
+
manifest: ProjectManifest;
|
|
17
|
+
packageManager: PackageManager;
|
|
18
|
+
declaredEngineVersion: string;
|
|
19
|
+
installedEngineVersion?: string;
|
|
20
|
+
targetGeneratorVersion: string;
|
|
21
|
+
targetEngineVersion: string;
|
|
22
|
+
};
|
|
23
|
+
export type UpgradePlan = {
|
|
24
|
+
schemaVersion: 1;
|
|
25
|
+
rootDir: string;
|
|
26
|
+
preset: AuthMode;
|
|
27
|
+
status: UpgradeStatus;
|
|
28
|
+
versions: {
|
|
29
|
+
generator: {
|
|
30
|
+
project: string;
|
|
31
|
+
target: string;
|
|
32
|
+
};
|
|
33
|
+
engine: {
|
|
34
|
+
manifest: string;
|
|
35
|
+
declared: string;
|
|
36
|
+
installed?: string;
|
|
37
|
+
target: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
actions: UpgradeAction[];
|
|
41
|
+
};
|
|
42
|
+
export type UpgradeOptions = {
|
|
43
|
+
directory: string;
|
|
44
|
+
json: boolean;
|
|
45
|
+
check: boolean;
|
|
46
|
+
help: boolean;
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/commands/upgrade/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,eAAe,CAAC;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE;QACR,SAAS,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,MAAM,EAAE;YACN,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/commands/upgrade/types.ts"],"names":[],"mappings":""}
|
package/dist/src/lib/args.d.ts
CHANGED
|
@@ -11,6 +11,27 @@ declare const cliArgumentsSchema: z.ZodObject<{
|
|
|
11
11
|
pnpm: "pnpm";
|
|
12
12
|
bun: "bun";
|
|
13
13
|
}>>;
|
|
14
|
+
nonInteractive: z.ZodBoolean;
|
|
15
|
+
preset: z.ZodOptional<z.ZodEnum<{
|
|
16
|
+
fullstack: "fullstack";
|
|
17
|
+
base: "base";
|
|
18
|
+
auth: "auth";
|
|
19
|
+
"auth-oauth": "auth-oauth";
|
|
20
|
+
}>>;
|
|
21
|
+
usePrisma: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
database: z.ZodOptional<z.ZodEnum<{
|
|
23
|
+
sqlite: "sqlite";
|
|
24
|
+
postgresql: "postgresql";
|
|
25
|
+
}>>;
|
|
26
|
+
oauthProviders: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
27
|
+
google: "google";
|
|
28
|
+
github: "github";
|
|
29
|
+
}>>>;
|
|
30
|
+
useGit: z.ZodOptional<z.ZodBoolean>;
|
|
31
|
+
runtime: z.ZodOptional<z.ZodEnum<{
|
|
32
|
+
bun: "bun";
|
|
33
|
+
node: "node";
|
|
34
|
+
}>>;
|
|
14
35
|
}, z.core.$strict>;
|
|
15
36
|
export type CliArguments = z.infer<typeof cliArgumentsSchema>;
|
|
16
37
|
export declare function parseCliArguments(argv: string[]): CliArguments;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAetB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAqD9D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CA2I9D"}
|
package/dist/src/lib/args.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { firstZodIssue, packageManagerSchema } from "./schemas.js";
|
|
2
|
+
import { authModeSchema, databaseSchema, firstZodIssue, oauthProvidersSchema, packageManagerSchema, runtimeSchema, } from "./schemas.js";
|
|
3
3
|
const cliArgumentsSchema = z.strictObject({
|
|
4
4
|
projectName: z.string().optional(),
|
|
5
5
|
help: z.boolean(),
|
|
@@ -8,6 +8,13 @@ const cliArgumentsSchema = z.strictObject({
|
|
|
8
8
|
skipInstall: z.boolean(),
|
|
9
9
|
productionReady: z.boolean(),
|
|
10
10
|
packageManager: packageManagerSchema.optional(),
|
|
11
|
+
nonInteractive: z.boolean(),
|
|
12
|
+
preset: authModeSchema.optional(),
|
|
13
|
+
usePrisma: z.boolean().optional(),
|
|
14
|
+
database: databaseSchema.optional(),
|
|
15
|
+
oauthProviders: oauthProvidersSchema.optional(),
|
|
16
|
+
useGit: z.boolean().optional(),
|
|
17
|
+
runtime: runtimeSchema.optional(),
|
|
11
18
|
});
|
|
12
19
|
const positionalArgumentsSchema = z.array(z.string()).max(1, {
|
|
13
20
|
error: (issue) => {
|
|
@@ -21,6 +28,32 @@ function parsePackageManager(value) {
|
|
|
21
28
|
throw new Error(firstZodIssue(result.error));
|
|
22
29
|
return result.data;
|
|
23
30
|
}
|
|
31
|
+
function parseChoice(value, schema, option, allowed) {
|
|
32
|
+
if (!value || value.startsWith("-")) {
|
|
33
|
+
throw new Error(`${option} requires ${allowed}.`);
|
|
34
|
+
}
|
|
35
|
+
const result = schema.safeParse(value);
|
|
36
|
+
if (!result.success)
|
|
37
|
+
throw new Error(`${option} must be ${allowed}. Received "${value}".`);
|
|
38
|
+
return result.data;
|
|
39
|
+
}
|
|
40
|
+
function parseOAuthProviders(value) {
|
|
41
|
+
if (!value || value.startsWith("-")) {
|
|
42
|
+
throw new Error("--oauth requires google, github, or google,github.");
|
|
43
|
+
}
|
|
44
|
+
const providers = value.split(",").map((provider) => provider.trim()).filter(Boolean);
|
|
45
|
+
const result = oauthProvidersSchema.min(1).safeParse(providers);
|
|
46
|
+
if (!result.success) {
|
|
47
|
+
throw new Error(`--oauth requires unique supported providers. ${firstZodIssue(result.error)}`);
|
|
48
|
+
}
|
|
49
|
+
return result.data;
|
|
50
|
+
}
|
|
51
|
+
function setBooleanChoice(current, value, positiveOption, negativeOption) {
|
|
52
|
+
if (current !== undefined && current !== value) {
|
|
53
|
+
throw new Error(`${positiveOption} and ${negativeOption} cannot be used together.`);
|
|
54
|
+
}
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
24
57
|
export function parseCliArguments(argv) {
|
|
25
58
|
const parsed = {
|
|
26
59
|
help: false,
|
|
@@ -28,6 +61,7 @@ export function parseCliArguments(argv) {
|
|
|
28
61
|
resume: false,
|
|
29
62
|
skipInstall: false,
|
|
30
63
|
productionReady: false,
|
|
64
|
+
nonInteractive: false,
|
|
31
65
|
};
|
|
32
66
|
const positionals = [];
|
|
33
67
|
for (let index = 0; index < argv.length; index += 1) {
|
|
@@ -56,6 +90,33 @@ export function parseCliArguments(argv) {
|
|
|
56
90
|
parsed.productionReady = true;
|
|
57
91
|
continue;
|
|
58
92
|
}
|
|
93
|
+
if (argument === "--yes" || argument === "--non-interactive") {
|
|
94
|
+
parsed.nonInteractive = true;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (argument === "--prisma") {
|
|
98
|
+
parsed.usePrisma = setBooleanChoice(parsed.usePrisma, true, "--prisma", "--no-prisma");
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (argument === "--no-prisma") {
|
|
102
|
+
parsed.usePrisma = setBooleanChoice(parsed.usePrisma, false, "--prisma", "--no-prisma");
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (argument === "--git") {
|
|
106
|
+
parsed.useGit = setBooleanChoice(parsed.useGit, true, "--git", "--no-git");
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (argument === "--no-git") {
|
|
110
|
+
parsed.useGit = setBooleanChoice(parsed.useGit, false, "--git", "--no-git");
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (argument === "--no-oauth") {
|
|
114
|
+
if (parsed.oauthProviders !== undefined) {
|
|
115
|
+
throw new Error("--oauth and --no-oauth cannot be used together.");
|
|
116
|
+
}
|
|
117
|
+
parsed.oauthProviders = [];
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
59
120
|
if (argument === "--package-manager") {
|
|
60
121
|
const value = argv[index + 1];
|
|
61
122
|
parsed.packageManager = parsePackageManager(value?.startsWith("-") ? undefined : value);
|
|
@@ -66,6 +127,49 @@ export function parseCliArguments(argv) {
|
|
|
66
127
|
parsed.packageManager = parsePackageManager(argument.slice("--package-manager=".length));
|
|
67
128
|
continue;
|
|
68
129
|
}
|
|
130
|
+
if (argument === "--preset" || argument.startsWith("--preset=")) {
|
|
131
|
+
if (parsed.preset !== undefined)
|
|
132
|
+
throw new Error("--preset may only be provided once.");
|
|
133
|
+
const inline = argument.startsWith("--preset=");
|
|
134
|
+
const value = inline ? argument.slice("--preset=".length) : argv[index + 1];
|
|
135
|
+
parsed.preset = parseChoice(value, authModeSchema, "--preset", "base, auth, auth-oauth, or fullstack");
|
|
136
|
+
if (!inline)
|
|
137
|
+
index += 1;
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (argument === "--database" || argument.startsWith("--database=")) {
|
|
141
|
+
if (parsed.database !== undefined)
|
|
142
|
+
throw new Error("--database may only be provided once.");
|
|
143
|
+
const inline = argument.startsWith("--database=");
|
|
144
|
+
const value = inline ? argument.slice("--database=".length) : argv[index + 1];
|
|
145
|
+
parsed.database = parseChoice(value, databaseSchema, "--database", "sqlite or postgresql");
|
|
146
|
+
if (!inline)
|
|
147
|
+
index += 1;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (argument === "--runtime" || argument.startsWith("--runtime=")) {
|
|
151
|
+
if (parsed.runtime !== undefined)
|
|
152
|
+
throw new Error("--runtime may only be provided once.");
|
|
153
|
+
const inline = argument.startsWith("--runtime=");
|
|
154
|
+
const value = inline ? argument.slice("--runtime=".length) : argv[index + 1];
|
|
155
|
+
parsed.runtime = parseChoice(value, runtimeSchema, "--runtime", "node or bun");
|
|
156
|
+
if (!inline)
|
|
157
|
+
index += 1;
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (argument === "--oauth" || argument.startsWith("--oauth=")) {
|
|
161
|
+
if (parsed.oauthProviders !== undefined) {
|
|
162
|
+
throw new Error(parsed.oauthProviders.length === 0
|
|
163
|
+
? "--oauth and --no-oauth cannot be used together."
|
|
164
|
+
: "--oauth may only be provided once.");
|
|
165
|
+
}
|
|
166
|
+
const inline = argument.startsWith("--oauth=");
|
|
167
|
+
const value = inline ? argument.slice("--oauth=".length) : argv[index + 1];
|
|
168
|
+
parsed.oauthProviders = parseOAuthProviders(value);
|
|
169
|
+
if (!inline)
|
|
170
|
+
index += 1;
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
69
173
|
if (argument.startsWith("-")) {
|
|
70
174
|
throw new Error(`Unknown option "${argument}". Run with --help for usage.`);
|
|
71
175
|
}
|
|
@@ -77,6 +181,20 @@ export function parseCliArguments(argv) {
|
|
|
77
181
|
}
|
|
78
182
|
if (positionalResult.data[0])
|
|
79
183
|
parsed.projectName = positionalResult.data[0];
|
|
184
|
+
const nonInteractiveOnly = [
|
|
185
|
+
parsed.preset,
|
|
186
|
+
parsed.usePrisma,
|
|
187
|
+
parsed.database,
|
|
188
|
+
parsed.oauthProviders,
|
|
189
|
+
parsed.useGit,
|
|
190
|
+
parsed.runtime,
|
|
191
|
+
];
|
|
192
|
+
if (!parsed.nonInteractive && nonInteractiveOnly.some((value) => value !== undefined)) {
|
|
193
|
+
throw new Error("--preset, --prisma, --database, --oauth, --git, and --runtime require --non-interactive (or --yes).");
|
|
194
|
+
}
|
|
195
|
+
if (parsed.nonInteractive && parsed.resume) {
|
|
196
|
+
throw new Error("--resume cannot be combined with --non-interactive or --yes.");
|
|
197
|
+
}
|
|
80
198
|
return cliArgumentsSchema.parse(parsed);
|
|
81
199
|
}
|
|
82
200
|
//# sourceMappingURL=args.js.map
|
package/dist/src/lib/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { StepName } from "./types.js";
|
|
2
|
-
export declare const PRISMA_VERSION = "7.
|
|
2
|
+
export declare const PRISMA_VERSION = "7.9.0";
|
|
3
3
|
export declare const stepOrder: StepName[];
|
|
4
4
|
export declare const stepLabels: Record<StepName, string>;
|
|
5
5
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,eAAO,MAAM,SAAS,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,eAAO,MAAM,SAAS,EAAE,QAAQ,EAW/B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAW/C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const PRISMA_VERSION = "7.
|
|
1
|
+
export const PRISMA_VERSION = "7.9.0";
|
|
2
2
|
export const stepOrder = [
|
|
3
3
|
"start",
|
|
4
4
|
"prompts",
|
|
@@ -8,6 +8,7 @@ export const stepOrder = [
|
|
|
8
8
|
"production-configured",
|
|
9
9
|
"deps-installed",
|
|
10
10
|
"git-initialized",
|
|
11
|
+
"project-validated",
|
|
11
12
|
"done",
|
|
12
13
|
];
|
|
13
14
|
export const stepLabels = {
|
|
@@ -19,6 +20,7 @@ export const stepLabels = {
|
|
|
19
20
|
"deps-installed": "Install dependencies",
|
|
20
21
|
"production-configured": "Configure production runtime",
|
|
21
22
|
"git-initialized": "Initialize Git repository",
|
|
23
|
+
"project-validated": "Validate generated auth boundary",
|
|
22
24
|
done: "Project ready",
|
|
23
25
|
};
|
|
24
26
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,OAAO;IACP,SAAS;IACT,iBAAiB;IACjB,gBAAgB;IAChB,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;IAChB,iBAAiB;IACjB,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,uBAAuB;IAChC,iBAAiB,EAAE,sBAAsB;IACzC,gBAAgB,EAAE,0BAA0B;IAC5C,mBAAmB,EAAE,oBAAoB;IACzC,gBAAgB,EAAE,sBAAsB;IACxC,uBAAuB,EAAE,8BAA8B;IACvD,iBAAiB,EAAE,2BAA2B;IAC9C,IAAI,EAAE,eAAe;CACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,OAAO;IACP,SAAS;IACT,iBAAiB;IACjB,gBAAgB;IAChB,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,uBAAuB;IAChC,iBAAiB,EAAE,sBAAsB;IACzC,gBAAgB,EAAE,0BAA0B;IAC5C,mBAAmB,EAAE,oBAAoB;IACzC,gBAAgB,EAAE,sBAAsB;IACxC,uBAAuB,EAAE,8BAA8B;IACvD,iBAAiB,EAAE,2BAA2B;IAC9C,mBAAmB,EAAE,kCAAkC;IACvD,IAAI,EAAE,eAAe;CACtB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { OAuthProvider } from "./oauth.js";
|
|
2
|
+
export declare const expressOAuthFiles: {
|
|
3
|
+
readonly auth: "src/auth/auth.ts";
|
|
4
|
+
readonly controller: "src/auth/controllers/oauth.controller.ts";
|
|
5
|
+
readonly routes: "src/auth/routes/oauth.routes.ts";
|
|
6
|
+
};
|
|
7
|
+
export type ExpressOAuthFile = (typeof expressOAuthFiles)[keyof typeof expressOAuthFiles];
|
|
8
|
+
/** Canonical OAuth source shared by generation and guarded add recipes. */
|
|
9
|
+
export declare function renderExpressOAuthFiles(providers: readonly OAuthProvider[]): Record<ExpressOAuthFile, string>;
|
|
10
|
+
//# sourceMappingURL=expressOAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressOAuth.d.ts","sourceRoot":"","sources":["../../../src/lib/expressOAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAkF1F,2EAA2E;AAC3E,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,aAAa,EAAE,GAClC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAgFlC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
export const expressOAuthFiles = {
|
|
2
|
+
auth: "src/auth/auth.ts",
|
|
3
|
+
controller: "src/auth/controllers/oauth.controller.ts",
|
|
4
|
+
routes: "src/auth/routes/oauth.routes.ts",
|
|
5
|
+
};
|
|
6
|
+
function providerEnvBlock(provider) {
|
|
7
|
+
const upper = provider.toUpperCase();
|
|
8
|
+
return `${provider}: {
|
|
9
|
+
clientId: requiredEnv("${upper}_CLIENT_ID"),
|
|
10
|
+
clientSecret: requiredEnv("${upper}_CLIENT_SECRET"),
|
|
11
|
+
redirectUri: requiredEnv("${upper}_REDIRECT_URI"),
|
|
12
|
+
},`;
|
|
13
|
+
}
|
|
14
|
+
function providerControllerBlock(provider) {
|
|
15
|
+
return `async ${provider}Redirect(req: Request, res: Response) {
|
|
16
|
+
try {
|
|
17
|
+
await requireProvider("${provider}", res)?.redirect(req, res);
|
|
18
|
+
} catch {
|
|
19
|
+
if (!res.headersSent) res.status(500).json({ error: "OAuth redirect failed" });
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
async ${provider}Callback(req: Request, res: Response) {
|
|
24
|
+
try {
|
|
25
|
+
const provider = requireProvider("${provider}", res);
|
|
26
|
+
if (!provider) return;
|
|
27
|
+
|
|
28
|
+
const result = await provider.handleCallback(req);
|
|
29
|
+
let response = result;
|
|
30
|
+
|
|
31
|
+
if (result.mode === "link" && !result.identity) {
|
|
32
|
+
if (!result.userId) {
|
|
33
|
+
return res.status(400).json({ error: "Authenticated user is required to link a provider" });
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
await identityAdapter.linkProvider(
|
|
37
|
+
result.userId,
|
|
38
|
+
result.profile.provider,
|
|
39
|
+
result.profile.providerId,
|
|
40
|
+
);
|
|
41
|
+
response = {
|
|
42
|
+
...result,
|
|
43
|
+
identity: { type: "LINK_PROVIDER", success: true },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (
|
|
48
|
+
result.identity?.type === "LINK_REQUIRED" ||
|
|
49
|
+
result.identity?.type === "EXISTING_EMAIL_CONFLICT"
|
|
50
|
+
) {
|
|
51
|
+
return res.status(409).json({ provider: "${provider}", ...result });
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (result.identity?.type === "INVALID_LINK_REQUEST") {
|
|
55
|
+
return res.status(400).json({ provider: "${provider}", ...result });
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (result.mode === "login" && (!result.accessToken || !result.refreshToken)) {
|
|
59
|
+
throw new Error("OAuth callback did not return an application session");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
res.json({ provider: "${provider}", ...response });
|
|
63
|
+
} catch (error) {
|
|
64
|
+
res.status(400).json({
|
|
65
|
+
error: error instanceof Error ? error.message : "OAuth callback failed",
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
async ${provider}Link(req: Request, res: Response) {
|
|
71
|
+
try {
|
|
72
|
+
await requireProvider("${provider}", res)?.redirect(req, res, "link");
|
|
73
|
+
} catch {
|
|
74
|
+
if (!res.headersSent) res.status(500).json({ error: "OAuth link redirect failed" });
|
|
75
|
+
}
|
|
76
|
+
},`;
|
|
77
|
+
}
|
|
78
|
+
function providerRoutesBlock(provider) {
|
|
79
|
+
return `router.get("/${provider}", oauthController.${provider}Redirect);
|
|
80
|
+
router.get("/${provider}/callback", oauthController.${provider}Callback);
|
|
81
|
+
router.get("/${provider}/link", authMiddleware, oauthController.${provider}Link);`;
|
|
82
|
+
}
|
|
83
|
+
/** Canonical OAuth source shared by generation and guarded add recipes. */
|
|
84
|
+
export function renderExpressOAuthFiles(providers) {
|
|
85
|
+
const providerUnion = providers.map((provider) => `"${provider}"`).join(" | ");
|
|
86
|
+
return {
|
|
87
|
+
[expressOAuthFiles.auth]: `import { createAuthenik8 } from "authenik8-core";
|
|
88
|
+
import dotenv from "dotenv";
|
|
89
|
+
import { createRedisClient } from "../config/redis";
|
|
90
|
+
import { agentIdentityConfig, authJwkConfig, requiredEnv, requiredSecret } from "../utils/security";
|
|
91
|
+
import { identityAdapter } from "./identity.adapter";
|
|
92
|
+
|
|
93
|
+
dotenv.config();
|
|
94
|
+
|
|
95
|
+
let authInstance: any;
|
|
96
|
+
|
|
97
|
+
function oauthConfig() {
|
|
98
|
+
return {
|
|
99
|
+
${providers.map(providerEnvBlock).join("\n ")}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export async function initAuth() {
|
|
104
|
+
authInstance= await createAuthenik8({
|
|
105
|
+
jwt: authJwkConfig(),
|
|
106
|
+
refreshSecret: requiredSecret("REFRESH_SECRET"),
|
|
107
|
+
agent: agentIdentityConfig(),
|
|
108
|
+
redis: await createRedisClient(),
|
|
109
|
+
oauth: oauthConfig(),
|
|
110
|
+
identityAdapter,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
export function getAuth() {
|
|
115
|
+
if (!authInstance) {
|
|
116
|
+
throw new Error("Auth not initialized. Call initAuth() first.");
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return authInstance;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export const auth = new Proxy(
|
|
123
|
+
{},
|
|
124
|
+
{
|
|
125
|
+
get(_target, property) {
|
|
126
|
+
return getAuth()[property as keyof ReturnType<typeof getAuth>];
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
) as any;
|
|
130
|
+
`,
|
|
131
|
+
[expressOAuthFiles.routes]: `import express from "express";
|
|
132
|
+
import { authMiddleware } from "../middleware/auth.middleware";
|
|
133
|
+
import { oauthController } from "../controllers/oauth.controller";
|
|
134
|
+
|
|
135
|
+
const router = express.Router();
|
|
136
|
+
|
|
137
|
+
${providers.map(providerRoutesBlock).join("\n")}
|
|
138
|
+
|
|
139
|
+
export default router;
|
|
140
|
+
`,
|
|
141
|
+
[expressOAuthFiles.controller]: `import { Request, Response } from "express";
|
|
142
|
+
import { getAuth } from "../auth";
|
|
143
|
+
import { identityAdapter } from "../identity.adapter";
|
|
144
|
+
|
|
145
|
+
type OAuthProvider = ${providerUnion};
|
|
146
|
+
|
|
147
|
+
function requireProvider(provider: OAuthProvider, res: Response) {
|
|
148
|
+
const oauthProvider = getAuth().oauth?.[provider];
|
|
149
|
+
|
|
150
|
+
if (!oauthProvider) {
|
|
151
|
+
res.status(404).json({ error: \`\${provider} OAuth is not configured\` });
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return oauthProvider;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export const oauthController = {
|
|
159
|
+
${providers.map(providerControllerBlock).join("\n\n ")}
|
|
160
|
+
};
|
|
161
|
+
`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=expressOAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressOAuth.js","sourceRoot":"","sources":["../../../src/lib/expressOAuth.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,kBAAkB;IACxB,UAAU,EAAE,0CAA0C;IACtD,MAAM,EAAE,iCAAiC;CACjC,CAAC;AAIX,SAAS,gBAAgB,CAAC,QAAuB;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,GAAG,QAAQ;iCACa,KAAK;qCACD,KAAK;oCACN,KAAK;SAChC,CAAC;AACV,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAuB;IACtD,OAAO,SAAS,QAAQ;;+BAEK,QAAQ;;;;;;UAM7B,QAAQ;;0CAEwB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;mDA0BC,QAAQ;;;;mDAIR,QAAQ;;;;;;;8BAO7B,QAAQ;;;;;;;;UAQ5B,QAAQ;;+BAEa,QAAQ;;;;KAIlC,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAuB;IAClD,OAAO,gBAAgB,QAAQ,sBAAsB,QAAQ;eAChD,QAAQ,+BAA+B,QAAQ;eAC/C,QAAQ,2CAA2C,QAAQ,QAAQ,CAAC;AACnF,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,uBAAuB,CACrC,SAAmC;IAEnC,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE/E,OAAO;QACL,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;;;;;;;;;;;;MAYxB,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BnD;QACG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;;;;;;EAM9B,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;CAG9C;QACG,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;;;;uBAIb,aAAa;;;;;;;;;;;;;;IAchC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;;CAExD;KACE,CAAC;AACJ,CAAC"}
|