get-mexican-data-by-curp
Version:
Verify CURP and obtain personal information from the Mexican government CURP. It scrapes official site and another providers.
112 lines (111 loc) • 5.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GovernmentScrapper = void 0;
const models_1 = require("../models");
const axios_1 = __importDefault(require("axios"));
const genderISOConverter = new Map([
['HOMBRE', '1'],
['MUJER', '2'],
]);
const birthdayFormatFromRenapo = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/g;
const birthday = '$3-$2-$1T12:00:00.000Z';
class GovernmentScrapper extends models_1.Provider {
constructor(captchaSolver) {
super();
this.captchaSolver = captchaSolver;
}
static async parseResponse(renapoResponse, curp) {
var _a;
const register = renapoResponse.registros[0];
return {
curp: curp.value,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
fatherName: register.primerApellido,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
motherName: register.segundoApellido,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
name: register.nombres,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
gender: (_a = genderISOConverter.get(register.sexo)) !== null && _a !== void 0 ? _a : '',
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
birthday: register.fechaNacimiento.replace(birthdayFormatFromRenapo, birthday),
// eslint-disable-next-line @typescript-eslint/await-thenable
birthState: await curp.getIsoState(),
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
statusCurp: register.statusCurp,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
nationality: register.nacionalidad,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
probatoryDocument: register.docProbatorio,
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
pdf: register.parametro,
probatoryDocumentData: Object.assign({}, register.datosDocProbatorio),
};
}
async provide(curpId) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
const captchaSolution = await this.captchaSolver.solve('6LdJssgUAAAAAKkVr-Aj-xP5QQzclPeGZmhRwXeY', 'https://www.gob.mx/curp');
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
const renapoResponse = await axios_1.default('https://www.gob.mx/v1/renapoCURP/consulta', {
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0',
Accept: 'application/json',
'Accept-Language': 'en-US,en;q=0.5',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept',
'X-Requested-With': 'XMLHttpRequest',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
Pragma: 'no-cache',
'Cache-Control': 'no-cache',
referer: 'https://www.gob.mx/',
},
data: JSON.stringify({
curp: curpId.value,
tipoBusqueda: 'curp',
ip: '127.0.0.1',
response: captchaSolution,
}),
method: 'POST',
}
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
).then(res => res.data);
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
this.ensure(renapoResponse.codigo);
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
if (renapoResponse.registros == undefined) {
return {
curp: curpId.value,
error: 'CURP not found',
};
}
return GovernmentScrapper.parseResponse(renapoResponse, curpId);
}
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
ensure(code) {
switch (code) {
case '01':
return;
case '02':
case '03':
case '04':
case '05':
case '07':
throw new Error('Invalid 07');
case '11':
case '13':
throw new Error('');
case '180001':
case '190001':
return;
default:
throw new Error('');
}
}
}
exports.GovernmentScrapper = GovernmentScrapper;