@substrat-run/cli 0.12.2 → 0.12.3

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/config.d.ts CHANGED
@@ -14,7 +14,9 @@ export interface CliConfig {
14
14
  * The tenant a builder acts for (builder-plane.md §5) — the id or slug the control plane
15
15
  * prefixes onto a bare `--slug` to form `<tenantSlug>/<name>`. Stored by `substrat login`
16
16
  * (the sole/selected workspace); `--tenant` overrides per command. Sent as
17
- * `x-substrat-tenant`, and only with a browser session (a service token is not a builder).
17
+ * `x-substrat-tenant` with every auth kind: a browser session becomes a builder narrowed
18
+ * to it, and a service token keeps its staff reach but the control plane uses it to
19
+ * resolve a bare slug to the workspace's `<tenantSlug>/<name>` registry id (#417).
18
20
  *
19
21
  * `push` deliberately does NOT fall back to this (`useDefaultTenant: false`): which
20
22
  * workspace owns a vertical is a property of the project (package.json `substrat.tenant`),
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,UAAU,IAAI,SAAS,CAMtC;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAUjD;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,6FAA6F;IAC7F,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,YAAY,CAiCf"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,UAAU,IAAI,SAAS,CAMtC;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAUjD;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,6FAA6F;IAC7F,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,YAAY,CAgDf"}
package/dist/config.js CHANGED
@@ -39,29 +39,41 @@ export function resolveAuth(flags) {
39
39
  throw new Error('no control-plane URL — pass --cp, set SUBSTRAT_CP_URL, or run `substrat login`');
40
40
  }
41
41
  const controlPlaneUrl = raw.replace(/\/$/, '');
42
+ // The workspace this command acts for: `--tenant` → SUBSTRAT_TENANT → the stored default
43
+ // (unless the caller opted out — push resolves its tenant from the project instead).
44
+ // Sent with EVERY auth kind (#417): a browser session becomes a builder narrowed to it,
45
+ // while a service token stays staff — the control plane then only uses the header to
46
+ // resolve a bare slug to the workspace's `<tenantSlug>/<name>` registry id, so
47
+ // `versions`/`promote` reach the same rows over either credential.
48
+ const tenant = flags.tenant ??
49
+ process.env.SUBSTRAT_TENANT ??
50
+ (flags.useDefaultTenant === false ? undefined : cfg.defaultTenant);
51
+ const withTenant = (header) => tenant ? { ...header, 'x-substrat-tenant': tenant } : header;
52
+ const forWorkspace = (how) => (tenant ? `${how} (workspace ${tenant})` : how);
42
53
  const explicitService = flags.token ?? process.env.SUBSTRAT_SERVICE_TOKEN;
43
54
  if (explicitService) {
44
- return { controlPlaneUrl, header: { 'x-service-token': explicitService }, as: 'service token', kind: 'service' };
55
+ return {
56
+ controlPlaneUrl,
57
+ header: withTenant({ 'x-service-token': explicitService }),
58
+ as: forWorkspace('service token'),
59
+ kind: 'service',
60
+ };
45
61
  }
46
62
  if (cfg.bearerToken) {
47
- // A builder acts for a tenant: `--tenant` → SUBSTRAT_TENANT → the stored default
48
- // (unless the caller opted out — push resolves its tenant from the project instead).
49
- // Sent only with a browser session — a service token is the platform, not a builder.
50
- const tenant = flags.tenant ??
51
- process.env.SUBSTRAT_TENANT ??
52
- (flags.useDefaultTenant === false ? undefined : cfg.defaultTenant);
53
- const header = { authorization: `Bearer ${cfg.bearerToken}` };
54
- if (tenant)
55
- header['x-substrat-tenant'] = tenant;
56
63
  return {
57
64
  controlPlaneUrl,
58
- header,
59
- as: tenant ? `browser session (workspace ${tenant})` : 'browser session',
65
+ header: withTenant({ authorization: `Bearer ${cfg.bearerToken}` }),
66
+ as: forWorkspace('browser session'),
60
67
  kind: 'session',
61
68
  };
62
69
  }
