@renaiss-shipflow/cli 0.27.2 → 0.27.4

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.
@@ -1,3 +1,8 @@
1
1
  import type { Command } from "commander";
2
+ /** Turn a raw ApiError body into the friendly NO_TENANT install guidance, or
3
+ * `null` when the body isn't a NO_TENANT response (malformed JSON, or a
4
+ * different error code) so the caller re-throws it as an unexpected failure.
5
+ * Pure + testable — no process/network reads. */
6
+ export declare function formatNoTenantHelp(body: string): string | null;
2
7
  export declare function registerLoginCommand(program: Command): void;
3
8
  //# sourceMappingURL=login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E3D"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC;;;iDAGiD;AACjD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiC9D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4F3D"}
@@ -1,13 +1,51 @@
1
1
  import { ghInstalled, ghAuthStatus, ghAuthLogin, ghAuthToken, ghUser, ghMatchedEmail } from "../gh.js";
2
- import { ShipFlowClient } from "../client.js";
2
+ import { ShipFlowClient, ApiError } from "../client.js";
3
3
  import { resolveApiUrl, saveCredentials, loadConfig, saveConfig, activeProfile } from "../config.js";
4
4
  import { promptSelect } from "../prompts.js";
5
+ import { runAction } from "./helpers.js";
6
+ /** Turn a raw ApiError body into the friendly NO_TENANT install guidance, or
7
+ * `null` when the body isn't a NO_TENANT response (malformed JSON, or a
8
+ * different error code) so the caller re-throws it as an unexpected failure.
9
+ * Pure + testable — no process/network reads. */
10
+ export function formatNoTenantHelp(body) {
11
+ let payload;
12
+ try {
13
+ payload = JSON.parse(body);
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ if (payload?.error?.code !== "NO_TENANT")
19
+ return null;
20
+ const appSlug = payload.appSlug || "renaissshipflow";
21
+ const installUrl = `https://github.com/apps/${appSlug}/installations/new`;
22
+ const orgs = Array.isArray(payload.orgs) ? payload.orgs : [];
23
+ const lines = [
24
+ "No ShipFlow organization is set up for your GitHub account yet.",
25
+ "",
26
+ "ShipFlow runs on a GitHub App you install on an org you belong to. Install it here:",
27
+ ` ${installUrl}`,
28
+ ];
29
+ if (orgs.length > 0) {
30
+ lines.push("", "Your GitHub orgs:");
31
+ for (const o of orgs) {
32
+ lines.push(o.installed
33
+ ? ` ✓ ${o.login} — app installed (retry \`renaiss-shipflow login\` in a moment)`
34
+ : ` ✗ ${o.login} — app not installed`);
35
+ }
36
+ }
37
+ else {
38
+ lines.push("", "No organizations were found on your GitHub account — install the app on one to get started.");
39
+ }
40
+ lines.push("", "Once the app is installed, run `renaiss-shipflow login` again.");
41
+ return lines.join("\n");
42
+ }
5
43
  export function registerLoginCommand(program) {
6
44
  program
7
45
  .command("login")
8
46
  .description("Sign in to ShipFlow (uses gh auth)")
9
47
  .option("--no-gh-bootstrap", "Don't auto-run `gh auth login` if gh isn't logged in")
10
- .action(async (opts) => {
48
+ .action(runAction(async (opts) => {
11
49
  if (!ghInstalled()) {
12
50
  console.error("gh (GitHub CLI) is not installed. See https://cli.github.com/");
13
51
  process.exit(1);
@@ -29,7 +67,24 @@ export function registerLoginCommand(program) {
29
67
  }
30
68
  const apiUrl = resolveApiUrl(program.opts().apiUrl);
31
69
  const client = new ShipFlowClient({ baseUrl: apiUrl });
32
- const result = await client.exchangeGhToken(ghToken);
70
+ let result;
71
+ try {
72
+ result = await client.exchangeGhToken(ghToken);
73
+ }
74
+ catch (err) {
75
+ // A tenant-less GitHub user gets a 403 NO_TENANT — the single most
76
+ // likely outcome of a new adopter's FIRST command. Render the install
77
+ // guidance instead of a raw ApiError stack trace (issue #369). Any other
78
+ // failure re-throws to runAction (clean `Error: …`, no stack trace).
79
+ if (err instanceof ApiError && err.status === 403) {
80
+ const help = formatNoTenantHelp(err.body);
81
+ if (help) {
82
+ console.error(help);
83
+ process.exit(1);
84
+ }
85
+ }
86
+ throw err;
87
+ }
33
88
  let chosen = result.tenants[0];
34
89
  if (result.tenants.length > 1) {
35
90
  const idx = await promptSelect("You belong to multiple ShipFlow tenants. Pick one:", result.tenants.map((t) => `${t.tenant.displayName} (${t.tenant.githubOrg})`));
@@ -69,6 +124,6 @@ export function registerLoginCommand(program) {
69
124
  console.log("Tip: you belong to multiple tenants — keep them side by side with profiles, e.g.\n" +
70
125
  ` renaiss-shipflow --profile ${chosen.tenant.githubOrg} login`);
71
126
  }
72
- });
127
+ }));
73
128
  }
74
129
  //# sourceMappingURL=login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@renaiss-shipflow/cli",
3
- "version": "0.27.2",
3
+ "version": "0.27.4",
4
4
  "description": "CLI tool for RenaissShipFlow - AI-powered project management automation",
5
5
  "type": "module",
6
6
  "bin": {