@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.
- package/LICENSE +21 -0
- package/README.md +197 -0
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +150 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/deploy.d.ts +3 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +196 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/generate-types.d.ts +3 -0
- package/dist/commands/generate-types.d.ts.map +1 -0
- package/dist/commands/generate-types.js +150 -0
- package/dist/commands/generate-types.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +149 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +104 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +3 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +114 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/open.d.ts +3 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +91 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +99 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +99 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +33 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold/auth.d.ts +3 -0
- package/dist/scaffold/auth.d.ts.map +1 -0
- package/dist/scaffold/auth.js +228 -0
- package/dist/scaffold/auth.js.map +1 -0
- package/dist/scaffold/billing.d.ts +3 -0
- package/dist/scaffold/billing.d.ts.map +1 -0
- package/dist/scaffold/billing.js +184 -0
- package/dist/scaffold/billing.js.map +1 -0
- package/dist/scaffold/usage.d.ts +3 -0
- package/dist/scaffold/usage.d.ts.map +1 -0
- package/dist/scaffold/usage.js +173 -0
- package/dist/scaffold/usage.js.map +1 -0
- package/dist/scaffold/users.d.ts +3 -0
- package/dist/scaffold/users.d.ts.map +1 -0
- package/dist/scaffold/users.js +135 -0
- package/dist/scaffold/users.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|