@mesh-tech/mesh-cli 0.1.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/dist/bin/mesh.d.ts +16 -0
- package/dist/bin/mesh.d.ts.map +1 -0
- package/dist/bin/mesh.js +40 -0
- package/dist/bin/mesh.js.map +1 -0
- package/dist/src/commands/create-app.d.ts +10 -0
- package/dist/src/commands/create-app.d.ts.map +1 -0
- package/dist/src/commands/create-app.js +176 -0
- package/dist/src/commands/create-app.js.map +1 -0
- package/dist/src/commands/db/connect.d.ts +13 -0
- package/dist/src/commands/db/connect.d.ts.map +1 -0
- package/dist/src/commands/db/connect.js +68 -0
- package/dist/src/commands/db/connect.js.map +1 -0
- package/dist/src/commands/db/credentials.d.ts +16 -0
- package/dist/src/commands/db/credentials.d.ts.map +1 -0
- package/dist/src/commands/db/credentials.js +56 -0
- package/dist/src/commands/db/credentials.js.map +1 -0
- package/dist/src/commands/db/env.d.ts +15 -0
- package/dist/src/commands/db/env.d.ts.map +1 -0
- package/dist/src/commands/db/env.js +50 -0
- package/dist/src/commands/db/env.js.map +1 -0
- package/dist/src/commands/db/exec.d.ts +54 -0
- package/dist/src/commands/db/exec.d.ts.map +1 -0
- package/dist/src/commands/db/exec.js +331 -0
- package/dist/src/commands/db/exec.js.map +1 -0
- package/dist/src/commands/db/index.d.ts +12 -0
- package/dist/src/commands/db/index.d.ts.map +1 -0
- package/dist/src/commands/db/index.js +62 -0
- package/dist/src/commands/db/index.js.map +1 -0
- package/dist/src/commands/db/psql.d.ts +16 -0
- package/dist/src/commands/db/psql.d.ts.map +1 -0
- package/dist/src/commands/db/psql.js +133 -0
- package/dist/src/commands/db/psql.js.map +1 -0
- package/dist/src/commands/deploy.d.ts +24 -0
- package/dist/src/commands/deploy.d.ts.map +1 -0
- package/dist/src/commands/deploy.js +228 -0
- package/dist/src/commands/deploy.js.map +1 -0
- package/dist/src/commands/dev.d.ts +17 -0
- package/dist/src/commands/dev.d.ts.map +1 -0
- package/dist/src/commands/dev.js +1248 -0
- package/dist/src/commands/dev.js.map +1 -0
- package/dist/src/commands/devbox.d.ts +22 -0
- package/dist/src/commands/devbox.d.ts.map +1 -0
- package/dist/src/commands/devbox.js +463 -0
- package/dist/src/commands/devbox.js.map +1 -0
- package/dist/src/commands/login.d.ts +47 -0
- package/dist/src/commands/login.d.ts.map +1 -0
- package/dist/src/commands/login.js +344 -0
- package/dist/src/commands/login.js.map +1 -0
- package/dist/src/commands/registry.d.ts +20 -0
- package/dist/src/commands/registry.d.ts.map +1 -0
- package/dist/src/commands/registry.js +336 -0
- package/dist/src/commands/registry.js.map +1 -0
- package/dist/src/commands/secrets/exec.d.ts +17 -0
- package/dist/src/commands/secrets/exec.d.ts.map +1 -0
- package/dist/src/commands/secrets/exec.js +132 -0
- package/dist/src/commands/secrets/exec.js.map +1 -0
- package/dist/src/commands/secrets/index.d.ts +10 -0
- package/dist/src/commands/secrets/index.d.ts.map +1 -0
- package/dist/src/commands/secrets/index.js +35 -0
- package/dist/src/commands/secrets/index.js.map +1 -0
- package/dist/src/commands/secrets/set.d.ts +22 -0
- package/dist/src/commands/secrets/set.d.ts.map +1 -0
- package/dist/src/commands/secrets/set.js +234 -0
- package/dist/src/commands/secrets/set.js.map +1 -0
- package/dist/src/commands/stack.d.ts +17 -0
- package/dist/src/commands/stack.d.ts.map +1 -0
- package/dist/src/commands/stack.js +175 -0
- package/dist/src/commands/stack.js.map +1 -0
- package/dist/src/commands/tunnel/index.d.ts +14 -0
- package/dist/src/commands/tunnel/index.d.ts.map +1 -0
- package/dist/src/commands/tunnel/index.js +217 -0
- package/dist/src/commands/tunnel/index.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/utils/bastion.d.ts +43 -0
- package/dist/src/utils/bastion.d.ts.map +1 -0
- package/dist/src/utils/bastion.js +77 -0
- package/dist/src/utils/bastion.js.map +1 -0
- package/dist/src/utils/context.d.ts +29 -0
- package/dist/src/utils/context.d.ts.map +1 -0
- package/dist/src/utils/context.js +132 -0
- package/dist/src/utils/context.js.map +1 -0
- package/dist/src/utils/credentials.d.ts +61 -0
- package/dist/src/utils/credentials.d.ts.map +1 -0
- package/dist/src/utils/credentials.js +145 -0
- package/dist/src/utils/credentials.js.map +1 -0
- package/dist/src/utils/index.d.ts +9 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +9 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/log.d.ts +8 -0
- package/dist/src/utils/log.d.ts.map +1 -0
- package/dist/src/utils/log.js +17 -0
- package/dist/src/utils/log.js.map +1 -0
- package/dist/src/utils/pulumi.d.ts +24 -0
- package/dist/src/utils/pulumi.d.ts.map +1 -0
- package/dist/src/utils/pulumi.js +63 -0
- package/dist/src/utils/pulumi.js.map +1 -0
- package/package.json +50 -0
- package/templates/api-web-db/api/.dockerignore +2 -0
- package/templates/api-web-db/api/Dockerfile +16 -0
- package/templates/api-web-db/api/package.json.hbs +21 -0
- package/templates/api-web-db/api/src/index.ts.hbs +123 -0
- package/templates/api-web-db/api/tsconfig.json +13 -0
- package/templates/api-web-db/package.json.hbs +27 -0
- package/templates/api-web-db/sst.config.ts.hbs +151 -0
- package/templates/api-web-db/tsconfig.json +11 -0
- package/templates/api-web-db/web/.dockerignore +3 -0
- package/templates/api-web-db/web/Dockerfile +17 -0
- package/templates/api-web-db/web/app/lib/db.server.ts +36 -0
- package/templates/api-web-db/web/app/root.tsx +29 -0
- package/templates/api-web-db/web/app/routes/home.tsx.hbs +114 -0
- package/templates/api-web-db/web/app/routes.ts +3 -0
- package/templates/api-web-db/web/package.json.hbs +30 -0
- package/templates/api-web-db/web/prisma/schema.prisma +25 -0
- package/templates/api-web-db/web/prisma.config.ts +18 -0
- package/templates/api-web-db/web/react-router.config.ts +5 -0
- package/templates/api-web-db/web/tsconfig.json +19 -0
- package/templates/api-web-db/web/vite.config.ts +9 -0
- package/templates/temporal-api-worker/README.md.hbs +133 -0
- package/templates/temporal-api-worker/api/.dockerignore +4 -0
- package/templates/temporal-api-worker/api/Dockerfile +13 -0
- package/templates/temporal-api-worker/api/package.json.hbs +23 -0
- package/templates/temporal-api-worker/api/src/encryption-codec.ts +133 -0
- package/templates/temporal-api-worker/api/src/index.ts.hbs +145 -0
- package/templates/temporal-api-worker/api/tsconfig.json +14 -0
- package/templates/temporal-api-worker/package.json.hbs +29 -0
- package/templates/temporal-api-worker/sst.config.ts.hbs +161 -0
- package/templates/temporal-api-worker/tsconfig.json +10 -0
- package/templates/temporal-api-worker/worker/.dockerignore +4 -0
- package/templates/temporal-api-worker/worker/Dockerfile +11 -0
- package/templates/temporal-api-worker/worker/package.json.hbs +25 -0
- package/templates/temporal-api-worker/worker/src/activities.ts.hbs +49 -0
- package/templates/temporal-api-worker/worker/src/bundle-workflows.ts +38 -0
- package/templates/temporal-api-worker/worker/src/encryption-codec.ts +156 -0
- package/templates/temporal-api-worker/worker/src/worker.ts.hbs +93 -0
- package/templates/temporal-api-worker/worker/src/workflows.ts.hbs +60 -0
- package/templates/temporal-api-worker/worker/tsconfig.json +14 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mesh registry — Manage npm registry authentication for @mesh-tech packages.
|
|
3
|
+
*
|
|
4
|
+
* Handles CodeArtifact token refresh and project .npmrc setup so that
|
|
5
|
+
* `pnpm install` can resolve @mesh-tech/* packages from the private registry.
|
|
6
|
+
*
|
|
7
|
+
* Credential resolution (same as mesh deploy):
|
|
8
|
+
* 1. Existing AWS credentials in environment (CI/CD) → use directly
|
|
9
|
+
* 2. Zitadel JWT from `mesh login` → AssumeRoleWithWebIdentity
|
|
10
|
+
* 3. AWS SSO / current profile → use directly
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* mesh registry login — refresh token, ensure .npmrc
|
|
14
|
+
* mesh registry login mesh.dev — use Zitadel JWT for role assumption
|
|
15
|
+
* mesh registry login --ci — CI mode (skip .npmrc creation)
|
|
16
|
+
* mesh registry status — show current auth state
|
|
17
|
+
*/
|
|
18
|
+
import { execFileSync } from "child_process";
|
|
19
|
+
import * as fs from "fs";
|
|
20
|
+
import * as path from "path";
|
|
21
|
+
import { logError, logInfo, logSuccess, logWarn } from "../utils/log.js";
|
|
22
|
+
import { readCredentials } from "./login.js";
|
|
23
|
+
// =============================================================================
|
|
24
|
+
// Constants — platform CodeArtifact registry
|
|
25
|
+
// =============================================================================
|
|
26
|
+
const CA_DOMAIN = "mesh-platform";
|
|
27
|
+
const CA_REPOSITORY = "mesh-packages";
|
|
28
|
+
const CA_NAMESPACE = "@mesh-tech";
|
|
29
|
+
const CA_REGION = "us-east-2";
|
|
30
|
+
// Default registry role — tenants get read access via their deployer role,
|
|
31
|
+
// but a dedicated read-only role can be configured here.
|
|
32
|
+
const DEFAULT_REGISTRY_ROLE = null;
|
|
33
|
+
// =============================================================================
|
|
34
|
+
// Helpers
|
|
35
|
+
// =============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Get the CodeArtifact repository endpoint URL.
|
|
38
|
+
*/
|
|
39
|
+
function getEndpoint(env) {
|
|
40
|
+
try {
|
|
41
|
+
const result = execFileSync("aws", [
|
|
42
|
+
"codeartifact", "get-repository-endpoint",
|
|
43
|
+
"--domain", CA_DOMAIN,
|
|
44
|
+
"--repository", CA_REPOSITORY,
|
|
45
|
+
"--format", "npm",
|
|
46
|
+
"--region", CA_REGION,
|
|
47
|
+
"--output", "text",
|
|
48
|
+
"--query", "repositoryEndpoint",
|
|
49
|
+
], {
|
|
50
|
+
encoding: "utf-8",
|
|
51
|
+
env: env ? { ...process.env, ...env } : undefined,
|
|
52
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
53
|
+
});
|
|
54
|
+
return result.trim() || null;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Run `aws codeartifact login` to set the auth token in ~/.npmrc.
|
|
62
|
+
*/
|
|
63
|
+
function codeartifactLogin(env) {
|
|
64
|
+
try {
|
|
65
|
+
execFileSync("aws", [
|
|
66
|
+
"codeartifact", "login",
|
|
67
|
+
"--tool", "npm",
|
|
68
|
+
"--domain", CA_DOMAIN,
|
|
69
|
+
"--repository", CA_REPOSITORY,
|
|
70
|
+
"--namespace", CA_NAMESPACE,
|
|
71
|
+
"--region", CA_REGION,
|
|
72
|
+
], {
|
|
73
|
+
encoding: "utf-8",
|
|
74
|
+
env: env ? { ...process.env, ...env } : undefined,
|
|
75
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
76
|
+
});
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Assume an IAM role, return credential env vars.
|
|
85
|
+
*/
|
|
86
|
+
function assumeRole(roleArn) {
|
|
87
|
+
try {
|
|
88
|
+
const result = execFileSync("aws", [
|
|
89
|
+
"sts", "assume-role",
|
|
90
|
+
"--role-arn", roleArn,
|
|
91
|
+
"--role-session-name", "mesh-registry",
|
|
92
|
+
"--output", "json",
|
|
93
|
+
], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
94
|
+
const creds = JSON.parse(result).Credentials;
|
|
95
|
+
return {
|
|
96
|
+
AWS_ACCESS_KEY_ID: creds.AccessKeyId,
|
|
97
|
+
AWS_SECRET_ACCESS_KEY: creds.SecretAccessKey,
|
|
98
|
+
AWS_SESSION_TOKEN: creds.SessionToken,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Assume role via Zitadel JWT (AssumeRoleWithWebIdentity).
|
|
107
|
+
*/
|
|
108
|
+
function assumeRoleWithWebIdentity(roleArn, idToken, sessionName) {
|
|
109
|
+
try {
|
|
110
|
+
const result = execFileSync("aws", [
|
|
111
|
+
"sts", "assume-role-with-web-identity",
|
|
112
|
+
"--role-arn", roleArn,
|
|
113
|
+
"--web-identity-token", idToken,
|
|
114
|
+
"--role-session-name", sessionName,
|
|
115
|
+
"--output", "json",
|
|
116
|
+
], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
117
|
+
const creds = JSON.parse(result).Credentials;
|
|
118
|
+
return {
|
|
119
|
+
AWS_ACCESS_KEY_ID: creds.AccessKeyId,
|
|
120
|
+
AWS_SECRET_ACCESS_KEY: creds.SecretAccessKey,
|
|
121
|
+
AWS_SESSION_TOKEN: creds.SessionToken,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Resolve AWS credentials for registry access.
|
|
130
|
+
*
|
|
131
|
+
* Returns env var overrides (or empty object if current env is fine).
|
|
132
|
+
*/
|
|
133
|
+
function resolveCredentials(context, roleArn) {
|
|
134
|
+
// Path 1: Existing AWS credentials in environment
|
|
135
|
+
if (process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SESSION_TOKEN) {
|
|
136
|
+
logInfo("Using existing AWS credentials from environment");
|
|
137
|
+
return {};
|
|
138
|
+
}
|
|
139
|
+
// Path 2: Zitadel JWT → AssumeRoleWithWebIdentity
|
|
140
|
+
if (context) {
|
|
141
|
+
const meshCreds = readCredentials(context);
|
|
142
|
+
if (meshCreds && new Date(meshCreds.expiresAt) > new Date()) {
|
|
143
|
+
const targetRole = roleArn || DEFAULT_REGISTRY_ROLE;
|
|
144
|
+
if (targetRole) {
|
|
145
|
+
const sessionName = (meshCreds.email ?? "mesh-registry")
|
|
146
|
+
.replace(/[^a-zA-Z0-9=,.@-]/g, "_")
|
|
147
|
+
.slice(0, 64);
|
|
148
|
+
logInfo(`Assuming registry role via Zitadel (${meshCreds.email ?? context})`);
|
|
149
|
+
const creds = assumeRoleWithWebIdentity(targetRole, meshCreds.idToken, sessionName);
|
|
150
|
+
if (creds) {
|
|
151
|
+
logSuccess("Assumed registry role via Zitadel");
|
|
152
|
+
return creds;
|
|
153
|
+
}
|
|
154
|
+
logWarn("Zitadel JWT role assumption failed — falling back to AWS profile");
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
logInfo(`Zitadel auth available (${meshCreds.email}) but no registry role configured — using AWS profile`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (meshCreds) {
|
|
161
|
+
logWarn(`Zitadel token expired for ${context}. Run: mesh login ${context}`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
logWarn(`No Zitadel credentials for ${context}. Run: mesh login ${context}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Path 3: AssumeRole via current AWS session (if a role was specified)
|
|
168
|
+
if (roleArn) {
|
|
169
|
+
logInfo(`Assuming ${roleArn.split("/").pop()} via AWS SSO`);
|
|
170
|
+
const creds = assumeRole(roleArn);
|
|
171
|
+
if (creds) {
|
|
172
|
+
logSuccess("Assumed registry role via AWS SSO");
|
|
173
|
+
return creds;
|
|
174
|
+
}
|
|
175
|
+
logWarn("Role assumption failed — trying current credentials directly");
|
|
176
|
+
}
|
|
177
|
+
// Path 4: Current AWS profile/credentials as-is
|
|
178
|
+
logInfo("Using current AWS profile");
|
|
179
|
+
return {};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Find project root by looking for pnpm-workspace.yaml, package.json, or .git
|
|
183
|
+
* walking up from cwd.
|
|
184
|
+
*/
|
|
185
|
+
function findProjectRoot() {
|
|
186
|
+
let dir = process.cwd();
|
|
187
|
+
while (true) {
|
|
188
|
+
if (fs.existsSync(path.join(dir, "pnpm-workspace.yaml")) ||
|
|
189
|
+
fs.existsSync(path.join(dir, "pnpm-lock.yaml")) ||
|
|
190
|
+
fs.existsSync(path.join(dir, "Pulumi.yaml")) ||
|
|
191
|
+
fs.existsSync(path.join(dir, ".npmrc"))) {
|
|
192
|
+
return dir;
|
|
193
|
+
}
|
|
194
|
+
const parent = path.dirname(dir);
|
|
195
|
+
if (parent === dir)
|
|
196
|
+
return null;
|
|
197
|
+
dir = parent;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Ensure project .npmrc has the @mesh-tech registry scope entry.
|
|
202
|
+
* Creates the file if it doesn't exist. Doesn't touch auth tokens
|
|
203
|
+
* (those live in ~/.npmrc via `aws codeartifact login`).
|
|
204
|
+
*/
|
|
205
|
+
function ensureProjectNpmrc(endpoint) {
|
|
206
|
+
const projectRoot = findProjectRoot() ?? process.cwd();
|
|
207
|
+
const npmrcPath = path.join(projectRoot, ".npmrc");
|
|
208
|
+
const scopeLine = `${CA_NAMESPACE}:registry=${endpoint}`;
|
|
209
|
+
if (!fs.existsSync(npmrcPath)) {
|
|
210
|
+
fs.writeFileSync(npmrcPath, scopeLine + "\n", "utf-8");
|
|
211
|
+
return { created: true, updated: false, path: npmrcPath };
|
|
212
|
+
}
|
|
213
|
+
const content = fs.readFileSync(npmrcPath, "utf-8");
|
|
214
|
+
// Check if scope already configured (with any endpoint)
|
|
215
|
+
const scopeRegex = new RegExp(`^${CA_NAMESPACE.replace("/", "\\/")}:registry=.+$`, "m");
|
|
216
|
+
if (scopeRegex.test(content)) {
|
|
217
|
+
// Check if it's the right endpoint
|
|
218
|
+
if (content.includes(scopeLine)) {
|
|
219
|
+
return { created: false, updated: false, path: npmrcPath };
|
|
220
|
+
}
|
|
221
|
+
// Update existing line
|
|
222
|
+
const updated = content.replace(scopeRegex, scopeLine);
|
|
223
|
+
fs.writeFileSync(npmrcPath, updated, "utf-8");
|
|
224
|
+
return { created: false, updated: true, path: npmrcPath };
|
|
225
|
+
}
|
|
226
|
+
// Append scope line
|
|
227
|
+
const separator = content.endsWith("\n") ? "" : "\n";
|
|
228
|
+
fs.writeFileSync(npmrcPath, content + separator + scopeLine + "\n", "utf-8");
|
|
229
|
+
return { created: false, updated: true, path: npmrcPath };
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Check if the current ~/.npmrc has a valid CodeArtifact token for our registry.
|
|
233
|
+
*/
|
|
234
|
+
function checkExistingToken() {
|
|
235
|
+
const homeNpmrc = path.join(process.env.HOME ?? "~", ".npmrc");
|
|
236
|
+
if (!fs.existsSync(homeNpmrc))
|
|
237
|
+
return { valid: false };
|
|
238
|
+
const content = fs.readFileSync(homeNpmrc, "utf-8");
|
|
239
|
+
// Look for a CodeArtifact token line for our domain
|
|
240
|
+
const hasToken = content.includes("mesh-platform") && content.includes("_authToken=");
|
|
241
|
+
if (!hasToken)
|
|
242
|
+
return { valid: false };
|
|
243
|
+
// Try a quick endpoint lookup to verify the token works
|
|
244
|
+
const endpoint = getEndpoint();
|
|
245
|
+
if (!endpoint)
|
|
246
|
+
return { valid: false };
|
|
247
|
+
return { valid: true, endpoint };
|
|
248
|
+
}
|
|
249
|
+
// =============================================================================
|
|
250
|
+
// Commands
|
|
251
|
+
// =============================================================================
|
|
252
|
+
export function registerRegistryCommands(program) {
|
|
253
|
+
const registry = program
|
|
254
|
+
.command("registry")
|
|
255
|
+
.description("Manage npm registry auth for @mesh-tech packages");
|
|
256
|
+
registry
|
|
257
|
+
.command("login")
|
|
258
|
+
.description("Authenticate with CodeArtifact and configure .npmrc")
|
|
259
|
+
.argument("[context]", 'Platform context for Zitadel auth (e.g., "mesh.dev")')
|
|
260
|
+
.option("--role <arn>", "IAM role ARN for registry access")
|
|
261
|
+
.option("--ci", "CI mode — refresh token only, skip project .npmrc setup")
|
|
262
|
+
.option("--skip-npmrc", "Skip project .npmrc setup")
|
|
263
|
+
.action(async (context, opts) => {
|
|
264
|
+
// Resolve AWS credentials
|
|
265
|
+
const awsCreds = resolveCredentials(context, opts.role);
|
|
266
|
+
const env = Object.keys(awsCreds).length > 0
|
|
267
|
+
? { ...process.env, ...awsCreds }
|
|
268
|
+
: undefined;
|
|
269
|
+
// Step 1: Run `aws codeartifact login` (sets token in ~/.npmrc)
|
|
270
|
+
logInfo("Authenticating with CodeArtifact...");
|
|
271
|
+
if (!codeartifactLogin(env)) {
|
|
272
|
+
logError("CodeArtifact login failed.\n\n" +
|
|
273
|
+
"Check that your AWS credentials have codeartifact:GetAuthorizationToken permission.\n" +
|
|
274
|
+
"If using AWS SSO, run: aws sso login\n" +
|
|
275
|
+
"If using Zitadel: mesh login <context>");
|
|
276
|
+
process.exit(1);
|
|
277
|
+
}
|
|
278
|
+
logSuccess("CodeArtifact token refreshed (valid for 12 hours)");
|
|
279
|
+
// Step 2: Get endpoint URL
|
|
280
|
+
const endpoint = getEndpoint(env);
|
|
281
|
+
if (!endpoint) {
|
|
282
|
+
logWarn("Could not retrieve registry endpoint — .npmrc scope not configured");
|
|
283
|
+
logInfo("You may need to manually add to .npmrc:");
|
|
284
|
+
logInfo(` ${CA_NAMESPACE}:registry=https://mesh-platform-<ACCOUNT>.d.codeartifact.${CA_REGION}.amazonaws.com/npm/${CA_REPOSITORY}/`);
|
|
285
|
+
process.exit(0);
|
|
286
|
+
}
|
|
287
|
+
// Step 3: Ensure project .npmrc (unless --ci or --skip-npmrc)
|
|
288
|
+
if (!opts.ci && !opts.skipNpmrc) {
|
|
289
|
+
const result = ensureProjectNpmrc(endpoint);
|
|
290
|
+
if (result.created) {
|
|
291
|
+
logSuccess(`Created ${result.path} with ${CA_NAMESPACE} registry scope`);
|
|
292
|
+
}
|
|
293
|
+
else if (result.updated) {
|
|
294
|
+
logSuccess(`Updated ${CA_NAMESPACE} registry in ${result.path}`);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
logInfo(`${result.path} already configured`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
logSuccess(`Ready — run pnpm install to fetch ${CA_NAMESPACE} packages`);
|
|
301
|
+
});
|
|
302
|
+
registry
|
|
303
|
+
.command("status")
|
|
304
|
+
.description("Check current registry authentication status")
|
|
305
|
+
.action(() => {
|
|
306
|
+
const { valid, endpoint } = checkExistingToken();
|
|
307
|
+
if (!valid) {
|
|
308
|
+
logWarn("No valid CodeArtifact token found. Run: mesh registry login");
|
|
309
|
+
process.exit(1);
|
|
310
|
+
}
|
|
311
|
+
logSuccess("CodeArtifact token found in ~/.npmrc");
|
|
312
|
+
if (endpoint) {
|
|
313
|
+
logInfo(`Endpoint: ${endpoint}`);
|
|
314
|
+
}
|
|
315
|
+
// Check project .npmrc
|
|
316
|
+
const projectRoot = findProjectRoot();
|
|
317
|
+
if (projectRoot) {
|
|
318
|
+
const npmrcPath = path.join(projectRoot, ".npmrc");
|
|
319
|
+
if (fs.existsSync(npmrcPath)) {
|
|
320
|
+
const content = fs.readFileSync(npmrcPath, "utf-8");
|
|
321
|
+
if (content.includes(`${CA_NAMESPACE}:registry=`)) {
|
|
322
|
+
logSuccess(`Project .npmrc configured (${npmrcPath})`);
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
logWarn(`Project .npmrc exists but missing ${CA_NAMESPACE} scope (${npmrcPath})`);
|
|
326
|
+
logInfo("Run: mesh registry login");
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
logWarn(`No .npmrc in project root (${projectRoot})`);
|
|
331
|
+
logInfo("Run: mesh registry login");
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/commands/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mesh secrets exec - Execute command with secrets from AWS Secrets Manager
|
|
3
|
+
*
|
|
4
|
+
* Fetches a JSON secret from Secrets Manager and injects all key-value pairs
|
|
5
|
+
* as environment variables before running the specified command.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* mesh secrets exec --secret=<name-or-arn> [--db-host=<host>] -- <command>
|
|
9
|
+
*
|
|
10
|
+
* Options:
|
|
11
|
+
* --db-host=<host> Rewrite DATABASE_URL host (for dev mode tunneling)
|
|
12
|
+
*
|
|
13
|
+
* Example:
|
|
14
|
+
* mesh secrets exec --secret=mesh/encore/dev/rdc/db-credentials --db-host=localhost -- pnpm dev
|
|
15
|
+
*/
|
|
16
|
+
export declare function execCommand(args: string[]): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../../src/commands/secrets/exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA4FH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D/D"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mesh secrets exec - Execute command with secrets from AWS Secrets Manager
|
|
3
|
+
*
|
|
4
|
+
* Fetches a JSON secret from Secrets Manager and injects all key-value pairs
|
|
5
|
+
* as environment variables before running the specified command.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* mesh secrets exec --secret=<name-or-arn> [--db-host=<host>] -- <command>
|
|
9
|
+
*
|
|
10
|
+
* Options:
|
|
11
|
+
* --db-host=<host> Rewrite DATABASE_URL host (for dev mode tunneling)
|
|
12
|
+
*
|
|
13
|
+
* Example:
|
|
14
|
+
* mesh secrets exec --secret=mesh/encore/dev/rdc/db-credentials --db-host=localhost -- pnpm dev
|
|
15
|
+
*/
|
|
16
|
+
import { spawn } from "child_process";
|
|
17
|
+
import { SecretsManagerClient, GetSecretValueCommand, } from "@aws-sdk/client-secrets-manager";
|
|
18
|
+
// Simple logging helpers
|
|
19
|
+
function logInfo(msg) {
|
|
20
|
+
console.log(`\u001b[36mℹ\u001b[0m ${msg}`);
|
|
21
|
+
}
|
|
22
|
+
function logSuccess(msg) {
|
|
23
|
+
console.log(`\u001b[32m✓\u001b[0m ${msg}`);
|
|
24
|
+
}
|
|
25
|
+
function logError(msg) {
|
|
26
|
+
console.error(`\u001b[31m✗\u001b[0m ${msg}`);
|
|
27
|
+
}
|
|
28
|
+
function parseArgs(args) {
|
|
29
|
+
const options = {};
|
|
30
|
+
let commandArgs = [];
|
|
31
|
+
for (let i = 0; i < args.length; i++) {
|
|
32
|
+
const arg = args[i];
|
|
33
|
+
if (arg === "--") {
|
|
34
|
+
commandArgs = args.slice(i + 1);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
if (arg.startsWith("--secret=")) {
|
|
38
|
+
options.secret = arg.substring("--secret=".length);
|
|
39
|
+
}
|
|
40
|
+
else if (arg === "--secret" && args[i + 1]) {
|
|
41
|
+
options.secret = args[++i];
|
|
42
|
+
}
|
|
43
|
+
else if (arg.startsWith("--db-host=")) {
|
|
44
|
+
options.dbHost = arg.substring("--db-host=".length);
|
|
45
|
+
}
|
|
46
|
+
else if (arg === "--db-host" && args[i + 1]) {
|
|
47
|
+
options.dbHost = args[++i];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return { options, commandArgs };
|
|
51
|
+
}
|
|
52
|
+
async function fetchSecret(client, secretId) {
|
|
53
|
+
const response = await client.send(new GetSecretValueCommand({ SecretId: secretId }));
|
|
54
|
+
if (!response.SecretString) {
|
|
55
|
+
throw new Error("Secret has no string value");
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
return JSON.parse(response.SecretString);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
throw new Error("Secret is not valid JSON");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Rewrite the host in a DATABASE_URL
|
|
66
|
+
* Useful for dev mode where we tunnel to the database via localhost
|
|
67
|
+
*/
|
|
68
|
+
function rewriteDatabaseHost(databaseUrl, newHost) {
|
|
69
|
+
try {
|
|
70
|
+
const url = new URL(databaseUrl);
|
|
71
|
+
const originalHost = url.host;
|
|
72
|
+
url.hostname = newHost;
|
|
73
|
+
// Keep the original port if the new host doesn't include one
|
|
74
|
+
if (!newHost.includes(":")) {
|
|
75
|
+
url.port = url.port || "5432";
|
|
76
|
+
}
|
|
77
|
+
logInfo(`Rewrote DATABASE_URL host: ${originalHost} → ${url.host}`);
|
|
78
|
+
return url.toString();
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
logError(`Failed to parse DATABASE_URL for host rewrite`);
|
|
82
|
+
return databaseUrl;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export async function execCommand(args) {
|
|
86
|
+
const { options, commandArgs } = parseArgs(args);
|
|
87
|
+
if (!options.secret || commandArgs.length === 0) {
|
|
88
|
+
logError("Usage: mesh secrets exec --secret=<name-or-arn> [options] -- <command>");
|
|
89
|
+
logInfo("");
|
|
90
|
+
logInfo("Options:");
|
|
91
|
+
logInfo(" --secret=<name-or-arn> Secret name or ARN in Secrets Manager");
|
|
92
|
+
logInfo(" --db-host=<host> Rewrite DATABASE_URL host (for dev tunneling)");
|
|
93
|
+
logInfo("");
|
|
94
|
+
logInfo("Examples:");
|
|
95
|
+
logInfo(" mesh secrets exec --secret=mesh/tenant/stage/app/secret -- pnpm dev");
|
|
96
|
+
logInfo(" mesh secrets exec --secret=mesh/tenant/stage/app/db --db-host=localhost -- pnpm dev");
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
const secretsManager = new SecretsManagerClient({});
|
|
100
|
+
logInfo(`Fetching secret: ${options.secret}`);
|
|
101
|
+
let secretValues;
|
|
102
|
+
try {
|
|
103
|
+
secretValues = await fetchSecret(secretsManager, options.secret);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
logError(`Failed to fetch secret: ${error}`);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
const envKeys = Object.keys(secretValues);
|
|
110
|
+
logSuccess(`Loaded ${envKeys.length} environment variable(s) from secret`);
|
|
111
|
+
// Rewrite DATABASE_URL host for dev mode tunneling
|
|
112
|
+
if (options.dbHost && secretValues.DATABASE_URL) {
|
|
113
|
+
secretValues.DATABASE_URL = rewriteDatabaseHost(secretValues.DATABASE_URL, options.dbHost);
|
|
114
|
+
}
|
|
115
|
+
// Build environment with secret values injected
|
|
116
|
+
const env = {
|
|
117
|
+
...process.env,
|
|
118
|
+
...secretValues,
|
|
119
|
+
};
|
|
120
|
+
const [cmd, ...cmdArgs] = commandArgs;
|
|
121
|
+
logInfo(`Running: ${commandArgs.join(" ")}`);
|
|
122
|
+
console.log("");
|
|
123
|
+
const child = spawn(cmd, cmdArgs, { stdio: "inherit", env });
|
|
124
|
+
child.on("exit", (code) => {
|
|
125
|
+
process.exit(code ?? 0);
|
|
126
|
+
});
|
|
127
|
+
child.on("error", (error) => {
|
|
128
|
+
logError(`Failed to start command: ${error.message}`);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../../src/commands/secrets/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mesh secrets - Commands for working with AWS Secrets Manager
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* mesh secrets exec - Run command with secrets injected as environment variables
|
|
6
|
+
* mesh secrets set - Set credentials for an external service
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from "commander";
|
|
9
|
+
export declare function registerSecretsCommands(program: Command): void;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B9D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mesh secrets - Commands for working with AWS Secrets Manager
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* mesh secrets exec - Run command with secrets injected as environment variables
|
|
6
|
+
* mesh secrets set - Set credentials for an external service
|
|
7
|
+
*/
|
|
8
|
+
import { execCommand } from "./exec.js";
|
|
9
|
+
import { setCommand } from "./set.js";
|
|
10
|
+
export function registerSecretsCommands(program) {
|
|
11
|
+
const secrets = program
|
|
12
|
+
.command("secrets")
|
|
13
|
+
.description("AWS Secrets Manager utilities");
|
|
14
|
+
secrets
|
|
15
|
+
.command("exec")
|
|
16
|
+
.description("Run command with secrets as environment variables")
|
|
17
|
+
.allowUnknownOption(true)
|
|
18
|
+
.action(async (_opts, cmd) => {
|
|
19
|
+
// Get all args after "secrets exec"
|
|
20
|
+
const args = cmd.args;
|
|
21
|
+
await execCommand(args);
|
|
22
|
+
});
|
|
23
|
+
secrets
|
|
24
|
+
.command("set [service]")
|
|
25
|
+
.description("Set credentials for an external service (e.g., mesh secrets set external/symitar)")
|
|
26
|
+
.option("--key <key>", "Instance key for multi-instance services (e.g., FI ID)")
|
|
27
|
+
.option("--all", "Prompt for all fields including optional ones")
|
|
28
|
+
.option("--json <json>", "Non-interactive: provide values as JSON")
|
|
29
|
+
.option("--stage <stage>", "Override stage detection")
|
|
30
|
+
.option("--region <region>", "AWS region (default: us-east-2)")
|
|
31
|
+
.action(async (service, opts) => {
|
|
32
|
+
await setCommand(service, opts);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAEhD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mDAAmD,CAAC;SAChE,kBAAkB,CAAC,IAAI,CAAC;SACxB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,oCAAoC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mFAAmF,CAAC;SAChG,MAAM,CAAC,aAAa,EAAE,wDAAwD,CAAC;SAC/E,MAAM,CAAC,OAAO,EAAE,+CAA+C,CAAC;SAChE,MAAM,CAAC,eAAe,EAAE,yCAAyC,CAAC;SAClE,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;SACrD,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mesh secrets set — Set credentials for an external service.
|
|
3
|
+
*
|
|
4
|
+
* Reads the credential field schema from SSM (written by ExternalService),
|
|
5
|
+
* prompts interactively for each field, and writes to Secrets Manager.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* mesh secrets set external/symitar # single-instance
|
|
9
|
+
* mesh secrets set external/symitar --key=12345 # multi-instance (specific key)
|
|
10
|
+
* mesh secrets set external/symitar --all # include optional fields
|
|
11
|
+
* mesh secrets set external/symitar --non-interactive --json='{"baseUrl":"..."}'
|
|
12
|
+
*
|
|
13
|
+
* The command detects tenant/stage from Pulumi config in the current directory.
|
|
14
|
+
*/
|
|
15
|
+
export declare function setCommand(servicePath: string | undefined, opts: {
|
|
16
|
+
key?: string;
|
|
17
|
+
all?: boolean;
|
|
18
|
+
json?: string;
|
|
19
|
+
stage?: string;
|
|
20
|
+
region?: string;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/commands/secrets/set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA4GH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE;IACJ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAkKf"}
|