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.
- package/LICENSE +21 -0
- package/README.md +931 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.js +68 -0
- package/dist/config.js.map +1 -0
- package/dist/core/auth.d.ts +25 -0
- package/dist/core/auth.js +143 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/resources.d.ts +24 -0
- package/dist/core/resources.js +245 -0
- package/dist/core/resources.js.map +1 -0
- package/dist/core/tools.d.ts +60 -0
- package/dist/core/tools.js +1721 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +199 -0
- package/dist/index.js.map +1 -0
- package/package.json +61 -0
package/dist/config.d.ts
ADDED
|
@@ -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[];
|