@nestbox-ai/cli 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/auth.d.ts +2 -0
- package/dist/commands/auth.js +254 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/compute.d.ts +2 -0
- package/dist/commands/compute.js +132 -0
- package/dist/commands/compute.js.map +1 -0
- package/dist/commands/projects.d.ts +13 -0
- package/dist/commands/projects.js +126 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -0
- package/dist/types/auth.d.ts +12 -0
- package/dist/types/auth.js +3 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/utils/auth.d.ts +27 -0
- package/dist/utils/auth.js +159 -0
- package/dist/utils/auth.js.map +1 -0
- package/package.json +30 -5
- package/src/commands/auth.ts +267 -0
- package/src/commands/compute.ts +147 -0
- package/src/commands/projects.ts +139 -0
- package/src/index.ts +24 -1
- package/src/types/auth.ts +12 -0
- package/src/utils/auth.ts +177 -0
- package/tsconfig.json +4 -1
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.registerAuthCommands = registerAuthCommands;
|
|
16
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
17
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
18
|
+
const open_1 = __importDefault(require("open"));
|
|
19
|
+
const ora_1 = __importDefault(require("ora"));
|
|
20
|
+
const fs_1 = __importDefault(require("fs"));
|
|
21
|
+
const os_1 = __importDefault(require("os"));
|
|
22
|
+
const path_1 = __importDefault(require("path"));
|
|
23
|
+
const auth_1 = require("../utils/auth");
|
|
24
|
+
const admin_1 = require("@nestbox-ai/admin");
|
|
25
|
+
const axios_1 = __importDefault(require("axios"));
|
|
26
|
+
function registerAuthCommands(program) {
|
|
27
|
+
// Login command
|
|
28
|
+
program
|
|
29
|
+
.command('login <nestbox-domain>')
|
|
30
|
+
.description('Login using Google SSO')
|
|
31
|
+
.action((domain) => __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
var _a;
|
|
33
|
+
console.log('Login command triggered for domain:', domain);
|
|
34
|
+
const spinner = (0, ora_1.default)('Initiating Google login...').start();
|
|
35
|
+
try {
|
|
36
|
+
// Determine the protocol and construct the auth URL based on the provided domain
|
|
37
|
+
let authUrl;
|
|
38
|
+
if (domain.includes('localhost')) {
|
|
39
|
+
// Use HTTP for localhost and specific port
|
|
40
|
+
authUrl = `http://${domain}/cli/auth`;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Use HTTPS for all other domains
|
|
44
|
+
authUrl = `https://${domain}/cli/auth`;
|
|
45
|
+
}
|
|
46
|
+
spinner.text = 'Opening browser for Google authentication...';
|
|
47
|
+
// Open the browser for authentication
|
|
48
|
+
yield (0, open_1.default)(authUrl);
|
|
49
|
+
spinner.succeed('Browser opened for authentication');
|
|
50
|
+
// Prompt user to paste the combined token and API URL
|
|
51
|
+
const { combinedInput } = yield inquirer_1.default.prompt([
|
|
52
|
+
{
|
|
53
|
+
type: 'input',
|
|
54
|
+
name: 'combinedInput',
|
|
55
|
+
message: 'After authenticating, please paste the data here:',
|
|
56
|
+
validate: (input) => input.trim().length > 0 || 'Input is required'
|
|
57
|
+
}
|
|
58
|
+
]);
|
|
59
|
+
// Split the input by comma
|
|
60
|
+
const [accessToken, apiServerUrl] = combinedInput.split(',').map(item => item.trim());
|
|
61
|
+
if (!accessToken || !apiServerUrl) {
|
|
62
|
+
spinner.fail('Invalid input format. Expected: token,apiServerUrl');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
console.log(chalk_1.default.green('Credentials received. Extracting user information...'));
|
|
66
|
+
// Fetch user data from the token
|
|
67
|
+
let email = '';
|
|
68
|
+
let name = '';
|
|
69
|
+
let picture = '';
|
|
70
|
+
try {
|
|
71
|
+
// Try to decode JWT to get user data (email, name, picture, etc.)
|
|
72
|
+
const tokenParts = accessToken.split('.');
|
|
73
|
+
if (tokenParts.length === 3) {
|
|
74
|
+
// Base64 decode the payload part of JWT
|
|
75
|
+
const base64Payload = tokenParts[1].replace(/-/g, '+').replace(/_/g, '/');
|
|
76
|
+
const decodedPayload = Buffer.from(base64Payload, 'base64').toString('utf-8');
|
|
77
|
+
const tokenPayload = JSON.parse(decodedPayload);
|
|
78
|
+
// Extract user information
|
|
79
|
+
email = tokenPayload.email || '';
|
|
80
|
+
name = tokenPayload.name || '';
|
|
81
|
+
picture = tokenPayload.picture || '';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
console.log(chalk_1.default.yellow('Could not decode token payload. Will prompt for email.'));
|
|
86
|
+
}
|
|
87
|
+
// If email couldn't be extracted from token, prompt user
|
|
88
|
+
if (!email) {
|
|
89
|
+
const response = yield inquirer_1.default.prompt([
|
|
90
|
+
{
|
|
91
|
+
type: 'input',
|
|
92
|
+
name: 'email',
|
|
93
|
+
message: 'Enter your email address:',
|
|
94
|
+
validate: (input) => /\S+@\S+\.\S+/.test(input) || 'Please enter a valid email'
|
|
95
|
+
}
|
|
96
|
+
]);
|
|
97
|
+
email = response.email;
|
|
98
|
+
}
|
|
99
|
+
spinner.start('Verifying access token...');
|
|
100
|
+
if (apiServerUrl && email && accessToken) {
|
|
101
|
+
// Verify the access token
|
|
102
|
+
const configuration = new admin_1.Configuration({
|
|
103
|
+
basePath: apiServerUrl,
|
|
104
|
+
accessToken: accessToken,
|
|
105
|
+
});
|
|
106
|
+
const authApi = new admin_1.AuthApi(configuration);
|
|
107
|
+
try {
|
|
108
|
+
const response = yield authApi.authControllerOAuthLogin({
|
|
109
|
+
providerId: accessToken,
|
|
110
|
+
type: admin_1.OAuthLoginRequestDTOTypeEnum.Google,
|
|
111
|
+
email,
|
|
112
|
+
profilePictureUrl: picture || '',
|
|
113
|
+
});
|
|
114
|
+
const authResponse = response.data;
|
|
115
|
+
// Save credentials to file
|
|
116
|
+
try {
|
|
117
|
+
// Create directory structure
|
|
118
|
+
const configDir = path_1.default.join(os_1.default.homedir(), '.config', '.nestbox');
|
|
119
|
+
if (!fs_1.default.existsSync(configDir)) {
|
|
120
|
+
fs_1.default.mkdirSync(configDir, { recursive: true });
|
|
121
|
+
}
|
|
122
|
+
// Create the file path
|
|
123
|
+
const fileName = `${email.replace('@', '_at_')}_${domain}.json`;
|
|
124
|
+
const filePath = path_1.default.join(configDir, fileName);
|
|
125
|
+
// Create credentials object
|
|
126
|
+
const credentials = {
|
|
127
|
+
domain,
|
|
128
|
+
email,
|
|
129
|
+
token: authResponse.token,
|
|
130
|
+
apiServerUrl,
|
|
131
|
+
name,
|
|
132
|
+
picture,
|
|
133
|
+
timestamp: new Date().toISOString()
|
|
134
|
+
};
|
|
135
|
+
// Write to file
|
|
136
|
+
fs_1.default.writeFileSync(filePath, JSON.stringify(credentials, null, 2));
|
|
137
|
+
spinner.succeed('Authentication successful');
|
|
138
|
+
console.log(chalk_1.default.green(`Successfully logged in as ${email}`));
|
|
139
|
+
console.log(chalk_1.default.blue(`Credentials saved to: ${filePath}`));
|
|
140
|
+
}
|
|
141
|
+
catch (fileError) {
|
|
142
|
+
spinner.warn('Authentication successful, but failed to save credentials file');
|
|
143
|
+
console.error(chalk_1.default.yellow('File error:'), fileError instanceof Error ? fileError.message : 'Unknown error');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (authError) {
|
|
147
|
+
spinner.fail('Failed to verify access token');
|
|
148
|
+
if (axios_1.default.isAxiosError(authError) && authError.response) {
|
|
149
|
+
console.error(chalk_1.default.red('Authentication Error:'), ((_a = authError.response.data) === null || _a === void 0 ? void 0 : _a.message) || 'Unknown authentication error');
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.error(chalk_1.default.red('Authentication Error:'), authError instanceof Error ? authError.message : 'Unknown error');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
spinner.fail('Missing required information for authentication');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
spinner.fail('Authentication failed');
|
|
162
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
163
|
+
}
|
|
164
|
+
}));
|
|
165
|
+
// Logout command
|
|
166
|
+
program
|
|
167
|
+
.command('logout [nestbox-domain]')
|
|
168
|
+
.description('Logout from Nestbox platform')
|
|
169
|
+
.action((domain) => __awaiter(this, void 0, void 0, function* () {
|
|
170
|
+
try {
|
|
171
|
+
const authToken = (0, auth_1.getAuthToken)(domain);
|
|
172
|
+
if (!authToken) {
|
|
173
|
+
console.log(chalk_1.default.yellow('No authentication token found. Please log in first.'));
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// Function to remove all credential files for a domain
|
|
177
|
+
const removeCredentialFiles = (domain) => {
|
|
178
|
+
try {
|
|
179
|
+
const configDir = path_1.default.join(os_1.default.homedir(), '.config', '.nestbox');
|
|
180
|
+
if (!fs_1.default.existsSync(configDir)) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
// Sanitize domain for file matching
|
|
184
|
+
// Replace characters that are problematic in filenames
|
|
185
|
+
const sanitizedDomain = domain.replace(/:/g, '_');
|
|
186
|
+
// Get all files in the directory
|
|
187
|
+
const files = fs_1.default.readdirSync(configDir);
|
|
188
|
+
// Find and remove all files that match the domain
|
|
189
|
+
let removedCount = 0;
|
|
190
|
+
for (const file of files) {
|
|
191
|
+
// Check if the file matches any of the possible domain formats
|
|
192
|
+
if (file.endsWith(`_${domain}.json`) ||
|
|
193
|
+
file.endsWith(`_${sanitizedDomain}.json`)) {
|
|
194
|
+
fs_1.default.unlinkSync(path_1.default.join(configDir, file));
|
|
195
|
+
removedCount++;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return removedCount > 0;
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
console.warn(chalk_1.default.yellow(`Warning: Could not remove credential files. ${error instanceof Error ? error.message : ''}`));
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
if (domain) {
|
|
206
|
+
// Logout from specific domain
|
|
207
|
+
// Remove credentials using utility function
|
|
208
|
+
const removed = (0, auth_1.removeCredentials)(domain);
|
|
209
|
+
// Also remove all credential files for this domain
|
|
210
|
+
const filesRemoved = removeCredentialFiles(domain);
|
|
211
|
+
if (removed || filesRemoved) {
|
|
212
|
+
console.log(chalk_1.default.green(`Successfully logged out from ${domain}`));
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
console.log(chalk_1.default.yellow(`No credentials found for ${domain}`));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// Ask which domain to logout from
|
|
220
|
+
const credentials = (0, auth_1.listCredentials)();
|
|
221
|
+
if (credentials.length === 0) {
|
|
222
|
+
console.log(chalk_1.default.yellow('No credentials found'));
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// Group credentials by domain
|
|
226
|
+
const domains = Array.from(new Set(credentials.map(cred => cred.domain)));
|
|
227
|
+
const domainChoices = domains.map(domain => {
|
|
228
|
+
const accounts = credentials.filter(cred => cred.domain === domain);
|
|
229
|
+
return `${domain} (${accounts.length} account${accounts.length > 1 ? 's' : ''})`;
|
|
230
|
+
});
|
|
231
|
+
const { selected } = yield inquirer_1.default.prompt([
|
|
232
|
+
{
|
|
233
|
+
type: 'list',
|
|
234
|
+
name: 'selected',
|
|
235
|
+
message: 'Select domain to logout from:',
|
|
236
|
+
choices: domainChoices,
|
|
237
|
+
}
|
|
238
|
+
]);
|
|
239
|
+
// Extract domain from the selected choice
|
|
240
|
+
const selectedDomain = selected.split(' ')[0];
|
|
241
|
+
// Remove credentials using utility function
|
|
242
|
+
(0, auth_1.removeCredentials)(selectedDomain);
|
|
243
|
+
// Also remove all credential files for this domain
|
|
244
|
+
removeCredentialFiles(selectedDomain);
|
|
245
|
+
console.log(chalk_1.default.green(`Successfully logged out from ${selectedDomain}`));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
const err = error;
|
|
250
|
+
console.error(chalk_1.default.red('Error:'), err.message);
|
|
251
|
+
}
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
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.registerComputeProgram = registerComputeProgram;
|
|
7
|
+
const auth_1 = require("../utils/auth");
|
|
8
|
+
const admin_1 = require("@nestbox-ai/admin");
|
|
9
|
+
const projects_1 = require("./projects");
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
12
|
+
function registerComputeProgram(program) {
|
|
13
|
+
const authToken = (0, auth_1.getAuthToken)();
|
|
14
|
+
const configuration = new admin_1.Configuration({
|
|
15
|
+
basePath: authToken === null || authToken === void 0 ? void 0 : authToken.serverUrl,
|
|
16
|
+
baseOptions: {
|
|
17
|
+
headers: {
|
|
18
|
+
"Authorization": authToken === null || authToken === void 0 ? void 0 : authToken.token,
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
const machineInstanceApi = new admin_1.MachineInstancesApi(configuration);
|
|
23
|
+
const projectsApi = new admin_1.ProjectsApi(configuration);
|
|
24
|
+
// Create the main project command
|
|
25
|
+
const projectCommand = program
|
|
26
|
+
.command('compute')
|
|
27
|
+
.description('Manage Nestbox computes');
|
|
28
|
+
projectCommand
|
|
29
|
+
.command('list')
|
|
30
|
+
.description('list all instances')
|
|
31
|
+
.action(() => {
|
|
32
|
+
try {
|
|
33
|
+
if (!authToken) {
|
|
34
|
+
console.error(chalk_1.default.red('No authentication token found. Please login first.'));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const config = (0, projects_1.readNestboxConfig)();
|
|
38
|
+
// Set the default project
|
|
39
|
+
config.projects = config.projects || {};
|
|
40
|
+
// Get the default project name
|
|
41
|
+
const defaultProjectName = config.projects.default;
|
|
42
|
+
if (!defaultProjectName) {
|
|
43
|
+
console.log(chalk_1.default.yellow('No default project set. Use "nestbox project set-default <project-name>" to set a default project.'));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk_1.default.blue(`Fetching compute instances for project: ${defaultProjectName}`));
|
|
47
|
+
// Call API to get all projects
|
|
48
|
+
const response = projectsApi.projectControllerGetAllProjects();
|
|
49
|
+
response.then((response) => {
|
|
50
|
+
// Check if the response contains projects
|
|
51
|
+
if (response.data && response.data.data && response.data.data.projects && response.data.data.projects.length > 0) {
|
|
52
|
+
const defaultProject = response.data.data.projects.find((project) => project.name === defaultProjectName);
|
|
53
|
+
if (defaultProject) {
|
|
54
|
+
const machineInstancesResponse = machineInstanceApi.machineInstancesControllerGetMachineInstanceByUserId(defaultProject.id, 0, 10);
|
|
55
|
+
machineInstancesResponse.then((instancesResponse) => {
|
|
56
|
+
if (instancesResponse.data && instancesResponse.data.machineInstances) {
|
|
57
|
+
const instances = instancesResponse.data.machineInstances;
|
|
58
|
+
if (instances.length === 0) {
|
|
59
|
+
console.log(chalk_1.default.yellow('No compute instances found for this project.'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const table = new cli_table3_1.default({
|
|
63
|
+
head: [
|
|
64
|
+
chalk_1.default.white.bold('ID'),
|
|
65
|
+
chalk_1.default.white.bold('Name'),
|
|
66
|
+
chalk_1.default.white.bold('Status'),
|
|
67
|
+
chalk_1.default.white.bold('API Key')
|
|
68
|
+
],
|
|
69
|
+
style: {
|
|
70
|
+
head: [], // Disable the default styling
|
|
71
|
+
border: []
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
// Add rows to the table
|
|
75
|
+
instances.forEach((instance) => {
|
|
76
|
+
var _a;
|
|
77
|
+
// Color the status based on its value
|
|
78
|
+
let statusColor;
|
|
79
|
+
const status = ((_a = instance.runningStatus) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || 'unknown';
|
|
80
|
+
switch (true) {
|
|
81
|
+
case status.includes('executed'):
|
|
82
|
+
statusColor = chalk_1.default.green(instance.runningStatus);
|
|
83
|
+
break;
|
|
84
|
+
case status.includes('failed') || status.includes('error'):
|
|
85
|
+
statusColor = chalk_1.default.red(instance.runningStatus);
|
|
86
|
+
break;
|
|
87
|
+
case status.includes('running') || status.includes('started'):
|
|
88
|
+
statusColor = chalk_1.default.green(instance.runningStatus);
|
|
89
|
+
break;
|
|
90
|
+
case status.includes('stopped'):
|
|
91
|
+
statusColor = chalk_1.default.red(instance.runningStatus);
|
|
92
|
+
break;
|
|
93
|
+
case status.includes('starting') || status.includes('pending'):
|
|
94
|
+
statusColor = chalk_1.default.yellow(instance.runningStatus);
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
statusColor = chalk_1.default.gray(instance.runningStatus || 'unknown');
|
|
98
|
+
}
|
|
99
|
+
table.push([
|
|
100
|
+
instance.id || 'N/A',
|
|
101
|
+
instance.instanceName || 'N/A',
|
|
102
|
+
statusColor,
|
|
103
|
+
instance.instanceApiKey || 'N/A'
|
|
104
|
+
]);
|
|
105
|
+
});
|
|
106
|
+
// Display the table
|
|
107
|
+
console.log(table.toString());
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log(chalk_1.default.yellow('No compute instance data returned from the API.'));
|
|
111
|
+
}
|
|
112
|
+
}).catch((error) => {
|
|
113
|
+
console.error(chalk_1.default.red('Error fetching compute instances:'), error instanceof Error ? error.message : 'Unknown error');
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.log(chalk_1.default.yellow(`Default project "${defaultProjectName}" not found among available projects.`));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.log(chalk_1.default.yellow('No projects found.'));
|
|
122
|
+
}
|
|
123
|
+
}).catch((error) => {
|
|
124
|
+
console.error(chalk_1.default.red('Error fetching projects:'), error instanceof Error ? error.message : 'Unknown error');
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=compute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute.js","sourceRoot":"","sources":["../../src/commands/compute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
interface ProjectsConfig {
|
|
3
|
+
default?: string;
|
|
4
|
+
[key: string]: string | undefined;
|
|
5
|
+
}
|
|
6
|
+
interface NestboxConfig {
|
|
7
|
+
projects: ProjectsConfig;
|
|
8
|
+
}
|
|
9
|
+
export declare function getNestboxConfigPath(): string;
|
|
10
|
+
export declare function readNestboxConfig(): NestboxConfig;
|
|
11
|
+
export declare function writeNestboxConfig(config: NestboxConfig): void;
|
|
12
|
+
export declare function registerProjectCommands(program: Command): void;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
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.getNestboxConfigPath = getNestboxConfigPath;
|
|
7
|
+
exports.readNestboxConfig = readNestboxConfig;
|
|
8
|
+
exports.writeNestboxConfig = writeNestboxConfig;
|
|
9
|
+
exports.registerProjectCommands = registerProjectCommands;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const auth_1 = require("../utils/auth");
|
|
14
|
+
const admin_1 = require("@nestbox-ai/admin");
|
|
15
|
+
// Utility functions for project configuration
|
|
16
|
+
function getNestboxConfigPath() {
|
|
17
|
+
return path_1.default.join(process.cwd(), '.nestboxrc');
|
|
18
|
+
}
|
|
19
|
+
function readNestboxConfig() {
|
|
20
|
+
const configPath = getNestboxConfigPath();
|
|
21
|
+
if (fs_1.default.existsSync(configPath)) {
|
|
22
|
+
try {
|
|
23
|
+
const content = fs_1.default.readFileSync(configPath, 'utf8');
|
|
24
|
+
return JSON.parse(content);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
return { projects: {} };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return { projects: {} };
|
|
31
|
+
}
|
|
32
|
+
function writeNestboxConfig(config) {
|
|
33
|
+
const configPath = getNestboxConfigPath();
|
|
34
|
+
fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
35
|
+
}
|
|
36
|
+
function registerProjectCommands(program) {
|
|
37
|
+
const authToken = (0, auth_1.getAuthToken)();
|
|
38
|
+
const configuration = new admin_1.Configuration({
|
|
39
|
+
basePath: authToken === null || authToken === void 0 ? void 0 : authToken.serverUrl,
|
|
40
|
+
baseOptions: {
|
|
41
|
+
headers: {
|
|
42
|
+
"Authorization": authToken === null || authToken === void 0 ? void 0 : authToken.token,
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const projectsApi = new admin_1.ProjectsApi(configuration);
|
|
47
|
+
// Create the main project command
|
|
48
|
+
const projectCommand = program
|
|
49
|
+
.command('project')
|
|
50
|
+
.description('Manage Nestbox projects');
|
|
51
|
+
// Add the basic 'use' subcommand
|
|
52
|
+
projectCommand
|
|
53
|
+
.command('use <project-name>')
|
|
54
|
+
.description('Set default project for all commands')
|
|
55
|
+
.action((projectName) => {
|
|
56
|
+
try {
|
|
57
|
+
if (!authToken) {
|
|
58
|
+
console.error(chalk_1.default.red('No authentication token found. Please log in first.'));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const config = readNestboxConfig();
|
|
62
|
+
// Set the default project
|
|
63
|
+
config.projects = config.projects || {};
|
|
64
|
+
config.projects.default = projectName;
|
|
65
|
+
projectsApi.projectControllerGetAllProjects()
|
|
66
|
+
.then((response) => {
|
|
67
|
+
// Check if the project exists
|
|
68
|
+
const projectExists = response.data.data.projects.some((project) => project.name === projectName);
|
|
69
|
+
if (!projectExists) {
|
|
70
|
+
throw new Error(`Project '${projectName}' does not exist.`);
|
|
71
|
+
}
|
|
72
|
+
// Write the configuration
|
|
73
|
+
writeNestboxConfig(config);
|
|
74
|
+
console.log(chalk_1.default.green(`Default project set to '${projectName}'`));
|
|
75
|
+
})
|
|
76
|
+
.catch((error) => {
|
|
77
|
+
console.error(error.message);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error(chalk_1.default.red('Error setting default project:'), error instanceof Error ? error.message : 'Unknown error');
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
// Add basic 'add' subcommand
|
|
85
|
+
projectCommand
|
|
86
|
+
.command('add <project-name> [alias]')
|
|
87
|
+
.description('Add a project with optional alias')
|
|
88
|
+
.action((projectName, alias) => {
|
|
89
|
+
try {
|
|
90
|
+
if (!authToken) {
|
|
91
|
+
console.error(chalk_1.default.red('No authentication token found. Please log in first.'));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const config = readNestboxConfig();
|
|
95
|
+
config.projects = config.projects || {};
|
|
96
|
+
// Check if the project already exists
|
|
97
|
+
if (config.projects[projectName]) {
|
|
98
|
+
console.error(chalk_1.default.red(`Project '${projectName}' already exists.`));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Check if the alias already exists
|
|
102
|
+
if (alias && config.projects[alias]) {
|
|
103
|
+
console.error(chalk_1.default.red(`Alias '${alias}' already exists.`));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (alias) {
|
|
107
|
+
config.projects[alias] = projectName;
|
|
108
|
+
console.log(chalk_1.default.green(`Added project '${projectName}' with alias '${alias}'`));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
config.projects[projectName] = projectName;
|
|
112
|
+
console.log(chalk_1.default.green(`Added project '${projectName}'`));
|
|
113
|
+
}
|
|
114
|
+
// If this is the first project, set it as default
|
|
115
|
+
if (!config.projects.default) {
|
|
116
|
+
config.projects.default = projectName;
|
|
117
|
+
console.log(chalk_1.default.green(`Set '${projectName}' as the default project`));
|
|
118
|
+
}
|
|
119
|
+
writeNestboxConfig(config);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error(chalk_1.default.red('Error adding project:'), error instanceof Error ? error.message : 'Unknown error');
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
CHANGED
|
@@ -1,2 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
"use strict";
|
|
2
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const auth_1 = require("./commands/auth");
|
|
6
|
+
const projects_1 = require("./commands/projects");
|
|
7
|
+
const compute_1 = require("./commands/compute");
|
|
8
|
+
// Setup the CLI program
|
|
9
|
+
const program = new commander_1.Command();
|
|
10
|
+
program
|
|
11
|
+
.name('nestbox')
|
|
12
|
+
.description('CLI tool for the Nestbox AI platform')
|
|
13
|
+
.version('1.0.0');
|
|
14
|
+
// Register command groups
|
|
15
|
+
(0, auth_1.registerAuthCommands)(program);
|
|
16
|
+
(0, projects_1.registerProjectCommands)(program);
|
|
17
|
+
(0, compute_1.registerComputeProgram)(program);
|
|
18
|
+
// Parse command line arguments
|
|
19
|
+
program.parse(process.argv);
|
|
20
|
+
// Only show help if no arguments were provided
|
|
21
|
+
if (process.argv.length === 2) {
|
|
22
|
+
program.help();
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,0CAAuD;AACvD,kDAA8D;AAC9D,gDAA4D;AAE5D,wBAAwB;AACxB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,0BAA0B;AAC1B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAEhC,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5B,+CAA+C;AAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":""}
|