banxico-sdk
Version:
Cliente ligero en TypeScript para consumir las series de tipos de cambio de Banxico
74 lines (73 loc) • 2.96 kB
JavaScript
// src/client.ts
Object.defineProperty(exports, "__esModule", { value: true });
exports.BanxicoClient = void 0;
class BanxicoClient {
constructor(opts) {
this.opts = opts;
this.baseUrl = 'https://www.banxico.org.mx/SieAPIRest/service/v1';
}
/**
* Obtiene el tipo de cambio FIX más reciente.
* @returns Un objeto { fecha, valor }.
*/
async getTipoCambioFix() {
const url = `${this.baseUrl}/series/SF43718/datos/oportuno`;
const data = await this.opts.adapter.get(url, { mediaType: 'json' }, { 'Bmx-Token': this.opts.token });
const d = data.bmx.series[0].datos[0];
return { fecha: d.fecha, valor: d.dato };
}
/**
* Obtiene el histórico de FIX entre dos fechas.
* Acepta "DD/MM/YYYY" o "YYYY-MM-DD".
* @param fechaIni Fecha inicio
* @param fechaFin Fecha fin
* @returns Array de { fecha, valor }.
*/
async getTipoCambioHistorico(fechaIni, fechaFin) {
const fmt = (f) => {
if (f.includes('/')) {
const [d, m, y] = f.split('/');
return `${y}-${m.padStart(2, '0')}-${d.padStart(2, '0')}`;
}
return f;
};
const ini = fmt(fechaIni);
const fin = fmt(fechaFin);
const url = `${this.baseUrl}/series/SF43718/datos/${ini}/${fin}`;
const data = await this.opts.adapter.get(url, { mediaType: 'json' }, { 'Bmx-Token': this.opts.token });
return data.bmx.series[0].datos.map((d) => ({ fecha: d.fecha, valor: d.dato }));
}
/**
* Obtiene el tipo de cambio para obligaciones (SF60653) más reciente.
* @returns Un objeto { fecha, valor }.
*/
async getTipoCambioObligacionesFix() {
const url = `${this.baseUrl}/series/SF60653/datos/oportuno`;
const data = await this.opts.adapter.get(url, { mediaType: 'json' }, { 'Bmx-Token': this.opts.token });
const d = data.bmx.series[0].datos[0];
return { fecha: d.fecha, valor: d.dato };
}
/**
* Obtiene el histórico de obligaciones entre dos fechas.
* Acepta "DD/MM/YYYY" o "YYYY-MM-DD".
* @param fechaIni Fecha inicio
* @param fechaFin Fecha fin
* @returns Array de { fecha, valor }.
*/
async getTipoCambioObligacionesHistorico(fechaIni, fechaFin) {
const fmt = (f) => {
if (f.includes('/')) {
const [d, m, y] = f.split('/');
return `${y}-${m.padStart(2, '0')}-${d.padStart(2, '0')}`;
}
return f;
};
const ini = fmt(fechaIni);
const fin = fmt(fechaFin);
const url = `${this.baseUrl}/series/SF60653/datos/${ini}/${fin}`;
const data = await this.opts.adapter.get(url, { mediaType: 'json' }, { 'Bmx-Token': this.opts.token });
return data.bmx.series[0].datos.map((d) => ({ fecha: d.fecha, valor: d.dato }));
}
}
exports.BanxicoClient = BanxicoClient;
;