@spec0/cli 0.5.0 → 0.6.1

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 (89) hide show
  1. package/README.md +0 -1
  2. package/dist/commands/api/changelog.d.ts.map +1 -1
  3. package/dist/commands/api/changelog.js +10 -7
  4. package/dist/commands/api/changelog.js.map +1 -1
  5. package/dist/commands/api/delete.d.ts.map +1 -1
  6. package/dist/commands/api/delete.js +11 -9
  7. package/dist/commands/api/delete.js.map +1 -1
  8. package/dist/commands/api/list.d.ts.map +1 -1
  9. package/dist/commands/api/list.js +10 -7
  10. package/dist/commands/api/list.js.map +1 -1
  11. package/dist/commands/api/show.d.ts.map +1 -1
  12. package/dist/commands/api/show.js +11 -4
  13. package/dist/commands/api/show.js.map +1 -1
  14. package/dist/commands/auth.d.ts +5 -1
  15. package/dist/commands/auth.d.ts.map +1 -1
  16. package/dist/commands/auth.js +36 -20
  17. package/dist/commands/auth.js.map +1 -1
  18. package/dist/commands/ci/generate.d.ts.map +1 -1
  19. package/dist/commands/ci/generate.js +10 -7
  20. package/dist/commands/ci/generate.js.map +1 -1
  21. package/dist/commands/log.d.ts.map +1 -1
  22. package/dist/commands/log.js +10 -5
  23. package/dist/commands/log.js.map +1 -1
  24. package/dist/commands/mcp.d.ts +7 -4
  25. package/dist/commands/mcp.d.ts.map +1 -1
  26. package/dist/commands/mcp.js +21 -42
  27. package/dist/commands/mcp.js.map +1 -1
  28. package/dist/commands/mock/create.d.ts.map +1 -1
  29. package/dist/commands/mock/create.js +10 -7
  30. package/dist/commands/mock/create.js.map +1 -1
  31. package/dist/commands/mock/delete.d.ts.map +1 -1
  32. package/dist/commands/mock/delete.js +11 -10
  33. package/dist/commands/mock/delete.js.map +1 -1
  34. package/dist/commands/mock/list.d.ts.map +1 -1
  35. package/dist/commands/mock/list.js +10 -7
  36. package/dist/commands/mock/list.js.map +1 -1
  37. package/dist/commands/mock/show.d.ts.map +1 -1
  38. package/dist/commands/mock/show.js +10 -7
  39. package/dist/commands/mock/show.js.map +1 -1
  40. package/dist/commands/mock/url.d.ts.map +1 -1
  41. package/dist/commands/mock/url.js +12 -5
  42. package/dist/commands/mock/url.js.map +1 -1
  43. package/dist/commands/pull.d.ts.map +1 -1
  44. package/dist/commands/pull.js +12 -5
  45. package/dist/commands/pull.js.map +1 -1
  46. package/dist/commands/push.d.ts.map +1 -1
  47. package/dist/commands/push.js +5 -0
  48. package/dist/commands/push.js.map +1 -1
  49. package/dist/commands/search.d.ts.map +1 -1
  50. package/dist/commands/search.js +13 -9
  51. package/dist/commands/search.js.map +1 -1
  52. package/dist/commands/status.d.ts.map +1 -1
  53. package/dist/commands/status.js +10 -5
  54. package/dist/commands/status.js.map +1 -1
  55. package/dist/commands/sync-status.d.ts.map +1 -1
  56. package/dist/commands/sync-status.js +10 -7
  57. package/dist/commands/sync-status.js.map +1 -1
  58. package/dist/commands/team/create.d.ts.map +1 -1
  59. package/dist/commands/team/create.js +11 -10
  60. package/dist/commands/team/create.js.map +1 -1
  61. package/dist/commands/team/delete.d.ts.map +1 -1
  62. package/dist/commands/team/delete.js +11 -8
  63. package/dist/commands/team/delete.js.map +1 -1
  64. package/dist/commands/team/list.d.ts.map +1 -1
  65. package/dist/commands/team/list.js +11 -9
  66. package/dist/commands/team/list.js.map +1 -1
  67. package/dist/index.js +4 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/lib/api-client.d.ts +10 -0
  70. package/dist/lib/api-client.d.ts.map +1 -1
  71. package/dist/lib/api-client.js +58 -10
  72. package/dist/lib/api-client.js.map +1 -1
  73. package/dist/lib/config.d.ts +11 -0
  74. package/dist/lib/config.d.ts.map +1 -1
  75. package/dist/lib/config.js +14 -0
  76. package/dist/lib/config.js.map +1 -1
  77. package/dist/lib/errors.d.ts +46 -0
  78. package/dist/lib/errors.d.ts.map +1 -0
  79. package/dist/lib/errors.js +99 -0
  80. package/dist/lib/errors.js.map +1 -0
  81. package/dist/lib/http-trace.d.ts +37 -0
  82. package/dist/lib/http-trace.d.ts.map +1 -0
  83. package/dist/lib/http-trace.js +101 -0
  84. package/dist/lib/http-trace.js.map +1 -0
  85. package/dist/lib/output.d.ts +4 -0
  86. package/dist/lib/output.d.ts.map +1 -1
  87. package/dist/lib/output.js +8 -0
  88. package/dist/lib/output.js.map +1 -1
  89. package/package.json +1 -1
