@ai21/gateway 0.5.3 → 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 +23 -8
- package/dist/args.d.ts +13 -4
- package/dist/args.js +43 -14
- package/dist/args.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +6 -1
- package/dist/config.js +19 -1
- package/dist/config.js.map +1 -1
- package/dist/login/contract.d.ts +34 -34
- package/dist/login/contract.js +56 -43
- package/dist/login/contract.js.map +1 -1
- package/dist/login/credentials.d.ts +34 -0
- package/dist/login/credentials.js +98 -0
- package/dist/login/credentials.js.map +1 -0
- package/dist/login/loopback.d.ts +8 -10
- package/dist/login/loopback.js +78 -63
- package/dist/login/loopback.js.map +1 -1
- package/dist/login/session.d.ts +16 -17
- package/dist/login/session.js +34 -48
- package/dist/login/session.js.map +1 -1
- package/dist/login/tokens.d.ts +16 -0
- package/dist/login/tokens.js +78 -0
- package/dist/login/tokens.js.map +1 -0
- package/dist/login/workspaces.d.ts +17 -0
- package/dist/login/workspaces.js +65 -0
- package/dist/login/workspaces.js.map +1 -0
- package/dist/report.d.ts +5 -1
- package/dist/report.js +11 -0
- package/dist/report.js.map +1 -1
- package/dist/router.js +82 -43
- package/dist/router.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/login/session.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/login/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class DeadCredentialError extends Error {
|
|
2
|
+
}
|
|
3
|
+
export interface ExchangeResult {
|
|
4
|
+
readonly idToken: string;
|
|
5
|
+
/** Google may hand back a new refresh token; whatever it returns is what to store. */
|
|
6
|
+
readonly refreshToken: string;
|
|
7
|
+
}
|
|
8
|
+
export type FetchLike = (url: string, init: RequestInit) => Promise<Response>;
|
|
9
|
+
/**
|
|
10
|
+
* Exchanges a refresh token for an ID token.
|
|
11
|
+
*
|
|
12
|
+
* Throws `DeadCredentialError` when the session is genuinely gone — the caller should
|
|
13
|
+
* tell the user to sign in again — and a plain `Error` for anything transient, which is
|
|
14
|
+
* worth retrying rather than acting on.
|
|
15
|
+
*/
|
|
16
|
+
export declare function exchangeRefreshToken(refreshToken: string, firebaseApiKey: string, fetchImpl?: FetchLike): Promise<ExchangeResult>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning the stored refresh token into the hour-long ID token identity checks. One call
|
|
3
|
+
* to Google's secure token service, and this module's entire network surface.
|
|
4
|
+
*
|
|
5
|
+
* Nothing here verifies a token: the CLI is the bearer, not the audience.
|
|
6
|
+
*/
|
|
7
|
+
const TOKEN_ENDPOINT = "https://securetoken.googleapis.com/v1/token";
|
|
8
|
+
const TIMEOUT_MS = 20_000;
|
|
9
|
+
/**
|
|
10
|
+
* Firebase's names for "this refresh token will never work again". Anything else — a 5xx,
|
|
11
|
+
* a timeout, a DNS blip — is transient, and signing the user out over it would be wrong.
|
|
12
|
+
* A wrong API key is deliberately absent: that is our misconfiguration, not a dead session.
|
|
13
|
+
*/
|
|
14
|
+
const DEAD_CREDENTIAL_ERRORS = ["TOKEN_EXPIRED", "INVALID_REFRESH_TOKEN", "USER_DISABLED", "USER_NOT_FOUND"];
|
|
15
|
+
export class DeadCredentialError extends Error {
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Exchanges a refresh token for an ID token.
|
|
19
|
+
*
|
|
20
|
+
* Throws `DeadCredentialError` when the session is genuinely gone — the caller should
|
|
21
|
+
* tell the user to sign in again — and a plain `Error` for anything transient, which is
|
|
22
|
+
* worth retrying rather than acting on.
|
|
23
|
+
*/
|
|
24
|
+
export async function exchangeRefreshToken(refreshToken, firebaseApiKey, fetchImpl = fetch) {
|
|
25
|
+
const url = `${TOKEN_ENDPOINT}?key=${encodeURIComponent(firebaseApiKey)}`;
|
|
26
|
+
const body = new URLSearchParams({ grant_type: "refresh_token", refresh_token: refreshToken });
|
|
27
|
+
let response;
|
|
28
|
+
try {
|
|
29
|
+
response = await fetchImpl(url, {
|
|
30
|
+
method: "POST",
|
|
31
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
32
|
+
body: body.toString(),
|
|
33
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
// A transport failure is never a dead credential.
|
|
38
|
+
throw new Error(`could not reach Google's token service: ${err instanceof Error ? err.message : String(err)}`);
|
|
39
|
+
}
|
|
40
|
+
const text = await response.text();
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const message = errorMessage(text);
|
|
43
|
+
if (DEAD_CREDENTIAL_ERRORS.some((code) => message.includes(code))) {
|
|
44
|
+
throw new DeadCredentialError("your session has expired — run `ai21-gateway login` again");
|
|
45
|
+
}
|
|
46
|
+
throw new Error(`the token service refused the request (${response.status})${message === "" ? "" : `: ${message}`}`);
|
|
47
|
+
}
|
|
48
|
+
let parsed;
|
|
49
|
+
try {
|
|
50
|
+
parsed = JSON.parse(text);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
throw new Error("the token service returned a body that is not JSON");
|
|
54
|
+
}
|
|
55
|
+
const payload = parsed;
|
|
56
|
+
const idToken = payload["id_token"];
|
|
57
|
+
const rotated = payload["refresh_token"];
|
|
58
|
+
if (typeof idToken !== "string" || idToken === "") {
|
|
59
|
+
throw new Error("the token service returned no id_token");
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
idToken,
|
|
63
|
+
// Falls back to the token we sent: a response without one means it was not rotated.
|
|
64
|
+
refreshToken: typeof rotated === "string" && rotated !== "" ? rotated : refreshToken,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** Pulls Firebase's error code out of its body, without assuming the shape. */
|
|
68
|
+
function errorMessage(text) {
|
|
69
|
+
try {
|
|
70
|
+
const parsed = JSON.parse(text);
|
|
71
|
+
const message = parsed.error?.message;
|
|
72
|
+
return typeof message === "string" ? message : "";
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return "";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/login/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The caller's AI21 workspaces, so `login` can say which one it signed in to.
|
|
3
|
+
*
|
|
4
|
+
* Identity shares the gateway's origin (`api.<domain>/identity`), so the URL is derived
|
|
5
|
+
* from it. Authenticated with the Firebase ID token in a `firebase-token` header —
|
|
6
|
+
* identity does not read `Authorization: Bearer`.
|
|
7
|
+
*/
|
|
8
|
+
import type { FetchLike } from "./tokens.js";
|
|
9
|
+
export interface Workspace {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
}
|
|
13
|
+
/** `https://api.example.com/gateway` → `https://api.example.com`. */
|
|
14
|
+
export declare function identityBase(gatewayUrl: string): string | undefined;
|
|
15
|
+
/** Empty rather than throwing on anything unexpected: a completed login must not be lost
|
|
16
|
+
* to a failed listing. */
|
|
17
|
+
export declare function fetchWorkspaces(gatewayUrl: string, idToken: string, fetchImpl?: FetchLike): Promise<readonly Workspace[]>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const WORKSPACES_PATH = "/identity/workspaces";
|
|
2
|
+
const TIMEOUT_MS = 20_000;
|
|
3
|
+
/* A legacy per-user default given to every account at signup; offering it would make the
|
|
4
|
+
* real workspace the second choice. */
|
|
5
|
+
const LEGACY_PERSONAL_TYPE = "personal";
|
|
6
|
+
/** `https://api.example.com/gateway` → `https://api.example.com`. */
|
|
7
|
+
export function identityBase(gatewayUrl) {
|
|
8
|
+
try {
|
|
9
|
+
return new URL(gatewayUrl).origin;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Empty rather than throwing on anything unexpected: a completed login must not be lost
|
|
16
|
+
* to a failed listing. */
|
|
17
|
+
export async function fetchWorkspaces(gatewayUrl, idToken, fetchImpl = fetch) {
|
|
18
|
+
const base = identityBase(gatewayUrl);
|
|
19
|
+
if (base === undefined)
|
|
20
|
+
return [];
|
|
21
|
+
let response;
|
|
22
|
+
try {
|
|
23
|
+
response = await fetchImpl(`${base}${WORKSPACES_PATH}`, {
|
|
24
|
+
method: "GET",
|
|
25
|
+
headers: { "firebase-token": idToken },
|
|
26
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
if (!response.ok)
|
|
33
|
+
return [];
|
|
34
|
+
try {
|
|
35
|
+
return parse(JSON.parse(await response.text()));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
/* A 200 that is not JSON — an IAP interstitial, say. */
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function parse(payload) {
|
|
43
|
+
// Identity answers `{ workspaces: [...] }`; a bare array is tolerated.
|
|
44
|
+
const list = Array.isArray(payload) ? payload : (payload.workspaces ?? []);
|
|
45
|
+
if (!Array.isArray(list))
|
|
46
|
+
return [];
|
|
47
|
+
const found = [];
|
|
48
|
+
for (const entry of list) {
|
|
49
|
+
if (typeof entry !== "object" || entry === null)
|
|
50
|
+
continue;
|
|
51
|
+
const row = entry;
|
|
52
|
+
const id = row["id"] ?? row["workspace_id"] ?? row["pid"];
|
|
53
|
+
const name = row["name"];
|
|
54
|
+
if (typeof id !== "string" || id === "")
|
|
55
|
+
continue;
|
|
56
|
+
if (typeof row["type"] === "string" && row["type"].toLowerCase() === LEGACY_PERSONAL_TYPE)
|
|
57
|
+
continue;
|
|
58
|
+
// Stripped for the same reason as the callback's strings: this gets printed.
|
|
59
|
+
// eslint-disable-next-line no-control-regex
|
|
60
|
+
const label = typeof name === "string" ? name.replace(/[\u0000-\u001F\u007F]/g, "") : "";
|
|
61
|
+
found.push({ id, name: label === "" ? id : label });
|
|
62
|
+
}
|
|
63
|
+
return found;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/login/workspaces.ts"],"names":[],"mappings":"AASA,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAC/C,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B;uCACuC;AACvC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAOxC,qEAAqE;AACrE,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;2BAC2B;AAC3B,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,OAAe,EACf,YAAuB,KAAK;IAE5B,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAElC,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,GAAG,eAAe,EAAE,EAAE;YACtD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE;YACtC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,OAAgB;IAC7B,uEAAuE;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAoC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAEzG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAE1D,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE;YAAE,SAAS;QAElD,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,oBAAoB;YAAE,SAAS;QAEpG,6EAA6E;QAC7E,4CAA4C;QAC5C,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/report.d.ts
CHANGED
|
@@ -24,13 +24,17 @@ export declare const EXIT_FOR_REVERT: Record<RevertOutcome["kind"], number>;
|
|
|
24
24
|
export declare function reportRevert(outcome: RevertOutcome, json: boolean): RunResult;
|
|
25
25
|
export interface Warning {
|
|
26
26
|
/** Stable identifier, so `--json` consumers match on this and not on prose. */
|
|
27
|
-
readonly code: "anthropic-api-key-set" | "non-production-gateway" | "insecure-gateway" | "verification-skipped" | "verification-failed";
|
|
27
|
+
readonly code: "anthropic-api-key-set" | "shadowed-by-local-config" | "non-production-gateway" | "insecure-gateway" | "verification-skipped" | "verification-failed";
|
|
28
28
|
readonly message: string;
|
|
29
29
|
}
|
|
30
30
|
export interface WarningContext {
|
|
31
31
|
readonly urls: ResolvedUrls;
|
|
32
32
|
/** The process environment, injected so tests need not mutate the real one. */
|
|
33
33
|
readonly processEnv: Record<string, string | undefined>;
|
|
34
|
+
readonly localOverride?: {
|
|
35
|
+
readonly path: string;
|
|
36
|
+
readonly agentId?: string;
|
|
37
|
+
} | undefined;
|
|
34
38
|
}
|
|
35
39
|
/**
|
|
36
40
|
* Not failures, but things that make a correct config look broken later — which is
|
package/dist/report.js
CHANGED
|
@@ -100,6 +100,17 @@ export function collectWarnings(ctx) {
|
|
|
100
100
|
message: "ANTHROPIC_API_KEY is set in your environment. It overrides the credential Claude Code manages and can cause 401s through the gateway — unset it if requests start failing.",
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
|
+
if (ctx.localOverride !== undefined) {
|
|
104
|
+
const { path, agentId } = ctx.localOverride;
|
|
105
|
+
warnings.push({
|
|
106
|
+
code: "shadowed-by-local-config",
|
|
107
|
+
message: `${path} also sets Claude Code's env, and it is read after this file — so it wins. ` +
|
|
108
|
+
(agentId === undefined
|
|
109
|
+
? "Requests will not use the agent configured here."
|
|
110
|
+
: `Requests will report as '${agentId}', not the agent configured here.`) +
|
|
111
|
+
" Remove its env block, or move your override into this file.",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
103
114
|
if (isInsecureGateway(ctx.urls.gateway)) {
|
|
104
115
|
warnings.push({
|
|
105
116
|
code: "insecure-gateway",
|
package/dist/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
package/dist/router.js
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
* Verb dispatch. Handlers return streams and an exit code rather than writing or
|
|
3
3
|
* exiting, so a command can be asserted end to end without spawning a process.
|
|
4
4
|
*/
|
|
5
|
-
import { containsControlCharacters
|
|
6
|
-
import { resolvePaths, writeConfig } from "./config.js";
|
|
5
|
+
import { containsControlCharacters } from "./args.js";
|
|
6
|
+
import { resolvePaths, shadowingLocalConfig, writeConfig, } from "./config.js";
|
|
7
7
|
import { promptForKey } from "./prompt.js";
|
|
8
8
|
import { EXIT_FOR, collectWarnings, report, reportRevert } from "./report.js";
|
|
9
9
|
import { revertConfig } from "./revert.js";
|
|
10
|
+
import { save as saveCredential } from "./login/credentials.js";
|
|
10
11
|
import { runLogin } from "./login/session.js";
|
|
12
|
+
import { DeadCredentialError, exchangeRefreshToken } from "./login/tokens.js";
|
|
13
|
+
import { fetchWorkspaces } from "./login/workspaces.js";
|
|
11
14
|
import { EXIT } from "./result.js";
|
|
12
15
|
import { AI21_KEY_PLACEHOLDER, ccSettings, ccSettingsEnv } from "./snippets.js";
|
|
13
16
|
import { readVersion } from "./cli.js";
|
|
@@ -177,7 +180,11 @@ async function writeAndReport(args, ctx, inputs) {
|
|
|
177
180
|
const verification = await verifyWrite(args, ctx, outcome, inputs);
|
|
178
181
|
const result = report({
|
|
179
182
|
outcome,
|
|
180
|
-
warnings: collectWarnings({
|
|
183
|
+
warnings: collectWarnings({
|
|
184
|
+
urls: args.urls,
|
|
185
|
+
processEnv: ctx.processEnv,
|
|
186
|
+
localOverride: shadowingLocalConfig(paths),
|
|
187
|
+
}),
|
|
181
188
|
json: args.json,
|
|
182
189
|
detail: detailFor(outcome),
|
|
183
190
|
urls: args.urls,
|
|
@@ -192,62 +199,94 @@ async function install(args, ctx) {
|
|
|
192
199
|
return (await writeAndReport(args, ctx, { ...snippetInputs(args), ai21Key: resolved.key })).result;
|
|
193
200
|
}
|
|
194
201
|
/**
|
|
195
|
-
* `login`: the browser
|
|
196
|
-
*
|
|
202
|
+
* `login`: sign in through the browser and store the session. Writes no repo config —
|
|
203
|
+
* that is `install`'s job. Agent creation from the stored session lands next.
|
|
197
204
|
*/
|
|
198
205
|
async function login(args, ctx) {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
206
|
+
if (!(ctx.prompt.isTTY ?? ctx.prompt.input.isTTY ?? false)) {
|
|
207
|
+
/* Needs a human to compare the code, and a personal credential does not belong in CI. */
|
|
208
|
+
return {
|
|
209
|
+
code: EXIT.USAGE,
|
|
210
|
+
out: "",
|
|
211
|
+
err: "`login` needs an interactive terminal. In CI, pass --key with an AI21 API key instead.\n",
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
const outcome = await runLogin(args.urls, ctx.login, { notify: ctx.notify });
|
|
203
215
|
switch (outcome.kind) {
|
|
204
|
-
case "credentials": {
|
|
205
|
-
/* Overwrites without asking, unlike a hand-typed `install`.
|
|
206
|
-
*
|
|
207
|
-
* The conflict guard exists to catch someone clobbering a config they had
|
|
208
|
-
* forgotten about. That premise does not hold here: the reader asked the
|
|
209
|
-
* dashboard to connect this repo and ran the command it printed, so replacing
|
|
210
|
-
* whatever is there IS the request. The previous file is still backed up, and
|
|
211
|
-
* `uninstall --from-backup` still restores it.
|
|
212
|
-
*
|
|
213
|
-
* Refusing was also a dead end. Every handoff mints a fresh key, so
|
|
214
|
-
* ANTHROPIC_CUSTOM_HEADERS always differs from what is on disk and the guard
|
|
215
|
-
* always fired — and its advice, "re-run with --yes", cannot be followed: the
|
|
216
|
-
* page latches after one delivery, so the same code will never be sent again.
|
|
217
|
-
* The reader had to go back and spend another one-time key to get past it. */
|
|
218
|
-
const { result, verification } = await writeAndReport({ ...args, yes: true }, ctx, {
|
|
219
|
-
gatewayUrl: args.urls.gateway,
|
|
220
|
-
agentId: outcome.agentId,
|
|
221
|
-
ai21Key: outcome.ai21Key,
|
|
222
|
-
userId: args.userId,
|
|
223
|
-
});
|
|
224
|
-
// Only once the gateway has actually answered: sending someone to the dashboard
|
|
225
|
-
// to admire a setup that does not work would be worse than not sending them.
|
|
226
|
-
if (result.code === EXIT.OK && verification?.kind === "passed" && outcome.workspaceId !== undefined) {
|
|
227
|
-
const dashboard = dashboardUrl(args.urls, outcome.workspaceId);
|
|
228
|
-
ctx.login.openBrowser(dashboard);
|
|
229
|
-
ctx.notify(`Verified. Opening the dashboard: ${dashboard}`);
|
|
230
|
-
}
|
|
231
|
-
return result;
|
|
232
|
-
}
|
|
233
216
|
case "timeout":
|
|
234
217
|
return {
|
|
235
218
|
code: EXIT.LOGIN_INCOMPLETE,
|
|
236
219
|
out: "",
|
|
237
|
-
err:
|
|
220
|
+
err: "Timed out waiting for the sign-in to complete. Nothing was stored.\nRun `ai21-gateway login` again.\n",
|
|
238
221
|
};
|
|
239
|
-
case "
|
|
240
|
-
// Refusing beats writing: this is remote input that failed validation, and
|
|
241
|
-
// the reason is never the value itself.
|
|
222
|
+
case "declined":
|
|
242
223
|
return {
|
|
243
224
|
code: EXIT.LOGIN_INCOMPLETE,
|
|
244
225
|
out: "",
|
|
245
|
-
err: `
|
|
226
|
+
err: `Sign-in was not completed: ${outcome.reason}. Nothing was stored.\n`,
|
|
246
227
|
};
|
|
247
228
|
case "failed":
|
|
248
229
|
return { code: EXIT.INTERNAL, out: "", err: `Login could not start: ${outcome.reason}.\n` };
|
|
230
|
+
case "credential":
|
|
231
|
+
return storeSession(args, ctx, outcome.credential);
|
|
249
232
|
}
|
|
250
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Spends the credential once before storing it, so a session that cannot mint a token is
|
|
236
|
+
* reported now rather than at the start of someone's next command. That exchange is a
|
|
237
|
+
* real refresh, so it can rotate the token — and what gets stored has to be what the
|
|
238
|
+
* exchange ended with.
|
|
239
|
+
*/
|
|
240
|
+
async function storeSession(args, ctx, credential) {
|
|
241
|
+
let exchanged;
|
|
242
|
+
try {
|
|
243
|
+
exchanged = await exchangeRefreshToken(credential.refreshToken, credential.firebaseApiKey, ctx.login.fetchImpl);
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
return {
|
|
247
|
+
code: EXIT.LOGIN_INCOMPLETE,
|
|
248
|
+
out: "",
|
|
249
|
+
/* `DeadCredentialError`'s own advice is "run login again", which is what the reader
|
|
250
|
+
* is already doing — so the caller words this one, not the thrower. */
|
|
251
|
+
err: `The credential the browser returned could not be exchanged: ${err instanceof DeadCredentialError
|
|
252
|
+
? "the token service rejected it"
|
|
253
|
+
: err instanceof Error
|
|
254
|
+
? err.message
|
|
255
|
+
: String(err)}\nNothing was stored. Try signing in again.\n`,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
// Best effort: a login that succeeded must not be lost to a listing.
|
|
259
|
+
const available = await fetchWorkspaces(args.urls.gateway, exchanged.idToken, ctx.login.fetchImpl);
|
|
260
|
+
const chosen = credential.workspaceId ?? (available.length === 1 ? available[0]?.id : undefined);
|
|
261
|
+
const named = available.find((w) => w.id === chosen);
|
|
262
|
+
try {
|
|
263
|
+
saveCredential(args.urls.gateway, {
|
|
264
|
+
refreshToken: exchanged.refreshToken,
|
|
265
|
+
firebaseApiKey: credential.firebaseApiKey,
|
|
266
|
+
projectId: credential.projectId,
|
|
267
|
+
userId: credential.userId,
|
|
268
|
+
userEmail: credential.userEmail,
|
|
269
|
+
obtainedAt: new Date().toISOString(),
|
|
270
|
+
...(chosen === undefined ? {} : { workspaceId: chosen }),
|
|
271
|
+
}, ctx.paths);
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
return {
|
|
275
|
+
code: EXIT.INTERNAL,
|
|
276
|
+
out: "",
|
|
277
|
+
err: `Signed in, but the session could not be stored: ${err instanceof Error ? err.message : String(err)}\n`,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
/* Only named when the listing corroborates it: printing a bare id — which is what an
|
|
281
|
+
* unlisted workspace leaves, e.g. a legacy `personal` one that workspaces.ts filters —
|
|
282
|
+
* reads as a glitch rather than as information. */
|
|
283
|
+
const where = named === undefined ? "" : `\n workspace: ${named.name}`;
|
|
284
|
+
return {
|
|
285
|
+
code: EXIT.OK,
|
|
286
|
+
out: `Signed in as ${credential.userEmail}.${where}\n`,
|
|
287
|
+
err: "",
|
|
288
|
+
};
|
|
289
|
+
}
|
|
251
290
|
/** `uninstall`: hand the resolved paths to the reverter and report what it did. */
|
|
252
291
|
function uninstall(args, ctx) {
|
|
253
292
|
const outcome = revertConfig(resolvePaths(args.target, ctx.paths, args.client), {
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAmB,yBAAyB,EAAE,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai21/gateway",
|
|
3
3
|
"//version": "Placeholder. The source of truth is the Artifact Registry — CI sets this from NODE_PACKAGE_VERSION at publish time (see the Semantic Release user guide).",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"description": "One command to point a local coding agent at the AI21 Intelligent Gateway",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|