@zivis/cli 0.1.0-alpha.1

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.
Files changed (112) hide show
  1. package/dist/commands/app/index.d.ts +10 -0
  2. package/dist/commands/app/index.js +245 -0
  3. package/dist/commands/app/index.js.map +1 -0
  4. package/dist/commands/auth/index.d.ts +2 -0
  5. package/dist/commands/auth/index.js +41 -0
  6. package/dist/commands/auth/index.js.map +1 -0
  7. package/dist/commands/auth/login.d.ts +8 -0
  8. package/dist/commands/auth/login.js +65 -0
  9. package/dist/commands/auth/login.js.map +1 -0
  10. package/dist/commands/auth/logout.d.ts +5 -0
  11. package/dist/commands/auth/logout.js +14 -0
  12. package/dist/commands/auth/logout.js.map +1 -0
  13. package/dist/commands/auth/sessions.d.ts +4 -0
  14. package/dist/commands/auth/sessions.js +30 -0
  15. package/dist/commands/auth/sessions.js.map +1 -0
  16. package/dist/commands/auth/status.d.ts +4 -0
  17. package/dist/commands/auth/status.js +53 -0
  18. package/dist/commands/auth/status.js.map +1 -0
  19. package/dist/commands/credits/index.d.ts +2 -0
  20. package/dist/commands/credits/index.js +51 -0
  21. package/dist/commands/credits/index.js.map +1 -0
  22. package/dist/commands/mcp/index.d.ts +2 -0
  23. package/dist/commands/mcp/index.js +70 -0
  24. package/dist/commands/mcp/index.js.map +1 -0
  25. package/dist/commands/open/index.d.ts +10 -0
  26. package/dist/commands/open/index.js +57 -0
  27. package/dist/commands/open/index.js.map +1 -0
  28. package/dist/commands/scan/index.d.ts +2 -0
  29. package/dist/commands/scan/index.js +140 -0
  30. package/dist/commands/scan/index.js.map +1 -0
  31. package/dist/commands/target/index.d.ts +2 -0
  32. package/dist/commands/target/index.js +146 -0
  33. package/dist/commands/target/index.js.map +1 -0
  34. package/dist/commands/tm/index.d.ts +2 -0
  35. package/dist/commands/tm/index.js +266 -0
  36. package/dist/commands/tm/index.js.map +1 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.js +41 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/internal/extractor/adapters/go/index.d.ts +7 -0
  41. package/dist/internal/extractor/adapters/go/index.js +71 -0
  42. package/dist/internal/extractor/adapters/go/index.js.map +1 -0
  43. package/dist/internal/extractor/adapters/go/manifest.d.ts +37 -0
  44. package/dist/internal/extractor/adapters/go/manifest.js +199 -0
  45. package/dist/internal/extractor/adapters/go/manifest.js.map +1 -0
  46. package/dist/internal/extractor/adapters/go/parser.d.ts +6 -0
  47. package/dist/internal/extractor/adapters/go/parser.js +23 -0
  48. package/dist/internal/extractor/adapters/go/parser.js.map +1 -0
  49. package/dist/internal/extractor/adapters/go/scanner.d.ts +39 -0
  50. package/dist/internal/extractor/adapters/go/scanner.js +216 -0
  51. package/dist/internal/extractor/adapters/go/scanner.js.map +1 -0
  52. package/dist/internal/extractor/adapters/python/index.d.ts +5 -0
  53. package/dist/internal/extractor/adapters/python/index.js +68 -0
  54. package/dist/internal/extractor/adapters/python/index.js.map +1 -0
  55. package/dist/internal/extractor/adapters/python/manifest.d.ts +25 -0
  56. package/dist/internal/extractor/adapters/python/manifest.js +236 -0
  57. package/dist/internal/extractor/adapters/python/manifest.js.map +1 -0
  58. package/dist/internal/extractor/adapters/python/parser.d.ts +5 -0
  59. package/dist/internal/extractor/adapters/python/parser.js +22 -0
  60. package/dist/internal/extractor/adapters/python/parser.js.map +1 -0
  61. package/dist/internal/extractor/adapters/python/scanner.d.ts +37 -0
  62. package/dist/internal/extractor/adapters/python/scanner.js +284 -0
  63. package/dist/internal/extractor/adapters/python/scanner.js.map +1 -0
  64. package/dist/internal/extractor/adapters/typescript/index.d.ts +9 -0
  65. package/dist/internal/extractor/adapters/typescript/index.js +84 -0
  66. package/dist/internal/extractor/adapters/typescript/index.js.map +1 -0
  67. package/dist/internal/extractor/adapters/typescript/manifest.d.ts +41 -0
  68. package/dist/internal/extractor/adapters/typescript/manifest.js +156 -0
  69. package/dist/internal/extractor/adapters/typescript/manifest.js.map +1 -0
  70. package/dist/internal/extractor/adapters/typescript/parser.d.ts +14 -0
  71. package/dist/internal/extractor/adapters/typescript/parser.js +33 -0
  72. package/dist/internal/extractor/adapters/typescript/parser.js.map +1 -0
  73. package/dist/internal/extractor/adapters/typescript/scanner.d.ts +43 -0
  74. package/dist/internal/extractor/adapters/typescript/scanner.js +188 -0
  75. package/dist/internal/extractor/adapters/typescript/scanner.js.map +1 -0
  76. package/dist/internal/extractor/index.d.ts +22 -0
  77. package/dist/internal/extractor/index.js +107 -0
  78. package/dist/internal/extractor/index.js.map +1 -0
  79. package/dist/internal/extractor/types.d.ts +124 -0
  80. package/dist/internal/extractor/types.js +28 -0
  81. package/dist/internal/extractor/types.js.map +1 -0
  82. package/dist/internal/extractor/walker.d.ts +32 -0
  83. package/dist/internal/extractor/walker.js +110 -0
  84. package/dist/internal/extractor/walker.js.map +1 -0
  85. package/dist/internal/ide-setup.d.ts +7 -0
  86. package/dist/internal/ide-setup.js +131 -0
  87. package/dist/internal/ide-setup.js.map +1 -0
  88. package/dist/internal/orgs.d.ts +8 -0
  89. package/dist/internal/orgs.js +31 -0
  90. package/dist/internal/orgs.js.map +1 -0
  91. package/dist/internal/project-binding.d.ts +11 -0
  92. package/dist/internal/project-binding.js +96 -0
  93. package/dist/internal/project-binding.js.map +1 -0
  94. package/dist/internal/target-auth/api-config.d.ts +37 -0
  95. package/dist/internal/target-auth/api-config.js +40 -0
  96. package/dist/internal/target-auth/api-config.js.map +1 -0
  97. package/dist/internal/target-auth/config.d.ts +20 -0
  98. package/dist/internal/target-auth/config.js +58 -0
  99. package/dist/internal/target-auth/config.js.map +1 -0
  100. package/dist/internal/target-auth/index.d.ts +30 -0
  101. package/dist/internal/target-auth/index.js +101 -0
  102. package/dist/internal/target-auth/index.js.map +1 -0
  103. package/dist/internal/target-auth/keychain.d.ts +23 -0
  104. package/dist/internal/target-auth/keychain.js +150 -0
  105. package/dist/internal/target-auth/keychain.js.map +1 -0
  106. package/dist/internal/target-auth/types.d.ts +51 -0
  107. package/dist/internal/target-auth/types.js +11 -0
  108. package/dist/internal/target-auth/types.js.map +1 -0
  109. package/dist/internal/target-auth/workos.d.ts +20 -0
  110. package/dist/internal/target-auth/workos.js +196 -0
  111. package/dist/internal/target-auth/workos.js.map +1 -0
  112. package/package.json +41 -0
