@mesh-tech/mesh-cli 0.14.0 → 0.15.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.
Files changed (44) hide show
  1. package/dist/bin/mesh.js +686 -226
  2. package/dist/bin/mesh.js.map +3 -3
  3. package/dist/build-info.json +2 -2
  4. package/dist/src/commands/create-app.d.ts +4 -0
  5. package/dist/src/commands/create-app.d.ts.map +1 -1
  6. package/dist/src/commands/create-app.js +13 -6
  7. package/dist/src/commands/create-app.js.map +1 -1
  8. package/dist/src/commands/dev.d.ts +11 -0
  9. package/dist/src/commands/dev.d.ts.map +1 -1
  10. package/dist/src/commands/dev.js +70 -1
  11. package/dist/src/commands/dev.js.map +1 -1
  12. package/dist/src/commands/hub/index.d.ts.map +1 -1
  13. package/dist/src/commands/hub/index.js +65 -4
  14. package/dist/src/commands/hub/index.js.map +1 -1
  15. package/dist/src/commands/local/auth-provision.d.ts +34 -0
  16. package/dist/src/commands/local/auth-provision.d.ts.map +1 -1
  17. package/dist/src/commands/local/auth-provision.js +78 -1
  18. package/dist/src/commands/local/auth-provision.js.map +1 -1
  19. package/dist/src/commands/local/hub-local.d.ts +38 -0
  20. package/dist/src/commands/local/hub-local.d.ts.map +1 -1
  21. package/dist/src/commands/local/hub-local.js +137 -0
  22. package/dist/src/commands/local/hub-local.js.map +1 -1
  23. package/dist/src/commands/local/index.d.ts.map +1 -1
  24. package/dist/src/commands/local/index.js +31 -3
  25. package/dist/src/commands/local/index.js.map +1 -1
  26. package/dist/src/commands/local/seed-zitadel.d.ts +10 -3
  27. package/dist/src/commands/local/seed-zitadel.d.ts.map +1 -1
  28. package/dist/src/commands/local/seed-zitadel.js +259 -78
  29. package/dist/src/commands/local/seed-zitadel.js.map +1 -1
  30. package/dist/src/commands/local/stack.d.ts +30 -0
  31. package/dist/src/commands/local/stack.d.ts.map +1 -1
  32. package/dist/src/commands/local/stack.js +48 -0
  33. package/dist/src/commands/local/stack.js.map +1 -1
  34. package/fragments/base/index.ts.hbs +9 -0
  35. package/fragments/base/package.json.hbs +1 -1
  36. package/fragments/service/api/package.json.hbs +4 -0
  37. package/fragments/service/api/src/index.ts.hbs +1 -4
  38. package/fragments/temporal/worker/package.json.hbs +1 -0
  39. package/fragments/temporal/worker/src/activities.ts.hbs +5 -1
  40. package/fragments/temporal/worker/src/workflows.ts.hbs +4 -1
  41. package/package.json +2 -2
  42. package/skills/core/SKILL.md +1 -1
  43. package/stack/docker-compose.hub.yml +5 -0
  44. package/stack/docker-compose.yml +35 -0
@@ -24,21 +24,21 @@
24
24
  * Idempotent: search-before-create for project/app, "already exists" is
25
25
  * success for users, SSM params overwrite.
26
26
  */
27
- import * as fs from "fs";
28
- import * as os from "os";
29
- import * as path from "path";
30
- import { HUB_BASE_ROLES } from "@mesh-tech/api-registry";
31
- import { logInfo, logSuccess } from "../../utils/log.js";
32
- import { MeshCliError } from "../../utils/errors.js";
33
- import { writeContextConfig } from "../login.js";
34
- import { compose, hubPort, DEFAULT_HUB_PORT } from "./stack.js";
35
- import { LOCAL_TENANT, LOCAL_ENV } from "./seed.js";
36
- export const ZITADEL_ISSUER = "http://localhost:8080";
37
- export const LOGIN_CONTEXT = "local";
27
+ import * as fs from 'fs';
28
+ import * as os from 'os';
29
+ import * as path from 'path';
30
+ import { hubOperatorRoleKeys, hubRoleKeyTenant, restrictedRoleBase, } from '@mesh-tech/api-registry';
31
+ import { logInfo, logSuccess, logWarn } from '../../utils/log.js';
32
+ import { MeshCliError } from '../../utils/errors.js';
33
+ import { writeContextConfig } from '../login.js';
34
+ import { compose, hubPort, DEFAULT_HUB_PORT } from './stack.js';
35
+ import { LOCAL_TENANT, LOCAL_ENV } from './seed.js';
36
+ export const ZITADEL_ISSUER = 'http://localhost:8080';
37
+ export const LOGIN_CONTEXT = 'local';
38
38
  /** The platform org — home of platform-layer creds, same name as the cloud
39
39
  * platform tenant. Set by ZITADEL_FIRSTINSTANCE_ORG_NAME in the compose;
40
40
  * app tenants (incl. the default `local`) get their own orgs on demand. */
