@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.
Files changed (154) hide show
  1. package/dist/client.d.ts +306 -306
  2. package/dist/client.js +298 -298
  3. package/dist/config.d.ts +310 -310
  4. package/dist/config.js +392 -392
  5. package/dist/index.d.ts +22 -22
  6. package/dist/index.js +89 -89
  7. package/dist/providers/base-provider.d.ts +160 -160
  8. package/dist/providers/base-provider.js +274 -274
  9. package/dist/providers/error-handler.d.ts +50 -50
  10. package/dist/providers/error-handler.js +175 -175
  11. package/dist/providers/gitea-provider.d.ts +97 -97
  12. package/dist/providers/gitea-provider.d.ts.map +1 -1
  13. package/dist/providers/gitea-provider.js +1015 -1001
  14. package/dist/providers/gitea-provider.js.map +1 -1
  15. package/dist/providers/github-provider.d.ts +104 -104
  16. package/dist/providers/github-provider.d.ts.map +1 -1
  17. package/dist/providers/github-provider.js +1248 -1234
  18. package/dist/providers/github-provider.js.map +1 -1
  19. package/dist/providers/index.d.ts +12 -12
  20. package/dist/providers/index.js +40 -40
  21. package/dist/providers/provider-factory.d.ts +74 -74
  22. package/dist/providers/provider-factory.d.ts.map +1 -1
  23. package/dist/providers/provider-factory.js +318 -311
  24. package/dist/providers/provider-factory.js.map +1 -1
  25. package/dist/providers/types.d.ts +318 -318
  26. package/dist/providers/types.js +6 -6
  27. package/dist/server.d.ts +76 -76
  28. package/dist/server.js +306 -306
  29. package/dist/tools/git-archive.d.ts +165 -165
  30. package/dist/tools/git-archive.js +233 -233
  31. package/dist/tools/git-branches.d.ts +430 -430
  32. package/dist/tools/git-branches.js +627 -627
  33. package/dist/tools/git-commits.d.ts +485 -485
  34. package/dist/tools/git-commits.js +735 -735
  35. package/dist/tools/git-commits.js.map +1 -1
  36. package/dist/tools/git-config.d.ts +140 -140
  37. package/dist/tools/git-config.js +268 -268
  38. package/dist/tools/git-files.d.ts +486 -486
  39. package/dist/tools/git-files.js +607 -607
  40. package/dist/tools/git-files.js.map +1 -1
  41. package/dist/tools/git-issues.d.ts +574 -571
  42. package/dist/tools/git-issues.d.ts.map +1 -1
  43. package/dist/tools/git-issues.js +741 -740
  44. package/dist/tools/git-issues.js.map +1 -1
  45. package/dist/tools/git-pulls.d.ts +697 -694
  46. package/dist/tools/git-pulls.d.ts.map +1 -1
  47. package/dist/tools/git-pulls.js +733 -732
  48. package/dist/tools/git-pulls.js.map +1 -1
  49. package/dist/tools/git-releases.d.ts +490 -487
  50. package/dist/tools/git-releases.d.ts.map +1 -1
  51. package/dist/tools/git-releases.js +558 -557
  52. package/dist/tools/git-releases.js.map +1 -1
  53. package/dist/tools/git-remote.d.ts +138 -138
  54. package/dist/tools/git-remote.js +274 -274
  55. package/dist/tools/git-repositories.d.ts +483 -483
  56. package/dist/tools/git-repositories.js +640 -640
  57. package/dist/tools/git-repositories.js.map +1 -1
  58. package/dist/tools/git-reset.d.ts +130 -130
  59. package/dist/tools/git-reset.js +223 -223
  60. package/dist/tools/git-revert.d.ts +149 -149
  61. package/dist/tools/git-revert.js +198 -198
  62. package/dist/tools/git-stash.d.ts +140 -140
  63. package/dist/tools/git-stash.js +269 -269
  64. package/dist/tools/git-sync.d.ts +178 -178
  65. package/dist/tools/git-sync.js +312 -312
  66. package/dist/tools/git-tags.d.ts +414 -411
  67. package/dist/tools/git-tags.d.ts.map +1 -1
  68. package/dist/tools/git-tags.js +486 -485
  69. package/dist/tools/git-tags.js.map +1 -1
  70. package/dist/tools/git-webhooks.d.ts +473 -470
  71. package/dist/tools/git-webhooks.d.ts.map +1 -1
  72. package/dist/tools/git-webhooks.js +544 -543
  73. package/dist/tools/git-webhooks.js.map +1 -1
  74. package/dist/utils/terminal-controller.d.ts +80 -80
  75. package/dist/utils/terminal-controller.js +345 -345
  76. package/dist/utils/user-detection.d.ts +24 -24
  77. package/dist/utils/user-detection.js +53 -53
  78. package/package.json +2 -2
  79. package/dist/tools/gh-actions.d.ts +0 -253
  80. package/dist/tools/gh-actions.d.ts.map +0 -1
  81. package/dist/tools/gh-actions.js +0 -390
  82. package/dist/tools/gh-actions.js.map +0 -1
  83. package/dist/tools/gh-analytics.d.ts +0 -264
  84. package/dist/tools/gh-analytics.d.ts.map +0 -1
  85. package/dist/tools/gh-analytics.js +0 -402
  86. package/dist/tools/gh-analytics.js.map +0 -1
  87. package/dist/tools/gh-code-review.d.ts +0 -305
  88. package/dist/tools/gh-code-review.d.ts.map +0 -1
  89. package/dist/tools/gh-code-review.js +0 -513
  90. package/dist/tools/gh-code-review.js.map +0 -1
  91. package/dist/tools/gh-codespaces.d.ts +0 -139
  92. package/dist/tools/gh-codespaces.d.ts.map +0 -1
  93. package/dist/tools/gh-codespaces.js +0 -283
  94. package/dist/tools/gh-codespaces.js.map +0 -1
  95. package/dist/tools/gh-deployments.d.ts +0 -301
  96. package/dist/tools/gh-deployments.d.ts.map +0 -1
  97. package/dist/tools/gh-deployments.js +0 -368
  98. package/dist/tools/gh-deployments.js.map +0 -1
  99. package/dist/tools/gh-gists.d.ts +0 -175
  100. package/dist/tools/gh-gists.d.ts.map +0 -1
  101. package/dist/tools/gh-gists.js +0 -322
  102. package/dist/tools/gh-gists.js.map +0 -1
  103. package/dist/tools/gh-projects.d.ts +0 -206
  104. package/dist/tools/gh-projects.d.ts.map +0 -1
  105. package/dist/tools/gh-projects.js +0 -359
  106. package/dist/tools/gh-projects.js.map +0 -1
  107. package/dist/tools/gh-security.d.ts +0 -275
  108. package/dist/tools/gh-security.d.ts.map +0 -1
  109. package/dist/tools/gh-security.js +0 -396
  110. package/dist/tools/gh-security.js.map +0 -1
  111. package/dist/tools/gh-sync.d.ts +0 -214
  112. package/dist/tools/gh-sync.d.ts.map +0 -1
  113. package/dist/tools/gh-sync.js +0 -379
  114. package/dist/tools/gh-sync.js.map +0 -1
  115. package/dist/tools/gh-workflows.d.ts +0 -291
  116. package/dist/tools/gh-workflows.d.ts.map +0 -1
  117. package/dist/tools/gh-workflows.js +0 -433
  118. package/dist/tools/gh-workflows.js.map +0 -1
  119. package/dist/tools/git-bundle.d.ts +0 -172
  120. package/dist/tools/git-bundle.d.ts.map +0 -1
  121. package/dist/tools/git-bundle.js +0 -242
  122. package/dist/tools/git-bundle.js.map +0 -1
  123. package/dist/tools/git-cherry-pick.d.ts +0 -159
  124. package/dist/tools/git-cherry-pick.d.ts.map +0 -1
  125. package/dist/tools/git-cherry-pick.js +0 -225
  126. package/dist/tools/git-cherry-pick.js.map +0 -1
  127. package/dist/tools/git-rebase.d.ts +0 -138
  128. package/dist/tools/git-rebase.d.ts.map +0 -1
  129. package/dist/tools/git-rebase.js +0 -214
  130. package/dist/tools/git-rebase.js.map +0 -1
  131. package/dist/tools/git-submodule.d.ts +0 -153
  132. package/dist/tools/git-submodule.d.ts.map +0 -1
  133. package/dist/tools/git-submodule.js +0 -290
  134. package/dist/tools/git-submodule.js.map +0 -1
  135. package/dist/tools/git-worktree.d.ts +0 -160
  136. package/dist/tools/git-worktree.d.ts.map +0 -1
  137. package/dist/tools/git-worktree.js +0 -270
  138. package/dist/tools/git-worktree.js.map +0 -1
  139. package/dist/tools/repositories.d.ts +0 -406
  140. package/dist/tools/repositories.d.ts.map +0 -1
  141. package/dist/tools/repositories.js +0 -570
  142. package/dist/tools/repositories.js.map +0 -1
  143. package/dist/tools/users.d.ts +0 -373
  144. package/dist/tools/users.d.ts.map +0 -1
  145. package/dist/tools/users.js +0 -500
  146. package/dist/tools/users.js.map +0 -1
  147. package/dist/tools/validator.d.ts +0 -171
  148. package/dist/tools/validator.d.ts.map +0 -1
  149. package/dist/tools/validator.js +0 -195
  150. package/dist/tools/validator.js.map +0 -1
  151. package/dist/tools/version-control.d.ts +0 -137
  152. package/dist/tools/version-control.d.ts.map +0 -1
  153. package/dist/tools/version-control.js +0 -165
  154. 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