@spec0/cli 0.4.1 → 0.6.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.
- package/README.md +3 -2
- package/dist/commands/api/changelog.d.ts.map +1 -1
- package/dist/commands/api/changelog.js +10 -7
- package/dist/commands/api/changelog.js.map +1 -1
- package/dist/commands/api/delete.d.ts +10 -0
- package/dist/commands/api/delete.d.ts.map +1 -0
- package/dist/commands/api/delete.js +72 -0
- package/dist/commands/api/delete.js.map +1 -0
- package/dist/commands/api/index.d.ts.map +1 -1
- package/dist/commands/api/index.js +2 -0
- package/dist/commands/api/index.js.map +1 -1
- package/dist/commands/api/list.d.ts.map +1 -1
- package/dist/commands/api/list.js +10 -7
- package/dist/commands/api/list.js.map +1 -1
- package/dist/commands/api/show.d.ts +5 -2
- package/dist/commands/api/show.d.ts.map +1 -1
- package/dist/commands/api/show.js +80 -18
- package/dist/commands/api/show.js.map +1 -1
- package/dist/commands/auth.d.ts +5 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +49 -31
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/ci/generate.d.ts.map +1 -1
- package/dist/commands/ci/generate.js +10 -7
- package/dist/commands/ci/generate.js.map +1 -1
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +10 -5
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/mcp.d.ts +7 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +135 -29
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/mock/create.d.ts.map +1 -1
- package/dist/commands/mock/create.js +10 -7
- package/dist/commands/mock/create.js.map +1 -1
- package/dist/commands/mock/delete.d.ts +11 -0
- package/dist/commands/mock/delete.d.ts.map +1 -0
- package/dist/commands/mock/delete.js +65 -0
- package/dist/commands/mock/delete.js.map +1 -0
- package/dist/commands/mock/index.d.ts.map +1 -1
- package/dist/commands/mock/index.js +2 -0
- package/dist/commands/mock/index.js.map +1 -1
- package/dist/commands/mock/list.d.ts.map +1 -1
- package/dist/commands/mock/list.js +10 -7
- package/dist/commands/mock/list.js.map +1 -1
- package/dist/commands/mock/show.d.ts.map +1 -1
- package/dist/commands/mock/show.js +10 -7
- package/dist/commands/mock/show.js.map +1 -1
- package/dist/commands/mock/url.d.ts.map +1 -1
- package/dist/commands/mock/url.js +12 -5
- package/dist/commands/mock/url.js.map +1 -1
- package/dist/commands/publish.js +2 -2
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +12 -5
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +5 -0
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +13 -9
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync-status.d.ts.map +1 -1
- package/dist/commands/sync-status.js +10 -7
- package/dist/commands/sync-status.js.map +1 -1
- package/dist/commands/team/create.d.ts.map +1 -1
- package/dist/commands/team/create.js +11 -10
- package/dist/commands/team/create.js.map +1 -1
- package/dist/commands/team/delete.d.ts.map +1 -1
- package/dist/commands/team/delete.js +11 -8
- package/dist/commands/team/delete.js.map +1 -1
- package/dist/commands/team/list.d.ts.map +1 -1
- package/dist/commands/team/list.js +11 -9
- package/dist/commands/team/list.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +12 -2
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +65 -14
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/config.d.ts +11 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +14 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +46 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +99 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/http-trace.d.ts +37 -0
- package/dist/lib/http-trace.d.ts.map +1 -0
- package/dist/lib/http-trace.js +101 -0
- package/dist/lib/http-trace.js.map +1 -0
- package/dist/lib/output.d.ts +4 -0
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +8 -0
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/platform-defaults.d.ts +29 -4
- package/dist/lib/platform-defaults.d.ts.map +1 -1
- package/dist/lib/platform-defaults.js +34 -4
- package/dist/lib/platform-defaults.js.map +1 -1
- package/package.json +6 -6
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
* Requires `admin:team` scope on the calling token.
|
|
6
6
|
*/
|
|
7
7
|
import { PublicTeamsService } from "@spec0/sdk-public-platform";
|
|
8
|
-
import { configureSdkAuth
|
|
8
|
+
import { configureSdkAuth } from "../../lib/api-client.js";
|
|
9
9
|
import { requireOrgContext } from "../../lib/auth-context.js";
|
|
10
|
-
import { ExitCode
|
|
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
|
export function registerTeamCreateCommand(team) {
|
|
13
15
|
team
|
|
@@ -16,8 +18,10 @@ export function registerTeamCreateCommand(team) {
|
|
|
16
18
|
.option("--description <text>", "Optional team description")
|
|
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 (name, opts) => {
|
|
20
23
|
const outCtx = resolveOutputContext(opts);
|
|
24
|
+
setHttpTrace(outCtx.verbose);
|
|
21
25
|
const trimmed = name.trim();
|
|
22
26
|
if (!trimmed) {
|
|
23
27
|
fail(outCtx, ExitCode.USAGE, "Team name is required and must be non-blank.");
|
|
@@ -42,14 +46,11 @@ export function registerTeamCreateCommand(team) {
|
|
|
42
46
|
emit(outCtx, created, (t) => `Created team: ${t.name} (${t.id})`);
|
|
43
47
|
}
|
|
44
48
|
catch (err) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
const status = errorStatusCode(err);
|
|
51
|
-
const msg = extractErrorMessage(err) ?? err.message;
|
|
52
|
-
fail(outCtx, status ? exitCodeForHttpStatus(status) : ExitCode.GENERIC, `team create failed: ${msg}`);
|
|
49
|
+
failApi(outCtx, err, {
|
|
50
|
+
action: "team create",
|
|
51
|
+
org: authCtx.orgName ?? authCtx.orgId,
|
|
52
|
+
apiUrl: authCtx.apiUrl,
|
|
53
|
+
});
|
|
53
54
|
}
|
|
54
55
|
});
|
|
55
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/team/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/team/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,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;AAEjG,MAAM,UAAU,yBAAyB,CAAC,IAAa;IACrD,IAAI;SACD,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;SAC3D,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,IAAY,EAAE,IAA4D,EAAE,EAAE;QAC3F,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,8CAA8C,CAAC,CAAC;QAC/E,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,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,MAAM,kBAAkB,CAAC,UAAU,CAAC;gBACnD,WAAW,EAAE;oBACX,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;aACF,CAAC,CAAW,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;gBACnB,MAAM,EAAE,aAAa;gBACrB,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":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/team/delete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/team/delete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,QAyDtD"}
|
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import chalk from "chalk";
|
|
12
12
|
import { PublicTeamsService } from "@spec0/sdk-public-platform";
|
|
13
|
-
import { configureSdkAuth, errorStatusCode,
|
|
13
|
+
import { configureSdkAuth, errorStatusCode, extractErrorMessage } from "../../lib/api-client.js";
|
|
14
14
|
import { requireOrgContext } from "../../lib/auth-context.js";
|
|
15
|
-
import { ExitCode
|
|
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 { fail, progress, resolveOutputContext, } from "../../lib/output/index.js";
|
|
17
19
|
export function registerTeamDeleteCommand(team) {
|
|
18
20
|
team
|
|
@@ -21,8 +23,10 @@ export function registerTeamDeleteCommand(team) {
|
|
|
21
23
|
.option("--yes", "Skip the confirmation prompt (required for non-interactive use)")
|
|
22
24
|
.option("--org <uuid>", "Org id override")
|
|
23
25
|
.option("--output <format>", "Output format: text, json, or yaml (default: text)")
|
|
26
|
+
.option("--verbose", "Print HTTP request/response traces to stderr")
|
|
24
27
|
.action(async (teamId, opts) => {
|
|
25
28
|
const outCtx = resolveOutputContext(opts);
|
|
29
|
+
setHttpTrace(outCtx.verbose);
|
|
26
30
|
if (!teamId.trim()) {
|
|
27
31
|
fail(outCtx, ExitCode.USAGE, "Team id is required.");
|
|
28
32
|
}
|
|
@@ -44,11 +48,6 @@ export function registerTeamDeleteCommand(team) {
|
|
|
44
48
|
progress(outCtx, chalk.green(`✓ Deleted team ${teamId}`));
|
|
45
49
|
}
|
|
46
50
|
catch (err) {
|
|
47
|
-
if (is401(err)) {
|
|
48
|
-
fail(outCtx, ExitCode.AUTH_MISSING, "Token invalid or expired.", {
|
|
49
|
-
hint: "Run 'spec0 auth login' or refresh SPEC0_TOKEN.",
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
51
|
const status = errorStatusCode(err);
|
|
53
52
|
const msg = extractErrorMessage(err) ?? err.message;
|
|
54
53
|
if (status === 404) {
|
|
@@ -61,7 +60,11 @@ export function registerTeamDeleteCommand(team) {
|
|
|
61
60
|
hint: "Delete the team's APIs and mocks first.",
|
|
62
61
|
});
|
|
63
62
|
}
|
|
64
|
-
|
|
63
|
+
failApi(outCtx, err, {
|
|
64
|
+
action: "team delete",
|
|
65
|
+
org: authCtx.orgName ?? authCtx.orgId,
|
|
66
|
+
apiUrl: authCtx.apiUrl,
|
|
67
|
+
});
|
|
65
68
|
}
|
|
66
69
|
});
|
|
67
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/team/delete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/team/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/team/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/team/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,QAsCpD"}
|
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
* Uses PublicTeamsService.listTeams (`/api/v1/public/teams`).
|
|
5
5
|
*/
|
|
6
6
|
import { PublicTeamsService } from "@spec0/sdk-public-platform";
|
|
7
|
-
import { configureSdkAuth
|
|
7
|
+
import { configureSdkAuth } from "../../lib/api-client.js";
|
|
8
8
|
import { requireOrgContext } from "../../lib/auth-context.js";
|
|
9
|
-
import { ExitCode
|
|
9
|
+
import { ExitCode } from "../../lib/exit-codes.js";
|
|
10
|
+
import { failApi } from "../../lib/errors.js";
|
|
11
|
+
import { setHttpTrace } from "../../lib/http-trace.js";
|
|
10
12
|
import { emit, fail, resolveOutputContext } from "../../lib/output/index.js";
|
|
11
13
|
import { renderTable } from "../../lib/output/table.js";
|
|
12
14
|
export function registerTeamListCommand(team) {
|
|
@@ -15,8 +17,10 @@ export function registerTeamListCommand(team) {
|
|
|
15
17
|
.description("List all teams in the org.")
|
|
16
18
|
.option("--org <uuid>", "Org id override")
|
|
17
19
|
.option("--output <format>", "Output format: text, json, or yaml (default: text)")
|
|
20
|
+
.option("--verbose", "Print HTTP request/response traces to stderr")
|
|
18
21
|
.action(async (opts) => {
|
|
19
22
|
const outCtx = resolveOutputContext(opts);
|
|
23
|
+
setHttpTrace(outCtx.verbose);
|
|
20
24
|
let authCtx;
|
|
21
25
|
try {
|
|
22
26
|
authCtx = requireOrgContext(opts.org);
|
|
@@ -36,13 +40,11 @@ export function registerTeamListCommand(team) {
|
|
|
36
40
|
]));
|
|
37
41
|
}
|
|
38
42
|
catch (err) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
const status = errorStatusCode(err);
|
|
45
|
-
fail(outCtx, status ? exitCodeForHttpStatus(status) : ExitCode.GENERIC, `team list failed: ${err.message}`);
|
|
43
|
+
failApi(outCtx, err, {
|
|
44
|
+
action: "team list",
|
|
45
|
+
org: authCtx.orgName ?? authCtx.orgId,
|
|
46
|
+
apiUrl: authCtx.apiUrl,
|
|
47
|
+
});
|
|
46
48
|
}
|
|
47
49
|
});
|
|
48
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/team/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/team/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,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,4BAA4B,CAAC;SACzC,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,CAAC,MAAM,kBAAkB,CAAC,SAAS,EAAE,CAAa,CAAC;YAChE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAC1B,WAAW,CAAC,IAA4C,EAAE;gBACxD,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC3B,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;gBAC/B,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE;aAC9C,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"}
|
package/dist/index.js
CHANGED
|
@@ -30,6 +30,10 @@ import { registerCiCommands } from "./commands/ci/index.js";
|
|
|
30
30
|
import { registerCommandsCommand } from "./commands/commands.js";
|
|
31
31
|
import { getCliVersion } from "./lib/version.js";
|
|
32
32
|
import { notifyUpdateIfAvailable } from "./lib/update-check.js";
|
|
33
|
+
import { installHttpInstrumentation } from "./lib/http-trace.js";
|
|
34
|
+
// Apply the default request timeout (and wire verbose tracing) to every SDK
|
|
35
|
+
// call by wrapping the global fetch once, before any command runs.
|
|
36
|
+
installHttpInstrumentation();
|
|
33
37
|
const program = new Command();
|
|
34
38
|
program
|
|
35
39
|
.name("spec0")
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErE,2EAA2E;AAC3E,4EAA4E;AAC5E,oDAAoD;AACpD,iBAAiB,EAAE,CAAC;AACpB,IAAI,WAAW,EAAE,EAAE,CAAC;IAClB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErE,2EAA2E;AAC3E,4EAA4E;AAC5E,oDAAoD;AACpD,iBAAiB,EAAE,CAAC;AACpB,IAAI,WAAW,EAAE,EAAE,CAAC;IAClB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,4EAA4E;AAC5E,mEAAmE;AACnE,0BAA0B,EAAE,CAAC;AAE7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,iFAAiF,CAAC;KAC9F,OAAO,CAAC,aAAa,EAAE,EAAE,eAAe,EAAE,mBAAmB,CAAC;KAC9D,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC;IACtC,kFAAkF;IAClF,wFAAwF;IACxF,qFAAqF;IACrF,yFAAyF;IACzF,qFAAqF;IACrF,wFAAwF;IACxF,uBAAuB;KACtB,uBAAuB,EAAE,CAAC;AAE7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,uEAAuE;AACvE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACnB,uBAAuB,CAAC,aAAa,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -35,8 +35,8 @@ export { orgHeaders };
|
|
|
35
35
|
* resolved org context. The SDK's request builder formats URLs as
|
|
36
36
|
* `OpenAPI.BASE + <service-path>`, where service paths look like
|
|
37
37
|
* `/api/v1/public/apis`. The CLI's stored `apiUrl` is the platform host root
|
|
38
|
-
*
|
|
39
|
-
*
|
|
38
|
+
* and the SDK already carries context-path-less service paths, so `OpenAPI.BASE`
|
|
39
|
+
* is the bare host with no suffix appended.
|
|
40
40
|
*
|
|
41
41
|
* `OpenAPI.TOKEN` is set to the org API key — the SDK adds the
|
|
42
42
|
* `Authorization: Bearer <token>` header automatically. `X-Org-Id` rides on
|
|
@@ -52,6 +52,16 @@ export declare function configureSdkAuth(ctx: ResolvedOrgContext): void;
|
|
|
52
52
|
* Returns `undefined` if neither is present.
|
|
53
53
|
*/
|
|
54
54
|
export declare function errorStatusCode(err: unknown): number | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Extract the request method + final URL from an error, for diagnostics.
|
|
57
|
+
* Handles both SDK `ApiError` (`err.url` / `err.request.method`) and `got`
|
|
58
|
+
* errors (`err.response.requestUrl` / `err.options.method`). Returns
|
|
59
|
+
* `undefined` fields when nothing is available.
|
|
60
|
+
*/
|
|
61
|
+
export declare function errorRequestInfo(err: unknown): {
|
|
62
|
+
method?: string;
|
|
63
|
+
url?: string;
|
|
64
|
+
};
|
|
55
65
|
export declare function is401(err: unknown): boolean;
|
|
56
66
|
export declare function is402(err: unknown): boolean;
|
|
57
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAY,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAY,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmCD,iBAAS,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS;QAShC,CAAC,kBAAkB,MAAM,YAAY,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;SASxD,CAAC,kBAAkB,MAAM,SAAS,OAAO,YAAY,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;QAU1E,CAAC,kBAAkB,MAAM,SAAS,OAAO,YAAY,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;WAUtE,CAAC,kBAAkB,MAAM,YAAY,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;EASzE;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,kBAAkB;;YAYxC,CAAC,kBAAkB,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;kBAOlE,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;aAU/D,CAAC,kBACR,MAAM,QACN,OAAO,YACH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;YAaC,CAAC,kBACP,MAAM,QACN,OAAO,YACH,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;kBAaO,CAAC,kBACb,MAAM,UACJ,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,YAC5D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;eAaI,CAAC,kBAAkB,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;EAQ5F;AAED,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAI9D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAWhF;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE3C;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAa/D"}
|
package/dist/lib/api-client.js
CHANGED
|
@@ -3,6 +3,40 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import got from "got";
|
|
5
5
|
import { ApiError, OpenAPI } from "@spec0/sdk-public-platform";
|
|
6
|
+
import { httpTimeoutMs, httpTraceEnabled, traceRequest, traceResponse } from "./http-trace.js";
|
|
7
|
+
/**
|
|
8
|
+
* Shared `got` instance with `--verbose` tracing hooks. All raw HTTP goes
|
|
9
|
+
* through this so a single `setHttpTrace(true)` makes every request visible on
|
|
10
|
+
* stderr (the SDK is traced separately via the global `fetch` wrapper).
|
|
11
|
+
*/
|
|
12
|
+
const http = got.extend({
|
|
13
|
+
// Fail fast on a hung connection rather than blocking the CLI forever.
|
|
14
|
+
// got's TimeoutError carries code ETIMEDOUT, which classifies to NETWORK_ERROR.
|
|
15
|
+
timeout: { request: httpTimeoutMs() },
|
|
16
|
+
hooks: {
|
|
17
|
+
beforeRequest: [
|
|
18
|
+
(options) => {
|
|
19
|
+
if (options.url)
|
|
20
|
+
traceRequest(options.method, options.url.toString());
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
afterResponse: [
|
|
24
|
+
(response) => {
|
|
25
|
+
traceResponse(response.statusCode, response.requestUrl.toString());
|
|
26
|
+
return response;
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
beforeError: [
|
|
30
|
+
(error) => {
|
|
31
|
+
if (httpTraceEnabled()) {
|
|
32
|
+
const url = (error.response?.requestUrl ?? error.options?.url)?.toString() ?? "";
|
|
33
|
+
traceResponse(error.response?.statusCode ?? 0, url);
|
|
34
|
+
}
|
|
35
|
+
return error;
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
});
|
|
6
40
|
function orgHeaders(orgId, extra) {
|
|
7
41
|
return { "X-Org-Id": orgId, ...extra };
|
|
8
42
|
}
|
|
@@ -15,7 +49,7 @@ export function createApiClient(org) {
|
|
|
15
49
|
};
|
|
16
50
|
return {
|
|
17
51
|
async get(path, options) {
|
|
18
|
-
const res = await
|
|
52
|
+
const res = await http.get(`${baseUrl}${path}`, {
|
|
19
53
|
...options,
|
|
20
54
|
headers: { ...headers, ...options?.headers },
|
|
21
55
|
responseType: "json",
|
|
@@ -23,7 +57,7 @@ export function createApiClient(org) {
|
|
|
23
57
|
return res.body;
|
|
24
58
|
},
|
|
25
59
|
async post(path, body, options) {
|
|
26
|
-
const res = await
|
|
60
|
+
const res = await http.post(`${baseUrl}${path}`, {
|
|
27
61
|
...options,
|
|
28
62
|
json: body,
|
|
29
63
|
headers: { ...headers, ...options?.headers },
|
|
@@ -32,7 +66,7 @@ export function createApiClient(org) {
|
|
|
32
66
|
return res.body;
|
|
33
67
|
},
|
|
34
68
|
async put(path, body, options) {
|
|
35
|
-
const res = await
|
|
69
|
+
const res = await http.put(`${baseUrl}${path}`, {
|
|
36
70
|
...options,
|
|
37
71
|
json: body,
|
|
38
72
|
headers: { ...headers, ...options?.headers },
|
|
@@ -41,7 +75,7 @@ export function createApiClient(org) {
|
|
|
41
75
|
return res.body;
|
|
42
76
|
},
|
|
43
77
|
async delete(path, options) {
|
|
44
|
-
const res = await
|
|
78
|
+
const res = await http.delete(`${baseUrl}${path}`, {
|
|
45
79
|
...options,
|
|
46
80
|
headers: { ...headers, ...options?.headers },
|
|
47
81
|
responseType: "json",
|
|
@@ -52,7 +86,10 @@ export function createApiClient(org) {
|
|
|
52
86
|
}
|
|
53
87
|
/** Org API key client (discovery, registry, CLI workspace). */
|
|
54
88
|
export function createOrgApiClient(ctx) {
|
|
55
|
-
|
|
89
|
+
// The platform API is served at the host root — the same base `configureSdkAuth()`
|
|
90
|
+
// gives the SDK. Call sites supply their own service path (e.g. `api show`), so we
|
|
91
|
+
// only normalize a trailing slash here and never append a context path.
|
|
92
|
+
const baseUrl = ctx.apiUrl.replace(/\/$/, "");
|
|
56
93
|
const baseHeaders = {
|
|
57
94
|
Authorization: `Bearer ${ctx.apiKey}`,
|
|
58
95
|
"X-Org-Id": ctx.orgId,
|
|
@@ -60,14 +97,14 @@ export function createOrgApiClient(ctx) {
|
|
|
60
97
|
return {
|
|
61
98
|
baseUrl,
|
|
62
99
|
async getJson(path, headers) {
|
|
63
|
-
const res = await
|
|
100
|
+
const res = await http.get(`${baseUrl}${path}`, {
|
|
64
101
|
headers: { ...baseHeaders, Accept: "application/json", ...headers },
|
|
65
102
|
responseType: "json",
|
|
66
103
|
});
|
|
67
104
|
return res.body;
|
|
68
105
|
},
|
|
69
106
|
async getText(path, headers) {
|
|
70
|
-
const res = await
|
|
107
|
+
const res = await http.get(`${baseUrl}${path}`, {
|
|
71
108
|
headers: {
|
|
72
109
|
...baseHeaders,
|
|
73
110
|
Accept: "application/yaml, application/json, text/plain, */*",
|
|
@@ -77,7 +114,7 @@ export function createOrgApiClient(ctx) {
|
|
|
77
114
|
return res.body;
|
|
78
115
|
},
|
|
79
116
|
async postJson(path, body, headers) {
|
|
80
|
-
const res = await
|
|
117
|
+
const res = await http.post(`${baseUrl}${path}`, {
|
|
81
118
|
json: body,
|
|
82
119
|
headers: {
|
|
83
120
|
...baseHeaders,
|
|
@@ -90,7 +127,7 @@ export function createOrgApiClient(ctx) {
|
|
|
90
127
|
return res.body;
|
|
91
128
|
},
|
|
92
129
|
async putJson(path, body, headers) {
|
|
93
|
-
const res = await
|
|
130
|
+
const res = await http.put(`${baseUrl}${path}`, {
|
|
94
131
|
json: body,
|
|
95
132
|
headers: {
|
|
96
133
|
...baseHeaders,
|
|
@@ -108,7 +145,7 @@ export function createOrgApiClient(ctx) {
|
|
|
108
145
|
const blob = new Blob([content], { type: "application/octet-stream" });
|
|
109
146
|
form.append(name, blob, filename);
|
|
110
147
|
}
|
|
111
|
-
const res = await
|
|
148
|
+
const res = await http.post(`${baseUrl}${path}`, {
|
|
112
149
|
body: form,
|
|
113
150
|
headers: { ...baseHeaders, Accept: "application/json", ...headers },
|
|
114
151
|
responseType: "json",
|
|
@@ -116,7 +153,7 @@ export function createOrgApiClient(ctx) {
|
|
|
116
153
|
return res.body;
|
|
117
154
|
},
|
|
118
155
|
async deleteJson(path, headers) {
|
|
119
|
-
const res = await
|
|
156
|
+
const res = await http.delete(`${baseUrl}${path}`, {
|
|
120
157
|
headers: { ...baseHeaders, Accept: "application/json", ...headers },
|
|
121
158
|
responseType: "json",
|
|
122
159
|
});
|
|
@@ -130,8 +167,8 @@ export { orgHeaders };
|
|
|
130
167
|
* resolved org context. The SDK's request builder formats URLs as
|
|
131
168
|
* `OpenAPI.BASE + <service-path>`, where service paths look like
|
|
132
169
|
* `/api/v1/public/apis`. The CLI's stored `apiUrl` is the platform host root
|
|
133
|
-
*
|
|
134
|
-
*
|
|
170
|
+
* and the SDK already carries context-path-less service paths, so `OpenAPI.BASE`
|
|
171
|
+
* is the bare host with no suffix appended.
|
|
135
172
|
*
|
|
136
173
|
* `OpenAPI.TOKEN` is set to the org API key — the SDK adds the
|
|
137
174
|
* `Authorization: Bearer <token>` header automatically. `X-Org-Id` rides on
|
|
@@ -141,7 +178,7 @@ export { orgHeaders };
|
|
|
141
178
|
* idempotent and safe to invoke multiple times in the same process.
|
|
142
179
|
*/
|
|
143
180
|
export function configureSdkAuth(ctx) {
|
|
144
|
-
OpenAPI.BASE =
|
|
181
|
+
OpenAPI.BASE = ctx.apiUrl;
|
|
145
182
|
OpenAPI.TOKEN = ctx.apiKey;
|
|
146
183
|
OpenAPI.HEADERS = { "X-Org-Id": ctx.orgId };
|
|
147
184
|
}
|
|
@@ -155,6 +192,20 @@ export function errorStatusCode(err) {
|
|
|
155
192
|
return err.status;
|
|
156
193
|
return err?.response?.statusCode;
|
|
157
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Extract the request method + final URL from an error, for diagnostics.
|
|
197
|
+
* Handles both SDK `ApiError` (`err.url` / `err.request.method`) and `got`
|
|
198
|
+
* errors (`err.response.requestUrl` / `err.options.method`). Returns
|
|
199
|
+
* `undefined` fields when nothing is available.
|
|
200
|
+
*/
|
|
201
|
+
export function errorRequestInfo(err) {
|
|
202
|
+
if (err instanceof ApiError) {
|
|
203
|
+
return { method: err.request?.method, url: err.url };
|
|
204
|
+
}
|
|
205
|
+
const e = err;
|
|
206
|
+
const rawUrl = e?.response?.requestUrl ?? e?.request?.requestUrl;
|
|
207
|
+
return { method: e?.options?.method, url: rawUrl ? String(rawUrl) : undefined };
|
|
208
|
+
}
|
|
158
209
|
export function is401(err) {
|
|
159
210
|
return errorStatusCode(err) === 401;
|
|
160
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,GAAqB,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -18,6 +18,17 @@ export declare function getConfig(): Spec0Config;
|
|
|
18
18
|
export declare function getDefaultOrgId(): string | null;
|
|
19
19
|
export declare function getOrgConfig(orgId: string): OrgConfig | undefined;
|
|
20
20
|
export declare function setOrgConfig(orgId: string, config: OrgConfig): void;
|
|
21
|
+
/**
|
|
22
|
+
* Replace the entire org set with a single org and make it active, atomically.
|
|
23
|
+
*
|
|
24
|
+
* The CLI is single-org: `auth login` should always point every subsequent
|
|
25
|
+
* command at the org you just authenticated, with no stale entries left behind
|
|
26
|
+
* to silently win as the default. (A previous default org pointing at a dead
|
|
27
|
+
* `localhost` API base is exactly how a fresh login could appear to succeed yet
|
|
28
|
+
* every command still failed.) This clears any previously stored orgs, writes
|
|
29
|
+
* the one passed in, and sets it as the default in one step.
|
|
30
|
+
*/
|
|
31
|
+
export declare function replaceSoleOrg(orgId: string, config: OrgConfig): void;
|
|
21
32
|
export declare function setDefaultOrg(orgId: string): void;
|
|
22
33
|
export declare function clearConfig(): void;
|
|
23
34
|
export declare function getConfigPath(): string;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC;AAqBD,wBAAgB,SAAS,IAAI,WAAW,CAOvC;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEjE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAEnE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC;AAqBD,wBAAgB,SAAS,IAAI,WAAW,CAOvC;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEjE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAEnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAGrE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/lib/config.js
CHANGED
|
@@ -37,6 +37,20 @@ export function getOrgConfig(orgId) {
|
|
|
37
37
|
export function setOrgConfig(orgId, config) {
|
|
38
38
|
store.set(`orgs.${orgId}`, config);
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Replace the entire org set with a single org and make it active, atomically.
|
|
42
|
+
*
|
|
43
|
+
* The CLI is single-org: `auth login` should always point every subsequent
|
|
44
|
+
* command at the org you just authenticated, with no stale entries left behind
|
|
45
|
+
* to silently win as the default. (A previous default org pointing at a dead
|
|
46
|
+
* `localhost` API base is exactly how a fresh login could appear to succeed yet
|
|
47
|
+
* every command still failed.) This clears any previously stored orgs, writes
|
|
48
|
+
* the one passed in, and sets it as the default in one step.
|
|
49
|
+
*/
|
|
50
|
+
export function replaceSoleOrg(orgId, config) {
|
|
51
|
+
store.set("orgs", { [orgId]: config });
|
|
52
|
+
store.set("defaultOrg", orgId);
|
|
53
|
+
}
|
|
40
54
|
export function setDefaultOrg(orgId) {
|
|
41
55
|
store.set("defaultOrg", orgId);
|
|
42
56
|
}
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAgBxB,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,OAAO,GAAG;IACd,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;IACvC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;IACvD,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;CAC7B,CAAC;AAEX,MAAM,KAAK,GAAG,IAAI,IAAI,CAAc;IAClC,WAAW,EAAE,OAAO;IACpB,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,EAAE;KACT;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;QACnC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;QACvC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,MAAiB;IAC3D,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAgBxB,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,OAAO,GAAG;IACd,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;IACvC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;IACvD,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;CAC7B,CAAC;AAEX,MAAM,KAAK,GAAG,IAAI,IAAI,CAAc;IAClC,WAAW,EAAE,OAAO;IACpB,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,EAAE;KACT;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;QACnC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;QACvC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,MAAiB;IAC3D,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,MAAiB;IAC7D,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One place to turn a failed platform call into a diagnosable error.
|
|
3
|
+
*
|
|
4
|
+
* Before this, command catch-blocks printed a bare `(err as Error).message` —
|
|
5
|
+
* e.g. `api list failed: Not Found` — with no HTTP status, no URL, and no hint
|
|
6
|
+
* about which org/base was targeted. A developer literally could not tell what
|
|
7
|
+
* went wrong. `failApi` classifies the error into a stable exit code and surfaces:
|
|
8
|
+
*
|
|
9
|
+
* - the server's own message (from the response body when present),
|
|
10
|
+
* - the HTTP status (or a network label when the request never completed),
|
|
11
|
+
* - the method + URL that failed,
|
|
12
|
+
* - the active org + API base, and
|
|
13
|
+
* - a code-specific hint.
|
|
14
|
+
*
|
|
15
|
+
* In `--output json|yaml` mode the request/org context rides in `details` so the
|
|
16
|
+
* document stays a single clean object; in text mode it is appended to the
|
|
17
|
+
* message so a human sees it inline.
|
|
18
|
+
*/
|
|
19
|
+
import { type ExitCodeValue } from "./exit-codes.js";
|
|
20
|
+
import { type OutputContext } from "./output/index.js";
|
|
21
|
+
export interface ApiErrorContext {
|
|
22
|
+
/** Short action label, e.g. "api list", "mock create". */
|
|
23
|
+
action: string;
|
|
24
|
+
/** Active org name or id, for diagnostics. */
|
|
25
|
+
org?: string;
|
|
26
|
+
/** API base the call targeted, for diagnostics. */
|
|
27
|
+
apiUrl?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ApiErrorReport {
|
|
30
|
+
code: ExitCodeValue;
|
|
31
|
+
/** Message for `fail()` — multi-line (with request/org) only in text mode. */
|
|
32
|
+
message: string;
|
|
33
|
+
hint?: string;
|
|
34
|
+
details: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Pure classification of a failed platform call into an exit code, message,
|
|
38
|
+
* hint and structured details. Separated from `failApi` so it can be unit
|
|
39
|
+
* tested without `process.exit`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildApiError(err: unknown, info: ApiErrorContext, format?: OutputContext["format"]): ApiErrorReport;
|
|
42
|
+
/**
|
|
43
|
+
* Report a failed platform call and exit. Never returns.
|
|
44
|
+
*/
|
|
45
|
+
export declare function failApi(ctx: OutputContext, err: unknown, info: ApiErrorContext): never;
|
|
46
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAQ,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqCD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,eAAe,EACrB,MAAM,GAAE,aAAa,CAAC,QAAQ,CAAU,GACvC,cAAc,CA+BhB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,GAAG,KAAK,CAGtF"}
|