George GiosueHablemos
Proyectos

simcapture-sdk

Paquete npm que envuelve la API REST de SimCapture, plataforma de grabación y evaluación de simulación clínica, en un cliente tipado. Evita que cada servicio que la consume rehaga a mano el login, el manejo de axios y la forma de las respuestas.

Características

  • Recursos tipados: organizaciones, reservas, cursos, escenarios, ubicaciones y simuladores
  • Autenticación con caché del token y reintento transparente ante 401
  • SimCaptureError con el estado real del upstream, no un 400 genérico para todo
  • Entradas simplificadas que se mapean a la forma real del API (startstartTs, titleprivateTitle, …)
  • reservations.isAvailable para comprobar disponibilidad por ventana de tiempo, ambiente, curso u organización
  • Build dual ESM/CJS con tsup y tipos .d.ts generados
  • Publicación automatizada en npm mediante GitHub Actions

Tecnologías

TypeScript, Bun, axios, tsup, GitHub Actions.

Instalación

npm install simcapture-sdk

Ejemplo de Uso

import { SimCaptureClient, SimCaptureError } from "simcapture-sdk";

const sc = new SimCaptureClient({
  apiUrl: process.env.SIMCAPTURE_API!,
  inventoryUrl: process.env.SIMCAPTURE_INVENTORY_API!,
  credentials: {
    username: process.env.SIMCAPTURE_USER!,
    password: process.env.SIMCAPTURE_PASSWORD!,
    clientSubdomain: process.env.SIMCAPTURE_SUBDOMAIN!,
  },
});

const reservations = await sc.reservations.findAll({
  start: "2026-07-01T05:00:00.000Z",
  end: "2026-12-31T05:00:00.000Z",
});

try {
  await sc.reservations.findOne("bad-id");
} catch (error) {
  if (error instanceof SimCaptureError) {
    console.error(error.status, error.code, error.body);
  }
}

Motivación

La integración bidireccional entre la plataforma del Centro Interdisciplinario de Simulación Avanzada y SimCapture necesitaba el mismo cliente en varios microservicios. Extraerlo a un paquete versionado eliminó la duplicación de la lógica de autenticación y dejó las respuestas del API tipadas en un solo lugar.