seamless-cli 0.4.0 → 0.5.1

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 (70) hide show
  1. package/dist/commands/help.js +3 -1
  2. package/dist/commands/help.js.map +1 -1
  3. package/dist/commands/init.js +39 -4
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/core/images.js +1 -1
  6. package/dist/core/oauthProviders.js +89 -0
  7. package/dist/core/oauthProviders.js.map +1 -0
  8. package/dist/core/templates.js.map +1 -1
  9. package/dist/generators/auth/auth.js +4 -4
  10. package/dist/generators/auth/auth.js.map +1 -1
  11. package/dist/generators/docker/docker.js +31 -10
  12. package/dist/generators/docker/docker.js.map +1 -1
  13. package/dist/index.js +0 -0
  14. package/dist/prompts/oauthSetup.js +36 -0
  15. package/dist/prompts/oauthSetup.js.map +1 -0
  16. package/package.json +1 -1
  17. package/dist/commands/contribute.js +0 -121
  18. package/dist/commands/contribute.js.map +0 -1
  19. package/dist/commands/deploy.js +0 -190
  20. package/dist/commands/deploy.js.map +0 -1
  21. package/dist/commands/destroy.js +0 -122
  22. package/dist/commands/destroy.js.map +0 -1
  23. package/dist/contributor/catalog.js +0 -129
  24. package/dist/contributor/catalog.js.map +0 -1
  25. package/dist/contributor/workspace.js +0 -551
  26. package/dist/contributor/workspace.js.map +0 -1
  27. package/dist/core/acm.js +0 -24
  28. package/dist/core/acm.js.map +0 -1
  29. package/dist/core/aws.js +0 -374
  30. package/dist/core/aws.js.map +0 -1
  31. package/dist/core/buildPush.js +0 -91
  32. package/dist/core/buildPush.js.map +0 -1
  33. package/dist/core/configure.js +0 -25
  34. package/dist/core/configure.js.map +0 -1
  35. package/dist/core/deployConfig.js +0 -66
  36. package/dist/core/deployConfig.js.map +0 -1
  37. package/dist/core/deployManifest.js +0 -163
  38. package/dist/core/deployManifest.js.map +0 -1
  39. package/dist/core/deploySecrets.js +0 -31
  40. package/dist/core/deploySecrets.js.map +0 -1
  41. package/dist/core/destroy.js +0 -38
  42. package/dist/core/destroy.js.map +0 -1
  43. package/dist/core/envDiscovery.js +0 -153
  44. package/dist/core/envDiscovery.js.map +0 -1
  45. package/dist/core/envRegistry.js +0 -76
  46. package/dist/core/envRegistry.js.map +0 -1
  47. package/dist/core/health.js +0 -11
  48. package/dist/core/health.js.map +0 -1
  49. package/dist/core/help.js +0 -75
  50. package/dist/core/help.js.map +0 -1
  51. package/dist/core/preReqs.js +0 -14
  52. package/dist/core/preReqs.js.map +0 -1
  53. package/dist/core/terraform.js +0 -34
  54. package/dist/core/terraform.js.map +0 -1
  55. package/dist/core/tfVars.js +0 -69
  56. package/dist/core/tfVars.js.map +0 -1
  57. package/dist/generators/backend/express.js +0 -13
  58. package/dist/generators/backend/express.js.map +0 -1
  59. package/dist/generators/deploy/aws/dev/files.js +0 -36
  60. package/dist/generators/deploy/aws/dev/files.js.map +0 -1
  61. package/dist/generators/deploy/aws/dev/template.js +0 -1240
  62. package/dist/generators/deploy/aws/dev/template.js.map +0 -1
  63. package/dist/generators/frontend/react.js +0 -13
  64. package/dist/generators/frontend/react.js.map +0 -1
  65. package/dist/prompts/contributeSetup.js +0 -39
  66. package/dist/prompts/contributeSetup.js.map +0 -1
  67. package/dist/prompts/deploySetup.js +0 -244
  68. package/dist/prompts/deploySetup.js.map +0 -1
  69. package/dist/utils/repoUtils.js +0 -23
  70. package/dist/utils/repoUtils.js.map +0 -1