41
- export const PLATFORM_ORG = "mesh";
41
+ export const PLATFORM_ORG = 'mesh';
42
42
  /**
43
43
  * Approved-pattern naming inside the platform org: project per app
44
44
  * (lowercase), application per service/client inside it. The CLI is a
@@ -46,9 +46,9 @@ export const PLATFORM_ORG = "mesh";
46
46
  * (The cloud's legacy catch-all "Platform" project is being retired by the
47
47
  * pattern doc's spec items; local starts pattern-true.)
48
48
  */
49
- export const CLI_PROJECT_NAME = "mesh-cli";
50
- export const CLI_APP_NAME = "cli";
51
- export const CLI_REDIRECT_URI = "http://localhost:9876/callback";
49
+ export const CLI_PROJECT_NAME = 'mesh-cli';
50
+ export const CLI_APP_NAME = 'cli';
51
+ export const CLI_REDIRECT_URI = 'http://localhost:9876/callback';
52
52
  /**
53
53
  * The Hub's own auth config (pattern-true: the Hub is a platform app →
54
54
  * project `hub` in the platform org, application per service). The `ui`
@@ -56,11 +56,14 @@ export const CLI_REDIRECT_URI = "http://localhost:9876/callback";
56
56
  * sidecar topology `mesh.apps.Service` deploys with `auth.provider: "mesh"`.
57
57
  * Roles ARE the Hub's vocabulary — imported from the module the deployed Hub's
58
58
  * infra declares them from, so a role that exists in the cloud is grantable
59
- * locally too (MESH-2504). Local seeds the base roles only; the tenant-keyed
60
- * restricted grants (`vendor:<tenant>`) are a deployed-estate concern.
59
+ * locally too (MESH-2504), including the tenant-keyed restricted keys
60
+ * (`vendor:<tenant>`, `auditor:<tenant>`) that carry the only scope the policy
61
+ * actually reads. The bare keys alone are not a usable local vocabulary: a bare
62
+ * restricted grant names no tenant, so `checkPolicy` matches it against nothing
63
+ * and it authorizes no tenant-scoped read.
61
64
  */
62
- export const HUB_PROJECT_NAME = "hub";
63
- export const HUB_APP_NAME = "ui";
65
+ export const HUB_PROJECT_NAME = 'hub';
66
+ export const HUB_APP_NAME = 'ui';
64
67
  /** Registered on the seeded Hub app; the default-port URI is always included
65
68
  * so a later port switch never strands the app config. Zitadel's devMode only
66
69
  * relaxes the https requirement — every redirect URI must still be registered
@@ -69,13 +72,25 @@ export const HUB_APP_NAME = "ui";
69
72
  * programmatic callers that set MESH_HUB_PORT after import see the override. */
70
73
  export const hubRedirectUri = () => `http://localhost:${hubPort()}/oauth2/callback`;
71
74
  export const HUB_DEFAULT_REDIRECT_URI = `http://localhost:${DEFAULT_HUB_PORT}/oauth2/callback`;
72
- export const HUB_ROLES = HUB_BASE_ROLES;
75
+ export const HUB_ROLES = hubOperatorRoleKeys([LOCAL_TENANT]);
73
76
  export const ZITADEL_SSM_PARAM = `/mesh-platform/${LOCAL_TENANT}/${LOCAL_ENV}/platform/zitadel`;
74
77
  export const TEST_USERS_SSM_PREFIX = `/mesh-platform/${LOCAL_TENANT}/${LOCAL_ENV}/temporal/test-users`;
75
78
  /** Seeded human test users — plainly-labeled dev-grade credentials. */
76
79
  export const TEST_USERS = [
77
- { name: "dev", email: "dev@local.mesh", firstName: "Dev", lastName: "User", password: "LocalDev1!" },
78
- { name: "ops", email: "ops@local.mesh", firstName: "Ops", lastName: "User", password: "LocalDev1!" },
80
+ {
81
+ name: 'dev',
82
+ email: 'dev@local.mesh',
83
+ firstName: 'Dev',
84
+ lastName: 'User',
85
+ password: 'LocalDev1!',
86
+ },
87
+ {
88
+ name: 'ops',
89
+ email: 'ops@local.mesh',
90
+ firstName: 'Ops',
91
+ lastName: 'User',
92
+ password: 'LocalDev1!',
93
+ },
79
94
  ];
