ninedeploy 0.2.1

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 (66) hide show
  1. package/LICENSE +21 -0
  2. package/dist/client.d.ts +5 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +11 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/commands/configCenter.d.ts +14 -0
  7. package/dist/commands/configCenter.d.ts.map +1 -0
  8. package/dist/commands/configCenter.js +56 -0
  9. package/dist/commands/configCenter.js.map +1 -0
  10. package/dist/commands/demo.d.ts +3 -0
  11. package/dist/commands/demo.d.ts.map +1 -0
  12. package/dist/commands/demo.js +18 -0
  13. package/dist/commands/demo.js.map +1 -0
  14. package/dist/commands/housekeeping.d.ts +3 -0
  15. package/dist/commands/housekeeping.d.ts.map +1 -0
  16. package/dist/commands/housekeeping.js +11 -0
  17. package/dist/commands/housekeeping.js.map +1 -0
  18. package/dist/commands/login.d.ts +3 -0
  19. package/dist/commands/login.d.ts.map +1 -0
  20. package/dist/commands/login.js +36 -0
  21. package/dist/commands/login.js.map +1 -0
  22. package/dist/commands/manage.d.ts +60 -0
  23. package/dist/commands/manage.d.ts.map +1 -0
  24. package/dist/commands/manage.js +440 -0
  25. package/dist/commands/manage.js.map +1 -0
  26. package/dist/commands/misc.d.ts +24 -0
  27. package/dist/commands/misc.d.ts.map +1 -0
  28. package/dist/commands/misc.js +183 -0
  29. package/dist/commands/misc.js.map +1 -0
  30. package/dist/commands/plugins.d.ts +15 -0
  31. package/dist/commands/plugins.d.ts.map +1 -0
  32. package/dist/commands/plugins.js +77 -0
  33. package/dist/commands/plugins.js.map +1 -0
  34. package/dist/commands/services.d.ts +22 -0
  35. package/dist/commands/services.d.ts.map +1 -0
  36. package/dist/commands/services.js +236 -0
  37. package/dist/commands/services.js.map +1 -0
  38. package/dist/commands/setup.d.ts +3 -0
  39. package/dist/commands/setup.d.ts.map +1 -0
  40. package/dist/commands/setup.js +40 -0
  41. package/dist/commands/setup.js.map +1 -0
  42. package/dist/commands/token.d.ts +5 -0
  43. package/dist/commands/token.d.ts.map +1 -0
  44. package/dist/commands/token.js +33 -0
  45. package/dist/commands/token.js.map +1 -0
  46. package/dist/commands/workspaces.d.ts +8 -0
  47. package/dist/commands/workspaces.d.ts.map +1 -0
  48. package/dist/commands/workspaces.js +52 -0
  49. package/dist/commands/workspaces.js.map +1 -0
  50. package/dist/config.d.ts +7 -0
  51. package/dist/config.d.ts.map +1 -0
  52. package/dist/config.js +31 -0
  53. package/dist/config.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +225 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/lib/format.d.ts +34 -0
  59. package/dist/lib/format.d.ts.map +1 -0
  60. package/dist/lib/format.js +145 -0
  61. package/dist/lib/format.js.map +1 -0
  62. package/dist/prompts.d.ts +5 -0
  63. package/dist/prompts.d.ts.map +1 -0
  64. package/dist/prompts.js +59 -0
  65. package/dist/prompts.js.map +1 -0
  66. package/package.json +41 -0
