@neetru/cli 2.28.7 → 2.28.10

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 (108) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +25 -1
  3. package/dist/commands/admin/oidc-login.d.ts +18 -0
  4. package/dist/commands/admin/oidc-login.js +68 -3
  5. package/dist/commands/admin/oidc-login.js.map +1 -1
  6. package/dist/commands/admin/sdk-credential.js +11 -6
  7. package/dist/commands/admin/sdk-credential.js.map +1 -1
  8. package/dist/commands/agent-release.d.ts +2 -0
  9. package/dist/commands/agent-release.js +41 -29
  10. package/dist/commands/agent-release.js.map +1 -1
  11. package/dist/commands/agent-write.d.ts +1 -0
  12. package/dist/commands/agent-write.js +4 -0
  13. package/dist/commands/agent-write.js.map +1 -1
  14. package/dist/commands/ai-models.js +9 -4
  15. package/dist/commands/ai-models.js.map +1 -1
  16. package/dist/commands/archive.js +9 -2
  17. package/dist/commands/archive.js.map +1 -1
  18. package/dist/commands/auth.js +17 -2
  19. package/dist/commands/auth.js.map +1 -1
  20. package/dist/commands/autocomplete.d.ts +1 -1
  21. package/dist/commands/autocomplete.js +2 -0
  22. package/dist/commands/autocomplete.js.map +1 -1
  23. package/dist/commands/chat-menu.js +20 -6
  24. package/dist/commands/chat-menu.js.map +1 -1
  25. package/dist/commands/chat.d.ts +14 -0
  26. package/dist/commands/chat.js +32 -4
  27. package/dist/commands/chat.js.map +1 -1
  28. package/dist/commands/config.js +7 -0
  29. package/dist/commands/config.js.map +1 -1
  30. package/dist/commands/db-move.d.ts +204 -0
  31. package/dist/commands/db-move.js +890 -0
  32. package/dist/commands/db-move.js.map +1 -0
  33. package/dist/commands/db.d.ts +14 -3
  34. package/dist/commands/db.js +102 -67
  35. package/dist/commands/db.js.map +1 -1
  36. package/dist/commands/deploy.d.ts +15 -0
  37. package/dist/commands/deploy.js +42 -1
  38. package/dist/commands/deploy.js.map +1 -1
  39. package/dist/commands/dev-up.d.ts +5 -0
  40. package/dist/commands/dev-up.js +29 -4
  41. package/dist/commands/dev-up.js.map +1 -1
  42. package/dist/commands/doctor.js +12 -6
  43. package/dist/commands/doctor.js.map +1 -1
  44. package/dist/commands/domains.js +48 -36
  45. package/dist/commands/domains.js.map +1 -1
  46. package/dist/commands/init.d.ts +0 -8
  47. package/dist/commands/init.js +14 -3
  48. package/dist/commands/init.js.map +1 -1
  49. package/dist/commands/logs.js +18 -21
  50. package/dist/commands/logs.js.map +1 -1
  51. package/dist/commands/mobile.d.ts +26 -0
  52. package/dist/commands/mobile.js +344 -0
  53. package/dist/commands/mobile.js.map +1 -0
  54. package/dist/commands/ops.d.ts +20 -0
  55. package/dist/commands/ops.js +70 -17
  56. package/dist/commands/ops.js.map +1 -1
  57. package/dist/commands/products-db.d.ts +1 -0
  58. package/dist/commands/products-db.js +15 -15
  59. package/dist/commands/products-db.js.map +1 -1
  60. package/dist/commands/promote.js +13 -32
  61. package/dist/commands/promote.js.map +1 -1
  62. package/dist/commands/schema.d.ts +4 -0
  63. package/dist/commands/schema.js +25 -16
  64. package/dist/commands/schema.js.map +1 -1
  65. package/dist/commands/servers.d.ts +2 -3
  66. package/dist/commands/servers.js +4 -7
  67. package/dist/commands/servers.js.map +1 -1
  68. package/dist/commands/smoke.d.ts +123 -0
  69. package/dist/commands/smoke.js +529 -0
  70. package/dist/commands/smoke.js.map +1 -0
  71. package/dist/commands/vm-memory.d.ts +53 -0
  72. package/dist/commands/vm-memory.js +307 -0
  73. package/dist/commands/vm-memory.js.map +1 -0
  74. package/dist/commands/vm.d.ts +2 -0
  75. package/dist/commands/vm.js +8 -0
  76. package/dist/commands/vm.js.map +1 -1
  77. package/dist/commands/webhooks.d.ts +2 -0
  78. package/dist/commands/webhooks.js +7 -0
  79. package/dist/commands/webhooks.js.map +1 -1
  80. package/dist/index.js +403 -21
  81. package/dist/index.js.map +1 -1
  82. package/dist/lib/agent-artifact-url.d.ts +19 -0
  83. package/dist/lib/agent-artifact-url.js +48 -0
  84. package/dist/lib/agent-artifact-url.js.map +1 -0
  85. package/dist/lib/api-client.d.ts +11 -3
  86. package/dist/lib/api-client.js +55 -24
  87. package/dist/lib/api-client.js.map +1 -1
  88. package/dist/lib/api-error.js +32 -1
  89. package/dist/lib/api-error.js.map +1 -1
  90. package/dist/lib/auth.d.ts +2 -9
  91. package/dist/lib/auth.js +34 -18
  92. package/dist/lib/auth.js.map +1 -1
  93. package/dist/lib/cli-write.d.ts +31 -0
  94. package/dist/lib/cli-write.js +51 -2
  95. package/dist/lib/cli-write.js.map +1 -1
  96. package/dist/lib/mobile-local/index.d.ts +7 -0
  97. package/dist/lib/mobile-local/index.js +7 -0
  98. package/dist/lib/mobile-local/index.js.map +1 -0
  99. package/dist/lib/mobile-local/mobile-json.d.ts +57 -0
  100. package/dist/lib/mobile-local/mobile-json.js +169 -0
  101. package/dist/lib/mobile-local/mobile-json.js.map +1 -0
  102. package/dist/lib/product-config.d.ts +5 -0
  103. package/dist/lib/product-config.js +37 -0
  104. package/dist/lib/product-config.js.map +1 -0
  105. package/dist/lib/telemetry.d.ts +7 -0
  106. package/dist/lib/telemetry.js +9 -0
  107. package/dist/lib/telemetry.js.map +1 -1
  108. package/package.json +1 -1
