@stigmer/cli 3.13.0 → 3.14.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/auth/login.d.ts.map +1 -1
- package/auth/login.js +30 -5
- package/auth/login.js.map +1 -1
- package/auth/token.d.ts +10 -5
- package/auth/token.d.ts.map +1 -1
- package/auth/token.js +30 -21
- package/auth/token.js.map +1 -1
- package/commands/apikey/index.d.ts.map +1 -1
- package/commands/apikey/index.js +11 -5
- package/commands/apikey/index.js.map +1 -1
- package/commands/auth/index.d.ts.map +1 -1
- package/commands/auth/index.js +19 -8
- package/commands/auth/index.js.map +1 -1
- package/commands/config/backend.d.ts.map +1 -1
- package/commands/config/backend.js +134 -12
- package/commands/config/backend.js.map +1 -1
- package/commands/connect.d.ts.map +1 -1
- package/commands/connect.js +6 -3
- package/commands/connect.js.map +1 -1
- package/commands/share.d.ts.map +1 -1
- package/commands/share.js +8 -6
- package/commands/share.js.map +1 -1
- package/config/config.d.ts +56 -7
- package/config/config.d.ts.map +1 -1
- package/config/config.js +115 -16
- package/config/config.js.map +1 -1
- package/config/index.d.ts +1 -1
- package/config/index.d.ts.map +1 -1
- package/config/index.js +1 -1
- package/config/index.js.map +1 -1
- package/config/keys.d.ts +1 -1
- package/config/keys.d.ts.map +1 -1
- package/config/keys.js +29 -6
- package/config/keys.js.map +1 -1
- package/config/resolve.d.ts +28 -20
- package/config/resolve.d.ts.map +1 -1
- package/config/resolve.js +74 -36
- package/config/resolve.js.map +1 -1
- package/local/seedpack/content.d.ts +3 -3
- package/local/seedpack/content.d.ts.map +1 -1
- package/local/seedpack/content.js +19 -13
- package/local/seedpack/content.js.map +1 -1
- package/package.json +5 -5
- package/resources/connect/connect.d.ts +4 -3
- package/resources/connect/connect.d.ts.map +1 -1
- package/resources/connect/connect.js +17 -5
- package/resources/connect/connect.js.map +1 -1
- package/resources/connect/oauth.d.ts +5 -2
- package/resources/connect/oauth.d.ts.map +1 -1
- package/resources/connect/oauth.js +5 -4
- package/resources/connect/oauth.js.map +1 -1
- package/src/auth/login.ts +54 -9
- package/src/auth/token.test.ts +69 -13
- package/src/auth/token.ts +46 -22
- package/src/client/client.test.ts +10 -2
- package/src/commands/apikey/index.ts +42 -11
- package/src/commands/auth/index.ts +52 -14
- package/src/commands/config/backend.test.ts +122 -0
- package/src/commands/config/backend.ts +195 -14
- package/src/commands/connect.test.ts +22 -4
- package/src/commands/connect.ts +37 -13
- package/src/commands/share.ts +36 -16
- package/src/config/config.test.ts +62 -6
- package/src/config/config.ts +165 -24
- package/src/config/index.ts +6 -0
- package/src/config/keys.test.ts +27 -4
- package/src/config/keys.ts +46 -9
- package/src/config/resolve.test.ts +135 -34
- package/src/config/resolve.ts +83 -36
- package/src/local/seedpack/content.ts +52 -21
- package/src/resources/connect/connect.integration.test.ts +79 -26
- package/src/resources/connect/connect.ts +72 -19
- package/src/resources/connect/oauth.test.ts +38 -12
- package/src/resources/connect/oauth.ts +27 -11
package/auth/login.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AA2BA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA8E3C"}
|
package/auth/login.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
//
|
|
10
10
|
// Progress goes to stderr; the command layer renders the final result.
|
|
11
11
|
import open from "open";
|
|
12
|
-
import { load, save } from "../config/index.js";
|
|
12
|
+
import { CLOUD_BACKEND_NAME, activeBackend, load, save, } from "../config/index.js";
|
|
13
13
|
import { CliExitError, ExitCode } from "../errors/index.js";
|
|
14
14
|
import { log } from "../logger.js";
|
|
15
15
|
import { buildAuthorizeUrl, CALLBACK_PATH, CALLBACK_PORT } from "./auth0.js";
|
|
@@ -18,6 +18,22 @@ import { challengeS256, generateState, generateVerifier } from "./pkce.js";
|
|
|
18
18
|
import { exchangeCode } from "./token.js";
|
|
19
19
|
const LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
|
|
20
20
|
export async function login() {
|
|
21
|
+
// Browser PKCE targets Stigmer Cloud only: the Auth0 coordinates are
|
|
22
|
+
// compiled in. From the local backend, login lands on (creating if
|
|
23
|
+
// needed) the reserved "cloud" entry — today's behavior in the named
|
|
24
|
+
// model. On a selfhost backend the flow refuses with the self-host
|
|
25
|
+
// credential story (API tokens) instead of silently writing cloud
|
|
26
|
+
// credentials the active backend would never send.
|
|
27
|
+
const preflight = load();
|
|
28
|
+
const { name, entry } = activeBackend(preflight);
|
|
29
|
+
if (entry?.type === "selfhost") {
|
|
30
|
+
throw new CliExitError(`backend "${name}" is self-hosted — browser login targets Stigmer Cloud only`, ExitCode.Usage, [
|
|
31
|
+
"Authenticate a self-hosted backend with an API token:",
|
|
32
|
+
" stigmer apikey create --name cli",
|
|
33
|
+
` stigmer config backend add ${name} --endpoint <host:port> --api-key <key>`,
|
|
34
|
+
"or switch first: stigmer config backend use cloud",
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
21
37
|
const verifier = generateVerifier();
|
|
22
38
|
const codeChallenge = challengeS256(verifier);
|
|
23
39
|
const state = generateState();
|
|
@@ -38,15 +54,24 @@ export async function login() {
|
|
|
38
54
|
if (callback.state !== state) {
|
|
39
55
|
throw new CliExitError("OAuth state mismatch — possible CSRF attack, aborting login", ExitCode.Auth);
|
|
40
56
|
}
|
|
41
|
-
const tokens = await exchangeCode({
|
|
57
|
+
const tokens = await exchangeCode({
|
|
58
|
+
code: callback.code,
|
|
59
|
+
codeVerifier: verifier,
|
|
60
|
+
});
|
|
42
61
|
const config = load();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
62
|
+
const active = activeBackend(config);
|
|
63
|
+
// A cloud-type backend keeps its own login; anything else (the local
|
|
64
|
+
// daemon) lands on the reserved "cloud" entry and switches to it.
|
|
65
|
+
const targetName = active.entry?.type === "cloud" ? active.name : CLOUD_BACKEND_NAME;
|
|
66
|
+
const backends = (config.backends ??= {});
|
|
67
|
+
backends[targetName] = {
|
|
68
|
+
...(backends[targetName] ?? { type: "cloud" }),
|
|
69
|
+
type: "cloud",
|
|
46
70
|
token: tokens.accessToken,
|
|
47
71
|
refresh_token: tokens.refreshToken,
|
|
48
72
|
token_expiry: tokens.expiresAt,
|
|
49
73
|
};
|
|
74
|
+
config.current_backend = targetName;
|
|
50
75
|
save(config);
|
|
51
76
|
}
|
|
52
77
|
finally {
|
package/auth/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,QAAQ;AACR,8DAA8D;AAC9D,kEAAkE;AAClE,8EAA8E;AAC9E,0EAA0E;AAC1E,4DAA4D;AAC5D,EAAE;AACF,uEAAuE;AAEvE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/auth/login.ts"],"names":[],"mappings":"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"}
|
package/auth/token.d.ts
CHANGED
|
@@ -18,12 +18,17 @@ export declare function refreshAccessToken(refreshToken: string): Promise<TokenS
|
|
|
18
18
|
/**
|
|
19
19
|
* A token provider for the backend client that keeps the access token fresh.
|
|
20
20
|
*
|
|
21
|
-
* Precedence and behavior, evaluated per request
|
|
21
|
+
* Precedence and behavior, evaluated per request against the ACTIVE named
|
|
22
|
+
* backend:
|
|
22
23
|
* 1. STIGMER_API_KEY (env / bridged --api-key) wins and is never refreshed.
|
|
23
|
-
* 2.
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
24
|
+
* 2. selfhost backends return their stored api_key (no refresh machinery —
|
|
25
|
+
* server-minted `stk_` tokens are opaque and live until deleted or
|
|
26
|
+
* expired server-side); local returns null (no auth).
|
|
27
|
+
* 3. A cloud backend's non-expired access token is returned as-is.
|
|
28
|
+
* 4. An expired token with a refresh token is refreshed; the new token,
|
|
29
|
+
* rotated refresh token, and expiry are persisted INTO THE ENTRY, then
|
|
30
|
+
* returned.
|
|
31
|
+
* 5. Otherwise the (possibly stale) token or null is returned, letting the
|
|
27
32
|
* server reject it so the error maps to a clear "please log in" exit.
|
|
28
33
|
*
|
|
29
34
|
* Closes over `config` so a refresh updates the same object the rest of the
|
package/auth/token.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,KAAK,MAAM,EAIZ,MAAM,oBAAoB,CAAC;AAI5B,yDAAyD;AACzD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAcD,yEAAyE;AACzE,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQpB;AAED,yDAAyD;AACzD,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,QAAQ,CAAC,CAMnB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAmB3E"}
|
package/auth/token.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Auth0 token operations: exchange an authorization code for tokens, refresh an
|
|
2
2
|
// expired access token, and expose a token provider that refreshes silently.
|
|
3
|
-
import { save } from "../config/index.js";
|
|
3
|
+
import { activeBackend, save, } from "../config/index.js";
|
|
4
4
|
import { CliExitError, ExitCode } from "../errors/index.js";
|
|
5
5
|
import { CLIENT_ID, callbackUrl, TOKEN_URL } from "./auth0.js";
|
|
6
6
|
// Refresh this many ms before the real expiry so an in-flight request never
|
|
@@ -27,12 +27,17 @@ export async function refreshAccessToken(refreshToken) {
|
|
|
27
27
|
/**
|
|
28
28
|
* A token provider for the backend client that keeps the access token fresh.
|
|
29
29
|
*
|
|
30
|
-
* Precedence and behavior, evaluated per request
|
|
30
|
+
* Precedence and behavior, evaluated per request against the ACTIVE named
|
|
31
|
+
* backend:
|
|
31
32
|
* 1. STIGMER_API_KEY (env / bridged --api-key) wins and is never refreshed.
|
|
32
|
-
* 2.
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
33
|
+
* 2. selfhost backends return their stored api_key (no refresh machinery —
|
|
34
|
+
* server-minted `stk_` tokens are opaque and live until deleted or
|
|
35
|
+
* expired server-side); local returns null (no auth).
|
|
36
|
+
* 3. A cloud backend's non-expired access token is returned as-is.
|
|
37
|
+
* 4. An expired token with a refresh token is refreshed; the new token,
|
|
38
|
+
* rotated refresh token, and expiry are persisted INTO THE ENTRY, then
|
|
39
|
+
* returned.
|
|
40
|
+
* 5. Otherwise the (possibly stale) token or null is returned, letting the
|
|
36
41
|
* server reject it so the error maps to a clear "please log in" exit.
|
|
37
42
|
*
|
|
38
43
|
* Closes over `config` so a refresh updates the same object the rest of the
|
|
@@ -43,18 +48,24 @@ export function createRefreshingTokenProvider(config) {
|
|
|
43
48
|
const envKey = process.env.STIGMER_API_KEY;
|
|
44
49
|
if (envKey !== undefined && envKey !== "")
|
|
45
50
|
return envKey;
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
48
|
-
return
|
|
51
|
+
const { entry } = activeBackend(config);
|
|
52
|
+
if (entry === undefined)
|
|
53
|
+
return null;
|
|
54
|
+
if (entry.type === "selfhost")
|
|
55
|
+
return entry.api_key ?? null;
|
|
56
|
+
if (entry.token === undefined || entry.token === "") {
|
|
57
|
+
return entry.refresh_token
|
|
58
|
+
? refreshAndPersist(config, entry, entry.refresh_token)
|
|
59
|
+
: null;
|
|
49
60
|
}
|
|
50
|
-
if (!isExpired(
|
|
51
|
-
return
|
|
52
|
-
if (
|
|
53
|
-
return
|
|
54
|
-
return refreshAndPersist(config,
|
|
61
|
+
if (!isExpired(entry.token_expiry))
|
|
62
|
+
return entry.token;
|
|
63
|
+
if (entry.refresh_token === undefined || entry.refresh_token === "")
|
|
64
|
+
return entry.token;
|
|
65
|
+
return refreshAndPersist(config, entry, entry.refresh_token);
|
|
55
66
|
};
|
|
56
67
|
}
|
|
57
|
-
async function refreshAndPersist(config, refreshToken) {
|
|
68
|
+
async function refreshAndPersist(config, entry, refreshToken) {
|
|
58
69
|
let next;
|
|
59
70
|
try {
|
|
60
71
|
next = await refreshAccessToken(refreshToken);
|
|
@@ -62,14 +73,12 @@ async function refreshAndPersist(config, refreshToken) {
|
|
|
62
73
|
catch {
|
|
63
74
|
// Refresh failed (revoked/expired refresh token). Fall back to the current
|
|
64
75
|
// token if any; the server will reject it and the user is prompted to log in.
|
|
65
|
-
return
|
|
76
|
+
return entry.token ?? null;
|
|
66
77
|
}
|
|
67
|
-
|
|
68
|
-
cloud.token = next.accessToken;
|
|
78
|
+
entry.token = next.accessToken;
|
|
69
79
|
if (next.refreshToken !== undefined)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
config.backend.cloud = cloud;
|
|
80
|
+
entry.refresh_token = next.refreshToken;
|
|
81
|
+
entry.token_expiry = next.expiresAt;
|
|
73
82
|
save(config);
|
|
74
83
|
return next.accessToken;
|
|
75
84
|
}
|
package/auth/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6EAA6E;AAG7E,OAAO,
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6EAA6E;AAG7E,OAAO,EAGL,aAAa,EACb,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW/D,4EAA4E;AAC5E,+BAA+B;AAC/B,MAAM,cAAc,GAAG,MAAM,CAAC;AAU9B,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAGlC;IACC,OAAO,SAAS,CAAC;QACf,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,YAAY,EAAE,WAAW,EAAE;QAC3B,aAAa,EAAE,MAAM,CAAC,YAAY;KACnC,CAAC,CAAC;AACL,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB;IAEpB,OAAO,SAAS,CAAC;QACf,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,OAAO,KAAK,IAA4B,EAAE;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC;QAEzD,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC;QAE5D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC,aAAa;gBACxB,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;gBACvD,CAAC,CAAC,IAAI,CAAC;QACX,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC;QACvD,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,EAAE;YACjE,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAc,EACd,KAAyB,EACzB,YAAoB;IAEpB,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,8EAA8E;QAC9E,OAAO,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC;IAC7B,CAAC;IACD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/B,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;QAAE,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;IAC7E,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,SAA6B;IAC9C,6EAA6E;IAC7E,sDAAsD;IACtD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,GAAG,cAAc,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAA4B;IACnD,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,YAAY,CACpB,8CAA+C,GAAa,CAAC,OAAO,EAAE,EACtE,QAAQ,CAAC,UAAU,CACpB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAuB,CAAC;IAC7E,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpD,MAAM,MAAM,GACV,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpE,MAAM,IAAI,YAAY,CAAC,0BAA0B,MAAM,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,YAAY;QAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;QAChC,SAAS,EACP,IAAI,CAAC,UAAU,KAAK,SAAS;YAC3B,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YAC7D,CAAC,CAAC,SAAS;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/apikey/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuBrD"}
|
package/commands/apikey/index.js
CHANGED
|
@@ -5,15 +5,17 @@
|
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { create } from "@bufbuild/protobuf";
|
|
7
7
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
8
|
-
import { ApiKeySchema } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
8
|
+
import { ApiKeySchema, } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
9
9
|
import { ApiKeyHashSchema } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/io_pb";
|
|
10
|
-
import { ensureAuthenticated, resolveContextOrganization } from "../../config/index.js";
|
|
11
|
-
import { renderProtoJson, renderProtoYaml } from "../../output/index.js";
|
|
10
|
+
import { ensureAuthenticated, resolveContextOrganization, } from "../../config/index.js";
|
|
11
|
+
import { renderProtoJson, renderProtoYaml, } from "../../output/index.js";
|
|
12
12
|
import { addReadFlags, readFormat } from "../shared.js";
|
|
13
13
|
import { parseExpiration } from "./duration.js";
|
|
14
14
|
const DEFAULT_EXPIRATION_DAYS = 90;
|
|
15
15
|
export function registerApiKey(program) {
|
|
16
|
-
const apikey = program
|
|
16
|
+
const apikey = program
|
|
17
|
+
.command("apikey")
|
|
18
|
+
.description("manage API keys for Stigmer Cloud authentication");
|
|
17
19
|
const create = apikey
|
|
18
20
|
.command("create")
|
|
19
21
|
.description("create a new API key")
|
|
@@ -55,7 +57,11 @@ async function runCreate(options) {
|
|
|
55
57
|
process.stdout.write(renderCreatedBanner(created));
|
|
56
58
|
}
|
|
57
59
|
async function runFingerprint(rawKey, options) {
|
|
58
|
-
|
|
60
|
+
// Base64URL without padding — the server's storage encoding (the Java
|
|
61
|
+
// ApiKeyHasher and the TS keymaterial module agree). This was hex until
|
|
62
|
+
// O3, which meant the computed hash could never match a stored key_hash
|
|
63
|
+
// and the lookup below always answered NotFound (gate ruling Q7).
|
|
64
|
+
const hash = createHash("sha256").update(rawKey).digest("base64url");
|
|
59
65
|
const { connectBackend } = await import("../../backend.js");
|
|
60
66
|
const client = connectBackend();
|
|
61
67
|
ensureAuthenticated(client.config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/apikey/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,+EAA+E;AAC/E,sEAAsE;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/apikey/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkCnD"}
|
package/commands/auth/index.js
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
//
|
|
3
3
|
// login is interactive (browser PKCE) and human-only; logout and whoami honor
|
|
4
4
|
// the standard mutating-output flags.
|
|
5
|
-
import { ensureAuthenticated, load, resolveContextOrganization, save } from "../../config/index.js";
|
|
6
|
-
import { CommandResult, renderResult } from "../../output/index.js";
|
|
5
|
+
import { activeBackend, ensureAuthenticated, load, resolveContextOrganization, save, } from "../../config/index.js";
|
|
6
|
+
import { CommandResult, renderResult, } from "../../output/index.js";
|
|
7
7
|
import { addResultFlags, resultFormat } from "../shared.js";
|
|
8
8
|
export function registerAuth(program) {
|
|
9
|
-
const auth = program
|
|
9
|
+
const auth = program
|
|
10
|
+
.command("auth")
|
|
11
|
+
.description("manage authentication with Stigmer Cloud");
|
|
10
12
|
auth
|
|
11
13
|
.command("login")
|
|
12
14
|
.description("log in to Stigmer Cloud via browser (PKCE OAuth)")
|
|
@@ -34,13 +36,22 @@ export function registerAuth(program) {
|
|
|
34
36
|
}
|
|
35
37
|
function runLogout() {
|
|
36
38
|
const config = load();
|
|
37
|
-
const
|
|
38
|
-
if (
|
|
39
|
+
const { name, entry } = activeBackend(config);
|
|
40
|
+
if (entry?.type === "selfhost") {
|
|
41
|
+
if (entry.api_key === undefined) {
|
|
42
|
+
return CommandResult.warning("No API key stored for this backend");
|
|
43
|
+
}
|
|
44
|
+
entry.api_key = undefined;
|
|
45
|
+
save(config);
|
|
46
|
+
return CommandResult.success(`Cleared the stored API key for backend "${name}"`);
|
|
47
|
+
}
|
|
48
|
+
if (entry === undefined ||
|
|
49
|
+
(entry.token === undefined && entry.refresh_token === undefined)) {
|
|
39
50
|
return CommandResult.warning("Not currently logged in").hint("Run 'stigmer auth login' to authenticate.");
|
|
40
51
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
52
|
+
entry.token = undefined;
|
|
53
|
+
entry.refresh_token = undefined;
|
|
54
|
+
entry.token_expiry = undefined;
|
|
44
55
|
save(config);
|
|
45
56
|
return CommandResult.success("Logged out from Stigmer Cloud").hint("Run 'stigmer auth login' to authenticate again.");
|
|
46
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,sCAAsC;AAGtC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,sCAAsC;AAGtC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,IAAI,EACJ,0BAA0B,EAC1B,IAAI,GACL,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,aAAa,EAEb,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACtD,MAAM,KAAK,EAAE,CAAC;QACd,YAAY,CACV,aAAa,CAAC,OAAO,CAAC,kCAAkC,CAAC;aACtD,IAAI,CAAC,+CAA+C,CAAC;aACrD,IAAI,CAAC,uBAAuB,CAAC,EAChC,OAAO,CACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,IAAI;SAChB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,CAAC,OAAoB,EAAE,EAAE;QAC/B,YAAY,CAAC,SAAS,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,MAAM,MAAM,GAAG,IAAI;SAChB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,OAAoB,EAAE,EAAE;QACrC,YAAY,CAAC,MAAM,SAAS,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IACL,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC;IACtB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,aAAa,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,CAAC;QACb,OAAO,aAAa,CAAC,OAAO,CAC1B,2CAA2C,IAAI,GAAG,CACnD,CAAC;IACJ,CAAC;IACD,IACE,KAAK,KAAK,SAAS;QACnB,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,EAChE,CAAC;QACD,OAAO,aAAa,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAC1D,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;IACxB,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,OAAO,aAAa,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,IAAI,CAChE,iDAAiD,CAClD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAEtC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;YAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YAClE,OAAO,CAAC,KAAK,CACX,WAAW,EACX,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,KAAK,CACX,cAAc,EACd,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CACT,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/commands/config/backend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/commands/config/backend.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyDzD"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
// `stigmer config backend status|set` —
|
|
2
|
-
|
|
1
|
+
// `stigmer config backend status|set|add|use|list|remove` — the named-backend
|
|
2
|
+
// surface (O3, 20260827.06; the kubectl-context model). `status` and
|
|
3
|
+
// `set <local|cloud>` predate named backends and stay as the simple view:
|
|
4
|
+
// set is sugar for `use` over the two reserved names.
|
|
5
|
+
import { CLOUD_BACKEND_NAME, LOCAL_BACKEND_NAME, activeBackend, activeBackendName, load, resolveEndpoint, save, } from "../../config/index.js";
|
|
3
6
|
import { UsageError } from "../../errors/index.js";
|
|
4
|
-
import { CommandResult, renderResult } from "../../output/index.js";
|
|
7
|
+
import { CommandResult, renderResult, } from "../../output/index.js";
|
|
5
8
|
import { addResultFlags, resultFormat } from "../shared.js";
|
|
6
9
|
const DEFAULT_CLOUD_ENDPOINT = "api.stigmer.ai:443";
|
|
7
10
|
export function addBackendCommands(backend) {
|
|
@@ -14,36 +17,155 @@ export function addBackendCommands(backend) {
|
|
|
14
17
|
addResultFlags(status);
|
|
15
18
|
const set = backend
|
|
16
19
|
.command("set <type>")
|
|
17
|
-
.description("
|
|
20
|
+
.description("switch between the reserved local and cloud backends")
|
|
18
21
|
.action((type, options) => {
|
|
19
22
|
renderResult(applySet(type), resultFormat(options));
|
|
20
23
|
});
|
|
21
24
|
addResultFlags(set);
|
|
25
|
+
const add = backend
|
|
26
|
+
.command("add <name>")
|
|
27
|
+
.description("add or update a named backend (self-hosted by default)")
|
|
28
|
+
.requiredOption("--endpoint <host:port>", "the server address, e.g. stigmer.example.com:443")
|
|
29
|
+
.option("--type <type>", "backend type: selfhost or cloud", "selfhost")
|
|
30
|
+
.option("--api-key <key>", "API token for a self-hosted backend (stigmer apikey create)")
|
|
31
|
+
.action((name, options) => {
|
|
32
|
+
renderResult(applyAdd(name, options), resultFormat(options));
|
|
33
|
+
});
|
|
34
|
+
addResultFlags(add);
|
|
35
|
+
const use = backend
|
|
36
|
+
.command("use <name>")
|
|
37
|
+
.description("switch the active backend")
|
|
38
|
+
.action((name, options) => {
|
|
39
|
+
renderResult(applyUse(name), resultFormat(options));
|
|
40
|
+
});
|
|
41
|
+
addResultFlags(use);
|
|
42
|
+
const list = backend
|
|
43
|
+
.command("list")
|
|
44
|
+
.description("list configured backends")
|
|
45
|
+
.action((options) => {
|
|
46
|
+
renderResult(buildList(load()), resultFormat(options));
|
|
47
|
+
});
|
|
48
|
+
addResultFlags(list);
|
|
49
|
+
const remove = backend
|
|
50
|
+
.command("remove <name>")
|
|
51
|
+
.description("remove a named backend")
|
|
52
|
+
.action((name, options) => {
|
|
53
|
+
renderResult(applyRemove(name), resultFormat(options));
|
|
54
|
+
});
|
|
55
|
+
addResultFlags(remove);
|
|
22
56
|
}
|
|
23
57
|
function buildStatus(config) {
|
|
58
|
+
const { name, entry } = activeBackend(config);
|
|
24
59
|
const result = CommandResult.success("Backend configuration");
|
|
25
|
-
const section = result
|
|
26
|
-
|
|
27
|
-
|
|
60
|
+
const section = result
|
|
61
|
+
.addSection("")
|
|
62
|
+
.field("Backend", name)
|
|
63
|
+
.field("Type", entry?.type ?? "local")
|
|
64
|
+
.field("Endpoint", resolveEndpoint(config));
|
|
65
|
+
if (entry?.type === "cloud") {
|
|
66
|
+
section.field("Auth", entry.token ? "Logged in" : "Not logged in");
|
|
67
|
+
}
|
|
68
|
+
if (entry?.type === "selfhost") {
|
|
69
|
+
section.field("Auth", entry.api_key
|
|
70
|
+
? "API key stored"
|
|
71
|
+
: "No credential (unauthenticated server, or STIGMER_API_KEY)");
|
|
28
72
|
}
|
|
29
73
|
return result;
|
|
30
74
|
}
|
|
31
75
|
function applySet(type) {
|
|
32
76
|
if (type !== "local" && type !== "cloud") {
|
|
33
|
-
throw new UsageError(`invalid backend type "${type}" (expected: local, cloud)`);
|
|
77
|
+
throw new UsageError(`invalid backend type "${type}" (expected: local, cloud — named backends switch with 'use')`);
|
|
34
78
|
}
|
|
35
79
|
const config = load();
|
|
36
|
-
config.backend.type = type;
|
|
37
80
|
if (type === "cloud") {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
81
|
+
const backends = (config.backends ??= {});
|
|
82
|
+
backends[CLOUD_BACKEND_NAME] ??= {
|
|
83
|
+
type: "cloud",
|
|
84
|
+
endpoint: DEFAULT_CLOUD_ENDPOINT,
|
|
85
|
+
};
|
|
86
|
+
config.current_backend = CLOUD_BACKEND_NAME;
|
|
41
87
|
save(config);
|
|
42
88
|
return CommandResult.success("Backend set to cloud")
|
|
43
89
|
.hint("Please authenticate:")
|
|
44
90
|
.hint(" stigmer auth login");
|
|
45
91
|
}
|
|
92
|
+
config.current_backend = LOCAL_BACKEND_NAME;
|
|
46
93
|
save(config);
|
|
47
94
|
return CommandResult.success("Backend set to local").hint("Make sure the Stigmer server is running.");
|
|
48
95
|
}
|
|
96
|
+
function applyAdd(name, options) {
|
|
97
|
+
if (name === LOCAL_BACKEND_NAME) {
|
|
98
|
+
throw new UsageError(`"${LOCAL_BACKEND_NAME}" is the managed local daemon — it cannot be redefined`);
|
|
99
|
+
}
|
|
100
|
+
const type = options.type ?? "selfhost";
|
|
101
|
+
if (type !== "selfhost" && type !== "cloud") {
|
|
102
|
+
throw new UsageError(`invalid backend type "${type}" (expected: selfhost, cloud)`);
|
|
103
|
+
}
|
|
104
|
+
const endpoint = options.endpoint ?? "";
|
|
105
|
+
if (endpoint === "") {
|
|
106
|
+
throw new UsageError("--endpoint is required");
|
|
107
|
+
}
|
|
108
|
+
const config = load();
|
|
109
|
+
const backends = (config.backends ??= {});
|
|
110
|
+
const existing = backends[name];
|
|
111
|
+
backends[name] = {
|
|
112
|
+
...existing,
|
|
113
|
+
type: type,
|
|
114
|
+
endpoint,
|
|
115
|
+
...(options.apiKey !== undefined ? { api_key: options.apiKey } : {}),
|
|
116
|
+
};
|
|
117
|
+
save(config);
|
|
118
|
+
const result = CommandResult.success(`Backend "${name}" ${existing !== undefined ? "updated" : "added"} (${type}, ${endpoint})`).hint(`Switch to it: stigmer config backend use ${name}`);
|
|
119
|
+
if (type === "selfhost" && backends[name].api_key === undefined) {
|
|
120
|
+
result.hint("No API key stored. For an authenticated server, mint one on that backend:");
|
|
121
|
+
result.hint(" stigmer apikey create --name cli");
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
function applyUse(name) {
|
|
126
|
+
const config = load();
|
|
127
|
+
if (name !== LOCAL_BACKEND_NAME && config.backends?.[name] === undefined) {
|
|
128
|
+
throw new UsageError(`unknown backend "${name}" (known: ${knownBackendNames(config).join(", ")})`);
|
|
129
|
+
}
|
|
130
|
+
config.current_backend = name;
|
|
131
|
+
save(config);
|
|
132
|
+
return CommandResult.success(`Switched to backend "${name}"`);
|
|
133
|
+
}
|
|
134
|
+
function buildList(config) {
|
|
135
|
+
const current = activeBackendName(config);
|
|
136
|
+
const result = CommandResult.success("Configured backends");
|
|
137
|
+
for (const name of knownBackendNames(config)) {
|
|
138
|
+
const entry = config.backends?.[name];
|
|
139
|
+
const marker = name === current ? " (current)" : "";
|
|
140
|
+
const section = result.addSection(`${name}${marker}`);
|
|
141
|
+
section.field("Type", entry?.type ?? "local");
|
|
142
|
+
section.field("Endpoint", entry?.endpoint ??
|
|
143
|
+
(entry?.type === "cloud" ? DEFAULT_CLOUD_ENDPOINT : "localhost:7234"));
|
|
144
|
+
if (entry?.type === "cloud") {
|
|
145
|
+
section.field("Auth", entry.token ? "Logged in" : "Not logged in");
|
|
146
|
+
}
|
|
147
|
+
else if (entry?.type === "selfhost") {
|
|
148
|
+
section.field("Auth", entry.api_key ? "API key stored" : "None");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
function applyRemove(name) {
|
|
154
|
+
if (name === LOCAL_BACKEND_NAME) {
|
|
155
|
+
throw new UsageError(`"${LOCAL_BACKEND_NAME}" is the managed local daemon — it cannot be removed`);
|
|
156
|
+
}
|
|
157
|
+
const config = load();
|
|
158
|
+
if (config.backends?.[name] === undefined) {
|
|
159
|
+
throw new UsageError(`unknown backend "${name}"`);
|
|
160
|
+
}
|
|
161
|
+
if (activeBackendName(config) === name) {
|
|
162
|
+
throw new UsageError(`backend "${name}" is the current backend — switch first: stigmer config backend use ${LOCAL_BACKEND_NAME}`);
|
|
163
|
+
}
|
|
164
|
+
delete config.backends[name];
|
|
165
|
+
save(config);
|
|
166
|
+
return CommandResult.success(`Removed backend "${name}"`);
|
|
167
|
+
}
|
|
168
|
+
function knownBackendNames(config) {
|
|
169
|
+
return [LOCAL_BACKEND_NAME, ...Object.keys(config.backends ?? {}).sort()];
|
|
170
|
+
}
|
|
49
171
|
//# sourceMappingURL=backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../src/commands/config/backend.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../src/commands/config/backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BtD"}
|
package/commands/connect.js
CHANGED
|
@@ -5,13 +5,15 @@
|
|
|
5
5
|
// Thin handler: resolve the client/org, delegate to resources/connect, render.
|
|
6
6
|
// Heavy modules (backend client, MCP SDK) are lazy-imported so `--help` stays
|
|
7
7
|
// fast (DD-001).
|
|
8
|
-
import { ensureAuthenticated, resolveOrganization } from "../config/index.js";
|
|
8
|
+
import { activeBackend, ensureAuthenticated, resolveConsoleURL, resolveOrganization, } from "../config/index.js";
|
|
9
9
|
import { UsageError } from "../errors/index.js";
|
|
10
10
|
import { shouldColorize } from "../output/style.js";
|
|
11
11
|
import { globalOrg } from "./shared.js";
|
|
12
12
|
const DEFAULT_TIMEOUT_SECONDS = 30;
|
|
13
13
|
export function registerConnect(program) {
|
|
14
|
-
const connect = program
|
|
14
|
+
const connect = program
|
|
15
|
+
.command("connect")
|
|
16
|
+
.description("connect to external services and discover capabilities");
|
|
15
17
|
connect
|
|
16
18
|
.command("mcp-server <slug-or-id>")
|
|
17
19
|
.description("connect to an MCP server and discover its tools")
|
|
@@ -55,7 +57,8 @@ async function runConnect(reference, options, command) {
|
|
|
55
57
|
pushTimeoutMs: timeoutIsExplicit ? timeoutMs : undefined,
|
|
56
58
|
dryRun: options.dryRun === true,
|
|
57
59
|
envOverrides: options.env,
|
|
58
|
-
|
|
60
|
+
consoleURL: resolveConsoleURL(client.config),
|
|
61
|
+
probeLocalConsole: activeBackend(client.config).entry === undefined,
|
|
59
62
|
interactive: process.stderr.isTTY === true,
|
|
60
63
|
});
|
|
61
64
|
const colorize = shouldColorize(process.stdout);
|
package/commands/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,4EAA4E;AAC5E,4DAA4D;AAC5D,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,iBAAiB;AAGjB,OAAO,
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,4EAA4E;AAC5E,4DAA4D;AAC5D,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,iBAAiB;AAGjB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQxC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,wDAAwD,CAAC,CAAC;IAEzE,OAAO;SACJ,OAAO,CAAC,yBAAyB,CAAC;SAClC,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CACL,qBAAqB,EACrB,wEAAwE;QACtE,0DAA0D,EAC5D,MAAM,CAAC,uBAAuB,CAAC,CAChC;SACA,MAAM,CACL,WAAW,EACX,6DAA6D,CAC9D;SACA,MAAM,CACL,mBAAmB,EACnB,sDAAsD,EACtD,CAAC,KAAa,EAAE,QAAkB,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,EAC3D,EAAE,CACH;SACA,MAAM,CAAC,CAAC,SAAiB,EAAE,OAAqB,EAAE,OAAgB,EAAE,EAAE,CACrE,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CACxC,CAAC;AACN,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,SAAiB,EACjB,OAAqB,EACrB,OAAgB;IAEhB,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,yEAAyE;IACzE,0EAA0E;IAC1E,oEAAoE;IACpE,kEAAkE;IAClE,sEAAsE;IACtE,MAAM,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC;IAC5E,MAAM,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,mBAAmB,EAAE,CAAC,GACvE,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,CAAC,eAAe,CAAC;QACvB,MAAM,CAAC,iCAAiC,CAAC;QACzC,MAAM,CAAC,iCAAiC,CAAC;KAC1C,CAAC,CAAC;IAEL,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnE,yEAAyE;IACzE,6EAA6E;IAC7E,4EAA4E;IAC5E,2EAA2E;IAC3E,sDAAsD;IACtD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,UAAU,CAClB,0BAA0B;YACxB,gBAAgB;YAChB,4CAA4C;YAC5C,mDAAmD,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE;QACpD,SAAS;QACT,GAAG;QACH,SAAS;QACT,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACxD,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI;QAC/B,YAAY,EAAE,OAAO,CAAC,GAAG;QACzB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,SAAS;QACnE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;KAC3C,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,mBAAmB,CACjB,MAAM,EACN,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,EAC3C,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,SAAS,YAAY,CAAC,GAAuB;IAC3C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,uBAAuB,GAAG,IAAI,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,UAAU,CAClB,sBAAsB,GAAG,iCAAiC,CAC3D,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC"}
|