@@ -2,10 +2,13 @@
2
2
  * spec0 mcp url | test | install
3
3
  *
4
4
  * Helpers for pointing MCP clients (Cursor, Claude) at the Spec0 MCP server.
5
- * The server is a single Streamable HTTP endpoint; a bearer token is optional
6
- * (anonymous gets the public docs tools, a token unlocks org-scoped tools). The
7
- * canonical config references `${SPEC0_TOKEN}` so the secret stays in the
8
- * environment rather than being written into client config files.
5
+ * The server is a single Streamable HTTP endpoint that authenticates with the
6
+ * MCP OAuth flow: the protected-resource metadata points clients at Clerk, which
7
+ * dynamically registers a client and runs the browser authorization. So we
8
+ * register the server **without** an Authorization header setting a static
9
+ * header makes clients (e.g. Claude Code) skip the OAuth flow entirely, and the
10
+ * org API key isn't a JWT the gateway would accept anyway. Anonymous connections
11
+ * get the public docs tools; signing in via the browser unlocks org-scoped ones.
9
12
  */
10
13
  import chalk from "chalk";
11
14
  import got from "got";
@@ -13,41 +16,26 @@ import { spawnSync } from "node:child_process";
13
16
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
14
17
  import { homedir } from "node:os";
15
18
  import { dirname, join } from "node:path";
16
- import { getDefaultOrgId, getOrgConfig } from "../lib/config.js";
17
19
  import { resolvedPlatformMcpBaseUrl, resolvedPlatformMcpUrl } from "../lib/platform-defaults.js";
18
20
  import { ExitCode, exit, exitCodeForHttpStatus } from "../lib/exit-codes.js";
19
21
  /** Server key used under `mcpServers` in every client config we write. */
20
22
  const SERVER_KEY = "spec0";
21
- /** Bearer header value — references the env var so the token never lands on disk. */
22
- const AUTH_HEADER = "Bearer ${SPEC0_TOKEN}";
23
- /** Canonical client config block for the Spec0 MCP server. */
23
+ /**
24
+ * Canonical client config block for the Spec0 MCP server. No Authorization
25
+ * header: the client performs the MCP OAuth flow (browser sign-in via Clerk)
26
+ * on first connect.
27
+ */
24
28
  function canonicalServerConfig(mcpUrl) {
25
29
  return {
26
30
  url: mcpUrl,
27
- headers: { Authorization: AUTH_HEADER },
28
31
  };
29
32
  }
