@kairoaisec/cli 0.1.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/CHANGELOG.md +47 -0
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/dist/api/client.d.ts +128 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +153 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +42 -0
- package/dist/api/index.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +72 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth/index.d.ts +3 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +13 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/login.d.ts +3 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +174 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +3 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +56 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/whoami.d.ts +3 -0
- package/dist/commands/auth/whoami.d.ts.map +1 -0
- package/dist/commands/auth/whoami.js +110 -0
- package/dist/commands/auth/whoami.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +102 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/project/create.d.ts +3 -0
- package/dist/commands/project/create.d.ts.map +1 -0
- package/dist/commands/project/create.js +146 -0
- package/dist/commands/project/create.js.map +1 -0
- package/dist/commands/project/index.d.ts +3 -0
- package/dist/commands/project/index.d.ts.map +1 -0
- package/dist/commands/project/index.js +14 -0
- package/dist/commands/project/index.js.map +1 -0
- package/dist/commands/project/list.d.ts +3 -0
- package/dist/commands/project/list.d.ts.map +1 -0
- package/dist/commands/project/list.js +116 -0
- package/dist/commands/project/list.js.map +1 -0
- package/dist/commands/project/select.d.ts +3 -0
- package/dist/commands/project/select.d.ts.map +1 -0
- package/dist/commands/project/select.js +147 -0
- package/dist/commands/project/select.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +401 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/config/index.d.ts +44 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +237 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/file-discovery.d.ts +17 -0
- package/dist/lib/file-discovery.d.ts.map +1 -0
- package/dist/lib/file-discovery.js +218 -0
- package/dist/lib/file-discovery.js.map +1 -0
- package/dist/lib/patterns.d.ts +18 -0
- package/dist/lib/patterns.d.ts.map +1 -0
- package/dist/lib/patterns.js +187 -0
- package/dist/lib/patterns.js.map +1 -0
- package/dist/lib/sarif.d.ts +61 -0
- package/dist/lib/sarif.d.ts.map +1 -0
- package/dist/lib/sarif.js +169 -0
- package/dist/lib/sarif.js.map +1 -0
- package/dist/lib/scanner.d.ts +43 -0
- package/dist/lib/scanner.d.ts.map +1 -0
- package/dist/lib/scanner.js +163 -0
- package/dist/lib/scanner.js.map +1 -0
- package/dist/lib/slither.d.ts +112 -0
- package/dist/lib/slither.d.ts.map +1 -0
- package/dist/lib/slither.js +463 -0
- package/dist/lib/slither.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +44 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/spinner.d.ts +15 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +55 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/utils/validation.d.ts +12 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +79 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAII,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const login_1 = require("./login");
|
|
6
|
+
const logout_1 = require("./logout");
|
|
7
|
+
const whoami_1 = require("./whoami");
|
|
8
|
+
exports.authCommand = new commander_1.Command('auth')
|
|
9
|
+
.description('Authentication commands')
|
|
10
|
+
.addCommand(login_1.loginCommand)
|
|
11
|
+
.addCommand(logout_1.logoutCommand)
|
|
12
|
+
.addCommand(whoami_1.whoamiCommand);
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,mCAAuC;AACvC,qCAAyC;AACzC,qCAAyC;AAE5B,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,yBAAyB,CAAC;KACtC,UAAU,CAAC,oBAAY,CAAC;KACxB,UAAU,CAAC,sBAAa,CAAC;KACzB,UAAU,CAAC,sBAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiGpC,eAAO,MAAM,YAAY,SA0BrB,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loginCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const spinner_1 = require("../../utils/spinner");
|
|
9
|
+
const logger_1 = require("../../utils/logger");
|
|
10
|
+
const config_1 = require("../../config");
|
|
11
|
+
const api_1 = require("../../api");
|
|
12
|
+
const open_1 = __importDefault(require("open"));
|
|
13
|
+
const http_1 = require("http");
|
|
14
|
+
const url_1 = require("url");
|
|
15
|
+
const startAuthServer = () => {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
const server = (0, http_1.createServer)((req, res) => {
|
|
18
|
+
const url = new url_1.URL(req.url || '', 'http://localhost:3000');
|
|
19
|
+
if (url.pathname === '/auth/callback') {
|
|
20
|
+
const token = url.searchParams.get('token');
|
|
21
|
+
const userId = url.searchParams.get('user_id');
|
|
22
|
+
const email = url.searchParams.get('email');
|
|
23
|
+
const name = url.searchParams.get('name');
|
|
24
|
+
if (token && userId && email) {
|
|
25
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
26
|
+
res.end(`
|
|
27
|
+
<html>
|
|
28
|
+
<body style="font-family: -apple-system, BlinkMacSystemFont, sans-serif; text-align: center; padding: 50px;">
|
|
29
|
+
<h1 style="color: #10b981;">✓ Authentication Successful</h1>
|
|
30
|
+
<p>You can close this window and return to your terminal.</p>
|
|
31
|
+
<script>
|
|
32
|
+
setTimeout(() => window.close(), 3000);
|
|
33
|
+
</script>
|
|
34
|
+
</body>
|
|
35
|
+
</html>
|
|
36
|
+
`);
|
|
37
|
+
resolve({
|
|
38
|
+
token,
|
|
39
|
+
user: { id: userId, email, name: name || undefined },
|
|
40
|
+
});
|
|
41
|
+
server.close();
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
45
|
+
res.end(`
|
|
46
|
+
<html>
|
|
47
|
+
<body style="font-family: -apple-system, BlinkMacSystemFont, sans-serif; text-align: center; padding: 50px;">
|
|
48
|
+
<h1 style="color: #ef4444;">✗ Authentication Failed</h1>
|
|
49
|
+
<p>Missing required authentication data. Please try again.</p>
|
|
50
|
+
</body>
|
|
51
|
+
</html>
|
|
52
|
+
`);
|
|
53
|
+
reject(new Error('Missing authentication data'));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (url.pathname === '/auth/error') {
|
|
57
|
+
const error = url.searchParams.get('error') || 'Unknown error occurred';
|
|
58
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
59
|
+
res.end(`
|
|
60
|
+
<html>
|
|
61
|
+
<body style="font-family: -apple-system, BlinkMacSystemFont, sans-serif; text-align: center; padding: 50px;">
|
|
62
|
+
<h1 style="color: #ef4444;">✗ Authentication Failed</h1>
|
|
63
|
+
<p>${error}</p>
|
|
64
|
+
</body>
|
|
65
|
+
</html>
|
|
66
|
+
`);
|
|
67
|
+
reject(new Error(error));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
res.writeHead(404);
|
|
71
|
+
res.end('Not found');
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
server.listen(3000, 'localhost', () => {
|
|
75
|
+
logger_1.Logger.debug('Auth server started on http://localhost:3000');
|
|
76
|
+
});
|
|
77
|
+
server.on('error', (err) => {
|
|
78
|
+
reject(new Error(`Failed to start auth server: ${err.message}`));
|
|
79
|
+
});
|
|
80
|
+
// Timeout after 5 minutes
|
|
81
|
+
setTimeout(() => {
|
|
82
|
+
server.close();
|
|
83
|
+
reject(new Error('Authentication timed out'));
|
|
84
|
+
}, 5 * 60 * 1000);
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
exports.loginCommand = new commander_1.Command('login')
|
|
88
|
+
.description('Login to your Kairo account')
|
|
89
|
+
.option('--api-key <key>', 'Login with an API key instead of OAuth')
|
|
90
|
+
.option('--no-browser', "Don't automatically open browser")
|
|
91
|
+
.option('--port <port>', 'Local server port for OAuth callback', '3000')
|
|
92
|
+
.action(async (options) => {
|
|
93
|
+
try {
|
|
94
|
+
// Check if already logged in
|
|
95
|
+
if (await config_1.configManager.isAuthenticated()) {
|
|
96
|
+
const email = config_1.configManager.get('email');
|
|
97
|
+
logger_1.Logger.info(`Already logged in as ${logger_1.Logger.highlight(email || 'unknown user')}`);
|
|
98
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo auth logout') + ' to logout first');
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (options.apiKey) {
|
|
102
|
+
// Direct API key login
|
|
103
|
+
await loginWithApiKey(options.apiKey);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// OAuth browser flow
|
|
107
|
+
await loginWithOAuth(options);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
logger_1.Logger.error('Login failed:', error instanceof Error ? error.message : String(error));
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
async function loginWithApiKey(apiKey) {
|
|
116
|
+
const spinner = (0, spinner_1.createSpinner)('Validating API key...').start();
|
|
117
|
+
try {
|
|
118
|
+
// Test the API key by making a request
|
|
119
|
+
const client = (0, api_1.getApiClient)();
|
|
120
|
+
await config_1.configManager.setApiKey(apiKey);
|
|
121
|
+
// Try to fetch user info or make a test request
|
|
122
|
+
await client.listApiKeys();
|
|
123
|
+
spinner.succeed('API key validated successfully');
|
|
124
|
+
await config_1.configManager.setAuthToken(apiKey);
|
|
125
|
+
config_1.configManager.set('lastLogin', new Date().toISOString());
|
|
126
|
+
logger_1.Logger.success('Logged in successfully with API key');
|
|
127
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo whoami') + ' to view your account info');
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
spinner.fail('API key validation failed');
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function loginWithOAuth(options) {
|
|
135
|
+
const spinner = (0, spinner_1.createSpinner)('Starting authentication...').start();
|
|
136
|
+
try {
|
|
137
|
+
const apiUrl = config_1.configManager.get('apiUrl') || 'https://kairoaisec.com';
|
|
138
|
+
const callbackUrl = `http://localhost:${options.port}/auth/callback`;
|
|
139
|
+
const authUrl = `${apiUrl}/auth/cli/login?callback=${encodeURIComponent(callbackUrl)}`;
|
|
140
|
+
spinner.updateText('Waiting for authentication...');
|
|
141
|
+
// Start local server to receive callback
|
|
142
|
+
const serverPromise = startAuthServer();
|
|
143
|
+
if (options.browser !== false) {
|
|
144
|
+
logger_1.Logger.info('Opening browser for authentication...');
|
|
145
|
+
logger_1.Logger.info("If browser doesn't open automatically, visit:");
|
|
146
|
+
logger_1.Logger.log(logger_1.Logger.highlight(authUrl));
|
|
147
|
+
try {
|
|
148
|
+
await (0, open_1.default)(authUrl);
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
logger_1.Logger.warn('Failed to open browser automatically');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
logger_1.Logger.info('Please visit the following URL to authenticate:');
|
|
156
|
+
logger_1.Logger.log(logger_1.Logger.highlight(authUrl));
|
|
157
|
+
}
|
|
158
|
+
// Wait for authentication response
|
|
159
|
+
const authResponse = await serverPromise;
|
|
160
|
+
spinner.succeed('Authentication successful');
|
|
161
|
+
// Store credentials
|
|
162
|
+
await config_1.configManager.setAuthToken(authResponse.token);
|
|
163
|
+
config_1.configManager.set('userId', authResponse.user.id);
|
|
164
|
+
config_1.configManager.set('email', authResponse.user.email);
|
|
165
|
+
config_1.configManager.set('lastLogin', new Date().toISOString());
|
|
166
|
+
logger_1.Logger.success(`Welcome, ${logger_1.Logger.highlight(authResponse.user.name || authResponse.user.email)}!`);
|
|
167
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo whoami') + ' to view your account info');
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
spinner.fail('Authentication failed');
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SAmDtB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logoutCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const logger_1 = require("../../utils/logger");
|
|
9
|
+
const config_1 = require("../../config");
|
|
10
|
+
const api_1 = require("../../api");
|
|
11
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
12
|
+
exports.logoutCommand = new commander_1.Command('logout')
|
|
13
|
+
.description('Logout from your Kairo account')
|
|
14
|
+
.option('-f, --force', 'Skip confirmation prompt')
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
try {
|
|
17
|
+
// Check if user is logged in
|
|
18
|
+
if (!(await config_1.configManager.isAuthenticated())) {
|
|
19
|
+
logger_1.Logger.info('You are not currently logged in');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const email = config_1.configManager.get('email');
|
|
23
|
+
const userId = config_1.configManager.get('userId');
|
|
24
|
+
// Confirmation prompt unless forced
|
|
25
|
+
if (!options.force) {
|
|
26
|
+
const answers = await inquirer_1.default.prompt([
|
|
27
|
+
{
|
|
28
|
+
type: 'confirm',
|
|
29
|
+
name: 'confirm',
|
|
30
|
+
message: `Are you sure you want to logout from ${email || 'your account'}?`,
|
|
31
|
+
default: false,
|
|
32
|
+
},
|
|
33
|
+
]);
|
|
34
|
+
if (!answers.confirm) {
|
|
35
|
+
logger_1.Logger.info('Logout cancelled');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Clear all stored credentials and configuration
|
|
40
|
+
await config_1.configManager.clearAuthToken();
|
|
41
|
+
await config_1.configManager.clearApiKey();
|
|
42
|
+
config_1.configManager.clear();
|
|
43
|
+
// Reset API client instance
|
|
44
|
+
(0, api_1.resetApiClient)();
|
|
45
|
+
logger_1.Logger.success('Logged out successfully');
|
|
46
|
+
if (email) {
|
|
47
|
+
logger_1.Logger.info(`${logger_1.Logger.highlight(email)} has been logged out`);
|
|
48
|
+
}
|
|
49
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo auth login') + ' to login again');
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
logger_1.Logger.error('Logout failed:', error instanceof Error ? error.message : String(error));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,+CAA4C;AAC5C,yCAA6C;AAC7C,mCAA2C;AAC3C,wDAAgC;AAEnB,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,6BAA6B;QAC7B,IAAI,CAAC,CAAC,MAAM,sBAAa,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;YAC7C,eAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,sBAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,sBAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE3C,oCAAoC;QACpC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACpC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,wCAAwC,KAAK,IAAI,cAAc,GAAG;oBAC3E,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,eAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,MAAM,sBAAa,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,sBAAa,CAAC,WAAW,EAAE,CAAC;QAClC,sBAAa,CAAC,KAAK,EAAE,CAAC;QAEtB,4BAA4B;QAC5B,IAAA,oBAAc,GAAE,CAAC;QAEjB,eAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAE1C,IAAI,KAAK,EAAE,CAAC;YACV,eAAM,CAAC,IAAI,CAAC,GAAG,eAAM,CAAC,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAChE,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,MAAM,GAAG,eAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAEjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SA0EtB,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.whoamiCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const logger_1 = require("../../utils/logger");
|
|
6
|
+
const config_1 = require("../../config");
|
|
7
|
+
const api_1 = require("../../api");
|
|
8
|
+
const spinner_1 = require("../../utils/spinner");
|
|
9
|
+
exports.whoamiCommand = new commander_1.Command('whoami')
|
|
10
|
+
.description('Display current user information')
|
|
11
|
+
.option('--json', 'Output as JSON')
|
|
12
|
+
.action(async (options) => {
|
|
13
|
+
try {
|
|
14
|
+
// Check if user is logged in
|
|
15
|
+
if (!(await config_1.configManager.isAuthenticated())) {
|
|
16
|
+
if (options.json) {
|
|
17
|
+
console.log(JSON.stringify({ authenticated: false }, null, 2));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
logger_1.Logger.info('You are not currently logged in');
|
|
21
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo auth login') + ' to get started');
|
|
22
|
+
}
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const spinner = (0, spinner_1.createSpinner)('Fetching user information...').start();
|
|
26
|
+
try {
|
|
27
|
+
// Gather user information
|
|
28
|
+
const email = config_1.configManager.get('email');
|
|
29
|
+
const userId = config_1.configManager.get('userId');
|
|
30
|
+
const lastLogin = config_1.configManager.get('lastLogin');
|
|
31
|
+
const currentProject = config_1.configManager.getCurrentProject();
|
|
32
|
+
const apiUrl = config_1.configManager.get('apiUrl');
|
|
33
|
+
// Test API connection
|
|
34
|
+
let apiConnected = false;
|
|
35
|
+
let apiKeyInfo = null;
|
|
36
|
+
try {
|
|
37
|
+
const client = (0, api_1.getApiClient)();
|
|
38
|
+
const result = await client.listApiKeys();
|
|
39
|
+
apiConnected = true;
|
|
40
|
+
apiKeyInfo = {
|
|
41
|
+
total_keys: result.api_keys.length,
|
|
42
|
+
active_keys: result.api_keys.filter(k => !k.expires_at || new Date(k.expires_at) > new Date()).length
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
logger_1.Logger.debug('API connection test failed:', error);
|
|
47
|
+
apiConnected = false;
|
|
48
|
+
}
|
|
49
|
+
spinner.succeed('User information retrieved');
|
|
50
|
+
const userInfo = {
|
|
51
|
+
authenticated: true,
|
|
52
|
+
email: email || 'Unknown',
|
|
53
|
+
user_id: userId || 'Unknown',
|
|
54
|
+
last_login: lastLogin || 'Unknown',
|
|
55
|
+
current_project: currentProject ? {
|
|
56
|
+
id: currentProject.id,
|
|
57
|
+
name: currentProject.name
|
|
58
|
+
} : null,
|
|
59
|
+
api_url: apiUrl || 'https://kairoaisec.com',
|
|
60
|
+
api_connected: apiConnected,
|
|
61
|
+
api_keys: apiKeyInfo,
|
|
62
|
+
config_path: config_1.configManager.getConfigPath()
|
|
63
|
+
};
|
|
64
|
+
if (options.json) {
|
|
65
|
+
console.log(JSON.stringify(userInfo, null, 2));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
displayUserInfo(userInfo);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
spinner.fail('Failed to fetch user information');
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
logger_1.Logger.error('Failed to get user info:', error instanceof Error ? error.message : String(error));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
function displayUserInfo(info) {
|
|
82
|
+
logger_1.Logger.log('');
|
|
83
|
+
logger_1.Logger.log(logger_1.Logger.bold('🔐 Authentication Status'));
|
|
84
|
+
logger_1.Logger.log(` Status: ${logger_1.Logger.highlight('Authenticated')}`);
|
|
85
|
+
logger_1.Logger.log(` Email: ${logger_1.Logger.highlight(info.email)}`);
|
|
86
|
+
logger_1.Logger.log(` User ID: ${logger_1.Logger.dim(info.user_id)}`);
|
|
87
|
+
logger_1.Logger.log(` Last Login: ${info.last_login !== 'Unknown' ? new Date(info.last_login).toLocaleString() : 'Unknown'}`);
|
|
88
|
+
logger_1.Logger.log('');
|
|
89
|
+
logger_1.Logger.log(logger_1.Logger.bold('🌐 API Connection'));
|
|
90
|
+
logger_1.Logger.log(` API URL: ${info.api_url}`);
|
|
91
|
+
logger_1.Logger.log(` Status: ${info.api_connected ? logger_1.Logger.highlight('Connected') : logger_1.Logger.dim('Disconnected')}`);
|
|
92
|
+
if (info.api_keys) {
|
|
93
|
+
logger_1.Logger.log(` API Keys: ${info.api_keys.active_keys}/${info.api_keys.total_keys} active`);
|
|
94
|
+
}
|
|
95
|
+
logger_1.Logger.log('');
|
|
96
|
+
logger_1.Logger.log(logger_1.Logger.bold('📁 Current Project'));
|
|
97
|
+
if (info.current_project) {
|
|
98
|
+
logger_1.Logger.log(` Name: ${logger_1.Logger.highlight(info.current_project.name)}`);
|
|
99
|
+
logger_1.Logger.log(` ID: ${logger_1.Logger.dim(info.current_project.id)}`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
logger_1.Logger.log(` None selected`);
|
|
103
|
+
logger_1.Logger.log(` Use ${logger_1.Logger.highlight('kairo project select')} to choose a project`);
|
|
104
|
+
}
|
|
105
|
+
logger_1.Logger.log('');
|
|
106
|
+
logger_1.Logger.log(logger_1.Logger.bold('⚙️ Configuration'));
|
|
107
|
+
logger_1.Logger.log(` Config Path: ${logger_1.Logger.dim(info.config_path)}`);
|
|
108
|
+
logger_1.Logger.log('');
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/commands/auth/whoami.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA4EvB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.configCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const logger_1 = require("../utils/logger");
|
|
9
|
+
const config_1 = require("../config");
|
|
10
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
11
|
+
exports.configCommand = new commander_1.Command('config')
|
|
12
|
+
.description('Manage CLI configuration')
|
|
13
|
+
.addCommand(new commander_1.Command('get')
|
|
14
|
+
.argument('[key]', 'Configuration key to retrieve')
|
|
15
|
+
.description('Get configuration value')
|
|
16
|
+
.option('--json', 'Output as JSON')
|
|
17
|
+
.action(async (key, options) => {
|
|
18
|
+
if (key) {
|
|
19
|
+
const value = config_1.configManager.get(key);
|
|
20
|
+
if (options.json) {
|
|
21
|
+
console.log(JSON.stringify({ [key]: value }, null, 2));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
logger_1.Logger.log(`${key}: ${value || 'not set'}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const config = config_1.configManager.getAll();
|
|
29
|
+
if (options.json) {
|
|
30
|
+
console.log(JSON.stringify(config, null, 2));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
displayConfig(config);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}))
|
|
37
|
+
.addCommand(new commander_1.Command('set')
|
|
38
|
+
.argument('<key>', 'Configuration key')
|
|
39
|
+
.argument('<value>', 'Configuration value')
|
|
40
|
+
.description('Set configuration value')
|
|
41
|
+
.action(async (key, value) => {
|
|
42
|
+
try {
|
|
43
|
+
config_1.configManager.set(key, value);
|
|
44
|
+
logger_1.Logger.success(`Set ${key} = ${value}`);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger_1.Logger.error('Failed to set configuration:', error instanceof Error ? error.message : String(error));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}))
|
|
51
|
+
.addCommand(new commander_1.Command('reset')
|
|
52
|
+
.description('Reset all configuration to defaults')
|
|
53
|
+
.option('-f, --force', 'Skip confirmation prompt')
|
|
54
|
+
.action(async (options) => {
|
|
55
|
+
if (!options.force) {
|
|
56
|
+
const answers = await inquirer_1.default.prompt([
|
|
57
|
+
{
|
|
58
|
+
type: 'confirm',
|
|
59
|
+
name: 'confirm',
|
|
60
|
+
message: 'This will reset all configuration and logout. Are you sure?',
|
|
61
|
+
default: false,
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
if (!answers.confirm) {
|
|
65
|
+
logger_1.Logger.info('Reset cancelled');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
await config_1.configManager.clearAuthToken();
|
|
70
|
+
await config_1.configManager.clearApiKey();
|
|
71
|
+
config_1.configManager.clear();
|
|
72
|
+
logger_1.Logger.success('Configuration reset to defaults');
|
|
73
|
+
logger_1.Logger.info('You will need to login again');
|
|
74
|
+
}))
|
|
75
|
+
.addCommand(new commander_1.Command('path').description('Show configuration file path').action(() => {
|
|
76
|
+
logger_1.Logger.log(config_1.configManager.getConfigPath());
|
|
77
|
+
}));
|
|
78
|
+
function displayConfig(config) {
|
|
79
|
+
logger_1.Logger.log('');
|
|
80
|
+
logger_1.Logger.log(logger_1.Logger.bold('⚙️ Configuration'));
|
|
81
|
+
logger_1.Logger.log('');
|
|
82
|
+
const sensitiveKeys = ['authToken', 'apiKey'];
|
|
83
|
+
const entries = Object.entries(config);
|
|
84
|
+
if (entries.length === 0) {
|
|
85
|
+
logger_1.Logger.log(' No configuration set');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
for (const [key, value] of entries) {
|
|
89
|
+
const displayValue = sensitiveKeys.includes(key) && value ? '[hidden]' : value || 'not set';
|
|
90
|
+
logger_1.Logger.log(` ${key}: ${logger_1.Logger.dim(String(displayValue))}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
logger_1.Logger.log('');
|
|
94
|
+
logger_1.Logger.log(`Config file: ${logger_1.Logger.dim(config_1.configManager.getConfigPath())}`);
|
|
95
|
+
logger_1.Logger.log('');
|
|
96
|
+
logger_1.Logger.log(logger_1.Logger.bold('Commands:'));
|
|
97
|
+
logger_1.Logger.log(` View value: ${logger_1.Logger.highlight('kairo config get <key>')}`);
|
|
98
|
+
logger_1.Logger.log(` Set value: ${logger_1.Logger.highlight('kairo config set <key> <value>')}`);
|
|
99
|
+
logger_1.Logger.log(` Reset config: ${logger_1.Logger.highlight('kairo config reset')}`);
|
|
100
|
+
logger_1.Logger.log('');
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,4CAAyC;AACzC,sCAA0C;AAC1C,wDAAgC;AAEnB,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,0BAA0B,CAAC;KACvC,UAAU,CACT,IAAI,mBAAO,CAAC,KAAK,CAAC;KACf,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC;KAClD,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAA2B,EAAE,EAAE;IACzD,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,sBAAa,CAAC,GAAG,CAAC,GAAU,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,sBAAa,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CACL;KACA,UAAU,CACT,IAAI,mBAAO,CAAC,KAAK,CAAC;KACf,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;KACtC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;KAC1C,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE;IAC3C,IAAI,CAAC;QACH,sBAAa,CAAC,GAAG,CAAC,GAAU,EAAE,KAAK,CAAC,CAAC;QACrC,eAAM,CAAC,OAAO,CAAC,OAAO,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CACV,8BAA8B,EAC9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CACL;KACA,UAAU,CACT,IAAI,mBAAO,CAAC,OAAO,CAAC;KACjB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;IAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,6DAA6D;gBACtE,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,eAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,sBAAa,CAAC,cAAc,EAAE,CAAC;IACrC,MAAM,sBAAa,CAAC,WAAW,EAAE,CAAC;IAClC,sBAAa,CAAC,KAAK,EAAE,CAAC;IAEtB,eAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAClD,eAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC,CAAC,CACL;KACA,UAAU,CACT,IAAI,mBAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;IAC1E,eAAM,CAAC,GAAG,CAAC,sBAAa,CAAC,aAAa,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC,CACH,CAAC;AAEJ,SAAS,aAAa,CAAC,MAAW;IAChC,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,eAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC7C,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,eAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;YAC5F,eAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,eAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,gBAAgB,eAAM,CAAC,GAAG,CAAC,sBAAa,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrC,eAAM,CAAC,GAAG,CAAC,oBAAoB,eAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC7E,eAAM,CAAC,GAAG,CAAC,oBAAoB,eAAM,CAAC,SAAS,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;IACrF,eAAM,CAAC,GAAG,CAAC,oBAAoB,eAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACzE,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/project/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,aAAa,SAgIvB,CAAC"}
|