/** * Borra del CRM lo que crearon los spikes. * * Los spikes escriben en la subcuenta REAL del cliente. Todo lo que crean lleva * el tag `agendamax:prueba` y el correo autorizado; esto lo busca por ese tag y * lo elimina, para no dejar basura en la base de un negocio en producción. * * node scripts/run-tsx.mjs platform/scripts/crm-limpiar-pruebas.ts (lista) * node scripts/run-tsx.mjs platform/scripts/crm-limpiar-pruebas.ts --borrar (borra) */ import { loadEnv, requireEnv } from "../lib/env.ts"; import { ctxDesdeEnv } from "../crm/ctx.ts"; import { crmRequest } from "../crm/client.ts"; import { oportunidadesDeContacto } from "../crm/opportunities.ts"; loadEnv(); const LOC = requireEnv("CRM_LOCATION_ID"); const CTX = ctxDesdeEnv(); const CORREO = process.env.CRM_TEST_EMAIL || "urieljareth@grupo-e3.com"; const BORRAR = process.argv.includes("--borrar"); async function main() { const r = await crmRequest("GET", "/contacts/", { token: CTX.token, query: { locationId: LOC, query: CORREO, limit: 20 }, }); const contactos: any[] = (r?.contacts ?? []).filter( (c: any) => (c.email ?? "").toLowerCase() === CORREO.toLowerCase() || (c.tags ?? []).includes("agendamax:prueba") ); if (!contactos.length) { console.log("No hay contactos de prueba en la subcuenta."); return; } for (const c of contactos) { console.log(`\nContacto ${c.id} — ${c.contactName ?? c.firstName} <${c.email}>`); console.log(` tags: ${(c.tags ?? []).join(", ") || "(ninguno)"}`); const opps = await oportunidadesDeContacto(CTX, c.id); for (const o of opps) { console.log(` oportunidad ${o.id} — «${o.name}» (${o.status})`); if (BORRAR) { await crmRequest("DELETE", `/opportunities/${o.id}`, { token: CTX.token }); console.log(" borrada"); } } if (BORRAR) { await crmRequest("DELETE", `/contacts/${c.id}`, { token: CTX.token }); console.log(" contacto borrado"); } } if (!BORRAR) { console.log("\n(Solo listado. Añade --borrar para eliminarlos de verdad.)"); } } main().catch((e) => { console.error(e.message); process.exit(1); });