63
70
  if (cfg.serviceToken) {
64
- return { controlPlaneUrl, header: { 'x-service-token': cfg.serviceToken }, as: 'service token', kind: 'service' };
71
+ return {
72
+ controlPlaneUrl,
73
+ header: withTenant({ 'x-service-token': cfg.serviceToken }),
74
+ as: forWorkspace('service token'),
75
+ kind: 'service',
76
+ };
65
77
  }
66
78
  throw new Error('not authenticated — run `substrat login` (browser), or pass --token / set SUBSTRAT_SERVICE_TOKEN for CI');
67
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA4BjC,MAAM,SAAS,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAC7D,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC;AAElE,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAc,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,UAAU,CAAC,GAAc;IACvC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,KAM3B;IACC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe,CAAC;IAC3E,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE/C,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAC1E,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACnH,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,iFAAiF;QACjF,qFAAqF;QACrF,qFAAqF;QACrF,MAAM,MAAM,GACV,KAAK,CAAC,MAAM;YACZ,OAAO,CAAC,GAAG,CAAC,eAAe;YAC3B,CAAC,KAAK,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACrE,MAAM,MAAM,GAA2B,EAAE,aAAa,EAAE,UAAU,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACtF,IAAI,MAAM;YAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC;QACjD,OAAO;YACL,eAAe;YACf,MAAM;YACN,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,8BAA8B,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB;YACxE,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACpH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAC;AAC7H,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AA+BA,wBAAsB,aAAa,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,MAAM,EAIZ,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
1
+ {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AA2EA,wBAAsB,aAAa,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,MAAM,EAIZ,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA2Ff"}
package/dist/versions.js CHANGED
@@ -13,28 +13,78 @@ async function getJson(url, header) {
13
13
  }
14
14
  return res.json();
15
15
  }
