@neetru/cli 2.25.0 → 2.26.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/dist/commands/build.js +12 -17
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/dev-up.d.ts +10 -26
- package/dist/commands/dev-up.js +9 -141
- package/dist/commands/dev-up.js.map +1 -1
- package/dist/commands/logs.d.ts +29 -0
- package/dist/commands/logs.js +161 -0
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/webhooks.d.ts +34 -0
- package/dist/commands/webhooks.js +162 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/index.js +109 -22
- package/dist/index.js.map +1 -1
- package/dist/lib/compose-generator.js +11 -7
- package/dist/lib/compose-generator.js.map +1 -1
- package/dist/utils/safe-exit.d.ts +23 -0
- package/dist/utils/safe-exit.js +53 -1
- package/dist/utils/safe-exit.js.map +1 -1
- package/package.json +1 -1
- package/templates/billing/checkout.ts +25 -9
- package/templates/billing/page.tsx +56 -15
- package/templates/billing/webhooks.ts +83 -0
package/dist/commands/logs.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* - Modo polling NDJSON (fallback): poll a cada 5s com `after=<lastTs>`.
|
|
8
8
|
* Saída NDJSON (`--json`): imprime cada LogEntry como JSON line.
|
|
9
9
|
*/
|
|
10
|
+
import { existsSync, readFileSync, statSync, openSync, readSync, closeSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
10
12
|
import chalk from 'chalk';
|
|
11
13
|
import { apiRequest, CliApiError, CliNetworkError } from '../lib/api-client.js';
|
|
12
14
|
import { config } from '../lib/config.js';
|
|
@@ -48,6 +50,160 @@ function printLog(entry, jsonMode) {
|
|
|
48
50
|
const src = entry.source ? chalk.dim(`[${entry.source}]`) : '';
|
|
49
51
|
console.log(`${chalk.dim(ts)} ${color(lvl)} ${src} ${entry.message}`);
|
|
50
52
|
}
|
|
53
|
+
// ── Dev Suite — leitura do NDJSON local do emulador (`neetru dev up`) ─────────
|
|
54
|
+
// Pareia com o coletor do Core (`.neetru/dev/logs.ndjson`), que espelha o log
|
|
55
|
+
// estruturado quando NEETRU_ENV=dev-local. O CLI lê esse arquivo direto, sem
|
|
56
|
+
// tocar em rede/auth — é o "observável sob demanda" do backstage local.
|
|
57
|
+
/** Caminho default do NDJSON local (bate com o DEFAULT_LOG_PATH do coletor do Core). */
|
|
58
|
+
function resolveLocalLogPath(local) {
|
|
59
|
+
if (typeof local === 'string' && local.length > 0)
|
|
60
|
+
return local;
|
|
61
|
+
return process.env.LOG_COLLECTOR_PATH ?? join('.neetru', 'dev', 'logs.ndjson');
|
|
62
|
+
}
|
|
63
|
+
/** Mapeia `severity` do Core (INFO/WARNING/...) pro `level` do CLI (info/warn/...). */
|
|
64
|
+
function severityToLevel(sev) {
|
|
65
|
+
if (typeof sev !== 'string')
|
|
66
|
+
return undefined;
|
|
67
|
+
switch (sev.toUpperCase()) {
|
|
68
|
+
case 'DEBUG': return 'debug';
|
|
69
|
+
case 'INFO':
|
|
70
|
+
case 'NOTICE': return 'info';
|
|
71
|
+
case 'WARNING':
|
|
72
|
+
case 'WARN': return 'warn';
|
|
73
|
+
case 'ERROR': return 'error';
|
|
74
|
+
case 'CRITICAL':
|
|
75
|
+
case 'FATAL': return 'fatal';
|
|
76
|
+
default: return sev.toLowerCase();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Normaliza uma linha crua do NDJSON local pro shape `LogEntry`. Aceita tanto o
|
|
81
|
+
* shape do Core (`severity`/`event`/`service`) quanto um `LogEntry` já pronto
|
|
82
|
+
* (`level`/`source`). Campos não-mapeados viram `metadata`.
|
|
83
|
+
*/
|
|
84
|
+
export function normalizeLocalEntry(raw) {
|
|
85
|
+
const { timestamp, level, severity, message, event, source, service, ...rest } = raw;
|
|
86
|
+
return {
|
|
87
|
+
timestamp: typeof timestamp === 'string' ? timestamp : new Date().toISOString(),
|
|
88
|
+
level: (typeof level === 'string' ? level : undefined) ?? severityToLevel(severity),
|
|
89
|
+
message: typeof message === 'string' ? message
|
|
90
|
+
: typeof event === 'string' ? event
|
|
91
|
+
: '(sem mensagem)',
|
|
92
|
+
source: (typeof source === 'string' ? source : undefined)
|
|
93
|
+
?? (typeof service === 'string' ? service : undefined),
|
|
94
|
+
metadata: Object.keys(rest).length > 0 ? rest : undefined,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function passesLevel(entry, level) {
|
|
98
|
+
if (!level)
|
|
99
|
+
return true;
|
|
100
|
+
return (entry.level ?? 'info').toLowerCase() === level.toLowerCase();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Lê o NDJSON local, parseia linha a linha (ignora malformadas), filtra por
|
|
104
|
+
* `level` e retorna as últimas `lines` entradas normalizadas.
|
|
105
|
+
*/
|
|
106
|
+
export function readLocalNdjson(filePath, opts = {}) {
|
|
107
|
+
if (!existsSync(filePath))
|
|
108
|
+
return [];
|
|
109
|
+
const entries = [];
|
|
110
|
+
for (const line of readFileSync(filePath, 'utf8').split('\n')) {
|
|
111
|
+
const t = line.trim();
|
|
112
|
+
if (!t)
|
|
113
|
+
continue;
|
|
114
|
+
let parsed;
|
|
115
|
+
try {
|
|
116
|
+
parsed = JSON.parse(t);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const entry = normalizeLocalEntry(parsed);
|
|
122
|
+
if (passesLevel(entry, opts.level))
|
|
123
|
+
entries.push(entry);
|
|
124
|
+
}
|
|
125
|
+
const n = opts.lines && opts.lines > 0 ? opts.lines : entries.length;
|
|
126
|
+
return entries.slice(-n);
|
|
127
|
+
}
|
|
128
|
+
/** Modo `--local`: lê o NDJSON do emulador, imprime, e faz tail se `--follow`. */
|
|
129
|
+
async function runLocalLogs(opts) {
|
|
130
|
+
const jsonMode = opts.json ?? false;
|
|
131
|
+
const filePath = resolveLocalLogPath(opts.local ?? true);
|
|
132
|
+
const lines = Math.max(1, Math.min(1000, Number.parseInt(opts.lines ?? '50', 10) || 50));
|
|
133
|
+
if (!existsSync(filePath)) {
|
|
134
|
+
if (!jsonMode) {
|
|
135
|
+
log.error(`Nenhum coletor local em ${filePath}.`);
|
|
136
|
+
log.dim(' Suba o emulador (`neetru dev up`, NEETRU_ENV=dev-local) pra gerar logs.');
|
|
137
|
+
}
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const initial = readLocalNdjson(filePath, { lines, level: opts.level });
|
|
141
|
+
if (initial.length === 0 && !jsonMode)
|
|
142
|
+
log.dim(' Nenhum log local no arquivo.');
|
|
143
|
+
else
|
|
144
|
+
for (const e of initial)
|
|
145
|
+
printLog(e, jsonMode);
|
|
146
|
+
if (!opts.follow)
|
|
147
|
+
return;
|
|
148
|
+
// Tail por polling do tamanho do arquivo (robusto no Windows; ~igual ao remoto).
|
|
149
|
+
if (!jsonMode)
|
|
150
|
+
log.dim(' Aguardando novos logs locais… (Ctrl+C para sair)');
|
|
151
|
+
let offset = statSync(filePath).size;
|
|
152
|
+
let stopped = false;
|
|
153
|
+
const onSigint = () => { stopped = true; };
|
|
154
|
+
process.once('SIGINT', onSigint);
|
|
155
|
+
try {
|
|
156
|
+
while (!stopped) {
|
|
157
|
+
await new Promise((r) => setTimeout(r, 1000));
|
|
158
|
+
if (stopped)
|
|
159
|
+
break;
|
|
160
|
+
if (!existsSync(filePath))
|
|
161
|
+
continue;
|
|
162
|
+
let size;
|
|
163
|
+
try {
|
|
164
|
+
size = statSync(filePath).size;
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (size < offset)
|
|
170
|
+
offset = 0; // rotacionou/truncou
|
|
171
|
+
if (size <= offset)
|
|
172
|
+
continue;
|
|
173
|
+
const fd = openSync(filePath, 'r');
|
|
174
|
+
const buf = Buffer.alloc(size - offset);
|
|
175
|
+
try {
|
|
176
|
+
readSync(fd, buf, 0, buf.length, offset);
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
closeSync(fd);
|
|
180
|
+
}
|
|
181
|
+
offset = size;
|
|
182
|
+
for (const line of buf.toString('utf8').split('\n')) {
|
|
183
|
+
const t = line.trim();
|
|
184
|
+
if (!t)
|
|
185
|
+
continue;
|
|
186
|
+
let parsed;
|
|
187
|
+
try {
|
|
188
|
+
parsed = JSON.parse(t);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
const entry = normalizeLocalEntry(parsed);
|
|
194
|
+
if (passesLevel(entry, opts.level))
|
|
195
|
+
printLog(entry, jsonMode);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
process.removeListener('SIGINT', onSigint);
|
|
201
|
+
}
|
|
202
|
+
if (!jsonMode) {
|
|
203
|
+
process.stdout.write('\n');
|
|
204
|
+
log.dim(' tail local encerrado.');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
51
207
|
async function fetchLogs(clientId, params) {
|
|
52
208
|
const qs = new URLSearchParams({
|
|
53
209
|
clientId,
|
|
@@ -256,6 +412,11 @@ async function runPollingFollow(clientId, lastTs, lines, opts, jsonMode) {
|
|
|
256
412
|
}
|
|
257
413
|
}
|
|
258
414
|
export async function runLogs(opts) {
|
|
415
|
+
// Dev Suite: `--local` lê o NDJSON do emulador e curto-circuita rede/auth.
|
|
416
|
+
if (opts.local !== undefined && opts.local !== false) {
|
|
417
|
+
await runLocalLogs(opts);
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
259
420
|
if (!opts.clientId && !opts.product) {
|
|
260
421
|
log.error('Informe --product <slug> ou --client-id <oauthClientId>.');
|
|
261
422
|
safeExit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface WebhooksRegisterOptions {
|
|
2
|
+
productId: string;
|
|
3
|
+
url: string;
|
|
4
|
+
events: string[];
|
|
5
|
+
secret?: string;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function runWebhooksRegister(opts: WebhooksRegisterOptions): Promise<void>;
|
|
9
|
+
export interface WebhooksListOptions {
|
|
10
|
+
productId: string;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function runWebhooksList(opts: WebhooksListOptions): Promise<void>;
|
|
14
|
+
export interface WebhooksUnregisterOptions {
|
|
15
|
+
id: string;
|
|
16
|
+
productId: string;
|
|
17
|
+
json?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function runWebhooksUnregister(opts: WebhooksUnregisterOptions): Promise<void>;
|
|
20
|
+
export interface WebhooksTestOptions {
|
|
21
|
+
id: string;
|
|
22
|
+
productId: string;
|
|
23
|
+
event?: string;
|
|
24
|
+
json?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function runWebhooksTest(opts: WebhooksTestOptions): Promise<void>;
|
|
27
|
+
export interface WebhooksDeliveriesOptions {
|
|
28
|
+
id: string;
|
|
29
|
+
productId: string;
|
|
30
|
+
status?: string;
|
|
31
|
+
limit?: number;
|
|
32
|
+
json?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function runWebhooksDeliveries(opts: WebhooksDeliveriesOptions): Promise<void>;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { apiRequest } from '../lib/api-client.js';
|
|
4
|
+
import { requireToken, handleApiError } from '../lib/cli-read.js';
|
|
5
|
+
import { renderTable } from '../lib/render.js';
|
|
6
|
+
import { log } from '../utils/logger.js';
|
|
7
|
+
const ALL_EVENTS = [
|
|
8
|
+
'subscription.activated',
|
|
9
|
+
'subscription.cancelled',
|
|
10
|
+
'subscription.payment_failed',
|
|
11
|
+
'subscription.trial_ending',
|
|
12
|
+
'usage.quota_exceeded',
|
|
13
|
+
'account.suspended',
|
|
14
|
+
'account.reactivated',
|
|
15
|
+
'support.ticket_replied',
|
|
16
|
+
];
|
|
17
|
+
export async function runWebhooksRegister(opts) {
|
|
18
|
+
const token = await requireToken(opts.json);
|
|
19
|
+
const spinner = opts.json ? null : ora({ text: 'Registrando webhook…', color: 'blue' }).start();
|
|
20
|
+
let res;
|
|
21
|
+
try {
|
|
22
|
+
res = await apiRequest('/api/cli/v1/webhooks', {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
token,
|
|
25
|
+
body: {
|
|
26
|
+
productId: opts.productId,
|
|
27
|
+
url: opts.url,
|
|
28
|
+
events: opts.events,
|
|
29
|
+
secret: opts.secret,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
spinner?.stop();
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
spinner?.fail('Falha ao registrar webhook.');
|
|
36
|
+
handleApiError(error, opts.json);
|
|
37
|
+
}
|
|
38
|
+
if (opts.json) {
|
|
39
|
+
console.log(JSON.stringify(res));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
log.success('Webhook registrado com sucesso.');
|
|
43
|
+
console.log(` ${chalk.dim('ID:')} ${res.id}`);
|
|
44
|
+
console.log(` ${chalk.dim('URL:')} ${res.url}`);
|
|
45
|
+
console.log(` ${chalk.dim('Eventos:')} ${res.events.join(', ')}`);
|
|
46
|
+
console.log(` ${chalk.dim('Secret:')} ${res.hasSecret ? chalk.green('definido') : chalk.yellow('nenhum')}`);
|
|
47
|
+
console.log(` ${chalk.dim('Status:')} ${res.status}`);
|
|
48
|
+
}
|
|
49
|
+
export async function runWebhooksList(opts) {
|
|
50
|
+
const token = await requireToken(opts.json);
|
|
51
|
+
const spinner = opts.json ? null : ora({ text: 'Buscando webhooks…', color: 'blue' }).start();
|
|
52
|
+
let res;
|
|
53
|
+
try {
|
|
54
|
+
res = await apiRequest(`/api/cli/v1/webhooks?productId=${encodeURIComponent(opts.productId)}`, { token });
|
|
55
|
+
spinner?.stop();
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
spinner?.fail('Falha ao listar webhooks.');
|
|
59
|
+
handleApiError(error, opts.json);
|
|
60
|
+
}
|
|
61
|
+
if (opts.json) {
|
|
62
|
+
console.log(JSON.stringify(res));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (res.count === 0) {
|
|
66
|
+
log.info('Nenhum webhook registrado para este produto.');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
log.heading(`Webhooks — ${res.productId} (${res.count})`);
|
|
70
|
+
renderTable([
|
|
71
|
+
{ header: 'ID', value: (e) => e.id, maxWidth: 24 },
|
|
72
|
+
{ header: 'URL', value: (e) => e.url, maxWidth: 48 },
|
|
73
|
+
{ header: 'EVENTOS', value: (e) => e.events.join(', '), maxWidth: 36 },
|
|
74
|
+
{ header: 'SECRET', value: (e) => (e.hasSecret ? chalk.green('sim') : chalk.yellow('não')) },
|
|
75
|
+
{ header: 'STATUS', value: (e) => e.status === 'active' ? chalk.green(e.status) : chalk.red(e.status) },
|
|
76
|
+
{ header: 'FALHAS', value: (e) => String(e.consecutiveFailures) },
|
|
77
|
+
], res.endpoints);
|
|
78
|
+
}
|
|
79
|
+
export async function runWebhooksUnregister(opts) {
|
|
80
|
+
const token = await requireToken(opts.json);
|
|
81
|
+
const spinner = opts.json ? null : ora({ text: 'Removendo webhook…', color: 'yellow' }).start();
|
|
82
|
+
let res;
|
|
83
|
+
try {
|
|
84
|
+
res = await apiRequest(`/api/cli/v1/webhooks/${encodeURIComponent(opts.id)}?productId=${encodeURIComponent(opts.productId)}`, { method: 'DELETE', token });
|
|
85
|
+
spinner?.stop();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
spinner?.fail('Falha ao remover webhook.');
|
|
89
|
+
handleApiError(error, opts.json);
|
|
90
|
+
}
|
|
91
|
+
if (opts.json) {
|
|
92
|
+
console.log(JSON.stringify(res));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
log.success('Webhook removido.');
|
|
96
|
+
}
|
|
97
|
+
export async function runWebhooksTest(opts) {
|
|
98
|
+
const token = await requireToken(opts.json);
|
|
99
|
+
const spinner = opts.json ? null : ora({ text: 'Disparando evento de teste…', color: 'blue' }).start();
|
|
100
|
+
let res;
|
|
101
|
+
try {
|
|
102
|
+
res = await apiRequest(`/api/cli/v1/webhooks/${encodeURIComponent(opts.id)}/test?productId=${encodeURIComponent(opts.productId)}`, {
|
|
103
|
+
method: 'POST',
|
|
104
|
+
token,
|
|
105
|
+
body: opts.event ? { productId: opts.productId, event: opts.event } : { productId: opts.productId },
|
|
106
|
+
});
|
|
107
|
+
spinner?.stop();
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
spinner?.fail('Falha ao disparar teste.');
|
|
111
|
+
handleApiError(error, opts.json);
|
|
112
|
+
}
|
|
113
|
+
if (opts.json) {
|
|
114
|
+
console.log(JSON.stringify(res));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
log.success(`Evento de teste "${res.eventType}" enfileirado (${res.eventId}).`);
|
|
118
|
+
console.log(` A entrega é assíncrona. Consulte ${chalk.cyan('neetru webhooks deliveries')} para ver o resultado.`);
|
|
119
|
+
}
|
|
120
|
+
export async function runWebhooksDeliveries(opts) {
|
|
121
|
+
const token = await requireToken(opts.json);
|
|
122
|
+
const params = new URLSearchParams({ productId: opts.productId });
|
|
123
|
+
if (opts.status)
|
|
124
|
+
params.set('status', opts.status);
|
|
125
|
+
if (opts.limit)
|
|
126
|
+
params.set('limit', String(opts.limit));
|
|
127
|
+
const spinner = opts.json ? null : ora({ text: 'Buscando entregas…', color: 'blue' }).start();
|
|
128
|
+
let res;
|
|
129
|
+
try {
|
|
130
|
+
res = await apiRequest(`/api/cli/v1/webhooks/${encodeURIComponent(opts.id)}/deliveries?${params.toString()}`, { token });
|
|
131
|
+
spinner?.stop();
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
spinner?.fail('Falha ao listar entregas.');
|
|
135
|
+
handleApiError(error, opts.json);
|
|
136
|
+
}
|
|
137
|
+
if (opts.json) {
|
|
138
|
+
console.log(JSON.stringify(res));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (res.count === 0) {
|
|
142
|
+
log.info('Nenhuma entrega encontrada para este endpoint.');
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
log.heading(`Entregas — ${res.endpointId} (${res.count})`);
|
|
146
|
+
renderTable([
|
|
147
|
+
{ header: 'EVENTO', value: (d) => d.eventType ?? d.eventId.slice(0, 8), maxWidth: 28 },
|
|
148
|
+
{ header: 'STATUS', value: (d) => {
|
|
149
|
+
switch (d.status) {
|
|
150
|
+
case 'delivered': return chalk.green(d.status);
|
|
151
|
+
case 'failed': return chalk.red(d.status);
|
|
152
|
+
case 'dead': return chalk.red.bold(d.status);
|
|
153
|
+
case 'delivering': return chalk.yellow(d.status);
|
|
154
|
+
default: return chalk.dim(d.status);
|
|
155
|
+
}
|
|
156
|
+
} },
|
|
157
|
+
{ header: 'TENTATIVAS', value: (d) => `${d.attempts}${d.maxAttempts ? `/${d.maxAttempts}` : ''}` },
|
|
158
|
+
{ header: 'CÓDIGO', value: (d) => d.lastStatusCode != null ? String(d.lastStatusCode) : '-' },
|
|
159
|
+
{ header: 'ERRO', value: (d) => d.lastError ?? '-', maxWidth: 32 },
|
|
160
|
+
], res.deliveries);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/commands/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,MAAM,UAAU,GAAG;IACjB,wBAAwB;IACxB,wBAAwB;IACxB,6BAA6B;IAC7B,2BAA2B;IAC3B,sBAAsB;IACtB,mBAAmB;IACnB,qBAAqB;IACrB,wBAAwB;CAChB,CAAC;AA8EX,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA6B;IACrE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAChG,IAAI,GAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CAAmB,sBAAsB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,KAAK;YACL,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB;SACF,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/G,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3D,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC7D,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9F,IAAI,GAAiB,CAAC;IACtB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CACpB,kCAAkC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EACtE,EAAE,KAAK,EAAE,CACV,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAC1D,WAAW,CACT;QACE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACnE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;QACpD,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACtE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;QAC5F,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QACvG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE;KAClE,EACD,GAAG,CAAC,SAAS,CACd,CAAC;AACJ,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAA+B;IACzE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAChG,IAAI,GAAmB,CAAC;IACxB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CACpB,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EACrG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAC5B,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACnC,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC7D,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACvG,IAAI,GAAiB,CAAC;IACtB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CACpB,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAC1G;YACE,MAAM,EAAE,MAAM;YACd,KAAK;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;SACpG,CACF,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,oBAAoB,GAAG,CAAC,SAAS,kBAAkB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,sCAAsC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,CAAC;AACtH,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAA+B;IACzE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9F,IAAI,GAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CACpB,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,EAAE,EACrF,EAAE,KAAK,EAAE,CACV,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3D,WAAW,CACT;QACE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC/B,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;oBACjB,KAAK,WAAW,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC/C,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC1C,KAAK,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC7C,KAAK,YAAY,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBACjD,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC,EAAC;QACF,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE;QAClG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QAC7F,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;KACnE,EACD,GAAG,CAAC,UAAU,CACf,CAAC;AACJ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,12 +3,15 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { log } from './utils/logger.js';
|
|
4
4
|
import { CLI_VERSION } from './version.js';
|
|
5
5
|
import { installTelemetryFlushHook, markCommandStart, markCommandEnd, } from './lib/telemetry.js';
|
|
6
|
-
import { safeExit } from './utils/safe-exit.js';
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
6
|
+
import { safeExit, isSafeExitHalt } from './utils/safe-exit.js';
|
|
7
|
+
// UV_HANDLE_CLOSING no Windows (bug_818cf6d): o double-destroy de stdin (handler
|
|
8
|
+
// 'exit' redundante) foi removido em 2026-07-15 (ddd479f), MAS isso não bastou
|
|
9
|
+
// — a causa dominante é o `uv_async_t` do undici (fetch) ainda vivo quando o
|
|
10
|
+
// `process.exit()` roda SÍNCRONO. Fix real (2026-07-16, re-confirmado por repro
|
|
11
|
+
// empírico 6/6): `safeExit()` em produção DEFERE o exit um macrotask (~100ms) e
|
|
12
|
+
// lança `SafeExitHalt`; os traps globais abaixo engolem o sinal — e deferem
|
|
13
|
+
// também qualquer erro não-tratado, que senão dispararia o mesmo crash pelo
|
|
14
|
+
// exit síncrono default do Node.
|
|
12
15
|
// H-01 fix (Opus review 2026-05-27): instala flush hook NO ENTRY-POINT,
|
|
13
16
|
// antes de qualquer parse. Garante que beforeExit + exit hooks estao armados
|
|
14
17
|
// pra TODOS os caminhos — sucesso, falha via safeExit, ou exit direto.
|
|
@@ -16,6 +19,26 @@ import { safeExit } from './utils/safe-exit.js';
|
|
|
16
19
|
// pulava safeExit(N != 0) — feature CLI telemetry capturava ~ε% do
|
|
17
20
|
// que se propunha a medir.
|
|
18
21
|
installTelemetryFlushHook();
|
|
22
|
+
// ── Traps globais de saída (bug_818cf6d / UV_HANDLE_CLOSING) ──────────────
|
|
23
|
+
// `safeExit()` lança `SafeExitHalt` em produção pra parar o caller sem
|
|
24
|
+
// `process.exit()` síncrono (que crasharia o undici no Windows). Aqui só
|
|
25
|
+
// engolimos o sinal — o `setTimeout` agendado dentro do `safeExit` faz a saída
|
|
26
|
+
// real. Qualquer OUTRO erro não-tratado é logado (com stack) e sai com exit
|
|
27
|
+
// DEFERIDO pelo mesmo motivo. `log.error` vai em try/catch pra nunca re-entrar.
|
|
28
|
+
function handleFatalSignal(err) {
|
|
29
|
+
if (isSafeExitHalt(err))
|
|
30
|
+
return; // saída já agendada dentro do safeExit
|
|
31
|
+
try {
|
|
32
|
+
log.error(err instanceof Error ? (err.stack ?? err.message) : String(err));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
/* logger indisponível — segue direto pro exit deferido */
|
|
36
|
+
}
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
setTimeout(() => process.exit(1), 100);
|
|
39
|
+
}
|
|
40
|
+
process.on('uncaughtException', handleFatalSignal);
|
|
41
|
+
process.on('unhandledRejection', handleFatalSignal);
|
|
19
42
|
const program = new Command();
|
|
20
43
|
program
|
|
21
44
|
.name('neetru')
|
|
@@ -271,12 +294,11 @@ program
|
|
|
271
294
|
// ── neetru dev ────────────────────────────────────────────────────────
|
|
272
295
|
// `neetru dev` (sem subcomando) = banco local Docker + watch de schema (M1
|
|
273
296
|
// GAP-M1-4) — comportamento legado preservado (action + options intactos).
|
|
274
|
-
// `neetru dev up` =
|
|
275
|
-
//
|
|
276
|
-
// a action de `dev` só dispara quando nenhum subcomando casa.
|
|
297
|
+
// `neetru dev up` = ambiente dev-local (banco + agente) via Docker Compose.
|
|
298
|
+
// Subcomando aditivo: a action de `dev` só dispara quando nenhum subcomando casa.
|
|
277
299
|
const devCmd = program
|
|
278
300
|
.command('dev')
|
|
279
|
-
.description('Ambiente de dev local — banco Docker (default) ou
|
|
301
|
+
.description('Ambiente de dev local — banco Docker (default) ou ambiente completo (`dev up`)')
|
|
280
302
|
.option('--db <name>', 'banco alvo do .neetru/db.json (default: único registrado)')
|
|
281
303
|
.option('--schema <path>', 'caminho do arquivo de schema (default: db/schema.ts)')
|
|
282
304
|
.action(async (opts) => {
|
|
@@ -285,22 +307,12 @@ const devCmd = program
|
|
|
285
307
|
});
|
|
286
308
|
devCmd
|
|
287
309
|
.command('up')
|
|
288
|
-
.description('
|
|
289
|
-
.option('--
|
|
290
|
-
.option('--core-port <port>', 'porta do Core (default 9003)')
|
|
291
|
-
.option('--core-path <path>', 'diretório do Core (default: cwd; precisa ter firebase.json)')
|
|
292
|
-
.option('--skip-core', 'só os emuladores, sem subir o Core')
|
|
293
|
-
.option('--import <dir>', 'importa estado dos emuladores deste diretório (seed portátil)')
|
|
294
|
-
.option('--export-on-exit <dir>', 'exporta o estado dos emuladores ao sair (snapshot)')
|
|
310
|
+
.description('Sobe o ambiente dev-local (banco + agente) via Docker Compose')
|
|
311
|
+
.option('--core-port <port>', 'porta do app SaaS local (default 3000)')
|
|
295
312
|
.action(async (opts) => {
|
|
296
313
|
const { runDevUp } = await import('./commands/dev-up.js');
|
|
297
314
|
await runDevUp({
|
|
298
|
-
only: opts.only,
|
|
299
315
|
corePort: opts.corePort ? Number(opts.corePort) : undefined,
|
|
300
|
-
corePath: opts.corePath,
|
|
301
|
-
skipCore: Boolean(opts.skipCore),
|
|
302
|
-
importDir: opts.import,
|
|
303
|
-
exportOnExit: opts.exportOnExit,
|
|
304
316
|
});
|
|
305
317
|
});
|
|
306
318
|
devCmd
|
|
@@ -1409,6 +1421,7 @@ program
|
|
|
1409
1421
|
.option('--channel <channel>', 'filtrar por channel (stdout | stderr | app)')
|
|
1410
1422
|
.option('--correlation-id <id>', 'filtrar por correlationId (UUID)')
|
|
1411
1423
|
.option('--json', 'saída em JSON (NDJSON linha a linha, útil para pipes)')
|
|
1424
|
+
.option('--local [path]', 'ler NDJSON local do emulador (dev up) em vez do Core; default .neetru/dev/logs.ndjson')
|
|
1412
1425
|
.action(async (opts) => {
|
|
1413
1426
|
const { runLogs } = await import('./commands/logs.js');
|
|
1414
1427
|
await runLogs({
|
|
@@ -1422,6 +1435,7 @@ program
|
|
|
1422
1435
|
channel: opts.channel,
|
|
1423
1436
|
correlationId: opts.correlationId,
|
|
1424
1437
|
json: !!opts.json,
|
|
1438
|
+
local: opts.local,
|
|
1425
1439
|
});
|
|
1426
1440
|
});
|
|
1427
1441
|
// ── neetru vm ─────────────────────────────────────────────────────────
|
|
@@ -2361,6 +2375,79 @@ docsCmd
|
|
|
2361
2375
|
json: !!opts.json,
|
|
2362
2376
|
});
|
|
2363
2377
|
});
|
|
2378
|
+
// ── neetru webhooks ──────────────────────────────────────────────────
|
|
2379
|
+
// Produtos SaaS registram endpoints de webhook pra receber eventos do Core.
|
|
2380
|
+
const webhooksCmd = program
|
|
2381
|
+
.command('webhooks')
|
|
2382
|
+
.description('Gerenciar webhooks de produto (register/list/unregister/test)');
|
|
2383
|
+
webhooksCmd
|
|
2384
|
+
.command('register')
|
|
2385
|
+
.description('Registrar endpoint de webhook para receber eventos do Core')
|
|
2386
|
+
.requiredOption('--product-id <id>', 'ID do produto')
|
|
2387
|
+
.requiredOption('--url <url>', 'URL do endpoint que receberá os eventos')
|
|
2388
|
+
.requiredOption('--events <csv>', 'eventos separados por vírgula')
|
|
2389
|
+
.option('--secret <secret>', 'segredo HMAC para assinar payloads (gerado automaticamente se omitido)')
|
|
2390
|
+
.option('--json', 'saída em JSON')
|
|
2391
|
+
.action(async (opts) => {
|
|
2392
|
+
const { runWebhooksRegister } = await import('./commands/webhooks.js');
|
|
2393
|
+
await runWebhooksRegister({
|
|
2394
|
+
productId: opts.productId,
|
|
2395
|
+
url: opts.url,
|
|
2396
|
+
events: opts.events.split(',').map((s) => s.trim()),
|
|
2397
|
+
secret: opts.secret,
|
|
2398
|
+
json: !!opts.json,
|
|
2399
|
+
});
|
|
2400
|
+
});
|
|
2401
|
+
webhooksCmd
|
|
2402
|
+
.command('list')
|
|
2403
|
+
.description('Listar endpoints de webhook registrados para um produto')
|
|
2404
|
+
.requiredOption('--product-id <id>', 'ID do produto')
|
|
2405
|
+
.option('--json', 'saída em JSON')
|
|
2406
|
+
.action(async (opts) => {
|
|
2407
|
+
const { runWebhooksList } = await import('./commands/webhooks.js');
|
|
2408
|
+
await runWebhooksList({ productId: opts.productId, json: !!opts.json });
|
|
2409
|
+
});
|
|
2410
|
+
webhooksCmd
|
|
2411
|
+
.command('unregister <id>')
|
|
2412
|
+
.description('Remover endpoint de webhook')
|
|
2413
|
+
.requiredOption('--product-id <id>', 'ID do produto')
|
|
2414
|
+
.option('--json', 'saída em JSON')
|
|
2415
|
+
.action(async (id, opts) => {
|
|
2416
|
+
const { runWebhooksUnregister } = await import('./commands/webhooks.js');
|
|
2417
|
+
await runWebhooksUnregister({ id, productId: opts.productId, json: !!opts.json });
|
|
2418
|
+
});
|
|
2419
|
+
webhooksCmd
|
|
2420
|
+
.command('test <id>')
|
|
2421
|
+
.description('Disparar evento de teste para um endpoint')
|
|
2422
|
+
.requiredOption('--product-id <id>', 'ID do produto')
|
|
2423
|
+
.option('--event <event>', 'evento específico a testar (default: primeiro inscrito)')
|
|
2424
|
+
.option('--json', 'saída em JSON')
|
|
2425
|
+
.action(async (id, opts) => {
|
|
2426
|
+
const { runWebhooksTest } = await import('./commands/webhooks.js');
|
|
2427
|
+
await runWebhooksTest({
|
|
2428
|
+
id,
|
|
2429
|
+
productId: opts.productId,
|
|
2430
|
+
event: opts.event,
|
|
2431
|
+
json: !!opts.json,
|
|
2432
|
+
});
|
|
2433
|
+
});
|
|
2434
|
+
webhooksCmd
|
|
2435
|
+
.command('deliveries <id>')
|
|
2436
|
+
.description('Histórico de entregas de um endpoint')
|
|
2437
|
+
.requiredOption('--product-id <id>', 'ID do produto')
|
|
2438
|
+
.option('--status <status>', 'filtrar por status: pending | delivering | delivered | failed | dead')
|
|
2439
|
+
.option('--limit <n>', 'máximo de eventos (1-100)', '20')
|
|
2440
|
+
.option('--json', 'saída em JSON')
|
|
2441
|
+
.action(async (id, opts) => {
|
|
2442
|
+
const { runWebhooksDeliveries } = await import('./commands/webhooks.js');
|
|
2443
|
+
await runWebhooksDeliveries({
|
|
2444
|
+
id,
|
|
2445
|
+
productId: opts.productId,
|
|
2446
|
+
status: opts.status,
|
|
2447
|
+
limit: opts.limit ? parseInt(opts.limit, 10) : undefined,
|
|
2448
|
+
json: !!opts.json,
|
|
2449
|
+
});
|
|
2450
|
+
});
|
|
2364
2451
|
// ── neetru domains ──────────────────────────────────────────────────
|
|
2365
2452
|
// Devs/IAs gerem os domínios de ambiente dos seus produtos (lista/reconcile/retry).
|
|
2366
2453
|
const domainsCmd = program
|