@mesh-tech/mesh-cli 0.40.10 → 0.40.11

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 (53) hide show
  1. package/dist/bin/{mesh.auth-preflight-RCZH7V34.js → mesh.auth-preflight-BGI5LPLN.js} +1 -1
  2. package/dist/bin/{mesh.chunk-TFOKVJ34.js → mesh.chunk-3WJGDNHA.js} +71 -27
  3. package/dist/bin/mesh.chunk-3WJGDNHA.js.map +6 -0
  4. package/dist/bin/{mesh.chunk-SEIVILJR.js → mesh.chunk-4XX62O6Z.js} +1 -1
  5. package/dist/bin/{mesh.chunk-SOX2CJMU.js → mesh.chunk-DYWR76EO.js} +1 -1
  6. package/dist/bin/{mesh.chunk-N55Y3YII.js → mesh.chunk-EHLBX24J.js} +1 -1
  7. package/dist/bin/{mesh.chunk-M23VKWSF.js → mesh.chunk-GLG5JBI7.js} +23 -24
  8. package/dist/bin/mesh.chunk-GLG5JBI7.js.map +6 -0
  9. package/dist/bin/{mesh.chunk-TG4FBJK3.js → mesh.chunk-O5CP4NPZ.js} +2 -2
  10. package/dist/bin/{mesh.chunk-NT2NPR7J.js → mesh.chunk-O677AU5E.js} +1 -1
  11. package/dist/bin/{mesh.chunk-CA4LI762.js → mesh.chunk-WT27GBE4.js} +1 -1
  12. package/dist/bin/{mesh.chunk-CN6PMHQ5.js → mesh.chunk-YKW256CK.js} +3 -3
  13. package/dist/bin/{mesh.create-app-QRAZVRA3.js → mesh.create-app-GQIGCZNI.js} +3 -3
  14. package/dist/bin/{mesh.dev-token-server-DIECW5KC.js → mesh.dev-token-server-IJUVRBWI.js} +2 -2
  15. package/dist/bin/mesh.js +9 -9
  16. package/dist/bin/{mesh.login-J3QPALUS.js → mesh.login-N5LPLRRX.js} +2 -2
  17. package/dist/bin/{mesh.platform-setup-SNIAJTWJ.js → mesh.platform-setup-PCDLE2EI.js} +1 -1
  18. package/dist/bin/{mesh.program-T57YYRF5.js → mesh.program-WSFVQU7P.js} +9 -9
  19. package/dist/bin/{mesh.registry-UTIC3OY2.js → mesh.registry-5U4L6256.js} +4 -4
  20. package/dist/bin/{mesh.registry-identity-Y4Y5WFQ3.js → mesh.registry-identity-6UPUHKO2.js} +3 -3
  21. package/dist/bin/{mesh.review-command-LYTUNZ5G.js → mesh.review-command-MLBWVHF7.js} +3 -3
  22. package/dist/bin/{mesh.start-OWIKVKN6.js → mesh.start-24YIFB4O.js} +2 -2
  23. package/dist/bin/{mesh.wizard-QL5SQ47K.js → mesh.wizard-6HMOBC5L.js} +7 -7
  24. package/dist/build-info.json +2 -2
  25. package/dist/src/commands/local/index.js +5 -7
  26. package/dist/src/commands/local/seed-zitadel.d.ts +18 -0
  27. package/dist/src/commands/local/seed-zitadel.js +53 -19
  28. package/dist/src/commands/temporal.js.map +1 -1
  29. package/fragments/base/index.ts.hbs +5 -2
  30. package/package.json +3 -3
  31. package/stack/docker-compose.hub.yml +6 -1
  32. package/templates/api-auth/index.ts.hbs +2 -1
  33. package/templates/api-role-gating/index.ts.hbs +2 -1
  34. package/dist/bin/mesh.chunk-M23VKWSF.js.map +0 -6
  35. package/dist/bin/mesh.chunk-TFOKVJ34.js.map +0 -6
  36. /package/dist/bin/{mesh.auth-preflight-RCZH7V34.js.map → mesh.auth-preflight-BGI5LPLN.js.map} +0 -0
  37. /package/dist/bin/{mesh.chunk-SEIVILJR.js.map → mesh.chunk-4XX62O6Z.js.map} +0 -0
  38. /package/dist/bin/{mesh.chunk-SOX2CJMU.js.map → mesh.chunk-DYWR76EO.js.map} +0 -0
  39. /package/dist/bin/{mesh.chunk-N55Y3YII.js.map → mesh.chunk-EHLBX24J.js.map} +0 -0
  40. /package/dist/bin/{mesh.chunk-TG4FBJK3.js.map → mesh.chunk-O5CP4NPZ.js.map} +0 -0
  41. /package/dist/bin/{mesh.chunk-NT2NPR7J.js.map → mesh.chunk-O677AU5E.js.map} +0 -0
  42. /package/dist/bin/{mesh.chunk-CA4LI762.js.map → mesh.chunk-WT27GBE4.js.map} +0 -0
  43. /package/dist/bin/{mesh.chunk-CN6PMHQ5.js.map → mesh.chunk-YKW256CK.js.map} +0 -0
  44. /package/dist/bin/{mesh.create-app-QRAZVRA3.js.map → mesh.create-app-GQIGCZNI.js.map} +0 -0
  45. /package/dist/bin/{mesh.dev-token-server-DIECW5KC.js.map → mesh.dev-token-server-IJUVRBWI.js.map} +0 -0
  46. /package/dist/bin/{mesh.login-J3QPALUS.js.map → mesh.login-N5LPLRRX.js.map} +0 -0
  47. /package/dist/bin/{mesh.platform-setup-SNIAJTWJ.js.map → mesh.platform-setup-PCDLE2EI.js.map} +0 -0
  48. /package/dist/bin/{mesh.program-T57YYRF5.js.map → mesh.program-WSFVQU7P.js.map} +0 -0
  49. /package/dist/bin/{mesh.registry-UTIC3OY2.js.map → mesh.registry-5U4L6256.js.map} +0 -0
  50. /package/dist/bin/{mesh.registry-identity-Y4Y5WFQ3.js.map → mesh.registry-identity-6UPUHKO2.js.map} +0 -0
  51. /package/dist/bin/{mesh.review-command-LYTUNZ5G.js.map → mesh.review-command-MLBWVHF7.js.map} +0 -0
  52. /package/dist/bin/{mesh.start-OWIKVKN6.js.map → mesh.start-24YIFB4O.js.map} +0 -0
  53. /package/dist/bin/{mesh.wizard-QL5SQ47K.js.map → mesh.wizard-6HMOBC5L.js.map} +0 -0