16
+ /**
17
+ * Resolve the registry identity `versions <slug>` should read (#399): the exact slug
18
+ * when it has versions, else — with exactly the tail-tolerance `hostnames` already
19
+ * applies (`verticalSlug.endsWith('/' + slug)`) — a workspace-prefixed registration of
20
+ * the same product name. A staff push pinned to a tenant registers the vertical as
21
+ * `<tenantSlug>/<name>` while everyone keeps SAYING the bare name, so before this the
22
+ * two commands disagreed: `hostnames egeryds-substrat` listed the installs while
23
+ * `versions egeryds-substrat` printed the (wrong, alarming) lineage-fork hint. Returns
24
+ * which slug was read and a note when it differs from what was asked.
25
+ */
26
+ async function resolveVersionsSlug(base, header, slug) {
27
+ const exact = await getJson(`${base}/verticals/${encodeURIComponent(slug)}/versions`, header);
28
+ if (exact.length > 0)
29
+ return { slug, versions: exact };
30
+ // The registry list is visibility-scoped server-side (staff: all; builder: own), so a
31
+ // tail match never reveals a foreign tenant's registration the caller couldn't read.
32
+ const registry = await getJson(`${base}/verticals`, header).catch(() => []);
33
+ const candidates = registry.filter((v) => v.slug !== slug && v.slug.endsWith(`/${slug}`));
34
+ const withVersions = [];
35
+ for (const c of candidates) {
36
+ const versions = await getJson(`${base}/verticals/${encodeURIComponent(c.slug)}/versions`, header).catch(() => []);
37
+ if (versions.length > 0)
38
+ withVersions.push({ slug: c.slug, versions });
39
+ }
40
+ if (withVersions.length === 1) {
41
+ const hit = withVersions[0];
42
+ return {
43
+ slug: hit.slug,
44
+ versions: hit.versions,
45
+ note: `showing '${hit.slug}' — the workspace-prefixed registration of '${slug}' (pushes and hostnames use this identity)`,
46
+ };
47
+ }
48
+ if (withVersions.length > 1) {
49
+ return { slug, versions: [], ambiguous: withVersions.map((v) => v.slug) };
50
+ }
51
+ return { slug, versions: [] };
52
+ }
16
53
  export async function printVersions(controlPlaneUrl, header, slug,
17
54
  // Optional so `versions` can cross-check installs against versions (#399): a slug with
18
55
  // bound hostnames but zero versions is the tell that pushes landed under a DIFFERENT
19
56
  // slug. Absent (no --tenant) ⇒ the cross-check is skipped and the hint stays generic.
20
57
  tenantId) {
21
58
  const base = controlPlaneUrl.replace(/\/$/, '');
22
- const versions = await getJson(`${base}/verticals/${encodeURIComponent(slug)}/versions`, header);
59
+ const resolved = await resolveVersionsSlug(base, header, slug);
60
+ if (resolved.note)
61
+ console.log(resolved.note);
62
+ if (resolved.ambiguous) {
63
+ console.log(`no versions are registered under '${slug}', but several workspace-prefixed registrations of it have versions:\n` +
64
+ resolved.ambiguous.map((s) => ` substrat versions ${s}`).join('\n'));
65
+ return;
66
+ }
67
+ const { versions } = resolved;
23
68
  // Channels are best-effort — a vertical with none registered still lists its versions.
24
- const channels = await getJson(`${base}/verticals/${encodeURIComponent(slug)}/channels`, header).catch(() => []);
69
+ const channels = await getJson(`${base}/verticals/${encodeURIComponent(resolved.slug)}/channels`, header).catch(() => []);
25
70
  if (versions.length === 0) {
26
71
  // Distinguish "no versions" from the #399 lineage fork: if installs (hostnames) are
27
72
  // bound to this slug yet nothing was pushed under it, the versions live under another
28
73
  // slug. `substrat push` derives its slug from package.json `name` unless `substrat.slug`
29
74
  // pins it, so a rename or a scope mismatch silently forks the lineage.
30
75
  let installs = 0;
76
+ let installSlugs = [];
31
77
  if (tenantId) {
32
78
  const rows = await listVerticalHostnames(controlPlaneUrl, header, tenantId, slug).catch(() => []);
33
79
  installs = rows.length;
80
+ // The hostname rows carry the slug the installs are REALLY registered under —
81
+ // when it differs from what was asked, the fix is a rename away, so name it.
82
+ installSlugs = [...new Set(rows.map((r) => r.verticalSlug).filter((s) => !!s && s !== slug))];
34
83
  }
35
84
  if (installs > 0) {
36
- console.log(`no versions are registered under '${slug}', but ${installs} hostname(s) are bound to it.\n` +
37
- `⚠ This is a lineage fork: the installs live under '${slug}', but pushes landed under a DIFFERENT slug.\n` +
85
+ console.log(`no versions are registered under '${slug}', but ${installs} hostname(s) are bound to it` +
86
+ (installSlugs.length ? ` (install identity: ${installSlugs.map((s) => `'${s}'`).join(', ')})` : '') +
87
+ `.\n⚠ This is a lineage fork: the installs and the pushes are on different slugs.\n` +
38
88
  ` \`substrat push\` derives its slug from package.json \`name\` unless \`substrat.slug\` pins it — check both,\n` +
39
89
  ` and run \`substrat versions <the-other-slug>\` to find where the versions went.`);
40
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@substrat-run/cli",
3
- "version": "0.12.2",
3
+ "version": "0.12.3",
4
4
  "description": "The substrat CLI — authenticated deploy tooling: push a vertical to the platform, manage its versions and channels",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "esbuild": "^0.25.0",
32
- "@substrat-run/contracts": "^0.35.0"
32
+ "@substrat-run/contracts": "^0.36.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^22.0.0",