@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,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mesh deploy — Pulumi passthrough with automatic deployer role assumption.
|
|
3
|
+
*
|
|
4
|
+
* Credential resolution order:
|
|
5
|
+
* 1. If AWS credentials already in environment (CI/CD) → use directly
|
|
6
|
+
* 2. If ~/.config/mesh/credentials.json has a valid token for the
|
|
7
|
+
* platform context → AssumeRoleWithWebIdentity (Zitadel JWT)
|
|
8
|
+
* 3. Fallback → AssumeRole via current AWS session (SSO)
|
|
9
|
+
*
|
|
10
|
+
* The platform context (e.g., "mesh.dev") is derived from `mesh:platform`
|
|
11
|
+
* in the Pulumi stack config file (read directly from YAML, no AWS needed).
|
|
12
|
+
*
|
|
13
|
+
* Setup:
|
|
14
|
+
* pulumi config set mesh:deployerRole arn:aws:iam::123456789012:role/acme-dev-apps-deployer
|
|
15
|
+
*
|
|
16
|
+
* Examples:
|
|
17
|
+
* mesh deploy preview
|
|
18
|
+
* mesh deploy up --yes
|
|
19
|
+
* mesh deploy stack output dev --json
|
|
20
|
+
* mesh deploy destroy
|
|
21
|
+
*/
|
|
22
|
+
import { execFileSync } from "child_process";
|
|
23
|
+
import * as fs from "fs";
|
|
24
|
+
import * as path from "path";
|
|
25
|
+
import { logError, logInfo, logSuccess, logWarn } from "../utils/log.js";
|
|
26
|
+
import { findAppRoot, getCurrentStack, readStackConfig } from "../utils/pulumi.js";
|
|
27
|
+
import { readCredentials } from "./login.js";
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// Helpers
|
|
30
|
+
// =============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* Parse --stack or -s from the args array.
|
|
33
|
+
*/
|
|
34
|
+
function parseStackFromArgs(args) {
|
|
35
|
+
for (let i = 0; i < args.length; i++) {
|
|
36
|
+
if (args[i] === "--stack" || args[i] === "-s") {
|
|
37
|
+
return args[i + 1] ?? null;
|
|
38
|
+
}
|
|
39
|
+
if (args[i]?.startsWith("--stack=")) {
|
|
40
|
+
return args[i].split("=")[1] ?? null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Derive the platform context key (e.g., "mesh.dev") from stack config.
|
|
47
|
+
*
|
|
48
|
+
* Reads `mesh:platform` from Pulumi.<stack>.yaml. Supports both formats:
|
|
49
|
+
* mesh:platform: '{"env":"dev","name":"mesh"}' → "mesh.dev"
|
|
50
|
+
* mesh:platform:
|
|
51
|
+
* name: mesh
|
|
52
|
+
* env: dev → "mesh.dev"
|
|
53
|
+
*/
|
|
54
|
+
function derivePlatformContext(appRoot, stack) {
|
|
55
|
+
const configFile = path.join(appRoot, `Pulumi.${stack}.yaml`);
|
|
56
|
+
if (!fs.existsSync(configFile))
|
|
57
|
+
return null;
|
|
58
|
+
const content = fs.readFileSync(configFile, "utf-8");
|
|
59
|
+
// Try JSON-encoded string first (e.g., mesh:platform: '{"env":"dev","name":"mesh"}')
|
|
60
|
+
const jsonMatch = content.match(/mesh:platform:\s*'(\{[^']+\})'/);
|
|
61
|
+
if (jsonMatch) {
|
|
62
|
+
try {
|
|
63
|
+
const parsed = JSON.parse(jsonMatch[1]);
|
|
64
|
+
if (parsed.name && parsed.env)
|
|
65
|
+
return `${parsed.name}.${parsed.env}`;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// fall through
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Try YAML block format
|
|
72
|
+
const nameMatch = content.match(/mesh:platform:[\s\S]*?name:\s*(\S+)/);
|
|
73
|
+
const envMatch = content.match(/mesh:platform:[\s\S]*?env:\s*(\S+)/);
|
|
74
|
+
if (nameMatch && envMatch) {
|
|
75
|
+
return `${nameMatch[1]}.${envMatch[1]}`;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Assume an IAM role and return credentials as env vars.
|
|
81
|
+
*/
|
|
82
|
+
function assumeRole(roleArn) {
|
|
83
|
+
try {
|
|
84
|
+
const result = execFileSync("aws", [
|
|
85
|
+
"sts", "assume-role",
|
|
86
|
+
"--role-arn", roleArn,
|
|
87
|
+
"--role-session-name", "mesh-deploy",
|
|
88
|
+
"--output", "json",
|
|
89
|
+
], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
90
|
+
const parsed = JSON.parse(result);
|
|
91
|
+
const creds = parsed.Credentials;
|
|
92
|
+
return {
|
|
93
|
+
AWS_ACCESS_KEY_ID: creds.AccessKeyId,
|
|
94
|
+
AWS_SECRET_ACCESS_KEY: creds.SecretAccessKey,
|
|
95
|
+
AWS_SESSION_TOKEN: creds.SessionToken,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Assume role using Zitadel JWT via AssumeRoleWithWebIdentity.
|
|
104
|
+
*/
|
|
105
|
+
function assumeRoleWithWebIdentity(roleArn, idToken, sessionName) {
|
|
106
|
+
try {
|
|
107
|
+
const result = execFileSync("aws", [
|
|
108
|
+
"sts", "assume-role-with-web-identity",
|
|
109
|
+
"--role-arn", roleArn,
|
|
110
|
+
"--web-identity-token", idToken,
|
|
111
|
+
"--role-session-name", sessionName,
|
|
112
|
+
"--output", "json",
|
|
113
|
+
], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
114
|
+
const parsed = JSON.parse(result);
|
|
115
|
+
const creds = parsed.Credentials;
|
|
116
|
+
return {
|
|
117
|
+
AWS_ACCESS_KEY_ID: creds.AccessKeyId,
|
|
118
|
+
AWS_SECRET_ACCESS_KEY: creds.SecretAccessKey,
|
|
119
|
+
AWS_SESSION_TOKEN: creds.SessionToken,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// =============================================================================
|
|
127
|
+
// Command
|
|
128
|
+
// =============================================================================
|
|
129
|
+
export function registerDeployCommand(program) {
|
|
130
|
+
program
|
|
131
|
+
.command("deploy")
|
|
132
|
+
.description("Run pulumi with the app's deployer role (passthrough)")
|
|
133
|
+
.allowUnknownOption(true)
|
|
134
|
+
.allowExcessArguments(true)
|
|
135
|
+
.helpOption(false) // Don't consume --help, pass it to pulumi
|
|
136
|
+
.action((_opts, cmd) => {
|
|
137
|
+
const pulumiArgs = cmd.args;
|
|
138
|
+
// Find app root
|
|
139
|
+
const appRoot = findAppRoot(process.cwd());
|
|
140
|
+
if (!appRoot) {
|
|
141
|
+
logError("No Pulumi.yaml found. Run from within a Pulumi app directory.");
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
// Determine stack
|
|
145
|
+
const stack = parseStackFromArgs(pulumiArgs) ?? getCurrentStack(appRoot);
|
|
146
|
+
if (!stack) {
|
|
147
|
+
logError("Could not determine stack. Either:\n" +
|
|
148
|
+
" - Pass --stack <name> (e.g., mesh deploy preview --stack dev)\n" +
|
|
149
|
+
" - Select a stack first: pulumi stack select <name>");
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
// Read deployer role from stack config
|
|
153
|
+
const roleArn = readStackConfig(appRoot, stack, "mesh:deployerRole");
|
|
154
|
+
if (!roleArn) {
|
|
155
|
+
logError(`No mesh:deployerRole found in Pulumi.${stack}.yaml.\n` +
|
|
156
|
+
"Add it with:\n" +
|
|
157
|
+
" pulumi config set mesh:deployerRole arn:aws:iam::<account>:role/<tenant>-<stage>-apps-deployer");
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
const roleName = roleArn.split("/").pop() ?? roleArn;
|
|
161
|
+
// =====================================================================
|
|
162
|
+
// Credential resolution
|
|
163
|
+
// =====================================================================
|
|
164
|
+
let awsCreds = null;
|
|
165
|
+
// Path 1: Existing AWS credentials in environment (CI/CD)
|
|
166
|
+
if (process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SESSION_TOKEN) {
|
|
167
|
+
logInfo(`Using existing AWS credentials from environment`);
|
|
168
|
+
// No role assumption needed — run pulumi directly
|
|
169
|
+
try {
|
|
170
|
+
execFileSync("pulumi", pulumiArgs, {
|
|
171
|
+
cwd: appRoot,
|
|
172
|
+
stdio: "inherit",
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
process.exit(err.status ?? 1);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// Path 2: Zitadel JWT via AssumeRoleWithWebIdentity
|
|
181
|
+
const platformContext = derivePlatformContext(appRoot, stack);
|
|
182
|
+
if (platformContext) {
|
|
183
|
+
const meshCreds = readCredentials(platformContext);
|
|
184
|
+
if (meshCreds && new Date(meshCreds.expiresAt) > new Date()) {
|
|
185
|
+
const sessionName = (meshCreds.email ?? "mesh-deploy")
|
|
186
|
+
.replace(/[^a-zA-Z0-9=,.@-]/g, "_")
|
|
187
|
+
.slice(0, 64);
|
|
188
|
+
logInfo(`Assuming ${roleName} via Zitadel (${meshCreds.email ?? platformContext})`);
|
|
189
|
+
awsCreds = assumeRoleWithWebIdentity(roleArn, meshCreds.idToken, sessionName);
|
|
190
|
+
if (awsCreds) {
|
|
191
|
+
logSuccess(`Assumed ${roleName} via Zitadel`);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
logWarn("Zitadel JWT auth failed — falling back to AWS SSO.\n" +
|
|
195
|
+
` (Try: mesh login ${platformContext})`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Path 3: Fallback — AssumeRole via current AWS session (SSO)
|
|
200
|
+
if (!awsCreds) {
|
|
201
|
+
logInfo(`Assuming ${roleName} via AWS SSO`);
|
|
202
|
+
awsCreds = assumeRole(roleArn);
|
|
203
|
+
if (!awsCreds) {
|
|
204
|
+
logError(`Failed to assume role: ${roleArn}`);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
logSuccess(`Assumed ${roleName}`);
|
|
208
|
+
}
|
|
209
|
+
// Build environment — inherit current env, override AWS creds,
|
|
210
|
+
// remove AWS_PROFILE so the assumed creds are used
|
|
211
|
+
const env = { ...process.env, ...awsCreds };
|
|
212
|
+
delete env.AWS_PROFILE;
|
|
213
|
+
// Exec pulumi with the assumed role
|
|
214
|
+
try {
|
|
215
|
+
execFileSync("pulumi", pulumiArgs, {
|
|
216
|
+
cwd: appRoot,
|
|
217
|
+
env,
|
|
218
|
+
stdio: "inherit",
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
catch (err) {
|
|
222
|
+
// execFileSync throws on non-zero exit. The output was already
|
|
223
|
+
// printed via stdio: "inherit", so just exit with the same code.
|
|
224
|
+
process.exit(err.status ?? 1);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mesh dev — Pulumi-output-driven local development orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Reads `pulumi stack output dev --json` to discover services and tunnels,
|
|
5
|
+
* then launches each service's dev command in a tmux window.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* mesh dev Start all services, attach tmux
|
|
9
|
+
* mesh dev --headless Start without attaching
|
|
10
|
+
* mesh dev --kill Stop everything
|
|
11
|
+
* mesh dev --status Show service health (--json for structured)
|
|
12
|
+
* mesh dev logs <service> Tail a service's output
|
|
13
|
+
* mesh dev restart <svc> Restart a single service
|
|
14
|
+
*/
|
|
15
|
+
import { Command } from "commander";
|
|
16
|
+
export declare function registerDevCommand(program: Command): void;
|
|
17
|
+
//# sourceMappingURL=dev.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8yCpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiLzD"}
|