@andrebuzeli/git-mcp 2.28.0 → 2.28.2
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/dist/client.d.ts +306 -306
- package/dist/client.js +298 -298
- package/dist/config.d.ts +310 -310
- package/dist/config.js +392 -392
- package/dist/index.d.ts +22 -22
- package/dist/index.js +89 -89
- package/dist/providers/base-provider.d.ts +160 -160
- package/dist/providers/base-provider.js +274 -274
- package/dist/providers/error-handler.d.ts +50 -50
- package/dist/providers/error-handler.js +175 -175
- package/dist/providers/gitea-provider.d.ts +97 -97
- package/dist/providers/gitea-provider.d.ts.map +1 -1
- package/dist/providers/gitea-provider.js +1015 -1001
- package/dist/providers/gitea-provider.js.map +1 -1
- package/dist/providers/github-provider.d.ts +104 -104
- package/dist/providers/github-provider.d.ts.map +1 -1
- package/dist/providers/github-provider.js +1248 -1234
- package/dist/providers/github-provider.js.map +1 -1
- package/dist/providers/index.d.ts +12 -12
- package/dist/providers/index.js +40 -40
- package/dist/providers/provider-factory.d.ts +74 -74
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +318 -311
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/types.d.ts +318 -318
- package/dist/providers/types.js +6 -6
- package/dist/server.d.ts +76 -76
- package/dist/server.js +306 -306
- package/dist/tools/git-archive.d.ts +165 -165
- package/dist/tools/git-archive.js +233 -233
- package/dist/tools/git-branches.d.ts +430 -430
- package/dist/tools/git-branches.js +627 -627
- package/dist/tools/git-commits.d.ts +485 -485
- package/dist/tools/git-commits.js +735 -735
- package/dist/tools/git-commits.js.map +1 -1
- package/dist/tools/git-config.d.ts +140 -140
- package/dist/tools/git-config.js +268 -268
- package/dist/tools/git-files.d.ts +486 -486
- package/dist/tools/git-files.js +607 -607
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-issues.d.ts +574 -571
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +741 -740
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-pulls.d.ts +697 -694
- package/dist/tools/git-pulls.d.ts.map +1 -1
- package/dist/tools/git-pulls.js +733 -732
- package/dist/tools/git-pulls.js.map +1 -1
- package/dist/tools/git-releases.d.ts +490 -487
- package/dist/tools/git-releases.d.ts.map +1 -1
- package/dist/tools/git-releases.js +558 -557
- package/dist/tools/git-releases.js.map +1 -1
- package/dist/tools/git-remote.d.ts +138 -138
- package/dist/tools/git-remote.js +274 -274
- package/dist/tools/git-repositories.d.ts +483 -483
- package/dist/tools/git-repositories.js +640 -640
- package/dist/tools/git-repositories.js.map +1 -1
- package/dist/tools/git-reset.d.ts +130 -130
- package/dist/tools/git-reset.js +223 -223
- package/dist/tools/git-revert.d.ts +149 -149
- package/dist/tools/git-revert.js +198 -198
- package/dist/tools/git-stash.d.ts +140 -140
- package/dist/tools/git-stash.js +269 -269
- package/dist/tools/git-sync.d.ts +178 -178
- package/dist/tools/git-sync.js +312 -312
- package/dist/tools/git-tags.d.ts +414 -411
- package/dist/tools/git-tags.d.ts.map +1 -1
- package/dist/tools/git-tags.js +486 -485
- package/dist/tools/git-tags.js.map +1 -1
- package/dist/tools/git-webhooks.d.ts +473 -470
- package/dist/tools/git-webhooks.d.ts.map +1 -1
- package/dist/tools/git-webhooks.js +544 -543
- package/dist/tools/git-webhooks.js.map +1 -1
- package/dist/utils/terminal-controller.d.ts +80 -80
- package/dist/utils/terminal-controller.js +345 -345
- package/dist/utils/user-detection.d.ts +24 -24
- package/dist/utils/user-detection.js +53 -53
- package/package.json +2 -2
- package/dist/tools/gh-actions.d.ts +0 -253
- package/dist/tools/gh-actions.d.ts.map +0 -1
- package/dist/tools/gh-actions.js +0 -390
- package/dist/tools/gh-actions.js.map +0 -1
- package/dist/tools/gh-analytics.d.ts +0 -264
- package/dist/tools/gh-analytics.d.ts.map +0 -1
- package/dist/tools/gh-analytics.js +0 -402
- package/dist/tools/gh-analytics.js.map +0 -1
- package/dist/tools/gh-code-review.d.ts +0 -305
- package/dist/tools/gh-code-review.d.ts.map +0 -1
- package/dist/tools/gh-code-review.js +0 -513
- package/dist/tools/gh-code-review.js.map +0 -1
- package/dist/tools/gh-codespaces.d.ts +0 -139
- package/dist/tools/gh-codespaces.d.ts.map +0 -1
- package/dist/tools/gh-codespaces.js +0 -283
- package/dist/tools/gh-codespaces.js.map +0 -1
- package/dist/tools/gh-deployments.d.ts +0 -301
- package/dist/tools/gh-deployments.d.ts.map +0 -1
- package/dist/tools/gh-deployments.js +0 -368
- package/dist/tools/gh-deployments.js.map +0 -1
- package/dist/tools/gh-gists.d.ts +0 -175
- package/dist/tools/gh-gists.d.ts.map +0 -1
- package/dist/tools/gh-gists.js +0 -322
- package/dist/tools/gh-gists.js.map +0 -1
- package/dist/tools/gh-projects.d.ts +0 -206
- package/dist/tools/gh-projects.d.ts.map +0 -1
- package/dist/tools/gh-projects.js +0 -359
- package/dist/tools/gh-projects.js.map +0 -1
- package/dist/tools/gh-security.d.ts +0 -275
- package/dist/tools/gh-security.d.ts.map +0 -1
- package/dist/tools/gh-security.js +0 -396
- package/dist/tools/gh-security.js.map +0 -1
- package/dist/tools/gh-sync.d.ts +0 -214
- package/dist/tools/gh-sync.d.ts.map +0 -1
- package/dist/tools/gh-sync.js +0 -379
- package/dist/tools/gh-sync.js.map +0 -1
- package/dist/tools/gh-workflows.d.ts +0 -291
- package/dist/tools/gh-workflows.d.ts.map +0 -1
- package/dist/tools/gh-workflows.js +0 -433
- package/dist/tools/gh-workflows.js.map +0 -1
- package/dist/tools/git-bundle.d.ts +0 -172
- package/dist/tools/git-bundle.d.ts.map +0 -1
- package/dist/tools/git-bundle.js +0 -242
- package/dist/tools/git-bundle.js.map +0 -1
- package/dist/tools/git-cherry-pick.d.ts +0 -159
- package/dist/tools/git-cherry-pick.d.ts.map +0 -1
- package/dist/tools/git-cherry-pick.js +0 -225
- package/dist/tools/git-cherry-pick.js.map +0 -1
- package/dist/tools/git-rebase.d.ts +0 -138
- package/dist/tools/git-rebase.d.ts.map +0 -1
- package/dist/tools/git-rebase.js +0 -214
- package/dist/tools/git-rebase.js.map +0 -1
- package/dist/tools/git-submodule.d.ts +0 -153
- package/dist/tools/git-submodule.d.ts.map +0 -1
- package/dist/tools/git-submodule.js +0 -290
- package/dist/tools/git-submodule.js.map +0 -1
- package/dist/tools/git-worktree.d.ts +0 -160
- package/dist/tools/git-worktree.d.ts.map +0 -1
- package/dist/tools/git-worktree.js +0 -270
- package/dist/tools/git-worktree.js.map +0 -1
- package/dist/tools/repositories.d.ts +0 -406
- package/dist/tools/repositories.d.ts.map +0 -1
- package/dist/tools/repositories.js +0 -570
- package/dist/tools/repositories.js.map +0 -1
- package/dist/tools/users.d.ts +0 -373
- package/dist/tools/users.d.ts.map +0 -1
- package/dist/tools/users.js +0 -500
- package/dist/tools/users.js.map +0 -1
- package/dist/tools/validator.d.ts +0 -171
- package/dist/tools/validator.d.ts.map +0 -1
- package/dist/tools/validator.js +0 -195
- package/dist/tools/validator.js.map +0 -1
- package/dist/tools/version-control.d.ts +0 -137
- package/dist/tools/version-control.d.ts.map +0 -1
- package/dist/tools/version-control.js +0 -165
- package/dist/tools/version-control.js.map +0 -1
package/dist/config.js
CHANGED
|
@@ -1,393 +1,393 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.config = exports.ConfigManager = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
/**
|
|
6
|
-
* Schema de validação para configuração do servidor MCP Gitea
|
|
7
|
-
*
|
|
8
|
-
* VALIDAÇÕES:
|
|
9
|
-
* - giteaUrl: Deve ser uma URL válida
|
|
10
|
-
* - giteaToken: Deve ter pelo menos 1 caractere
|
|
11
|
-
* - giteaUsername: Opcional
|
|
12
|
-
* - debug: Padrão false
|
|
13
|
-
* - timeout: Deve ser positivo, padrão 30000ms
|
|
14
|
-
*
|
|
15
|
-
* RECOMENDAÇÕES:
|
|
16
|
-
* - Use HTTPS para produção
|
|
17
|
-
* - Token deve ter permissões adequadas
|
|
18
|
-
* - Timeout deve considerar latência da rede
|
|
19
|
-
*/
|
|
20
|
-
const ConfigSchema = zod_1.z.object({
|
|
21
|
-
// Configuração legacy para Gitea
|
|
22
|
-
giteaUrl: zod_1.z.string().url().optional(),
|
|
23
|
-
giteaToken: zod_1.z.string().min(1).optional(),
|
|
24
|
-
giteaUsername: zod_1.z.string().optional(),
|
|
25
|
-
// Configuração para GitHub
|
|
26
|
-
githubToken: zod_1.z.string().min(1).optional(),
|
|
27
|
-
githubUsername: zod_1.z.string().optional(),
|
|
28
|
-
// Configuração genérica para multi-provider
|
|
29
|
-
provider: zod_1.z.enum(['gitea', 'github']).optional(),
|
|
30
|
-
apiUrl: zod_1.z.string().url().optional(),
|
|
31
|
-
apiToken: zod_1.z.string().min(1).optional(),
|
|
32
|
-
// Configuração multi-provider
|
|
33
|
-
defaultProvider: zod_1.z.string().optional(),
|
|
34
|
-
providersJson: zod_1.z.string().optional().transform(val => {
|
|
35
|
-
if (val) {
|
|
36
|
-
try {
|
|
37
|
-
return JSON.parse(val);
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
console.error("Error parsing PROVIDERS_JSON:", e);
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return undefined;
|
|
45
|
-
}),
|
|
46
|
-
// Configurações gerais
|
|
47
|
-
debug: zod_1.z.boolean().default(false),
|
|
48
|
-
timeout: zod_1.z.number().positive().default(30000),
|
|
49
|
-
}).superRefine((data, ctx) => {
|
|
50
|
-
// Validação: deve ter pelo menos uma configuração válida ou modo demo
|
|
51
|
-
const hasGiteaConfig = data.giteaUrl && data.giteaToken;
|
|
52
|
-
const hasGitHubConfig = data.githubToken;
|
|
53
|
-
const hasGenericConfig = data.apiUrl && data.apiToken;
|
|
54
|
-
const hasMultiProviderConfig = data.providersJson;
|
|
55
|
-
const isDemoMode = process.env.DEMO_MODE === 'true';
|
|
56
|
-
const configCount = [hasGiteaConfig, hasGitHubConfig, hasGenericConfig, hasMultiProviderConfig].filter(Boolean).length;
|
|
57
|
-
if (configCount === 0 && !isDemoMode) {
|
|
58
|
-
ctx.addIssue({
|
|
59
|
-
code: zod_1.z.ZodIssueCode.custom,
|
|
60
|
-
message: "Configuration required: At least one provider configuration must be provided (GITEA_URL+GITEA_TOKEN, GITHUB_TOKEN, API_URL+API_TOKEN, or PROVIDERS_JSON). Use DEMO_MODE=true for testing without real providers.",
|
|
61
|
-
path: ['giteaUrl', 'githubToken', 'apiUrl', 'providersJson'],
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
// Se provider é especificado, apiUrl e apiToken são obrigatórios
|
|
65
|
-
if (data.provider && (!data.apiUrl || !data.apiToken)) {
|
|
66
|
-
ctx.addIssue({
|
|
67
|
-
code: zod_1.z.ZodIssueCode.custom,
|
|
68
|
-
message: "When provider is specified, both apiUrl and apiToken are required.",
|
|
69
|
-
path: ['apiUrl', 'apiToken'],
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
/**
|
|
74
|
-
* Gerenciador de configuração usando padrão Singleton
|
|
75
|
-
*
|
|
76
|
-
* RESPONSABILIDADES:
|
|
77
|
-
* - Carregar configuração do ambiente
|
|
78
|
-
* - Validar parâmetros obrigatórios
|
|
79
|
-
* - Fornecer acesso centralizado à configuração
|
|
80
|
-
*
|
|
81
|
-
* USO:
|
|
82
|
-
* - const config = ConfigManager.getInstance();
|
|
83
|
-
* - const url = config.getGiteaUrl();
|
|
84
|
-
*
|
|
85
|
-
* RECOMENDAÇÕES:
|
|
86
|
-
* - Sempre use getInstance() para acessar
|
|
87
|
-
* - Configure variáveis de ambiente adequadamente
|
|
88
|
-
* - Valide configuração antes de usar
|
|
89
|
-
*/
|
|
90
|
-
class ConfigManager {
|
|
91
|
-
static instance;
|
|
92
|
-
config;
|
|
93
|
-
constructor() {
|
|
94
|
-
this.config = this.loadConfig();
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Obtém a instância única do ConfigManager
|
|
98
|
-
*
|
|
99
|
-
* IMPLEMENTAÇÃO:
|
|
100
|
-
* - Singleton pattern para configuração global
|
|
101
|
-
* - Thread-safe para aplicações concorrentes
|
|
102
|
-
*
|
|
103
|
-
* RETORNO:
|
|
104
|
-
* - Instância única do ConfigManager
|
|
105
|
-
*/
|
|
106
|
-
static getInstance() {
|
|
107
|
-
if (!ConfigManager.instance) {
|
|
108
|
-
ConfigManager.instance = new ConfigManager();
|
|
109
|
-
}
|
|
110
|
-
return ConfigManager.instance;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Carrega e valida a configuração do ambiente
|
|
114
|
-
*
|
|
115
|
-
* FONTES DE CONFIGURAÇÃO:
|
|
116
|
-
* - Variáveis de ambiente (prioridade alta)
|
|
117
|
-
* - Valores padrão (fallback)
|
|
118
|
-
*
|
|
119
|
-
* VALIDAÇÃO:
|
|
120
|
-
* - Schema Zod para validação rigorosa
|
|
121
|
-
* - Mensagens de erro descritivas
|
|
122
|
-
*
|
|
123
|
-
* ERROS:
|
|
124
|
-
* - Configuração inválida gera exceção
|
|
125
|
-
* - Token obrigatório deve ser fornecido
|
|
126
|
-
*/
|
|
127
|
-
loadConfig() {
|
|
128
|
-
const config = {
|
|
129
|
-
// Configuração legacy para Gitea
|
|
130
|
-
giteaUrl: process.env.GITEA_URL,
|
|
131
|
-
giteaToken: process.env.GITEA_TOKEN,
|
|
132
|
-
giteaUsername: process.env.GITEA_USERNAME,
|
|
133
|
-
// Configuração para GitHub
|
|
134
|
-
githubToken: process.env.GITHUB_TOKEN,
|
|
135
|
-
githubUsername: process.env.GITHUB_USERNAME,
|
|
136
|
-
// Configuração genérica para multi-provider
|
|
137
|
-
provider: process.env.PROVIDER,
|
|
138
|
-
apiUrl: process.env.API_URL,
|
|
139
|
-
apiToken: process.env.API_TOKEN,
|
|
140
|
-
// Configuração multi-provider
|
|
141
|
-
defaultProvider: process.env.DEFAULT_PROVIDER,
|
|
142
|
-
providersJson: process.env.PROVIDERS_JSON,
|
|
143
|
-
// Configurações gerais
|
|
144
|
-
debug: process.env.DEBUG === 'true',
|
|
145
|
-
timeout: parseInt(process.env.TIMEOUT || '30000'),
|
|
146
|
-
};
|
|
147
|
-
// Auto-detectar configuração multi-provider se ambos Gitea e GitHub estão configurados
|
|
148
|
-
if (config.giteaUrl && config.giteaToken && config.githubToken && !config.providersJson) {
|
|
149
|
-
config.providersJson = JSON.stringify({
|
|
150
|
-
defaultProvider: 'gitea',
|
|
151
|
-
providers: [
|
|
152
|
-
{
|
|
153
|
-
name: 'gitea',
|
|
154
|
-
type: 'gitea',
|
|
155
|
-
apiUrl: config.giteaUrl,
|
|
156
|
-
token: config.giteaToken,
|
|
157
|
-
username: config.giteaUsername
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
name: 'github',
|
|
161
|
-
type: 'github',
|
|
162
|
-
apiUrl: 'https://api.github.com',
|
|
163
|
-
token: config.githubToken,
|
|
164
|
-
username: config.githubUsername
|
|
165
|
-
}
|
|
166
|
-
]
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
try {
|
|
170
|
-
return ConfigSchema.parse(config);
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
if (error instanceof zod_1.z.ZodError) {
|
|
174
|
-
const issues = error.issues.map(issue => `${issue.path.join('.')}: ${issue.message}`).join(', ');
|
|
175
|
-
throw new Error(`Configuration validation failed: ${issues}`);
|
|
176
|
-
}
|
|
177
|
-
throw error;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Obtém a configuração completa validada
|
|
182
|
-
*
|
|
183
|
-
* RETORNO:
|
|
184
|
-
* - Objeto Config com todos os parâmetros
|
|
185
|
-
*
|
|
186
|
-
* USO:
|
|
187
|
-
* - Para acesso direto à configuração
|
|
188
|
-
* - Para validação de parâmetros
|
|
189
|
-
*/
|
|
190
|
-
getConfig() {
|
|
191
|
-
return this.config;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Obtém a URL base do Gitea
|
|
195
|
-
*
|
|
196
|
-
* RETORNO:
|
|
197
|
-
* - URL completa do servidor Gitea
|
|
198
|
-
*
|
|
199
|
-
* EXEMPLO:
|
|
200
|
-
* - http://gitea.local:3000
|
|
201
|
-
* - https://gitea.company.com
|
|
202
|
-
*/
|
|
203
|
-
getGiteaUrl() {
|
|
204
|
-
return this.config.giteaUrl;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Obtém o token de autenticação
|
|
208
|
-
*
|
|
209
|
-
* SEGURANÇA:
|
|
210
|
-
* - Token deve ser mantido seguro
|
|
211
|
-
* - Não logar em produção
|
|
212
|
-
* - Rotacionar periodicamente
|
|
213
|
-
*
|
|
214
|
-
* RETORNO:
|
|
215
|
-
* - Token de acesso pessoal
|
|
216
|
-
*/
|
|
217
|
-
getGiteaToken() {
|
|
218
|
-
return this.config.giteaToken;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Obtém o nome de usuário configurado
|
|
222
|
-
*
|
|
223
|
-
* RETORNO:
|
|
224
|
-
* - Nome de usuário ou undefined
|
|
225
|
-
*
|
|
226
|
-
* USO:
|
|
227
|
-
* - Para operações específicas do usuário
|
|
228
|
-
* - Para identificação em logs
|
|
229
|
-
*/
|
|
230
|
-
getGiteaUsername() {
|
|
231
|
-
return this.config.giteaUsername;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Verifica se o modo debug está ativo
|
|
235
|
-
*
|
|
236
|
-
* RETORNO:
|
|
237
|
-
* - true se debug ativo, false caso contrário
|
|
238
|
-
*
|
|
239
|
-
* RECOMENDAÇÕES:
|
|
240
|
-
* - Use apenas em desenvolvimento
|
|
241
|
-
* - Desative em produção
|
|
242
|
-
* - Configure via DEBUG=true
|
|
243
|
-
*/
|
|
244
|
-
isDebug() {
|
|
245
|
-
return this.config.debug;
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Obtém o timeout das requisições HTTP
|
|
249
|
-
*
|
|
250
|
-
* RETORNO:
|
|
251
|
-
* - Timeout em milissegundos
|
|
252
|
-
*
|
|
253
|
-
* RECOMENDAÇÕES:
|
|
254
|
-
* - 30000ms para redes locais
|
|
255
|
-
* - 60000ms para redes com latência
|
|
256
|
-
* - Configure via TIMEOUT=60000
|
|
257
|
-
*/
|
|
258
|
-
getTimeout() {
|
|
259
|
-
return this.config.timeout;
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Obtém o tipo de provider configurado
|
|
263
|
-
*
|
|
264
|
-
* RETORNO:
|
|
265
|
-
* - Tipo do provider ('gitea' ou 'github')
|
|
266
|
-
*/
|
|
267
|
-
getProvider() {
|
|
268
|
-
return this.config.provider;
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Obtém a URL da API genérica
|
|
272
|
-
*
|
|
273
|
-
* RETORNO:
|
|
274
|
-
* - URL da API ou undefined
|
|
275
|
-
*/
|
|
276
|
-
getApiUrl() {
|
|
277
|
-
return this.config.apiUrl;
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Obtém o token da API genérica
|
|
281
|
-
*
|
|
282
|
-
* RETORNO:
|
|
283
|
-
* - Token da API ou undefined
|
|
284
|
-
*/
|
|
285
|
-
getApiToken() {
|
|
286
|
-
return this.config.apiToken;
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Obtém o token do GitHub
|
|
290
|
-
*
|
|
291
|
-
* RETORNO:
|
|
292
|
-
* - Token do GitHub ou undefined
|
|
293
|
-
*/
|
|
294
|
-
getGitHubToken() {
|
|
295
|
-
return this.config.githubToken;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Obtém o nome de usuário do GitHub
|
|
299
|
-
*
|
|
300
|
-
* RETORNO:
|
|
301
|
-
* - Nome de usuário do GitHub ou undefined
|
|
302
|
-
*/
|
|
303
|
-
getGitHubUsername() {
|
|
304
|
-
return this.config.githubUsername;
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Obtém o provider padrão configurado
|
|
308
|
-
*
|
|
309
|
-
* RETORNO:
|
|
310
|
-
* - Nome do provider padrão ou undefined
|
|
311
|
-
*/
|
|
312
|
-
getDefaultProvider() {
|
|
313
|
-
return this.config.defaultProvider;
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Obtém a configuração multi-provider
|
|
317
|
-
*
|
|
318
|
-
* RETORNO:
|
|
319
|
-
* - Configuração multi-provider parseada ou undefined
|
|
320
|
-
*/
|
|
321
|
-
getProvidersJson() {
|
|
322
|
-
return this.config.providersJson;
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Verifica se está usando configuração multi-provider
|
|
326
|
-
*
|
|
327
|
-
* RETORNO:
|
|
328
|
-
* - true se usando multi-provider, false caso contrário
|
|
329
|
-
*/
|
|
330
|
-
isMultiProvider() {
|
|
331
|
-
return !!this.config.providersJson;
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Verifica se está usando configuração genérica
|
|
335
|
-
*
|
|
336
|
-
* RETORNO:
|
|
337
|
-
* - true se usando configuração genérica, false caso contrário
|
|
338
|
-
*/
|
|
339
|
-
isGenericConfig() {
|
|
340
|
-
return !!(this.config.apiUrl && this.config.apiToken);
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Verifica se está usando configuração legacy do Gitea
|
|
344
|
-
*
|
|
345
|
-
* RETORNO:
|
|
346
|
-
* - true se usando configuração legacy, false caso contrário
|
|
347
|
-
*/
|
|
348
|
-
isLegacyGitea() {
|
|
349
|
-
return !!(this.config.giteaUrl && this.config.giteaToken);
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Verifica se está em modo demo
|
|
353
|
-
*
|
|
354
|
-
* RETORNO:
|
|
355
|
-
* - true se em modo demo, false caso contrário
|
|
356
|
-
*/
|
|
357
|
-
isDemoMode() {
|
|
358
|
-
return process.env.DEMO_MODE === 'true';
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* Obtém configuração demo para testes
|
|
362
|
-
*
|
|
363
|
-
* RETORNO:
|
|
364
|
-
* - Configuração mock para modo demo
|
|
365
|
-
*/
|
|
366
|
-
getDemoConfig() {
|
|
367
|
-
return {
|
|
368
|
-
defaultProvider: 'demo',
|
|
369
|
-
providers: [{
|
|
370
|
-
name: 'demo',
|
|
371
|
-
type: 'gitea',
|
|
372
|
-
apiUrl: 'https://demo.gitea.io/api/v1',
|
|
373
|
-
token: 'demo-token',
|
|
374
|
-
username: 'demo-user'
|
|
375
|
-
}]
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
exports.ConfigManager = ConfigManager;
|
|
380
|
-
/**
|
|
381
|
-
* Instância global do ConfigManager
|
|
382
|
-
*
|
|
383
|
-
* USO DIRETO:
|
|
384
|
-
* - import { config } from './config.js';
|
|
385
|
-
* - const url = config.getGiteaUrl();
|
|
386
|
-
*
|
|
387
|
-
* RECOMENDAÇÕES:
|
|
388
|
-
* - Use esta instância para acesso direto
|
|
389
|
-
* - Não crie novas instâncias
|
|
390
|
-
* - Configure antes de usar
|
|
391
|
-
*/
|
|
392
|
-
exports.config = ConfigManager.getInstance();
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = exports.ConfigManager = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* Schema de validação para configuração do servidor MCP Gitea
|
|
7
|
+
*
|
|
8
|
+
* VALIDAÇÕES:
|
|
9
|
+
* - giteaUrl: Deve ser uma URL válida
|
|
10
|
+
* - giteaToken: Deve ter pelo menos 1 caractere
|
|
11
|
+
* - giteaUsername: Opcional
|
|
12
|
+
* - debug: Padrão false
|
|
13
|
+
* - timeout: Deve ser positivo, padrão 30000ms
|
|
14
|
+
*
|
|
15
|
+
* RECOMENDAÇÕES:
|
|
16
|
+
* - Use HTTPS para produção
|
|
17
|
+
* - Token deve ter permissões adequadas
|
|
18
|
+
* - Timeout deve considerar latência da rede
|
|
19
|
+
*/
|
|
20
|
+
const ConfigSchema = zod_1.z.object({
|
|
21
|
+
// Configuração legacy para Gitea
|
|
22
|
+
giteaUrl: zod_1.z.string().url().optional(),
|
|
23
|
+
giteaToken: zod_1.z.string().min(1).optional(),
|
|
24
|
+
giteaUsername: zod_1.z.string().optional(),
|
|
25
|
+
// Configuração para GitHub
|
|
26
|
+
githubToken: zod_1.z.string().min(1).optional(),
|
|
27
|
+
githubUsername: zod_1.z.string().optional(),
|
|
28
|
+
// Configuração genérica para multi-provider
|
|
29
|
+
provider: zod_1.z.enum(['gitea', 'github']).optional(),
|
|
30
|
+
apiUrl: zod_1.z.string().url().optional(),
|
|
31
|
+
apiToken: zod_1.z.string().min(1).optional(),
|
|
32
|
+
// Configuração multi-provider
|
|
33
|
+
defaultProvider: zod_1.z.string().optional(),
|
|
34
|
+
providersJson: zod_1.z.string().optional().transform(val => {
|
|
35
|
+
if (val) {
|
|
36
|
+
try {
|
|
37
|
+
return JSON.parse(val);
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
console.error("Error parsing PROVIDERS_JSON:", e);
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}),
|
|
46
|
+
// Configurações gerais
|
|
47
|
+
debug: zod_1.z.boolean().default(false),
|
|
48
|
+
timeout: zod_1.z.number().positive().default(30000),
|
|
49
|
+
}).superRefine((data, ctx) => {
|
|
50
|
+
// Validação: deve ter pelo menos uma configuração válida ou modo demo
|
|
51
|
+
const hasGiteaConfig = data.giteaUrl && data.giteaToken;
|
|
52
|
+
const hasGitHubConfig = data.githubToken;
|
|
53
|
+
const hasGenericConfig = data.apiUrl && data.apiToken;
|
|
54
|
+
const hasMultiProviderConfig = data.providersJson;
|
|
55
|
+
const isDemoMode = process.env.DEMO_MODE === 'true';
|
|
56
|
+
const configCount = [hasGiteaConfig, hasGitHubConfig, hasGenericConfig, hasMultiProviderConfig].filter(Boolean).length;
|
|
57
|
+
if (configCount === 0 && !isDemoMode) {
|
|
58
|
+
ctx.addIssue({
|
|
59
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
60
|
+
message: "Configuration required: At least one provider configuration must be provided (GITEA_URL+GITEA_TOKEN, GITHUB_TOKEN, API_URL+API_TOKEN, or PROVIDERS_JSON). Use DEMO_MODE=true for testing without real providers.",
|
|
61
|
+
path: ['giteaUrl', 'githubToken', 'apiUrl', 'providersJson'],
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Se provider é especificado, apiUrl e apiToken são obrigatórios
|
|
65
|
+
if (data.provider && (!data.apiUrl || !data.apiToken)) {
|
|
66
|
+
ctx.addIssue({
|
|
67
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
68
|
+
message: "When provider is specified, both apiUrl and apiToken are required.",
|
|
69
|
+
path: ['apiUrl', 'apiToken'],
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Gerenciador de configuração usando padrão Singleton
|
|
75
|
+
*
|
|
76
|
+
* RESPONSABILIDADES:
|
|
77
|
+
* - Carregar configuração do ambiente
|
|
78
|
+
* - Validar parâmetros obrigatórios
|
|
79
|
+
* - Fornecer acesso centralizado à configuração
|
|
80
|
+
*
|
|
81
|
+
* USO:
|
|
82
|
+
* - const config = ConfigManager.getInstance();
|
|
83
|
+
* - const url = config.getGiteaUrl();
|
|
84
|
+
*
|
|
85
|
+
* RECOMENDAÇÕES:
|
|
86
|
+
* - Sempre use getInstance() para acessar
|
|
87
|
+
* - Configure variáveis de ambiente adequadamente
|
|
88
|
+
* - Valide configuração antes de usar
|
|
89
|
+
*/
|
|
90
|
+
class ConfigManager {
|
|
91
|
+
static instance;
|
|
92
|
+
config;
|
|
93
|
+
constructor() {
|
|
94
|
+
this.config = this.loadConfig();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Obtém a instância única do ConfigManager
|
|
98
|
+
*
|
|
99
|
+
* IMPLEMENTAÇÃO:
|
|
100
|
+
* - Singleton pattern para configuração global
|
|
101
|
+
* - Thread-safe para aplicações concorrentes
|
|
102
|
+
*
|
|
103
|
+
* RETORNO:
|
|
104
|
+
* - Instância única do ConfigManager
|
|
105
|
+
*/
|
|
106
|
+
static getInstance() {
|
|
107
|
+
if (!ConfigManager.instance) {
|
|
108
|
+
ConfigManager.instance = new ConfigManager();
|
|
109
|
+
}
|
|
110
|
+
return ConfigManager.instance;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Carrega e valida a configuração do ambiente
|
|
114
|
+
*
|
|
115
|
+
* FONTES DE CONFIGURAÇÃO:
|
|
116
|
+
* - Variáveis de ambiente (prioridade alta)
|
|
117
|
+
* - Valores padrão (fallback)
|
|
118
|
+
*
|
|
119
|
+
* VALIDAÇÃO:
|
|
120
|
+
* - Schema Zod para validação rigorosa
|
|
121
|
+
* - Mensagens de erro descritivas
|
|
122
|
+
*
|
|
123
|
+
* ERROS:
|
|
124
|
+
* - Configuração inválida gera exceção
|
|
125
|
+
* - Token obrigatório deve ser fornecido
|
|
126
|
+
*/
|
|
127
|
+
loadConfig() {
|
|
128
|
+
const config = {
|
|
129
|
+
// Configuração legacy para Gitea
|
|
130
|
+
giteaUrl: process.env.GITEA_URL,
|
|
131
|
+
giteaToken: process.env.GITEA_TOKEN,
|
|
132
|
+
giteaUsername: process.env.GITEA_USERNAME,
|
|
133
|
+
// Configuração para GitHub
|
|
134
|
+
githubToken: process.env.GITHUB_TOKEN,
|
|
135
|
+
githubUsername: process.env.GITHUB_USERNAME,
|
|
136
|
+
// Configuração genérica para multi-provider
|
|
137
|
+
provider: process.env.PROVIDER,
|
|
138
|
+
apiUrl: process.env.API_URL,
|
|
139
|
+
apiToken: process.env.API_TOKEN,
|
|
140
|
+
// Configuração multi-provider
|
|
141
|
+
defaultProvider: process.env.DEFAULT_PROVIDER,
|
|
142
|
+
providersJson: process.env.PROVIDERS_JSON,
|
|
143
|
+
// Configurações gerais
|
|
144
|
+
debug: process.env.DEBUG === 'true',
|
|
145
|
+
timeout: parseInt(process.env.TIMEOUT || '30000'),
|
|
146
|
+
};
|
|
147
|
+
// Auto-detectar configuração multi-provider se ambos Gitea e GitHub estão configurados
|
|
148
|
+
if (config.giteaUrl && config.giteaToken && config.githubToken && !config.providersJson) {
|
|
149
|
+
config.providersJson = JSON.stringify({
|
|
150
|
+
defaultProvider: 'gitea',
|
|
151
|
+
providers: [
|
|
152
|
+
{
|
|
153
|
+
name: 'gitea',
|
|
154
|
+
type: 'gitea',
|
|
155
|
+
apiUrl: config.giteaUrl,
|
|
156
|
+
token: config.giteaToken,
|
|
157
|
+
username: config.giteaUsername
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: 'github',
|
|
161
|
+
type: 'github',
|
|
162
|
+
apiUrl: 'https://api.github.com',
|
|
163
|
+
token: config.githubToken,
|
|
164
|
+
username: config.githubUsername
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
return ConfigSchema.parse(config);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
174
|
+
const issues = error.issues.map(issue => `${issue.path.join('.')}: ${issue.message}`).join(', ');
|
|
175
|
+
throw new Error(`Configuration validation failed: ${issues}`);
|
|
176
|
+
}
|
|
177
|
+
throw error;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Obtém a configuração completa validada
|
|
182
|
+
*
|
|
183
|
+
* RETORNO:
|
|
184
|
+
* - Objeto Config com todos os parâmetros
|
|
185
|
+
*
|
|
186
|
+
* USO:
|
|
187
|
+
* - Para acesso direto à configuração
|
|
188
|
+
* - Para validação de parâmetros
|
|
189
|
+
*/
|
|
190
|
+
getConfig() {
|
|
191
|
+
return this.config;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Obtém a URL base do Gitea
|
|
195
|
+
*
|
|
196
|
+
* RETORNO:
|
|
197
|
+
* - URL completa do servidor Gitea
|
|
198
|
+
*
|
|
199
|
+
* EXEMPLO:
|
|
200
|
+
* - http://gitea.local:3000
|
|
201
|
+
* - https://gitea.company.com
|
|
202
|
+
*/
|
|
203
|
+
getGiteaUrl() {
|
|
204
|
+
return this.config.giteaUrl;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Obtém o token de autenticação
|
|
208
|
+
*
|
|
209
|
+
* SEGURANÇA:
|
|
210
|
+
* - Token deve ser mantido seguro
|
|
211
|
+
* - Não logar em produção
|
|
212
|
+
* - Rotacionar periodicamente
|
|
213
|
+
*
|
|
214
|
+
* RETORNO:
|
|
215
|
+
* - Token de acesso pessoal
|
|
216
|
+
*/
|
|
217
|
+
getGiteaToken() {
|
|
218
|
+
return this.config.giteaToken;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Obtém o nome de usuário configurado
|
|
222
|
+
*
|
|
223
|
+
* RETORNO:
|
|
224
|
+
* - Nome de usuário ou undefined
|
|
225
|
+
*
|
|
226
|
+
* USO:
|
|
227
|
+
* - Para operações específicas do usuário
|
|
228
|
+
* - Para identificação em logs
|
|
229
|
+
*/
|
|
230
|
+
getGiteaUsername() {
|
|
231
|
+
return this.config.giteaUsername;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Verifica se o modo debug está ativo
|
|
235
|
+
*
|
|
236
|
+
* RETORNO:
|
|
237
|
+
* - true se debug ativo, false caso contrário
|
|
238
|
+
*
|
|
239
|
+
* RECOMENDAÇÕES:
|
|
240
|
+
* - Use apenas em desenvolvimento
|
|
241
|
+
* - Desative em produção
|
|
242
|
+
* - Configure via DEBUG=true
|
|
243
|
+
*/
|
|
244
|
+
isDebug() {
|
|
245
|
+
return this.config.debug;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Obtém o timeout das requisições HTTP
|
|
249
|
+
*
|
|
250
|
+
* RETORNO:
|
|
251
|
+
* - Timeout em milissegundos
|
|
252
|
+
*
|
|
253
|
+
* RECOMENDAÇÕES:
|
|
254
|
+
* - 30000ms para redes locais
|
|
255
|
+
* - 60000ms para redes com latência
|
|
256
|
+
* - Configure via TIMEOUT=60000
|
|
257
|
+
*/
|
|
258
|
+
getTimeout() {
|
|
259
|
+
return this.config.timeout;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Obtém o tipo de provider configurado
|
|
263
|
+
*
|
|
264
|
+
* RETORNO:
|
|
265
|
+
* - Tipo do provider ('gitea' ou 'github')
|
|
266
|
+
*/
|
|
267
|
+
getProvider() {
|
|
268
|
+
return this.config.provider;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Obtém a URL da API genérica
|
|
272
|
+
*
|
|
273
|
+
* RETORNO:
|
|
274
|
+
* - URL da API ou undefined
|
|
275
|
+
*/
|
|
276
|
+
getApiUrl() {
|
|
277
|
+
return this.config.apiUrl;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Obtém o token da API genérica
|
|
281
|
+
*
|
|
282
|
+
* RETORNO:
|
|
283
|
+
* - Token da API ou undefined
|
|
284
|
+
*/
|
|
285
|
+
getApiToken() {
|
|
286
|
+
return this.config.apiToken;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Obtém o token do GitHub
|
|
290
|
+
*
|
|
291
|
+
* RETORNO:
|
|
292
|
+
* - Token do GitHub ou undefined
|
|
293
|
+
*/
|
|
294
|
+
getGitHubToken() {
|
|
295
|
+
return this.config.githubToken;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Obtém o nome de usuário do GitHub
|
|
299
|
+
*
|
|
300
|
+
* RETORNO:
|
|
301
|
+
* - Nome de usuário do GitHub ou undefined
|
|
302
|
+
*/
|
|
303
|
+
getGitHubUsername() {
|
|
304
|
+
return this.config.githubUsername;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Obtém o provider padrão configurado
|
|
308
|
+
*
|
|
309
|
+
* RETORNO:
|
|
310
|
+
* - Nome do provider padrão ou undefined
|
|
311
|
+
*/
|
|
312
|
+
getDefaultProvider() {
|
|
313
|
+
return this.config.defaultProvider;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Obtém a configuração multi-provider
|
|
317
|
+
*
|
|
318
|
+
* RETORNO:
|
|
319
|
+
* - Configuração multi-provider parseada ou undefined
|
|
320
|
+
*/
|
|
321
|
+
getProvidersJson() {
|
|
322
|
+
return this.config.providersJson;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Verifica se está usando configuração multi-provider
|
|
326
|
+
*
|
|
327
|
+
* RETORNO:
|
|
328
|
+
* - true se usando multi-provider, false caso contrário
|
|
329
|
+
*/
|
|
330
|
+
isMultiProvider() {
|
|
331
|
+
return !!this.config.providersJson;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Verifica se está usando configuração genérica
|
|
335
|
+
*
|
|
336
|
+
* RETORNO:
|
|
337
|
+
* - true se usando configuração genérica, false caso contrário
|
|
338
|
+
*/
|
|
339
|
+
isGenericConfig() {
|
|
340
|
+
return !!(this.config.apiUrl && this.config.apiToken);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Verifica se está usando configuração legacy do Gitea
|
|
344
|
+
*
|
|
345
|
+
* RETORNO:
|
|
346
|
+
* - true se usando configuração legacy, false caso contrário
|
|
347
|
+
*/
|
|
348
|
+
isLegacyGitea() {
|
|
349
|
+
return !!(this.config.giteaUrl && this.config.giteaToken);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Verifica se está em modo demo
|
|
353
|
+
*
|
|
354
|
+
* RETORNO:
|
|
355
|
+
* - true se em modo demo, false caso contrário
|
|
356
|
+
*/
|
|
357
|
+
isDemoMode() {
|
|
358
|
+
return process.env.DEMO_MODE === 'true';
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Obtém configuração demo para testes
|
|
362
|
+
*
|
|
363
|
+
* RETORNO:
|
|
364
|
+
* - Configuração mock para modo demo
|
|
365
|
+
*/
|
|
366
|
+
getDemoConfig() {
|
|
367
|
+
return {
|
|
368
|
+
defaultProvider: 'demo',
|
|
369
|
+
providers: [{
|
|
370
|
+
name: 'demo',
|
|
371
|
+
type: 'gitea',
|
|
372
|
+
apiUrl: 'https://demo.gitea.io/api/v1',
|
|
373
|
+
token: 'demo-token',
|
|
374
|
+
username: 'demo-user'
|
|
375
|
+
}]
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
exports.ConfigManager = ConfigManager;
|
|
380
|
+
/**
|
|
381
|
+
* Instância global do ConfigManager
|
|
382
|
+
*
|
|
383
|
+
* USO DIRETO:
|
|
384
|
+
* - import { config } from './config.js';
|
|
385
|
+
* - const url = config.getGiteaUrl();
|
|
386
|
+
*
|
|
387
|
+
* RECOMENDAÇÕES:
|
|
388
|
+
* - Use esta instância para acesso direto
|
|
389
|
+
* - Não crie novas instâncias
|
|
390
|
+
* - Configure antes de usar
|
|
391
|
+
*/
|
|
392
|
+
exports.config = ConfigManager.getInstance();
|
|
393
393
|
//# sourceMappingURL=config.js.map
|