@zivis/mcp 0.1.0-alpha.9 → 0.1.5
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/LICENSE +201 -0
- package/README.md +19 -0
- package/dist/api-client.d.ts +1 -31
- package/dist/api-client.js +26 -66
- package/dist/auth/index.d.ts +1 -22
- package/dist/auth/index.js +15 -46
- package/dist/auth/jwt.d.ts +0 -16
- package/dist/auth/jwt.js +0 -13
- package/dist/auth/keychain.d.ts +6 -32
- package/dist/auth/keychain.js +83 -114
- package/dist/auth/oauth.d.ts +1 -42
- package/dist/auth/oauth.js +22 -64
- package/dist/auth/sessions.d.ts +5 -25
- package/dist/auth/sessions.js +20 -39
- package/dist/auth/token-refresh.d.ts +2 -22
- package/dist/auth/token-refresh.js +12 -47
- package/dist/cli.d.ts +1 -18
- package/dist/cli.js +30 -908
- package/dist/index.d.ts +0 -6
- package/dist/index.js +0 -7
- package/dist/lib/inspect-cache.d.ts +10 -0
- package/dist/lib/inspect-cache.js +75 -0
- package/dist/lib/next-steps.d.ts +27 -0
- package/dist/lib/next-steps.js +21 -0
- package/dist/matcher/ast-eval.d.ts +8 -0
- package/dist/matcher/ast-eval.js +95 -0
- package/dist/matcher/finding.d.ts +55 -0
- package/dist/matcher/finding.js +1 -0
- package/dist/matcher/index.d.ts +8 -0
- package/dist/matcher/index.js +202 -0
- package/dist/matcher/inference-candidates.d.ts +26 -0
- package/dist/matcher/inference-candidates.js +81 -0
- package/dist/matcher/walker.d.ts +7 -0
- package/dist/matcher/walker.js +71 -0
- package/dist/pattern-pack/index.d.ts +125 -0
- package/dist/pattern-pack/index.js +189 -0
- package/dist/pattern-packs/zivis-public-0.2.0/capsules/agents/privilege-separation.yaml +224 -0
- package/dist/pattern-packs/zivis-public-0.2.0/capsules/prompting/self-consistency-no-isolation.yaml +237 -0
- package/dist/pattern-packs/zivis-public-0.2.0/capsules/retrieval/context-injection-no-validator.yaml +348 -0
- package/dist/pattern-packs/zivis-public-0.2.0/capsules/security/late-org-filter.yaml +266 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/external_validator_on_facts.yaml +37 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/fact_validator_present.yaml +68 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/human_approval_gate.yaml +44 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/langgraph_state_machine_with_per_node_tools.yaml +35 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/per_sample_retrieval_diversification.yaml +38 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/prisma_extension_or_middleware_attaching_org_filter.yaml +31 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/row_level_security_policy.yaml +37 -0
- package/dist/pattern-packs/zivis-public-0.2.0/controls/source_attribution_present.yaml +58 -0
- package/dist/pattern-packs/zivis-public-0.2.0/manifest.json +167 -0
- package/dist/pattern-packs/zivis-public-0.2.0/prompts/agents/privilege-separation/identify.md +54 -0
- package/dist/pattern-packs/zivis-public-0.2.0/prompts/prompting/self-consistency-no-isolation/identify.md +60 -0
- package/dist/pattern-packs/zivis-public-0.2.0/prompts/retrieval/context-injection-no-validator/identify.md +109 -0
- package/dist/pattern-packs/zivis-public-0.2.0/prompts/security/late-org-filter/identify.md +78 -0
- package/dist/project-binding.d.ts +2 -19
- package/dist/project-binding.js +38 -21
- package/dist/prompts/audit-dependencies.d.ts +2 -0
- package/dist/prompts/audit-dependencies.js +47 -0
- package/dist/prompts/getting-started.d.ts +2 -0
- package/dist/prompts/getting-started.js +37 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.js +6 -0
- package/dist/resolve-application-id.d.ts +0 -4
- package/dist/resolve-application-id.js +0 -5
- package/dist/sanitize.d.ts +1 -21
- package/dist/sanitize.js +7 -41
- package/dist/server.d.ts +1 -13
- package/dist/server.js +134 -253
- package/dist/tools/artifacts.d.ts +76 -0
- package/dist/tools/artifacts.js +178 -0
- package/dist/tools/check-project.d.ts +5 -18
- package/dist/tools/check-project.js +120 -111
- package/dist/tools/check-repo-trust.d.ts +4 -19
- package/dist/tools/check-repo-trust.js +56 -47
- package/dist/tools/create-diagram.d.ts +0 -5
- package/dist/tools/create-diagram.js +0 -10
- package/dist/tools/create-document.d.ts +0 -5
- package/dist/tools/create-document.js +3 -9
- package/dist/tools/create-finding.d.ts +85 -0
- package/dist/tools/create-finding.js +136 -0
- package/dist/tools/delete-finding.d.ts +19 -0
- package/dist/tools/delete-finding.js +36 -0
- package/dist/tools/discover-local-infra.d.ts +0 -10
- package/dist/tools/discover-local-infra.js +3 -73
- package/dist/tools/enterprise/get-org-zat.d.ts +0 -5
- package/dist/tools/enterprise/get-org-zat.js +0 -6
- package/dist/tools/enterprise/get-threat-model.d.ts +1 -8
- package/dist/tools/enterprise/get-threat-model.js +9 -31
- package/dist/tools/enterprise/list-attack-scenarios.d.ts +24 -0
- package/dist/tools/enterprise/list-attack-scenarios.js +63 -0
- package/dist/tools/enterprise/list-threat-models.d.ts +1 -6
- package/dist/tools/enterprise/list-threat-models.js +1 -9
- package/dist/tools/enterprise/manage-actor.d.ts +2 -7
- package/dist/tools/enterprise/manage-actor.js +13 -7
- package/dist/tools/enterprise/manage-attack-scenario.d.ts +1 -6
- package/dist/tools/enterprise/manage-attack-scenario.js +12 -7
- package/dist/tools/enterprise/manage-data-asset.d.ts +2 -7
- package/dist/tools/enterprise/manage-data-asset.js +16 -7
- package/dist/tools/enterprise/manage-security-control.d.ts +1 -6
- package/dist/tools/enterprise/manage-security-control.js +17 -7
- package/dist/tools/explain-signal-for-diff.d.ts +34 -0
- package/dist/tools/explain-signal-for-diff.js +75 -0
- package/dist/tools/generate-diagram.d.ts +0 -6
- package/dist/tools/generate-diagram.js +21 -13
- package/dist/tools/get-application-overview.d.ts +0 -5
- package/dist/tools/get-application-overview.js +0 -6
- package/dist/tools/get-application.d.ts +0 -5
- package/dist/tools/get-application.js +0 -6
- package/dist/tools/get-diagram.d.ts +0 -5
- package/dist/tools/get-diagram.js +1 -11
- package/dist/tools/get-document.d.ts +0 -5
- package/dist/tools/get-document.js +0 -6
- package/dist/tools/get-oss-zat.d.ts +0 -5
- package/dist/tools/get-oss-zat.js +0 -7
- package/dist/tools/get-signal.d.ts +24 -0
- package/dist/tools/get-signal.js +75 -0
- package/dist/tools/get-started.d.ts +18 -0
- package/dist/tools/get-started.js +470 -0
- package/dist/tools/get-trust-keys.d.ts +0 -5
- package/dist/tools/get-trust-keys.js +0 -6
- package/dist/tools/import-openapi-endpoints.d.ts +0 -5
- package/dist/tools/import-openapi-endpoints.js +0 -6
- package/dist/tools/inspect-zat.d.ts +0 -5
- package/dist/tools/inspect-zat.js +0 -19
- package/dist/tools/inspect.d.ts +21 -0
- package/dist/tools/inspect.js +222 -0
- package/dist/tools/list-applications.d.ts +1 -6
- package/dist/tools/list-applications.js +0 -6
- package/dist/tools/list-diagrams.d.ts +0 -5
- package/dist/tools/list-diagrams.js +0 -6
- package/dist/tools/list-documents.d.ts +0 -5
- package/dist/tools/list-documents.js +0 -6
- package/dist/tools/list-endpoints.d.ts +1 -6
- package/dist/tools/list-endpoints.js +0 -6
- package/dist/tools/list-signals.d.ts +37 -0
- package/dist/tools/list-signals.js +83 -0
- package/dist/tools/manage-application.d.ts +64 -0
- package/dist/tools/manage-application.js +129 -0
- package/dist/tools/manage-diagram.d.ts +0 -5
- package/dist/tools/manage-diagram.js +0 -16
- package/dist/tools/manage-endpoint-lifecycle.d.ts +80 -0
- package/dist/tools/manage-endpoint-lifecycle.js +180 -0
- package/dist/tools/open-in-ide.d.ts +2 -14
- package/dist/tools/open-in-ide.js +0 -13
- package/dist/tools/review-change.d.ts +34 -0
- package/dist/tools/review-change.js +93 -0
- package/dist/tools/security-review.d.ts +0 -16
- package/dist/tools/security-review.js +63 -77
- package/dist/tools/threat-get-capsule.d.ts +15 -0
- package/dist/tools/threat-get-capsule.js +53 -0
- package/dist/tools/threat-get-inference-prompt.d.ts +15 -0
- package/dist/tools/threat-get-inference-prompt.js +73 -0
- package/dist/tools/threat-list-relevant-capsules.d.ts +17 -0
- package/dist/tools/threat-list-relevant-capsules.js +158 -0
- package/dist/tools/threat-run-matcher.d.ts +17 -0
- package/dist/tools/threat-run-matcher.js +145 -0
- package/dist/tools/update-document.d.ts +0 -5
- package/dist/tools/update-document.js +3 -9
- package/dist/tools/update-endpoint.d.ts +1 -6
- package/dist/tools/update-endpoint.js +0 -7
- package/dist/tools/update-finding.d.ts +61 -0
- package/dist/tools/update-finding.js +80 -0
- package/dist/tools/update-mermaid-source.d.ts +0 -13
- package/dist/tools/update-mermaid-source.js +0 -14
- package/dist/tools/verify-trust-mark.d.ts +0 -5
- package/dist/tools/verify-trust-mark.js +0 -6
- package/dist/types.d.ts +13 -13
- package/dist/types.js +22 -28
- package/package.json +27 -5
- package/dist/api-client.js.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/jwt.js.map +0 -1
- package/dist/auth/keychain.js.map +0 -1
- package/dist/auth/oauth.js.map +0 -1
- package/dist/auth/sessions.js.map +0 -1
- package/dist/auth/token-refresh.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/project-binding.js.map +0 -1
- package/dist/resolve-application-id.js.map +0 -1
- package/dist/sanitize.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/tools/check-project.js.map +0 -1
- package/dist/tools/check-repo-trust.js.map +0 -1
- package/dist/tools/create-diagram.js.map +0 -1
- package/dist/tools/create-document.js.map +0 -1
- package/dist/tools/discover-local-infra.js.map +0 -1
- package/dist/tools/enterprise/capture-evidence.d.ts +0 -54
- package/dist/tools/enterprise/capture-evidence.js +0 -72
- package/dist/tools/enterprise/capture-evidence.js.map +0 -1
- package/dist/tools/enterprise/create-report-ticket.d.ts +0 -34
- package/dist/tools/enterprise/create-report-ticket.js +0 -44
- package/dist/tools/enterprise/create-report-ticket.js.map +0 -1
- package/dist/tools/enterprise/end-pentest-session.d.ts +0 -33
- package/dist/tools/enterprise/end-pentest-session.js +0 -42
- package/dist/tools/enterprise/end-pentest-session.js.map +0 -1
- package/dist/tools/enterprise/generate-report.d.ts +0 -55
- package/dist/tools/enterprise/generate-report.js +0 -111
- package/dist/tools/enterprise/generate-report.js.map +0 -1
- package/dist/tools/enterprise/get-org-zat.js.map +0 -1
- package/dist/tools/enterprise/get-report-status.d.ts +0 -27
- package/dist/tools/enterprise/get-report-status.js +0 -38
- package/dist/tools/enterprise/get-report-status.js.map +0 -1
- package/dist/tools/enterprise/get-threat-model.js.map +0 -1
- package/dist/tools/enterprise/list-agents.d.ts +0 -42
- package/dist/tools/enterprise/list-agents.js +0 -95
- package/dist/tools/enterprise/list-agents.js.map +0 -1
- package/dist/tools/enterprise/list-report-issues.d.ts +0 -36
- package/dist/tools/enterprise/list-report-issues.js +0 -50
- package/dist/tools/enterprise/list-report-issues.js.map +0 -1
- package/dist/tools/enterprise/list-threat-models.js.map +0 -1
- package/dist/tools/enterprise/manage-actor.js.map +0 -1
- package/dist/tools/enterprise/manage-attack-scenario.js.map +0 -1
- package/dist/tools/enterprise/manage-component.d.ts +0 -58
- package/dist/tools/enterprise/manage-component.js +0 -90
- package/dist/tools/enterprise/manage-component.js.map +0 -1
- package/dist/tools/enterprise/manage-data-asset.js.map +0 -1
- package/dist/tools/enterprise/manage-data-flow.d.ts +0 -57
- package/dist/tools/enterprise/manage-data-flow.js +0 -98
- package/dist/tools/enterprise/manage-data-flow.js.map +0 -1
- package/dist/tools/enterprise/manage-finding.d.ts +0 -69
- package/dist/tools/enterprise/manage-finding.js +0 -106
- package/dist/tools/enterprise/manage-finding.js.map +0 -1
- package/dist/tools/enterprise/manage-security-control.js.map +0 -1
- package/dist/tools/enterprise/manage-test-case.d.ts +0 -88
- package/dist/tools/enterprise/manage-test-case.js +0 -119
- package/dist/tools/enterprise/manage-test-case.js.map +0 -1
- package/dist/tools/enterprise/promote-finding-to-issue.d.ts +0 -36
- package/dist/tools/enterprise/promote-finding-to-issue.js +0 -65
- package/dist/tools/enterprise/promote-finding-to-issue.js.map +0 -1
- package/dist/tools/enterprise/publish-report-version.d.ts +0 -34
- package/dist/tools/enterprise/publish-report-version.js +0 -75
- package/dist/tools/enterprise/publish-report-version.js.map +0 -1
- package/dist/tools/enterprise/publish-test-to-library.d.ts +0 -31
- package/dist/tools/enterprise/publish-test-to-library.js +0 -40
- package/dist/tools/enterprise/publish-test-to-library.js.map +0 -1
- package/dist/tools/enterprise/record-test-result.d.ts +0 -67
- package/dist/tools/enterprise/record-test-result.js +0 -75
- package/dist/tools/enterprise/record-test-result.js.map +0 -1
- package/dist/tools/enterprise/start-pentest-session.d.ts +0 -35
- package/dist/tools/enterprise/start-pentest-session.js +0 -50
- package/dist/tools/enterprise/start-pentest-session.js.map +0 -1
- package/dist/tools/enterprise/sync-report-section.d.ts +0 -41
- package/dist/tools/enterprise/sync-report-section.js +0 -79
- package/dist/tools/enterprise/sync-report-section.js.map +0 -1
- package/dist/tools/enterprise/update-report-issue.d.ts +0 -55
- package/dist/tools/enterprise/update-report-issue.js +0 -69
- package/dist/tools/enterprise/update-report-issue.js.map +0 -1
- package/dist/tools/generate-diagram.js.map +0 -1
- package/dist/tools/get-agent-test-results.d.ts +0 -41
- package/dist/tools/get-agent-test-results.js +0 -86
- package/dist/tools/get-agent-test-results.js.map +0 -1
- package/dist/tools/get-application-overview.js.map +0 -1
- package/dist/tools/get-application.js.map +0 -1
- package/dist/tools/get-artifact-content.d.ts +0 -29
- package/dist/tools/get-artifact-content.js +0 -86
- package/dist/tools/get-artifact-content.js.map +0 -1
- package/dist/tools/get-diagram.js.map +0 -1
- package/dist/tools/get-document.js.map +0 -1
- package/dist/tools/get-finding-details.d.ts +0 -28
- package/dist/tools/get-finding-details.js +0 -43
- package/dist/tools/get-finding-details.js.map +0 -1
- package/dist/tools/get-findings.d.ts +0 -57
- package/dist/tools/get-findings.js +0 -103
- package/dist/tools/get-findings.js.map +0 -1
- package/dist/tools/get-oss-zat.js.map +0 -1
- package/dist/tools/get-recon-scan.d.ts +0 -27
- package/dist/tools/get-recon-scan.js +0 -46
- package/dist/tools/get-recon-scan.js.map +0 -1
- package/dist/tools/get-scan-output.d.ts +0 -27
- package/dist/tools/get-scan-output.js +0 -64
- package/dist/tools/get-scan-output.js.map +0 -1
- package/dist/tools/get-scenario-details.d.ts +0 -27
- package/dist/tools/get-scenario-details.js +0 -46
- package/dist/tools/get-scenario-details.js.map +0 -1
- package/dist/tools/get-test-case-results.d.ts +0 -37
- package/dist/tools/get-test-case-results.js +0 -66
- package/dist/tools/get-test-case-results.js.map +0 -1
- package/dist/tools/get-test-details.d.ts +0 -29
- package/dist/tools/get-test-details.js +0 -49
- package/dist/tools/get-test-details.js.map +0 -1
- package/dist/tools/get-trust-keys.js.map +0 -1
- package/dist/tools/import-openapi-endpoints.js.map +0 -1
- package/dist/tools/inspect-zat.js.map +0 -1
- package/dist/tools/list-agent-test-cases.d.ts +0 -41
- package/dist/tools/list-agent-test-cases.js +0 -73
- package/dist/tools/list-agent-test-cases.js.map +0 -1
- package/dist/tools/list-applications.js.map +0 -1
- package/dist/tools/list-diagrams.js.map +0 -1
- package/dist/tools/list-documents.js.map +0 -1
- package/dist/tools/list-endpoints.js.map +0 -1
- package/dist/tools/list-recon-scans.d.ts +0 -36
- package/dist/tools/list-recon-scans.js +0 -74
- package/dist/tools/list-recon-scans.js.map +0 -1
- package/dist/tools/list-scan-artifacts.d.ts +0 -41
- package/dist/tools/list-scan-artifacts.js +0 -63
- package/dist/tools/list-scan-artifacts.js.map +0 -1
- package/dist/tools/list-scans.d.ts +0 -44
- package/dist/tools/list-scans.js +0 -91
- package/dist/tools/list-scans.js.map +0 -1
- package/dist/tools/list-test-library.d.ts +0 -44
- package/dist/tools/list-test-library.js +0 -83
- package/dist/tools/list-test-library.js.map +0 -1
- package/dist/tools/list-test-scenarios.d.ts +0 -31
- package/dist/tools/list-test-scenarios.js +0 -66
- package/dist/tools/list-test-scenarios.js.map +0 -1
- package/dist/tools/local-scan.d.ts +0 -40
- package/dist/tools/local-scan.js +0 -261
- package/dist/tools/local-scan.js.map +0 -1
- package/dist/tools/manage-diagram.js.map +0 -1
- package/dist/tools/open-in-ide.js.map +0 -1
- package/dist/tools/run-test-scenario.d.ts +0 -37
- package/dist/tools/run-test-scenario.js +0 -70
- package/dist/tools/run-test-scenario.js.map +0 -1
- package/dist/tools/scan-pr.d.ts +0 -27
- package/dist/tools/scan-pr.js +0 -51
- package/dist/tools/scan-pr.js.map +0 -1
- package/dist/tools/security-review.js.map +0 -1
- package/dist/tools/setup-red-team-target.d.ts +0 -79
- package/dist/tools/setup-red-team-target.js +0 -430
- package/dist/tools/setup-red-team-target.js.map +0 -1
- package/dist/tools/triage-finding.d.ts +0 -47
- package/dist/tools/triage-finding.js +0 -116
- package/dist/tools/triage-finding.js.map +0 -1
- package/dist/tools/update-document.js.map +0 -1
- package/dist/tools/update-endpoint.js.map +0 -1
- package/dist/tools/update-mermaid-source.js.map +0 -1
- package/dist/tools/verify-trust-mark.js.map +0 -1
- package/dist/types.js.map +0 -1
package/dist/auth/sessions.js
CHANGED
|
@@ -1,69 +1,50 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Index Management
|
|
3
|
-
*
|
|
4
|
-
* Tracks named OAuth sessions in a JSON file so users can list
|
|
5
|
-
* and manage multiple tenant sessions without enumerating keychain entries.
|
|
6
|
-
*
|
|
7
|
-
* Session index file: ~/.config/{configDir}/sessions.json
|
|
8
|
-
*/
|
|
9
1
|
import * as fs from "node:fs/promises";
|
|
10
2
|
import * as path from "node:path";
|
|
11
3
|
import * as os from "node:os";
|
|
12
4
|
import { ENV_CONFIG } from "../types.js";
|
|
13
|
-
function
|
|
14
|
-
|
|
5
|
+
function resolveSessionStorage(storage) {
|
|
6
|
+
return (storage ?? {
|
|
7
|
+
keychainPrefix: ENV_CONFIG.keychainPrefix,
|
|
8
|
+
configDir: ENV_CONFIG.configDir,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function getSessionIndexPath(storage) {
|
|
12
|
+
const { configDir } = resolveSessionStorage(storage);
|
|
15
13
|
const base = process.platform === "win32"
|
|
16
14
|
? process.env.APPDATA || os.homedir()
|
|
17
15
|
: path.join(os.homedir(), ".config");
|
|
18
16
|
return path.join(base, configDir, "sessions.json");
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
* Load the session index from disk.
|
|
22
|
-
* Returns an empty object if the file doesn't exist.
|
|
23
|
-
*/
|
|
24
|
-
export async function loadSessionIndex() {
|
|
18
|
+
export async function loadSessionIndex(storage) {
|
|
25
19
|
try {
|
|
26
|
-
const raw = await fs.readFile(getSessionIndexPath(), "utf8");
|
|
20
|
+
const raw = await fs.readFile(getSessionIndexPath(storage), "utf8");
|
|
27
21
|
return JSON.parse(raw);
|
|
28
22
|
}
|
|
29
23
|
catch {
|
|
30
24
|
return {};
|
|
31
25
|
}
|
|
32
26
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
*/
|
|
36
|
-
async function saveSessionIndex(index) {
|
|
37
|
-
const filePath = getSessionIndexPath();
|
|
27
|
+
async function saveSessionIndex(index, storage) {
|
|
28
|
+
const filePath = getSessionIndexPath(storage);
|
|
38
29
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
39
30
|
await fs.writeFile(filePath, JSON.stringify(index, null, 2) + "\n", {
|
|
40
31
|
mode: 0o600,
|
|
41
32
|
});
|
|
42
33
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
*/
|
|
46
|
-
export async function saveSessionEntry(name, email) {
|
|
47
|
-
const index = await loadSessionIndex();
|
|
34
|
+
export async function saveSessionEntry(name, email, storage) {
|
|
35
|
+
const index = await loadSessionIndex(storage);
|
|
48
36
|
index[name] = {
|
|
49
37
|
email,
|
|
50
38
|
createdAt: index[name]?.createdAt || new Date().toISOString(),
|
|
51
39
|
};
|
|
52
|
-
await saveSessionIndex(index);
|
|
40
|
+
await saveSessionIndex(index, storage);
|
|
53
41
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
*/
|
|
57
|
-
export async function removeSessionEntry(name) {
|
|
58
|
-
const index = await loadSessionIndex();
|
|
42
|
+
export async function removeSessionEntry(name, storage) {
|
|
43
|
+
const index = await loadSessionIndex(storage);
|
|
59
44
|
delete index[name];
|
|
60
|
-
await saveSessionIndex(index);
|
|
45
|
+
await saveSessionIndex(index, storage);
|
|
61
46
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
*/
|
|
65
|
-
export async function listSessions() {
|
|
66
|
-
const index = await loadSessionIndex();
|
|
47
|
+
export async function listSessions(storage) {
|
|
48
|
+
const index = await loadSessionIndex(storage);
|
|
67
49
|
return Object.entries(index).map(([name, info]) => ({ name, ...info }));
|
|
68
50
|
}
|
|
69
|
-
//# sourceMappingURL=sessions.js.map
|
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Handles silent refresh of OAuth access tokens using the stored
|
|
5
|
-
* refresh token. Checks expiry with a 5-minute buffer to avoid
|
|
6
|
-
* mid-request expirations.
|
|
7
|
-
*/
|
|
8
|
-
import type { OAuthTokens, ZivisConfig } from "../types.js";
|
|
9
|
-
/**
|
|
10
|
-
* Load OAuth tokens from keychain
|
|
11
|
-
* @param session - Optional named session for multi-tenant isolation
|
|
12
|
-
*/
|
|
13
|
-
export declare function loadTokens(session?: string): Promise<OAuthTokens | null>;
|
|
14
|
-
/**
|
|
15
|
-
* Check if the access token is still valid (with 5-min buffer)
|
|
16
|
-
*/
|
|
1
|
+
import type { OAuthTokens, ZivisConfig, CredentialStorage } from "../types.js";
|
|
2
|
+
export declare function loadTokens(session?: string, storage?: CredentialStorage): Promise<OAuthTokens | null>;
|
|
17
3
|
export declare function isTokenValid(tokens: OAuthTokens): boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Get a valid access token, refreshing if necessary.
|
|
20
|
-
*
|
|
21
|
-
* Returns the access token string, or null if no tokens stored
|
|
22
|
-
* or refresh fails (user needs to re-login).
|
|
23
|
-
*/
|
|
24
4
|
export declare function getValidAccessToken(config?: ZivisConfig): Promise<string | null>;
|
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Token Refresh
|
|
3
|
-
*
|
|
4
|
-
* Handles silent refresh of OAuth access tokens using the stored
|
|
5
|
-
* refresh token. Checks expiry with a 5-minute buffer to avoid
|
|
6
|
-
* mid-request expirations.
|
|
7
|
-
*/
|
|
8
1
|
import { keychainRead, keychainStore, keychainDelete, getSessionAccount } from "./keychain.js";
|
|
9
|
-
import { DEFAULT_CONFIG } from "../types.js";
|
|
10
|
-
const EXPIRY_BUFFER_MS = 30 * 1000;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* @param session - Optional named session for multi-tenant isolation
|
|
14
|
-
*/
|
|
15
|
-
export async function loadTokens(session) {
|
|
16
|
-
const raw = await keychainRead(getSessionAccount(session));
|
|
2
|
+
import { DEFAULT_CONFIG, credentialStorageFromConfig } from "../types.js";
|
|
3
|
+
const EXPIRY_BUFFER_MS = 30 * 1000;
|
|
4
|
+
export async function loadTokens(session, storage) {
|
|
5
|
+
const raw = await keychainRead(getSessionAccount(session), storage);
|
|
17
6
|
if (!raw)
|
|
18
7
|
return null;
|
|
19
8
|
try {
|
|
@@ -23,28 +12,16 @@ export async function loadTokens(session) {
|
|
|
23
12
|
return null;
|
|
24
13
|
}
|
|
25
14
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Check if the access token is still valid (with 5-min buffer)
|
|
28
|
-
*/
|
|
29
15
|
export function isTokenValid(tokens) {
|
|
30
16
|
return tokens.expires_at > Date.now() + EXPIRY_BUFFER_MS;
|
|
31
17
|
}
|
|
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
18
|
const FATAL_REFRESH_ERRORS = new Set([
|
|
38
|
-
"invalid_grant",
|
|
39
|
-
"invalid_client",
|
|
40
|
-
"unauthorized_client",
|
|
19
|
+
"invalid_grant",
|
|
20
|
+
"invalid_client",
|
|
21
|
+
"unauthorized_client",
|
|
41
22
|
]);
|
|
42
|
-
/**
|
|
43
|
-
* Refresh the access token using the refresh token
|
|
44
|
-
*/
|
|
45
23
|
async function refreshAccessToken(refreshToken, config) {
|
|
46
|
-
|
|
47
|
-
const tokenPath = config.oauthApiUrl.includes("authkit.app") ? "/oauth2/token" : "/oauth/token";
|
|
24
|
+
const tokenPath = config.oauthApiUrl.includes("workos.com") ? "/oauth/token" : "/oauth2/token";
|
|
48
25
|
const tokenUrl = `${config.oauthApiUrl}${tokenPath}`;
|
|
49
26
|
const response = await fetch(tokenUrl, {
|
|
50
27
|
method: "POST",
|
|
@@ -59,7 +36,6 @@ async function refreshAccessToken(refreshToken, config) {
|
|
|
59
36
|
const error = (await response.json().catch(() => ({})));
|
|
60
37
|
const errorCode = error.error || "";
|
|
61
38
|
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
39
|
const err = new Error(errorMsg);
|
|
64
40
|
err.oauthErrorCode = errorCode;
|
|
65
41
|
throw err;
|
|
@@ -67,22 +43,16 @@ async function refreshAccessToken(refreshToken, config) {
|
|
|
67
43
|
const data = (await response.json());
|
|
68
44
|
return {
|
|
69
45
|
access_token: data.access_token,
|
|
70
|
-
// Use new refresh token if provided (rotation), otherwise keep existing
|
|
71
46
|
refresh_token: data.refresh_token || refreshToken,
|
|
72
47
|
expires_at: Date.now() + data.expires_in * 1000,
|
|
73
48
|
id_token: data.id_token,
|
|
74
49
|
};
|
|
75
50
|
}
|
|
76
|
-
/**
|
|
77
|
-
* Get a valid access token, refreshing if necessary.
|
|
78
|
-
*
|
|
79
|
-
* Returns the access token string, or null if no tokens stored
|
|
80
|
-
* or refresh fails (user needs to re-login).
|
|
81
|
-
*/
|
|
82
51
|
export async function getValidAccessToken(config = DEFAULT_CONFIG) {
|
|
83
52
|
const session = config.session;
|
|
84
53
|
const account = getSessionAccount(session);
|
|
85
|
-
const
|
|
54
|
+
const st = credentialStorageFromConfig(config);
|
|
55
|
+
const tokens = await loadTokens(session, st);
|
|
86
56
|
if (!tokens) {
|
|
87
57
|
return null;
|
|
88
58
|
}
|
|
@@ -94,7 +64,7 @@ export async function getValidAccessToken(config = DEFAULT_CONFIG) {
|
|
|
94
64
|
console.error(`[zivis] Access token expiring in ${expiresInSec}s — refreshing silently...`);
|
|
95
65
|
try {
|
|
96
66
|
const newTokens = await refreshAccessToken(tokens.refresh_token, config);
|
|
97
|
-
await keychainStore(account, JSON.stringify(newTokens));
|
|
67
|
+
await keychainStore(account, JSON.stringify(newTokens), st);
|
|
98
68
|
const newExpiresInMin = Math.round((newTokens.expires_at - Date.now()) / 1000 / 60);
|
|
99
69
|
console.error(`[zivis] Token refreshed successfully — new token valid for ~${newExpiresInMin}m`);
|
|
100
70
|
return newTokens.access_token;
|
|
@@ -104,14 +74,10 @@ export async function getValidAccessToken(config = DEFAULT_CONFIG) {
|
|
|
104
74
|
const isFatal = oauthCode && FATAL_REFRESH_ERRORS.has(oauthCode);
|
|
105
75
|
console.error(`[zivis] Token refresh failed (${oauthCode ?? "network/server error"}):`, err instanceof Error ? err.message : err);
|
|
106
76
|
if (isFatal) {
|
|
107
|
-
// Refresh token is permanently invalid — clear credentials so the user
|
|
108
|
-
// gets a clear "please re-login" message rather than silent failures.
|
|
109
77
|
console.error("[zivis] Refresh token revoked or expired — clearing stored credentials. Run: zivis auth login");
|
|
110
|
-
await keychainDelete(account);
|
|
78
|
+
await keychainDelete(account, st);
|
|
111
79
|
}
|
|
112
80
|
else {
|
|
113
|
-
// Transient failure (network, 5xx, timeout) — keep credentials so the
|
|
114
|
-
// next request can retry. Don't log the user out over a bad network.
|
|
115
81
|
console.error("[zivis] Transient refresh error — keeping stored credentials, will retry on next request.");
|
|
116
82
|
}
|
|
117
83
|
return null;
|
|
@@ -120,4 +86,3 @@ export async function getValidAccessToken(config = DEFAULT_CONFIG) {
|
|
|
120
86
|
console.error(`[zivis] Access token expired ${Math.abs(expiresInSec)}s ago and no refresh token stored — re-login required`);
|
|
121
87
|
return null;
|
|
122
88
|
}
|
|
123
|
-
//# sourceMappingURL=token-refresh.js.map
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI Commands
|
|
3
|
-
*
|
|
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)
|
|
11
|
-
*/
|
|
12
1
|
import type { ZivisConfig } from "./types.js";
|
|
13
|
-
/**
|
|
14
|
-
* Parse CLI arguments into a command and options
|
|
15
|
-
*/
|
|
16
2
|
export declare function parseArgs(argv: string[]): {
|
|
17
3
|
command: string;
|
|
18
4
|
options: Record<string, string>;
|
|
19
5
|
};
|
|
20
|
-
|
|
21
|
-
* Run the appropriate CLI command
|
|
22
|
-
*/
|
|
23
|
-
export declare function runCli(command: string, options: Record<string, string>, config?: ZivisConfig): Promise<void>;
|
|
6
|
+
export declare function runCli(command: string, _options: Record<string, string>, config?: ZivisConfig): Promise<void>;
|