@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.
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAuthCommands(program: Command): void;
@@ -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,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerComputeProgram(program: Command): void;
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js CHANGED
@@ -1,2 +1,24 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
2
- console.log('Hello World');
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,12 @@
1
+ /**
2
+ * User credentials stored in the config file
3
+ */
4
+ export interface UserCredentials {
5
+ domain: string;
6
+ email: string;
7
+ token: string;
8
+ apiServerUrl: string;
9
+ name: string;
10
+ picture: string;
11
+ timestamp?: number;
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":""}