@andrebuzeli/git-mcp 2.27.3 → 2.28.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/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 -156
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +274 -260
- package/dist/providers/base-provider.js.map +1 -1
- 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.js +1001 -1001
- package/dist/providers/github-provider.d.ts +104 -104
- package/dist/providers/github-provider.js +1234 -1234
- 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.js +311 -311
- package/dist/providers/types.d.ts +318 -298
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +6 -6
- package/dist/server.d.ts +76 -76
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +306 -357
- package/dist/server.js.map +1 -1
- package/dist/tools/gh-actions.d.ts +252 -252
- package/dist/tools/gh-actions.js +389 -389
- package/dist/tools/gh-analytics.d.ts +263 -263
- package/dist/tools/gh-analytics.js +401 -401
- package/dist/tools/gh-code-review.d.ts +304 -304
- package/dist/tools/gh-code-review.js +512 -512
- package/dist/tools/gh-codespaces.d.ts +138 -138
- package/dist/tools/gh-codespaces.js +282 -282
- package/dist/tools/gh-deployments.d.ts +300 -300
- package/dist/tools/gh-deployments.js +367 -367
- package/dist/tools/gh-gists.d.ts +174 -174
- package/dist/tools/gh-gists.js +321 -321
- package/dist/tools/gh-projects.d.ts +205 -205
- package/dist/tools/gh-projects.js +358 -358
- package/dist/tools/gh-security.d.ts +274 -274
- package/dist/tools/gh-security.js +395 -395
- package/dist/tools/gh-sync.d.ts +213 -213
- package/dist/tools/gh-sync.js +378 -378
- package/dist/tools/gh-workflows.d.ts +290 -290
- package/dist/tools/gh-workflows.js +432 -432
- 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.d.ts.map +1 -1
- package/dist/tools/git-branches.js +627 -530
- package/dist/tools/git-branches.js.map +1 -1
- package/dist/tools/git-bundle.d.ts +171 -171
- package/dist/tools/git-bundle.js +241 -241
- package/dist/tools/git-cherry-pick.d.ts +158 -158
- package/dist/tools/git-cherry-pick.js +224 -224
- package/dist/tools/git-commits.d.ts +485 -485
- package/dist/tools/git-commits.d.ts.map +1 -1
- package/dist/tools/git-commits.js +735 -625
- 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-issues.d.ts +571 -571
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +740 -693
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-pulls.d.ts +694 -694
- package/dist/tools/git-pulls.js +732 -732
- package/dist/tools/git-rebase.d.ts +137 -137
- package/dist/tools/git-rebase.js +213 -213
- package/dist/tools/git-releases.d.ts +487 -487
- package/dist/tools/git-releases.js +557 -557
- 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-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-submodule.d.ts +152 -152
- package/dist/tools/git-submodule.js +289 -289
- package/dist/tools/git-sync.d.ts +178 -166
- package/dist/tools/git-sync.d.ts.map +1 -1
- package/dist/tools/git-sync.js +312 -117
- package/dist/tools/git-sync.js.map +1 -1
- package/dist/tools/git-tags.d.ts +411 -411
- package/dist/tools/git-tags.js +485 -485
- package/dist/tools/git-webhooks.d.ts +470 -482
- package/dist/tools/git-webhooks.d.ts.map +1 -1
- package/dist/tools/git-webhooks.js +543 -555
- package/dist/tools/git-webhooks.js.map +1 -1
- package/dist/tools/git-worktree.d.ts +159 -159
- package/dist/tools/git-worktree.js +269 -269
- package/dist/tools/repositories.d.ts +405 -405
- package/dist/tools/repositories.js +569 -569
- package/dist/tools/users.d.ts +372 -372
- package/dist/tools/users.js +499 -499
- package/dist/tools/validator.d.ts +170 -170
- package/dist/tools/validator.js +194 -194
- package/dist/tools/version-control.d.ts +136 -136
- package/dist/tools/version-control.js +164 -164
- 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 +59 -59
|
@@ -1,312 +1,312 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.globalProviderFactory = exports.ProviderFactory = void 0;
|
|
4
|
-
exports.createProviderFromEnv = createProviderFromEnv;
|
|
5
|
-
exports.initializeFactoryFromEnv = initializeFactoryFromEnv;
|
|
6
|
-
const gitea_provider_js_1 = require("./gitea-provider.js");
|
|
7
|
-
const github_provider_js_1 = require("./github-provider.js");
|
|
8
|
-
/**
|
|
9
|
-
* Factory para criar e gerenciar providers VCS
|
|
10
|
-
* Suporta Gitea e GitHub com configuração flexível
|
|
11
|
-
*/
|
|
12
|
-
class ProviderFactory {
|
|
13
|
-
providers = new Map();
|
|
14
|
-
defaultProviderName = '';
|
|
15
|
-
constructor(config) {
|
|
16
|
-
if (config) {
|
|
17
|
-
this.initializeFromConfig(config);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Inicializa a factory a partir de uma configuração
|
|
22
|
-
*/
|
|
23
|
-
initializeFromConfig(config) {
|
|
24
|
-
this.defaultProviderName = config.defaultProvider;
|
|
25
|
-
for (const providerConfig of config.providers) {
|
|
26
|
-
this.createProvider(providerConfig);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Cria um novo provider baseado na configuração
|
|
31
|
-
*/
|
|
32
|
-
createProvider(config) {
|
|
33
|
-
let provider;
|
|
34
|
-
switch (config.type) {
|
|
35
|
-
case 'gitea':
|
|
36
|
-
provider = new gitea_provider_js_1.GiteaProvider(config);
|
|
37
|
-
break;
|
|
38
|
-
case 'github':
|
|
39
|
-
provider = new github_provider_js_1.GitHubProvider(config);
|
|
40
|
-
break;
|
|
41
|
-
default:
|
|
42
|
-
throw new Error(`Provider type '${config.type}' not supported. Supported types: gitea, github`);
|
|
43
|
-
}
|
|
44
|
-
this.providers.set(config.name, provider);
|
|
45
|
-
// Se for o primeiro provider, define como padrão
|
|
46
|
-
if (this.providers.size === 1) {
|
|
47
|
-
this.defaultProviderName = config.name;
|
|
48
|
-
}
|
|
49
|
-
return provider;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Obtém um provider pelo nome
|
|
53
|
-
*/
|
|
54
|
-
getProvider(name) {
|
|
55
|
-
const provider = this.providers.get(name);
|
|
56
|
-
if (!provider && name) {
|
|
57
|
-
console.error(`Provider '${name}' não encontrado. Providers disponíveis:`, Array.from(this.providers.keys()));
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
return provider;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Lista todos os nomes de providers disponíveis
|
|
64
|
-
*/
|
|
65
|
-
listProviders() {
|
|
66
|
-
return Array.from(this.providers.keys());
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Obtém o provider padrão
|
|
70
|
-
*/
|
|
71
|
-
getDefaultProvider() {
|
|
72
|
-
if (this.providers.size === 0) {
|
|
73
|
-
throw new Error('No providers configured - this should not happen');
|
|
74
|
-
}
|
|
75
|
-
// Primeiro tenta o provider padrão configurado
|
|
76
|
-
if (this.defaultProviderName && this.providers.has(this.defaultProviderName)) {
|
|
77
|
-
const provider = this.providers.get(this.defaultProviderName);
|
|
78
|
-
if (provider) {
|
|
79
|
-
return provider;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// Fallback: usa o primeiro provider disponível
|
|
83
|
-
const firstKey = this.providers.keys().next().value;
|
|
84
|
-
if (firstKey) {
|
|
85
|
-
console.log(`[PROVIDER FACTORY] Usando provider '${firstKey}' como fallback padrão`);
|
|
86
|
-
this.defaultProviderName = firstKey;
|
|
87
|
-
return this.providers.get(firstKey);
|
|
88
|
-
}
|
|
89
|
-
throw new Error('No valid providers available');
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Define o provider padrão
|
|
93
|
-
*/
|
|
94
|
-
setDefaultProvider(name) {
|
|
95
|
-
if (!this.providers.has(name)) {
|
|
96
|
-
throw new Error(`Provider '${name}' not found`);
|
|
97
|
-
}
|
|
98
|
-
this.defaultProviderName = name;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Remove um provider
|
|
102
|
-
*/
|
|
103
|
-
removeProvider(name) {
|
|
104
|
-
const removed = this.providers.delete(name);
|
|
105
|
-
// Se o provider removido era o padrão, redefine o padrão
|
|
106
|
-
if (removed && name === this.defaultProviderName) {
|
|
107
|
-
if (this.providers.size > 0) {
|
|
108
|
-
const firstKey = this.providers.keys().next().value;
|
|
109
|
-
if (firstKey) {
|
|
110
|
-
this.defaultProviderName = firstKey;
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
this.defaultProviderName = '';
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
this.defaultProviderName = '';
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return removed;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Verifica se um provider existe
|
|
124
|
-
*/
|
|
125
|
-
hasProvider(name) {
|
|
126
|
-
return this.providers.has(name);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Obtém informações sobre todos os providers
|
|
130
|
-
*/
|
|
131
|
-
getProvidersInfo() {
|
|
132
|
-
return Array.from(this.providers.entries()).map(([name, provider]) => ({
|
|
133
|
-
name,
|
|
134
|
-
type: provider.config?.type || 'unknown',
|
|
135
|
-
isDefault: name === this.defaultProviderName
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Limpa todos os providers
|
|
140
|
-
*/
|
|
141
|
-
clear() {
|
|
142
|
-
this.providers.clear();
|
|
143
|
-
this.defaultProviderName = '';
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Obtém o número total de providers
|
|
147
|
-
*/
|
|
148
|
-
getProviderCount() {
|
|
149
|
-
return this.providers.size;
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Verifica se há providers configurados
|
|
153
|
-
*/
|
|
154
|
-
isEmpty() {
|
|
155
|
-
return this.providers.size === 0;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
exports.ProviderFactory = ProviderFactory;
|
|
159
|
-
/**
|
|
160
|
-
* Factory singleton global para uso em todo o sistema
|
|
161
|
-
*/
|
|
162
|
-
// Inicializar o provider factory global com configuração do ambiente
|
|
163
|
-
exports.globalProviderFactory = initializeFactoryFromEnv();
|
|
164
|
-
/**
|
|
165
|
-
* Função helper para criar provider a partir de variáveis de ambiente
|
|
166
|
-
*/
|
|
167
|
-
function createProviderFromEnv(providerName, providerType) {
|
|
168
|
-
let apiUrl;
|
|
169
|
-
let token;
|
|
170
|
-
let username;
|
|
171
|
-
switch (providerType) {
|
|
172
|
-
case 'gitea':
|
|
173
|
-
apiUrl = process.env.GITEA_URL || process.env.API_URL || '';
|
|
174
|
-
token = process.env.GITEA_TOKEN || process.env.API_TOKEN || '';
|
|
175
|
-
username = process.env.GITEA_USERNAME || process.env.USERNAME;
|
|
176
|
-
break;
|
|
177
|
-
case 'github':
|
|
178
|
-
apiUrl = process.env.GITHUB_URL || process.env.API_URL || 'https://api.github.com';
|
|
179
|
-
token = process.env.GITHUB_TOKEN || process.env.API_TOKEN || '';
|
|
180
|
-
username = process.env.GITHUB_USERNAME || process.env.USERNAME;
|
|
181
|
-
break;
|
|
182
|
-
default:
|
|
183
|
-
throw new Error(`Provider type '${providerType}' not supported`);
|
|
184
|
-
}
|
|
185
|
-
if (!apiUrl) {
|
|
186
|
-
throw new Error(`API URL not configured for ${providerType}`);
|
|
187
|
-
}
|
|
188
|
-
if (!token) {
|
|
189
|
-
throw new Error(`API token not configured for ${providerType}`);
|
|
190
|
-
}
|
|
191
|
-
const config = {
|
|
192
|
-
name: providerName,
|
|
193
|
-
type: providerType,
|
|
194
|
-
apiUrl,
|
|
195
|
-
token,
|
|
196
|
-
username
|
|
197
|
-
};
|
|
198
|
-
return exports.globalProviderFactory.createProvider(config);
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Função helper para inicializar factory a partir de variáveis de ambiente
|
|
202
|
-
*/
|
|
203
|
-
function initializeFactoryFromEnv() {
|
|
204
|
-
const providers = [];
|
|
205
|
-
let defaultProvider = '';
|
|
206
|
-
// Verifica se há configuração multi-provider
|
|
207
|
-
const providersJson = process.env.PROVIDERS_JSON;
|
|
208
|
-
if (providersJson) {
|
|
209
|
-
try {
|
|
210
|
-
const config = JSON.parse(providersJson);
|
|
211
|
-
if (config.providers && Array.isArray(config.providers)) {
|
|
212
|
-
for (const providerConfig of config.providers) {
|
|
213
|
-
if (providerConfig.name && providerConfig.type && providerConfig.apiUrl && providerConfig.token) {
|
|
214
|
-
providers.push(providerConfig);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
defaultProvider = config.defaultProvider || (providers[0]?.name || '');
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
catch (error) {
|
|
221
|
-
console.error('Error parsing PROVIDERS_JSON:', error);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
// Se não há configuração multi-provider, tenta configuração individual
|
|
225
|
-
if (providers.length === 0) {
|
|
226
|
-
// Auto-detectar configuração multi-provider se ambos Gitea e GitHub estão configurados
|
|
227
|
-
if (process.env.GITEA_URL && process.env.GITEA_TOKEN && process.env.GITHUB_TOKEN) {
|
|
228
|
-
// Configuração multi-provider com Gitea como padrão
|
|
229
|
-
providers.push({
|
|
230
|
-
name: 'gitea',
|
|
231
|
-
type: 'gitea',
|
|
232
|
-
apiUrl: process.env.GITEA_URL,
|
|
233
|
-
token: process.env.GITEA_TOKEN,
|
|
234
|
-
username: process.env.GITEA_USERNAME
|
|
235
|
-
});
|
|
236
|
-
providers.push({
|
|
237
|
-
name: 'github',
|
|
238
|
-
type: 'github',
|
|
239
|
-
apiUrl: process.env.GITHUB_URL || 'https://api.github.com',
|
|
240
|
-
token: process.env.GITHUB_TOKEN,
|
|
241
|
-
username: process.env.GITHUB_USERNAME
|
|
242
|
-
});
|
|
243
|
-
defaultProvider = 'gitea';
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
// Só configura GitHub se token válido estiver disponível
|
|
247
|
-
if (process.env.GITHUB_TOKEN) {
|
|
248
|
-
providers.push({
|
|
249
|
-
name: 'github',
|
|
250
|
-
type: 'github',
|
|
251
|
-
apiUrl: process.env.GITHUB_URL || 'https://api.github.com',
|
|
252
|
-
token: process.env.GITHUB_TOKEN,
|
|
253
|
-
username: process.env.GITHUB_USERNAME
|
|
254
|
-
});
|
|
255
|
-
defaultProvider = 'github';
|
|
256
|
-
console.log('[PROVIDER FACTORY] Provider GitHub configurado');
|
|
257
|
-
}
|
|
258
|
-
// Tenta Gitea se disponível
|
|
259
|
-
if (process.env.GITEA_URL && process.env.GITEA_TOKEN) {
|
|
260
|
-
// Valida URL do Gitea
|
|
261
|
-
const giteaUrl = process.env.GITEA_URL;
|
|
262
|
-
if (!giteaUrl.includes('://')) {
|
|
263
|
-
console.warn('[PROVIDER FACTORY] GITEA_URL deve incluir protocolo (http:// ou https://)');
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
providers.push({
|
|
267
|
-
name: 'gitea',
|
|
268
|
-
type: 'gitea',
|
|
269
|
-
apiUrl: giteaUrl,
|
|
270
|
-
token: process.env.GITEA_TOKEN,
|
|
271
|
-
username: process.env.GITEA_USERNAME
|
|
272
|
-
});
|
|
273
|
-
// Se não há provider padrão, usa Gitea
|
|
274
|
-
if (!defaultProvider) {
|
|
275
|
-
defaultProvider = 'gitea';
|
|
276
|
-
}
|
|
277
|
-
console.log('[PROVIDER FACTORY] Provider Gitea configurado');
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
// Tenta configuração genérica
|
|
282
|
-
if (process.env.API_URL && process.env.API_TOKEN && providers.length === 0) {
|
|
283
|
-
const providerType = process.env.PROVIDER || 'gitea';
|
|
284
|
-
providers.push({
|
|
285
|
-
name: providerType,
|
|
286
|
-
type: providerType,
|
|
287
|
-
apiUrl: process.env.API_URL,
|
|
288
|
-
token: process.env.API_TOKEN,
|
|
289
|
-
username: process.env.USERNAME
|
|
290
|
-
});
|
|
291
|
-
defaultProvider = providerType;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
// Se não há providers configurados, cria um provider demo
|
|
295
|
-
if (providers.length === 0) {
|
|
296
|
-
console.warn('[PROVIDER FACTORY] Nenhum provider configurado, usando modo demo');
|
|
297
|
-
providers.push({
|
|
298
|
-
name: 'demo',
|
|
299
|
-
type: 'gitea',
|
|
300
|
-
apiUrl: 'https://demo.gitea.io/api/v1',
|
|
301
|
-
token: 'demo-token',
|
|
302
|
-
username: 'demo-user'
|
|
303
|
-
});
|
|
304
|
-
defaultProvider = 'demo';
|
|
305
|
-
}
|
|
306
|
-
const config = {
|
|
307
|
-
defaultProvider,
|
|
308
|
-
providers
|
|
309
|
-
};
|
|
310
|
-
return new ProviderFactory(config);
|
|
311
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.globalProviderFactory = exports.ProviderFactory = void 0;
|
|
4
|
+
exports.createProviderFromEnv = createProviderFromEnv;
|
|
5
|
+
exports.initializeFactoryFromEnv = initializeFactoryFromEnv;
|
|
6
|
+
const gitea_provider_js_1 = require("./gitea-provider.js");
|
|
7
|
+
const github_provider_js_1 = require("./github-provider.js");
|
|
8
|
+
/**
|
|
9
|
+
* Factory para criar e gerenciar providers VCS
|
|
10
|
+
* Suporta Gitea e GitHub com configuração flexível
|
|
11
|
+
*/
|
|
12
|
+
class ProviderFactory {
|
|
13
|
+
providers = new Map();
|
|
14
|
+
defaultProviderName = '';
|
|
15
|
+
constructor(config) {
|
|
16
|
+
if (config) {
|
|
17
|
+
this.initializeFromConfig(config);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Inicializa a factory a partir de uma configuração
|
|
22
|
+
*/
|
|
23
|
+
initializeFromConfig(config) {
|
|
24
|
+
this.defaultProviderName = config.defaultProvider;
|
|
25
|
+
for (const providerConfig of config.providers) {
|
|
26
|
+
this.createProvider(providerConfig);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Cria um novo provider baseado na configuração
|
|
31
|
+
*/
|
|
32
|
+
createProvider(config) {
|
|
33
|
+
let provider;
|
|
34
|
+
switch (config.type) {
|
|
35
|
+
case 'gitea':
|
|
36
|
+
provider = new gitea_provider_js_1.GiteaProvider(config);
|
|
37
|
+
break;
|
|
38
|
+
case 'github':
|
|
39
|
+
provider = new github_provider_js_1.GitHubProvider(config);
|
|
40
|
+
break;
|
|
41
|
+
default:
|
|
42
|
+
throw new Error(`Provider type '${config.type}' not supported. Supported types: gitea, github`);
|
|
43
|
+
}
|
|
44
|
+
this.providers.set(config.name, provider);
|
|
45
|
+
// Se for o primeiro provider, define como padrão
|
|
46
|
+
if (this.providers.size === 1) {
|
|
47
|
+
this.defaultProviderName = config.name;
|
|
48
|
+
}
|
|
49
|
+
return provider;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Obtém um provider pelo nome
|
|
53
|
+
*/
|
|
54
|
+
getProvider(name) {
|
|
55
|
+
const provider = this.providers.get(name);
|
|
56
|
+
if (!provider && name) {
|
|
57
|
+
console.error(`Provider '${name}' não encontrado. Providers disponíveis:`, Array.from(this.providers.keys()));
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return provider;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Lista todos os nomes de providers disponíveis
|
|
64
|
+
*/
|
|
65
|
+
listProviders() {
|
|
66
|
+
return Array.from(this.providers.keys());
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Obtém o provider padrão
|
|
70
|
+
*/
|
|
71
|
+
getDefaultProvider() {
|
|
72
|
+
if (this.providers.size === 0) {
|
|
73
|
+
throw new Error('No providers configured - this should not happen');
|
|
74
|
+
}
|
|
75
|
+
// Primeiro tenta o provider padrão configurado
|
|
76
|
+
if (this.defaultProviderName && this.providers.has(this.defaultProviderName)) {
|
|
77
|
+
const provider = this.providers.get(this.defaultProviderName);
|
|
78
|
+
if (provider) {
|
|
79
|
+
return provider;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Fallback: usa o primeiro provider disponível
|
|
83
|
+
const firstKey = this.providers.keys().next().value;
|
|
84
|
+
if (firstKey) {
|
|
85
|
+
console.log(`[PROVIDER FACTORY] Usando provider '${firstKey}' como fallback padrão`);
|
|
86
|
+
this.defaultProviderName = firstKey;
|
|
87
|
+
return this.providers.get(firstKey);
|
|
88
|
+
}
|
|
89
|
+
throw new Error('No valid providers available');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Define o provider padrão
|
|
93
|
+
*/
|
|
94
|
+
setDefaultProvider(name) {
|
|
95
|
+
if (!this.providers.has(name)) {
|
|
96
|
+
throw new Error(`Provider '${name}' not found`);
|
|
97
|
+
}
|
|
98
|
+
this.defaultProviderName = name;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Remove um provider
|
|
102
|
+
*/
|
|
103
|
+
removeProvider(name) {
|
|
104
|
+
const removed = this.providers.delete(name);
|
|
105
|
+
// Se o provider removido era o padrão, redefine o padrão
|
|
106
|
+
if (removed && name === this.defaultProviderName) {
|
|
107
|
+
if (this.providers.size > 0) {
|
|
108
|
+
const firstKey = this.providers.keys().next().value;
|
|
109
|
+
if (firstKey) {
|
|
110
|
+
this.defaultProviderName = firstKey;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.defaultProviderName = '';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.defaultProviderName = '';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return removed;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Verifica se um provider existe
|
|
124
|
+
*/
|
|
125
|
+
hasProvider(name) {
|
|
126
|
+
return this.providers.has(name);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Obtém informações sobre todos os providers
|
|
130
|
+
*/
|
|
131
|
+
getProvidersInfo() {
|
|
132
|
+
return Array.from(this.providers.entries()).map(([name, provider]) => ({
|
|
133
|
+
name,
|
|
134
|
+
type: provider.config?.type || 'unknown',
|
|
135
|
+
isDefault: name === this.defaultProviderName
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Limpa todos os providers
|
|
140
|
+
*/
|
|
141
|
+
clear() {
|
|
142
|
+
this.providers.clear();
|
|
143
|
+
this.defaultProviderName = '';
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Obtém o número total de providers
|
|
147
|
+
*/
|
|
148
|
+
getProviderCount() {
|
|
149
|
+
return this.providers.size;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Verifica se há providers configurados
|
|
153
|
+
*/
|
|
154
|
+
isEmpty() {
|
|
155
|
+
return this.providers.size === 0;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.ProviderFactory = ProviderFactory;
|
|
159
|
+
/**
|
|
160
|
+
* Factory singleton global para uso em todo o sistema
|
|
161
|
+
*/
|
|
162
|
+
// Inicializar o provider factory global com configuração do ambiente
|
|
163
|
+
exports.globalProviderFactory = initializeFactoryFromEnv();
|
|
164
|
+
/**
|
|
165
|
+
* Função helper para criar provider a partir de variáveis de ambiente
|
|
166
|
+
*/
|
|
167
|
+
function createProviderFromEnv(providerName, providerType) {
|
|
168
|
+
let apiUrl;
|
|
169
|
+
let token;
|
|
170
|
+
let username;
|
|
171
|
+
switch (providerType) {
|
|
172
|
+
case 'gitea':
|
|
173
|
+
apiUrl = process.env.GITEA_URL || process.env.API_URL || '';
|
|
174
|
+
token = process.env.GITEA_TOKEN || process.env.API_TOKEN || '';
|
|
175
|
+
username = process.env.GITEA_USERNAME || process.env.USERNAME;
|
|
176
|
+
break;
|
|
177
|
+
case 'github':
|
|
178
|
+
apiUrl = process.env.GITHUB_URL || process.env.API_URL || 'https://api.github.com';
|
|
179
|
+
token = process.env.GITHUB_TOKEN || process.env.API_TOKEN || '';
|
|
180
|
+
username = process.env.GITHUB_USERNAME || process.env.USERNAME;
|
|
181
|
+
break;
|
|
182
|
+
default:
|
|
183
|
+
throw new Error(`Provider type '${providerType}' not supported`);
|
|
184
|
+
}
|
|
185
|
+
if (!apiUrl) {
|
|
186
|
+
throw new Error(`API URL not configured for ${providerType}`);
|
|
187
|
+
}
|
|
188
|
+
if (!token) {
|
|
189
|
+
throw new Error(`API token not configured for ${providerType}`);
|
|
190
|
+
}
|
|
191
|
+
const config = {
|
|
192
|
+
name: providerName,
|
|
193
|
+
type: providerType,
|
|
194
|
+
apiUrl,
|
|
195
|
+
token,
|
|
196
|
+
username
|
|
197
|
+
};
|
|
198
|
+
return exports.globalProviderFactory.createProvider(config);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Função helper para inicializar factory a partir de variáveis de ambiente
|
|
202
|
+
*/
|
|
203
|
+
function initializeFactoryFromEnv() {
|
|
204
|
+
const providers = [];
|
|
205
|
+
let defaultProvider = '';
|
|
206
|
+
// Verifica se há configuração multi-provider
|
|
207
|
+
const providersJson = process.env.PROVIDERS_JSON;
|
|
208
|
+
if (providersJson) {
|
|
209
|
+
try {
|
|
210
|
+
const config = JSON.parse(providersJson);
|
|
211
|
+
if (config.providers && Array.isArray(config.providers)) {
|
|
212
|
+
for (const providerConfig of config.providers) {
|
|
213
|
+
if (providerConfig.name && providerConfig.type && providerConfig.apiUrl && providerConfig.token) {
|
|
214
|
+
providers.push(providerConfig);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
defaultProvider = config.defaultProvider || (providers[0]?.name || '');
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
console.error('Error parsing PROVIDERS_JSON:', error);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Se não há configuração multi-provider, tenta configuração individual
|
|
225
|
+
if (providers.length === 0) {
|
|
226
|
+
// Auto-detectar configuração multi-provider se ambos Gitea e GitHub estão configurados
|
|
227
|
+
if (process.env.GITEA_URL && process.env.GITEA_TOKEN && process.env.GITHUB_TOKEN) {
|
|
228
|
+
// Configuração multi-provider com Gitea como padrão
|
|
229
|
+
providers.push({
|
|
230
|
+
name: 'gitea',
|
|
231
|
+
type: 'gitea',
|
|
232
|
+
apiUrl: process.env.GITEA_URL,
|
|
233
|
+
token: process.env.GITEA_TOKEN,
|
|
234
|
+
username: process.env.GITEA_USERNAME
|
|
235
|
+
});
|
|
236
|
+
providers.push({
|
|
237
|
+
name: 'github',
|
|
238
|
+
type: 'github',
|
|
239
|
+
apiUrl: process.env.GITHUB_URL || 'https://api.github.com',
|
|
240
|
+
token: process.env.GITHUB_TOKEN,
|
|
241
|
+
username: process.env.GITHUB_USERNAME
|
|
242
|
+
});
|
|
243
|
+
defaultProvider = 'gitea';
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// Só configura GitHub se token válido estiver disponível
|
|
247
|
+
if (process.env.GITHUB_TOKEN) {
|
|
248
|
+
providers.push({
|
|
249
|
+
name: 'github',
|
|
250
|
+
type: 'github',
|
|
251
|
+
apiUrl: process.env.GITHUB_URL || 'https://api.github.com',
|
|
252
|
+
token: process.env.GITHUB_TOKEN,
|
|
253
|
+
username: process.env.GITHUB_USERNAME
|
|
254
|
+
});
|
|
255
|
+
defaultProvider = 'github';
|
|
256
|
+
console.log('[PROVIDER FACTORY] Provider GitHub configurado');
|
|
257
|
+
}
|
|
258
|
+
// Tenta Gitea se disponível
|
|
259
|
+
if (process.env.GITEA_URL && process.env.GITEA_TOKEN) {
|
|
260
|
+
// Valida URL do Gitea
|
|
261
|
+
const giteaUrl = process.env.GITEA_URL;
|
|
262
|
+
if (!giteaUrl.includes('://')) {
|
|
263
|
+
console.warn('[PROVIDER FACTORY] GITEA_URL deve incluir protocolo (http:// ou https://)');
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
providers.push({
|
|
267
|
+
name: 'gitea',
|
|
268
|
+
type: 'gitea',
|
|
269
|
+
apiUrl: giteaUrl,
|
|
270
|
+
token: process.env.GITEA_TOKEN,
|
|
271
|
+
username: process.env.GITEA_USERNAME
|
|
272
|
+
});
|
|
273
|
+
// Se não há provider padrão, usa Gitea
|
|
274
|
+
if (!defaultProvider) {
|
|
275
|
+
defaultProvider = 'gitea';
|
|
276
|
+
}
|
|
277
|
+
console.log('[PROVIDER FACTORY] Provider Gitea configurado');
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Tenta configuração genérica
|
|
282
|
+
if (process.env.API_URL && process.env.API_TOKEN && providers.length === 0) {
|
|
283
|
+
const providerType = process.env.PROVIDER || 'gitea';
|
|
284
|
+
providers.push({
|
|
285
|
+
name: providerType,
|
|
286
|
+
type: providerType,
|
|
287
|
+
apiUrl: process.env.API_URL,
|
|
288
|
+
token: process.env.API_TOKEN,
|
|
289
|
+
username: process.env.USERNAME
|
|
290
|
+
});
|
|
291
|
+
defaultProvider = providerType;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Se não há providers configurados, cria um provider demo
|
|
295
|
+
if (providers.length === 0) {
|
|
296
|
+
console.warn('[PROVIDER FACTORY] Nenhum provider configurado, usando modo demo');
|
|
297
|
+
providers.push({
|
|
298
|
+
name: 'demo',
|
|
299
|
+
type: 'gitea',
|
|
300
|
+
apiUrl: 'https://demo.gitea.io/api/v1',
|
|
301
|
+
token: 'demo-token',
|
|
302
|
+
username: 'demo-user'
|
|
303
|
+
});
|
|
304
|
+
defaultProvider = 'demo';
|
|
305
|
+
}
|
|
306
|
+
const config = {
|
|
307
|
+
defaultProvider,
|
|
308
|
+
providers
|
|
309
|
+
};
|
|
310
|
+
return new ProviderFactory(config);
|
|
311
|
+
}
|
|
312
312
|
//# sourceMappingURL=provider-factory.js.map
|