@neetru/cli 1.0.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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +197 -0
  3. package/dist/commands/add.d.ts +3 -0
  4. package/dist/commands/add.d.ts.map +1 -0
  5. package/dist/commands/add.js +150 -0
  6. package/dist/commands/add.js.map +1 -0
  7. package/dist/commands/deploy.d.ts +3 -0
  8. package/dist/commands/deploy.d.ts.map +1 -0
  9. package/dist/commands/deploy.js +196 -0
  10. package/dist/commands/deploy.js.map +1 -0
  11. package/dist/commands/generate-types.d.ts +3 -0
  12. package/dist/commands/generate-types.d.ts.map +1 -0
  13. package/dist/commands/generate-types.js +150 -0
  14. package/dist/commands/generate-types.js.map +1 -0
  15. package/dist/commands/init.d.ts +3 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +149 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/login.d.ts +3 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +104 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/logs.d.ts +3 -0
  24. package/dist/commands/logs.d.ts.map +1 -0
  25. package/dist/commands/logs.js +114 -0
  26. package/dist/commands/logs.js.map +1 -0
  27. package/dist/commands/open.d.ts +3 -0
  28. package/dist/commands/open.d.ts.map +1 -0
  29. package/dist/commands/open.js +91 -0
  30. package/dist/commands/open.js.map +1 -0
  31. package/dist/commands/status.d.ts +3 -0
  32. package/dist/commands/status.d.ts.map +1 -0
  33. package/dist/commands/status.js +99 -0
  34. package/dist/commands/status.js.map +1 -0
  35. package/dist/commands/validate.d.ts +3 -0
  36. package/dist/commands/validate.d.ts.map +1 -0
  37. package/dist/commands/validate.js +99 -0
  38. package/dist/commands/validate.js.map +1 -0
  39. package/dist/commands/whoami.d.ts +3 -0
  40. package/dist/commands/whoami.d.ts.map +1 -0
  41. package/dist/commands/whoami.js +33 -0
  42. package/dist/commands/whoami.js.map +1 -0
  43. package/dist/config.d.ts +14 -0
  44. package/dist/config.d.ts.map +1 -0
  45. package/dist/config.js +83 -0
  46. package/dist/config.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +40 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/scaffold/auth.d.ts +3 -0
  52. package/dist/scaffold/auth.d.ts.map +1 -0
  53. package/dist/scaffold/auth.js +228 -0
  54. package/dist/scaffold/auth.js.map +1 -0
  55. package/dist/scaffold/billing.d.ts +3 -0
  56. package/dist/scaffold/billing.d.ts.map +1 -0
  57. package/dist/scaffold/billing.js +184 -0
  58. package/dist/scaffold/billing.js.map +1 -0
  59. package/dist/scaffold/usage.d.ts +3 -0
  60. package/dist/scaffold/usage.d.ts.map +1 -0
  61. package/dist/scaffold/usage.js +173 -0
  62. package/dist/scaffold/usage.js.map +1 -0
  63. package/dist/scaffold/users.d.ts +3 -0
  64. package/dist/scaffold/users.d.ts.map +1 -0
  65. package/dist/scaffold/users.js +135 -0
  66. package/dist/scaffold/users.js.map +1 -0
  67. package/package.json +60 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Neetru
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,197 @@
1
+ # Neetru CLI
2
+
3
+ SDK scaffolding e operações DevOps para integrar seu SaaS com **Neetru Core**.
4
+
5
+ ```bash
6
+ npm install -g @neetru/cli
7
+ ```
8
+
9
+ ## Quick Start
10
+
11
+ ```bash
12
+ # 1. Autentique seu CLI (uma vez)
13
+ neetru login
14
+
15
+ # 2. Inicialize seu projeto
16
+ neetru init
17
+
18
+ # 3. Adicione integrações (auth, billing, usage, users)
19
+ neetru add auth
20
+ neetru add billing
21
+
22
+ # 4. Verifique tudo
23
+ neetru validate
24
+
25
+ # 5. Deploy
26
+ neetru deploy --env dev --watch
27
+ ```
28
+
29
+ ## Comandos
30
+
31
+ ### Setup
32
+
33
+ | Comando | Descrição |
34
+ |---------|-----------|
35
+ | `neetru init` | Inicializa `neetru.json` no projeto atual |
36
+ | `neetru add <feature>` | Scaffold de integração (auth, billing, usage, users) |
37
+ | `neetru generate-types` | Gera tipos TypeScript a partir do schema do Core |
38
+ | `neetru validate` | Valida configuração e conexão |
39
+
40
+ ### Autenticação
41
+
42
+ | Comando | Descrição |
43
+ |---------|-----------|
44
+ | `neetru login` | Autentica o CLI com API key |
45
+ | `neetru whoami` | Mostra configuração do projeto atual |
46
+
47
+ ### Operações
48
+
49
+ | Comando | Descrição |
50
+ |---------|-----------|
51
+ | `neetru status` | Status do workspace (build, deploy, domínio) |
52
+ | `neetru deploy [-e dev\|staging\|prod] [--watch]` | Dispara deploy |
53
+ | `neetru logs [-f] [-n 100] [--since 1h]` | Logs do workspace |
54
+ | `neetru open [page]` | Abre painel Neetru no navegador |
55
+
56
+ ## Como obter API Key
57
+
58
+ 1. Acesse o painel Neetru Core: `https://core.neetru.com/admin/cli-keys`
59
+ 2. Clique em **"Gerar nova API key"**
60
+ 3. Dê um nome descritivo (ex: "MacBook Local")
61
+ 4. Copie o token mostrado **uma única vez** (formato: `nrt_xxxxxxxx_yyyyy...`)
62
+ 5. No terminal: `neetru login` e cole o token
63
+
64
+ API keys são vinculadas ao seu usuário e respeitam suas roles (admin/operator/viewer).
65
+
66
+ ## Configuração
67
+
68
+ ### Local (`./neetru.json`)
69
+ Criado por `neetru init`. Define o projeto:
70
+
71
+ ```json
72
+ {
73
+ "coreUrl": "https://core.neetru.com",
74
+ "clientId": "client_abc123",
75
+ "projectName": "minha-app",
76
+ "features": ["auth", "billing"],
77
+ "createdAt": "2026-04-25T..."
78
+ }
79
+ ```
80
+
81
+ ### Global (`~/.neetru/config.json`)
82
+ Credenciais (criadas por `neetru login`):
83
+
84
+ ```json
85
+ {
86
+ "coreUrl": "https://core.neetru.com",
87
+ "clientSecret": "nrt_xxxxxxxx_yyyy..."
88
+ }
89
+ ```
90
+
91
+ ### Variáveis de ambiente
92
+
93
+ | Variável | Uso |
94
+ |----------|-----|
95
+ | `NEETRU_CLI_API_KEY` | API key alternativa (override de `~/.neetru/config.json`) |
96
+ | `NEETRU_CORE_URL` | Override do core URL |
97
+ | `NEETRU_CLIENT_ID` | Client ID (necessário no app, não no CLI) |
98
+ | `NEETRU_CLIENT_SECRET` | Client secret OAuth (do SDK no app) |
99
+
100
+ ## Features
101
+
102
+ ### `auth` — OAuth 2.0 / OIDC
103
+
104
+ Login SSO com Neetru Core. Scaffold inclui:
105
+ - Rotas `/auth/login` e `/auth/callback`
106
+ - Session management
107
+ - `requireNeetruSession()` middleware
108
+
109
+ ### `billing` — Assinaturas e Planos
110
+
111
+ Client para checar entitlements e planos:
112
+ ```ts
113
+ import { neetruBilling } from '@/lib/neetru';
114
+
115
+ const sub = await neetruBilling.getSubscription();
116
+ const canUseFeature = await neetruBilling.checkEntitlement('advanced_reports');
117
+ ```
118
+
119
+ ### `usage` — Metered Billing
120
+
121
+ Reportar eventos de uso (faturados via Stripe):
122
+ ```ts
123
+ import { reporter } from '@/lib/neetru/usage';
124
+
125
+ reporter.track('api_call', 1);
126
+ reporter.track('storage_gb', 2.5);
127
+ // Eventos enviados em batch a cada 60s
128
+ ```
129
+
130
+ ### `users` — API de Usuários
131
+
132
+ Buscar perfis e preferências dos usuários autenticados via Neetru Auth.
133
+
134
+ ## Exemplo End-to-End
135
+
136
+ ```bash
137
+ # Cliente final (ou DevOps do cliente)
138
+ $ neetru login
139
+ 🔐 Neetru CLI — Login
140
+ Obtenha sua API key em: https://core.neetru.com/admin/cli-keys
141
+ API key: ********
142
+ ✓ Autenticado como devops@cliente.com (operator)
143
+
144
+ $ cd ~/projects/minha-app
145
+ $ neetru init
146
+ 🚀 Neetru SDK — Inicialização
147
+ URL do Neetru Core: https://core.neetru.com
148
+ OAuth Client ID: client_a1b2c3
149
+ ✓ neetru.json criado
150
+
151
+ $ neetru add auth
152
+ ✓ auth adicionado
153
+ src/lib/neetru/auth.ts
154
+ src/app/api/auth/callback/route.ts
155
+
156
+ $ neetru deploy --env staging --watch
157
+ 🚀 Deploy → staging
158
+ Branch: main
159
+ Workspace: client_a1b2c3
160
+
161
+ ✓ Deploy iniciado: dpl_xyz789
162
+
163
+ ✓ pre-checks (success)
164
+ ✓ download-artifact (success)
165
+ ✓ run-migrations (success)
166
+ ✓ restart-services (success)
167
+ ✓ healthcheck (success)
168
+ ✓ post-hooks (success)
169
+
170
+ ✓ Deploy concluído com sucesso
171
+ → https://minha-app.staging.neetru.com
172
+ ```
173
+
174
+ ## Desenvolvimento Local
175
+
176
+ ```bash
177
+ git clone https://github.com/neetru/cli.git
178
+ cd cli
179
+ npm install
180
+ npm run dev -- --help
181
+
182
+ # Build
183
+ npm run build
184
+
185
+ # Testar localmente
186
+ node dist/index.js init
187
+ ```
188
+
189
+ ## Suporte
190
+
191
+ - Documentação: https://docs.neetru.com
192
+ - Issues: https://github.com/neetru/cli/issues
193
+ - Painel: https://core.neetru.com
194
+
195
+ ## Licença
196
+
197
+ MIT © Neetru
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function addCommand(): Command;
3
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,UAAU,IAAI,OAAO,CA4DpC"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.addCommand = addCommand;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const ora_1 = __importDefault(require("ora"));
43
+ const fs = __importStar(require("fs-extra"));
44
+ const path = __importStar(require("path"));
45
+ const config_1 = require("../config");
46
+ const auth_1 = require("../scaffold/auth");
47
+ const billing_1 = require("../scaffold/billing");
48
+ const usage_1 = require("../scaffold/usage");
49
+ const users_1 = require("../scaffold/users");
50
+ const FEATURES = {
51
+ auth: {
52
+ description: 'OAuth 2.0 / OIDC com Neetru Core (login, callback, session)',
53
+ scaffold: auth_1.scaffoldAuth,
54
+ },
55
+ billing: {
56
+ description: 'Client de assinaturas e planos via Neetru API',
57
+ scaffold: billing_1.scaffoldBilling,
58
+ },
59
+ usage: {
60
+ description: 'Metered billing — reporte de eventos de uso',
61
+ scaffold: usage_1.scaffoldUsage,
62
+ },
63
+ users: {
64
+ description: 'API de usuários Neetru (perfil, preferências)',
65
+ scaffold: users_1.scaffoldUsers,
66
+ },
67
+ };
68
+ function addCommand() {
69
+ const cmd = new commander_1.Command('add');
70
+ cmd
71
+ .description('Adiciona uma integração Neetru ao projeto')
72
+ .argument('<feature>', `Feature a adicionar: ${Object.keys(FEATURES).join(' | ')}`)
73
+ .option('--out-dir <dir>', 'Diretório de saída dos arquivos gerados', 'src/lib/neetru')
74
+ .option('--framework <name>', 'Framework do projeto (nextjs | express | fastify | plain)', 'nextjs')
75
+ .action(async (feature, options) => {
76
+ const featureDef = FEATURES[feature];
77
+ if (!featureDef) {
78
+ console.error(chalk_1.default.red(`Feature desconhecida: ${feature}`));
79
+ console.log(chalk_1.default.dim(`Disponíveis: ${Object.keys(FEATURES).join(', ')}`));
80
+ process.exit(1);
81
+ }
82
+ let config;
83
+ try {
84
+ config = (0, config_1.requireConfig)();
85
+ }
86
+ catch (e) {
87
+ console.error(chalk_1.default.red(e.message));
88
+ process.exit(1);
89
+ }
90
+ // Check if feature already added
91
+ if (config.features.includes(feature)) {
92
+ console.log(chalk_1.default.yellow(`${feature} já está listado em neetru.json`));
93
+ }
94
+ const spinner = (0, ora_1.default)(`Gerando integração: ${chalk_1.default.bold(feature)}`).start();
95
+ const outDir = path.resolve(options.outDir);
96
+ try {
97
+ fs.ensureDirSync(outDir);
98
+ const createdFiles = await featureDef.scaffold(config, outDir);
99
+ spinner.succeed(`${chalk_1.default.bold(feature)} adicionado`);
100
+ console.log(chalk_1.default.dim('\nArquivos gerados:'));
101
+ createdFiles.forEach((f) => console.log(chalk_1.default.dim(` ${f}`)));
102
+ // Update neetru.json features list
103
+ if (!config.features.includes(feature)) {
104
+ config.features.push(feature);
105
+ const { writeLocalConfig } = await Promise.resolve().then(() => __importStar(require('../config')));
106
+ writeLocalConfig(config);
107
+ }
108
+ // Print next steps
109
+ console.log('\n' + chalk_1.default.bold('Próximos passos:'));
110
+ printNextSteps(feature, options.outDir, options.framework);
111
+ console.log('');
112
+ }
113
+ catch (err) {
114
+ spinner.fail(`Erro ao gerar ${feature}: ${err.message}`);
115
+ process.exit(1);
116
+ }
117
+ });
118
+ return cmd;
119
+ }
120
+ function printNextSteps(feature, outDir, framework) {
121
+ switch (feature) {
122
+ case 'auth':
123
+ if (framework === 'nextjs') {
124
+ console.log(chalk_1.default.dim(` 1. Adicione as env vars de NEETRU_CLIENT_ID e NEETRU_CLIENT_SECRET`));
125
+ console.log(chalk_1.default.dim(` 2. Configure a rota de callback em seu OAuth client no painel Neetru`));
126
+ console.log(chalk_1.default.dim(` 3. Use NeetruAuthProvider em seu layout raiz`));
127
+ console.log(chalk_1.default.dim(` 4. Proteja rotas com requireNeetruSession()`));
128
+ }
129
+ else {
130
+ console.log(chalk_1.default.dim(` 1. Adicione NEETRU_CLIENT_ID, NEETRU_CLIENT_SECRET às env vars`));
131
+ console.log(chalk_1.default.dim(` 2. Monte as rotas /auth/login e /auth/callback`));
132
+ }
133
+ break;
134
+ case 'billing':
135
+ console.log(chalk_1.default.dim(` 1. Adicione NEETRU_CLIENT_ID às env vars`));
136
+ console.log(chalk_1.default.dim(` 2. Use neetruBilling.getSubscription() para verificar plano ativo`));
137
+ console.log(chalk_1.default.dim(` 3. Use neetruBilling.checkEntitlement() para feature flags`));
138
+ break;
139
+ case 'usage':
140
+ console.log(chalk_1.default.dim(` 1. Inicialize o UsageReporter com seu clientId`));
141
+ console.log(chalk_1.default.dim(` 2. Chame reporter.track(eventType, quantity) nos pontos de uso`));
142
+ console.log(chalk_1.default.dim(` 3. Eventos são enviados em batch a cada 60s automaticamente`));
143
+ break;
144
+ case 'users':
145
+ console.log(chalk_1.default.dim(` 1. Use neetruUsers.getProfile(token) para buscar dados do usuário`));
146
+ console.log(chalk_1.default.dim(` 2. O token vem do fluxo OAuth (neetru add auth)`));
147
+ break;
148
+ }
149
+ }
150
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function deployCommand(): Command;
3
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,aAAa,IAAI,OAAO,CA8JvC"}
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.deployCommand = deployCommand;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const ora_1 = __importDefault(require("ora"));
43
+ const config_1 = require("../config");
44
+ async function prompt(questions) {
45
+ const { default: inquirer } = await Promise.resolve().then(() => __importStar(require('inquirer')));
46
+ return inquirer.prompt(questions);
47
+ }
48
+ function deployCommand() {
49
+ const cmd = new commander_1.Command('deploy');
50
+ cmd
51
+ .description('Dispara um deploy do workspace para o ambiente alvo')
52
+ .option('-e, --env <env>', 'Ambiente alvo: dev | staging | prod', 'dev')
53
+ .option('--branch <branch>', 'Branch a deployar (default: main)', 'main')
54
+ .option('--watch', 'Acompanhar progresso em tempo real')
55
+ .option('--yes', 'Pular confirmação')
56
+ .action(async (options) => {
57
+ let config;
58
+ try {
59
+ config = (0, config_1.requireConfig)();
60
+ }
61
+ catch (e) {
62
+ console.error(chalk_1.default.red(e.message));
63
+ process.exit(1);
64
+ }
65
+ const global = (0, config_1.readGlobalConfig)();
66
+ const apiKey = global.clientSecret ?? process.env.NEETRU_CLI_API_KEY;
67
+ if (!apiKey) {
68
+ console.error(chalk_1.default.red('Não autenticado. Execute neetru login primeiro.'));
69
+ process.exit(1);
70
+ }
71
+ const env = options.env;
72
+ if (!['dev', 'staging', 'prod'].includes(env)) {
73
+ console.error(chalk_1.default.red(`Ambiente inválido: ${env}. Use dev | staging | prod.`));
74
+ process.exit(1);
75
+ }
76
+ // Confirmation for prod
77
+ if (env === 'prod' && !options.yes) {
78
+ const { confirm } = await prompt([{
79
+ type: 'confirm',
80
+ name: 'confirm',
81
+ message: chalk_1.default.yellow.bold(`⚠ Deploy para PRODUÇÃO (branch: ${options.branch}). Continuar?`),
82
+ default: false,
83
+ }]);
84
+ if (!confirm) {
85
+ console.log(chalk_1.default.dim('Cancelado.'));
86
+ return;
87
+ }
88
+ }
89
+ console.log('\n' + chalk_1.default.bold(`🚀 Deploy → ${chalk_1.default.cyan(env)}`));
90
+ console.log(chalk_1.default.dim(` Branch: ${options.branch}`));
91
+ console.log(chalk_1.default.dim(` Workspace: ${config.clientId}\n`));
92
+ const spinner = (0, ora_1.default)('Disparando deploy...').start();
93
+ let deployResp;
94
+ try {
95
+ const res = await fetch(`${config.coreUrl}/api/v1/cli/deploy`, {
96
+ method: 'POST',
97
+ headers: {
98
+ Authorization: `Bearer ${apiKey}`,
99
+ 'Content-Type': 'application/json',
100
+ },
101
+ body: JSON.stringify({
102
+ clientId: config.clientId,
103
+ environment: env,
104
+ branch: options.branch,
105
+ }),
106
+ signal: AbortSignal.timeout(15000),
107
+ });
108
+ if (!res.ok) {
109
+ const body = await res.json().catch(() => ({}));
110
+ spinner.fail(`HTTP ${res.status}: ${body.error ?? 'Erro desconhecido'}`);
111
+ process.exit(1);
112
+ }
113
+ deployResp = await res.json();
114
+ spinner.succeed(`Deploy iniciado: ${chalk_1.default.cyan(deployResp.deploymentId)}`);
115
+ }
116
+ catch (e) {
117
+ spinner.fail(`Erro: ${e.message}`);
118
+ process.exit(1);
119
+ }
120
+ if (!options.watch) {
121
+ console.log('');
122
+ console.log(chalk_1.default.dim('Acompanhe em:'));
123
+ console.log(chalk_1.default.cyan(` ${config.coreUrl}/deployments/${deployResp.deploymentId}`));
124
+ console.log(chalk_1.default.dim(`Ou use: neetru deploy --watch`));
125
+ console.log('');
126
+ return;
127
+ }
128
+ // Watch mode — poll status every 3s
129
+ console.log('');
130
+ const watchSpinner = (0, ora_1.default)('Aguardando steps...').start();
131
+ const seenSteps = new Set();
132
+ let attempts = 0;
133
+ const maxAttempts = 200; // 10min timeout
134
+ const poll = async () => {
135
+ attempts++;
136
+ try {
137
+ const res = await fetch(`${config.coreUrl}/api/v1/cli/deployments/${deployResp.deploymentId}`, {
138
+ headers: { Authorization: `Bearer ${apiKey}` },
139
+ signal: AbortSignal.timeout(8000),
140
+ });
141
+ if (!res.ok)
142
+ return false;
143
+ const status = await res.json();
144
+ for (const step of status.steps) {
145
+ const key = `${step.name}:${step.status}`;
146
+ if (seenSteps.has(key))
147
+ continue;
148
+ seenSteps.add(key);
149
+ const icon = step.status === 'success' ? chalk_1.default.green('✓')
150
+ : step.status === 'failed' ? chalk_1.default.red('✗')
151
+ : step.status === 'running' ? chalk_1.default.yellow('●')
152
+ : chalk_1.default.dim('○');
153
+ const label = step.status === 'pending' ? chalk_1.default.dim(step.name) : step.name;
154
+ if (step.status !== 'pending') {
155
+ watchSpinner.stop();
156
+ console.log(` ${icon} ${label} ${chalk_1.default.dim(`(${step.status})`)}`);
157
+ if (status.steps.some((s) => s.status === 'pending' || s.status === 'running')) {
158
+ watchSpinner.start('Aguardando próximo step...');
159
+ }
160
+ }
161
+ }
162
+ if (['success', 'failed', 'rolled_back'].includes(status.status)) {
163
+ watchSpinner.stop();
164
+ if (status.status === 'success') {
165
+ console.log('\n' + chalk_1.default.green.bold('✓ Deploy concluído com sucesso'));
166
+ if (status.url)
167
+ console.log(chalk_1.default.cyan(` → ${status.url}`));
168
+ }
169
+ else {
170
+ console.log('\n' + chalk_1.default.red.bold(`✗ Deploy falhou (${status.status})`));
171
+ if (status.error)
172
+ console.log(chalk_1.default.dim(` ${status.error}`));
173
+ }
174
+ console.log('');
175
+ return true;
176
+ }
177
+ return false;
178
+ }
179
+ catch {
180
+ return false;
181
+ }
182
+ };
183
+ const interval = setInterval(async () => {
184
+ const done = await poll();
185
+ if (done || attempts >= maxAttempts) {
186
+ clearInterval(interval);
187
+ if (attempts >= maxAttempts) {
188
+ watchSpinner.fail('Timeout (10min). Verifique no painel.');
189
+ process.exit(1);
190
+ }
191
+ }
192
+ }, 3000);
193
+ });
194
+ return cmd;
195
+ }
196
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function generateTypesCommand(): Command;
3
+ //# sourceMappingURL=generate-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-types.d.ts","sourceRoot":"","sources":["../../src/commands/generate-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,oBAAoB,IAAI,OAAO,CAwD9C"}