refacil-pay-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ export declare const appConfig: {
2
+ readonly name: "refacil-pay";
3
+ readonly description: "MCP para Refacil Pay API - Gestión de pagos y transacciones";
4
+ readonly baseUrl: string;
5
+ readonly port: number;
6
+ readonly environment: string;
7
+ readonly authType: "usernamePassword";
8
+ readonly secretId: string;
9
+ readonly apiToken: string | undefined;
10
+ readonly username: string;
11
+ readonly password: string;
12
+ readonly authEndpoint: string;
13
+ readonly tokenCacheTtl: number;
14
+ readonly mcpToken: string | undefined;
15
+ };
package/dist/config.js ADDED
@@ -0,0 +1,68 @@
1
+ import { config } from 'dotenv';
2
+ // Cargar variables de entorno
3
+ config();
4
+ // Detectar modo de ejecución
5
+ const mode = process.argv.includes('--http') || process.env.MCP_MODE === 'http' ? 'http' : 'stdio';
6
+ // Validar variables de entorno requeridas
7
+ const requiredEnvVars = ["BASE_URL", "USERNAME", "PASSWORD", "AUTH_ENDPOINT"];
8
+ const missingVars = requiredEnvVars.filter(varName => {
9
+ const value = process.env[varName];
10
+ return !value || value.trim().length === 0;
11
+ });
12
+ if (missingVars.length > 0) {
13
+ const guidance = [
14
+ "Añade las variables faltantes en la configuración MCP de tu IDE (Cursor, Claude Desktop, etc.)",
15
+ "'env': {",
16
+ missingVars.map(varName => ` "${varName}": "valor"`).join(',\n'),
17
+ "}"
18
+ ].join('\n');
19
+ throw new Error(`❌ Faltan variables de entorno requeridas: ${missingVars.join(', ')}\n${guidance}`);
20
+ }
21
+ // Validar variables opcionales según modo
22
+ const optionalEnvVars = [];
23
+ const missingOptionalVars = optionalEnvVars.filter(varName => {
24
+ const value = process.env[varName];
25
+ return !value || value.trim().length === 0;
26
+ });
27
+ if (missingOptionalVars.length > 0) {
28
+ if (mode === 'stdio') {
29
+ // En modo STDIO, las variables son requeridas
30
+ const guidance = [
31
+ "Añade las variables faltantes en la configuración MCP de tu IDE (Cursor, Claude Desktop, etc.)",
32
+ "'env': {",
33
+ missingOptionalVars.map(varName => ` "${varName}": "valor"`).join(',\n'),
34
+ "}"
35
+ ].join('\n');
36
+ throw new Error(`❌ Faltan variables de entorno requeridas para modo STDIO: ${missingOptionalVars.join(', ')}\n${guidance}`);
37
+ }
38
+ else {
39
+ // En modo HTTP, son opcionales (pueden venir del header X-Secret-ID)
40
+ console.error(`⚠️ Variables opcionales no configuradas: ${missingOptionalVars.join(', ')}`);
41
+ console.error(` En modo HTTP, puedes proporcionar SECRET_ID via header X-Secret-ID en cada request`);
42
+ }
43
+ }
44
+ const port = Number.parseInt(process.env.PORT || '3009', 10);
45
+ const tokenCacheTtl = Number.parseInt(process.env.TOKEN_CACHE_TTL || '3600', 10);
46
+ // En HTTP mode, secretId y authEndpoint son opcionales (vienen del header X-Secret-ID)
47
+ // En STDIO mode, son requeridos (ya validados arriba)
48
+ const secretId = process.env.SECRET_ID || '';
49
+ const authEndpoint = process.env.AUTH_ENDPOINT || '';
50
+ const apiToken = process.env.API_TOKEN;
51
+ const username = process.env.USERNAME;
52
+ const password = process.env.PASSWORD;
53
+ export const appConfig = {
54
+ name: 'refacil-pay',
55
+ description: 'MCP para Refacil Pay API - Gestión de pagos y transacciones',
56
+ baseUrl: process.env.BASE_URL,
57
+ port,
58
+ environment: process.env.ENVIRONMENT || process.env.NODE_ENV || 'development',
59
+ authType: 'usernamePassword',
60
+ secretId,
61
+ apiToken,
62
+ username,
63
+ password,
64
+ authEndpoint,
65
+ tokenCacheTtl,
66
+ mcpToken: process.env.MCP_TOKEN ?? undefined
67
+ };
68
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ declare class UsernamePasswordAuthManager {
2
+ private tokenCache;
3
+ private readonly username;
4
+ private readonly password;
5
+ private readonly authEndpoint;
6
+ private readonly tokenCacheTtl;
7
+ constructor(username: string, password: string, authEndpoint: string, tokenCacheTtl?: number);
8
+ /**
9
+ * Obtiene un token válido, renovándolo si es necesario
10
+ */
11
+ getValidToken(): Promise<string>;
12
+ /**
13
+ * Renueva el token llamando al endpoint de autenticación
14
+ */
15
+ private refreshToken;
16
+ /**
17
+ * Limpia el token de la caché
18
+ */
19
+ clearToken(): void;
20
+ }
21
+ export declare const authManager: UsernamePasswordAuthManager;
22
+ export declare function getAuthHeaders(): Promise<Record<string, string>>;
23
+ export declare function validateMcpToken(token: string, expectedToken: string): boolean;
24
+ export declare function setupAuthHooks(fastify: any): void;
25
+ export {};
@@ -0,0 +1,143 @@
1
+ import axios from 'axios';
2
+ class UsernamePasswordAuthManager {
3
+ tokenCache = null;
4
+ username;
5
+ password;
6
+ authEndpoint;
7
+ tokenCacheTtl;
8
+ constructor(username, password, authEndpoint, tokenCacheTtl = 3600) {
9
+ this.username = username;
10
+ this.password = password;
11
+ this.authEndpoint = authEndpoint;
12
+ this.tokenCacheTtl = tokenCacheTtl;
13
+ }
14
+ /**
15
+ * Obtiene un token válido, renovándolo si es necesario
16
+ */
17
+ async getValidToken() {
18
+ const now = Date.now();
19
+ // Verificar si el token existe y no ha expirado
20
+ if (this.tokenCache && this.tokenCache.expiresAt > now) {
21
+ return this.tokenCache.token;
22
+ }
23
+ // Renovar token
24
+ return this.refreshToken();
25
+ }
26
+ /**
27
+ * Renueva el token llamando al endpoint de autenticación
28
+ */
29
+ async refreshToken() {
30
+ try {
31
+ console.error(`🔑 Solicitando token de autenticación...`);
32
+ console.error(` URL: ${this.authEndpoint}`);
33
+ console.error(` Username: ${this.username}`);
34
+ const response = await axios.post(this.authEndpoint, {
35
+ username: this.username,
36
+ password: this.password
37
+ }, {
38
+ headers: {
39
+ 'Content-Type': 'application/json'
40
+ },
41
+ timeout: 30000, // 30 segundos de timeout
42
+ validateStatus: (status) => status < 500 // No lanzar error en 4xx
43
+ });
44
+ console.error(`📥 Respuesta recibida: HTTP ${response.status}`);
45
+ // Validar respuesta exitosa
46
+ if (response.status !== 200) {
47
+ console.error(`❌ Error HTTP: ${response.status} - ${response.statusText}`);
48
+ console.error(` Respuesta: ${JSON.stringify(response.data)}`);
49
+ throw new Error(`Error en autenticación: HTTP ${response.status} - ${response.data?.message || response.statusText}`);
50
+ }
51
+ // Extraer token de la respuesta (soporta múltiples formatos)
52
+ let token = null;
53
+ // Formato 1: { data: { token: "..." } } (Refacil Pay formato)
54
+ if (response.data?.data?.token) {
55
+ token = response.data.data.token;
56
+ }
57
+ // Formato 2: { payload: { token: "..." } }
58
+ else if (response.data?.payload?.token) {
59
+ token = response.data.payload.token;
60
+ }
61
+ // Formato 3: { token: "..." } (directo)
62
+ else if (response.data?.token) {
63
+ token = response.data.token;
64
+ }
65
+ // Formato 4: { access_token: "..." }
66
+ else if (response.data?.access_token) {
67
+ token = response.data.access_token;
68
+ }
69
+ if (!token) {
70
+ throw new Error(`Token no encontrado en la respuesta. Estructura recibida: ${JSON.stringify(response.data)}`);
71
+ }
72
+ const expiresAt = Date.now() + (this.tokenCacheTtl * 1000);
73
+ // Almacenar en caché
74
+ this.tokenCache = {
75
+ token,
76
+ expiresAt
77
+ };
78
+ console.error(`✅ Token obtenido exitosamente. Expira en ${this.tokenCacheTtl} segundos`);
79
+ return token;
80
+ }
81
+ catch (error) {
82
+ // Manejo detallado de errores
83
+ if (error.code === 'ECONNREFUSED') {
84
+ console.error(`❌ Error de conexión: No se puede conectar a ${this.authEndpoint}`);
85
+ throw new Error(`No se puede conectar al servidor de autenticación. Verifica que la URL sea correcta.`);
86
+ }
87
+ else if (error.code === 'ETIMEDOUT' || error.code === 'ECONNABORTED') {
88
+ console.error(`❌ Timeout: La petición tardó más de 30 segundos`);
89
+ throw new Error(`Timeout al conectar con el servidor de autenticación.`);
90
+ }
91
+ else if (error.response) {
92
+ // El servidor respondió con un error
93
+ const errorMsg = error.response?.data?.message || error.response?.statusText || 'Error desconocido';
94
+ console.error(`❌ Error del servidor: HTTP ${error.response.status} - ${errorMsg}`);
95
+ throw new Error(`Error de autenticación: ${errorMsg}`);
96
+ }
97
+ else if (error.request) {
98
+ // La petición se hizo pero no hubo respuesta
99
+ console.error(`❌ Sin respuesta del servidor`);
100
+ console.error(` URL: ${this.authEndpoint}`);
101
+ throw new Error(`El servidor no respondió. Verifica la conectividad.`);
102
+ }
103
+ else {
104
+ // Error al configurar la petición
105
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
106
+ console.error(`❌ Error al renovar token: ${errorMsg}`);
107
+ throw new Error(`Error al renovar token: ${errorMsg}`);
108
+ }
109
+ }
110
+ }
111
+ /**
112
+ * Limpia el token de la caché
113
+ */
114
+ clearToken() {
115
+ this.tokenCache = null;
116
+ }
117
+ }
118
+ // Importar configuración
119
+ import { appConfig } from '../config.js';
120
+ // Construir la URL completa del endpoint de autenticación
121
+ const authUrl = `${appConfig.baseUrl}${appConfig.authEndpoint}`;
122
+ // Instancia global del gestor de autenticación usando valores de configuración
123
+ export const authManager = new UsernamePasswordAuthManager(appConfig.username, appConfig.password, authUrl, appConfig.tokenCacheTtl);
124
+ // Función helper para obtener headers autenticados
125
+ export async function getAuthHeaders() {
126
+ const token = await authManager.getValidToken();
127
+ return {
128
+ 'Authorization': `Bearer ${token}`,
129
+ 'Content-Type': 'application/json'
130
+ };
131
+ }
132
+ // Nota: La autenticación MCP se maneja directamente en el endpoint /mcp
133
+ // No se requiere middleware global para evitar conflictos con Cursor y otros clientes MCP
134
+ // Helper para validar tokens MCP (usado internamente en endpoints)
135
+ export function validateMcpToken(token, expectedToken) {
136
+ return token === expectedToken;
137
+ }
138
+ // Función de compatibilidad - no hace nada ya que no usamos middleware global
139
+ export function setupAuthHooks(fastify) {
140
+ // No se aplican hooks globales para MCP - autenticación por endpoint
141
+ console.error('MCP authentication configured at endpoint level');
142
+ }
143
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Recursos MCP - Documentación de la API
3
+ * Auto-generado desde la colección Postman
4
+ */
5
+ export interface McpResource {
6
+ uri: string;
7
+ name: string;
8
+ description: string;
9
+ mimeType: string;
10
+ content: string;
11
+ }
12
+ export declare const resources: McpResource[];
13
+ /**
14
+ * Busca un recurso por URI
15
+ */
16
+ export declare function findResourceByUri(uri: string): McpResource | undefined;
17
+ /**
18
+ * Busca recursos por nombre (búsqueda parcial)
19
+ */
20
+ export declare function findResourcesByName(search: string): McpResource[];
21
+ /**
22
+ * Obtiene todos los URIs disponibles
23
+ */
24
+ export declare function getAllResourceUris(): string[];