/** * Conecta el negocio de la plataforma con su subcuenta de Bucéfalo CRM y * autodetecta pipeline y etapas. * * node scripts/run-tsx.mjs platform/scripts/crm-conectar.ts [slug] */ import { pool } from "../db/pool.ts"; import { loadEnv, requireEnv } from "../lib/env.ts"; import { autoconfigurar } from "../crm/connection.ts"; import { ctxDe, ctxDesdeEnv, guardarCredencial } from "../crm/ctx.ts"; loadEnv(); async function main() { const slug = process.argv[2] || "yola-franco"; const locationId = requireEnv("CRM_LOCATION_ID"); const b = await pool.query<{ id: number; name: string }>( `SELECT id, name FROM businesses WHERE slug = $1`, [slug] ); if (!b.rows[0]) { console.error(`No existe el negocio con slug «${slug}»`); process.exit(1); } // El script vincula la subcuenta configurada en el entorno: guarda la // credencial cifrada y después autodetecta pipeline y etapas. Antes solo // hacía lo segundo, porque el token era global. await guardarCredencial(b.rows[0].id, locationId, ctxDesdeEnv().token); const c = await autoconfigurar(await ctxDe(b.rows[0].id)); console.log(`Conectado «${b.rows[0].name}» ↔ subcuenta ${c.location_id}`); console.log(` pipeline : ${c.pipeline_id}`); console.log(` etapa «en espera» : ${c.stage_open_id}`); console.log(` etapa «ganado» : ${c.stage_won_id}`); console.log(` etapa «perdido» : ${c.stage_lost_id}`); console.log(` permite duplicados : ${c.allow_duplicate_opp}`); console.log(` nota : ${c.last_sync_status}`); if (!c.allow_duplicate_opp) { console.log( `\n >> Con «allow duplicate opportunity» desactivado, cada clienta tiene UNA\n` + ` oportunidad que se recicla en cada cita. Para que cada cita estrene la\n` + ` suya, hay que activar ese ajuste en la UI del CRM.` ); } await pool.end(); } main().catch((e) => { console.error(e.message); process.exit(1); });