@nectarcrm/ccx 0.4.1 → 0.4.2
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/bin/ccx.js +7 -15
- package/package.json +1 -1
package/bin/ccx.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// (terminal, VS Code, JetBrains) usa essa conta. Claudes já abertos continuam na anterior.
|
|
17
17
|
// O vigia roda sozinho a cada 5 min: avisa o app, atualiza o token se o admin trocou
|
|
18
18
|
// e tira a conta se o acesso for removido. Os tokens gastos vão pro app pela telemetria.
|
|
19
|
-
// O
|
|
19
|
+
// O resumo dos projetos só vai pro app quando você roda ccx sync.
|
|
20
20
|
|
|
21
21
|
import { execFileSync } from 'node:child_process'
|
|
22
22
|
import { appendFileSync, chmodSync, closeSync, existsSync, mkdirSync, openSync, readdirSync, readFileSync, readSync, rmSync, statSync, writeFileSync } from 'node:fs'
|
|
@@ -211,8 +211,9 @@ function installAgent() {
|
|
|
211
211
|
return true
|
|
212
212
|
}
|
|
213
213
|
if (WIN) {
|
|
214
|
+
// node.exe é app de console: direto pelo Agendador abre uma janela a cada rodada. O conhost --headless roda sem janela.
|
|
214
215
|
execFileSync('schtasks', ['/Create', '/F', '/SC', 'MINUTE', '/MO', String(AGENT_MINUTES), '/TN', AGENT_ID,
|
|
215
|
-
'/TR', `"${process.execPath}" "${SELF}" vigia`], { stdio: 'ignore' })
|
|
216
|
+
'/TR', `conhost.exe --headless "${process.execPath}" "${SELF}" vigia`], { stdio: 'ignore' })
|
|
216
217
|
return true
|
|
217
218
|
}
|
|
218
219
|
return installLinuxAgent()
|
|
@@ -243,8 +244,6 @@ async function agentOnce() {
|
|
|
243
244
|
writeJson(APP, removeAccount(app))
|
|
244
245
|
return log('login vencido: conta tirada deste computador')
|
|
245
246
|
}
|
|
246
|
-
try { await sync(app, key, true) }
|
|
247
|
-
catch (e) { log(`sync falhou: ${e.message}`) }
|
|
248
247
|
const r = await api(app, key, 'POST', '/api/cli/heartbeat', { account_id: app.account?.id ?? null }, 20_000)
|
|
249
248
|
if (r.status === 401) {
|
|
250
249
|
writeJson(APP, removeAccount(app))
|
|
@@ -378,7 +377,7 @@ function addToDay(days, e) {
|
|
|
378
377
|
return key
|
|
379
378
|
}
|
|
380
379
|
|
|
381
|
-
// Só um sync por vez (
|
|
380
|
+
// Só um sync por vez (dois ccx sync ao mesmo tempo). Trava velha (sync que caiu) é ignorada.
|
|
382
381
|
function takeLock() {
|
|
383
382
|
mkdirSync(DIR, { recursive: true })
|
|
384
383
|
try { closeSync(openSync(SYNC_LOCK, 'wx')); return true }
|
|
@@ -389,8 +388,8 @@ function takeLock() {
|
|
|
389
388
|
}
|
|
390
389
|
}
|
|
391
390
|
|
|
392
|
-
async function sync(app, key
|
|
393
|
-
const say = msg =>
|
|
391
|
+
async function sync(app, key) {
|
|
392
|
+
const say = msg => process.stderr.write(msg)
|
|
394
393
|
if (!takeLock()) return say('Outro sync já está rodando. Tente de novo daqui a pouco.\n')
|
|
395
394
|
try {
|
|
396
395
|
let state = readJson(SYNC_STATE, {})
|
|
@@ -563,7 +562,7 @@ async function doctor() {
|
|
|
563
562
|
}
|
|
564
563
|
else ok('Telemetria ligada (tokens vão pro painel)')
|
|
565
564
|
if (agentInstalled()) ok(`Vigia instalado (roda a cada ${AGENT_MINUTES} min)`)
|
|
566
|
-
else aviso('O vigia não está instalado: token novo e
|
|
565
|
+
else aviso('O vigia não está instalado: token novo e acesso removido não chegam sozinhos', 'ccx (escolha a conta de novo)')
|
|
567
566
|
// Só o que deu errado nas últimas 24 h (o log tem a data no começo de cada linha)
|
|
568
567
|
const dayAgo = new Date(Date.now() - 86_400_000).toISOString()
|
|
569
568
|
const lastErr = existsSync(LOG) && readFileSync(LOG, 'utf8').trim().split('\n').filter(l => l >= dayAgo && /falhou|removid|vencid/.test(l)).pop()
|
|
@@ -740,10 +739,3 @@ if (cmd === 'status') {
|
|
|
740
739
|
|
|
741
740
|
// `ccx`, `ccx login ...` (depois de autorizar) ou `ccx <conta>`
|
|
742
741
|
await useAccount(app, key, cmd && cmd !== 'login' ? cmd : await chooseAccount(app, key))
|
|
743
|
-
|
|
744
|
-
// Logo depois do login, manda o resumo das sessões (as próximas vão pelo vigia)
|
|
745
|
-
if (cmd === 'login') {
|
|
746
|
-
console.error('')
|
|
747
|
-
try { await sync(app, key) }
|
|
748
|
-
catch (e) { console.error(c(33, `\nO sync falhou (${e.message}). Tente: ccx sync`)) }
|
|
749
|
-
}
|