@nestbox-ai/cli 1.0.24 → 1.0.25

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,11 @@
1
+ import { MachineInstancesApi, MiscellaneousApi, ProjectsApi } from "@nestbox-ai/admin";
2
+ export interface ComputeApiInstances {
3
+ machineInstanceApi: MachineInstancesApi;
4
+ miscellaneousApi: MiscellaneousApi;
5
+ projectsApi: ProjectsApi;
6
+ authToken: any;
7
+ }
8
+ /**
9
+ * Create API instances for compute commands using setupAuthAndConfig
10
+ */
11
+ export declare function createComputeApis(): ComputeApiInstances | null;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createComputeApis = createComputeApis;
4
+ const admin_1 = require("@nestbox-ai/admin");
5
+ const api_1 = require("../../utils/api");
6
+ /**
7
+ * Create API instances for compute commands using setupAuthAndConfig
8
+ */
9
+ function createComputeApis() {
10
+ const authResult = (0, api_1.setupAuthAndConfig)();
11
+ if (!authResult) {
12
+ return null;
13
+ }
14
+ const { authToken, configuration } = authResult;
15
+ return {
16
+ machineInstanceApi: new admin_1.MachineInstancesApi(configuration),
17
+ miscellaneousApi: new admin_1.MiscellaneousApi(configuration),
18
+ projectsApi: new admin_1.ProjectsApi(configuration),
19
+ authToken
20
+ };
21
+ }
22
+ //# sourceMappingURL=apiUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiUtils.js","sourceRoot":"","sources":["../../../src/commands/compute/apiUtils.ts"],"names":[],"mappings":";;AAaA,8CAcC;AA3BD,6CAAuF;AACvF,yCAAqD;AASrD;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,UAAU,GAAG,IAAA,wBAAkB,GAAE,CAAC;IACxC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC;IAEhD,OAAO;QACL,kBAAkB,EAAE,IAAI,2BAAmB,CAAC,aAAa,CAAC;QAC1D,gBAAgB,EAAE,IAAI,wBAAgB,CAAC,aAAa,CAAC;QACrD,WAAW,EAAE,IAAI,mBAAW,CAAC,aAAa,CAAC;QAC3C,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerCreateCommand(computeCommand: Command): void;
@@ -0,0 +1,183 @@
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.registerCreateCommand = registerCreateCommand;
16
+ const chalk_1 = __importDefault(require("chalk"));
17
+ const ora_1 = __importDefault(require("ora"));
18
+ const project_1 = require("../../utils/project");
19
+ const apiUtils_1 = require("./apiUtils");
20
+ const inquirer_1 = __importDefault(require("inquirer"));
21
+ const axios_1 = __importDefault(require("axios"));
22
+ const user_1 = require("../../utils/user");
23
+ function registerCreateCommand(computeCommand) {
24
+ computeCommand
25
+ .command('create')
26
+ .description('Create a new compute instance')
27
+ .requiredOption('--image <imageId>', 'Image ID to use for the compute instance')
28
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)')
29
+ .action((options) => __awaiter(this, void 0, void 0, function* () {
30
+ var _a, _b, _c;
31
+ try {
32
+ const apis = (0, apiUtils_1.createComputeApis)();
33
+ if (!apis) {
34
+ return;
35
+ }
36
+ const { miscellaneousApi, projectsApi, authToken } = apis;
37
+ // Resolve project using the shared utility
38
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
39
+ const spinner = (0, ora_1.default)(`Fetching available images...`).start();
40
+ try {
41
+ // Get available images data
42
+ const response = yield miscellaneousApi.miscellaneousControllerGetData();
43
+ const availableImages = response.data || [];
44
+ // Find the selected image
45
+ const selectedImage = availableImages.find((image) => image.id === options.image);
46
+ if (!selectedImage) {
47
+ spinner.fail(`Image ID '${options.image}' does not exist.`);
48
+ console.log(chalk_1.default.yellow('Available image IDs:'));
49
+ availableImages.forEach((img) => {
50
+ console.log(` ${chalk_1.default.cyan(img.id)} - ${img.name} (${img.type})`);
51
+ });
52
+ return;
53
+ }
54
+ spinner.succeed(`Found image: ${selectedImage.name}`);
55
+ // Ask for instance name first
56
+ const instanceNameAnswer = yield inquirer_1.default.prompt([
57
+ {
58
+ type: 'input',
59
+ name: 'instanceName',
60
+ message: 'Enter a name for this compute instance:',
61
+ validate: (input) => {
62
+ if (!input || input.trim() === '') {
63
+ return 'Instance name cannot be empty';
64
+ }
65
+ return true;
66
+ }
67
+ }
68
+ ]);
69
+ const instanceName = instanceNameAnswer.instanceName;
70
+ // Directly create the provisioningParams object with the structure needed for API
71
+ let provisioningParams = {};
72
+ if (selectedImage.provisioningParameters &&
73
+ selectedImage.provisioningParameters.properties) {
74
+ const requiredParams = selectedImage.provisioningParameters.required || [];
75
+ const paramProperties = selectedImage.provisioningParameters.properties;
76
+ // Build questions for inquirer
77
+ const questions = [];
78
+ for (const [paramName, paramConfig] of Object.entries(paramProperties)) {
79
+ const isRequired = requiredParams.includes(paramName);
80
+ const paramUI = ((_a = selectedImage.provisioningParametersUI) === null || _a === void 0 ? void 0 : _a[paramName]) || {};
81
+ let question = {
82
+ name: paramName,
83
+ message: paramUI['ui:title'] || `Enter ${paramName}:`,
84
+ when: isRequired // Only ask required params by default
85
+ };
86
+ // Handle different parameter types
87
+ if (paramConfig.type === 'string') {
88
+ if (paramConfig.enum) {
89
+ question.type = 'list';
90
+ question.choices = paramConfig.enum;
91
+ }
92
+ else if (paramUI['ui:widget'] === 'password') {
93
+ question.type = 'password';
94
+ }
95
+ else {
96
+ question.type = 'input';
97
+ }
98
+ }
99
+ else if (paramConfig.type === 'array') {
100
+ if (paramConfig.items && paramConfig.items.enum) {
101
+ question.type = 'checkbox';
102
+ question.choices = paramConfig.items.enum;
103
+ // Ensure at least one option is selected for required array parameters
104
+ question.validate = (input) => {
105
+ if (isRequired && (!input || input.length === 0)) {
106
+ return 'Please select at least one option';
107
+ }
108
+ return true;
109
+ };
110
+ }
111
+ }
112
+ if (paramUI['ui:help']) {
113
+ question.message += ` (${paramUI['ui:help']})`;
114
+ }
115
+ questions.push(question);
116
+ }
117
+ if (questions.length > 0) {
118
+ console.log(chalk_1.default.blue(`\nPlease provide the required parameters for ${selectedImage.name}:`));
119
+ const answers = yield inquirer_1.default.prompt(questions);
120
+ // Assign the answers directly to provisioningParams
121
+ for (const [key, value] of Object.entries(answers)) {
122
+ provisioningParams[key] = value;
123
+ }
124
+ }
125
+ }
126
+ // Now we have all the required params in provisioningParams
127
+ console.log(chalk_1.default.green(`\nCreating compute instance '${instanceName}' with image '${selectedImage.name}'`));
128
+ console.log(chalk_1.default.dim('Using the following parameters:'));
129
+ for (const [key, value] of Object.entries(provisioningParams)) {
130
+ console.log(chalk_1.default.dim(` ${key}: ${Array.isArray(value) ? value.join(', ') : value}`));
131
+ }
132
+ // Start a spinner for the creation process
133
+ const creationSpinner = (0, ora_1.default)('Creating compute instance...').start();
134
+ const getUserData = yield (0, user_1.userData)();
135
+ try {
136
+ const createParams = Object.assign({ userId: getUserData.id, machineId: selectedImage.id, machineTitle: selectedImage.name, instanceName: instanceName }, provisioningParams);
137
+ const createResponse = yield axios_1.default.post(`${authToken.serverUrl}/projects/${project.id}/instances`, createParams, {
138
+ headers: {
139
+ Authorization: authToken.token,
140
+ },
141
+ });
142
+ creationSpinner.succeed('Compute instance created successfully!');
143
+ console.log(chalk_1.default.green(`\nInstance '${instanceName}' is now being provisioned`));
144
+ console.log(chalk_1.default.gray('You can check the status with: nestbox compute list'));
145
+ console.log(chalk_1.default.green("Instance created successfully!"));
146
+ }
147
+ catch (createError) {
148
+ creationSpinner.fail('Failed to create compute instance');
149
+ if (createError.response && createError.response.status === 401) {
150
+ console.error(chalk_1.default.red('Authentication token has expired. Please login again using "nestbox login <domain>".'));
151
+ }
152
+ else if (createError.response) {
153
+ console.error(chalk_1.default.red('API Error:'), ((_b = createError.response.data) === null || _b === void 0 ? void 0 : _b.message) || 'Unknown error');
154
+ }
155
+ else {
156
+ console.error(chalk_1.default.red('Error:'), createError.message || 'Unknown error');
157
+ }
158
+ }
159
+ }
160
+ catch (error) {
161
+ spinner.fail('Failed to fetch available images');
162
+ if (error.response && error.response.status === 401) {
163
+ console.error(chalk_1.default.red('Authentication token has expired. Please login again using "nestbox login <domain>".'));
164
+ }
165
+ else if (error.response) {
166
+ console.error(chalk_1.default.red('API Error:'), ((_c = error.response.data) === null || _c === void 0 ? void 0 : _c.message) || 'Unknown error');
167
+ }
168
+ else {
169
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
170
+ }
171
+ }
172
+ }
173
+ catch (error) {
174
+ if (error.response && error.response.status === 401) {
175
+ console.error(chalk_1.default.red('Authentication token has expired. Please login again using "nestbox login <domain>".'));
176
+ }
177
+ else {
178
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
179
+ }
180
+ }
181
+ }));
182
+ }
183
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/compute/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerDeleteCommand(computeCommand: Command): void;
@@ -0,0 +1,145 @@
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.registerDeleteCommand = registerDeleteCommand;
16
+ const chalk_1 = __importDefault(require("chalk"));
17
+ const ora_1 = __importDefault(require("ora"));
18
+ const project_1 = require("../../utils/project");
19
+ const apiUtils_1 = require("./apiUtils");
20
+ const inquirer_1 = __importDefault(require("inquirer"));
21
+ const axios_1 = __importDefault(require("axios"));
22
+ function registerDeleteCommand(computeCommand) {
23
+ computeCommand
24
+ .command('delete')
25
+ .description('Delete one or more compute instances')
26
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)')
27
+ .option('--force', 'Skip confirmation prompt')
28
+ .action((options) => __awaiter(this, void 0, void 0, function* () {
29
+ var _a, _b, _c;
30
+ try {
31
+ const apis = (0, apiUtils_1.createComputeApis)();
32
+ if (!apis) {
33
+ return;
34
+ }
35
+ const { machineInstanceApi, projectsApi, authToken } = apis;
36
+ // Resolve project using the shared utility
37
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
38
+ const spinner = (0, ora_1.default)(`Fetching compute instances for project: ${project.name}`).start();
39
+ try {
40
+ // Fetch machine instances for the project
41
+ const instancesResponse = yield machineInstanceApi.machineInstancesControllerGetMachineInstanceByUserId(project.id, 0, // page
42
+ 50 // limit - increased to show more instances
43
+ );
44
+ spinner.succeed('Successfully retrieved compute instances');
45
+ const instances = ((_a = instancesResponse.data) === null || _a === void 0 ? void 0 : _a.machineInstances) || [];
46
+ if (instances.length === 0) {
47
+ console.log(chalk_1.default.yellow('No compute instances found for this project.'));
48
+ return;
49
+ }
50
+ // Create choices for the selection prompt
51
+ const instanceChoices = instances.map((instance) => ({
52
+ name: `${instance.instanceName || 'Unnamed'} (${instance.id})`,
53
+ value: instance.id,
54
+ short: instance.instanceName || instance.id
55
+ }));
56
+ // Prompt user to select instances to delete
57
+ const { selectedInstances } = yield inquirer_1.default.prompt([
58
+ {
59
+ type: 'checkbox',
60
+ name: 'selectedInstances',
61
+ message: 'Select compute instances to delete:',
62
+ choices: instanceChoices,
63
+ validate: (input) => {
64
+ if (input.length === 0) {
65
+ return 'Please select at least one instance to delete';
66
+ }
67
+ return true;
68
+ }
69
+ }
70
+ ]);
71
+ if (selectedInstances.length === 0) {
72
+ console.log(chalk_1.default.yellow('No instances selected for deletion.'));
73
+ return;
74
+ }
75
+ // Show selected instances
76
+ console.log(chalk_1.default.yellow('\nSelected instances for deletion:'));
77
+ const selectedInstanceDetails = instances
78
+ .filter((instance) => selectedInstances.includes(instance.id))
79
+ .map((instance) => ` - ${chalk_1.default.cyan(instance.instanceName || 'Unnamed')} (${instance.id})`);
80
+ console.log(selectedInstanceDetails.join('\n'));
81
+ // Confirm deletion if not using --force
82
+ if (!options.force) {
83
+ const { confirmDeletion } = yield inquirer_1.default.prompt([
84
+ {
85
+ type: 'confirm',
86
+ name: 'confirmDeletion',
87
+ message: chalk_1.default.red('Are you sure you want to delete these instances? This cannot be undone.'),
88
+ default: false
89
+ }
90
+ ]);
91
+ if (!confirmDeletion) {
92
+ console.log(chalk_1.default.yellow('Deletion cancelled.'));
93
+ return;
94
+ }
95
+ }
96
+ // Process deletion - using single request with all selected IDs
97
+ const deleteSpinner = (0, ora_1.default)(`Deleting ${selectedInstances.length} instance(s)...`).start();
98
+ try {
99
+ yield axios_1.default.delete(`${authToken.serverUrl}/projects/${project.id}/instances`, {
100
+ data: { ids: selectedInstances },
101
+ headers: {
102
+ Authorization: authToken.token,
103
+ }
104
+ });
105
+ deleteSpinner.succeed(`Successfully deleted ${selectedInstances.length} instance(s)`);
106
+ console.log(chalk_1.default.green('\nAll selected instances have been deleted'));
107
+ console.log(chalk_1.default.gray('You can verify with: nestbox compute list'));
108
+ }
109
+ catch (error) {
110
+ deleteSpinner.fail(`Failed to delete instances`);
111
+ if (error.response && error.response.status === 401) {
112
+ console.error(chalk_1.default.red('Authentication token has expired. Please login again using "nestbox login <domain>".'));
113
+ }
114
+ else if (error.response) {
115
+ console.error(chalk_1.default.red('API Error:'), ((_b = error.response.data) === null || _b === void 0 ? void 0 : _b.message) || 'Unknown error');
116
+ }
117
+ else {
118
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
119
+ }
120
+ }
121
+ }
122
+ catch (error) {
123
+ spinner.fail('Failed to retrieve compute instances');
124
+ if (error.response && error.response.status === 401) {
125
+ console.error(chalk_1.default.red('Authentication token has expired. Please login again using "nestbox login <domain>".'));
126
+ }
127
+ else if (error.response) {
128
+ console.error(chalk_1.default.red('API Error:'), ((_c = error.response.data) === null || _c === void 0 ? void 0 : _c.message) || 'Unknown error');
129
+ }
130
+ else {
131
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
132
+ }
133
+ }
134
+ }
135
+ catch (error) {
136
+ if (error.response && error.response.status === 401) {
137
+ console.error(chalk_1.default.red('Authentication token has expired. Please login again using "nestbox login <domain>".'));
138
+ }
139
+ else {
140
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
141
+ }
142
+ }
143
+ }));
144
+ }
145
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/compute/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { registerListCommand } from "./list";
2
+ export { registerCreateCommand } from "./create";
3
+ export { registerDeleteCommand } from "./delete";
4
+ export { createComputeApis, type ComputeApiInstances } from "./apiUtils";
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createComputeApis = exports.registerDeleteCommand = exports.registerCreateCommand = exports.registerListCommand = void 0;
4
+ // Compute command exports
5
+ var list_1 = require("./list");
6
+ Object.defineProperty(exports, "registerListCommand", { enumerable: true, get: function () { return list_1.registerListCommand; } });
7
+ var create_1 = require("./create");
8
+ Object.defineProperty(exports, "registerCreateCommand", { enumerable: true, get: function () { return create_1.registerCreateCommand; } });
9
+ var delete_1 = require("./delete");
10
+ Object.defineProperty(exports, "registerDeleteCommand", { enumerable: true, get: function () { return delete_1.registerDeleteCommand; } });
11
+ // API utilities
12
+ var apiUtils_1 = require("./apiUtils");
13
+ Object.defineProperty(exports, "createComputeApis", { enumerable: true, get: function () { return apiUtils_1.createComputeApis; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/compute/index.ts"],"names":[],"mappings":";;;AAAA,0BAA0B;AAC1B,+BAA6C;AAApC,2GAAA,mBAAmB,OAAA;AAC5B,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAC9B,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA;AAE9B,gBAAgB;AAChB,uCAAyE;AAAhE,6GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerListCommand(computeCommand: Command): void;
@@ -0,0 +1,128 @@
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.registerListCommand = registerListCommand;
16
+ const chalk_1 = __importDefault(require("chalk"));
17
+ const ora_1 = __importDefault(require("ora"));
18
+ const cli_table3_1 = __importDefault(require("cli-table3"));
19
+ const project_1 = require("../../utils/project");
20
+ const apiUtils_1 = require("./apiUtils");
21
+ function registerListCommand(computeCommand) {
22
+ computeCommand
23
+ .command('list')
24
+ .description('List all compute instances')
25
+ .option('--project <projectId>', 'Project ID or name (defaults to the current project)')
26
+ .action((options) => __awaiter(this, void 0, void 0, function* () {
27
+ var _a, _b;
28
+ try {
29
+ const apis = (0, apiUtils_1.createComputeApis)();
30
+ if (!apis) {
31
+ return;
32
+ }
33
+ const { machineInstanceApi, projectsApi } = apis;
34
+ // Resolve project using the shared utility
35
+ const project = yield (0, project_1.resolveProject)(projectsApi, options);
36
+ const spinner = (0, ora_1.default)(`Fetching compute instances for project: ${project.name}`).start();
37
+ try {
38
+ // Fetch machine instances for the project
39
+ const instancesResponse = yield machineInstanceApi.machineInstancesControllerGetMachineInstanceByUserId(project.id, 0, // page
40
+ 10 // limit
41
+ );
42
+ spinner.succeed('Successfully retrieved compute instances');
43
+ const instances = ((_a = instancesResponse.data) === null || _a === void 0 ? void 0 : _a.machineInstances) || [];
44
+ if (instances.length === 0) {
45
+ console.log(chalk_1.default.yellow('No compute instances found for this project.'));
46
+ return;
47
+ }
48
+ // Create table for display
49
+ const table = new cli_table3_1.default({
50
+ head: [
51
+ chalk_1.default.white.bold('ID'),
52
+ chalk_1.default.white.bold('Name'),
53
+ chalk_1.default.white.bold('Status'),
54
+ chalk_1.default.white.bold('API Key')
55
+ ],
56
+ style: {
57
+ head: [], // Disable the default styling
58
+ border: []
59
+ }
60
+ });
61
+ // Status mappings
62
+ const statusMappings = {
63
+ 'Job Scheduled': 'Scheduled',
64
+ 'Job Executed': 'Ready',
65
+ 'Job in Progress': 'Initializing',
66
+ 'Job Failed': 'Failed',
67
+ 'Deleting': 'Deleting',
68
+ };
69
+ // Add rows to the table
70
+ instances.forEach((instance) => {
71
+ // Map the status if a mapping exists
72
+ const originalStatus = instance.runningStatus || 'unknown';
73
+ const displayStatus = statusMappings[originalStatus] || originalStatus;
74
+ // Color the status based on its mapped value
75
+ let statusColor;
76
+ switch (displayStatus.toLowerCase()) {
77
+ case 'ready':
78
+ statusColor = chalk_1.default.green(displayStatus);
79
+ break;
80
+ case 'failed':
81
+ statusColor = chalk_1.default.red(displayStatus);
82
+ break;
83
+ case 'initializing':
84
+ statusColor = chalk_1.default.yellow(displayStatus);
85
+ break;
86
+ case 'scheduled':
87
+ statusColor = chalk_1.default.blue(displayStatus);
88
+ break;
89
+ case 'deleting':
90
+ statusColor = chalk_1.default.red(displayStatus);
91
+ break;
92
+ default:
93
+ statusColor = chalk_1.default.gray(displayStatus);
94
+ }
95
+ table.push([
96
+ instance.id || 'N/A',
97
+ instance.instanceName || 'N/A',
98
+ statusColor,
99
+ instance.instanceApiKey || 'N/A'
100
+ ]);
101
+ });
102
+ // Display the table
103
+ console.log(table.toString());
104
+ }
105
+ catch (error) {
106
+ spinner.fail('Failed to retrieve compute instances');
107
+ if (error.response && error.response.status === 401) {
108
+ console.error(chalk_1.default.red('Authentication token has expired. Please login again using "nestbox login <domain>".'));
109
+ }
110
+ else if (error.response) {
111
+ console.error(chalk_1.default.red('API Error:'), ((_b = error.response.data) === null || _b === void 0 ? void 0 : _b.message) || 'Unknown error');
112
+ }
113
+ else {
114
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
115
+ }
116
+ }
117
+ }
118
+ catch (error) {
119
+ if (error.response && error.response.status === 401) {
120
+ console.error(chalk_1.default.red('Authentication token has expired. Please login again using "nestbox login <domain>".'));
121
+ }
122
+ else {
123
+ console.error(chalk_1.default.red('Error:'), error.message || 'Unknown error');
124
+ }
125
+ }
126
+ }));
127
+ }
128
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/compute/list.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAOA,kDAqHC;AA3HD,kDAA0B;AAC1B,8CAAsB;AACtB,4DAA+B;AAC/B,iDAAqD;AACrD,yCAA+C;AAE/C,SAAgB,mBAAmB,CAAC,cAAuB;IACzD,cAAc;SACX,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,uBAAuB,EAAE,sDAAsD,CAAC;SACvF,MAAM,CAAC,CAAO,OAAO,EAAE,EAAE;;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAA,4BAAiB,GAAE,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YAEjD,2CAA2C;YAC3C,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAc,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAE3D,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,2CAA2C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAEvF,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,MAAM,iBAAiB,GAAQ,MAAM,kBAAkB,CAAC,oDAAoD,CAC1G,OAAO,CAAC,EAAE,EACV,CAAC,EAAE,OAAO;gBACV,EAAE,CAAC,QAAQ;iBACZ,CAAC;gBAEF,OAAO,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;gBAE5D,MAAM,SAAS,GAAG,CAAA,MAAA,iBAAiB,CAAC,IAAI,0CAAE,gBAAgB,KAAI,EAAE,CAAC;gBAEjE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;oBAC1E,OAAO;gBACT,CAAC;gBAED,2BAA2B;gBAC3B,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;oBACtB,IAAI,EAAE;wBACJ,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;wBACtB,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;wBACxB,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAC1B,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;qBAC5B;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,EAAE,EAAE,8BAA8B;wBACxC,MAAM,EAAE,EAAE;qBACX;iBACF,CAAC,CAAC;gBAEH,kBAAkB;gBAClB,MAAM,cAAc,GAAQ;oBAC1B,eAAe,EAAE,WAAW;oBAC5B,cAAc,EAAE,OAAO;oBACvB,iBAAiB,EAAE,cAAc;oBACjC,YAAY,EAAE,QAAQ;oBACtB,UAAU,EAAE,UAAU;iBACvB,CAAC;gBAEF,wBAAwB;gBACxB,SAAS,CAAC,OAAO,CAAC,CAAC,QAAa,EAAE,EAAE;oBAClC,qCAAqC;oBACrC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,IAAI,SAAS,CAAC;oBAC3D,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC;oBAEvE,6CAA6C;oBAC7C,IAAI,WAAW,CAAC;oBAEhB,QAAO,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;wBACnC,KAAK,OAAO;4BACV,WAAW,GAAG,eAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;4BACzC,MAAM;wBACR,KAAK,QAAQ;4BACX,WAAW,GAAG,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;4BACvC,MAAM;wBACR,KAAK,cAAc;4BACjB,WAAW,GAAG,eAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;4BAC1C,MAAM;wBACR,KAAK,WAAW;4BACd,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BACxC,MAAM;wBACR,KAAK,UAAU;4BACb,WAAW,GAAG,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;4BACvC,MAAM;wBACR;4BACE,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC5C,CAAC;oBAED,KAAK,CAAC,IAAI,CAAC;wBACT,QAAQ,CAAC,EAAE,IAAI,KAAK;wBACpB,QAAQ,CAAC,YAAY,IAAI,KAAK;wBAC9B,WAAW;wBACX,QAAQ,CAAC,cAAc,IAAI,KAAK;qBACjC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,oBAAoB;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEhC,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACrD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBACpD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC,CAAC;gBACnH,CAAC;qBAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC1B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAA,MAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,0CAAE,OAAO,KAAI,eAAe,CAAC,CAAC;gBAC1F,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACpD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC,CAAC;YACnH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC,CAAA,CAAC,CAAC;AACP,CAAC"}
@@ -1,2 +1,5 @@
1
1
  import { Command } from "commander";
2
+ /**
3
+ * Register all compute-related commands
4
+ */
2
5
  export declare function registerComputeProgram(program: Command): void;