80
95
  /**
81
96
  * The CLI OIDC app payload — the same shape ZitadelPlatformIdentity creates in
@@ -86,11 +101,11 @@ export function buildCliAppPayload() {
86
101
  return {
87
102
  name: CLI_APP_NAME,
88
103
  redirectUris: [CLI_REDIRECT_URI],
89
- responseTypes: ["OIDC_RESPONSE_TYPE_CODE"],
90
- grantTypes: ["OIDC_GRANT_TYPE_AUTHORIZATION_CODE", "OIDC_GRANT_TYPE_DEVICE_CODE"],
91
- appType: "OIDC_APP_TYPE_NATIVE",
92
- authMethodType: "OIDC_AUTH_METHOD_TYPE_NONE",
93
- accessTokenType: "OIDC_TOKEN_TYPE_JWT",
104
+ responseTypes: ['OIDC_RESPONSE_TYPE_CODE'],
105
+ grantTypes: ['OIDC_GRANT_TYPE_AUTHORIZATION_CODE', 'OIDC_GRANT_TYPE_DEVICE_CODE'],
106
+ appType: 'OIDC_APP_TYPE_NATIVE',
107
+ authMethodType: 'OIDC_AUTH_METHOD_TYPE_NONE',
108
+ accessTokenType: 'OIDC_TOKEN_TYPE_JWT',
94
109
  accessTokenRoleAssertion: true,
95
110
  idTokenRoleAssertion: true,
96
111
  idTokenUserinfoAssertion: true,
@@ -99,16 +114,16 @@ export function buildCliAppPayload() {
99
114
  }
100
115
  /** Read the seeder PAT the compose bootstrap wrote to the machinekey volume. */