@@ -1,163 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { getDeployManifestPath } from "./paths.js";
4
- import { buildDeploySecretBundle, } from "./deploySecrets.js";
5
- function emptyEnvMap() {
6
- return {
7
- web: [],
8
- api: [],
9
- auth: [],
10
- admin: [],
11
- };
12
- }
13
- function slugify(value) {
14
- return value
15
- .toLowerCase()
16
- .replace(/[^a-z0-9]+/g, "-")
17
- .replace(/^-+|-+$/g, "");
18
- }
19
- function normalizePath(value) {
20
- if (!value || value.trim().length === 0) {
21
- return null;
22
- }
23
- return value;
24
- }
25
- function normalizeImage(value) {
26
- if (!value || value.trim().length === 0) {
27
- return null;
28
- }
29
- return value;
30
- }
31
- function resolveServiceMode(service, fallback = "source") {
32
- const hasPath = Boolean(normalizePath(service?.path));
33
- const hasImage = Boolean(normalizeImage(service?.image));
34
- if (hasPath)
35
- return "source";
36
- if (hasImage)
37
- return "image";
38
- return fallback;
39
- }
40
- function buildServiceEntry(service, fallback = "source") {
41
- const normalizedPath = normalizePath(service?.path);
42
- const normalizedImage = normalizeImage(service?.image);
43
- const mode = resolveServiceMode(service, fallback);
44
- if (mode === "source" && !normalizedPath) {
45
- throw new Error("A source-backed service is missing a local path");
46
- }
47
- if (mode === "image" && !normalizedImage) {
48
- throw new Error("An image-backed service is missing an image reference");
49
- }
50
- return {
51
- mode,
52
- path: normalizedPath,
53
- image: normalizedImage,
54
- };
55
- }
56
- function buildOrigins(answers) {
57
- return {
58
- webOrigin: `https://${answers.domain.webHost}`,
59
- apiOrigin: `https://${answers.domain.apiHost}`,
60
- authIssuer: `https://${answers.domain.authHost}`,
61
- adminOrigin: `https://${answers.domain.adminHost}`,
62
- };
63
- }
64
- function resolveSecrets(existing) {
65
- if (existing?.runtime?.secrets) {
66
- return existing.runtime.secrets;
67
- }
68
- return buildDeploySecretBundle();
69
- }
70
- export function readDeployManifest(projectDir) {
71
- const filePath = getDeployManifestPath(projectDir);
72
- if (!fs.existsSync(filePath)) {
73
- throw new Error("Missing infra/deploy.json");
74
- }
75
- const raw = fs.readFileSync(filePath, "utf8");
76
- return JSON.parse(raw);
77
- }
78
- export function readExistingDeployManifest(projectDir) {
79
- const filePath = getDeployManifestPath(projectDir);
80
- if (!fs.existsSync(filePath)) {
81
- return null;
82
- }
83
- const raw = fs.readFileSync(filePath, "utf8");
84
- return JSON.parse(raw);
85
- }
86
- export function buildDeployManifest(config, answers, existing) {
87
- const slug = slugify(config.projectName);
88
- const secrets = resolveSecrets(existing);
89
- const { webOrigin, apiOrigin, authIssuer, adminOrigin } = buildOrigins(answers);
90
- return {
91
- version: 1,
92
- projectName: config.projectName,
93
- provider: "aws",
94
- tier: answers.tier,
95
- region: answers.region,
96
- awsProfile: answers.awsProfile,
97
- domain: {
98
- root: answers.domain.root,
99
- hostedZoneDomain: answers.domain.hostedZoneDomain,
100
- hostedZoneId: answers.domain.hostedZoneId,
101
- webHost: answers.domain.webHost,
102
- apiHost: answers.domain.apiHost,
103
- authHost: answers.domain.authHost,
104
- adminHost: answers.domain.adminHost,
105
- },
106
- backup: {
107
- enabled: answers.backup.enabled,
108
- schedule: answers.backup.schedule,
109
- retentionDays: answers.backup.retentionDays,
110
- },
111
- services: {
112
- web: buildServiceEntry(config.services.web, "source"),
113
- api: buildServiceEntry(config.services.api, "source"),
114
- auth: buildServiceEntry(config.services.auth, "image"),
115
- admin: buildServiceEntry(config.services.admin, "image"),
116
- },
117
- images: {
118
- web: { repositoryName: `${slug}-web`, tag: "latest" },
119
- api: { repositoryName: `${slug}-api`, tag: "latest" },
120
- auth: { repositoryName: `${slug}-auth`, tag: "latest" },
121
- admin: { repositoryName: `${slug}-admin`, tag: "latest" },
122
- postgres: { repositoryName: `${slug}-postgres`, tag: "latest" },
123
- },
124
- env: existing?.env ?? emptyEnvMap(),
125
- runtime: {
126
- apiOrigin,
127
- authIssuer,
128
- webOrigin,
129
- adminOrigin,
130
- acmCertificateArn: existing?.runtime?.acmCertificateArn,
131
- rpid: answers.domain.root,
132
- secrets,
133
- },
134
- };
135
- }
136
- export function writeDeployManifest(projectDir, manifest) {
137
- const filePath = getDeployManifestPath(projectDir);
138
- const dirPath = path.dirname(filePath);
139
- fs.mkdirSync(dirPath, { recursive: true });
140
- fs.writeFileSync(filePath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
141
- }
142
- export function updateDeployManifestCertificateArn(projectDir, certificateArn) {
143
- const existing = readDeployManifest(projectDir);
144
- const updated = {
145
- ...existing,
146
- runtime: {
147
- ...existing.runtime,
148
- acmCertificateArn: certificateArn,
149
- },
150
- };
151
- writeDeployManifest(projectDir, updated);
152
- return updated;
153
- }
154
- export function updateDeployManifestEnv(projectDir, env) {
155
- const existing = readDeployManifest(projectDir);
156
- const updated = {
157
- ...existing,
158
- env,
159
- };
160
- writeDeployManifest(projectDir, updated);
161
- return updated;
162
- }
163
- //# sourceMappingURL=deployManifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deployManifest.js","sourceRoot":"","sources":["../../src/core/deployManifest.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import { generateSecret } from "./secrets.js";
2
- import { generateJWKS } from "./jwks.js";
3
- export function buildDeploySecretBundle() {
4
- const kid = "main";
5
- const { publicKey, privateKey } = generateJWKS();
6
- return {
7
- apiServiceToken: generateSecret(32),
8
- cookieSigningKey: generateSecret(32),
9
- bootstrapSecret: generateSecret(32),
10
- authDbPassword: generateSecret(24),
11
- apiDbPassword: generateSecret(24),
12
- authDbUser: "auth_user",
13
- apiDbUser: "api_user",
14
- authDbName: "seamless_auth",
15
- apiDbName: "seamless_api",
16
- jwks: {
17
- kid,
18
- privateKey,
19
- publicKey,
20
- publicJwksJson: JSON.stringify({
21
- keys: [
22
- {
23
- kid,
24
- pem: publicKey,
25
- },
26
- ],
27
- }, null, 2),
28
- },
29
- };
30
- }
31
- //# sourceMappingURL=deploySecrets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploySecrets.js","sourceRoot":"","sources":["../../src/core/deploySecrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAoBzC,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;IAEjD,OAAO;QACL,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;QACnC,gBAAgB,EAAE,cAAc,CAAC,EAAE,CAAC;QACpC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;QACnC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;QAClC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;QACjC,UAAU,EAAE,WAAW;QACvB,SAAS,EAAE,UAAU;QACrB,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE;YACJ,GAAG;YACH,UAAU;YACV,SAAS;YACT,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;gBACE,IAAI,EAAE;oBACJ;wBACE,GAAG;wBACH,GAAG,EAAE,SAAS;qBACf;iBACF;aACF,EACD,IAAI,EACJ,CAAC,CACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1,38 +0,0 @@
1
- import fs from "node:fs";
2
- import { getAwsDevInfraDir, getDeployManifestPath, getInfraDir, } from "./paths.js";
3
- import { deleteEcrImages, deleteEcrRepository } from "./aws.js";
4
- export async function destroyEcrResources(manifest) {
5
- const repositories = [
6
- manifest.images.web.repositoryName,
7
- manifest.images.api.repositoryName,
8
- manifest.images.postgres.repositoryName,
9
- ];
10
- if (manifest.services.auth.mode === "source") {
11
- repositories.push(manifest.images.auth.repositoryName);
12
- }
13
- if (manifest.services.admin.mode === "source") {
14
- repositories.push(manifest.images.admin.repositoryName);
15
- }
16
- for (const repositoryName of repositories) {
17
- await deleteEcrImages(manifest.awsProfile, manifest.region, repositoryName);
18
- await deleteEcrRepository(manifest.awsProfile, manifest.region, repositoryName);
19
- }
20
- }
21
- export function removeGeneratedInfraFiles(projectDir) {
22
- const manifestPath = getDeployManifestPath(projectDir);
23
- const awsDevDir = getAwsDevInfraDir(projectDir);
24
- if (fs.existsSync(manifestPath)) {
25
- fs.rmSync(manifestPath, { force: true });
26
- }
27
- if (fs.existsSync(awsDevDir)) {
28
- fs.rmSync(awsDevDir, { recursive: true, force: true });
29
- }
30
- const infraDir = getInfraDir(projectDir);
31
- if (fs.existsSync(infraDir)) {
32
- const remaining = fs.readdirSync(infraDir);
33
- if (remaining.length === 0) {
34
- fs.rmSync(infraDir, { recursive: true, force: true });
35
- }
36
- }
37
- }
38
- //# sourceMappingURL=destroy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"destroy.js","sourceRoot":"","sources":["../../src/core/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAwB;IAExB,MAAM,YAAY,GAAG;QACnB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc;QAClC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc;QAClC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc;KACxC,CAAC;IAEF,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,MAAM,cAAc,IAAI,YAAY,EAAE,CAAC;QAC1C,MAAM,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,mBAAmB,CACvB,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,MAAM,EACf,cAAc,CACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,MAAM,YAAY,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,153 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import * as p from "@clack/prompts";
4
- import { inferEnvKind, isDeployManagedKey } from "./envRegistry.js";
5
- function parseEnvFile(filePath) {
6
- const raw = fs.readFileSync(filePath, "utf8");
7
- const lines = raw.split(/\r?\n/);
8
- const result = {};
9
- for (const line of lines) {
10
- const trimmed = line.trim();
11
- if (!trimmed || trimmed.startsWith("#"))
12
- continue;
13
- const idx = trimmed.indexOf("=");
14
- if (idx === -1)
15
- continue;
16
- const key = trimmed.slice(0, idx).trim();
17
- let value = trimmed.slice(idx + 1).trim();
18
- if ((value.startsWith('"') && value.endsWith('"')) ||
19
- (value.startsWith("'") && value.endsWith("'"))) {
20
- value = value.slice(1, -1);
21
- }
22
- result[key] = value;
23
- }
24
- return result;
25
- }
26
- function discoverServiceEnvEntries(root, servicePath) {
27
- if (!servicePath)
28
- return [];
29
- const absolutePath = path.resolve(root, servicePath);
30
- if (!fs.existsSync(absolutePath))
31
- return [];
32
- const envPath = path.join(absolutePath, ".env");
33
- const envExamplePath = path.join(absolutePath, ".env.example");
34
- const merged = new Map();
35
- if (fs.existsSync(envExamplePath)) {
36
- const parsed = parseEnvFile(envExamplePath);
37
- for (const [key, value] of Object.entries(parsed)) {
38
- merged.set(key, {
39
- key,
40
- value: value || null,
41
- source: "env_example",
42
- });
43
- }
44
- }
45
- if (fs.existsSync(envPath)) {
46
- const parsed = parseEnvFile(envPath);
47
- for (const [key, value] of Object.entries(parsed)) {
48
- merged.set(key, {
49
- key,
50
- value: value || null,
51
- source: "env",
52
- });
53
- }
54
- }
55
- return [...merged.values()].sort((a, b) => a.key.localeCompare(b.key));
56
- }
57
- function mergeServiceEnv(existing, discovered, service) {
58
- const existingUserMap = new Map(existing.map((entry) => [entry.key, entry]));
59
- const result = [];
60
- for (const item of discovered) {
61
- if (isDeployManagedKey(service, item.key)) {
62
- continue;
63
- }
64
- const prior = existingUserMap.get(item.key);
65
- const discoveredValue = item.value?.trim() ? item.value : null;
66
- if (prior) {
67
- result.push({
68
- ...prior,
69
- value: prior.value || discoveredValue || "",
70
- });
71
- continue;
72
- }
73
- result.push({
74
- key: item.key,
75
- value: discoveredValue ?? "",
76
- kind: inferEnvKind(item.key),
77
- owner: "user",
78
- target: "task_definition",
79
- source: item.source,
80
- });
81
- }
82
- for (const leftover of existing) {
83
- if (!result.find((entry) => entry.key === leftover.key)) {
84
- result.push(leftover);
85
- }
86
- }
87
- return result.sort((a, b) => a.key.localeCompare(b.key));
88
- }
89
- async function promptForMissingValues(service, vars) {
90
- const resolved = [];
91
- for (const envVar of vars) {
92
- if (envVar.value && envVar.value.trim().length > 0) {
93
- resolved.push(envVar);
94
- continue;
95
- }
96
- const promptOptions = {
97
- message: `${service}: enter value for ${envVar.key}`,
98
- };
99
- const value = envVar.kind === "secret"
100
- ? await p.password(promptOptions)
101
- : await p.text(promptOptions);
102
- if (p.isCancel(value)) {
103
- p.cancel("Deploy cancelled");
104
- process.exit(0);
105
- }
106
- resolved.push({
107
- ...envVar,
108
- value: value.trim(),
109
- source: "prompt",
110
- });
111
- }
112
- return resolved;
113
- }
114
- function printDetectedEnvSummary(env) {
115
- const lines = [];
116
- for (const service of [
117
- "web",
118
- "api",
119
- "auth",
120
- "admin",
121
- ]) {
122
- const entries = env[service];
123
- if (entries.length === 0)
124
- continue;
125
- lines.push(`${service}:`);
126
- for (const entry of entries) {
127
- lines.push(` ${entry.key} (${entry.kind}, ${entry.value ? "value found" : "missing value"})`);
128
- }
129
- }
130
- if (lines.length > 0) {
131
- p.note(lines.join("\n"), "Detected custom environment variables");
132
- }
133
- }
134
- export async function discoverAndResolveCustomEnv(root, manifest) {
135
- const nextEnv = {
136
- web: mergeServiceEnv(manifest.env.web, discoverServiceEnvEntries(root, manifest.services.web.path), "web"),
137
- api: mergeServiceEnv(manifest.env.api, discoverServiceEnvEntries(root, manifest.services.api.path), "api"),
138
- auth: mergeServiceEnv(manifest.env.auth, manifest.services.auth.mode === "source"
139
- ? discoverServiceEnvEntries(root, manifest.services.auth.path)
140
- : [], "auth"),
141
- admin: mergeServiceEnv(manifest.env.admin, manifest.services.admin.mode === "source"
142
- ? discoverServiceEnvEntries(root, manifest.services.admin.path)
143
- : [], "admin"),
144
- };
145
- printDetectedEnvSummary(nextEnv);
146
- return {
147
- web: await promptForMissingValues("web", nextEnv.web),
148
- api: await promptForMissingValues("api", nextEnv.api),
149
- auth: await promptForMissingValues("auth", nextEnv.auth),
150
- admin: await promptForMissingValues("admin", nextEnv.admin),
151
- };
152
- }
153
- //# sourceMappingURL=envDiscovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"envDiscovery.js","sourceRoot":"","sources":["../../src/core/envDiscovery.ts"],"names":[],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- const DEPLOY_MANAGED_KEYS = {
2
- web: new Set(["API_URL", "VITE_API_URL"]),
3
- admin: new Set(["API_URL", "AUTH_MODE", "VITE_API_URL", "VITE_AUTH_MODE"]),
4
- api: new Set([
5
- "AUTH_SERVER_URL",
6
- "APP_ORIGIN",
7
- "UI_ORIGINS",
8
- "COOKIE_SIGNING_KEY",
9
- "API_SERVICE_TOKEN",
10
- "JWKS_KID",
11
- "DB_HOST",
12
- "DB_PORT",
13
- "DB_USER",
14
- "DB_PASSWORD",
15
- "DB_NAME",
16
- "SQL_LOGGING",
17
- ]),
18
- auth: new Set([
19
- "NODE_ENV",
20
- "VERSION",
21
- "APP_NAME",
22
- "APP_ID",
23
- "APP_ORIGIN",
24
- "ISSUER",
25
- "AUTH_MODE",
26
- "DEMO",
27
- "DEFAULT_ROLES",
28
- "AVAILABLE_ROLES",
29
- "DB_LOGGING",
30
- "DB_HOST",
31
- "DB_PORT",
32
- "DB_NAME",
33
- "DB_USER",
34
- "DB_PASSWORD",
35
- "ACCESS_TOKEN_TTL",
36
- "REFRESH_TOKEN_TTL",
37
- "RATE_LIMIT",
38
- "DELAY_AFTER",
39
- "API_SERVICE_TOKEN",
40
- "JWKS_ACTIVE_KID",
41
- "SEAMLESS_JWKS_ACTIVE_KID",
42
- "JWKS_PUBLIC_KEYS",
43
- "RPID",
44
- "ORIGINS",
45
- "SEAMLESS_BOOTSTRAP_ENABLED",
46
- "SEAMLESS_BOOTSTRAP_SECRET",
47
- ]),
48
- };
49
- export function isDeployManagedKey(service, key) {
50
- if (DEPLOY_MANAGED_KEYS[service].has(key))
51
- return true;
52
- if (service === "auth" && key.startsWith("SEAMLESS_JWKS_KEY_"))
53
- return true;
54
- return false;
55
- }
56
- export function inferEnvKind(key) {
57
- const upper = key.toUpperCase();
58
- const secretHints = [
59
- "SECRET",
60
- "TOKEN",
61
- "PASSWORD",
62
- "PRIVATE",
63
- "WEBHOOK",
64
- "KEY",
65
- "DSN",
66
- ];
67
- const alwaysPlainPrefixes = ["VITE_PUBLIC_", "NEXT_PUBLIC_", "PUBLIC_"];
68
- if (alwaysPlainPrefixes.some((prefix) => upper.startsWith(prefix))) {
69
- return "plain";
70
- }
71
- if (secretHints.some((hint) => upper.includes(hint))) {
72
- return "secret";
73
- }
74
- return "plain";
75
- }
76
- //# sourceMappingURL=envRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"envRegistry.js","sourceRoot":"","sources":["../../src/core/envRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAA2C;IAClE,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACzC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAC1E,GAAG,EAAE,IAAI,GAAG,CAAC;QACX,iBAAiB;QACjB,YAAY;QACZ,YAAY;QACZ,oBAAoB;QACpB,mBAAmB;QACnB,UAAU;QACV,SAAS;QACT,SAAS;QACT,SAAS;QACT,aAAa;QACb,SAAS;QACT,aAAa;KACd,CAAC;IACF,IAAI,EAAE,IAAI,GAAG,CAAC;QACZ,UAAU;QACV,SAAS;QACT,UAAU;QACV,QAAQ;QACR,YAAY;QACZ,QAAQ;QACR,WAAW;QACX,MAAM;QACN,eAAe;QACf,iBAAiB;QACjB,YAAY;QACZ,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,aAAa;QACb,kBAAkB;QAClB,mBAAmB;QACnB,YAAY;QACZ,aAAa;QACb,mBAAmB;QACnB,iBAAiB;QACjB,0BAA0B;QAC1B,kBAAkB;QAClB,MAAM;QACN,SAAS;QACT,4BAA4B;QAC5B,2BAA2B;KAC5B,CAAC;CACH,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,OAA0B,EAC1B,GAAW;IAEX,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvD,IAAI,OAAO,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAEhC,MAAM,WAAW,GAAG;QAClB,QAAQ;QACR,OAAO;QACP,UAAU;QACV,SAAS;QACT,SAAS;QACT,KAAK;QACL,KAAK;KACN,CAAC;IAEF,MAAM,mBAAmB,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAExE,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,11 +0,0 @@
1
- import { execCommand } from "./exec.js";
2
- async function fetchStatus(url) {
3
- await execCommand("curl", ["-f", "-L", url], { quiet: true });
4
- }
5
- export async function runPostDeployHealthChecks(urls) {
6
- await fetchStatus(urls.web);
7
- await fetchStatus(urls.api);
8
- await fetchStatus(urls.auth);
9
- await fetchStatus(urls.admin);
10
- }
11
- //# sourceMappingURL=health.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAK/C;IACC,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
package/dist/core/help.js DELETED
@@ -1,75 +0,0 @@
1
- import { VERSION } from "../index.js";
2
- export function printHelp() {
3
- console.log(`
4
- create-seamless v${VERSION}
5
-
6
- Seamless Auth CLI — scaffold and manage full-stack authentication systems.
7
-
8
- ────────────────────────────────────────────
9
-
10
- USAGE
11
-
12
- seamless init [project-name]
13
- seamless check
14
- seamless --help
15
- seamless --version
16
-
17
- ────────────────────────────────────────────
18
-
19
- COMMANDS
20
-
21
- init [project-name]
22
- Scaffold a new Seamless Auth project
23
-
24
- Without a name:
25
- • Creates project in current directory
26
-
27
- With a name:
28
- • Creates new directory
29
-
30
- check
31
- Validate project setup, Docker, and running services
32
-
33
- ────────────────────────────────────────────
34
-
35
- BEHAVIOR
36
-
37
- seamless <project-name>
38
-
39
- • Shortcut for: seamless init <project-name>
40
-
41
- ────────────────────────────────────────────
42
-
43
- WHAT YOU GET
44
-
45
- • Web application (React starter)
46
- • API server (Express)
47
- • SeamlessAuth server (Docker or local)
48
- • Admin dashboard (Docker or source)
49
- • Docker Compose setup
50
-
51
- ────────────────────────────────────────────
52
-
53
- EXAMPLES
54
-
55
- seamless init
56
- → Interactive setup in current directory
57
-
58
- seamless init my-app
59
- → Create new project in ./my-app
60
-
61
- seamless my-app
62
- → Shortcut for init
63
-
64
- seamless check
65
- → Validate your project
66
-
67
- ────────────────────────────────────────────
68
-
69
- DOCS
70
-
71
- https://docs.seamlessauth.com
72
-
73
- `);
74
- }
75
- //# sourceMappingURL=help.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/core/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;mBACK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEzB,CAAC,CAAC;AACH,CAAC"}
@@ -1,14 +0,0 @@
1
- import { commandExists } from "./exec.js";
2
- export async function ensureRequiredCommands() {
3
- const required = ["aws", "docker", "terraform"];
4
- const missing = [];
5
- for (const command of required) {
6
- const exists = await commandExists(command);
7
- if (!exists)
8
- missing.push(command);
9
- }
10
- if (missing.length > 0) {
11
- throw new Error(`Missing required commands: ${missing.join(", ")}`);
12
- }
13
- }
14
- //# sourceMappingURL=preReqs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preReqs.js","sourceRoot":"","sources":["../../src/core/preReqs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
@@ -1,34 +0,0 @@
1
- import path from "node:path";
2
- import { execCommand } from "./exec.js";
3
- import { getAwsDevInfraDir } from "./paths.js";
4
- export async function terraformInit(projectDir) {
5
- await execCommand("terraform", ["init"], {
6
- cwd: getAwsDevInfraDir(projectDir),
7
- });
8
- }
9
- export async function terraformPlan(projectDir) {
10
- await execCommand("terraform", ["plan", "-out=tfplan"], {
11
- cwd: getAwsDevInfraDir(projectDir),
12
- });
13
- }
14
- export async function terraformApply(projectDir) {
15
- await execCommand("terraform", ["apply", "-auto-approve"], {
16
- cwd: getAwsDevInfraDir(projectDir),
17
- });
18
- }
19
- export async function terraformOutput(projectDir, name) {
20
- const result = await execCommand("terraform", ["output", "-raw", name], {
21
- cwd: getAwsDevInfraDir(projectDir),
22
- quiet: true,
23
- });
24
- return result.stdout.trim();
25
- }
26
- export function getTerraformWorkingDir(projectDir) {
27
- return path.resolve(getAwsDevInfraDir(projectDir));
28
- }
29
- export async function terraformDestroy(projectDir) {
30
- await execCommand("terraform", ["destroy", "-auto-approve"], {
31
- cwd: getAwsDevInfraDir(projectDir),
32
- });
33
- }
34
- //# sourceMappingURL=terraform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../src/core/terraform.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE;QACvC,GAAG,EAAE,iBAAiB,CAAC,UAAU,CAAC;KACnC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;QACtD,GAAG,EAAE,iBAAiB,CAAC,UAAU,CAAC;KACnC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE;QACzD,GAAG,EAAE,iBAAiB,CAAC,UAAU,CAAC;KACnC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QACtE,GAAG,EAAE,iBAAiB,CAAC,UAAU,CAAC;QAClC,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IACvD,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE;QAC3D,GAAG,EAAE,iBAAiB,CAAC,UAAU,CAAC;KACnC,CAAC,CAAC;AACL,CAAC"}