@autonoma-io/a6s 5.2.1 → 5.3.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/bin/binaries/a6s-darwin-arm64 +0 -0
- package/bin/binaries/a6s-darwin-x64 +0 -0
- package/bin/binaries/a6s-linux-arm64 +0 -0
- package/bin/binaries/a6s-linux-x64 +0 -0
- package/bin/binaries/a6s-win32-x64.exe +0 -0
- package/dist/go-bridge.d.ts +14 -0
- package/dist/go-bridge.d.ts.map +1 -0
- package/dist/go-bridge.js +92 -0
- package/dist/go-bridge.js.map +1 -0
- package/dist/go-verbs.generated.d.ts +2 -0
- package/dist/go-verbs.generated.d.ts.map +1 -0
- package/dist/go-verbs.generated.js +46 -0
- package/dist/go-verbs.generated.js.map +1 -0
- package/dist/index.js +79 -312
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts +9 -2
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +38 -194
- package/dist/interactive.js.map +1 -1
- package/dist/nlp/command-map.d.ts +33 -0
- package/dist/nlp/command-map.d.ts.map +1 -0
- package/dist/nlp/command-map.js +275 -0
- package/dist/nlp/command-map.js.map +1 -0
- package/dist/nlp/processor.d.ts +10 -0
- package/dist/nlp/processor.d.ts.map +1 -1
- package/dist/nlp/processor.js +81 -94
- package/dist/nlp/processor.js.map +1 -1
- package/package.json +7 -31
- package/dist/commands/ai-learning-demo.d.ts +0 -3
- package/dist/commands/ai-learning-demo.d.ts.map +0 -1
- package/dist/commands/ai-learning-demo.js +0 -176
- package/dist/commands/ai-learning-demo.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -33
- package/dist/commands/auth.d.ts.map +0 -1
- package/dist/commands/auth.js +0 -603
- package/dist/commands/auth.js.map +0 -1
- package/dist/modules/ab-testing.d.ts +0 -16
- package/dist/modules/ab-testing.d.ts.map +0 -1
- package/dist/modules/ab-testing.js +0 -375
- package/dist/modules/ab-testing.js.map +0 -1
- package/dist/modules/ai-orchestration.d.ts +0 -70
- package/dist/modules/ai-orchestration.d.ts.map +0 -1
- package/dist/modules/ai-orchestration.js +0 -546
- package/dist/modules/ai-orchestration.js.map +0 -1
- package/dist/modules/auth-access-control.d.ts +0 -118
- package/dist/modules/auth-access-control.d.ts.map +0 -1
- package/dist/modules/auth-access-control.js +0 -832
- package/dist/modules/auth-access-control.js.map +0 -1
- package/dist/modules/campaign.d.ts +0 -20
- package/dist/modules/campaign.d.ts.map +0 -1
- package/dist/modules/campaign.js +0 -301
- package/dist/modules/campaign.js.map +0 -1
- package/dist/modules/database.d.ts +0 -14
- package/dist/modules/database.d.ts.map +0 -1
- package/dist/modules/database.js +0 -253
- package/dist/modules/database.js.map +0 -1
- package/dist/modules/deployment.d.ts +0 -17
- package/dist/modules/deployment.d.ts.map +0 -1
- package/dist/modules/deployment.js +0 -201
- package/dist/modules/deployment.js.map +0 -1
- package/dist/modules/edge-computing.d.ts +0 -130
- package/dist/modules/edge-computing.d.ts.map +0 -1
- package/dist/modules/edge-computing.js +0 -656
- package/dist/modules/edge-computing.js.map +0 -1
- package/dist/modules/load-testing.d.ts +0 -21
- package/dist/modules/load-testing.d.ts.map +0 -1
- package/dist/modules/load-testing.js +0 -372
- package/dist/modules/load-testing.js.map +0 -1
- package/dist/modules/monitoring.d.ts +0 -18
- package/dist/modules/monitoring.d.ts.map +0 -1
- package/dist/modules/monitoring.js +0 -375
- package/dist/modules/monitoring.js.map +0 -1
- package/dist/modules/onboarding.d.ts +0 -20
- package/dist/modules/onboarding.d.ts.map +0 -1
- package/dist/modules/onboarding.js +0 -455
- package/dist/modules/onboarding.js.map +0 -1
- package/dist/utils/db-client.d.ts +0 -35
- package/dist/utils/db-client.d.ts.map +0 -1
- package/dist/utils/db-client.js +0 -132
- package/dist/utils/db-client.js.map +0 -1
package/dist/commands/auth.js
DELETED
|
@@ -1,603 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.AuthCommand = void 0;
|
|
40
|
-
exports.setupAuthCommands = setupAuthCommands;
|
|
41
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
-
const ora_1 = __importDefault(require("ora"));
|
|
43
|
-
const prompts_1 = __importDefault(require("prompts"));
|
|
44
|
-
const auth_access_control_1 = require("../modules/auth-access-control");
|
|
45
|
-
const fs_1 = require("fs");
|
|
46
|
-
const path_1 = require("path");
|
|
47
|
-
const os_1 = require("os");
|
|
48
|
-
const nodemailer = __importStar(require("nodemailer"));
|
|
49
|
-
const speakeasy = __importStar(require("speakeasy"));
|
|
50
|
-
// Admin email group configuration
|
|
51
|
-
const ADMIN_EMAIL_GROUP = 'admin@theautonoma.io';
|
|
52
|
-
const AUTHORIZED_DOMAINS = ['theautonoma.io', 'autonoma.dev'];
|
|
53
|
-
const TOKEN_STORAGE_PATH = (0, path_1.join)((0, os_1.homedir)(), '.autonoma-cli', '.session');
|
|
54
|
-
class AuthCommand {
|
|
55
|
-
authModule;
|
|
56
|
-
emailTransporter;
|
|
57
|
-
constructor() {
|
|
58
|
-
this.authModule = new auth_access_control_1.AuthAccessControlModule();
|
|
59
|
-
// Configure email transporter for sending auth codes
|
|
60
|
-
this.emailTransporter = nodemailer.createTransport({
|
|
61
|
-
host: 'smtp.sendgrid.net',
|
|
62
|
-
port: 587,
|
|
63
|
-
secure: false,
|
|
64
|
-
auth: {
|
|
65
|
-
user: 'apikey',
|
|
66
|
-
pass: process.env.SENDGRID_API_KEY || ''
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
async login(options = {}) {
|
|
71
|
-
console.log(chalk_1.default.cyan('\n🔐 Autonoma Admin CLI Authentication\n'));
|
|
72
|
-
// Check for existing session
|
|
73
|
-
if (this.hasValidSession() && !options.force) {
|
|
74
|
-
console.log(chalk_1.default.green('✓ You are already logged in'));
|
|
75
|
-
console.log(chalk_1.default.gray('Use --force to login with different credentials'));
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
// Authentication method selection
|
|
79
|
-
const { authMethod } = await (0, prompts_1.default)({
|
|
80
|
-
type: 'select',
|
|
81
|
-
name: 'authMethod',
|
|
82
|
-
message: 'Select authentication method:',
|
|
83
|
-
choices: [
|
|
84
|
-
{ title: 'Email (admin@theautonoma.io)', value: 'email' },
|
|
85
|
-
{ title: 'Password + MFA', value: 'password' },
|
|
86
|
-
{ title: 'API Key', value: 'apikey' },
|
|
87
|
-
{ title: 'SSH Key', value: 'ssh' },
|
|
88
|
-
{ title: 'AWS IAM Role', value: 'aws' }
|
|
89
|
-
]
|
|
90
|
-
});
|
|
91
|
-
let authResult = { success: false };
|
|
92
|
-
switch (authMethod) {
|
|
93
|
-
case 'email':
|
|
94
|
-
authResult = await this.loginWithEmail(options);
|
|
95
|
-
break;
|
|
96
|
-
case 'password':
|
|
97
|
-
authResult = await this.loginWithPassword();
|
|
98
|
-
break;
|
|
99
|
-
case 'apikey':
|
|
100
|
-
authResult = await this.loginWithAPIKey();
|
|
101
|
-
break;
|
|
102
|
-
case 'ssh':
|
|
103
|
-
authResult = await this.loginWithSSH();
|
|
104
|
-
break;
|
|
105
|
-
case 'aws':
|
|
106
|
-
authResult = await this.loginWithAWS();
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
if (authResult.success && authResult.token) {
|
|
110
|
-
this.saveSession(authResult.token);
|
|
111
|
-
console.log(chalk_1.default.green('\n✓ Successfully authenticated'));
|
|
112
|
-
await this.displayUserInfo(authResult.token);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
console.log(chalk_1.default.red('\n✗ Authentication failed'));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
async loginWithEmail(options = {}) {
|
|
119
|
-
const spinner = (0, ora_1.default)('Validating email access...').start();
|
|
120
|
-
try {
|
|
121
|
-
// Prompt for email
|
|
122
|
-
const { email } = await (0, prompts_1.default)({
|
|
123
|
-
type: 'text',
|
|
124
|
-
name: 'email',
|
|
125
|
-
message: 'Enter your email:',
|
|
126
|
-
validate: (value) => {
|
|
127
|
-
if (!value.includes('@'))
|
|
128
|
-
return 'Invalid email format';
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
// Check if email is part of admin group or authorized domain
|
|
133
|
-
const isAdminGroup = email === ADMIN_EMAIL_GROUP;
|
|
134
|
-
const isAuthorizedDomain = AUTHORIZED_DOMAINS.some(domain => email.endsWith(`@${domain}`));
|
|
135
|
-
if (!isAdminGroup && !isAuthorizedDomain) {
|
|
136
|
-
spinner.fail('Email not authorized for admin access');
|
|
137
|
-
return { success: false };
|
|
138
|
-
}
|
|
139
|
-
// Generate and send verification code
|
|
140
|
-
const verificationCode = Math.floor(100000 + Math.random() * 900000).toString();
|
|
141
|
-
const codeExpiry = Date.now() + 10 * 60 * 1000; // 10 minutes
|
|
142
|
-
// Store verification code temporarily
|
|
143
|
-
this.storeVerificationCode(email, verificationCode, codeExpiry);
|
|
144
|
-
// Send email with verification code
|
|
145
|
-
if (process.env.SENDGRID_API_KEY) {
|
|
146
|
-
await this.emailTransporter.sendMail({
|
|
147
|
-
from: 'noreply@theautonoma.io',
|
|
148
|
-
to: email,
|
|
149
|
-
subject: 'Autonoma CLI Authentication Code',
|
|
150
|
-
html: `
|
|
151
|
-
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
|
|
152
|
-
<h2>Autonoma Admin CLI Authentication</h2>
|
|
153
|
-
<p>Your verification code is:</p>
|
|
154
|
-
<h1 style="color: #6366f1; letter-spacing: 5px;">${verificationCode}</h1>
|
|
155
|
-
<p>This code will expire in 10 minutes.</p>
|
|
156
|
-
<hr style="border: none; border-top: 1px solid #e5e5e5; margin: 20px 0;">
|
|
157
|
-
<p style="color: #666; font-size: 12px;">
|
|
158
|
-
If you didn't request this code, please ignore this email.
|
|
159
|
-
<br>IP Address: ${options.ipAddress || 'Unknown'}
|
|
160
|
-
<br>Time: ${new Date().toLocaleString()}
|
|
161
|
-
</p>
|
|
162
|
-
</div>
|
|
163
|
-
`
|
|
164
|
-
});
|
|
165
|
-
spinner.succeed(`Verification code sent to ${email}`);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
// For development/testing - display code in console
|
|
169
|
-
spinner.succeed(`Verification code: ${verificationCode}`);
|
|
170
|
-
}
|
|
171
|
-
// Prompt for verification code
|
|
172
|
-
const { inputCode } = await (0, prompts_1.default)({
|
|
173
|
-
type: 'text',
|
|
174
|
-
name: 'inputCode',
|
|
175
|
-
message: 'Enter verification code:'
|
|
176
|
-
});
|
|
177
|
-
// Verify code
|
|
178
|
-
if (this.verifyCode(email, inputCode)) {
|
|
179
|
-
// Determine role based on email
|
|
180
|
-
let role = auth_access_control_1.AdminRole.READ_ONLY;
|
|
181
|
-
if (email === ADMIN_EMAIL_GROUP) {
|
|
182
|
-
role = auth_access_control_1.AdminRole.SUPER_ADMIN;
|
|
183
|
-
}
|
|
184
|
-
else if (email.includes('devops')) {
|
|
185
|
-
role = auth_access_control_1.AdminRole.DEVOPS_ADMIN;
|
|
186
|
-
}
|
|
187
|
-
else if (email.includes('security')) {
|
|
188
|
-
role = auth_access_control_1.AdminRole.SECURITY_ADMIN;
|
|
189
|
-
}
|
|
190
|
-
else if (email.includes('support')) {
|
|
191
|
-
role = auth_access_control_1.AdminRole.SUPPORT_ADMIN;
|
|
192
|
-
}
|
|
193
|
-
else if (email.includes('data')) {
|
|
194
|
-
role = auth_access_control_1.AdminRole.DATA_ADMIN;
|
|
195
|
-
}
|
|
196
|
-
else if (email.endsWith('@theautonoma.io')) {
|
|
197
|
-
role = auth_access_control_1.AdminRole.PLATFORM_ADMIN;
|
|
198
|
-
}
|
|
199
|
-
// Create or update user if needed
|
|
200
|
-
await this.authModule.createUser(email, this.generateTempPassword(), role, 'email-auth', { authMethod: 'email' });
|
|
201
|
-
// Authenticate with temporary password
|
|
202
|
-
const authResult = await this.authModule.authenticateWithPassword(email, this.getTempPassword(email), options.ipAddress || '127.0.0.1');
|
|
203
|
-
return authResult;
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
spinner.fail('Invalid or expired verification code');
|
|
207
|
-
return { success: false };
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
catch (error) {
|
|
211
|
-
spinner.fail('Email authentication failed');
|
|
212
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
213
|
-
return { success: false };
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
async loginWithPassword() {
|
|
217
|
-
const { email } = await (0, prompts_1.default)({
|
|
218
|
-
type: 'text',
|
|
219
|
-
name: 'email',
|
|
220
|
-
message: 'Email:'
|
|
221
|
-
});
|
|
222
|
-
const { password } = await (0, prompts_1.default)({
|
|
223
|
-
type: 'password',
|
|
224
|
-
name: 'password',
|
|
225
|
-
message: 'Password:'
|
|
226
|
-
});
|
|
227
|
-
const authResult = await this.authModule.authenticateWithPassword(email, password, '127.0.0.1');
|
|
228
|
-
if (authResult.mfaRequired) {
|
|
229
|
-
const { mfaCode } = await (0, prompts_1.default)({
|
|
230
|
-
type: 'text',
|
|
231
|
-
name: 'mfaCode',
|
|
232
|
-
message: 'Enter MFA code:'
|
|
233
|
-
});
|
|
234
|
-
return await this.authModule.authenticateWithMFA(authResult.token, mfaCode, '127.0.0.1');
|
|
235
|
-
}
|
|
236
|
-
return authResult;
|
|
237
|
-
}
|
|
238
|
-
async loginWithAPIKey() {
|
|
239
|
-
const { apiKey } = await (0, prompts_1.default)({
|
|
240
|
-
type: 'password',
|
|
241
|
-
name: 'apiKey',
|
|
242
|
-
message: 'API Key:'
|
|
243
|
-
});
|
|
244
|
-
return await this.authModule.authenticateWithAPIKey(apiKey, '127.0.0.1');
|
|
245
|
-
}
|
|
246
|
-
async loginWithSSH() {
|
|
247
|
-
const { email } = await (0, prompts_1.default)({
|
|
248
|
-
type: 'text',
|
|
249
|
-
name: 'email',
|
|
250
|
-
message: 'Email:'
|
|
251
|
-
});
|
|
252
|
-
const { sshKeyPath } = await (0, prompts_1.default)({
|
|
253
|
-
type: 'text',
|
|
254
|
-
name: 'sshKeyPath',
|
|
255
|
-
message: 'SSH public key path:',
|
|
256
|
-
initial: (0, path_1.join)((0, os_1.homedir)(), '.ssh', 'id_rsa.pub')
|
|
257
|
-
});
|
|
258
|
-
return await this.authModule.authenticateWithSSH(sshKeyPath, email, '127.0.0.1');
|
|
259
|
-
}
|
|
260
|
-
async loginWithAWS() {
|
|
261
|
-
const { roleArn } = await (0, prompts_1.default)({
|
|
262
|
-
type: 'text',
|
|
263
|
-
name: 'roleArn',
|
|
264
|
-
message: 'AWS Role ARN:',
|
|
265
|
-
initial: 'arn:aws:iam::808773666646:role/AutonomaAdminCLI'
|
|
266
|
-
});
|
|
267
|
-
return await this.authModule.authenticateWithAWSRole(roleArn, '127.0.0.1');
|
|
268
|
-
}
|
|
269
|
-
async logout() {
|
|
270
|
-
const spinner = (0, ora_1.default)('Logging out...').start();
|
|
271
|
-
try {
|
|
272
|
-
const token = this.getStoredToken();
|
|
273
|
-
if (token) {
|
|
274
|
-
await this.authModule.revokeSession(token);
|
|
275
|
-
this.clearSession();
|
|
276
|
-
spinner.succeed('Successfully logged out');
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
spinner.info('No active session found');
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
catch (error) {
|
|
283
|
-
spinner.fail('Logout failed');
|
|
284
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
async whoami() {
|
|
288
|
-
const token = this.getStoredToken();
|
|
289
|
-
if (!token) {
|
|
290
|
-
console.log(chalk_1.default.yellow('Not logged in'));
|
|
291
|
-
console.log(chalk_1.default.gray('Run: a6s auth login'));
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
await this.displayUserInfo(token);
|
|
295
|
-
}
|
|
296
|
-
async setupMFA() {
|
|
297
|
-
const spinner = (0, ora_1.default)('Setting up MFA...').start();
|
|
298
|
-
try {
|
|
299
|
-
const token = this.getStoredToken();
|
|
300
|
-
if (!token) {
|
|
301
|
-
spinner.fail('Not logged in');
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
// Decode token to get user ID
|
|
305
|
-
const decoded = this.decodeToken(token);
|
|
306
|
-
if (!decoded) {
|
|
307
|
-
spinner.fail('Invalid session');
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
const result = await this.authModule.setupMFA(decoded.userId);
|
|
311
|
-
if (result.success) {
|
|
312
|
-
spinner.succeed('MFA setup complete');
|
|
313
|
-
console.log(chalk_1.default.cyan('\n📱 MFA Configuration\n'));
|
|
314
|
-
console.log('Scan this QR code with your authenticator app:');
|
|
315
|
-
console.log(result.qrCode);
|
|
316
|
-
console.log('\nOr enter this secret manually:');
|
|
317
|
-
console.log(chalk_1.default.yellow(result.secret));
|
|
318
|
-
// Verify MFA setup
|
|
319
|
-
const { verifyCode } = await (0, prompts_1.default)({
|
|
320
|
-
type: 'text',
|
|
321
|
-
name: 'verifyCode',
|
|
322
|
-
message: 'Enter code from authenticator to verify:'
|
|
323
|
-
});
|
|
324
|
-
const verified = speakeasy.totp.verify({
|
|
325
|
-
secret: result.secret,
|
|
326
|
-
encoding: 'base32',
|
|
327
|
-
token: verifyCode,
|
|
328
|
-
window: 2
|
|
329
|
-
});
|
|
330
|
-
if (verified) {
|
|
331
|
-
console.log(chalk_1.default.green('\n✓ MFA successfully configured'));
|
|
332
|
-
}
|
|
333
|
-
else {
|
|
334
|
-
console.log(chalk_1.default.red('\n✗ Invalid code. MFA setup incomplete'));
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
catch (error) {
|
|
339
|
-
spinner.fail('MFA setup failed');
|
|
340
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
async generateAPIKey() {
|
|
344
|
-
const spinner = (0, ora_1.default)('Generating API key...').start();
|
|
345
|
-
try {
|
|
346
|
-
const token = this.getStoredToken();
|
|
347
|
-
if (!token) {
|
|
348
|
-
spinner.fail('Not logged in');
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
const decoded = this.decodeToken(token);
|
|
352
|
-
if (!decoded) {
|
|
353
|
-
spinner.fail('Invalid session');
|
|
354
|
-
return;
|
|
355
|
-
}
|
|
356
|
-
const result = await this.authModule.generateAPIKey(decoded.userId);
|
|
357
|
-
if (result.success) {
|
|
358
|
-
spinner.succeed('API key generated');
|
|
359
|
-
console.log(chalk_1.default.cyan('\n🔑 API Key\n'));
|
|
360
|
-
console.log(chalk_1.default.yellow(result.apiKey));
|
|
361
|
-
console.log(chalk_1.default.gray('\nStore this key securely. It will not be shown again.'));
|
|
362
|
-
console.log(chalk_1.default.gray('Use this key with: a6s auth login --api-key'));
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
catch (error) {
|
|
366
|
-
spinner.fail('Failed to generate API key');
|
|
367
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
async listUsers() {
|
|
371
|
-
console.log(chalk_1.default.cyan('\n👥 Admin Users\n'));
|
|
372
|
-
// This would typically fetch from the user store
|
|
373
|
-
const users = [
|
|
374
|
-
{ email: 'admin@theautonoma.io', role: 'super_admin', mfa: true, lastLogin: '2025-08-28' },
|
|
375
|
-
{ email: 'devops@theautonoma.io', role: 'devops_admin', mfa: true, lastLogin: '2025-08-27' },
|
|
376
|
-
{ email: 'security@theautonoma.io', role: 'security_admin', mfa: true, lastLogin: '2025-08-26' },
|
|
377
|
-
{ email: 'support@theautonoma.io', role: 'support_admin', mfa: false, lastLogin: '2025-08-25' }
|
|
378
|
-
];
|
|
379
|
-
console.table(users);
|
|
380
|
-
}
|
|
381
|
-
async auditLogs(options = {}) {
|
|
382
|
-
const spinner = (0, ora_1.default)('Fetching audit logs...').start();
|
|
383
|
-
try {
|
|
384
|
-
const filters = {};
|
|
385
|
-
if (options.user)
|
|
386
|
-
filters.userId = options.user;
|
|
387
|
-
if (options.action)
|
|
388
|
-
filters.action = options.action;
|
|
389
|
-
if (options.days) {
|
|
390
|
-
const startDate = new Date();
|
|
391
|
-
startDate.setDate(startDate.getDate() - parseInt(options.days));
|
|
392
|
-
filters.startDate = startDate;
|
|
393
|
-
}
|
|
394
|
-
const logs = await this.authModule.getAuditLogs(filters);
|
|
395
|
-
spinner.succeed(`Found ${logs.length} audit events`);
|
|
396
|
-
if (logs.length > 0) {
|
|
397
|
-
console.log(chalk_1.default.cyan('\n📋 Audit Logs\n'));
|
|
398
|
-
const formattedLogs = logs.slice(0, 50).map(log => ({
|
|
399
|
-
Time: new Date(log.timestamp).toLocaleString(),
|
|
400
|
-
User: log.userId,
|
|
401
|
-
Action: log.action,
|
|
402
|
-
Resource: log.resource,
|
|
403
|
-
Result: log.result,
|
|
404
|
-
IP: log.ipAddress
|
|
405
|
-
}));
|
|
406
|
-
console.table(formattedLogs);
|
|
407
|
-
if (logs.length > 50) {
|
|
408
|
-
console.log(chalk_1.default.gray(`\n... and ${logs.length - 50} more events`));
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
catch (error) {
|
|
413
|
-
spinner.fail('Failed to fetch audit logs');
|
|
414
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
async complianceReport() {
|
|
418
|
-
const spinner = (0, ora_1.default)('Generating compliance report...').start();
|
|
419
|
-
try {
|
|
420
|
-
const report = await this.authModule.generateComplianceReport();
|
|
421
|
-
spinner.succeed('Compliance report generated');
|
|
422
|
-
console.log(chalk_1.default.cyan('\n📊 Compliance Report\n'));
|
|
423
|
-
console.log(chalk_1.default.blue('Generated:'), new Date(report.timestamp).toLocaleString());
|
|
424
|
-
console.log(chalk_1.default.blue('\n👥 Users:'));
|
|
425
|
-
console.log(` Total: ${report.users.total}`);
|
|
426
|
-
console.log(` MFA Enabled: ${report.users.mfaEnabled}`);
|
|
427
|
-
console.log(` By Role:`);
|
|
428
|
-
for (const [role, count] of Object.entries(report.users.byRole)) {
|
|
429
|
-
console.log(` • ${role}: ${count}`);
|
|
430
|
-
}
|
|
431
|
-
console.log(chalk_1.default.blue('\n🔐 Security:'));
|
|
432
|
-
console.log(` Active Sessions: ${report.sessions.active}`);
|
|
433
|
-
console.log(` MFA Verified Sessions: ${report.sessions.mfaVerified}`);
|
|
434
|
-
console.log(` Failed Login Attempts: ${report.security.failedLogins}`);
|
|
435
|
-
console.log(` Locked Accounts: ${report.security.lockedAccounts}`);
|
|
436
|
-
console.log(` Active API Keys: ${report.security.apiKeysActive}`);
|
|
437
|
-
console.log(` SSH Keys Configured: ${report.security.sshKeysConfigured}`);
|
|
438
|
-
console.log(chalk_1.default.blue('\n📋 Audit:'));
|
|
439
|
-
console.log(` Total Events: ${report.audit.totalEvents}`);
|
|
440
|
-
console.log(` Successful Logins: ${report.audit.successfulLogins}`);
|
|
441
|
-
console.log(` Failed Logins: ${report.audit.failedLogins}`);
|
|
442
|
-
console.log(` Privileged Actions: ${report.audit.privilegedActions}`);
|
|
443
|
-
}
|
|
444
|
-
catch (error) {
|
|
445
|
-
spinner.fail('Failed to generate compliance report');
|
|
446
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
// Helper methods
|
|
450
|
-
hasValidSession() {
|
|
451
|
-
const token = this.getStoredToken();
|
|
452
|
-
if (!token)
|
|
453
|
-
return false;
|
|
454
|
-
try {
|
|
455
|
-
const decoded = this.decodeToken(token);
|
|
456
|
-
return decoded && new Date(decoded.exp * 1000) > new Date();
|
|
457
|
-
}
|
|
458
|
-
catch {
|
|
459
|
-
return false;
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
getStoredToken() {
|
|
463
|
-
if ((0, fs_1.existsSync)(TOKEN_STORAGE_PATH)) {
|
|
464
|
-
return (0, fs_1.readFileSync)(TOKEN_STORAGE_PATH, 'utf-8');
|
|
465
|
-
}
|
|
466
|
-
return null;
|
|
467
|
-
}
|
|
468
|
-
saveSession(token) {
|
|
469
|
-
const dir = (0, path_1.join)((0, os_1.homedir)(), '.autonoma-cli');
|
|
470
|
-
if (!(0, fs_1.existsSync)(dir)) {
|
|
471
|
-
require('fs').mkdirSync(dir, { recursive: true });
|
|
472
|
-
}
|
|
473
|
-
(0, fs_1.writeFileSync)(TOKEN_STORAGE_PATH, token);
|
|
474
|
-
}
|
|
475
|
-
clearSession() {
|
|
476
|
-
if ((0, fs_1.existsSync)(TOKEN_STORAGE_PATH)) {
|
|
477
|
-
require('fs').unlinkSync(TOKEN_STORAGE_PATH);
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
decodeToken(token) {
|
|
481
|
-
try {
|
|
482
|
-
const parts = token.split('.');
|
|
483
|
-
if (parts.length !== 3)
|
|
484
|
-
return null;
|
|
485
|
-
const payload = Buffer.from(parts[1], 'base64').toString();
|
|
486
|
-
return JSON.parse(payload);
|
|
487
|
-
}
|
|
488
|
-
catch {
|
|
489
|
-
return null;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
async displayUserInfo(token) {
|
|
493
|
-
const decoded = this.decodeToken(token);
|
|
494
|
-
if (decoded) {
|
|
495
|
-
console.log(chalk_1.default.cyan('\n👤 Current User\n'));
|
|
496
|
-
console.log(` Email: ${decoded.email}`);
|
|
497
|
-
console.log(` Role: ${decoded.role}`);
|
|
498
|
-
console.log(` Permissions: ${decoded.permissions?.length || 0}`);
|
|
499
|
-
console.log(` Session expires: ${new Date(decoded.exp * 1000).toLocaleString()}`);
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
verificationCodes = new Map();
|
|
503
|
-
storeVerificationCode(email, code, expiry) {
|
|
504
|
-
this.verificationCodes.set(email, { code, expiry });
|
|
505
|
-
}
|
|
506
|
-
verifyCode(email, inputCode) {
|
|
507
|
-
const stored = this.verificationCodes.get(email);
|
|
508
|
-
if (!stored)
|
|
509
|
-
return false;
|
|
510
|
-
if (Date.now() > stored.expiry) {
|
|
511
|
-
this.verificationCodes.delete(email);
|
|
512
|
-
return false;
|
|
513
|
-
}
|
|
514
|
-
if (stored.code === inputCode) {
|
|
515
|
-
this.verificationCodes.delete(email);
|
|
516
|
-
return true;
|
|
517
|
-
}
|
|
518
|
-
return false;
|
|
519
|
-
}
|
|
520
|
-
generateTempPassword() {
|
|
521
|
-
return require('crypto').randomBytes(32).toString('hex');
|
|
522
|
-
}
|
|
523
|
-
tempPasswords = new Map();
|
|
524
|
-
getTempPassword(email) {
|
|
525
|
-
let password = this.tempPasswords.get(email);
|
|
526
|
-
if (!password) {
|
|
527
|
-
password = this.generateTempPassword();
|
|
528
|
-
this.tempPasswords.set(email, password);
|
|
529
|
-
}
|
|
530
|
-
return password;
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
exports.AuthCommand = AuthCommand;
|
|
534
|
-
// CLI Command Setup
|
|
535
|
-
function setupAuthCommands(program) {
|
|
536
|
-
const auth = program
|
|
537
|
-
.command('auth')
|
|
538
|
-
.description('Authentication and access control');
|
|
539
|
-
const authCommand = new AuthCommand();
|
|
540
|
-
auth
|
|
541
|
-
.command('login')
|
|
542
|
-
.description('Login to Autonoma Admin CLI')
|
|
543
|
-
.option('-f, --force', 'Force new login even if session exists')
|
|
544
|
-
.option('--api-key', 'Login with API key')
|
|
545
|
-
.option('--ssh', 'Login with SSH key')
|
|
546
|
-
.option('--aws', 'Login with AWS IAM role')
|
|
547
|
-
.action(async (options) => {
|
|
548
|
-
await authCommand.login(options);
|
|
549
|
-
});
|
|
550
|
-
auth
|
|
551
|
-
.command('logout')
|
|
552
|
-
.description('Logout from Autonoma Admin CLI')
|
|
553
|
-
.action(async () => {
|
|
554
|
-
await authCommand.logout();
|
|
555
|
-
});
|
|
556
|
-
auth
|
|
557
|
-
.command('whoami')
|
|
558
|
-
.description('Display current user information')
|
|
559
|
-
.action(async () => {
|
|
560
|
-
await authCommand.whoami();
|
|
561
|
-
});
|
|
562
|
-
auth
|
|
563
|
-
.command('setup-mfa')
|
|
564
|
-
.description('Setup multi-factor authentication')
|
|
565
|
-
.action(async () => {
|
|
566
|
-
await authCommand.setupMFA();
|
|
567
|
-
});
|
|
568
|
-
auth
|
|
569
|
-
.command('generate-api-key')
|
|
570
|
-
.description('Generate a new API key')
|
|
571
|
-
.action(async () => {
|
|
572
|
-
await authCommand.generateAPIKey();
|
|
573
|
-
});
|
|
574
|
-
auth
|
|
575
|
-
.command('list-users')
|
|
576
|
-
.description('List all admin users')
|
|
577
|
-
.action(async () => {
|
|
578
|
-
await authCommand.listUsers();
|
|
579
|
-
});
|
|
580
|
-
auth
|
|
581
|
-
.command('audit')
|
|
582
|
-
.description('View audit logs')
|
|
583
|
-
.option('-u, --user <email>', 'Filter by user')
|
|
584
|
-
.option('-a, --action <action>', 'Filter by action')
|
|
585
|
-
.option('-d, --days <days>', 'Show logs from last N days', '7')
|
|
586
|
-
.action(async (options) => {
|
|
587
|
-
await authCommand.auditLogs(options);
|
|
588
|
-
});
|
|
589
|
-
auth
|
|
590
|
-
.command('compliance')
|
|
591
|
-
.description('Generate compliance report')
|
|
592
|
-
.action(async () => {
|
|
593
|
-
await authCommand.complianceReport();
|
|
594
|
-
});
|
|
595
|
-
auth
|
|
596
|
-
.command('info')
|
|
597
|
-
.description('Display access control configuration')
|
|
598
|
-
.action(async () => {
|
|
599
|
-
const authModule = new auth_access_control_1.AuthAccessControlModule();
|
|
600
|
-
await authModule.displayAccessInfo();
|
|
601
|
-
});
|
|
602
|
-
}
|
|
603
|
-
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
interface ExperimentOptions {
|
|
2
|
-
variants?: string;
|
|
3
|
-
split?: string;
|
|
4
|
-
}
|
|
5
|
-
export declare class ABTestingModule {
|
|
6
|
-
private dbClient;
|
|
7
|
-
constructor();
|
|
8
|
-
createExperiment(name: string, options?: ExperimentOptions): Promise<void>;
|
|
9
|
-
showMetrics(experimentName?: string): Promise<void>;
|
|
10
|
-
concludeExperiment(name: string): Promise<void>;
|
|
11
|
-
private calculateMetrics;
|
|
12
|
-
private getStatusColor;
|
|
13
|
-
private showRecommendations;
|
|
14
|
-
}
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=ab-testing.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ab-testing.d.ts","sourceRoot":"","sources":["../../src/modules/ab-testing.ts"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;;IAOnB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB;IAyG9D,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM;IAqGnC,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAuGrC,OAAO,CAAC,gBAAgB;IAiExB,OAAO,CAAC,cAAc;YAaR,mBAAmB;CA0BlC"}
|