@zivis/mcp 0.1.0-alpha.19 → 0.1.0-alpha.2
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/dist/api-client.d.ts +11 -11
- package/dist/api-client.js +36 -41
- package/dist/api-client.js.map +1 -1
- package/dist/auth/index.d.ts +5 -9
- package/dist/auth/index.js +17 -33
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/keychain.d.ts +5 -6
- package/dist/auth/keychain.js +45 -50
- package/dist/auth/keychain.js.map +1 -1
- package/dist/auth/oauth.d.ts +0 -18
- package/dist/auth/oauth.js +6 -55
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/sessions.d.ts +4 -5
- package/dist/auth/sessions.js +14 -20
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/token-refresh.d.ts +2 -2
- package/dist/auth/token-refresh.js +9 -42
- package/dist/auth/token-refresh.js.map +1 -1
- package/dist/cli.d.ts +15 -7
- package/dist/cli.js +904 -36
- package/dist/cli.js.map +1 -1
- package/dist/project-binding.d.ts +2 -19
- package/dist/project-binding.js +3 -57
- package/dist/project-binding.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +43 -114
- package/dist/server.js.map +1 -1
- package/dist/tools/check-project.d.ts +7 -7
- package/dist/tools/check-project.js +95 -127
- package/dist/tools/check-project.js.map +1 -1
- package/dist/tools/check-repo-trust.d.ts +10 -4
- package/dist/tools/check-repo-trust.js +27 -56
- package/dist/tools/check-repo-trust.js.map +1 -1
- package/dist/tools/enterprise/list-agents.d.ts +1 -1
- package/dist/tools/enterprise/manage-finding.d.ts +1 -1
- package/dist/tools/get-finding-details.d.ts +10 -4
- package/dist/tools/get-finding-details.js +10 -28
- package/dist/tools/get-finding-details.js.map +1 -1
- package/dist/tools/get-findings.d.ts +10 -4
- package/dist/tools/get-findings.js +23 -44
- package/dist/tools/get-findings.js.map +1 -1
- package/dist/tools/list-applications.d.ts +1 -1
- package/dist/tools/list-scans.d.ts +10 -4
- package/dist/tools/list-scans.js +21 -55
- package/dist/tools/list-scans.js.map +1 -1
- package/dist/tools/list-test-scenarios.d.ts +10 -4
- package/dist/tools/list-test-scenarios.js +13 -41
- package/dist/tools/list-test-scenarios.js.map +1 -1
- package/dist/tools/local-scan.d.ts +1 -1
- package/dist/tools/open-in-ide.d.ts +1 -1
- package/dist/tools/setup-red-team-target.d.ts +12 -6
- package/dist/tools/setup-red-team-target.js +20 -51
- package/dist/tools/setup-red-team-target.js.map +1 -1
- package/dist/tools/triage-finding.d.ts +10 -4
- package/dist/tools/triage-finding.js +21 -30
- package/dist/tools/triage-finding.js.map +1 -1
- package/dist/types.d.ts +2 -42
- package/dist/types.js +23 -29
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/next-steps.d.ts +0 -57
- package/dist/lib/next-steps.js +0 -45
- package/dist/lib/next-steps.js.map +0 -1
- package/dist/prompts/audit-dependencies.d.ts +0 -10
- package/dist/prompts/audit-dependencies.js +0 -56
- package/dist/prompts/audit-dependencies.js.map +0 -1
- package/dist/prompts/getting-started.d.ts +0 -12
- package/dist/prompts/getting-started.js +0 -48
- package/dist/prompts/getting-started.js.map +0 -1
- package/dist/prompts/index.d.ts +0 -14
- package/dist/prompts/index.js +0 -25
- package/dist/prompts/index.js.map +0 -1
- package/dist/prompts/prep-for-launch.d.ts +0 -9
- package/dist/prompts/prep-for-launch.js +0 -62
- package/dist/prompts/prep-for-launch.js.map +0 -1
- package/dist/prompts/secure-my-app.d.ts +0 -9
- package/dist/prompts/secure-my-app.js +0 -70
- package/dist/prompts/secure-my-app.js.map +0 -1
- package/dist/prompts/weekly-check.d.ts +0 -9
- package/dist/prompts/weekly-check.js +0 -48
- package/dist/prompts/weekly-check.js.map +0 -1
- package/dist/tools/enterprise/get-campaign.d.ts +0 -27
- package/dist/tools/enterprise/get-campaign.js +0 -31
- package/dist/tools/enterprise/get-campaign.js.map +0 -1
- package/dist/tools/enterprise/list-attack-scenarios.d.ts +0 -29
- package/dist/tools/enterprise/list-attack-scenarios.js +0 -69
- package/dist/tools/enterprise/list-attack-scenarios.js.map +0 -1
- package/dist/tools/enterprise/list-attack-step-library-tests.d.ts +0 -29
- package/dist/tools/enterprise/list-attack-step-library-tests.js +0 -61
- package/dist/tools/enterprise/list-attack-step-library-tests.js.map +0 -1
- package/dist/tools/enterprise/list-campaigns.d.ts +0 -37
- package/dist/tools/enterprise/list-campaigns.js +0 -60
- package/dist/tools/enterprise/list-campaigns.js.map +0 -1
- package/dist/tools/enterprise/list-threat-model-review-items.d.ts +0 -35
- package/dist/tools/enterprise/list-threat-model-review-items.js +0 -60
- package/dist/tools/enterprise/list-threat-model-review-items.js.map +0 -1
- package/dist/tools/enterprise/list-threat-model-versions.d.ts +0 -29
- package/dist/tools/enterprise/list-threat-model-versions.js +0 -60
- package/dist/tools/enterprise/list-threat-model-versions.js.map +0 -1
- package/dist/tools/enterprise/manage-campaign-agent-instance.d.ts +0 -42
- package/dist/tools/enterprise/manage-campaign-agent-instance.js +0 -68
- package/dist/tools/enterprise/manage-campaign-agent-instance.js.map +0 -1
- package/dist/tools/enterprise/manage-campaign-target.d.ts +0 -44
- package/dist/tools/enterprise/manage-campaign-target.js +0 -70
- package/dist/tools/enterprise/manage-campaign-target.js.map +0 -1
- package/dist/tools/enterprise/manage-campaign.d.ts +0 -62
- package/dist/tools/enterprise/manage-campaign.js +0 -114
- package/dist/tools/enterprise/manage-campaign.js.map +0 -1
- package/dist/tools/enterprise/manage-threat-model-analysis.d.ts +0 -52
- package/dist/tools/enterprise/manage-threat-model-analysis.js +0 -92
- package/dist/tools/enterprise/manage-threat-model-analysis.js.map +0 -1
- package/dist/tools/enterprise/manage-threat-model-review.d.ts +0 -47
- package/dist/tools/enterprise/manage-threat-model-review.js +0 -82
- package/dist/tools/enterprise/manage-threat-model-review.js.map +0 -1
- package/dist/tools/get-application-auth-config.d.ts +0 -27
- package/dist/tools/get-application-auth-config.js +0 -44
- package/dist/tools/get-application-auth-config.js.map +0 -1
- package/dist/tools/get-started.d.ts +0 -28
- package/dist/tools/get-started.js +0 -364
- package/dist/tools/get-started.js.map +0 -1
- package/dist/tools/manage-application.d.ts +0 -72
- package/dist/tools/manage-application.js +0 -138
- package/dist/tools/manage-application.js.map +0 -1
- package/dist/tools/manage-endpoint-lifecycle.d.ts +0 -90
- package/dist/tools/manage-endpoint-lifecycle.js +0 -191
- package/dist/tools/manage-endpoint-lifecycle.js.map +0 -1
package/dist/auth/oauth.js
CHANGED
|
@@ -19,7 +19,7 @@ import { URL } from "node:url";
|
|
|
19
19
|
import open from "open";
|
|
20
20
|
import { keychainStore, getSessionAccount } from "./keychain.js";
|
|
21
21
|
import { decodeJwtPayload } from "./jwt.js";
|
|
22
|
-
import { DEFAULT_CONFIG
|
|
22
|
+
import { DEFAULT_CONFIG } from "../types.js";
|
|
23
23
|
const LOGIN_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
|
|
24
24
|
function generatePKCE() {
|
|
25
25
|
const verifier = crypto.randomBytes(32).toString("base64url");
|
|
@@ -169,18 +169,6 @@ async function exchangeCodeForTokens(config, code, codeVerifier) {
|
|
|
169
169
|
throw new Error(errorMsg);
|
|
170
170
|
}
|
|
171
171
|
const data = (await response.json());
|
|
172
|
-
if (!data.refresh_token) {
|
|
173
|
-
// This means WorkOS isn't issuing refresh tokens for this client.
|
|
174
|
-
// Most likely cause: the OAuth client in the WorkOS dashboard doesn't have
|
|
175
|
-
// "Refresh Tokens" enabled, or offline_access scope was rejected.
|
|
176
|
-
// Without a refresh token the user will be logged out after every access token expiry.
|
|
177
|
-
console.error("[zivis] WARNING: WorkOS did not return a refresh_token. " +
|
|
178
|
-
"Verify the OAuth client has Refresh Tokens / offline_access enabled in the WorkOS dashboard. " +
|
|
179
|
-
"Without this, sessions will expire and require manual re-login.");
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
console.error("[zivis] Token exchange complete — refresh_token received, session will auto-renew.");
|
|
183
|
-
}
|
|
184
172
|
return {
|
|
185
173
|
access_token: data.access_token,
|
|
186
174
|
refresh_token: data.refresh_token,
|
|
@@ -201,8 +189,7 @@ export async function login(config = DEFAULT_CONFIG, session, organizationId, op
|
|
|
201
189
|
const orgLabel = opts.orgName
|
|
202
190
|
? `${opts.orgName} (${organizationId})`
|
|
203
191
|
: organizationId;
|
|
204
|
-
const
|
|
205
|
-
const sessionLabel = displaySession ? ` as session "${displaySession}"` : "";
|
|
192
|
+
const sessionLabel = session ? ` as session "${session}"` : "";
|
|
206
193
|
console.error("");
|
|
207
194
|
console.error(`[zivis] About to authenticate to org: ${orgLabel}${sessionLabel}`);
|
|
208
195
|
const rl = readline.createInterface({
|
|
@@ -224,45 +211,9 @@ export async function login(config = DEFAULT_CONFIG, session, organizationId, op
|
|
|
224
211
|
}
|
|
225
212
|
// Start callback server before opening browser
|
|
226
213
|
const codePromise = startCallbackServer(config.callbackPort, state);
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
console.error(` ${authUrl}`);
|
|
231
|
-
console.error("");
|
|
232
|
-
console.error("[zivis] Waiting for login...");
|
|
233
|
-
}
|
|
234
|
-
else if (opts.incognito) {
|
|
235
|
-
let opened = false;
|
|
236
|
-
// Try Chrome incognito, then Firefox private, then fall back to printing URL
|
|
237
|
-
for (const app of [
|
|
238
|
-
{ name: "google chrome", args: ["--incognito"] },
|
|
239
|
-
{ name: "chromium", args: ["--incognito"] },
|
|
240
|
-
{ name: "firefox", args: ["-private-window"] },
|
|
241
|
-
]) {
|
|
242
|
-
try {
|
|
243
|
-
await open(authUrl, { app: { name: app.name, arguments: [authUrl, ...app.args] } });
|
|
244
|
-
console.error(`[zivis] Opened private window in ${app.name} — waiting for login...`);
|
|
245
|
-
opened = true;
|
|
246
|
-
break;
|
|
247
|
-
}
|
|
248
|
-
catch {
|
|
249
|
-
// browser not found, try next
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
if (!opened) {
|
|
253
|
-
console.error("[zivis] Could not open an incognito window automatically.");
|
|
254
|
-
console.error("[zivis] Paste this URL into a private/incognito browser window:");
|
|
255
|
-
console.error("");
|
|
256
|
-
console.error(` ${authUrl}`);
|
|
257
|
-
console.error("");
|
|
258
|
-
console.error("[zivis] Waiting for login...");
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
console.error("[zivis] Opening browser for authentication...");
|
|
263
|
-
await open(authUrl);
|
|
264
|
-
console.error("[zivis] Waiting for login...");
|
|
265
|
-
}
|
|
214
|
+
console.error("[zivis] Opening browser for authentication...");
|
|
215
|
+
await open(authUrl);
|
|
216
|
+
console.error("[zivis] Waiting for login...");
|
|
266
217
|
// Wait for the authorization code
|
|
267
218
|
const code = await codePromise;
|
|
268
219
|
// Exchange code for tokens
|
|
@@ -284,7 +235,7 @@ export async function login(config = DEFAULT_CONFIG, session, organizationId, op
|
|
|
284
235
|
console.error(`[zivis] \u2713 JWT org_id verified: ${jwtOrgId}`);
|
|
285
236
|
}
|
|
286
237
|
// Store in keychain (session-qualified key for multi-tenant isolation)
|
|
287
|
-
await keychainStore(getSessionAccount(session), JSON.stringify(tokens)
|
|
238
|
+
await keychainStore(getSessionAccount(session), JSON.stringify(tokens));
|
|
288
239
|
return tokens;
|
|
289
240
|
}
|
|
290
241
|
//# sourceMappingURL=oauth.js.map
|
package/dist/auth/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/sessions.d.ts
CHANGED
|
@@ -7,23 +7,22 @@
|
|
|
7
7
|
* Session index file: ~/.config/{configDir}/sessions.json
|
|
8
8
|
*/
|
|
9
9
|
import type { SessionIndex, SessionInfo } from "../types.js";
|
|
10
|
-
import { type CredentialStorage } from "../types.js";
|
|
11
10
|
/**
|
|
12
11
|
* Load the session index from disk.
|
|
13
12
|
* Returns an empty object if the file doesn't exist.
|
|
14
13
|
*/
|
|
15
|
-
export declare function loadSessionIndex(
|
|
14
|
+
export declare function loadSessionIndex(): Promise<SessionIndex>;
|
|
16
15
|
/**
|
|
17
16
|
* Add or update a session entry in the index.
|
|
18
17
|
*/
|
|
19
|
-
export declare function saveSessionEntry(name: string, email: string
|
|
18
|
+
export declare function saveSessionEntry(name: string, email: string): Promise<void>;
|
|
20
19
|
/**
|
|
21
20
|
* Remove a session entry from the index.
|
|
22
21
|
*/
|
|
23
|
-
export declare function removeSessionEntry(name: string
|
|
22
|
+
export declare function removeSessionEntry(name: string): Promise<void>;
|
|
24
23
|
/**
|
|
25
24
|
* List all sessions with their metadata.
|
|
26
25
|
*/
|
|
27
|
-
export declare function listSessions(
|
|
26
|
+
export declare function listSessions(): Promise<Array<{
|
|
28
27
|
name: string;
|
|
29
28
|
} & SessionInfo>>;
|
package/dist/auth/sessions.js
CHANGED
|
@@ -10,14 +10,8 @@ import * as fs from "node:fs/promises";
|
|
|
10
10
|
import * as path from "node:path";
|
|
11
11
|
import * as os from "node:os";
|
|
12
12
|
import { ENV_CONFIG } from "../types.js";
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
keychainPrefix: ENV_CONFIG.keychainPrefix,
|
|
16
|
-
configDir: ENV_CONFIG.configDir,
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
function getSessionIndexPath(storage) {
|
|
20
|
-
const { configDir } = resolveSessionStorage(storage);
|
|
13
|
+
function getSessionIndexPath() {
|
|
14
|
+
const configDir = ENV_CONFIG.configDir;
|
|
21
15
|
const base = process.platform === "win32"
|
|
22
16
|
? process.env.APPDATA || os.homedir()
|
|
23
17
|
: path.join(os.homedir(), ".config");
|
|
@@ -27,9 +21,9 @@ function getSessionIndexPath(storage) {
|
|
|
27
21
|
* Load the session index from disk.
|
|
28
22
|
* Returns an empty object if the file doesn't exist.
|
|
29
23
|
*/
|
|
30
|
-
export async function loadSessionIndex(
|
|
24
|
+
export async function loadSessionIndex() {
|
|
31
25
|
try {
|
|
32
|
-
const raw = await fs.readFile(getSessionIndexPath(
|
|
26
|
+
const raw = await fs.readFile(getSessionIndexPath(), "utf8");
|
|
33
27
|
return JSON.parse(raw);
|
|
34
28
|
}
|
|
35
29
|
catch {
|
|
@@ -39,8 +33,8 @@ export async function loadSessionIndex(storage) {
|
|
|
39
33
|
/**
|
|
40
34
|
* Save the full session index to disk.
|
|
41
35
|
*/
|
|
42
|
-
async function saveSessionIndex(index
|
|
43
|
-
const filePath = getSessionIndexPath(
|
|
36
|
+
async function saveSessionIndex(index) {
|
|
37
|
+
const filePath = getSessionIndexPath();
|
|
44
38
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
45
39
|
await fs.writeFile(filePath, JSON.stringify(index, null, 2) + "\n", {
|
|
46
40
|
mode: 0o600,
|
|
@@ -49,27 +43,27 @@ async function saveSessionIndex(index, storage) {
|
|
|
49
43
|
/**
|
|
50
44
|
* Add or update a session entry in the index.
|
|
51
45
|
*/
|
|
52
|
-
export async function saveSessionEntry(name, email
|
|
53
|
-
const index = await loadSessionIndex(
|
|
46
|
+
export async function saveSessionEntry(name, email) {
|
|
47
|
+
const index = await loadSessionIndex();
|
|
54
48
|
index[name] = {
|
|
55
49
|
email,
|
|
56
50
|
createdAt: index[name]?.createdAt || new Date().toISOString(),
|
|
57
51
|
};
|
|
58
|
-
await saveSessionIndex(index
|
|
52
|
+
await saveSessionIndex(index);
|
|
59
53
|
}
|
|
60
54
|
/**
|
|
61
55
|
* Remove a session entry from the index.
|
|
62
56
|
*/
|
|
63
|
-
export async function removeSessionEntry(name
|
|
64
|
-
const index = await loadSessionIndex(
|
|
57
|
+
export async function removeSessionEntry(name) {
|
|
58
|
+
const index = await loadSessionIndex();
|
|
65
59
|
delete index[name];
|
|
66
|
-
await saveSessionIndex(index
|
|
60
|
+
await saveSessionIndex(index);
|
|
67
61
|
}
|
|
68
62
|
/**
|
|
69
63
|
* List all sessions with their metadata.
|
|
70
64
|
*/
|
|
71
|
-
export async function listSessions(
|
|
72
|
-
const index = await loadSessionIndex(
|
|
65
|
+
export async function listSessions() {
|
|
66
|
+
const index = await loadSessionIndex();
|
|
73
67
|
return Object.entries(index).map(([name, info]) => ({ name, ...info }));
|
|
74
68
|
}
|
|
75
69
|
//# sourceMappingURL=sessions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/auth/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/auth/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,SAAS,mBAAmB;IAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvC,MAAM,IAAI,GACR,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE;QACrC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,KAAmB;IACjD,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAClE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,KAAa;IAEb,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,KAAK;QACL,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC9D,CAAC;IACF,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAGhC,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* refresh token. Checks expiry with a 5-minute buffer to avoid
|
|
6
6
|
* mid-request expirations.
|
|
7
7
|
*/
|
|
8
|
-
import type { OAuthTokens, ZivisConfig
|
|
8
|
+
import type { OAuthTokens, ZivisConfig } from "../types.js";
|
|
9
9
|
/**
|
|
10
10
|
* Load OAuth tokens from keychain
|
|
11
11
|
* @param session - Optional named session for multi-tenant isolation
|
|
12
12
|
*/
|
|
13
|
-
export declare function loadTokens(session?: string
|
|
13
|
+
export declare function loadTokens(session?: string): Promise<OAuthTokens | null>;
|
|
14
14
|
/**
|
|
15
15
|
* Check if the access token is still valid (with 5-min buffer)
|
|
16
16
|
*/
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
* mid-request expirations.
|
|
7
7
|
*/
|
|
8
8
|
import { keychainRead, keychainStore, keychainDelete, getSessionAccount } from "./keychain.js";
|
|
9
|
-
import { DEFAULT_CONFIG
|
|
10
|
-
const EXPIRY_BUFFER_MS =
|
|
9
|
+
import { DEFAULT_CONFIG } from "../types.js";
|
|
10
|
+
const EXPIRY_BUFFER_MS = 5 * 60 * 1000; // 5 minutes
|
|
11
11
|
/**
|
|
12
12
|
* Load OAuth tokens from keychain
|
|
13
13
|
* @param session - Optional named session for multi-tenant isolation
|
|
14
14
|
*/
|
|
15
|
-
export async function loadTokens(session
|
|
16
|
-
const raw = await keychainRead(getSessionAccount(session)
|
|
15
|
+
export async function loadTokens(session) {
|
|
16
|
+
const raw = await keychainRead(getSessionAccount(session));
|
|
17
17
|
if (!raw)
|
|
18
18
|
return null;
|
|
19
19
|
try {
|
|
@@ -29,16 +29,6 @@ export async function loadTokens(session, storage) {
|
|
|
29
29
|
export function isTokenValid(tokens) {
|
|
30
30
|
return tokens.expires_at > Date.now() + EXPIRY_BUFFER_MS;
|
|
31
31
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Errors that indicate the refresh token itself is permanently invalid.
|
|
34
|
-
* On these we should clear stored credentials and force re-login.
|
|
35
|
-
* Anything else (network error, server error) is transient — keep credentials.
|
|
36
|
-
*/
|
|
37
|
-
const FATAL_REFRESH_ERRORS = new Set([
|
|
38
|
-
"invalid_grant", // refresh token expired or revoked
|
|
39
|
-
"invalid_client", // client ID mismatch
|
|
40
|
-
"unauthorized_client", // client not allowed to use refresh tokens
|
|
41
|
-
]);
|
|
42
32
|
/**
|
|
43
33
|
* Refresh the access token using the refresh token
|
|
44
34
|
*/
|
|
@@ -57,12 +47,7 @@ async function refreshAccessToken(refreshToken, config) {
|
|
|
57
47
|
});
|
|
58
48
|
if (!response.ok) {
|
|
59
49
|
const error = (await response.json().catch(() => ({})));
|
|
60
|
-
|
|
61
|
-
const errorMsg = error.error_description || errorCode || "Token refresh failed";
|
|
62
|
-
// Attach the OAuth error code so the caller can decide whether to clear credentials
|
|
63
|
-
const err = new Error(errorMsg);
|
|
64
|
-
err.oauthErrorCode = errorCode;
|
|
65
|
-
throw err;
|
|
50
|
+
throw new Error(error.error_description || error.error || "Token refresh failed");
|
|
66
51
|
}
|
|
67
52
|
const data = (await response.json());
|
|
68
53
|
return {
|
|
@@ -82,43 +67,25 @@ async function refreshAccessToken(refreshToken, config) {
|
|
|
82
67
|
export async function getValidAccessToken(config = DEFAULT_CONFIG) {
|
|
83
68
|
const session = config.session;
|
|
84
69
|
const account = getSessionAccount(session);
|
|
85
|
-
const
|
|
86
|
-
const tokens = await loadTokens(session, st);
|
|
70
|
+
const tokens = await loadTokens(session);
|
|
87
71
|
if (!tokens) {
|
|
88
72
|
return null;
|
|
89
73
|
}
|
|
90
74
|
if (isTokenValid(tokens)) {
|
|
91
75
|
return tokens.access_token;
|
|
92
76
|
}
|
|
93
|
-
const expiresInSec = Math.round((tokens.expires_at - Date.now()) / 1000);
|
|
94
77
|
if (tokens.refresh_token) {
|
|
95
|
-
console.error(`[zivis] Access token expiring in ${expiresInSec}s — refreshing silently...`);
|
|
96
78
|
try {
|
|
97
79
|
const newTokens = await refreshAccessToken(tokens.refresh_token, config);
|
|
98
|
-
await keychainStore(account, JSON.stringify(newTokens)
|
|
99
|
-
const newExpiresInMin = Math.round((newTokens.expires_at - Date.now()) / 1000 / 60);
|
|
100
|
-
console.error(`[zivis] Token refreshed successfully — new token valid for ~${newExpiresInMin}m`);
|
|
80
|
+
await keychainStore(account, JSON.stringify(newTokens));
|
|
101
81
|
return newTokens.access_token;
|
|
102
82
|
}
|
|
103
83
|
catch (err) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
console.error(`[zivis] Token refresh failed (${oauthCode ?? "network/server error"}):`, err instanceof Error ? err.message : err);
|
|
107
|
-
if (isFatal) {
|
|
108
|
-
// Refresh token is permanently invalid — clear credentials so the user
|
|
109
|
-
// gets a clear "please re-login" message rather than silent failures.
|
|
110
|
-
console.error("[zivis] Refresh token revoked or expired — clearing stored credentials. Run: zivis auth login");
|
|
111
|
-
await keychainDelete(account, st);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
// Transient failure (network, 5xx, timeout) — keep credentials so the
|
|
115
|
-
// next request can retry. Don't log the user out over a bad network.
|
|
116
|
-
console.error("[zivis] Transient refresh error — keeping stored credentials, will retry on next request.");
|
|
117
|
-
}
|
|
84
|
+
console.error("[zivis] Token refresh failed:", err instanceof Error ? err.message : err);
|
|
85
|
+
await keychainDelete(account);
|
|
118
86
|
return null;
|
|
119
87
|
}
|
|
120
88
|
}
|
|
121
|
-
console.error(`[zivis] Access token expired ${Math.abs(expiresInSec)}s ago and no refresh token stored — re-login required`);
|
|
122
89
|
return null;
|
|
123
90
|
}
|
|
124
91
|
//# sourceMappingURL=token-refresh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-refresh.js","sourceRoot":"","sources":["../../src/auth/token-refresh.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE/F,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"token-refresh.js","sourceRoot":"","sources":["../../src/auth/token-refresh.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* CLI Commands
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Handles all user-facing CLI interactions:
|
|
5
|
+
* - login: OAuth PKCE browser login (with optional --session for multi-tenant)
|
|
6
|
+
* - configure: API key setup (interactive or --api-key flag)
|
|
7
|
+
* - status: Show auth state, org, plan usage
|
|
8
|
+
* - logout: Clear stored credentials (with optional --session)
|
|
9
|
+
* - sessions: List all stored sessions
|
|
10
|
+
* - serve: Start MCP server (called by IDE, not by user directly)
|
|
9
11
|
*/
|
|
10
12
|
import type { ZivisConfig } from "./types.js";
|
|
13
|
+
/**
|
|
14
|
+
* Parse CLI arguments into a command and options
|
|
15
|
+
*/
|
|
11
16
|
export declare function parseArgs(argv: string[]): {
|
|
12
17
|
command: string;
|
|
13
18
|
options: Record<string, string>;
|
|
14
19
|
};
|
|
15
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Run the appropriate CLI command
|
|
22
|
+
*/
|
|
23
|
+
export declare function runCli(command: string, options: Record<string, string>, config?: ZivisConfig): Promise<void>;
|