101
116
  export function readSeederPat() {
102
- const tmp = path.join(fs.mkdtempSync(path.join(os.tmpdir(), "mesh-zitadel-")), "pat.txt");
117
+ const tmp = path.join(fs.mkdtempSync(path.join(os.tmpdir(), 'mesh-zitadel-')), 'pat.txt');
103
118
  try {
104
- compose(["cp", "zitadel:/machinekey/pat.txt", tmp]);
105
- const pat = fs.readFileSync(tmp, "utf-8").trim();
119
+ compose(['cp', 'zitadel:/machinekey/pat.txt', tmp]);
120
+ const pat = fs.readFileSync(tmp, 'utf-8').trim();
106
121
  if (!pat)
107
- throw new Error("empty PAT file");
122
+ throw new Error('empty PAT file');
108
123
  return pat;
109
124
  }
110
125
  catch {
111
- throw new MeshCliError("Zitadel seeder PAT not found — the zitadel volume predates the bootstrap machine user (first-instance settings only apply on the first init).", { remediation: { command: "mesh stop --destroy && mesh start" } });
126
+ throw new MeshCliError('Zitadel seeder PAT not found — the zitadel volume predates the bootstrap machine user (first-instance settings only apply on the first init).', { remediation: { command: 'mesh stop --destroy && mesh start' } });
112
127
  }
113
128
  finally {
114
129
  fs.rmSync(path.dirname(tmp), { recursive: true, force: true });
@@ -120,8 +135,8 @@ export async function api(pat, method, apiPath, body, orgId) {
120
135
  method,
121
136
  headers: {
122
137
  Authorization: `Bearer ${pat}`,
123
- "Content-Type": "application/json",
124
- ...(orgId ? { "x-zitadel-orgid": orgId } : {}),
138
+ 'Content-Type': 'application/json',
139
+ ...(orgId ? { 'x-zitadel-orgid': orgId } : {}),
125
140
  },
126
141
  body: body === undefined ? undefined : JSON.stringify(body),
127
142
  signal: AbortSignal.timeout(15_000),
@@ -136,44 +151,47 @@ export async function api(pat, method, apiPath, body, orgId) {
136
151
  }
137
152
  return data;
138
153
  }
139
- export const isAlreadyExists = (err) => err?.status === 409 || err?.zitadelCode === 6 || /already exists/i.test(err?.message ?? "");
154
+ export const isAlreadyExists = (err) => err?.status === 409 || err?.zitadelCode === 6 || /already exists/i.test(err?.message ?? '');
140
155
  /**
141
156
  * Shared search-before-create for Zitadel projects: return the existing
142
157
  * project's id, else create it. Every ensure*Project in the local seeding
143
158
  * and auth-provisioning goes through this.
144
159
  */
145
160
  export async function ensureZitadelProject(pat, name, opts = {}) {
146
- const search = await api(pat, "POST", "/management/v1/projects/_search", { queries: [{ nameQuery: { name, method: "TEXT_QUERY_METHOD_EQUALS" } }] }, opts.orgId);
161
+ const search = await api(pat, 'POST', '/management/v1/projects/_search', { queries: [{ nameQuery: { name, method: 'TEXT_QUERY_METHOD_EQUALS' } }] }, opts.orgId);
147
162
  const existing = search?.result?.[0]?.id;
148
163
  if (existing) {
149
164
  if (opts.logExisting)
150
165
  logInfo(`Zitadel project '${name}' already exists`);
151
166
  return existing;
152
167
  }
153
- const created = await api(pat, "POST", "/management/v1/projects", { name, projectRoleAssertion: true }, opts.orgId);
154
- logSuccess(`Created Zitadel project '${name}'${opts.describe ? ` (${opts.describe})` : ""}`);
168
+ const created = await api(pat, 'POST', '/management/v1/projects', { name, projectRoleAssertion: true }, opts.orgId);
169
+ logSuccess(`Created Zitadel project '${name}'${opts.describe ? ` (${opts.describe})` : ''}`);
155
170
  return created.id;
156
171
  }
157
172
  /** Shared name-equals application search; returns the raw app or undefined. */
158
173
  export async function searchZitadelApp(pat, projectId, name, orgId) {
159
- const search = await api(pat, "POST", `/management/v1/projects/${projectId}/apps/_search`, { queries: [{ nameQuery: { name, method: "TEXT_QUERY_METHOD_EQUALS" } }] }, orgId);
174
+ const search = await api(pat, 'POST', `/management/v1/projects/${projectId}/apps/_search`, { queries: [{ nameQuery: { name, method: 'TEXT_QUERY_METHOD_EQUALS' } }] }, orgId);
160
175
  return search?.result?.[0];
161
176
  }
162
- const ensureCliProject = (pat) => ensureZitadelProject(pat, CLI_PROJECT_NAME, { describe: "platform client feature", logExisting: true });
177
+ const ensureCliProject = (pat) => ensureZitadelProject(pat, CLI_PROJECT_NAME, {
178
+ describe: 'platform client feature',
179
+ logExisting: true,
180
+ });
163
181
  async function ensureCliApp(pat, projectId) {
164
182
  const existing = (await searchZitadelApp(pat, projectId, CLI_APP_NAME))?.oidcConfig?.clientId;
165
183
  if (existing) {
166
184
  logInfo(`Zitadel app '${CLI_APP_NAME}' already exists`);
167
185
  return existing;
168
186
  }
169
- const created = await api(pat, "POST", `/management/v1/projects/${projectId}/apps/oidc`, buildCliAppPayload());
187
+ const created = await api(pat, 'POST', `/management/v1/projects/${projectId}/apps/oidc`, buildCliAppPayload());
170
188
  logSuccess(`Created Zitadel application '${CLI_APP_NAME}' (PKCE + device code)`);
171
189
  return created.clientId;
172
190
  }
173
191
  async function ensureTestUsers(pat) {
174
192
  for (const user of TEST_USERS) {
175
193
  try {
176
- await api(pat, "POST", "/management/v1/users/human/_import", {
194
+ await api(pat, 'POST', '/management/v1/users/human/_import', {
177
195
  userName: user.email,
178
196
  profile: {
179
197
  firstName: user.firstName,
@@ -199,13 +217,13 @@ async function ensureTestUsers(pat) {
199
217
  /** Where the Hub's oauth2-proxy credentials persist between runs (the local
200
218
  * analog of the K8s Secret the Service component creates for the sidecar). */
201
219
  export function hubAuthPath() {
202
- const dir = path.join(os.homedir(), ".cache", "mesh", "mesh-local");
220
+ const dir = path.join(os.homedir(), '.cache', 'mesh', 'mesh-local');
203
221
  fs.mkdirSync(dir, { recursive: true });
204
- return path.join(dir, "hub-auth.json");
222
+ return path.join(dir, 'hub-auth.json');
205
223
  }
206
224
  export function readHubAuth() {
207
225
  try {
208
- const parsed = JSON.parse(fs.readFileSync(hubAuthPath(), "utf-8"));
226
+ const parsed = JSON.parse(fs.readFileSync(hubAuthPath(), 'utf-8'));
209
227
  if (parsed?.clientId && parsed?.clientSecret && parsed?.cookieSecret)
210
228
  return parsed;
211
229
  return null;
@@ -214,13 +232,24 @@ export function readHubAuth() {
214
232
  return null;
215
233
  }
216
234
  }
217
- const ensureHubProject = (pat) => ensureZitadelProject(pat, HUB_PROJECT_NAME, { describe: "Hub platform app" });
235
+ const ensureHubProject = (pat) => ensureZitadelProject(pat, HUB_PROJECT_NAME, { describe: 'Hub platform app' });
236
+ /**
237
+ * What a role key is called in Zitadel's own UI and in the Hub's role picker.
238
+ *
239
+ * A tenant-keyed key reads as the base role plus the tenant it is scoped to, so
240
+ * that `vendor:local` is not offered to an administrator as an opaque string
241
+ * sitting next to a bare `vendor` that grants something entirely different.
242
+ */
243
+ function hubRoleDisplayName(roleKey) {
244
+ const tenant = hubRoleKeyTenant(roleKey);
245
+ return tenant === null ? roleKey : `${restrictedRoleBase(roleKey) ?? roleKey} (${tenant})`;
246
+ }
218
247
  async function ensureHubRoles(pat, projectId) {
219
248
  for (const role of HUB_ROLES) {
220
249
  try {
221
- await api(pat, "POST", `/management/v1/projects/${projectId}/roles`, {
250
+ await api(pat, 'POST', `/management/v1/projects/${projectId}/roles`, {
222
251
  roleKey: role,
223
- displayName: role,
252
+ displayName: hubRoleDisplayName(role),
224
253
  });
225
254
  logSuccess(`Created Hub role '${role}'`);
226
255
  }
@@ -264,14 +293,17 @@ export async function reconcileHubRedirectUris(pat, projectId, app) {
264
293
  // additionalOrigins, clockSkew, backChannelLogoutUri — are NOT carried, so
265
294
  // anything set out-of-band in the Zitadel console is dropped here. Fine for
266
295
  // the local dev app; revisit before reusing against a shared instance.
267
- await api(pat, "PUT", `/management/v1/projects/${projectId}/apps/${app.id}/oidc_config`, {
296
+ await api(pat, 'PUT', `/management/v1/projects/${projectId}/apps/${app.id}/oidc_config`, {
268
297
  redirectUris,
269
298
  postLogoutRedirectUris,
270
- responseTypes: cfg.responseTypes ?? ["OIDC_RESPONSE_TYPE_CODE"],
271
- grantTypes: cfg.grantTypes ?? ["OIDC_GRANT_TYPE_AUTHORIZATION_CODE", "OIDC_GRANT_TYPE_REFRESH_TOKEN"],
272
- appType: "OIDC_APP_TYPE_WEB",
273
- authMethodType: "OIDC_AUTH_METHOD_TYPE_BASIC",
274
- accessTokenType: cfg.accessTokenType ?? "OIDC_TOKEN_TYPE_JWT",
299
+ responseTypes: cfg.responseTypes ?? ['OIDC_RESPONSE_TYPE_CODE'],
300
+ grantTypes: cfg.grantTypes ?? [
301
+ 'OIDC_GRANT_TYPE_AUTHORIZATION_CODE',
302
+ 'OIDC_GRANT_TYPE_REFRESH_TOKEN',
303
+ ],
304
+ appType: 'OIDC_APP_TYPE_WEB',
305
+ authMethodType: 'OIDC_AUTH_METHOD_TYPE_BASIC',
306
+ accessTokenType: cfg.accessTokenType ?? 'OIDC_TOKEN_TYPE_JWT',
275
307
  accessTokenRoleAssertion: cfg.accessTokenRoleAssertion ?? true,
276
308
  idTokenRoleAssertion: cfg.idTokenRoleAssertion ?? true,
277
309
  idTokenUserinfoAssertion: cfg.idTokenUserinfoAssertion ?? true,
@@ -290,11 +322,11 @@ async function ensureHubApp(pat, projectId) {
290
322
  const persisted = readHubAuth();
291
323
  if (persisted && persisted.clientId === clientId)
292
324
  return { clientId };
293
- const regenerated = await api(pat, "POST", `/management/v1/projects/${projectId}/apps/${existing.id}/oidc_config/_generate_client_secret`, {});
325
+ const regenerated = await api(pat, 'POST', `/management/v1/projects/${projectId}/apps/${existing.id}/oidc_config/_generate_client_secret`, {});
294
326
  logSuccess(`Regenerated Hub UI client secret (local copy was missing)`);
295
327
  return { clientId, clientSecret: regenerated.clientSecret };
296
328
  }
297
- const created = await api(pat, "POST", `/management/v1/projects/${projectId}/apps/oidc`, {
329
+ const created = await api(pat, 'POST', `/management/v1/projects/${projectId}/apps/oidc`, {
298
330
  name: HUB_APP_NAME,
299
331
  redirectUris: [...new Set([hubRedirectUri(), HUB_DEFAULT_REDIRECT_URI])],
300
332
  postLogoutRedirectUris: [
@@ -307,11 +339,11 @@ async function ensureHubApp(pat, projectId) {
307
339
  `http://localhost:${DEFAULT_HUB_PORT}/`,
308
340
  ]),
309
341
  ],
310
- responseTypes: ["OIDC_RESPONSE_TYPE_CODE"],
311
- grantTypes: ["OIDC_GRANT_TYPE_AUTHORIZATION_CODE", "OIDC_GRANT_TYPE_REFRESH_TOKEN"],
312
- appType: "OIDC_APP_TYPE_WEB",
313
- authMethodType: "OIDC_AUTH_METHOD_TYPE_BASIC",
314
- accessTokenType: "OIDC_TOKEN_TYPE_JWT",
342
+ responseTypes: ['OIDC_RESPONSE_TYPE_CODE'],
343
+ grantTypes: ['OIDC_GRANT_TYPE_AUTHORIZATION_CODE', 'OIDC_GRANT_TYPE_REFRESH_TOKEN'],
344
+ appType: 'OIDC_APP_TYPE_WEB',
345
+ authMethodType: 'OIDC_AUTH_METHOD_TYPE_BASIC',
346
+ accessTokenType: 'OIDC_TOKEN_TYPE_JWT',
315
347
  accessTokenRoleAssertion: true,
316
348
  idTokenRoleAssertion: true,
317
349
  idTokenUserinfoAssertion: true,
@@ -324,23 +356,23 @@ async function ensureHubApp(pat, projectId) {
324
356
  * ops@local.mesh gets `developer` — proves per-user role claims. */
325
357
  async function ensureHubGrants(pat, projectId) {
326
358
  const grants = [
327
- { email: "admin@local.mesh", roles: ["ops"] },
328
- { email: "dev@local.mesh", roles: ["ops"] },
329
- { email: "ops@local.mesh", roles: ["developer"] },
359
+ { email: 'admin@local.mesh', roles: ['ops'] },
360
+ { email: 'dev@local.mesh', roles: ['ops'] },
361
+ { email: 'ops@local.mesh', roles: ['developer'] },
330
362
  ];
331
363
  for (const grant of grants) {
332
- const search = await api(pat, "POST", "/management/v1/users/_search", {
333
- queries: [{ userNameQuery: { userName: grant.email, method: "TEXT_QUERY_METHOD_EQUALS" } }],
364
+ const search = await api(pat, 'POST', '/management/v1/users/_search', {
365
+ queries: [{ userNameQuery: { userName: grant.email, method: 'TEXT_QUERY_METHOD_EQUALS' } }],
334
366
  });
335
367
  const userId = search?.result?.[0]?.id;
336
368
  if (!userId)
337
369
  continue;
338
370
  try {
339
- await api(pat, "POST", `/management/v1/users/${userId}/grants`, {
371
+ await api(pat, 'POST', `/management/v1/users/${userId}/grants`, {
340
372
  projectId,
341
373
  roleKeys: grant.roles,
342
374
  });
343
- logSuccess(`Granted Hub role(s) ${grant.roles.join(", ")} → ${grant.email}`);
375
+ logSuccess(`Granted Hub role(s) ${grant.roles.join(', ')} → ${grant.email}`);
344
376
  }
345
377
  catch (err) {
346
378
  if (!isAlreadyExists(err))
@@ -362,40 +394,186 @@ export async function seedHubAuth(pat) {
362
394
  : undefined;
363
395
  const config = {
364
396
  clientId: app.clientId,
365
- clientSecret: app.clientSecret ?? persisted?.clientSecret ?? "",
366
- cookieSecret: persistedCookie ?? (await import("crypto")).randomBytes(16).toString("hex"),
397
+ projectId,
398
+ clientSecret: app.clientSecret ?? persisted?.clientSecret ?? '',
399
+ cookieSecret: persistedCookie ?? (await import('crypto')).randomBytes(16).toString('hex'),
367
400
  };
368
401
  fs.writeFileSync(hubAuthPath(), JSON.stringify(config, null, 2), { mode: 0o600 });
369
402
  return config;
370
403
  }
404
+ /**
405
+ * Publish the Hub's OWN authz pointer — the local stand-in for what the platform
406
+ * Pulumi program publishes (Hub RBAC design §7.1).
407
+ *
408
+ * The Hub administers every app's identity through
409
+ * `identity/apps/{app}/users`, which resolves the app's Zitadel project and org
410
+ * from its published pointer. Without a pointer of its own the Hub is the one
411
+ * app it cannot administer: its Users page has no project to create people in
412
+ * and no role vocabulary to grant, which is why that page could only ever be a
413
+ * mock. Locally there is no Pulumi run to publish it, so seeding does.
414
+ *
415
+ * Read-modify-write: the compiled-schema keys (`opsHubMetadataRef`, `mode`) are
416
+ * published by the Hub itself and must survive this.
417
+ */
418
+ async function publishHubAuthzPointer(projectId, orgId, awsConfig) {
419
+ const { SSMClient, GetParameterCommand, PutParameterCommand } = await import("@aws-sdk/client-ssm");
420
+ const ssm = new SSMClient(awsConfig);
421
+ const name = `/mesh-platform/${LOCAL_TENANT}/${LOCAL_ENV}/apps/hub/stacks/local/authz`;
422
+ let current = {};
423
+ try {
424
+ const existing = await ssm.send(new GetParameterCommand({ Name: name }));
425
+ current = JSON.parse(existing.Parameter?.Value ?? "{}");
426
+ }
427
+ catch {
428
+ // First run — nothing published yet.
429
+ }
430
+ const value = {
431
+ spicedb: { instanceRefs: [] },
432
+ ...current,
433
+ zitadel: { projectId, orgId, issuer: ZITADEL_ISSUER },
434
+ };
435
+ await ssm.send(new PutParameterCommand({
436
+ Name: name,
437
+ Type: "String",
438
+ Overwrite: true,
439
+ Value: JSON.stringify(value),
440
+ Description: "Hub authz pointer (local analog of the platform Pulumi program)",
441
+ }));
442
+ logSuccess(`Hub authz pointer published → project ${projectId} in org ${orgId}`);
443
+ }
371
444
  /** Registry parity: what SSM discovery and `mesh dev test-user` read in the cloud. */
372
445
  async function writeRegistryParams(cliClientId, awsConfig) {
373
- const { SSMClient, PutParameterCommand } = await import("@aws-sdk/client-ssm");
446
+ const { SSMClient, PutParameterCommand } = await import('@aws-sdk/client-ssm');
374
447
  const ssm = new SSMClient(awsConfig);
375
448
  await ssm.send(new PutParameterCommand({
376
449
  Name: ZITADEL_SSM_PARAM,
377
- Type: "String",
450
+ Type: 'String',
378
451
  Overwrite: true,
379
452
  Value: JSON.stringify({ endpoint: ZITADEL_ISSUER, cliClientId }),
380
- Description: "Zitadel platform export (seeded by mesh start)",
453
+ Description: 'Zitadel platform export (seeded by mesh start)',
381
454
  }));
382
455
  for (const user of TEST_USERS) {
383
456
  await ssm.send(new PutParameterCommand({
384
457
  Name: `${TEST_USERS_SSM_PREFIX}/${user.name}`,
385
- Type: "String",
458
+ Type: 'String',
386
459
  Overwrite: true,
387
460
  Value: JSON.stringify({ email: user.email, password: user.password, roles: [] }),
388
461
  Description: `Local test user '${user.name}' (dev-grade, seeded by mesh start)`,
389
462
  }));
390
463
  }
391
464
  }
465
+ /** Secrets Manager id the Hub reads its Zitadel admin key from (opsHubSecretName). */
466
+ export const OPS_HUB_SECRET_ID = 'mesh/local/dev/zitadel/ops-hub';
467
+ /**
468
+ * Give the local Hub an ADMIN plane.
469
+ *
470
+ * The Hub verifies tokens with `ZITADEL_ISSUER`, but every WRITE — creating a
471
+ * user, minting an API key — goes through a machine key it loads from Secrets
472
+ * Manager. Without that key the local Hub silently offers no create affordance
473
+ * and nothing reaches the IdP, which reads as "the feature is broken" rather
474
+ * than "the credential was never provisioned".
475
+ *
476
+ * The key is a Zitadel machine key (private_key_jwt): `{ keyId, key, userId }`.
477
+ * Idempotent — an existing user is reused, and a fresh key is minted only when
478
+ * the secret is absent, because Zitadel returns the private half exactly once.
479
+ */
480
+ async function ensureOpsHubAdmin(pat, awsConfig) {
481
+ const { SecretsManagerClient, GetSecretValueCommand, CreateSecretCommand, PutSecretValueCommand, } = await import('@aws-sdk/client-secrets-manager');
482
+ const sm = new SecretsManagerClient(awsConfig);
483
+ const existing = await sm
484
+ .send(new GetSecretValueCommand({ SecretId: OPS_HUB_SECRET_ID }))
485
+ .catch(() => null);
486
+ if (existing?.SecretString) {
487
+ logSuccess('Hub admin key already provisioned (Zitadel writes enabled)');
488
+ return;
489
+ }
490
+ const userName = 'hub-opshub';
491
+ const found = await api(pat, 'POST', '/management/v1/users/_search', {
492
+ queries: [{ userNameQuery: { userName, method: 'TEXT_QUERY_METHOD_EQUALS' } }],
493
+ });
494
+ let userId = found?.result?.[0]?.id;
495
+ if (!userId) {
496
+ const created = await api(pat, 'POST', '/management/v1/users/machine', {
497
+ userName,
498
+ name: 'Hub Ops Hub admin',
499
+ description: 'Local Hub Zitadel admin plane (seeded by mesh start)',
500
+ });
501
+ userId = created?.userId;
502
+ }
503
+ if (!userId)
504
+ throw new MeshCliError("could not create the Hub's Zitadel admin user");
505
+ // IAM_OWNER because the Hub administers every org on the instance — each app
506
+ // tenant gets its own org, and a key is minted in the app's org, not the Hub's.
507
+ await api(pat, 'POST', '/admin/v1/members', { userId, roles: ['IAM_OWNER'] }).catch(() => undefined);
508
+ const key = await api(pat, 'POST', `/management/v1/users/${userId}/keys`, {
509
+ type: 'KEY_TYPE_JSON',
510
+ });
511
+ if (!key?.keyDetails)
512
+ throw new MeshCliError('Zitadel did not return a machine key for the Hub admin user');
513
+ const raw = JSON.parse(Buffer.from(key.keyDetails, 'base64').toString('utf8'));
514
+ const secretString = JSON.stringify({ keyId: raw.keyId, key: raw.key, userId: raw.userId });
515
+ await sm
516
+ .send(new CreateSecretCommand({ Name: OPS_HUB_SECRET_ID, SecretString: secretString }))
517
+ .catch(async () => {
518
+ await sm.send(new PutSecretValueCommand({ SecretId: OPS_HUB_SECRET_ID, SecretString: secretString }));
519
+ });
520
+ logSuccess(`Hub admin key provisioned → ${OPS_HUB_SECRET_ID} (Zitadel writes enabled)`);
521
+ }
522
+ /** Where the local stack's mail goes — the `mailpit` service in docker-compose. */
523
+ const LOCAL_SMTP = {
524
+ host: 'mailpit:1025',
525
+ from: 'no-reply@local.mesh',
526
+ fromName: 'Mesh (local)',
527
+ };
528
+ /**
529
+ * Point the instance's mail at the local mailbox, on every start.
530
+ *
531
+ * The compose file sets the same thing via `ZITADEL_DEFAULTINSTANCE_SMTP…`,
532
+ * but those apply at FIRST INIT only — so every stack that existed before the
533
+ * mailbox was added would keep no SMTP config at all, and activation and
534
+ * password-reset mail would go on silently going nowhere. Reconciling here
535
+ * covers those without asking anyone to `mesh stop --destroy`.
536
+ *
537
+ * Idempotent: reads the configured providers first and only writes when the
538
+ * host differs. Best-effort — a stack whose mail is misconfigured is worth a
539
+ * warning, not a failed `mesh start`.
540
+ */
541
+ async function ensureLocalSmtp(pat) {
542
+ try {
543
+ const existing = await api(pat, 'POST', '/admin/v1/smtp/_search', {}).catch(() => null);
544
+ const configs = existing?.result ?? [];
545
+ const match = configs.find((c) => c.host === LOCAL_SMTP.host);
546
+ if (!match) {
547
+ const created = await api(pat, 'POST', '/admin/v1/smtp', {
548
+ senderAddress: LOCAL_SMTP.from,
549
+ senderName: LOCAL_SMTP.fromName,
550
+ tls: false,
551
+ host: LOCAL_SMTP.host,
552
+ user: '',
553
+ password: '',
554
+ });
555
+ // A provider that exists but is not active still sends nothing.
556
+ if (created?.id)
557
+ await api(pat, 'POST', `/admin/v1/smtp/${created.id}/_activate`, {});
558
+ logSuccess(`Local mailbox wired to Zitadel → ${LOCAL_SMTP.host} (view at http://localhost:8025)`);
559
+ return;
560
+ }
561
+ if (match.state !== 'SMTP_CONFIG_ACTIVE' && match.id) {
562
+ await api(pat, 'POST', `/admin/v1/smtp/${match.id}/_activate`, {});
563
+ }
564
+ }
565
+ catch (err) {
566
+ logWarn(`Could not wire the local mailbox to Zitadel (${err.message}). ` +
567
+ 'Activation and password-reset mail will not be delivered locally.');
568
+ }
569
+ }
392
570
  export async function seedZitadel(awsConfig) {
393
571
  const pat = readSeederPat();
394
- const org = await api(pat, "POST", "/admin/v1/orgs/_search", {
395
- queries: [{ nameQuery: { name: PLATFORM_ORG, method: "TEXT_QUERY_METHOD_EQUALS" } }],
572
+ const org = await api(pat, 'POST', '/admin/v1/orgs/_search', {
573
+ queries: [{ nameQuery: { name: PLATFORM_ORG, method: 'TEXT_QUERY_METHOD_EQUALS' } }],
396
574
  });
397
575
  if (!org?.result?.[0]) {
398
- throw new MeshCliError(`Platform org '${PLATFORM_ORG}' not found — the zitadel volume predates the org naming.`, { remediation: { command: "mesh stop --destroy && mesh start" } });
576
+ throw new MeshCliError(`Platform org '${PLATFORM_ORG}' not found — the zitadel volume predates the org naming.`, { remediation: { command: 'mesh stop --destroy && mesh start' } });
399
577
  }
400
578
  logSuccess(`Platform org '${PLATFORM_ORG}' ready (platform tenant root — holds platform-service auth config)`);
401
579
  // Zitadel v4 defaults new instances to the login-v2 UI — a separate
@@ -403,17 +581,20 @@ export async function seedZitadel(awsConfig) {
403
581
  // authorize flow has a page to land on (idempotent; compose sets the
404
582
  // same default at first-instance time).
405
583
  try {
406
- await api(pat, "PUT", "/v2/features/instance", { loginV2: { required: false } });
584
+ await api(pat, 'PUT', '/v2/features/instance', { loginV2: { required: false } });
407
585
  }
408
586
  catch {
409
587
  // pre-v4 instance or endpoint drift — v1 login is already the default
410
588
  }
589
+ await ensureLocalSmtp(pat);
411
590
  const projectId = await ensureCliProject(pat);
412
591
  const cliClientId = await ensureCliApp(pat, projectId);
413
592
  await ensureTestUsers(pat);
414
593
  // Hub auth AFTER test users exist (role grants target them).
415
594
  const hubAuth = await seedHubAuth(pat);
595
+ await publishHubAuthzPointer(hubAuth.projectId, org.result[0].id, awsConfig);
416
596
  await writeRegistryParams(cliClientId, awsConfig);
597
+ await ensureOpsHubAdmin(pat, awsConfig);
417
598
  writeContextConfig(LOGIN_CONTEXT, { issuer: ZITADEL_ISSUER, clientId: cliClientId });
418
599
  logSuccess(`Login context '${LOGIN_CONTEXT}' configured → try: mesh login ${LOGIN_CONTEXT}`);
419
600
  return { projectId, cliClientId, hubAuth };
@@ -1 +1 @@
1
- {"version":3,"file":"seed-zitadel.js","sourceRoot":"","sources":["../../../../src/commands/local/seed-zitadel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seed-zitadel.js","sourceRoot":"","sources":["../../../../src/commands/local/seed-zitadel.ts"],"names":[],"mappings":"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"}