gazill 2.1.0 → 2.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.
Files changed (73) hide show
  1. package/dist/commands/autoscale.d.ts +5 -0
  2. package/dist/commands/autoscale.d.ts.map +1 -0
  3. package/dist/commands/autoscale.js +140 -0
  4. package/dist/commands/autoscale.js.map +1 -0
  5. package/dist/commands/blob.d.ts +19 -0
  6. package/dist/commands/blob.d.ts.map +1 -0
  7. package/dist/commands/blob.js +383 -0
  8. package/dist/commands/blob.js.map +1 -0
  9. package/dist/commands/cron.d.ts +27 -0
  10. package/dist/commands/cron.d.ts.map +1 -0
  11. package/dist/commands/cron.js +333 -0
  12. package/dist/commands/cron.js.map +1 -0
  13. package/dist/commands/db.d.ts +21 -0
  14. package/dist/commands/db.d.ts.map +1 -0
  15. package/dist/commands/db.js +567 -0
  16. package/dist/commands/db.js.map +1 -0
  17. package/dist/commands/domains.d.ts +5 -0
  18. package/dist/commands/domains.d.ts.map +1 -0
  19. package/dist/commands/domains.js +239 -0
  20. package/dist/commands/domains.js.map +1 -0
  21. package/dist/commands/env.d.ts +4 -0
  22. package/dist/commands/env.d.ts.map +1 -0
  23. package/dist/commands/env.js +180 -0
  24. package/dist/commands/env.js.map +1 -0
  25. package/dist/commands/health.d.ts +7 -0
  26. package/dist/commands/health.d.ts.map +1 -0
  27. package/dist/commands/health.js +189 -0
  28. package/dist/commands/health.js.map +1 -0
  29. package/dist/commands/limits.d.ts +2 -0
  30. package/dist/commands/limits.d.ts.map +1 -0
  31. package/dist/commands/limits.js +186 -0
  32. package/dist/commands/limits.js.map +1 -0
  33. package/dist/commands/mysql.d.ts +15 -0
  34. package/dist/commands/mysql.d.ts.map +1 -0
  35. package/dist/commands/mysql.js +413 -0
  36. package/dist/commands/mysql.js.map +1 -0
  37. package/dist/commands/new.d.ts.map +1 -1
  38. package/dist/commands/new.js +29 -3
  39. package/dist/commands/new.js.map +1 -1
  40. package/dist/commands/promote.d.ts.map +1 -1
  41. package/dist/commands/promote.js +36 -9
  42. package/dist/commands/promote.js.map +1 -1
  43. package/dist/commands/redis.d.ts +15 -0
  44. package/dist/commands/redis.d.ts.map +1 -0
  45. package/dist/commands/redis.js +402 -0
  46. package/dist/commands/redis.js.map +1 -0
  47. package/dist/commands/rollback.d.ts +9 -0
  48. package/dist/commands/rollback.d.ts.map +1 -0
  49. package/dist/commands/rollback.js +154 -0
  50. package/dist/commands/rollback.js.map +1 -0
  51. package/dist/commands/status.d.ts.map +1 -1
  52. package/dist/commands/status.js +24 -1
  53. package/dist/commands/status.js.map +1 -1
  54. package/dist/commands/usage.d.ts.map +1 -1
  55. package/dist/commands/usage.js +20 -11
  56. package/dist/commands/usage.js.map +1 -1
  57. package/dist/commands/worker.d.ts +31 -0
  58. package/dist/commands/worker.d.ts.map +1 -0
  59. package/dist/commands/worker.js +380 -0
  60. package/dist/commands/worker.js.map +1 -0
  61. package/dist/index.js +362 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/lib/api.d.ts +46 -2
  64. package/dist/lib/api.d.ts.map +1 -1
  65. package/dist/lib/api.js +16 -0
  66. package/dist/lib/api.js.map +1 -1
  67. package/dist/shared/constants.d.ts +10 -0
  68. package/dist/shared/constants.d.ts.map +1 -1
  69. package/dist/shared/constants.js +11 -0
  70. package/dist/shared/constants.js.map +1 -1
  71. package/dist/shared/types.d.ts +40 -1
  72. package/dist/shared/types.d.ts.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function limitsCommand(projectName?: string): Promise<void>;