@@ -21,7 +21,7 @@ import {
21
21
  registryPreflight,
22
22
  stripUnscopedCodeArtifactRegistry,
23
23
  upsertNpmrcLines
24
- } from "./mesh.chunk-SEIVILJR.js";
24
+ } from "./mesh.chunk-4XX62O6Z.js";
25
25
  export {
26
26
  REGISTRY_LOGIN_FIX,
27
27
  REGISTRY_LOGIN_FIX_AWS,
@@ -49,7 +49,7 @@ import {
49
49
  isExpiredAwsTokenMessage,
50
50
  probeRegistryToken,
51
51
  registryLoginFix
52
- } from "./mesh.chunk-SEIVILJR.js";
52
+ } from "./mesh.chunk-4XX62O6Z.js";
53
53
 
54
54
  // packages/mesh-cli/src/commands/login.ts
55
55
  import * as http from "http";
@@ -2700,16 +2700,33 @@ async function ensureZitadelProject(pat, name, opts = {}) {
2700
2700
  { queries: [{ nameQuery: { name, method: "TEXT_QUERY_METHOD_EQUALS" } }] },
2701
2701
  opts.orgId
2702
2702
  );
2703
- const existing = search?.result?.[0]?.id;
2704
- if (existing) {
2703
+ const existing = search?.result?.[0];
2704
+ if (existing?.id) {
2705
2705
  if (opts.logExisting) logInfo(`Zitadel project '${name}' already exists`);
2706
- return existing;
2706
+ const wanted = opts.projectRoleAssertion;
2707
+ if (wanted !== void 0 && (existing.projectRoleAssertion ?? false) !== wanted) {
2708
+ await api(
2709
+ pat,
2710
+ "PUT",
2711
+ `/management/v1/projects/${existing.id}`,
2712
+ {
2713
+ name: existing.name ?? name,
2714
+ projectRoleAssertion: wanted,
2715
+ projectRoleCheck: existing.projectRoleCheck ?? false,
2716
+ hasProjectCheck: existing.hasProjectCheck ?? false,
2717
+ ...existing.privateLabelingSetting ? { privateLabelingSetting: existing.privateLabelingSetting } : {}
2718
+ },
2719
+ opts.orgId
2720
+ );
2721
+ logSuccess(`Zitadel project '${name}': role assertion turned ${wanted ? "on" : "off"}`);
2722
+ }
2723
+ return existing.id;
2707
2724
  }
2708
2725
  const created = await api(
2709
2726
  pat,
2710
2727
  "POST",
2711
2728
  "/management/v1/projects",
2712
- { name, projectRoleAssertion: true },
2729
+ { name, projectRoleAssertion: opts.projectRoleAssertion ?? true },
2713
2730
  opts.orgId
2714
2731
  );
2715
2732
  logSuccess(`Created Zitadel project '${name}'${opts.describe ? ` (${opts.describe})` : ""}`);
@@ -2771,6 +2788,21 @@ async function ensureTestUsers(pat) {
2771
2788
  function hubAuthPath() {
2772
2789
  return path10.join(meshCacheDir("mesh-local"), "hub-auth.json");
2773
2790
  }
2791
+ function hubSignInScope(projectId) {
2792
+ return [
2793
+ "openid email profile",
2794
+ "urn:zitadel:iam:org:projects:roles",
2795
+ `urn:zitadel:iam:org:project:id:${projectId}:aud`
2796
+ ].join(" ");
2797
+ }
2798
+ function hubAuthComposeEnv(auth) {
2799
+ return {
2800
+ MESH_HUB_OAUTH2_CLIENT_ID: auth.clientId,
2801
+ MESH_HUB_OAUTH2_CLIENT_SECRET: auth.clientSecret,
2802
+ MESH_HUB_OAUTH2_COOKIE_SECRET: auth.cookieSecret,
2803
+ ...auth.projectId ? { MESH_HUB_OAUTH2_SCOPE: hubSignInScope(auth.projectId) } : {}
2804
+ };
2805
+ }
2774
2806
  function readHubAuth() {
2775
2807
  try {
2776
2808
  const parsed = JSON.parse(fs10.readFileSync(hubAuthPath(), "utf-8"));
@@ -2780,7 +2812,10 @@ function readHubAuth() {
2780
2812
  return null;
2781
2813
  }
2782
2814
  }
2783
- var ensureHubProject = (pat) => ensureZitadelProject(pat, HUB_PROJECT_NAME, { describe: "Hub platform app" });
2815
+ var ensureHubProject = (pat) => ensureZitadelProject(pat, HUB_PROJECT_NAME, {
2816
+ describe: "Hub platform app",
2817
+ projectRoleAssertion: false
2818
+ });
2784
2819
  function hubRoleDisplayName(roleKey) {
2785
2820
  const tenant = hubRoleKeyTenant(roleKey);
2786
2821
  return tenant === null ? roleKey : `${restrictedRoleBase(roleKey) ?? roleKey} (${tenant})`;
@@ -2835,23 +2870,8 @@ async function reconcileHubRedirectUris(pat, projectId, app) {
2835
2870
  `Registered Hub redirect URI http://localhost:${hubPort()}/oauth2/callback (MESH_HUB_PORT)`
2836
2871
  );
2837
2872
  }
2838
- async function ensureHubApp(pat, projectId) {
2839
- const existing = await searchZitadelApp(pat, projectId, HUB_APP_NAME);
2840
- if (existing) {
2841
- await reconcileHubRedirectUris(pat, projectId, existing);
2842
- const clientId = existing?.oidcConfig?.clientId;
2843
- const persisted = readHubAuth();
2844
- if (persisted && persisted.clientId === clientId) return { clientId };
2845
- const regenerated = await api(
2846
- pat,
2847
- "POST",
2848
- `/management/v1/projects/${projectId}/apps/${existing.id}/oidc_config/_generate_client_secret`,
2849
- {}
2850
- );
2851
- logSuccess(`Regenerated Hub UI client secret (local copy was missing)`);
2852
- return { clientId, clientSecret: regenerated.clientSecret };
2853
- }
2854
- const created = await api(pat, "POST", `/management/v1/projects/${projectId}/apps/oidc`, {
2873
+ function buildHubAppPayload() {
2874
+ return {
2855
2875
  name: HUB_APP_NAME,
2856
2876
  redirectUris: [.../* @__PURE__ */ new Set([hubRedirectUri(), HUB_DEFAULT_REDIRECT_URI])],
2857
2877
  postLogoutRedirectUris: [
@@ -2873,7 +2893,30 @@ async function ensureHubApp(pat, projectId) {
2873
2893
  idTokenRoleAssertion: true,
2874
2894
  idTokenUserinfoAssertion: true,
2875
2895
  devMode: true
2876
- });
2896
+ };
2897
+ }
2898
+ async function ensureHubApp(pat, projectId) {
2899
+ const existing = await searchZitadelApp(pat, projectId, HUB_APP_NAME);
2900
+ if (existing) {
2901
+ await reconcileHubRedirectUris(pat, projectId, existing);
2902
+ const clientId = existing?.oidcConfig?.clientId;
2903
+ const persisted = readHubAuth();
2904
+ if (persisted && persisted.clientId === clientId) return { clientId };
2905
+ const regenerated = await api(
2906
+ pat,
2907
+ "POST",
2908
+ `/management/v1/projects/${projectId}/apps/${existing.id}/oidc_config/_generate_client_secret`,
2909
+ {}
2910
+ );
2911
+ logSuccess(`Regenerated Hub UI client secret (local copy was missing)`);
2912
+ return { clientId, clientSecret: regenerated.clientSecret };
2913
+ }
2914
+ const created = await api(
2915
+ pat,
2916
+ "POST",
2917
+ `/management/v1/projects/${projectId}/apps/oidc`,
2918
+ buildHubAppPayload()
2919
+ );
2877
2920
  logSuccess(`Created Zitadel application '${HUB_APP_NAME}' (Hub UI web client, code flow)`);
2878
2921
  return { clientId: created.clientId, clientSecret: created.clientSecret };
2879
2922
  }
@@ -7842,7 +7885,7 @@ function registerDevCommand(program) {
7842
7885
  "tmux"
7843
7886
  );
7844
7887
  dev.command("__token-server <port> <context>", { hidden: true }).action(async (port, context) => {
7845
- const { startTokenServer } = await import("./mesh.dev-token-server-DIECW5KC.js");
7888
+ const { startTokenServer } = await import("./mesh.dev-token-server-IJUVRBWI.js");
7846
7889
  await startTokenServer(Number(port), context);
7847
7890
  });
7848
7891
  dev.action(async (options) => {
@@ -10980,9 +11023,9 @@ function refuseReservedRegistryContext(context, verb) {
10980
11023
  }
10981
11024
  async function hintRegistryIfMissing() {
10982
11025
  try {
10983
- const { readRegistrySession } = await import("./mesh.registry-identity-Y4Y5WFQ3.js");
11026
+ const { readRegistrySession } = await import("./mesh.registry-identity-6UPUHKO2.js");
10984
11027
  if (readRegistrySession()) return;
10985
- const { probeRegistryToken: probeRegistryToken2 } = await import("./mesh.auth-preflight-RCZH7V34.js");
11028
+ const { probeRegistryToken: probeRegistryToken2 } = await import("./mesh.auth-preflight-BGI5LPLN.js");
10986
11029
  const probe = await probeRegistryToken2();
10987
11030
  if (probe.state === "missing" || probe.state === "expired") {
10988
11031
  logInfo(REGISTRY_SEPARATE_HINT);
@@ -11403,6 +11446,7 @@ export {
11403
11446
  mockIdpComposeEnv,
11404
11447
  LOGIN_CONTEXT,
11405
11448
  TEST_USERS,
11449
+ hubAuthComposeEnv,
11406
11450
  readHubAuth,
11407
11451
  seedZitadel,
11408
11452
  seedMockIdps,