ci-validation
Version:
🇺🇾 Complete TypeScript/JavaScript library for validating Uruguayan CI (Cédula de Identidad) with official algorithm and government service integration
115 lines • 4.38 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Casmu = void 0;
const axios_1 = __importDefault(require("axios"));
class Casmu {
constructor() {
this.baseUrl = "https://orq.casmu.com/casmucerca-v2/rest";
this.timeout = 10000; // 10 segundos
}
/**
* Extrae el nĂşmero de cĂ©dula sin dĂgito verificador
* @param cedula - NĂşmero de cĂ©dula (con o sin dĂgito verificador)
* @returns string - CĂ©dula sin dĂgito verificador
*/
extractCedulaWithoutDigit(cedula) {
// Si la cĂ©dula tiene 7 dĂgitos, asumimos que ya está sin dĂgito verificador
if (cedula.length === 7) {
return cedula;
}
// Si tiene 8 dĂgitos, removemos el Ăşltimo (dĂgito verificador)
if (cedula.length === 8) {
return cedula.substring(0, 7);
}
// Si es más corta, la devolvemos tal como está
return cedula;
}
/**
* Verifica si un usuario está registrado en Casmu
* @param cedula - NĂşmero de cĂ©dula (con o sin dĂgito verificador)
* @returns Promise<boolean> - true si está registrado, false si no
*/
async isUserRegistered(cedula) {
try {
const cedulaSinDigito = this.extractCedulaWithoutDigit(cedula);
const requestData = {
Cedula: cedulaSinDigito,
Medio: "broken",
paiIsoNum: "858",
tipoDocumento: "1",
};
const response = await axios_1.default.post(`${this.baseUrl}/P_EnviarCodigoNuevoPIN?fmt=json`, requestData, {
headers: {
"Content-Type": "application/json",
},
timeout: this.timeout,
});
// Si perid es "0", el usuario no está registrado
// Si perid tiene un valor numérico mayor a 0, el usuario está registrado
return response.data.perid !== "0";
}
catch (error) {
console.error("Error al verificar registro en Casmu:", error);
// No lanzamos error, devolvemos false para que el servicio principal continue
return false;
}
}
/**
* Obtiene la respuesta completa de Casmu para debugging
* @param cedula - NĂşmero de cĂ©dula (con o sin dĂgito verificador)
* @returns Promise<CasmuResponse> - Respuesta completa del servicio
*/
async getFullResponse(cedula) {
try {
const cedulaSinDigito = this.extractCedulaWithoutDigit(cedula);
const requestData = {
Cedula: cedulaSinDigito,
Medio: "broken",
paiIsoNum: "858",
tipoDocumento: "1",
};
const response = await axios_1.default.post(`${this.baseUrl}/P_EnviarCodigoNuevoPIN?fmt=json`, requestData, {
headers: {
"Content-Type": "application/json",
},
timeout: this.timeout,
});
return response.data;
}
catch (error) {
console.error("Error al consultar Casmu:", error);
throw new Error("Error al consultar el servicio de Casmu");
}
}
/**
* Verifica si el servicio de Casmu está disponible
* @returns Promise<boolean> - true si el servicio está disponible
*/
async isServiceAvailable() {
try {
// Realizar una consulta de prueba con timeout reducido
const testData = {
Cedula: "1234567", // CI de prueba
Medio: "broken",
paiIsoNum: "858",
tipoDocumento: "1",
};
await axios_1.default.post(`${this.baseUrl}/P_EnviarCodigoNuevoPIN?fmt=json`, testData, {
headers: {
"Content-Type": "application/json",
},
timeout: 5000, // Timeout reducido para health check
});
return true;
}
catch (error) {
console.warn("Servicio Casmu no disponible:", error);
return false;
}
}
}
exports.Casmu = Casmu;
//# sourceMappingURL=Casmu.js.map