Scripts de configuración y limpieza

Scripts de configuración y limpieza

Algunos endpoints de API no se pueden monitorizar con una petición estática. Necesitan un token nuevo en cada llamada, una cabecera firmada o una carga única, y pueden dejar datos que conviene limpiar. Los monitores de API de LoadFocus te permiten ejecutar un script de configuración (setup) justo antes de la petición y un script de limpieza (teardown) justo después de la respuesta, de modo que el check se prepara y se ordena solo en cada ejecución.

Los scripts de setup y teardown se aplican a los checks de API. Los checks de navegador ya son un script completo (el propio flujo de usuario), y los checks multistep pasan datos entre pasos con variables, así que cubren las mismas necesidades de otra forma.

Cómo funciona

  • El script de setup se ejecuta primero y recibe el objeto request. Todo lo que cambies en request (cabeceras, URL, cuerpo) se usa para la llamada real. Aquí es donde obtienes un token, firmas la petición o construyes una carga única.
  • LoadFocus envía entonces la petición.
  • El script de teardown se ejecuta al final y recibe tanto request como response. Aquí es donde eliminas un recurso que el check haya creado, o depuras datos sensibles de los logs.

Ambos scripts se ejecutan en un entorno aislado en cada ejecución del check, en cada región, con su salida de consola capturada para que veas qué ha ocurrido.

Qué puedes usar

Dentro de un script de setup o teardown puedes hacer require de:

  • got y axios — hacer llamadas HTTP (por ejemplo, intercambiar credenciales por un token OAuth).
  • crypto — firmar peticiones (HMAC, hashes) para APIs que requieren una firma.
  • @faker-js/faker — generar datos de prueba únicos y realistas.
  • url y path — utilidades para construir URLs y rutas.

console.log está disponible y su salida se muestra bajo los logs del script.

Ejemplo: obtener un token OAuth en el setup

const got = require('got');
const tokenResponse = await got.post('https://auth.example.com/oauth/token', {
json: {
grant_type: 'client_credentials',
client_id: '{{secrets.CLIENT_ID}}',
client_secret: '{{secrets.CLIENT_SECRET}}',
},
}).json();
// Aplica el token a la petición que LoadFocus está a punto de enviar
request.headers = request.headers || [];
request.headers.push({ name: 'Authorization', value: 'Bearer ' + tokenResponse.access_token });

Ejemplo: firmar una petición

const crypto = require('crypto');
const timestamp = Date.now().toString();
const signature = crypto
.createHmac('sha256', '{{secrets.SIGNING_KEY}}')
.update(timestamp + request.url)
.digest('hex');
request.headers = request.headers || [];
request.headers.push({ name: 'X-Timestamp', value: timestamp });
request.headers.push({ name: 'X-Signature', value: signature });

Ejemplo: limpiar en el teardown

const got = require('got');
// Si la petición creó un recurso, elimínalo para que el monitor no deje rastro
if (response.statusCode === 201 && response.body) {
const created = JSON.parse(response.body);
await got.delete('https://api.example.com/items/' + created.id, {
headers: { Authorization: request.headers.find(h => h.name === 'Authorization').value },
});
}

Secretos y variables

Referencia tus secretos y variables guardados con {{secrets.NOMBRE}} y {{variables.NOMBRE}} dentro de un script. LoadFocus los sustituye en tiempo de ejecución, de modo que las credenciales y las claves de firma nunca quedan en texto plano en el cuerpo del script.

Probar tus scripts

En el editor del check, el botón Ejecutar junto a cada script lo ejecuta en vivo contra el endpoint real y muestra los logs capturados y el resultado (éxito o el mensaje de error). Úsalo para confirmar que tu intercambio de token o tu firma funcionan antes de guardar el monitor.

Límites

  • El cuerpo de cada script está limitado a 100 KB.
  • El script de setup se ejecuta en cada ejecución del check, así que mantén los intercambios de token eficientes: un setup lento se suma al tiempo medido del check.
  • Si el script de setup falla, la petición no se envía y el check se marca como fallido, que suele ser lo deseable (sin auth válida no hay check válido).