@@ -1,14 +1,23 @@
1
1
  import { config } from './config.js';
2
2
  import { getActiveTokenSync } from './token-resolver.js';
3
- import { classifyApiUrl } from './url-allowlist.js';
3
+ import { classifyApiUrl, isOverrideEnabled } from './url-allowlist.js';
4
+ import { CLI_VERSION } from '../version.js';
5
+ import { getCurrentCommandName } from './telemetry.js';
4
6
  export class CliApiError extends Error {
5
7
  status;
6
8
  code;
7
- constructor(status, code, message) {
9
+ /**
10
+ * `x-correlation-id` carimbado pelo Core na resposta (LABS #6, 2026-09-28).
11
+ * O Core loga TODA request sob esse id; expor no rodapé do erro fecha o loop
12
+ * de debug de campo (usuário informa o `ref:` ao suporte).
13
+ */
14
+ correlationId;
15
+ constructor(status, code, message, correlationId) {
8
16
  super(message);
9
17
  this.name = 'CliApiError';
10
18
  this.status = status;
11
19
  this.code = code;
20
+ this.correlationId = correlationId;
12
21
  }
13
22
  }
14
23
  export class CliNetworkError extends Error {
@@ -23,38 +32,47 @@ function buildBaseUrl() {
23
32
  const raw = config.get('neetruApiUrl') ?? 'https://api.neetru.com';
24
33
  return raw.replace(/\/+$/, '');
25
34
  }
26
- // MASTER-HIGH-049 (2.11.0): warning one-shot quando o host customizado nao
27
- // bate na allowlist. Nao bloqueia a chamada (a politica de bloqueio fica
28
- // em `config set`); aqui so chama atencao do owner pra cada `neetru *`
29
- // rodando com um host estranho.
30
- let untrustedHostWarningEmitted = false;
31
- export function maybeWarnUntrustedHost(rawUrl) {
32
- if (untrustedHostWarningEmitted)
33
- return;
34
- if (process.env.NEETRU_SUPPRESS_LEGACY_WARNINGS)
35
+ // MASTER-HIGH-049 → LABS #4/#19 (2026-09-28): FAIL-CLOSED. Antes só emitia um
36
+ // warning one-shot e mandava o Bearer pro host não-confiável assim mesmo — um
37
+ // `config.json` editado/copiado exfiltrava o token `nrt_` com um mero aviso.
38
+ // Agora BLOQUEIA (throw) qualquer host fora da allowlist, salvo override
39
+ // explícito (`NEETRU_ALLOW_UNTRUSTED_URL=1`). O bypass NÃO compartilha mais o
40
+ // kill-switch do nag legado (`NEETRU_SUPPRESS_LEGACY_WARNINGS`) — alerta de
41
+ // segurança não pode morrer junto com ruído de deprecação.
42
+ export function assertTrustedApiHost(rawUrl) {
43
+ if (isOverrideEnabled())
35
44
  return;
36
45
  const result = classifyApiUrl(rawUrl);
37
46
  if (result.trusted)
38
47
  return;
39
- untrustedHostWarningEmitted = true;
40
- process.stderr.write(`⚠ usando host customizado: ${result.host} (fora da allowlist neetru.com/localhost)\n` +
41
- ` Bearer token CLI sera enviado para este host. Verifique se eh confiavel.\n`);
48
+ throw new CliNetworkError(`Host fora da allowlist (${result.host}): ${result.reason ?? 'não confiável'}. ` +
49
+ `O Bearer token da CLI NÃO foi enviado. Se este host é confiável, rode com ` +
50
+ `NEETRU_ALLOW_UNTRUSTED_URL=1.`);
42
51
  }
43
- /** Para tests — reseta o flag one-shot. */
52
+ /** @deprecated Nome legado — agora é fail-closed (throw), não só warning. Use `assertTrustedApiHost`. */
53
+ export const maybeWarnUntrustedHost = assertTrustedApiHost;
54
+ /** @deprecated Sem estado agora (fail-closed não tem flag one-shot). No-op mantido p/ compat de teste. */
44
55
  export function _resetUntrustedHostWarningForTests() {
45
- untrustedHostWarningEmitted = false;
56
+ /* no-op */
46
57
  }
47
58
  export async function apiRequest(path, opts = {}) {
48
59
  const baseUrl = buildBaseUrl();
49
60
  const url = `${baseUrl}${path.startsWith('/') ? path : `/${path}`}`;
50
- // MASTER-HIGH-049 (2.11.0): warning quando host nao-canonico.
51
- maybeWarnUntrustedHost(baseUrl);
61
+ // LABS #4 (2026-09-28): fail-closed — bloqueia host fora da allowlist ANTES
62
+ // de anexar o Bearer (era só warning que mandava o token assim mesmo).
63
+ assertTrustedApiHost(baseUrl);
52
64
  // MASTER-HIGH-048 (2.11.0): prefere auth.json (canonico) sobre Conf (legacy).
53
65
  const token = opts.token ?? getActiveTokenSync();
54
66
  const headers = {
55
67
  'content-type': 'application/json',
56
68
  accept: 'application/json',
57
69
  };
70
+ // LABS #5 (2026-09-28): carimba versão + comando (lineage) do CLI pra o Core
71
+ // casar erro de campo com o cliente. Só o nome do comando, nunca args (PII).
72
+ headers['x-neetru-cli-version'] = CLI_VERSION;
73
+ const cliCommand = getCurrentCommandName();
74
+ if (cliCommand)
75
+ headers['x-neetru-cli-command'] = cliCommand;
58
76
  if (token)
59
77
  headers['authorization'] = `Bearer ${token}`;
60
78
  if (opts.headers) {
@@ -132,9 +150,13 @@ export async function apiRequest(path, opts = {}) {
132
150
  let message = `Erro HTTP ${response.status}`;
133
151
  if (errBody?.error) {
134
152
  if (typeof errBody.error === 'string') {
135
- // Formato RFC
136
- code = errBody.error;
137
- message = errBody.error_description ?? errBody.error;
153
+ // Formato RFC. Auditoria cli/v1 2026-09-29: o 401 do `requireCliAuth`
154
+ // passou a mandar também `code`/`message` (formato interno) ao lado de
155
+ // `error`/`error_description` — `code` explícito vence o `error` legado.
156
+ code = typeof errBody.code === 'string' && errBody.code ? errBody.code : errBody.error;
157
+ message =
158
+ errBody.error_description ??
159
+ (typeof errBody.message === 'string' && errBody.message ? errBody.message : errBody.error);
138
160
  }
139
161
  else {
140
162
  // Formato interno Neetru
@@ -145,7 +167,9 @@ export async function apiRequest(path, opts = {}) {
145
167
  else if (typeof parsed === 'string' && parsed.trim() !== '') {
146
168
  message = parsed;
147
169
  }
148
- throw new CliApiError(response.status, code, message);
170
+ // LABS #6 (2026-09-28): captura o x-correlation-id do Core p/ o rodapé do erro.
171
+ const correlationId = response.headers.get('x-correlation-id') ?? undefined;
172
+ throw new CliApiError(response.status, code, message, correlationId);
149
173
  }
150
174
  return parsed;
151
175
  }
@@ -160,13 +184,19 @@ export async function apiRequest(path, opts = {}) {
160
184
  export async function* apiStream(path, opts = {}) {
161
185
  const baseUrl = buildBaseUrl();
162
186
  const url = `${baseUrl}${path.startsWith('/') ? path : `/${path}`}`;
163
- maybeWarnUntrustedHost(baseUrl);
187
+ // LABS #4 (2026-09-28): fail-closed também no stream.
188
+ assertTrustedApiHost(baseUrl);
164
189
  // MASTER-HIGH-048 (2.11.0): mesmo helper aplica ao stream NDJSON.
165
190
  const token = opts.token ?? getActiveTokenSync();
166
191
  const headers = {
167
192
  'content-type': 'application/json',
168
193
  accept: 'application/x-ndjson',
169
194
  };
195
+ // LABS #5 (2026-09-28): versão + comando do CLI (sem PII).
196
+ headers['x-neetru-cli-version'] = CLI_VERSION;
197
+ const cliCommand = getCurrentCommandName();
198
+ if (cliCommand)
199
+ headers['x-neetru-cli-command'] = cliCommand;
170
200
  if (token)
171
201
  headers['authorization'] = `Bearer ${token}`;
172
202
  let response;
@@ -198,7 +228,8 @@ export async function* apiStream(path, opts = {}) {
198
228
  if (text.trim())
199
229
  message = text;
200
230
  }
201
- throw new CliApiError(response.status, code, message);
231
+ const correlationId = response.headers.get('x-correlation-id') ?? undefined;
232
+ throw new CliApiError(response.status, code, message, correlationId);
202
233
  }
203
234
  if (!response.body)
204
235
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -33,11 +33,42 @@ function emit(json, payload, text) {
33
33
  else
34
34
  log.error(text);
35
35
  }
36
+ /**
37
+ * A mensagem do 401 vale ser exibida? O Core legado mandava só
38
+ * `{ error: 'Unauthorized' }` (o parser vira message='Unauthorized') — aí o
39
+ * fallback "Execute: neetru login" é mais útil. O Core novo manda
40
+ * `error_description`/`message` descritivos.
41
+ */
42
+ function isInformative401Message(message) {
43
+ const m = (message ?? '').trim();
44
+ if (!m)
45
+ return false;
46
+ return !/^(unauthori[sz]ed|erro http 401)$/i.test(m);
47
+ }
36
48
  export function handleApiError(error, json) {
37
49
  if (error instanceof CliApiError) {
38
50
  const s = error.status;
39
51
  if (s === 401) {
40
- emit(json, { ok: false, error: 'unauthorized', status: s, message: error.message }, 'Token inválido ou revogado. Execute: neetru login');
52
+ // Auditoria cli/v1 2026-09-29: o 401 do Core agora carrega `message`/
53
+ // `error_description` úteis (e o step-up MFA responde `401 mfa_required`).
54
+ // Antes TODO 401 virava "Token inválido ou revogado" — inclusive o de MFA
55
+ // faltando, mandando o operador fazer `neetru login` à toa.
56
+ if (error.code === 'mfa_required') {
57
+ emit(json, { ok: false, error: 'mfa_required', code: error.code, status: s, message: error.message }, `Step-up MFA exigido: ${error.message}
58
+ ` +
59
+ ' Passe --mfa-token <código TOTP> ou rode `neetru auth mfa-session` (sessão de 1h).');
60
+ safeExit(API_ERROR_EXIT.unauthenticated);
61
+ }
62
+ const serverMsg = isInformative401Message(error.message) ? error.message : '';
63
+ emit(json, {
64
+ ok: false,
65
+ error: 'unauthorized',
66
+ ...(error.code && error.code !== 'http_401' ? { code: error.code } : {}),
67
+ status: s,
68
+ message: error.message,
69
+ }, serverMsg
70
+ ? `Não autenticado: ${serverMsg}${/neetru login/.test(serverMsg) ? '' : ' — execute: neetru login'}`
71
+ : 'Token inválido ou revogado. Execute: neetru login');
41
72
  safeExit(API_ERROR_EXIT.unauthenticated);
42
73
  }
43
74
  if (s === 403) {
@@ -1 +1 @@
1
- {"version":3,"file":"api-error.js","sourceRoot":"","sources":["../../src/lib/api-error.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-error.js","sourceRoot":"","sources":["../../src/lib/api-error.ts"],"names":[],"mappings":"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"}
@@ -18,14 +18,7 @@ export declare function saveToken(token: string, email: string): Promise<string>
18
18
  * Usado para exibir o usuário logado no cabeçalho do CLI.
19
19
  */
20
20
  export declare function resolveSessionEmail(): Promise<string | null>;
21
- /**
22
- * MASTER-HIGH-048 (2.11.0) — leitura sincrona APENAS do `auth.json`.
23
- *
24
- * Helper interno usado por `getActiveTokenSync()` (em `token-resolver.ts`).
25
- * Mantido aqui pra preservar o limite de escopo `auth.ts` = `auth.json`-only.
26
- *
27
- * Retorna `null` em qualquer falha (arquivo ausente, JSON invalido, token
28
- * vazio). Pra erro detalhado, usar `loadToken()` async.
29
- */
21
+ /** Invalida o cache de auth.json (chamado após escrever/apagar o token). */
22
+ export declare function _invalidateAuthJsonCache(): void;
30
23
  export declare function readAuthJsonSync(): NeetruAuth | null;
31
24
  export declare function clearToken(): Promise<boolean>;
package/dist/lib/auth.js CHANGED
@@ -86,6 +86,7 @@ export async function saveToken(token, email) {
86
86
  // Em Windows alguns runtimes tratam mode 0600 como read-only flag;
87
87
  // ignoramos erro silenciosamente.
88
88
  }
89
+ _invalidateAuthJsonCache(); // LABS #17: token novo → invalida o cache de leitura.
89
90
  return path;
90
91
  }
91
92
  /**
@@ -111,34 +112,49 @@ export async function resolveSessionEmail() {
111
112
  * Retorna `null` em qualquer falha (arquivo ausente, JSON invalido, token
112
113
  * vazio). Pra erro detalhado, usar `loadToken()` async.
113
114
  */
115
+ // LABS #17 (2026-09-28): cache por-processo. `getActiveTokenSync()` chama isto
116
+ // em TODO apiRequest/apiStream; paginação/pickers/watch/`logs -f` reparseavam
117
+ // auth.json N vezes no mesmo processo (existsSync+readFileSync+JSON.parse).
118
+ // Invalidado por saveToken/clearToken — os únicos mutadores dentro do processo.
119
+ // Seguro: o arquivo não muda sob um processo CLI vivo exceto por essas funções.
120
+ let authJsonCache = null;
121
+ /** Invalida o cache de auth.json (chamado após escrever/apagar o token). */
122
+ export function _invalidateAuthJsonCache() {
123
+ authJsonCache = null;
124
+ }
114
125
  export function readAuthJsonSync() {
126
+ if (authJsonCache)
127
+ return authJsonCache.value;
115
128
  const authPath = getAuthFilePath();
116
- if (!existsSync(authPath))
117
- return null;
118
- try {
119
- const raw = readFileSync(authPath, 'utf8');
120
- const parsed = JSON.parse(raw);
121
- if (parsed &&
122
- typeof parsed.token === 'string' &&
123
- parsed.token.length > 0 &&
124
- typeof parsed.email === 'string') {
125
- return {
126
- token: parsed.token,
127
- email: parsed.email,
128
- savedAt: parsed.savedAt ?? '',
129
- };
129
+ let value = null;
130
+ if (existsSync(authPath)) {
131
+ try {
132
+ const raw = readFileSync(authPath, 'utf8');
133
+ const parsed = JSON.parse(raw);
134
+ if (parsed &&
135
+ typeof parsed.token === 'string' &&
136
+ parsed.token.length > 0 &&
137
+ typeof parsed.email === 'string') {
138
+ value = {
139
+ token: parsed.token,
140
+ email: parsed.email,
141
+ savedAt: parsed.savedAt ?? '',
142
+ };
143
+ }
144
+ }
145
+ catch {
146
+ // ignora — token ausente/corrompido
130
147
  }
131
148
  }
132
- catch {
133
- // ignora — token ausente
134
- }
135
- return null;
149
+ authJsonCache = { value };
150
+ return value;
136
151
  }
137
152
  export async function clearToken() {
138
153
  const path = getAuthFilePath();
139
154
  if (!existsSync(path))
140
155
  return false;
141
156
  await fs.unlink(path);
157
+ _invalidateAuthJsonCache(); // LABS #17: token removido → invalida o cache.
142
158
  return true;
143
159
  }
144
160
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,17 @@ export interface StepUpOptions extends ConfirmOptions {
44
44
  mfaToken?: string;
45
45
  /** `--dry-run` — servidor valida e retorna o efeito SEM aplicar. */
46
46
  dryRun?: boolean;
47
+ /**
48
+ * `--non-interactive` (ex.: `neetru deploy` em CI): NUNCA prompta TOTP, mesmo
49
+ * com TTY — fail-closed com instrução (`--mfa-token` / `neetru auth mfa-session`).
50
+ */
51
+ nonInteractive?: boolean;
52
+ /**
53
+ * Ignora a sessão de 1h salva localmente e exige TOTP fresco. Usado no retry
54
+ * após o servidor recusar a sessão com `401 mfa_required` (sessão válida no
55
+ * disco mas rejeitada no servidor — ex.: segredo HMAC rotacionado).
56
+ */
57
+ skipSession?: boolean;
47
58
  }
48
59
  /**
49
60
  * Resolve o que uma operação destrutiva TOP-TIER precisa mandar pro servidor:
@@ -65,6 +76,26 @@ export interface StepUpOptions extends ConfirmOptions {
65
76
  export declare function resolveStepUp(opts: StepUpOptions): Promise<{
66
77
  headers: Record<string, string>;
67
78
  }>;
79
+ /** `true` se o erro é o `401 mfa_required` de `requireCliStepUpMfa` no Core. */
80
+ export declare function isMfaRequiredError(error: unknown): boolean;
81
+ /**
82
+ * Executa um request cujo step-up MFA é CONDICIONAL no servidor (ex.:
83
+ * `ops bootstrap-admin` só exige MFA quando já existe admin). Não prompta
84
+ * antecipadamente:
85
+ * 1. anexa o que já está disponível sem interação — `--mfa-token` OU a
86
+ * sessão de 1h salva;
87
+ * 2. se o Core responder `401 mfa_required` e ainda não foi enviado um TOTP
88
+ * fresco, resolve o step-up (prompt TOTP / fail-closed em --json e
89
+ * não-TTY), ignorando a sessão local (o servidor acabou de recusá-la), e
90
+ * repete o request UMA vez.
91
+ * Qualquer outro erro (ou falha no retry) vai pro `onError` do caller
92
+ * (tipicamente `handleApiError`). O step-up roda FORA do handler de erro, pra
93
+ * o fail-closed do `resolveStepUp` (safeExit) não ser reprocessado como erro
94
+ * de API.
95
+ */
96
+ export declare function withStepUpRetry<T>(opts: StepUpOptions, doRequest: (headers: Record<string, string>) => Promise<T>, onError: (error: unknown) => never,
97
+ /** Chamado antes do prompt TOTP do retry (ex.: parar o spinner). */
98
+ beforePrompt?: () => void): Promise<T>;
68
99
  /**
69
100
  * Imprime o resultado de um comando de escrita — JSON cru ou linha humana.
70
101
  * Reconhece a resposta de dry-run (`{ dryRun: true }`) e a sinaliza.
@@ -17,6 +17,7 @@ import { promises as fs } from 'node:fs';
17
17
  import { dirname, join } from 'node:path';
18
18
  import { homedir } from 'node:os';
19
19
  import { requireToken, handleApiError } from './cli-read.js';
20
+ import { CliApiError } from './api-client.js';
20
21
  import { log } from '../utils/logger.js';
21
22
  import { safeExit } from '../utils/safe-exit.js';
22
23
  export { requireToken, handleApiError };
@@ -181,7 +182,7 @@ export async function resolveStepUp(opts) {
181
182
  }
182
183
  // ── Prioridade 2: sessão de 1h salva localmente ─────────────────────────
183
184
  // Verifica ANTES de pedir TOTP — se há sessão válida, usa sem interação.
184
- const savedSession = loadMfaSession();
185
+ const savedSession = opts.skipSession ? null : loadMfaSession();
185
186
  if (savedSession) {
186
187
  headers['X-Neetru-MFA-Session'] = savedSession;
187
188
  return { headers };
@@ -193,7 +194,7 @@ export async function resolveStepUp(opts) {
193
194
  // rodar NEM com TTY — ele escreveria a pergunta no stdout (corrompe o JSON)
194
195
  // e penduraria um consumidor programático. Fail-CLOSED em --json OU sem TTY;
195
196
  // só promptar em terminal interativo humano (não-json + TTY).
196
- if (opts.json || !process.stdin.isTTY) {
197
+ if (opts.json || opts.nonInteractive || !process.stdin.isTTY) {
197
198
  const msg = 'Operação destrutiva top-tier exige step-up MFA: passe --mfa-token <código TOTP> ' +
198
199
  '(modo --json/não-interativo) ou rode `neetru auth mfa-session` para obter uma sessão de 1h.';
199
200
  if (opts.json) {
@@ -214,6 +215,54 @@ export async function resolveStepUp(opts) {
214
215
  headers['X-Neetru-MFA-Token'] = code;
215
216
  return { headers };
216
217
  }
218
+ /** `true` se o erro é o `401 mfa_required` de `requireCliStepUpMfa` no Core. */
219
+ export function isMfaRequiredError(error) {
220
+ return error instanceof CliApiError && error.status === 401 && error.code === 'mfa_required';
221
+ }
222
+ /**
223
+ * Executa um request cujo step-up MFA é CONDICIONAL no servidor (ex.:
224
+ * `ops bootstrap-admin` só exige MFA quando já existe admin). Não prompta
225
+ * antecipadamente:
226
+ * 1. anexa o que já está disponível sem interação — `--mfa-token` OU a
227
+ * sessão de 1h salva;
228
+ * 2. se o Core responder `401 mfa_required` e ainda não foi enviado um TOTP
229
+ * fresco, resolve o step-up (prompt TOTP / fail-closed em --json e
230
+ * não-TTY), ignorando a sessão local (o servidor acabou de recusá-la), e
231
+ * repete o request UMA vez.
232
+ * Qualquer outro erro (ou falha no retry) vai pro `onError` do caller
233
+ * (tipicamente `handleApiError`). O step-up roda FORA do handler de erro, pra
234
+ * o fail-closed do `resolveStepUp` (safeExit) não ser reprocessado como erro
235
+ * de API.
236
+ */
237
+ export async function withStepUpRetry(opts, doRequest, onError,
238
+ /** Chamado antes do prompt TOTP do retry (ex.: parar o spinner). */
239
+ beforePrompt) {
240
+ const first = {};
241
+ const code = (opts.mfaToken ?? '').trim();
242
+ const savedSession = code ? null : loadMfaSession();
243
+ if (code)
244
+ first['X-Neetru-MFA-Token'] = code;
245
+ else if (savedSession)
246
+ first['X-Neetru-MFA-Session'] = savedSession;
247
+ let firstError;
248
+ try {
249
+ return await doRequest(first);
250
+ }
251
+ catch (error) {
252
+ firstError = error;
253
+ }
254
+ // Já mandou TOTP fresco e o servidor ainda pediu MFA → não há o que repetir.
255
+ if (!isMfaRequiredError(firstError) || code)
256
+ return onError(firstError);
257
+ beforePrompt?.();
258
+ const { headers } = await resolveStepUp({ ...opts, dryRun: false, skipSession: true });
259
+ try {
260
+ return await doRequest(headers);
261
+ }
262
+ catch (error) {
263
+ return onError(error);
264
+ }
265
+ }
217
266
  /**
218
267
  * Imprime o resultado de um comando de escrita — JSON cru ou linha humana.
219
268
  * Reconhece a resposta de dry-run (`{ dryRun: true }`) e a sinaliza.
@@ -1 +1 @@
1
- {"version":3,"file":"cli-write.js","sourceRoot":"","sources":["../../src/lib/cli-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-write.js","sourceRoot":"","sources":["../../src/lib/cli-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `@neetru/mobile-local` — contrato do registry local `.neetru/mobile.json`.
3
+ *
4
+ * Espelha o barrel de `../db-local/index.js`.
5
+ */
6
+ export { migrateMobileJson, readMobileJson, writeMobileJson, upsertMobileApp, removeMobileApp, } from './mobile-json.js';
7
+ export type { MobileJson, MobileJsonApp, MobilePlatform } from './mobile-json.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `@neetru/mobile-local` — contrato do registry local `.neetru/mobile.json`.
3
+ *
4
+ * Espelha o barrel de `../db-local/index.js`.
5
+ */
6
+ export { migrateMobileJson, readMobileJson, writeMobileJson, upsertMobileApp, removeMobileApp, } from './mobile-json.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/mobile-local/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,57 @@
1
+ export type MobilePlatform = 'ios' | 'android';
2
+ /** Uma entrada de app mobile no registry local. */
3
+ export interface MobileJsonApp {
4
+ /** ID canônico do Core — formato `<slug>__<platform>`. */
5
+ id: string;
6
+ platform: MobilePlatform;
7
+ name?: string;
8
+ /** Obrigatório no Core quando platform=ios. */
9
+ bundleId?: string;
10
+ /** Obrigatório no Core quando platform=ios (Apple Team ID, 10 chars). */
11
+ teamId?: string;
12
+ /** Obrigatório no Core quando platform=android. */
13
+ packageName?: string;
14
+ /** Obrigatório no Core quando platform=android (SHA-256 hex dos certs de assinatura). */
15
+ shaCertFingerprints?: string[];
16
+ redirectUri: string;
17
+ /** Client ID OIDC público (PKCE, sem secret) emitido pelo Core. */
18
+ oidcClientId: string;
19
+ status: string;
20
+ }
21
+ /** O registry `.neetru/mobile.json` — sempre versão 1. */
22
+ export interface MobileJson {
23
+ version: 1;
24
+ apps: MobileJsonApp[];
25
+ }
26
+ /**
27
+ * Migra qualquer entrada para um `MobileJson` v1 estruturalmente válido.
28
+ *
29
+ * - v1 válido → normalizado (entradas malformadas reparadas ou descartadas).
30
+ * - objeto sem `version` → upgrade best-effort (trata como v1).
31
+ * - `null` / não-objeto / array / garbage → lança.
32
+ *
33
+ * NUNCA retorna algo que não seja um `MobileJson` v1 válido.
34
+ */
35
+ export declare function migrateMobileJson(raw: unknown): MobileJson;
36
+ /**
37
+ * Lê + parseia + migra um `.neetru/mobile.json`.
38
+ *
39
+ * Arquivo ausente → registry v1 vazio (não é erro — é um registry novo).
40
+ * JSON inválido → lança um `Error` nomeando o path.
41
+ */
42
+ export declare function readMobileJson(filePath: string): MobileJson;
43
+ /**
44
+ * Escreve um `MobileJson` de forma ATÔMICA.
45
+ *
46
+ * Estratégia: escreve num arquivo temporário no MESMO diretório do destino
47
+ * (rename só é atômico dentro do mesmo filesystem) e faz `renameSync` —
48
+ * que sobrescreve o arquivo existente tanto no Windows quanto no POSIX.
49
+ *
50
+ * Cria o diretório pai se ausente. Se algo falhar depois do temp ser criado,
51
+ * tenta remover o temp (best-effort) pra não deixar lixo `.tmp-*`.
52
+ */
53
+ export declare function writeMobileJson(filePath: string, data: MobileJson): void;
54
+ /** Adiciona (ou substitui por `id`) uma entrada e retorna o `MobileJson` atualizado. */
55
+ export declare function upsertMobileApp(mobileJson: MobileJson, app: MobileJsonApp): MobileJson;
56
+ /** Remove uma entrada por `id` e retorna o `MobileJson` atualizado. */
57
+ export declare function removeMobileApp(mobileJson: MobileJson, id: string): MobileJson;