30
- /**
31
- * Exit early (code 3) unless the user is logged in or has env credentials.
32
- * Mirrors the sibling MCP commands: a default org from config, or SPEC0_TOKEN
33
- * with an org id, is enough.
34
- */
35
- function requireAuthOrExit() {
36
- const orgId = process.env.SPEC0_ORG_ID ?? process.env.PLATFORM_ORG_ID ?? getDefaultOrgId();
37
- const hasEnvToken = Boolean(process.env.SPEC0_TOKEN ?? process.env.PLATFORM_API_TOKEN);
38
- const hasStoredOrg = Boolean(orgId && getOrgConfig(orgId));
39
- if (!hasEnvToken && !hasStoredOrg) {
40
- console.error(chalk.red("Not authenticated. Run 'spec0 auth login'."));
41
- exit(ExitCode.AUTH_MISSING);
42
- }
43
- }
44
33
  export function registerMcpCommands(program) {
45
34
  const mcp = program.command("mcp").description("MCP server URL and config");
46
35
  mcp
47
36
  .command("url")
48
37
  .description("Print MCP server config for Cursor/Claude")
49
38
  .action(async () => {
50
- requireAuthOrExit();
51
39
  const mcpUrl = resolvedPlatformMcpUrl();
52
40
  console.log("Your MCP server URL:");
53
41
  console.log(` ${mcpUrl}`);
@@ -55,13 +43,12 @@ export function registerMcpCommands(program) {
55
43
  console.log("Add to your MCP client config (e.g. Cursor):");
56
44
  console.log(JSON.stringify({ mcpServers: { [SERVER_KEY]: canonicalServerConfig(mcpUrl) } }, null, 2));
57
45
  console.log("");
58
- console.log(chalk.dim("SPEC0_TOKEN must be set in the client's environment for auth to succeed."));
46
+ console.log(chalk.dim("No token needed here your MCP client opens a browser to sign in (OAuth) on first connect."));
59
47
  });
60
48
  mcp
61
49
  .command("test")
62
50
  .description("Verify MCP server is responding")
63
51
  .action(async () => {
64
- requireAuthOrExit();
65
52
  const url = `${resolvedPlatformMcpBaseUrl()}/health`;
66
53
  try {
67
54
  const res = await got.get(url);
@@ -78,7 +65,6 @@ export function registerMcpCommands(program) {
78
65
  .description("Install the Spec0 MCP server into Cursor and/or Claude")
79
66
  .option("--client <client>", "Target client: cursor, claude, or all", "all")
80
67
  .action(async (opts) => {
81
- requireAuthOrExit();
82
68
  const client = opts.client.toLowerCase();
83
69
  if (!["cursor", "claude", "all"].includes(client)) {
84
70
  console.error(chalk.red(`Unknown client '${opts.client}'. Expected: cursor, claude, or all.`));
@@ -91,6 +77,9 @@ export function registerMcpCommands(program) {
91
77
  if (client === "claude" || client === "all") {
92
78
  installClaude(mcpUrl);
93
79
  }
80
+ console.log("");
81
+ console.log(chalk.dim("On first use your MCP client opens a browser to sign in (OAuth via Clerk). " +
82
+ "Anonymous access exposes the public docs tools; signing in unlocks your org's APIs."));
94
83
  });
95
84
  }
96
85
  /**
@@ -122,27 +111,17 @@ function installCursor(mcpUrl) {
122
111
  }
123
112
  /**
124
113
  * Register the server with Claude via `claude mcp add`. The flag form follows the
125
- * current Claude CLI: all options precede the server name, the Streamable HTTP
126
- * transport is selected explicitly (`--transport http`), and the bearer header is
127
- * passed verbatim so the `${SPEC0_TOKEN}` placeholder is expanded by the client at
128
- * connect time.
114
+ * current Claude CLI: options precede the server name and the Streamable HTTP
115
+ * transport is selected explicitly (`--transport http`). No Authorization header
116
+ * is passed that lets the client run the MCP OAuth flow on connect.
129
117
  *
130
118
  * If the `claude` binary isn't on PATH (or the invocation fails for any reason)
131
119
  * we don't hard-fail: we print the exact command plus the manual JSON so the user
132
120
  * can finish by hand.
133
121
  */
134
122
  function installClaude(mcpUrl) {
135
- const args = [
136
- "mcp",
137
- "add",
138
- "--transport",
139
- "http",
140
- SERVER_KEY,
141
- mcpUrl,
142
- "--header",
143
- `Authorization: ${AUTH_HEADER}`,
144
- ];
145
- const printableCommand = `claude mcp add --transport http ${SERVER_KEY} ${mcpUrl} --header "Authorization: ${AUTH_HEADER}"`;
123
+ const args = ["mcp", "add", "--transport", "http", SERVER_KEY, mcpUrl];
124
+ const printableCommand = `claude mcp add --transport http ${SERVER_KEY} ${mcpUrl}`;
146
125
  let result;
147
126
  try {
148
127
  result = spawnSync("claude", args, { stdio: "inherit" });
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,QAsDtD"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,QAuDtD"}
@@ -10,9 +10,11 @@
10
10
  */
11
11
  import chalk from "chalk";
12
12
  import { PublicMocksService } from "@spec0/sdk-public-platform";
13
- import { configureSdkAuth, is401 } from "../../lib/api-client.js";
13
+ import { configureSdkAuth } from "../../lib/api-client.js";
14
14
  import { requireOrgContext } from "../../lib/auth-context.js";
15
15
  import { ExitCode } from "../../lib/exit-codes.js";
16
+ import { failApi } from "../../lib/errors.js";
17
+ import { setHttpTrace } from "../../lib/http-trace.js";
16
18
  import { emit, fail, resolveOutputContext } from "../../lib/output/index.js";
17
19
  export function registerMockCreateCommand(mock) {
18
20
  mock
@@ -22,8 +24,10 @@ export function registerMockCreateCommand(mock) {
22
24
  .option("--api-id <uuid>", "API id")
23
25
  .option("--org <uuid>", "Org id override")
24
26
  .option("--output <format>", "Output format: text, json, or yaml (default: text)")
27
+ .option("--verbose", "Print HTTP request/response traces to stderr")
25
28
  .action(async (opts) => {
26
29
  const outCtx = resolveOutputContext(opts);
30
+ setHttpTrace(outCtx.verbose);
27
31
  if (!opts.api && !opts.apiId) {
28
32
  fail(outCtx, ExitCode.USAGE, "Provide --api <name> or --api-id <uuid>.");
29
33
  }
@@ -56,12 +60,11 @@ export function registerMockCreateCommand(mock) {
56
60
  emit(outCtx, result, renderCreateText);
57
61
  }
58
62
  catch (err) {
59
- if (is401(err)) {
60
- fail(outCtx, ExitCode.AUTH_MISSING, "Token invalid or expired.", {
61
- hint: "Run 'spec0 auth login' or refresh SPEC0_TOKEN.",
62
- });
63
- }
64
- fail(outCtx, ExitCode.GENERIC, `mock create failed: ${err.message}`);
63
+ failApi(outCtx, err, {
64
+ action: "mock create",
65
+ org: authCtx.orgName ?? authCtx.orgId,
66
+ apiUrl: authCtx.apiUrl,
67
+ });
65
68
  }
66
69
  });
67
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/mock/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAA4B,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAsB,MAAM,2BAA2B,CAAC;AAUjG,MAAM,UAAU,yBAAyB,CAAC,IAAa;IACrD,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gFAAgF,CAAC;SAC7F,MAAM,CAAC,cAAc,EAAE,4CAA4C,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC;SACnC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,oDAAoD,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,IAAoE,EAAE,EAAE;QACrF,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAG,CAAW,CAAC,OAAO,EAAE;gBACxD,IAAI,EAAE,4DAA4D;aACnE,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,WAAW,GAAwB;YACvC,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;YAEvE,MAAM,MAAM,GAAqB;gBAC/B,wEAAwE;gBACxE,yEAAyE;gBACzE,4CAA4C;gBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE;gBACpD,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI;gBAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,2BAA2B,EAAE;oBAC/D,IAAI,EAAE,gDAAgD;iBACvD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAmB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACxF,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/mock/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/delete.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,QAgEtD"}
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/delete.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,QA2DtD"}
@@ -8,9 +8,11 @@
8
8
  */
9
9
  import chalk from "chalk";
10
10
  import { PublicMocksService } from "@spec0/sdk-public-platform";
11
- import { configureSdkAuth, errorStatusCode, is401, extractErrorMessage, } from "../../lib/api-client.js";
11
+ import { configureSdkAuth } from "../../lib/api-client.js";
12
12
  import { requireOrgContext } from "../../lib/auth-context.js";
13
- import { ExitCode, exitCodeForHttpStatus } from "../../lib/exit-codes.js";
13
+ import { ExitCode } from "../../lib/exit-codes.js";
14
+ import { failApi } from "../../lib/errors.js";
15
+ import { setHttpTrace } from "../../lib/http-trace.js";
14
16
  import { fail, progress, resolveOutputContext, } from "../../lib/output/index.js";
15
17
  export function registerMockDeleteCommand(mock) {
16
18
  mock
@@ -19,8 +21,10 @@ export function registerMockDeleteCommand(mock) {
19
21
  .option("--yes", "Skip the confirmation prompt (required for non-interactive use)")
20
22
  .option("--org <uuid>", "Org id override")
21
23
  .option("--output <format>", "Output format: text, json, or yaml (default: text)")
24
+ .option("--verbose", "Print HTTP request/response traces to stderr")
22
25
  .action(async (api, opts) => {
23
26
  const outCtx = resolveOutputContext(opts);
27
+ setHttpTrace(outCtx.verbose);
24
28
  if (!api.trim()) {
25
29
  fail(outCtx, ExitCode.USAGE, "API ref is required.");
26
30
  }
@@ -50,14 +54,11 @@ export function registerMockDeleteCommand(mock) {
50
54
  progress(outCtx, chalk.green(`✓ Deleted mock server for ${hit.apiName ?? api} (${hit.mockServerId})`));
51
55
  }
52
56
  catch (err) {
53
- if (is401(err)) {
54
- fail(outCtx, ExitCode.AUTH_MISSING, "Token invalid or expired.", {
55
- hint: "Run 'spec0 auth login' or refresh SPEC0_TOKEN.",
56
- });
57
- }
58
- const status = errorStatusCode(err);
59
- const msg = extractErrorMessage(err) ?? err.message;
60
- fail(outCtx, status ? exitCodeForHttpStatus(status) : ExitCode.GENERIC, `mock delete failed: ${msg}`);
57
+ failApi(outCtx, err, {
58
+ action: "mock delete",
59
+ org: authCtx.orgName ?? authCtx.orgId,
60
+ apiUrl: authCtx.apiUrl,
61
+ });
61
62
  }
62
63
  });
63
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/mock/delete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/mock/delete.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,QA0CpD"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,QA2CpD"}
@@ -5,9 +5,11 @@
5
5
  * `@spec0/sdk-public-platform`.
6
6
  */
7
7
  import { PublicMocksService } from "@spec0/sdk-public-platform";
8
- import { configureSdkAuth, is401 } from "../../lib/api-client.js";
8
+ import { configureSdkAuth } from "../../lib/api-client.js";
9
9
  import { requireOrgContext } from "../../lib/auth-context.js";
10
10
  import { ExitCode } from "../../lib/exit-codes.js";
11
+ import { failApi } from "../../lib/errors.js";
12
+ import { setHttpTrace } from "../../lib/http-trace.js";
11
13
  import { emit, fail, resolveOutputContext } from "../../lib/output/index.js";
12
14
  import { renderTable } from "../../lib/output/table.js";
13
15
  export function registerMockListCommand(mock) {
@@ -16,8 +18,10 @@ export function registerMockListCommand(mock) {
16
18
  .description("List all mock servers in the org.")
17
19
  .option("--org <uuid>", "Org id override")
18
20
  .option("--output <format>", "Output format: text, json, or yaml (default: text)")
21
+ .option("--verbose", "Print HTTP request/response traces to stderr")
19
22
  .action(async (opts) => {
20
23
  const outCtx = resolveOutputContext(opts);
24
+ setHttpTrace(outCtx.verbose);
21
25
  let authCtx;
22
26
  try {
23
27
  authCtx = requireOrgContext(opts.org);
@@ -42,12 +46,11 @@ export function registerMockListCommand(mock) {
42
46
  ]));
43
47
  }
44
48
  catch (err) {
45
- if (is401(err)) {
46
- fail(outCtx, ExitCode.AUTH_MISSING, "Token invalid or expired.", {
47
- hint: "Run 'spec0 auth login' or refresh SPEC0_TOKEN.",
48
- });
49
- }
50
- fail(outCtx, ExitCode.GENERIC, `mock list failed: ${err.message}`);
49
+ failApi(outCtx, err, {
50
+ action: "mock list",
51
+ org: authCtx.orgName ?? authCtx.orgId,
52
+ apiUrl: authCtx.apiUrl,
53
+ });
51
54
  }
52
55
  });
53
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/mock/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAsB,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,oDAAoD,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,IAAsC,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAG,CAAW,CAAC,OAAO,EAAE;gBACxD,IAAI,EAAE,4DAA4D;aACnE,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChC,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG;gBAChC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG;gBACnB,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE;aACnD,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAC9B,WAAW,CAAC,IAA4C,EAAE;gBACxD,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC7B,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;gBAC/B,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;aACvC,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,2BAA2B,EAAE;oBAC/D,IAAI,EAAE,gDAAgD;iBACvD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,qBAAsB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/mock/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAsB,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,oDAAoD,CAAC;SACjF,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,IAAsC,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAG,CAAW,CAAC,OAAO,EAAE;gBACxD,IAAI,EAAE,4DAA4D;aACnE,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChC,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG;gBAChC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG;gBACnB,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE;aACnD,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAC9B,WAAW,CAAC,IAA4C,EAAE;gBACxD,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC7B,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;gBAC/B,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;aACvC,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;gBACnB,MAAM,EAAE,WAAW;gBACnB,GAAG,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK;gBACrC,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/show.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,QAkDpD"}
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/show.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,QAmDpD"}
@@ -8,9 +8,11 @@
8
8
  */
9
9
  import chalk from "chalk";
10
10
  import { PublicMocksService } from "@spec0/sdk-public-platform";
11
- import { configureSdkAuth, is401 } from "../../lib/api-client.js";
11
+ import { configureSdkAuth } from "../../lib/api-client.js";
12
12
  import { requireOrgContext } from "../../lib/auth-context.js";
13
13
  import { ExitCode } from "../../lib/exit-codes.js";
14
+ import { failApi } from "../../lib/errors.js";
15
+ import { setHttpTrace } from "../../lib/http-trace.js";
14
16
  import { emit, fail, resolveOutputContext } from "../../lib/output/index.js";
15
17
  export function registerMockShowCommand(mock) {
16
18
  mock
@@ -18,8 +20,10 @@ export function registerMockShowCommand(mock) {
18
20
  .description("Show details for the mock server tied to <api> (name or UUID).")
19
21
  .option("--org <uuid>", "Org id override")
20
22
  .option("--output <format>", "Output format: text, json, or yaml (default: text)")
23
+ .option("--verbose", "Print HTTP request/response traces to stderr")
21
24
  .action(async (api, opts) => {
22
25
  const outCtx = resolveOutputContext(opts);
26
+ setHttpTrace(outCtx.verbose);
23
27
  let authCtx;
24
28
  try {
25
29
  authCtx = requireOrgContext(opts.org);
@@ -49,12 +53,11 @@ export function registerMockShowCommand(mock) {
49
53
  emit(outCtx, result, renderShowText);
50
54
  }
51
55
  catch (err) {
52
- if (is401(err)) {
53
- fail(outCtx, ExitCode.AUTH_MISSING, "Token invalid or expired.", {
54
- hint: "Run 'spec0 auth login' or refresh SPEC0_TOKEN.",
55
- });
56
- }
57
- fail(outCtx, ExitCode.GENERIC, `mock show failed: ${err.message}`);
56
+ failApi(outCtx, err, {
57
+ action: "mock show",
58
+ org: authCtx.orgName ?? authCtx.orgId,
59
+ apiUrl: authCtx.apiUrl,
60
+ });
58
61
  }
59
62
  });
60
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/mock/show.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/mock/show.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,QAgCnD"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/commands/mock/url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,QAqCnD"}
@@ -9,15 +9,21 @@
9
9
  * point-lookup endpoint so we still list-and-filter, just over the SDK now.
10
10
  */
11
11
  import { PublicMocksService } from "@spec0/sdk-public-platform";
12
- import { configureSdkAuth, is401 } from "../../lib/api-client.js";
12
+ import { configureSdkAuth } from "../../lib/api-client.js";
13
13
  import { requireOrgContext } from "../../lib/auth-context.js";
14
14
  import { ExitCode, exit } from "../../lib/exit-codes.js";
15
+ import { failApi } from "../../lib/errors.js";
16
+ import { setHttpTrace } from "../../lib/http-trace.js";
17
+ import { resolveOutputContext } from "../../lib/output/index.js";
15
18
  export function registerMockUrlCommand(mock) {
16
19
  mock
17
20
  .command("url <api>")
18
21
  .description("Print mock base URL for <api> (name or UUID). One line, pipe-friendly.")
19
22
  .option("--org <uuid>", "Org id override")
23
+ .option("--verbose", "Print HTTP request/response traces to stderr")
20
24
  .action(async (api, opts) => {
25
+ setHttpTrace(!!opts.verbose);
26
+ const outCtx = resolveOutputContext(opts);
21
27
  let authCtx;
22
28
  try {
23
29
  authCtx = requireOrgContext(opts.org);
@@ -36,10 +42,11 @@ export function registerMockUrlCommand(mock) {
36
42
  process.stdout.write(`${authCtx.apiUrl}${hit.mockBaseUrl ?? ""}\n`);
37
43
  }
38
44
  catch (err) {
39
- if (is401(err)) {
40
- exit(ExitCode.AUTH_MISSING, "Token invalid or expired. Run 'spec0 auth login'.");
41
- }
42
- exit(ExitCode.GENERIC, `mock url failed: ${err.message}`);
45
+ failApi(outCtx, err, {
46
+ action: "mock url",
47
+ org: authCtx.orgName ?? authCtx.orgId,
48
+ apiUrl: authCtx.apiUrl,
49
+ });
43
50
  }
44
51
  });
45
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/commands/mock/url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,IAAI;SACD,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wEAAwE,CAAC;SACrF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAAsB,EAAE,EAAE;QACpD,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CACzF,CAAC;YACF,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,6BAA6B,GAAG,IAAI,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,IAAI,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,mDAAmD,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,oBAAqB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/commands/mock/url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,IAAI;SACD,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wEAAwE,CAAC;SACrF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;SACzC,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAAyC,EAAE,EAAE;QACvE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CACzF,CAAC;YACF,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,6BAA6B,GAAG,IAAI,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,IAAI,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;gBACnB,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK;gBACrC,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA4CnD"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAsDnD"}
@@ -12,10 +12,13 @@
12
12
  import chalk from "chalk";
13
13
  import { writeFileSync } from "fs";
14
14
  import { PublicRegistryService } from "@spec0/sdk-public-platform";
15
- import { configureSdkAuth, is401 } from "../lib/api-client.js";
15
+ import { configureSdkAuth } from "../lib/api-client.js";
16
16
  import { requireOrgContext } from "../lib/auth-context.js";
17
17
  import { resolveRef } from "../lib/ref-resolver.js";
18
18
  import { ExitCode, exit } from "../lib/exit-codes.js";
19
+ import { failApi } from "../lib/errors.js";
20
+ import { setHttpTrace } from "../lib/http-trace.js";
21
+ import { resolveOutputContext } from "../lib/output/index.js";
19
22
  export function registerPullCommand(program) {
20
23
  program
21
24
  .command("pull <ref>")
@@ -23,7 +26,10 @@ export function registerPullCommand(program) {
23
26
  .option("-o, --output <file>", "Write to file instead of stdout")
24
27
  .option("--public", "Reserved for public registry (same endpoint when API is public)")
25
28
  .option("--org <uuid>", "Auth org id (defaults to logged-in org)")
29
+ .option("--verbose", "Print HTTP request/response traces to stderr")
26
30
  .action(async (ref, opts) => {
31
+ const outCtx = resolveOutputContext(opts);
32
+ setHttpTrace(!!opts.verbose);
27
33
  const parsed = resolveRefForPull(ref);
28
34
  let ctx;
29
35
  try {
@@ -53,10 +59,11 @@ export function registerPullCommand(program) {
53
59
  }
54
60
  }
55
61
  catch (err) {
56
- if (is401(err)) {
57
- exit(ExitCode.AUTH_MISSING, "Token invalid or expired. Run 'spec0 auth login'.");
58
- }
59
- exit(ExitCode.GENERIC, `Pull failed: ${err.message}`);
62
+ failApi(outCtx, err, {
63
+ action: "pull",
64
+ org: ctx.orgName ?? ctx.orgId,
65
+ apiUrl: ctx.apiUrl,
66
+ });
60
67
  }
61
68
  });
62
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuTpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAuBnD"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6TpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAuBnD"}
@@ -204,6 +204,9 @@ async function runPush(cmdName, specArg, opts, command) {
204
204
  }
205
205
  const displayVersion = reg.version ?? versionOpt ?? "?";
206
206
  const displayName = reg.apiName ?? resolvedName ?? resolvedApiId;
207
+ // Non-blocking org governance warnings, surfaced when the org runs governance in warn mode.
208
+ const governanceWarnings = reg
209
+ .governanceWarnings ?? [];
207
210
  if (format === "json") {
208
211
  console.log(JSON.stringify({
209
212
  apiId: resolvedApiId,
@@ -217,6 +220,7 @@ async function runPush(cmdName, specArg, opts, command) {
217
220
  teamName: reg.teamName ?? null,
218
221
  orgSlug: reg.orgSlug ?? null,
219
222
  registryUrl: reg.registryUrl ?? null,
223
+ governanceWarnings,
220
224
  specUrl,
221
225
  mockUrl: mockUrl ?? null,
222
226
  }, null, 2));
@@ -234,6 +238,7 @@ async function runPush(cmdName, specArg, opts, command) {
234
238
  versionUnchanged: reg.versionUnchanged,
235
239
  versionUnchangedHint: reg.versionUnchangedHint,
236
240
  created: reg.created,
241
+ governanceWarnings,
237
242
  }));
238
243
  }
239
244
  }