seamless-cli 0.2.0
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/LICENSE +79 -0
- package/LICENSE.md +26 -0
- package/README.md +238 -0
- package/dist/commands/bootstrapAdmin.js +96 -0
- package/dist/commands/bootstrapAdmin.js.map +1 -0
- package/dist/commands/check.js +92 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/contribute.js +121 -0
- package/dist/commands/contribute.js.map +1 -0
- package/dist/commands/deploy.js +190 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/destroy.js +122 -0
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/help.js +103 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/init.js +73 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/contributor/catalog.js +129 -0
- package/dist/contributor/catalog.js.map +1 -0
- package/dist/contributor/workspace.js +551 -0
- package/dist/contributor/workspace.js.map +1 -0
- package/dist/core/acm.js +24 -0
- package/dist/core/acm.js.map +1 -0
- package/dist/core/aws.js +374 -0
- package/dist/core/aws.js.map +1 -0
- package/dist/core/bootstrapSecret.js +31 -0
- package/dist/core/bootstrapSecret.js.map +1 -0
- package/dist/core/buildPush.js +91 -0
- package/dist/core/buildPush.js.map +1 -0
- package/dist/core/configure.js +25 -0
- package/dist/core/configure.js.map +1 -0
- package/dist/core/deployConfig.js +66 -0
- package/dist/core/deployConfig.js.map +1 -0
- package/dist/core/deployManifest.js +163 -0
- package/dist/core/deployManifest.js.map +1 -0
- package/dist/core/deploySecrets.js +31 -0
- package/dist/core/deploySecrets.js.map +1 -0
- package/dist/core/destroy.js +38 -0
- package/dist/core/destroy.js.map +1 -0
- package/dist/core/env.js +35 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/envDiscovery.js +153 -0
- package/dist/core/envDiscovery.js.map +1 -0
- package/dist/core/envRegistry.js +76 -0
- package/dist/core/envRegistry.js.map +1 -0
- package/dist/core/exec.js +17 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/fetch.js +9 -0
- package/dist/core/fetch.js.map +1 -0
- package/dist/core/health.js +11 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/help.js +75 -0
- package/dist/core/help.js.map +1 -0
- package/dist/core/inspect.js +15 -0
- package/dist/core/inspect.js.map +1 -0
- package/dist/core/jwks.js +19 -0
- package/dist/core/jwks.js.map +1 -0
- package/dist/core/output.js +94 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/packageManager.js +10 -0
- package/dist/core/packageManager.js.map +1 -0
- package/dist/core/paths.js +7 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/preReqs.js +14 -0
- package/dist/core/preReqs.js.map +1 -0
- package/dist/core/secrets.js +8 -0
- package/dist/core/secrets.js.map +1 -0
- package/dist/core/terraform.js +34 -0
- package/dist/core/terraform.js.map +1 -0
- package/dist/core/tfVars.js +69 -0
- package/dist/core/tfVars.js.map +1 -0
- package/dist/generators/admin/admin.js +2 -0
- package/dist/generators/admin/admin.js.map +1 -0
- package/dist/generators/auth/auth.js +47 -0
- package/dist/generators/auth/auth.js.map +1 -0
- package/dist/generators/backend/express.js +13 -0
- package/dist/generators/backend/express.js.map +1 -0
- package/dist/generators/config/config.js +43 -0
- package/dist/generators/config/config.js.map +1 -0
- package/dist/generators/deploy/aws/dev/files.js +36 -0
- package/dist/generators/deploy/aws/dev/files.js.map +1 -0
- package/dist/generators/deploy/aws/dev/template.js +1240 -0
- package/dist/generators/deploy/aws/dev/template.js.map +1 -0
- package/dist/generators/docker/docker.js +263 -0
- package/dist/generators/docker/docker.js.map +1 -0
- package/dist/generators/frontend/react.js +13 -0
- package/dist/generators/frontend/react.js.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/contributeSetup.js +39 -0
- package/dist/prompts/contributeSetup.js.map +1 -0
- package/dist/prompts/deploySetup.js +244 -0
- package/dist/prompts/deploySetup.js.map +1 -0
- package/dist/prompts/projectSetup.js +73 -0
- package/dist/prompts/projectSetup.js.map +1 -0
- package/dist/utils/repoUtils.js +23 -0
- package/dist/utils/repoUtils.js.map +1 -0
- package/dist/utils/writeEnv.js +9 -0
- package/dist/utils/writeEnv.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,163 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployManifest.js","sourceRoot":"","sources":["../../src/core/deployManifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/dist/core/env.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
export function parseEnv(filePath) {
|
|
3
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
4
|
+
const lines = content.split("\n");
|
|
5
|
+
const env = {};
|
|
6
|
+
for (const line of lines) {
|
|
7
|
+
if (!line || line.startsWith("#"))
|
|
8
|
+
continue;
|
|
9
|
+
const [key, ...rest] = line.split("=");
|
|
10
|
+
if (!key)
|
|
11
|
+
continue;
|
|
12
|
+
env[key.trim()] = rest.join("=").trim();
|
|
13
|
+
}
|
|
14
|
+
return env;
|
|
15
|
+
}
|
|
16
|
+
export function parseEnvString(content) {
|
|
17
|
+
const lines = content.split("\n");
|
|
18
|
+
const env = {};
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
if (!line || line.startsWith("#"))
|
|
21
|
+
continue;
|
|
22
|
+
const [key, ...rest] = line.split("=");
|
|
23
|
+
if (!key)
|
|
24
|
+
continue;
|
|
25
|
+
env[key.trim()] = rest.join("=").trim();
|
|
26
|
+
}
|
|
27
|
+
return env;
|
|
28
|
+
}
|
|
29
|
+
export function writeEnv(filePath, env) {
|
|
30
|
+
const content = Object.entries(env)
|
|
31
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
32
|
+
.join("\n");
|
|
33
|
+
fs.writeFileSync(filePath, content + "\n");
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/core/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAE5C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAE5C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,GAA2B;IACpE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envDiscovery.js","sourceRoot":"","sources":["../../src/core/envDiscovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
export function runCommand(command, args, cwd) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const child = spawn(command, args, {
|
|
5
|
+
stdio: "inherit",
|
|
6
|
+
cwd,
|
|
7
|
+
shell: true,
|
|
8
|
+
});
|
|
9
|
+
child.on("close", (code) => {
|
|
10
|
+
if (code === 0)
|
|
11
|
+
resolve();
|
|
12
|
+
else
|
|
13
|
+
reject(new Error(`${command} failed`));
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/core/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,IAAc,EACd,GAAW;IAEX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,SAAS;YAChB,GAAG;YACH,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export async function fetchEnvExample() {
|
|
2
|
+
const url = "https://raw.githubusercontent.com/fells-code/seamless-auth-api/main/.env.example";
|
|
3
|
+
const res = await fetch(url);
|
|
4
|
+
if (!res.ok) {
|
|
5
|
+
throw new Error("Failed to fetch auth env.example");
|
|
6
|
+
}
|
|
7
|
+
return await res.text();
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/core/fetch.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,GAAG,GACP,kFAAkF,CAAC;IAErF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|