Skip to main content
Glama
utils.ts3.47 kB
import https from 'https'; import { JenkinsConfig, JenkinsError } from './types.js'; /** * Crear configuración de Jenkins desde variables de entorno */ export function createJenkinsConfig(): JenkinsConfig { const url = process.env.JENKINS_URL; const username = process.env.JENKINS_USERNAME; const password = process.env.JENKINS_PASSWORD; if (!url || !username || !password) { throw new Error( 'Jenkins configuration missing. Please set JENKINS_URL, JENKINS_USERNAME, and JENKINS_PASSWORD environment variables.' ); } return { url, username, password }; } /** * Crear headers de autenticación para Jenkins */ export function createAuthHeaders(config: JenkinsConfig): Record<string, string> { const credentials = Buffer.from(`${config.username}:${config.password}`).toString('base64'); return { 'Authorization': `Basic ${credentials}`, 'Content-Type': 'application/json', 'Accept': 'application/json', }; } /** * Crear headers para form data */ export function createFormHeaders(config: JenkinsConfig): Record<string, string> { const credentials = Buffer.from(`${config.username}:${config.password}`).toString('base64'); return { 'Authorization': `Basic ${credentials}`, 'Content-Type': 'application/x-www-form-urlencoded', }; } /** * Crear agente HTTPS que ignora certificados auto-firmados (similar al código Java) */ export function createHttpsAgent() { return new https.Agent({ rejectUnauthorized: false }); } /** * Construir URL del job con branch específico * Formato: /job/{app}/job/{branch} */ export function buildJobUrl(baseUrl: string, app: string, branch: string = 'main'): string { // Si no hay baseUrl, solo devolver la ruta relativa if (!baseUrl) { return `/job/${app}/job/${branch}`; } // Si hay baseUrl, construir URL completa return `${baseUrl}/job/${app}/job/${branch}`; } /** * Construir URL del job con número de build */ export function buildJobBuildUrl(baseUrl: string, app: string, buildNumber: number, branch: string = 'main'): string { return `${buildJobUrl(baseUrl, app, branch)}/${buildNumber}`; } /** * Manejar errores de respuesta HTTP */ export function handleHttpError(error: any, context: string): JenkinsError { const jenkinsError = new JenkinsError(`${context}: ${error.message}`); if (error.response) { jenkinsError.status = error.response.status; jenkinsError.response = error.response.data; } return jenkinsError; } /** * Formatear duración en milisegundos a formato legible */ export function formatDuration(milliseconds: number): string { if (!milliseconds) return 'N/A'; const seconds = Math.floor(milliseconds / 1000); const minutes = Math.floor(seconds / 60); const hours = Math.floor(minutes / 60); if (hours > 0) { return `${hours}h ${minutes % 60}m ${seconds % 60}s`; } else if (minutes > 0) { return `${minutes}m ${seconds % 60}s`; } else { return `${seconds}s`; } } /** * Formatear timestamp a fecha legible */ export function formatTimestamp(timestamp: number): string { if (!timestamp) return 'N/A'; return new Date(timestamp).toLocaleString(); } /** * Validar nombre de aplicación */ export function validateAppName(app: string): boolean { return /^[a-zA-Z0-9\-_]+$/.test(app); } /** * Limpiar y validar parámetros de entrada */ export function sanitizeInput(input: string): string { return input.trim().replace(/[<>'"&]/g, ''); }

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gcorroto/mcp-jenkins'

If you have feedback or need assistance with the MCP directory API, please join our Discord server