2
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/commands/limits.ts"],"names":[],"mappings":"AAuCA,wBAAsB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsHvE"}
@@ -0,0 +1,186 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import { DEV_DOMAIN, DEV_MAX_CONCURRENT_VISITORS, DEV_MAX_UNIQUE_VISITORS, DEV_MAX_BANDWIDTH_BYTES, DEV_MAX_STORAGE_BYTES, DEV_SLEEP_AFTER_MINUTES, DEV_AUTO_DELETE_DAYS, MAX_PROJECTS_PER_USER, } from '../shared/index.js';
6
+ import { getLimits, listProjects } from '../lib/api.js';
7
+ import { isAuthenticated } from '../lib/config.js';
8
+ // Format bytes to human readable
9
+ function formatBytes(bytes) {
10
+ if (bytes === 0)
11
+ return '0 B';
12
+ const k = 1024;
13
+ const sizes = ['B', 'KB', 'MB', 'GB'];
14
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
15
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
16
+ }
17
+ // Get progress bar
18
+ function getProgressBar(used, limit, width = 20) {
19
+ const percent = Math.min(used / limit, 1);
20
+ const filled = Math.round(percent * width);
21
+ const empty = width - filled;
22
+ let color = chalk.green;
23
+ if (percent >= 0.9)
24
+ color = chalk.red;
25
+ else if (percent >= 0.7)
26
+ color = chalk.yellow;
27
+ return color('█'.repeat(filled)) + chalk.gray('░'.repeat(empty));
28
+ }
29
+ export async function limitsCommand(projectName) {
30
+ // Check authentication
31
+ if (!(await isAuthenticated())) {
32
+ console.log(chalk.red('Please log in first.'));
33
+ console.log(chalk.gray('Run "gazill login" to authenticate.'));
34
+ process.exit(1);
35
+ }
36
+ let projectId = null;
37
+ let resolvedName = null;
38
+ // If project name not provided, check for .gazill/project.json
39
+ if (!projectName) {
40
+ const projectConfigPath = path.join(process.cwd(), '.gazill', 'project.json');
41
+ try {
42
+ const configContent = await fs.readFile(projectConfigPath, 'utf-8');
43
+ const projectConfig = JSON.parse(configContent);
44
+ projectId = projectConfig.id;
45
+ resolvedName = projectConfig.name;
46
+ }
47
+ catch {
48
+ // Not in a project directory, show all projects
49
+ await showAllProjectsLimits();
50
+ return;
51
+ }
52
+ }
53
+ else {
54
+ // Find project by name
55
+ const spinner = ora('Finding project...').start();
56
+ try {
57
+ const { projects } = await listProjects();
58
+ const project = projects.find(p => p.name === projectName);
59
+ if (!project) {
60
+ spinner.fail(chalk.red(`Project "${projectName}" not found.`));
61
+ process.exit(1);
62
+ }
63
+ projectId = project.id;
64
+ resolvedName = project.name;
65
+ spinner.stop();
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof Error ? error.message : 'Failed to find project';
69
+ spinner.fail(chalk.red(message));
70
+ process.exit(1);
71
+ }
72
+ }
73
+ // Fetch limits for specific project
74
+ const spinner = ora('Fetching limits...').start();
75
+ try {
76
+ const limits = await getLimits(projectId);
77
+ spinner.stop();
78
+ console.log('');
79
+ console.log(chalk.bold(`Development Limits for ${chalk.blue(resolvedName)}`));
80
+ console.log(chalk.gray(`https://${resolvedName}.${DEV_DOMAIN}`));
81
+ console.log('');
82
+ // Unique Visitors
83
+ const visitorPercent = Math.round((limits.uniqueVisitors.used / limits.uniqueVisitors.limit) * 100);
84
+ console.log(chalk.bold('Unique Visitors'));
85
+ console.log(` ${getProgressBar(limits.uniqueVisitors.used, limits.uniqueVisitors.limit)} ${limits.uniqueVisitors.used}/${limits.uniqueVisitors.limit} (${visitorPercent}%)`);
86
+ console.log(chalk.gray(' Lifetime limit - does not reset'));
87
+ console.log('');
88
+ // Bandwidth
89
+ const bandwidthPercent = Math.round((limits.bandwidth.used / limits.bandwidth.limit) * 100);
90
+ console.log(chalk.bold('Bandwidth'));
91
+ console.log(` ${getProgressBar(limits.bandwidth.used, limits.bandwidth.limit)} ${formatBytes(limits.bandwidth.used)}/${formatBytes(limits.bandwidth.limit)} (${bandwidthPercent}%)`);
92
+ if (limits.bandwidth.resetsAt) {
93
+ const resetDate = new Date(limits.bandwidth.resetsAt);
94
+ console.log(chalk.gray(` Resets: ${resetDate.toLocaleDateString()}`));
95
+ }
96
+ else {
97
+ console.log(chalk.gray(' Resets monthly'));
98
+ }
99
+ console.log('');
100
+ // Storage
101
+ if (limits.storage) {
102
+ const storagePercent = Math.round((limits.storage.used / limits.storage.limit) * 100);
103
+ console.log(chalk.bold('SQLite Storage'));
104
+ console.log(` ${getProgressBar(limits.storage.used, limits.storage.limit)} ${formatBytes(limits.storage.used)}/${formatBytes(limits.storage.limit)} (${storagePercent}%)`);
105
+ console.log(chalk.gray(' Use /data/db.sqlite or $DATABASE_URL'));
106
+ console.log('');
107
+ }
108
+ // Concurrent
109
+ console.log(chalk.bold('Concurrent Visitors'));
110
+ console.log(` ${getProgressBar(limits.concurrent.current, limits.concurrent.limit)} ${limits.concurrent.current}/${limits.concurrent.limit} active now`);
111
+ console.log('');
112
+ // Status
113
+ console.log(chalk.bold('Status'));
114
+ if (limits.sleeping) {
115
+ console.log(chalk.yellow(' Sleeping (will wake on request)'));
116
+ }
117
+ else {
118
+ console.log(chalk.green(' Awake'));
119
+ }
120
+ if (limits.lastRequestAt) {
121
+ const lastRequest = new Date(limits.lastRequestAt);
122
+ console.log(chalk.gray(` Last request: ${lastRequest.toLocaleString()}`));
123
+ }
124
+ console.log('');
125
+ // Limits reference
126
+ console.log(chalk.gray('Development Environment Limits:'));
127
+ console.log(chalk.gray(` • ${DEV_MAX_CONCURRENT_VISITORS} concurrent visitors max`));
128
+ console.log(chalk.gray(` • ${DEV_MAX_UNIQUE_VISITORS} unique visitors (lifetime)`));
129
+ console.log(chalk.gray(` • ${formatBytes(DEV_MAX_BANDWIDTH_BYTES)} bandwidth/month`));
130
+ console.log(chalk.gray(` • ${formatBytes(DEV_MAX_STORAGE_BYTES)} SQLite storage`));
131
+ console.log(chalk.gray(` • Sleeps after ${DEV_SLEEP_AFTER_MINUTES}min inactive`));
132
+ console.log(chalk.gray(` • Auto-deleted after ${DEV_AUTO_DELETE_DAYS} days without deploys`));
133
+ console.log('');
134
+ console.log(chalk.gray('To remove all limits: gazill promote'));
135
+ }
136
+ catch (error) {
137
+ const message = error instanceof Error ? error.message : 'Failed to fetch limits';
138
+ spinner.fail(chalk.red(message));
139
+ process.exit(1);
140
+ }
141
+ }
142
+ async function showAllProjectsLimits() {
143
+ const spinner = ora('Fetching projects...').start();
144
+ try {
145
+ const { projects } = await listProjects();
146
+ spinner.stop();
147
+ if (projects.length === 0) {
148
+ console.log(chalk.gray('No projects found.'));
149
+ console.log(chalk.gray('Run "gazill new <name>" to create a project.'));
150
+ return;
151
+ }
152
+ console.log('');
153
+ console.log(chalk.bold('Development Environment Limits'));
154
+ console.log('');
155
+ // Show summary for each project
156
+ for (const project of projects) {
157
+ // Only show limits for dev-only projects
158
+ if (project.prodStatus) {
159
+ console.log(chalk.blue.bold(project.name), chalk.green('(production)'));
160
+ console.log(chalk.gray(' No development limits - promoted to production'));
161
+ console.log('');
162
+ continue;
163
+ }
164
+ const visitors = project.uniqueVisitorCount || 0;
165
+ const bandwidth = project.monthlyBandwidthUsed || 0;
166
+ const sleeping = project.isSleeping || false;
167
+ console.log(chalk.blue.bold(project.name));
168
+ console.log(` Visitors: ${getProgressBar(visitors, DEV_MAX_UNIQUE_VISITORS, 15)} ${visitors}/${DEV_MAX_UNIQUE_VISITORS}`);
169
+ console.log(` Bandwidth: ${getProgressBar(bandwidth, DEV_MAX_BANDWIDTH_BYTES, 15)} ${formatBytes(bandwidth)}/2GB`);
170
+ if (sleeping) {
171
+ console.log(chalk.yellow(' Status: Sleeping'));
172
+ }
173
+ console.log('');
174
+ }
175
+ console.log(chalk.gray(`Projects: ${projects.length}/${MAX_PROJECTS_PER_USER}`));
176
+ console.log('');
177
+ console.log(chalk.gray('Run "gazill limits <project>" for detailed info'));
178
+ console.log(chalk.gray('Run "gazill promote" to remove limits'));
179
+ }
180
+ catch (error) {
181
+ const message = error instanceof Error ? error.message : 'Failed to fetch projects';
182
+ spinner.fail(chalk.red(message));
183
+ process.exit(1);
184
+ }
185
+ }
186
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/commands/limits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare function mysqlCreateCommand(name?: string, options?: {
2
+ size?: string;
3
+ project?: string;
4
+ }): Promise<void>;
5
+ export declare function mysqlListCommand(project?: string): Promise<void>;
6
+ export declare function mysqlConnectCommand(name?: string, options?: {
7
+ project?: string;
8
+ }): Promise<void>;
9
+ export declare function mysqlDeleteCommand(name?: string, options?: {
10
+ project?: string;
11
+ }): Promise<void>;
12
+ export declare function mysqlResizeCommand(size: string, name?: string, options?: {
13
+ project?: string;
14
+ }): Promise<void>;
15
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/commands/mysql.ts"],"names":[],"mappings":"AAyFA,wBAAsB,kBAAkB,CACtC,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAgFf;AAGD,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDtE;AAGD,wBAAsB,mBAAmB,CACvC,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAkGf;AAGD,wBAAsB,kBAAkB,CACtC,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAoFf;AAGD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAgFf"}
@@ -0,0 +1,413 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import inquirer from 'inquirer';
4
+ import { promises as fs } from 'fs';
5
+ import { getAuth, getApiUrl } from '../lib/config.js';
6
+ import { listProjects } from '../lib/api.js';
7
+ async function mysqlApiRequest(endpoint, options = { method: 'GET' }) {
8
+ const apiUrl = await getApiUrl();
9
+ const auth = await getAuth();
10
+ if (!auth?.token) {
11
+ throw new Error('Not authenticated');
12
+ }
13
+ const response = await fetch(`${apiUrl}${endpoint}`, {
14
+ method: options.method,
15
+ headers: {
16
+ 'Content-Type': 'application/json',
17
+ Authorization: `Bearer ${auth.token}`,
18
+ },
19
+ body: options.body ? JSON.stringify(options.body) : undefined,
20
+ });
21
+ const data = await response.json();
22
+ if (!response.ok) {
23
+ throw new Error(data.message || 'Request failed');
24
+ }
25
+ return data;
26
+ }
27
+ async function getProjectId() {
28
+ try {
29
+ const content = await fs.readFile('.gazill', 'utf-8');
30
+ const data = JSON.parse(content);
31
+ return data.projectId || null;
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ async function findProjectByName(name) {
38
+ const response = await listProjects();
39
+ return response.projects.find((p) => p.name === name) || null;
40
+ }
41
+ function formatBytes(bytes) {
42
+ if (bytes === 0)
43
+ return '0 B';
44
+ const k = 1024;
45
+ const sizes = ['B', 'KB', 'MB', 'GB'];
46
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
47
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
48
+ }
49
+ // gazill mysql create [name] - Create a MySQL database
50
+ export async function mysqlCreateCommand(name, options) {
51
+ const auth = await getAuth();
52
+ if (!auth?.token) {
53
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
54
+ return;
55
+ }
56
+ let projectId = null;
57
+ if (options?.project) {
58
+ const project = await findProjectByName(options.project);
59
+ if (!project) {
60
+ console.log(chalk.red(`Project "${options.project}" not found.`));
61
+ return;
62
+ }
63
+ projectId = project.id;
64
+ }
65
+ else {
66
+ projectId = await getProjectId();
67
+ }
68
+ if (!projectId) {
69
+ console.log(chalk.red('No project found. Run from a project directory or use --project.'));
70
+ return;
71
+ }
72
+ let dbName = name;
73
+ let size = options?.size || 'small';
74
+ if (!dbName) {
75
+ const answers = await inquirer.prompt([
76
+ {
77
+ type: 'input',
78
+ name: 'name',
79
+ message: 'Database name:',
80
+ default: 'main',
81
+ validate: (input) => {
82
+ if (!input.match(/^[a-z][a-z0-9-]*$/)) {
83
+ return 'Name must start with a letter and contain only lowercase letters, numbers, and hyphens';
84
+ }
85
+ return true;
86
+ },
87
+ },
88
+ {
89
+ type: 'list',
90
+ name: 'size',
91
+ message: 'Database size:',
92
+ choices: [
93
+ { name: 'small - 512MB RAM, 50 connections, 5GB storage', value: 'small' },
94
+ { name: 'medium - 1GB RAM, 100 connections, 10GB storage', value: 'medium' },
95
+ { name: 'large - 2GB RAM, 200 connections, 25GB storage', value: 'large' },
96
+ { name: 'xl - 4GB RAM, 500 connections, 50GB storage', value: 'xl' },
97
+ ],
98
+ default: 'small',
99
+ },
100
+ ]);
101
+ dbName = answers.name;
102
+ size = answers.size;
103
+ }
104
+ const spinner = ora('Creating MySQL database...').start();
105
+ try {
106
+ const response = await mysqlApiRequest(`/api/projects/${projectId}/mysql`, { method: 'POST', body: { name: dbName, size } });
107
+ spinner.succeed('MySQL database created');
108
+ console.log();
109
+ console.log(chalk.bold(' Database Details:'));
110
+ console.log(chalk.gray(' Name:'), response.database.name);
111
+ console.log(chalk.gray(' Size:'), response.database.size);
112
+ console.log(chalk.gray(' Status:'), chalk.green(response.database.status));
113
+ console.log(chalk.gray(' Max Connections:'), response.database.maxConnections);
114
+ console.log();
115
+ console.log(chalk.gray(' Run `gazill mysql connect` to get connection details.'));
116
+ }
117
+ catch (error) {
118
+ spinner.fail('Failed to create MySQL database');
119
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
120
+ }
121
+ }
122
+ // gazill mysql list [project] - List MySQL databases
123
+ export async function mysqlListCommand(project) {
124
+ const auth = await getAuth();
125
+ if (!auth?.token) {
126
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
127
+ return;
128
+ }
129
+ let projectId = null;
130
+ if (project) {
131
+ const proj = await findProjectByName(project);
132
+ if (!proj) {
133
+ console.log(chalk.red(`Project "${project}" not found.`));
134
+ return;
135
+ }
136
+ projectId = proj.id;
137
+ }
138
+ else {
139
+ projectId = await getProjectId();
140
+ }
141
+ if (!projectId) {
142
+ console.log(chalk.red('No project found. Run from a project directory or specify a project.'));
143
+ return;
144
+ }
145
+ const spinner = ora('Fetching MySQL databases...').start();
146
+ try {
147
+ const response = await mysqlApiRequest(`/api/projects/${projectId}/mysql`);
148
+ spinner.stop();
149
+ if (response.databases.length === 0) {
150
+ console.log(chalk.yellow('No MySQL databases found.'));
151
+ console.log(chalk.gray('Create one with `gazill mysql create`'));
152
+ return;
153
+ }
154
+ console.log();
155
+ console.log(chalk.bold('MySQL Databases:'));
156
+ console.log();
157
+ for (const db of response.databases) {
158
+ const statusColor = db.status === 'running' ? chalk.green : chalk.yellow;
159
+ console.log(` ${chalk.cyan(db.name)} ${chalk.gray(`(${db.size})`)}`);
160
+ console.log(chalk.gray(` Status: `) + statusColor(db.status));
161
+ console.log(chalk.gray(` Port: ${db.port}`));
162
+ console.log(chalk.gray(` Storage: ${formatBytes(db.storage.usedBytes)} / ${db.storage.limitGb}GB`));
163
+ console.log(chalk.gray(` Connections: ${db.maxConnections}`));
164
+ console.log();
165
+ }
166
+ }
167
+ catch (error) {
168
+ spinner.fail('Failed to fetch MySQL databases');
169
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
170
+ }
171
+ }
172
+ // gazill mysql connect [name] - Get connection info
173
+ export async function mysqlConnectCommand(name, options) {
174
+ const auth = await getAuth();
175
+ if (!auth?.token) {
176
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
177
+ return;
178
+ }
179
+ let projectId = null;
180
+ if (options?.project) {
181
+ const project = await findProjectByName(options.project);
182
+ if (!project) {
183
+ console.log(chalk.red(`Project "${options.project}" not found.`));
184
+ return;
185
+ }
186
+ projectId = project.id;
187
+ }
188
+ else {
189
+ projectId = await getProjectId();
190
+ }
191
+ if (!projectId) {
192
+ console.log(chalk.red('No project found. Run from a project directory or use --project.'));
193
+ return;
194
+ }
195
+ const spinner = ora('Fetching connection details...').start();
196
+ try {
197
+ // Get list of databases
198
+ const listResponse = await mysqlApiRequest(`/api/projects/${projectId}/mysql`);
199
+ if (listResponse.databases.length === 0) {
200
+ spinner.stop();
201
+ console.log(chalk.yellow('No MySQL databases found.'));
202
+ return;
203
+ }
204
+ // Find the database
205
+ let db;
206
+ if (name) {
207
+ db = listResponse.databases.find((d) => d.name === name);
208
+ if (!db) {
209
+ spinner.stop();
210
+ console.log(chalk.red(`MySQL database "${name}" not found.`));
211
+ return;
212
+ }
213
+ }
214
+ else if (listResponse.databases.length === 1) {
215
+ db = listResponse.databases[0];
216
+ }
217
+ else {
218
+ spinner.stop();
219
+ const answers = await inquirer.prompt([
220
+ {
221
+ type: 'list',
222
+ name: 'database',
223
+ message: 'Select database:',
224
+ choices: listResponse.databases.map((d) => ({
225
+ name: `${d.name} (${d.size})`,
226
+ value: d.id,
227
+ })),
228
+ },
229
+ ]);
230
+ db = listResponse.databases.find((d) => d.id === answers.database);
231
+ spinner.start('Fetching connection details...');
232
+ }
233
+ if (!db)
234
+ return;
235
+ // Get connection details
236
+ const response = await mysqlApiRequest(`/api/projects/${projectId}/mysql/${db.id}`);
237
+ spinner.stop();
238
+ console.log();
239
+ console.log(chalk.bold(`MySQL Database: ${response.database.name}`));
240
+ console.log();
241
+ console.log(chalk.bold(' Connection Details:'));
242
+ console.log(chalk.gray(' Host:'), response.connection.host);
243
+ console.log(chalk.gray(' Port:'), response.connection.port);
244
+ console.log(chalk.gray(' Database:'), response.connection.database);
245
+ console.log(chalk.gray(' Username:'), response.connection.username);
246
+ console.log(chalk.gray(' Password:'), response.connection.password);
247
+ console.log();
248
+ console.log(chalk.bold(' Connection URL:'));
249
+ console.log(chalk.cyan(` ${response.connection.url}`));
250
+ console.log();
251
+ console.log(chalk.bold(' MySQL CLI:'));
252
+ console.log(chalk.gray(` ${response.connection.mysqlCommand}`));
253
+ console.log();
254
+ console.log(chalk.gray(' Note: Set MYSQL_URL in your app to connect from your code.'));
255
+ }
256
+ catch (error) {
257
+ spinner.fail('Failed to fetch connection details');
258
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
259
+ }
260
+ }
261
+ // gazill mysql delete [name] - Delete a MySQL database
262
+ export async function mysqlDeleteCommand(name, options) {
263
+ const auth = await getAuth();
264
+ if (!auth?.token) {
265
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
266
+ return;
267
+ }
268
+ let projectId = null;
269
+ if (options?.project) {
270
+ const project = await findProjectByName(options.project);
271
+ if (!project) {
272
+ console.log(chalk.red(`Project "${options.project}" not found.`));
273
+ return;
274
+ }
275
+ projectId = project.id;
276
+ }
277
+ else {
278
+ projectId = await getProjectId();
279
+ }
280
+ if (!projectId) {
281
+ console.log(chalk.red('No project found. Run from a project directory or use --project.'));
282
+ return;
283
+ }
284
+ // Get list of databases
285
+ const listResponse = await mysqlApiRequest(`/api/projects/${projectId}/mysql`);
286
+ if (listResponse.databases.length === 0) {
287
+ console.log(chalk.yellow('No MySQL databases found.'));
288
+ return;
289
+ }
290
+ // Find or select the database
291
+ let db;
292
+ if (name) {
293
+ db = listResponse.databases.find((d) => d.name === name);
294
+ if (!db) {
295
+ console.log(chalk.red(`MySQL database "${name}" not found.`));
296
+ return;
297
+ }
298
+ }
299
+ else {
300
+ const answers = await inquirer.prompt([
301
+ {
302
+ type: 'list',
303
+ name: 'database',
304
+ message: 'Select database to delete:',
305
+ choices: listResponse.databases.map((d) => ({
306
+ name: `${d.name} (${d.size})`,
307
+ value: d.id,
308
+ })),
309
+ },
310
+ ]);
311
+ db = listResponse.databases.find((d) => d.id === answers.database);
312
+ }
313
+ if (!db)
314
+ return;
315
+ // Confirm deletion
316
+ const confirm = await inquirer.prompt([
317
+ {
318
+ type: 'confirm',
319
+ name: 'confirm',
320
+ message: `Are you sure you want to delete "${db.name}"? This cannot be undone.`,
321
+ default: false,
322
+ },
323
+ ]);
324
+ if (!confirm.confirm) {
325
+ console.log(chalk.yellow('Cancelled.'));
326
+ return;
327
+ }
328
+ const spinner = ora('Deleting MySQL database...').start();
329
+ try {
330
+ await mysqlApiRequest(`/api/projects/${projectId}/mysql/${db.id}`, { method: 'DELETE' });
331
+ spinner.succeed('MySQL database deleted');
332
+ }
333
+ catch (error) {
334
+ spinner.fail('Failed to delete MySQL database');
335
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
336
+ }
337
+ }
338
+ // gazill mysql resize <size> [name] - Resize a MySQL database
339
+ export async function mysqlResizeCommand(size, name, options) {
340
+ const auth = await getAuth();
341
+ if (!auth?.token) {
342
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
343
+ return;
344
+ }
345
+ const validSizes = ['small', 'medium', 'large', 'xl'];
346
+ if (!validSizes.includes(size)) {
347
+ console.log(chalk.red(`Invalid size. Must be one of: ${validSizes.join(', ')}`));
348
+ return;
349
+ }
350
+ let projectId = null;
351
+ if (options?.project) {
352
+ const project = await findProjectByName(options.project);
353
+ if (!project) {
354
+ console.log(chalk.red(`Project "${options.project}" not found.`));
355
+ return;
356
+ }
357
+ projectId = project.id;
358
+ }
359
+ else {
360
+ projectId = await getProjectId();
361
+ }
362
+ if (!projectId) {
363
+ console.log(chalk.red('No project found. Run from a project directory or use --project.'));
364
+ return;
365
+ }
366
+ // Get list of databases
367
+ const listResponse = await mysqlApiRequest(`/api/projects/${projectId}/mysql`);
368
+ if (listResponse.databases.length === 0) {
369
+ console.log(chalk.yellow('No MySQL databases found.'));
370
+ return;
371
+ }
372
+ // Find or select the database
373
+ let db;
374
+ if (name) {
375
+ db = listResponse.databases.find((d) => d.name === name);
376
+ if (!db) {
377
+ console.log(chalk.red(`MySQL database "${name}" not found.`));
378
+ return;
379
+ }
380
+ }
381
+ else if (listResponse.databases.length === 1) {
382
+ db = listResponse.databases[0];
383
+ }
384
+ else {
385
+ const answers = await inquirer.prompt([
386
+ {
387
+ type: 'list',
388
+ name: 'database',
389
+ message: 'Select database to resize:',
390
+ choices: listResponse.databases.map((d) => ({
391
+ name: `${d.name} (${d.size})`,
392
+ value: d.id,
393
+ })),
394
+ },
395
+ ]);
396
+ db = listResponse.databases.find((d) => d.id === answers.database);
397
+ }
398
+ if (!db)
399
+ return;
400
+ const spinner = ora(`Resizing MySQL database to ${size}...`).start();
401
+ try {
402
+ await mysqlApiRequest(`/api/projects/${projectId}/mysql/${db.id}/resize`, {
403
+ method: 'PATCH',
404
+ body: { size },
405
+ });
406
+ spinner.succeed(`MySQL database resized to ${size}`);
407
+ }
408
+ catch (error) {
409
+ spinner.fail('Failed to resize MySQL database');
410
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
411
+ }
412
+ }
413
+ //# sourceMappingURL=mysql.js.map