@@ -0,0 +1,183 @@
1
+ import { c, error, fmtTime, header, info, kv, spinner, success, table, banner } from '../lib/format.js';
2
+ import { prompt } from '../prompts.js';
3
+ /** `ninedeploy databases list` */
4
+ export async function dbList(client) {
5
+ header('Databases');
6
+ await spinner('Fetching', async () => {
7
+ const dbs = await client.databases.list();
8
+ if (dbs.length === 0) {
9
+ info('No databases.');
10
+ return;
11
+ }
12
+ table(dbs.map((d) => ({ id: d.id, name: d.name, engine: d.engine, status: d.status, port: d.port ?? '—' })), ['id', 'name', 'engine', 'status', 'port']);
13
+ });
14
+ }
15
+ /** `ninedeploy databases create` */
16
+ export async function dbCreate(client) {
17
+ header('Create Database');
18
+ const name = await prompt('Database name');
19
+ if (!name)
20
+ return error('Name required');
21
+ console.log(' Engines: 1=PostgreSQL 2=MySQL 3=MariaDB 4=Redis 5=MongoDB');
22
+ const choice = await prompt('Select engine (1-5)', '1');
23
+ const engines = ['postgres', 'mysql', 'mariadb', 'redis', 'mongo'];
24
+ const engine = engines[Number(choice) - 1] ?? 'postgres';
25
+ try {
26
+ const db = await spinner('Creating database', () => client.databases.create({ name, engine }));
27
+ success(`Database "${db.name}" created (id: ${db.id})`);
28
+ if (db.connectionString) {
29
+ info(`Connection: ${c.cyan(db.connectionString)}`);
30
+ }
31
+ }
32
+ catch (err) {
33
+ error(err instanceof Error ? err.message : String(err));
34
+ }
35
+ }
36
+ /** `ninedeploy templates list` */
37
+ export async function tplList(client) {
38
+ header('Template Hub');
39
+ await spinner('Fetching templates', async () => {
40
+ const templates = await client.templates.list();
41
+ if (templates.length === 0) {
42
+ info('No templates.');
43
+ return;
44
+ }
45
+ table(templates.map((t) => ({ emoji: t.emoji, name: t.name, category: t.category, featured: t.featured ? '★' : '' })), ['emoji', 'name', 'category', 'featured']);
46
+ });
47
+ }
48
+ /** `ninedeploy templates deploy <id>` */
49
+ export async function tplDeploy(client, id) {
50
+ if (!id)
51
+ return error('Usage: ninedeploy templates deploy <template-id>');
52
+ try {
53
+ const res = await spinner(`Deploying ${id}`, () => client.templates.deploy(id));
54
+ success(`Deployed! Service ID: ${res.serviceId}`);
55
+ info(`Watch: ninedeploy services logs ${res.serviceId}`);
56
+ }
57
+ catch (err) {
58
+ error(err instanceof Error ? err.message : String(err));
59
+ }
60
+ }
61
+ /** `ninedeploy deploys list <serviceId>` */
62
+ export async function deploysList(client, svcIdStr) {
63
+ const svcId = Number(svcIdStr);
64
+ if (!svcId)
65
+ return error('Usage: ninedeploy deploys list <serviceId>');
66
+ header('Deployments');
67
+ await spinner('Fetching', async () => {
68
+ const deps = await client.deploys.list(svcId);
69
+ if (deps.length === 0) {
70
+ info('No deployments.');
71
+ return;
72
+ }
73
+ table(deps.map((d) => ({ id: d.id, status: d.status, commit: d.commitSha?.slice(0, 7) ?? '—', trigger: d.trigger, time: fmtTime(d.createdAt) })), ['id', 'status', 'commit', 'trigger', 'time']);
74
+ });
75
+ }
76
+ /** `ninedeploy deploys rollback <serviceId> <deployId>` */
77
+ export async function deploysRollback(client, svcIdStr, depIdStr) {
78
+ const svcId = Number(svcIdStr);
79
+ const depId = Number(depIdStr);
80
+ if (!svcId || !depId)
81
+ return error('Usage: ninedeploy deploys rollback <serviceId> <deployId>');
82
+ try {
83
+ const res = await spinner('Rolling back', () => client.deploys.rollback(svcId, depId));
84
+ success(`Rollback to #${depId} queued (new deploy: #${res.deploymentId}).`);
85
+ }
86
+ catch (err) {
87
+ error(err instanceof Error ? err.message : String(err));
88
+ }
89
+ }
90
+ /** `ninedeploy token create` */
91
+ export async function tokenCreate(client) {
92
+ const name = await prompt('Token name', 'ci');
93
+ try {
94
+ const tok = await spinner('Creating token', () => client.auth.tokens.create({ name }));
95
+ success(`Token created: ${c.cyan(tok.token)}`);
96
+ info('Store this securely — it won\'t be shown again.');
97
+ }
98
+ catch (err) {
99
+ error(err instanceof Error ? err.message : String(err));
100
+ }
101
+ }
102
+ /** `ninedeploy token list` */
103
+ export async function tokenList(client) {
104
+ header('API Tokens');
105
+ await spinner('Fetching', async () => {
106
+ const tokens = await client.auth.tokens.list();
107
+ if (tokens.length === 0) {
108
+ info('No tokens.');
109
+ return;
110
+ }
111
+ table(tokens.map((t) => ({ id: t.id, name: t.name, last_used: fmtTime(t.lastUsedAt), created: fmtTime(t.createdAt) })), ['id', 'name', 'last_used', 'created']);
112
+ });
113
+ }
114
+ /** `ninedeploy system info` */
115
+ export async function systemInfo(client) {
116
+ header('System');
117
+ await spinner('Fetching', async () => {
118
+ const about = await client.about.get();
119
+ banner();
120
+ kv('Version', c.bold(`v${about.version}`));
121
+ kv('License', about.license);
122
+ kv('Services', about.stats?.services ?? '—');
123
+ kv('Databases', about.stats?.databases ?? '—');
124
+ kv('Deploys', about.stats?.deployments ?? '—');
125
+ kv('Users', about.stats?.users ?? '—');
126
+ kv('Repo', about.repo);
127
+ console.log();
128
+ header('Tech Stack');
129
+ for (const group of about.techStack) {
130
+ kv(group.category, group.items.join(', '));
131
+ }
132
+ });
133
+ }
134
+ /** `ninedeploy system update-check` */
135
+ export async function systemUpdateCheck(client, force) {
136
+ header('Update check');
137
+ const res = await spinner('Checking for updates', () => client.system.updateCheck(force));
138
+ kv('Current', c.bold(`v${res.current}`));
139
+ if (res.updateAvailable == null) {
140
+ info('Latest release unknown (feed unreachable or checks disabled).');
141
+ }
142
+ else if (res.updateAvailable) {
143
+ kv('Latest', c.bold(`v${res.latest}`));
144
+ success(`A new release is available → ${c.cyan(res.notesUrl ?? `https://github.com/ninedeploy/ninedeploy/releases/tag/${res.latest}`)}`);
145
+ info('Upgrade: curl -fsSL https://raw.githubusercontent.com/ninedeploy/ninedeploy/main/install.sh | bash');
146
+ }
147
+ else {
148
+ kv('Latest', `v${res.latest}`);
149
+ success('You are on the latest release.');
150
+ }
151
+ }
152
+ /** `ninedeploy system dashboard` */
153
+ export async function systemDashboard(client) {
154
+ header('Dashboard');
155
+ await spinner('Probing health', async () => {
156
+ const dash = await client.dashboard.get();
157
+ const s = dash.stats;
158
+ const allHealthy = dash.health.every((h) => h.healthy || h.status !== 'running');
159
+ console.log(` ${allHealthy ? '✅ All systems operational' : '⚠️ Some services need attention'}`);
160
+ console.log();
161
+ kv('Services', `${s.running} running / ${s.services} total`);
162
+ kv('Databases', `${s.dbRunning} running / ${s.databases} total`);
163
+ kv('Containers', s.containers);
164
+ kv('Domains', s.domains);
165
+ kv('Webhooks', s.webhooks);
166
+ kv('Deployments', s.deployments);
167
+ console.log();
168
+ header('Service Health');
169
+ if (dash.health.length === 0) {
170
+ info('No services.');
171
+ return;
172
+ }
173
+ table(dash.health.map((h) => ({ id: h.serviceId, name: h.name, status: h.healthy ? 'healthy' : h.status, ms: h.responseMs ? `${h.responseMs}ms` : '—', type: h.type })), ['id', 'name', 'status', 'ms', 'type']);
174
+ console.log();
175
+ header('Recent Deploys');
176
+ if (dash.recentDeploys.length === 0) {
177
+ info('No deployments.');
178
+ return;
179
+ }
180
+ table(dash.recentDeploys.map((d) => ({ id: d.id, service: d.serviceName, status: d.status, time: fmtTime(d.createdAt) })), ['id', 'service', 'status', 'time']);
181
+ });
182
+ }
183
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/commands/misc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { NineDeployClient } from '@ninedeploy/sdk';
2
+ export declare function pluginsList(client: NineDeployClient): Promise<void>;
3
+ export declare function pluginsMarketplace(client: NineDeployClient): Promise<void>;
4
+ export declare function pluginsInstall(client: NineDeployClient, target: string, opts: {
5
+ source?: 'marketplace' | 'npm' | 'git' | 'local';
6
+ name?: string;
7
+ version?: string;
8
+ desc?: string;
9
+ }): Promise<void>;
10
+ export declare function pluginsEnable(client: NineDeployClient, id: string): Promise<void>;
11
+ export declare function pluginsDisable(client: NineDeployClient, id: string): Promise<void>;
12
+ export declare function pluginsUninstall(client: NineDeployClient, id: string): Promise<void>;
13
+ export declare function pluginsInspect(client: NineDeployClient, id: string): Promise<void>;
14
+ export declare function pluginsReload(client: NineDeployClient, id: string): Promise<void>;
15
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,wBAAsB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhF;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACzG,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvF;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1F;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvF"}
@@ -0,0 +1,77 @@
1
+ import { table } from '../lib/format.js';
2
+ export async function pluginsList(client) {
3
+ const { plugins } = await client.plugins.list();
4
+ if (plugins.length === 0) {
5
+ console.log(' No plugins installed.');
6
+ return;
7
+ }
8
+ table(plugins.map((p) => ({
9
+ id: p.id,
10
+ name: p.name,
11
+ version: `v${p.version}`,
12
+ type: p.isOfficial ? 'Official' : 'Community',
13
+ status: p.status,
14
+ })), ['id', 'name', 'version', 'type', 'status']);
15
+ }
16
+ export async function pluginsMarketplace(client) {
17
+ const { catalog } = await client.plugins.marketplace();
18
+ if (catalog.length === 0) {
19
+ console.log(' Marketplace catalog is currently empty.');
20
+ return;
21
+ }
22
+ table(catalog.map((c) => ({
23
+ id: c.id,
24
+ name: c.name,
25
+ category: c.category,
26
+ version: `v${c.version}`,
27
+ type: c.isOfficial ? 'Official' : 'Community',
28
+ status: c.isInstalled ? '✓ Installed' : 'Available',
29
+ })), ['id', 'name', 'category', 'version', 'type', 'status']);
30
+ }
31
+ export async function pluginsInstall(client, target, opts) {
32
+ const source = opts.source ?? 'marketplace';
33
+ const res = await client.plugins.install({
34
+ source,
35
+ target,
36
+ name: opts.name,
37
+ version: opts.version,
38
+ description: opts.desc,
39
+ });
40
+ console.log(` ✓ Installed plugin "${res.id}" (status: ${res.status}).`);
41
+ }
42
+ export async function pluginsEnable(client, id) {
43
+ const res = await client.plugins.enable(id);
44
+ console.log(` ✓ Plugin "${res.id}" enabled.`);
45
+ }
46
+ export async function pluginsDisable(client, id) {
47
+ const res = await client.plugins.disable(id);
48
+ console.log(` ✓ Plugin "${res.id}" disabled.`);
49
+ }
50
+ export async function pluginsUninstall(client, id) {
51
+ const res = await client.plugins.uninstall(id);
52
+ console.log(` ✓ Plugin "${res.id}" uninstalled.`);
53
+ }
54
+ export async function pluginsInspect(client, id) {
55
+ const p = await client.plugins.inspect(id);
56
+ console.log(` Plugin: ${p.name} (${p.id})`);
57
+ console.log(` Version: v${p.version}`);
58
+ console.log(` Type: ${p.isOfficial ? 'Official' : 'Community'}`);
59
+ console.log(` Status: ${p.status}${p.enabled ? ' (enabled)' : ' (disabled)'}`);
60
+ console.log(` Author: ${p.author ?? 'N/A'}`);
61
+ console.log(` Description: ${p.description ?? 'N/A'}`);
62
+ console.log(` Dependencies: ${p.dependencies.length > 0 ? p.dependencies.join(', ') : 'none'}`);
63
+ console.log(` Tapped Hooks: ${p.hooks.length > 0 ? p.hooks.join(', ') : 'none'}`);
64
+ console.log(` Backgrounds: ${p.services.length > 0 ? p.services.join(', ') : 'none'}`);
65
+ console.log(` Config Keys: ${p.configSchema.length} registered`);
66
+ console.log(` Nav Menus: ${p.menus.length} registered`);
67
+ if (p.error) {
68
+ console.log(` Error: ${p.error}`);
69
+ }
70
+ console.log(` Events Run: ${p.runtimeStats.eventsHandled}`);
71
+ console.log(` Uptime: ${p.runtimeStats.uptimeSeconds}s`);
72
+ }
73
+ export async function pluginsReload(client, id) {
74
+ const res = await client.plugins.reload(id);
75
+ console.log(` ✓ Plugin "${res.id}" reloaded (status: ${res.status}).`);
76
+ }
77
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { NineDeployClient } from '../client.js';
2
+ /** `ninedeploy services list` */
3
+ export declare function servicesList(client: NineDeployClient): Promise<void>;
4
+ /** `ninedeploy services create` — interactive wizard */
5
+ export declare function servicesCreate(client: NineDeployClient): Promise<void>;
6
+ /** `ninedeploy services get <id>` */
7
+ export declare function servicesGet(client: NineDeployClient, idStr: string): Promise<void>;
8
+ /** `ninedeploy services deploy <id>` */
9
+ export declare function servicesDeploy(client: NineDeployClient, idStr: string): Promise<void>;
10
+ /** `ninedeploy services logs <id>` */
11
+ export declare function servicesLogs(client: NineDeployClient, idStr: string): Promise<void>;
12
+ /** `ninedeploy services stop|start|restart <id>` */
13
+ export declare function servicesLifecycle(client: NineDeployClient, action: 'stop' | 'start' | 'restart', idStr: string): Promise<void>;
14
+ /** `ninedeploy services delete <id>` */
15
+ export declare function servicesDelete(client: NineDeployClient, idStr: string): Promise<void>;
16
+ /** `ninedeploy services export <id>` */
17
+ export declare function servicesExport(client: NineDeployClient, idStr: string): Promise<void>;
18
+ /** `ninedeploy services compose <id>` */
19
+ export declare function servicesCompose(client: NineDeployClient, idStr: string): Promise<void>;
20
+ /** `ninedeploy services inspect <id>` */
21
+ export declare function servicesInspect(client: NineDeployClient, idStr: string): Promise<void>;
22
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/commands/services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIrD,iCAAiC;AACjC,wBAAsB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB1E;AAED,wDAAwD;AACxD,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD5E;AAED,qCAAqC;AACrC,wBAAsB,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBxF;AAED,wCAAwC;AACxC,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3F;AAED,sCAAsC;AACtC,wBAAsB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF;AAED,oDAAoD;AACpD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpI;AAED,wCAAwC;AACxC,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3F;AAED,wCAAwC;AACxC,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB3F;AAED,yCAAyC;AACzC,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5F;AAED,yCAAyC;AACzC,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB5F"}
@@ -0,0 +1,236 @@
1
+ import { NineDeployError } from '@ninedeploy/sdk';
2
+ import { c, error, fmtTime, header, info, kv, spinner, statusColor, success, table } from '../lib/format.js';
3
+ import { prompt } from '../prompts.js';
4
+ /** `ninedeploy services list` */
5
+ export async function servicesList(client) {
6
+ header('Services');
7
+ await spinner('Fetching services', async () => {
8
+ const services = await client.services.list();
9
+ if (services.length === 0) {
10
+ info('No services yet. Run `ninedeploy services create`.');
11
+ return;
12
+ }
13
+ table(services.map((s) => ({
14
+ id: s.id,
15
+ name: s.name,
16
+ type: s.type,
17
+ status: s.status,
18
+ port: s.port ?? '—',
19
+ updated: fmtTime(s.updatedAt),
20
+ })), ['id', 'name', 'type', 'status', 'port', 'updated']);
21
+ });
22
+ }
23
+ /** `ninedeploy services create` — interactive wizard */
24
+ export async function servicesCreate(client) {
25
+ header('Create Service');
26
+ console.log(c.dim(' Answer a few questions to deploy your app.\n'));
27
+ const name = await prompt('Service name');
28
+ if (!name)
29
+ return error('Name is required');
30
+ const mode = await prompt('Deploy from (1) Git repo (2) Docker image', '1');
31
+ const useRepo = mode !== '2';
32
+ let repoUrl = '';
33
+ let image = '';
34
+ let branch = 'main';
35
+ if (useRepo) {
36
+ repoUrl = await prompt('Repository URL', '');
37
+ if (!repoUrl)
38
+ return error('Repository URL is required');
39
+ branch = await prompt('Branch', 'main');
40
+ }
41
+ else {
42
+ image = await prompt('Docker image (e.g. nginx:alpine)');
43
+ if (!image)
44
+ return error('Image is required');
45
+ }
46
+ const portStr = await prompt('Port (optional)', '');
47
+ const port = portStr ? Number(portStr) : undefined;
48
+ const pubPortStr = await prompt('Direct host port (optional)', '');
49
+ const publishedPort = pubPortStr ? Number(pubPortStr) : undefined;
50
+ const volume = await prompt('Persistent volume path (optional)', '');
51
+ console.log();
52
+ try {
53
+ const svc = await spinner('Creating service', () => client.services.create({
54
+ name, type: 'docker',
55
+ repoUrl: useRepo ? repoUrl : undefined,
56
+ image: useRepo ? undefined : image,
57
+ branch, port, publishedPort, volumeMount: volume || undefined,
58
+ }));
59
+ success(`Service "${svc.name}" created (id: ${svc.id})`);
60
+ const deployNow = await prompt('Deploy now? (y/n)', 'y');
61
+ if (deployNow.toLowerCase().startsWith('y')) {
62
+ const res = await spinner('Deploying', () => client.deploys.trigger(svc.id));
63
+ success(`Deployment #${res.deploymentId} queued. Check logs: ninedeploy services logs ${svc.id}`);
64
+ }
65
+ }
66
+ catch (err) {
67
+ error(err instanceof NineDeployError ? err.message : String(err));
68
+ }
69
+ }
70
+ /** `ninedeploy services get <id>` */
71
+ export async function servicesGet(client, idStr) {
72
+ const id = Number(idStr);
73
+ if (!id)
74
+ return error('Usage: ninedeploy services get <id>');
75
+ header('Service Details');
76
+ await spinner('Fetching', async () => {
77
+ const svc = await client.services.get(id);
78
+ kv('ID', svc.id);
79
+ kv('Name', svc.name);
80
+ kv('Slug', svc.slug);
81
+ kv('Type', svc.type);
82
+ kv('Status', statusColor(svc.status));
83
+ kv('Repo', svc.repoUrl ?? '—');
84
+ kv('Branch', svc.branch);
85
+ kv('Image', svc.image ?? '—');
86
+ kv('Port', svc.port ?? '—');
87
+ if (svc.publishedPort)
88
+ kv('Host Port', c.green(`:${svc.publishedPort}`));
89
+ kv('Volume', svc.volumeMount ?? '—');
90
+ kv('Health', svc.healthPath);
91
+ kv('Runtime', svc.runtimeId ?? '—');
92
+ kv('Commit', svc.commitSha ?? '—');
93
+ if (svc.autoUrl)
94
+ kv('URL', c.cyan(`http://${svc.autoUrl}`));
95
+ kv('Created', fmtTime(svc.createdAt));
96
+ kv('Updated', fmtTime(svc.updatedAt));
97
+ });
98
+ }
99
+ /** `ninedeploy services deploy <id>` */
100
+ export async function servicesDeploy(client, idStr) {
101
+ const id = Number(idStr);
102
+ if (!id)
103
+ return error('Usage: ninedeploy services deploy <id>');
104
+ try {
105
+ const res = await spinner('Triggering deploy', () => client.deploys.trigger(id));
106
+ success(`Deployment #${res.deploymentId} queued.`);
107
+ info(`Watch logs: ninedeploy services logs ${id}`);
108
+ }
109
+ catch (err) {
110
+ error(err instanceof Error ? err.message : String(err));
111
+ }
112
+ }
113
+ /** `ninedeploy services logs <id>` */
114
+ export async function servicesLogs(client, idStr) {
115
+ const id = Number(idStr);
116
+ if (!id)
117
+ return error('Usage: ninedeploy services logs <id>');
118
+ header('Runtime Logs');
119
+ try {
120
+ const { lines } = await client.services.logs(id);
121
+ if (!lines.trim()) {
122
+ info('No logs yet.');
123
+ return;
124
+ }
125
+ console.log(lines.split('\n').slice(0, 50).map((l) => ` ${c.dim(l)}`).join('\n'));
126
+ }
127
+ catch (err) {
128
+ error(err instanceof Error ? err.message : String(err));
129
+ }
130
+ }
131
+ /** `ninedeploy services stop|start|restart <id>` */
132
+ export async function servicesLifecycle(client, action, idStr) {
133
+ const id = Number(idStr);
134
+ if (!id)
135
+ return error(`Usage: ninedeploy services ${action} <id>`);
136
+ try {
137
+ await spinner(`${action}ing service`, () => client.services[action](id));
138
+ success(`Service ${action}ed.`);
139
+ }
140
+ catch (err) {
141
+ error(err instanceof Error ? err.message : String(err));
142
+ }
143
+ }
144
+ /** `ninedeploy services delete <id>` */
145
+ export async function servicesDelete(client, idStr) {
146
+ const id = Number(idStr);
147
+ if (!id)
148
+ return error('Usage: ninedeploy services delete <id>');
149
+ const confirmText = await prompt(`Type the service ID (${id}) to confirm deletion`);
150
+ if (confirmText !== String(id))
151
+ return error('Cancelled.');
152
+ try {
153
+ await spinner('Deleting service', () => client.services.remove(id));
154
+ success('Service deleted.');
155
+ }
156
+ catch (err) {
157
+ error(err instanceof Error ? err.message : String(err));
158
+ }
159
+ }
160
+ /** `ninedeploy services export <id>` */
161
+ export async function servicesExport(client, idStr) {
162
+ const id = Number(idStr);
163
+ if (!id)
164
+ return error('Usage: ninedeploy services export <id>');
165
+ const { writeFileSync } = await import('node:fs');
166
+ const { loadConfig } = await import('../config.js');
167
+ try {
168
+ const svc = await client.services.get(id);
169
+ const cfg = loadConfig();
170
+ const data = await spinner('Exporting', () => (async () => {
171
+ const res = await fetch(`${cfg.baseUrl}/v1/services/${id}/export`, {
172
+ headers: { Authorization: `Bearer ${cfg.token ?? ''}` },
173
+ });
174
+ if (!res.ok)
175
+ throw new Error(`Export failed (HTTP ${res.status})`);
176
+ return res.text();
177
+ })());
178
+ const filename = `${svc.slug}-export.json`;
179
+ writeFileSync(filename, data);
180
+ success(`Exported to ${filename}`);
181
+ }
182
+ catch (err) {
183
+ error(err instanceof Error ? err.message : String(err));
184
+ }
185
+ }
186
+ /** `ninedeploy services compose <id>` */
187
+ export async function servicesCompose(client, idStr) {
188
+ const id = Number(idStr);
189
+ if (!id)
190
+ return error('Usage: ninedeploy services compose <id>');
191
+ header('Runtime Docker Compose Manifest');
192
+ try {
193
+ const svc = await client.services.get(id);
194
+ const container = svc.runtimeId || `nd-svc-${svc.slug}-1`;
195
+ const res = await spinner('Generating manifest', () => client.containers.compose(container));
196
+ console.log(c.dim(`\n # Container: ${container}\n`));
197
+ console.log(res.yaml.split('\n').map((l) => ` ${c.cyan(l)}`).join('\n'));
198
+ console.log();
199
+ }
200
+ catch (err) {
201
+ error(err instanceof Error ? err.message : String(err));
202
+ }
203
+ }
204
+ /** `ninedeploy services inspect <id>` */
205
+ export async function servicesInspect(client, idStr) {
206
+ const id = Number(idStr);
207
+ if (!id)
208
+ return error('Usage: ninedeploy services inspect <id>');
209
+ header('Container Runtime Inspection');
210
+ try {
211
+ const svc = await client.services.get(id);
212
+ const container = svc.runtimeId || `nd-svc-${svc.slug}-1`;
213
+ const data = await spinner('Inspecting container', () => client.containers.inspect(container));
214
+ kv('Container ID', data.id);
215
+ kv('Name', data.name);
216
+ kv('Image', data.image);
217
+ kv('Status', statusColor(data.state.status));
218
+ kv('Running', data.state.running ? c.green('true') : c.red('false'));
219
+ if (data.resources.memoryLimitBytes > 0)
220
+ kv('Memory Limit', `${Math.round(data.resources.memoryLimitBytes / (1024 * 1024))} MB`);
221
+ if (data.resources.cpuShares > 0)
222
+ kv('CPU Shares', `${data.resources.cpuShares}`);
223
+ kv('Restart Policy', data.resources.restartPolicy);
224
+ if (Object.keys(data.traefikTags).length > 0) {
225
+ console.log(c.dim('\n Traefik Dynamic Ingress Tags:'));
226
+ for (const [k, v] of Object.entries(data.traefikTags)) {
227
+ console.log(` ${c.yellow(k)}: ${c.dim(v)}`);
228
+ }
229
+ }
230
+ console.log();
231
+ }
232
+ catch (err) {
233
+ error(err instanceof Error ? err.message : String(err));
234
+ }
235
+ }
236
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/commands/services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** `ninedeploy setup` — create the first admin user on a fresh instance. */
2
+ export declare function setupAction(): Promise<void>;
3
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAIA,4EAA4E;AAC5E,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCjD"}
@@ -0,0 +1,40 @@
1
+ import { createClient, NineDeployError } from '@ninedeploy/sdk';
2
+ import { loadConfig, saveConfig } from '../config.js';
3
+ import { prompt, promptHidden } from '../prompts.js';
4
+ /** `ninedeploy setup` — create the first admin user on a fresh instance. */
5
+ export async function setupAction() {
6
+ const existing = loadConfig();
7
+ const baseUrl = await prompt('Server URL', existing.baseUrl);
8
+ const email = await prompt('Admin email');
9
+ if (!email) {
10
+ console.error('Email is required.');
11
+ process.exitCode = 1;
12
+ return;
13
+ }
14
+ const name = (await prompt('Display name (optional)')) || undefined;
15
+ const password = await promptHidden('Password (min 8 chars)');
16
+ if (!password || password.length < 8) {
17
+ console.error('Password must be at least 8 characters.');
18
+ process.exitCode = 1;
19
+ return;
20
+ }
21
+ const client = createClient({ baseUrl });
22
+ try {
23
+ const session = await client.auth.setup({ email, password, name });
24
+ saveConfig({ baseUrl, token: session.tokens.accessToken });
25
+ console.log(`✓ Admin account created: ${session.user.email}`);
26
+ console.log(' Credentials saved — you are logged in.');
27
+ }
28
+ catch (err) {
29
+ if (err instanceof NineDeployError) {
30
+ console.error(`✗ Setup failed (${err.status}): ${err.message}`);
31
+ if (err.status === 409)
32
+ console.error(' The instance already has an admin user.');
33
+ }
34
+ else {
35
+ console.error('✗ Setup failed:', err instanceof Error ? err.message : err);
36
+ }
37
+ process.exitCode = 1;
38
+ }
39
+ }
40
+ //# sourceMappingURL=setup.js.map