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,380 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { promises as fs } from 'fs';
4
+ import { getAuth, getApiUrl } from '../lib/config.js';
5
+ import { listProjects } from '../lib/api.js';
6
+ // API helper for worker routes
7
+ async function workerApiRequest(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 headers = {
14
+ 'Content-Type': 'application/json',
15
+ Authorization: `Bearer ${auth.token}`,
16
+ };
17
+ const response = await fetch(`${apiUrl}${endpoint}`, {
18
+ method: options.method,
19
+ headers,
20
+ body: options.body ? JSON.stringify(options.body) : undefined,
21
+ });
22
+ const data = await response.json();
23
+ if (!response.ok) {
24
+ throw new Error(data.message || 'Request failed');
25
+ }
26
+ return data;
27
+ }
28
+ // Get current project ID from .gazill file
29
+ async function getProjectId() {
30
+ try {
31
+ const content = await fs.readFile('.gazill', 'utf-8');
32
+ const data = JSON.parse(content);
33
+ return data.projectId || null;
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ // Find project by name
40
+ async function findProjectByName(name) {
41
+ const response = await listProjects();
42
+ return response.projects.find((p) => p.name === name) || null;
43
+ }
44
+ // Format uptime
45
+ function formatUptime(startedAt) {
46
+ if (!startedAt)
47
+ return '-';
48
+ const start = new Date(startedAt).getTime();
49
+ const now = Date.now();
50
+ const diffMs = now - start;
51
+ const seconds = Math.floor(diffMs / 1000);
52
+ const minutes = Math.floor(seconds / 60);
53
+ const hours = Math.floor(minutes / 60);
54
+ const days = Math.floor(hours / 24);
55
+ if (days > 0)
56
+ return `${days}d ${hours % 24}h`;
57
+ if (hours > 0)
58
+ return `${hours}h ${minutes % 60}m`;
59
+ if (minutes > 0)
60
+ return `${minutes}m ${seconds % 60}s`;
61
+ return `${seconds}s`;
62
+ }
63
+ // gazill worker list [project] --env <environment>
64
+ export async function workerListCommand(projectName, options) {
65
+ const auth = await getAuth();
66
+ if (!auth?.token) {
67
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
68
+ return;
69
+ }
70
+ const spinner = ora('Fetching workers...').start();
71
+ try {
72
+ let projectId = await getProjectId();
73
+ if (!projectId && !projectName) {
74
+ spinner.stop();
75
+ console.log(chalk.red('No project specified. Run from a project directory or specify project name.'));
76
+ return;
77
+ }
78
+ if (projectName) {
79
+ const project = await findProjectByName(projectName);
80
+ if (!project) {
81
+ spinner.fail(`Project "${projectName}" not found.`);
82
+ return;
83
+ }
84
+ projectId = project.id;
85
+ }
86
+ const env = options?.env || 'development';
87
+ const response = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
88
+ spinner.stop();
89
+ if (response.workers.length === 0) {
90
+ console.log(chalk.yellow(`No workers found for ${env} environment.`));
91
+ console.log(chalk.gray('Use `gazill worker create <name> --command "node worker.js"` to create a worker.'));
92
+ return;
93
+ }
94
+ console.log(chalk.bold(`\nWorkers (${env}):\n`));
95
+ for (const worker of response.workers) {
96
+ const status = worker.status === 'running' ? chalk.green('●') :
97
+ worker.status === 'error' ? chalk.red('●') :
98
+ chalk.gray('○');
99
+ const statusText = worker.status === 'running' ? chalk.green('running') :
100
+ worker.status === 'error' ? chalk.red('error') :
101
+ chalk.gray('stopped');
102
+ console.log(` ${status} ${chalk.cyan(worker.name)} (${statusText})`);
103
+ console.log(` Command: ${chalk.gray(worker.command)}`);
104
+ console.log(` Restart: ${worker.restartPolicy} (${worker.restartCount}/${worker.maxRestarts})`);
105
+ if (worker.status === 'running' && worker.lastStartedAt) {
106
+ console.log(` Uptime: ${formatUptime(worker.lastStartedAt)}`);
107
+ }
108
+ if (worker.errorMessage) {
109
+ console.log(` Error: ${chalk.red(worker.errorMessage)}`);
110
+ }
111
+ console.log();
112
+ }
113
+ console.log(chalk.gray(`Total: ${response.workers.length} worker(s)`));
114
+ }
115
+ catch (error) {
116
+ spinner.fail('Failed to fetch workers');
117
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
118
+ }
119
+ }
120
+ // gazill worker create <name> --command --restart --env
121
+ export async function workerCreateCommand(name, options) {
122
+ const auth = await getAuth();
123
+ if (!auth?.token) {
124
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
125
+ return;
126
+ }
127
+ if (!options?.command) {
128
+ console.log(chalk.red('Command is required. Use --command "node worker.js"'));
129
+ return;
130
+ }
131
+ const spinner = ora('Creating worker...').start();
132
+ try {
133
+ const projectId = await getProjectId();
134
+ if (!projectId) {
135
+ spinner.stop();
136
+ console.log(chalk.red('No project found. Run from a project directory.'));
137
+ return;
138
+ }
139
+ const body = {
140
+ name,
141
+ command: options.command,
142
+ environment: options.env || 'development',
143
+ };
144
+ if (options.restart) {
145
+ body.restartPolicy = options.restart;
146
+ }
147
+ const response = await workerApiRequest(`/api/projects/${projectId}/workers`, { method: 'POST', body });
148
+ spinner.succeed(`Created worker '${chalk.cyan(response.worker.name)}'`);
149
+ console.log();
150
+ console.log(chalk.gray(' Command:'), response.worker.command);
151
+ console.log(chalk.gray(' Restart:'), response.worker.restartPolicy);
152
+ console.log(chalk.gray(' Status:'), chalk.gray('stopped'));
153
+ console.log();
154
+ console.log(chalk.gray('Use `gazill worker start ' + name + '` to start the worker.'));
155
+ }
156
+ catch (error) {
157
+ spinner.fail('Failed to create worker');
158
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
159
+ }
160
+ }
161
+ // gazill worker update <name> --command --restart --env
162
+ export async function workerUpdateCommand(name, options) {
163
+ const auth = await getAuth();
164
+ if (!auth?.token) {
165
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
166
+ return;
167
+ }
168
+ const spinner = ora('Updating worker...').start();
169
+ try {
170
+ const projectId = await getProjectId();
171
+ if (!projectId) {
172
+ spinner.stop();
173
+ console.log(chalk.red('No project found. Run from a project directory.'));
174
+ return;
175
+ }
176
+ // Find worker by name
177
+ const env = options?.env || 'development';
178
+ const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
179
+ const worker = listResponse.workers.find(w => w.name === name);
180
+ if (!worker) {
181
+ spinner.fail(`Worker '${name}' not found in ${env} environment.`);
182
+ return;
183
+ }
184
+ const body = {};
185
+ if (options?.command)
186
+ body.command = options.command;
187
+ if (options?.restart)
188
+ body.restartPolicy = options.restart;
189
+ const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}`, { method: 'PATCH', body });
190
+ spinner.succeed(`Updated worker '${chalk.cyan(response.worker.name)}'`);
191
+ console.log(chalk.gray('Note: Worker was stopped. Use `gazill worker start ' + name + '` to restart.'));
192
+ }
193
+ catch (error) {
194
+ spinner.fail('Failed to update worker');
195
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
196
+ }
197
+ }
198
+ // gazill worker delete <name> --env
199
+ export async function workerDeleteCommand(name, options) {
200
+ const auth = await getAuth();
201
+ if (!auth?.token) {
202
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
203
+ return;
204
+ }
205
+ const spinner = ora('Deleting worker...').start();
206
+ try {
207
+ const projectId = await getProjectId();
208
+ if (!projectId) {
209
+ spinner.stop();
210
+ console.log(chalk.red('No project found. Run from a project directory.'));
211
+ return;
212
+ }
213
+ // Find worker by name
214
+ const env = options?.env || 'development';
215
+ const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
216
+ const worker = listResponse.workers.find(w => w.name === name);
217
+ if (!worker) {
218
+ spinner.fail(`Worker '${name}' not found in ${env} environment.`);
219
+ return;
220
+ }
221
+ await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}`, { method: 'DELETE' });
222
+ spinner.succeed(`Deleted worker '${chalk.cyan(name)}'`);
223
+ }
224
+ catch (error) {
225
+ spinner.fail('Failed to delete worker');
226
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
227
+ }
228
+ }
229
+ // gazill worker start <name> --env
230
+ export async function workerStartCommand(name, options) {
231
+ const auth = await getAuth();
232
+ if (!auth?.token) {
233
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
234
+ return;
235
+ }
236
+ const spinner = ora(`Starting worker '${name}'...`).start();
237
+ try {
238
+ const projectId = await getProjectId();
239
+ if (!projectId) {
240
+ spinner.stop();
241
+ console.log(chalk.red('No project found. Run from a project directory.'));
242
+ return;
243
+ }
244
+ // Find worker by name
245
+ const env = options?.env || 'development';
246
+ const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
247
+ const worker = listResponse.workers.find(w => w.name === name);
248
+ if (!worker) {
249
+ spinner.fail(`Worker '${name}' not found in ${env} environment.`);
250
+ return;
251
+ }
252
+ const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}/start`, { method: 'POST' });
253
+ spinner.succeed(`Started worker '${chalk.cyan(response.worker.name)}'`);
254
+ console.log(chalk.gray(' Container:'), response.worker.containerId?.substring(0, 12));
255
+ console.log(chalk.gray(' Status:'), chalk.green('running'));
256
+ }
257
+ catch (error) {
258
+ spinner.fail('Failed to start worker');
259
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
260
+ }
261
+ }
262
+ // gazill worker stop <name> --env
263
+ export async function workerStopCommand(name, options) {
264
+ const auth = await getAuth();
265
+ if (!auth?.token) {
266
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
267
+ return;
268
+ }
269
+ const spinner = ora(`Stopping worker '${name}'...`).start();
270
+ try {
271
+ const projectId = await getProjectId();
272
+ if (!projectId) {
273
+ spinner.stop();
274
+ console.log(chalk.red('No project found. Run from a project directory.'));
275
+ return;
276
+ }
277
+ // Find worker by name
278
+ const env = options?.env || 'development';
279
+ const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
280
+ const worker = listResponse.workers.find(w => w.name === name);
281
+ if (!worker) {
282
+ spinner.fail(`Worker '${name}' not found in ${env} environment.`);
283
+ return;
284
+ }
285
+ const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}/stop`, { method: 'POST' });
286
+ spinner.succeed(`Stopped worker '${chalk.cyan(response.worker.name)}'`);
287
+ console.log(chalk.gray(' Status:'), chalk.gray('stopped'));
288
+ }
289
+ catch (error) {
290
+ spinner.fail('Failed to stop worker');
291
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
292
+ }
293
+ }
294
+ // gazill worker restart <name> --env
295
+ export async function workerRestartCommand(name, options) {
296
+ const auth = await getAuth();
297
+ if (!auth?.token) {
298
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
299
+ return;
300
+ }
301
+ const spinner = ora(`Restarting worker '${name}'...`).start();
302
+ try {
303
+ const projectId = await getProjectId();
304
+ if (!projectId) {
305
+ spinner.stop();
306
+ console.log(chalk.red('No project found. Run from a project directory.'));
307
+ return;
308
+ }
309
+ // Find worker by name
310
+ const env = options?.env || 'development';
311
+ const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
312
+ const worker = listResponse.workers.find(w => w.name === name);
313
+ if (!worker) {
314
+ spinner.fail(`Worker '${name}' not found in ${env} environment.`);
315
+ return;
316
+ }
317
+ const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}/restart`, { method: 'POST' });
318
+ spinner.succeed(`Restarted worker '${chalk.cyan(response.worker.name)}'`);
319
+ console.log(chalk.gray(' Container:'), response.worker.containerId?.substring(0, 12));
320
+ console.log(chalk.gray(' Status:'), chalk.green('running'));
321
+ }
322
+ catch (error) {
323
+ spinner.fail('Failed to restart worker');
324
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
325
+ }
326
+ }
327
+ // gazill worker logs <name> --lines --follow --env
328
+ export async function workerLogsCommand(name, options) {
329
+ const auth = await getAuth();
330
+ if (!auth?.token) {
331
+ console.log(chalk.red('Not logged in. Run `gazill login` first.'));
332
+ return;
333
+ }
334
+ const spinner = ora('Fetching logs...').start();
335
+ try {
336
+ const projectId = await getProjectId();
337
+ if (!projectId) {
338
+ spinner.stop();
339
+ console.log(chalk.red('No project found. Run from a project directory.'));
340
+ return;
341
+ }
342
+ // Find worker by name
343
+ const env = options?.env || 'development';
344
+ const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
345
+ const worker = listResponse.workers.find(w => w.name === name);
346
+ if (!worker) {
347
+ spinner.fail(`Worker '${name}' not found in ${env} environment.`);
348
+ return;
349
+ }
350
+ const lines = options?.lines || '100';
351
+ const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}/logs?lines=${lines}`);
352
+ spinner.stop();
353
+ if (response.logs.length === 0) {
354
+ console.log(chalk.yellow('No logs available.'));
355
+ if (worker.status !== 'running') {
356
+ console.log(chalk.gray('Worker is not running. Start it with `gazill worker start ' + name + '`'));
357
+ }
358
+ return;
359
+ }
360
+ // Print logs
361
+ for (const line of response.logs) {
362
+ // Docker logs have 8-byte header, try to clean it up
363
+ const cleanLine = line.replace(/^[\x00-\x1F]+/, '').trim();
364
+ if (cleanLine) {
365
+ console.log(cleanLine);
366
+ }
367
+ }
368
+ // Note: --follow is not implemented in this version
369
+ // Would require WebSocket or SSE connection
370
+ if (options?.follow) {
371
+ console.log();
372
+ console.log(chalk.yellow('Note: --follow is not yet supported. Showing recent logs only.'));
373
+ }
374
+ }
375
+ catch (error) {
376
+ spinner.fail('Failed to fetch logs');
377
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
378
+ }
379
+ }
380
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"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"}