@@ -0,0 +1,70 @@
1
+ import { startServer } from "@zivis-ai/mcp-security/server";
2
+ import { DEFAULT_CONFIG } from "@zivis-ai/mcp-security/types";
3
+ import { setupCursor, setupVsCodeCopilot, setupVsCodeClaude, setupClaudeCodeCli, setupCline, setupWindsurf, printClaudeCodeManual, } from "../../internal/ide-setup.js";
4
+ const KNOWN_CLIENTS = [
5
+ "cursor",
6
+ "claude-code",
7
+ "claude-code-cli",
8
+ "cline",
9
+ "windsurf",
10
+ "vscode-copilot",
11
+ "vscode-claude",
12
+ ];
13
+ export function registerMcpCommands(program) {
14
+ const mcp = program.command("mcp").description("MCP server for IDE integration");
15
+ mcp
16
+ .command("serve")
17
+ .description("start the stdio MCP server (called by your IDE, not directly)")
18
+ .action(async () => {
19
+ await startServer(DEFAULT_CONFIG);
20
+ });
21
+ mcp
22
+ .command("install")
23
+ .description("write MCP config for a supported IDE client")
24
+ .option("--client <name>", `target client (${KNOWN_CLIENTS.join(" | ")})`)
25
+ .option("-s, --session <name>", "include ZIVIS_SESSION env var")
26
+ .action(async (opts) => {
27
+ const client = opts.client?.toLowerCase();
28
+ const session = opts.session;
29
+ if (!client) {
30
+ console.error("Specify a client with --client <name>:");
31
+ for (const c of KNOWN_CLIENTS)
32
+ console.error(` zivis mcp install --client ${c}`);
33
+ process.exit(1);
34
+ }
35
+ try {
36
+ switch (client) {
37
+ case "cursor":
38
+ await setupCursor(session);
39
+ break;
40
+ case "claude-code":
41
+ printClaudeCodeManual(session);
42
+ break;
43
+ case "claude-code-cli":
44
+ await setupClaudeCodeCli(session);
45
+ break;
46
+ case "cline":
47
+ await setupCline(session);
48
+ break;
49
+ case "windsurf":
50
+ await setupWindsurf(session);
51
+ break;
52
+ case "vscode-copilot":
53
+ await setupVsCodeCopilot(session);
54
+ break;
55
+ case "vscode-claude":
56
+ await setupVsCodeClaude(session);
57
+ break;
58
+ default:
59
+ console.error(`Unknown client: ${client}`);
60
+ console.error(`Supported: ${KNOWN_CLIENTS.join(", ")}`);
61
+ process.exit(1);
62
+ }
63
+ }
64
+ catch (err) {
65
+ console.error("Install failed:", err instanceof Error ? err.message : err);
66
+ process.exit(1);
67
+ }
68
+ });
69
+ }
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `zivis open` — Build and (by default) launch a vscode:// or cursor:// deep link
3
+ * that opens a ZIVIS artifact in the ZIVIS Code IDE extension. Use `--ide cursor`
4
+ * for Cursor. With --print, emit the URI to stdout for piping/sharing.
5
+ *
6
+ * Mirrors the URI shape emitted by the `zivis_open_in_ide` MCP tool and the
7
+ * web app's buildIdeLink() helper. See docs/platform/integrations/IDE-DEEP-LINKS.md.
8
+ */
9
+ import type { Command } from "commander";
10
+ export declare function registerOpenCommands(program: Command): void;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * `zivis open` — Build and (by default) launch a vscode:// or cursor:// deep link
3
+ * that opens a ZIVIS artifact in the ZIVIS Code IDE extension. Use `--ide cursor`
4
+ * for Cursor. With --print, emit the URI to stdout for piping/sharing.
5
+ *
6
+ * Mirrors the URI shape emitted by the `zivis_open_in_ide` MCP tool and the
7
+ * web app's buildIdeLink() helper. See docs/platform/integrations/IDE-DEEP-LINKS.md.
8
+ */
9
+ const KINDS = ["diagram", "document", "threat-model"];
10
+ export function registerOpenCommands(program) {
11
+ program
12
+ .command("open")
13
+ .description("open a ZIVIS artifact in the ZIVIS Code IDE extension")
14
+ .option("--diagram <id>", "open a diagram by UUID")
15
+ .option("--document <id>", "open a document by UUID")
16
+ .option("--threat-model <id>", "reveal a threat model in the IDE sidebar tree")
17
+ .option("--label <text>", "optional human-readable label for the panel title")
18
+ .option("--print", "print the IDE URI instead of launching it")
19
+ .option("--ide <client>", "target desktop app for the deep link: vscode (default) or cursor", "vscode")
20
+ .action(async (opts) => {
21
+ const matches = [];
22
+ if (opts.diagram)
23
+ matches.push({ kind: "diagram", id: String(opts.diagram) });
24
+ if (opts.document)
25
+ matches.push({ kind: "document", id: String(opts.document) });
26
+ if (opts.threatModel)
27
+ matches.push({ kind: "threat-model", id: String(opts.threatModel) });
28
+ if (matches.length === 0) {
29
+ console.error("Specify one of --diagram <id>, --document <id>, --threat-model <id>.");
30
+ process.exit(1);
31
+ }
32
+ if (matches.length > 1) {
33
+ console.error("Specify exactly one of --diagram, --document, --threat-model.");
34
+ process.exit(1);
35
+ }
36
+ const { kind, id } = matches[0];
37
+ const label = opts.label;
38
+ const qs = new URLSearchParams();
39
+ qs.set("id", id);
40
+ if (label) {
41
+ qs.set(kind === "document" ? "title" : "name", label);
42
+ }
43
+ const ide = String(opts.ide || "vscode").toLowerCase();
44
+ const scheme = ide === "cursor" ? "cursor" : "vscode";
45
+ const uri = `${scheme}://zivisai.zivis-security/${kind}?${qs.toString()}`;
46
+ if (opts.print) {
47
+ console.log(uri);
48
+ return;
49
+ }
50
+ // Lazy-import `open` so --print stays dependency-free in environments
51
+ // (e.g. headless CI) where launching a URL handler would fail or hang.
52
+ const { default: open } = await import("open");
53
+ await open(uri);
54
+ console.log(uri);
55
+ });
56
+ }
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/open/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerScanCommands(program: Command): void;
@@ -0,0 +1,140 @@
1
+ import { ApiClient } from "@zivis-ai/mcp-security/api-client";
2
+ import { DEFAULT_CONFIG } from "@zivis-ai/mcp-security/types";
3
+ const VALID_TARGET_TYPES = ["ai_chat", "web_app", "api"];
4
+ function buildClient(opts) {
5
+ const config = opts.session ? { ...DEFAULT_CONFIG, session: opts.session } : DEFAULT_CONFIG;
6
+ return new ApiClient(config);
7
+ }
8
+ export function registerScanCommands(program) {
9
+ const scan = program.command("scan").description("trigger and inspect RT scans");
10
+ scan
11
+ .command("run")
12
+ .description("trigger an RT scan against a target (or via --app for app-derived defaults)")
13
+ .option("-s, --session <name>", "named session")
14
+ .option("--app <applicationId>", "derive target-url + target-type from an Application")
15
+ .option("--url <targetUrl>", "target URL (required if --app not provided)")
16
+ .option("--type <targetType>", `target type (${VALID_TARGET_TYPES.join("|")})`)
17
+ .option("--campaign <list>", "comma-separated campaigns (e.g. recon,pen_test,ai_red_team)")
18
+ .option("--name <name>", "scan name shown in the dashboard")
19
+ .option("--scenario <list>", "comma-separated ThreatScenario ids (required for ai_red_team)")
20
+ .option("--threat-model <id>", "threat model id (required for ai_red_team)")
21
+ .option("--priority <n>", "scan priority", "0")
22
+ .option("--json", "emit raw JSON")
23
+ .action(async (opts) => {
24
+ const client = buildClient(opts);
25
+ let targetUrl = opts.url;
26
+ let targetType = opts.type;
27
+ let appName;
28
+ if (opts.app) {
29
+ const cfg = await client.request("GET", `/api/applications/${encodeURIComponent(opts.app)}/auth-config`);
30
+ appName = cfg.name;
31
+ if (!targetUrl) {
32
+ targetUrl = cfg.baseUrl ?? cfg.oauth?.domain;
33
+ }
34
+ if (!targetType) {
35
+ targetType = appTypeToTargetType(cfg.type);
36
+ }
37
+ }
38
+ if (!targetUrl) {
39
+ console.error("--url is required (or use --app to derive it from the Application)");
40
+ process.exit(1);
41
+ }
42
+ if (!targetType || !VALID_TARGET_TYPES.includes(targetType)) {
43
+ console.error(`--type must be one of: ${VALID_TARGET_TYPES.join(", ")}`);
44
+ process.exit(1);
45
+ }
46
+ const campaigns = String(opts.campaign ?? "")
47
+ .split(",")
48
+ .map((c) => c.trim())
49
+ .filter(Boolean);
50
+ if (campaigns.length === 0) {
51
+ console.error("--campaign is required (e.g. --campaign recon or --campaign ai_red_team)");
52
+ process.exit(1);
53
+ }
54
+ const scenarioIds = opts.scenario
55
+ ? String(opts.scenario).split(",").map((s) => s.trim()).filter(Boolean)
56
+ : undefined;
57
+ if (campaigns.includes("ai_red_team") && (!scenarioIds || !opts.threatModel)) {
58
+ console.error("ai_red_team scans require --threat-model <id> and --scenario <list>");
59
+ process.exit(1);
60
+ }
61
+ const body = {
62
+ name: opts.name ?? (appName ? `${appName} scan` : `CLI scan`),
63
+ targetUrl,
64
+ targetType,
65
+ campaigns,
66
+ priority: parseInt(opts.priority, 10) || 0,
67
+ };
68
+ if (scenarioIds)
69
+ body.scenarioIds = scenarioIds;
70
+ if (opts.threatModel)
71
+ body.linkedThreatModelId = opts.threatModel;
72
+ try {
73
+ const result = await client.request("POST", "/api/rt/scans", body);
74
+ if (opts.json) {
75
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
76
+ return;
77
+ }
78
+ console.log(`✓ Scan ${result.scan.id} queued (${result.scan.status})`);
79
+ if (result.scan.name)
80
+ console.log(` ${result.scan.name}`);
81
+ }
82
+ catch (err) {
83
+ console.error("Scan trigger failed:", err instanceof Error ? err.message : err);
84
+ process.exit(1);
85
+ }
86
+ });
87
+ scan
88
+ .command("list")
89
+ .description("list recent RT scans for the active org")
90
+ .option("-s, --session <name>", "named session")
91
+ .option("--app <applicationId>", "filter by application")
92
+ .option("--status <status>", "filter by status (pending|running|completed|failed)")
93
+ .option("--limit <n>", "max rows", "20")
94
+ .option("--json", "emit raw JSON")
95
+ .action(async (opts) => {
96
+ const client = buildClient(opts);
97
+ const params = new URLSearchParams();
98
+ if (opts.app)
99
+ params.set("applicationId", opts.app);
100
+ if (opts.status)
101
+ params.set("status", opts.status);
102
+ params.set("limit", opts.limit);
103
+ const path = `/api/rt/scans?${params.toString()}`;
104
+ const result = await client.request("GET", path);
105
+ if (opts.json) {
106
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
107
+ return;
108
+ }
109
+ const scans = result.scans ?? [];
110
+ if (!scans.length) {
111
+ console.log("No scans.");
112
+ return;
113
+ }
114
+ for (const s of scans) {
115
+ console.log(`${s.id} ${s.status.padEnd(10)} ${s.name ?? ""}`);
116
+ if (s.targetUrl)
117
+ console.log(` ${s.targetUrl}`);
118
+ }
119
+ });
120
+ }
121
+ /**
122
+ * Map customer-facing ApplicationType to the RT scan's targetType enum.
123
+ * The two enums differ historically: ApplicationType is product-shape,
124
+ * targetType is what the RT runner needs to know about the wire format.
125
+ */
126
+ function appTypeToTargetType(appType) {
127
+ switch (appType) {
128
+ case "agent":
129
+ case "llm_endpoint":
130
+ case "mcp_server":
131
+ return "ai_chat";
132
+ case "rest_api":
133
+ return "api";
134
+ case "ad_hoc_url":
135
+ return "web_app";
136
+ default:
137
+ return undefined;
138
+ }
139
+ }
140
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/scan/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerTargetCommands(program: Command): void;
@@ -0,0 +1,146 @@
1
+ import { saveTargetConfig, listTargetConfigs, getConfigPath } from "../../internal/target-auth/config.js";
2
+ import { loginTarget, logoutTarget, tokenInfo, getValidTargetToken, } from "../../internal/target-auth/index.js";
3
+ import { getStorageName } from "../../internal/target-auth/keychain.js";
4
+ import { decodeJwtPayload } from "../../internal/target-auth/workos.js";
5
+ const DEFAULT_PERSONA = "default";
6
+ function warnDeprecated() {
7
+ // stderr so it doesn't pollute stdout (CLI scripts pipe `zivis target token`
8
+ // straight into curl). One line, no color codes — keeps grep-friendly.
9
+ console.error("[zivis] WARNING: 'zivis target' is deprecated; use 'zivis app' instead.");
10
+ }
11
+ export function registerTargetCommands(program) {
12
+ const target = program
13
+ .command("target")
14
+ .description("[deprecated] use 'zivis app' instead — kept for one release window");
15
+ target
16
+ .command("configure <targetId>")
17
+ .description("save IdP config for a target (domain / client-id / mode). Local-only.")
18
+ .requiredOption("--type <type>", "IdP type: workos")
19
+ .option("--client-id <clientId>", "WorkOS client_id (required for type=workos)")
20
+ .option("--domain <domain>", "WorkOS domain (e.g. api.workos.com or <name>.authkit.app)")
21
+ .option("--mode <mode>", "WorkOS path layout: user_management | authkit | workos", "user_management")
22
+ .option("--callback-port <port>", "localhost callback port", "5174")
23
+ .option("--scopes <list>", "comma-separated extra scopes")
24
+ .action(async (targetId, opts) => {
25
+ warnDeprecated();
26
+ if (opts.type !== "workos") {
27
+ console.error(`Unsupported --type: ${opts.type} (only "workos" in v1)`);
28
+ process.exit(1);
29
+ }
30
+ if (!opts.clientId || !opts.domain) {
31
+ console.error("--client-id and --domain are required for type=workos");
32
+ process.exit(1);
33
+ }
34
+ const cfg = {
35
+ type: "workos",
36
+ clientId: opts.clientId,
37
+ domain: opts.domain,
38
+ mode: opts.mode,
39
+ callbackPort: parseInt(opts.callbackPort, 10),
40
+ extraScopes: opts.scopes ? String(opts.scopes).split(",").map((s) => s.trim()).filter(Boolean) : undefined,
41
+ };
42
+ const path = await saveTargetConfig(targetId, cfg);
43
+ console.log(`✓ Wrote ${path}`);
44
+ console.log(` Run: zivis target auth ${targetId}`);
45
+ });
46
+ target
47
+ .command("list")
48
+ .description("list locally-configured targets")
49
+ .action(async () => {
50
+ warnDeprecated();
51
+ const configs = await listTargetConfigs();
52
+ if (configs.length === 0) {
53
+ console.log("No targets configured locally.");
54
+ console.log("");
55
+ console.log("Configure one with:");
56
+ console.log(" zivis target configure <targetId> --type workos --client-id <id> --domain <host>");
57
+ return;
58
+ }
59
+ for (const c of configs) {
60
+ console.log(`${c.targetId} (${c.type})`);
61
+ }
62
+ });
63
+ target
64
+ .command("auth <targetId>")
65
+ .description("PKCE login against the target's IdP; tokens stay in the OS keychain")
66
+ .option("-p, --persona <name>", "persona for permutation testing", DEFAULT_PERSONA)
67
+ .action(async (targetId, opts) => {
68
+ warnDeprecated();
69
+ try {
70
+ const tokens = await loginTarget(targetId, opts.persona);
71
+ const claims = decodeJwtPayload(tokens.access_token) || {};
72
+ const exp = new Date(tokens.expires_at).toISOString();
73
+ console.log(`✓ Logged in as persona "${opts.persona}"`);
74
+ console.log(` storage: ${getStorageName()}`);
75
+ if (claims.sub)
76
+ console.log(` sub: ${claims.sub}`);
77
+ if (claims.email)
78
+ console.log(` email: ${claims.email}`);
79
+ if (claims.org_id)
80
+ console.log(` org: ${claims.org_id}`);
81
+ console.log(` expires: ${exp}`);
82
+ }
83
+ catch (err) {
84
+ console.error("Login failed:", err instanceof Error ? err.message : err);
85
+ process.exit(1);
86
+ }
87
+ });
88
+ target
89
+ .command("token <targetId>")
90
+ .description("print a valid access_token (auto-refreshes); for piping into curl/scripts")
91
+ .option("-p, --persona <name>", "persona", DEFAULT_PERSONA)
92
+ .action(async (targetId, opts) => {
93
+ warnDeprecated();
94
+ try {
95
+ const tokens = await getValidTargetToken(targetId, opts.persona);
96
+ if (!tokens) {
97
+ console.error(`No token for target ${targetId} (persona: ${opts.persona}). Run: zivis target auth ${targetId} -p ${opts.persona}`);
98
+ process.exit(2);
99
+ }
100
+ process.stdout.write(tokens.access_token);
101
+ }
102
+ catch (err) {
103
+ console.error("Token fetch failed:", err instanceof Error ? err.message : err);
104
+ process.exit(1);
105
+ }
106
+ });
107
+ target
108
+ .command("whoami <targetId>")
109
+ .description("decode the stored token and print expiry + key claims")
110
+ .option("-p, --persona <name>", "persona", DEFAULT_PERSONA)
111
+ .option("--json", "emit raw JSON")
112
+ .action(async (targetId, opts) => {
113
+ warnDeprecated();
114
+ const info = await tokenInfo(targetId, opts.persona);
115
+ if (!info) {
116
+ console.error(`No tokens stored for target ${targetId} (persona: ${opts.persona}).`);
117
+ process.exit(2);
118
+ }
119
+ const out = {
120
+ targetId,
121
+ persona: opts.persona,
122
+ configPath: getConfigPath(targetId),
123
+ ...info,
124
+ };
125
+ if (opts.json) {
126
+ process.stdout.write(JSON.stringify(out, null, 2) + "\n");
127
+ return;
128
+ }
129
+ console.log(`Target: ${targetId}`);
130
+ console.log(`Persona: ${opts.persona}`);
131
+ console.log(`Valid: ${info.valid}`);
132
+ console.log(`Expires: ${info.expiresAt}`);
133
+ console.log(`Remaining: ${info.secondsRemaining}s`);
134
+ console.log(`Refresh: ${info.hasRefresh ? "available" : "none"}`);
135
+ });
136
+ target
137
+ .command("logout <targetId>")
138
+ .description("clear stored tokens for a target persona")
139
+ .option("-p, --persona <name>", "persona", DEFAULT_PERSONA)
140
+ .action(async (targetId, opts) => {
141
+ warnDeprecated();
142
+ await logoutTarget(targetId, opts.persona);
143
+ console.log(`✓ Cleared tokens for target ${targetId} (persona: ${opts.persona})`);
144
+ });
145
+ }
146
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/target/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerTmCommands(program: Command): void;