ci-validation
Version:
🇺🇾 Complete TypeScript/JavaScript library for validating Uruguayan CI (Cédula de Identidad) with official algorithm and government service integration
118 lines • 4.85 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ANV = void 0;
const axios_1 = __importDefault(require("axios"));
class ANV {
constructor() {
this.baseUrl = "https://gestion.anv.gub.uy/serviciosDMZ/api/app";
this.timeout = 10000; // 10 segundos
this.bearerToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3VhcmlvIjoiQU5WIiwiZG9jdW1lbnRvIjoiMCIsInRpcG9fZG9jdW1lbnRvIjoiMCIsImlzX3N1cGVydmlzb3IiOiIwIiwib3BlcmF0b3JfY29kZSI6IjAiLCJzdWN1cnNhbCI6IiIsInBlcm1pc29zIjoiIiwiaGFzaCI6IiIsInR4IjoiIiwiZGF0b3MiOiIiLCJyb2xlcyI6IiIsIm5iZiI6MTcyNDg3OTU0MSwiZXhwIjoyMDQwNDEyMzQxLCJpYXQiOjE3MjQ4Nzk1NDF9.qp35Z1X5wKqBH_iB5Nt24BO1fQvnWf07dUO1ul4WFzA";
}
/**
* Busca información de una persona en ANV por cédula
* @param cedula - Número de cédula a consultar
* @returns Promise<ANVResponse> - Información de la persona encontrada
*/
async buscarPersona(cedula) {
try {
const response = await axios_1.default.get(`${this.baseUrl}/BuscarPersonaDNIC?cedula=${cedula}`, {
headers: {
Authorization: `Bearer ${this.bearerToken}`,
"Content-Type": "application/json",
},
timeout: this.timeout,
});
return {
success: true,
data: response.data,
...response.data,
};
}
catch (error) {
console.error("Error al consultar ANV:", error);
if (axios_1.default.isAxiosError(error)) {
if (error.response) {
return {
success: false,
error: `Error del servidor ANV: ${error.response.status} - ${error.response.statusText}`,
data: error.response.data,
};
}
if (error.code === "ECONNABORTED") {
return {
success: false,
error: "Timeout: El servicio ANV no respondió en el tiempo esperado",
};
}
return {
success: false,
error: "Error de conexión con el servicio ANV",
};
}
return {
success: false,
error: "Error inesperado al consultar ANV",
};
}
}
/**
* Verifica si una persona está registrada en ANV
* @param cedula - Número de cédula a verificar
* @returns Promise<boolean> - true si está registrada, false si no
*/
async isPersonRegistered(cedula) {
try {
const response = await this.buscarPersona(cedula);
// Si la consulta fue exitosa y hay datos, consideramos que está registrada
if (response.success && response.data) {
// Verificamos si hay información válida en la respuesta
return response.data !== null && response.data !== undefined && Object.keys(response.data).length > 0;
}
return false;
}
catch (error) {
console.error("Error al verificar registro en ANV:", error);
return false;
}
}
/**
* Verifica si el servicio ANV está disponible
* @returns Promise<boolean> - true si el servicio está disponible
*/
async isServiceAvailable() {
try {
// Realizar una consulta de prueba con timeout reducido
await axios_1.default.get(`${this.baseUrl}/BuscarPersonaDNIC?cedula=12345678`, // CI de prueba
{
headers: {
Authorization: `Bearer ${this.bearerToken}`,
"Content-Type": "application/json",
},
timeout: 5000, // Timeout reducido para health check
});
return true;
}
catch (error) {
// Si es un error 404 o similar, el servicio está disponible pero no hay datos
if (axios_1.default.isAxiosError(error) && error.response && error.response.status < 500) {
return true;
}
console.warn("Servicio ANV no disponible:", error);
return false;
}
}
/**
* Obtiene información detallada de una persona desde ANV
* @param cedula - Número de cédula a consultar
* @returns Promise<any> - Información completa de la persona
*/
async getPersonInfo(cedula) {
const response = await this.buscarPersona(cedula);
return response.data;
}
}
exports.ANV = ANV;
//# sourceMappingURL=ANV.js.map