@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.
Files changed (112) 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 -156
  8. package/dist/providers/base-provider.d.ts.map +1 -1
  9. package/dist/providers/base-provider.js +274 -260
  10. package/dist/providers/base-provider.js.map +1 -1
  11. package/dist/providers/error-handler.d.ts +50 -50
  12. package/dist/providers/error-handler.js +175 -175
  13. package/dist/providers/gitea-provider.d.ts +97 -97
  14. package/dist/providers/gitea-provider.js +1001 -1001
  15. package/dist/providers/github-provider.d.ts +104 -104
  16. package/dist/providers/github-provider.js +1234 -1234
  17. package/dist/providers/index.d.ts +12 -12
  18. package/dist/providers/index.js +40 -40
  19. package/dist/providers/provider-factory.d.ts +74 -74
  20. package/dist/providers/provider-factory.js +311 -311
  21. package/dist/providers/types.d.ts +318 -298
  22. package/dist/providers/types.d.ts.map +1 -1
  23. package/dist/providers/types.js +6 -6
  24. package/dist/server.d.ts +76 -76
  25. package/dist/server.d.ts.map +1 -1
  26. package/dist/server.js +306 -357
  27. package/dist/server.js.map +1 -1
  28. package/dist/tools/gh-actions.d.ts +252 -252
  29. package/dist/tools/gh-actions.js +389 -389
  30. package/dist/tools/gh-analytics.d.ts +263 -263
  31. package/dist/tools/gh-analytics.js +401 -401
  32. package/dist/tools/gh-code-review.d.ts +304 -304
  33. package/dist/tools/gh-code-review.js +512 -512
  34. package/dist/tools/gh-codespaces.d.ts +138 -138
  35. package/dist/tools/gh-codespaces.js +282 -282
  36. package/dist/tools/gh-deployments.d.ts +300 -300
  37. package/dist/tools/gh-deployments.js +367 -367
  38. package/dist/tools/gh-gists.d.ts +174 -174
  39. package/dist/tools/gh-gists.js +321 -321
  40. package/dist/tools/gh-projects.d.ts +205 -205
  41. package/dist/tools/gh-projects.js +358 -358
  42. package/dist/tools/gh-security.d.ts +274 -274
  43. package/dist/tools/gh-security.js +395 -395
  44. package/dist/tools/gh-sync.d.ts +213 -213
  45. package/dist/tools/gh-sync.js +378 -378
  46. package/dist/tools/gh-workflows.d.ts +290 -290
  47. package/dist/tools/gh-workflows.js +432 -432
  48. package/dist/tools/git-archive.d.ts +165 -165
  49. package/dist/tools/git-archive.js +233 -233
  50. package/dist/tools/git-branches.d.ts +430 -430
  51. package/dist/tools/git-branches.d.ts.map +1 -1
  52. package/dist/tools/git-branches.js +627 -530
  53. package/dist/tools/git-branches.js.map +1 -1
  54. package/dist/tools/git-bundle.d.ts +171 -171
  55. package/dist/tools/git-bundle.js +241 -241
  56. package/dist/tools/git-cherry-pick.d.ts +158 -158
  57. package/dist/tools/git-cherry-pick.js +224 -224
  58. package/dist/tools/git-commits.d.ts +485 -485
  59. package/dist/tools/git-commits.d.ts.map +1 -1
  60. package/dist/tools/git-commits.js +735 -625
  61. package/dist/tools/git-commits.js.map +1 -1
  62. package/dist/tools/git-config.d.ts +140 -140
  63. package/dist/tools/git-config.js +268 -268
  64. package/dist/tools/git-files.d.ts +486 -486
  65. package/dist/tools/git-files.js +607 -607
  66. package/dist/tools/git-issues.d.ts +571 -571
  67. package/dist/tools/git-issues.d.ts.map +1 -1
  68. package/dist/tools/git-issues.js +740 -693
  69. package/dist/tools/git-issues.js.map +1 -1
  70. package/dist/tools/git-pulls.d.ts +694 -694
  71. package/dist/tools/git-pulls.js +732 -732
  72. package/dist/tools/git-rebase.d.ts +137 -137
  73. package/dist/tools/git-rebase.js +213 -213
  74. package/dist/tools/git-releases.d.ts +487 -487
  75. package/dist/tools/git-releases.js +557 -557
  76. package/dist/tools/git-remote.d.ts +138 -138
  77. package/dist/tools/git-remote.js +274 -274
  78. package/dist/tools/git-repositories.d.ts +483 -483
  79. package/dist/tools/git-repositories.js +640 -640
  80. package/dist/tools/git-reset.d.ts +130 -130
  81. package/dist/tools/git-reset.js +223 -223
  82. package/dist/tools/git-revert.d.ts +149 -149
  83. package/dist/tools/git-revert.js +198 -198
  84. package/dist/tools/git-stash.d.ts +140 -140
  85. package/dist/tools/git-stash.js +269 -269
  86. package/dist/tools/git-submodule.d.ts +152 -152
  87. package/dist/tools/git-submodule.js +289 -289
  88. package/dist/tools/git-sync.d.ts +178 -166
  89. package/dist/tools/git-sync.d.ts.map +1 -1
  90. package/dist/tools/git-sync.js +312 -117
  91. package/dist/tools/git-sync.js.map +1 -1
  92. package/dist/tools/git-tags.d.ts +411 -411
  93. package/dist/tools/git-tags.js +485 -485
  94. package/dist/tools/git-webhooks.d.ts +470 -482
  95. package/dist/tools/git-webhooks.d.ts.map +1 -1
  96. package/dist/tools/git-webhooks.js +543 -555
  97. package/dist/tools/git-webhooks.js.map +1 -1
  98. package/dist/tools/git-worktree.d.ts +159 -159
  99. package/dist/tools/git-worktree.js +269 -269
  100. package/dist/tools/repositories.d.ts +405 -405
  101. package/dist/tools/repositories.js +569 -569
  102. package/dist/tools/users.d.ts +372 -372
  103. package/dist/tools/users.js +499 -499
  104. package/dist/tools/validator.d.ts +170 -170
  105. package/dist/tools/validator.js +194 -194
  106. package/dist/tools/version-control.d.ts +136 -136
  107. package/dist/tools/version-control.js +164 -164
  108. package/dist/utils/terminal-controller.d.ts +80 -80
  109. package/dist/utils/terminal-controller.js +345 -345
  110. package/dist/utils/user-detection.d.ts +24 -24
  111. package/dist/utils/user-detection.js +53 -53
  112. package/package.json +59 -59
package/dist/client.js CHANGED
@@ -1,299 +1,299 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.giteaClient = exports.GiteaClient = void 0;
7
- const axios_1 = __importDefault(require("axios"));
8
- const config_js_1 = require("./config.js");
9
- const index_js_1 = require("./providers/index.js");
10
- /**
11
- * Cliente principal para API Gitea
12
- *
13
- * RESPONSABILIDADES:
14
- * - Configuração do cliente HTTP
15
- * - Gerenciamento de autenticação
16
- * - Implementação de todos os endpoints
17
- * - Tratamento de erros e respostas
18
- *
19
- * ARQUITETURA:
20
- * - Cliente Axios configurado
21
- * - Headers de autenticação automáticos
22
- * - Base URL configurável
23
- * - Timeout configurável
24
- *
25
- * RECOMENDAÇÕES:
26
- * - Use apenas uma instância por aplicação
27
- * - Configure interceptors para logging
28
- * - Trate erros de autenticação adequadamente
29
- * - Monitore uso da API
30
- */
31
- class GiteaClient {
32
- axios;
33
- baseURL;
34
- providerFactory;
35
- constructor() {
36
- // Inicializa o sistema multi-provider
37
- try {
38
- this.providerFactory = (0, index_js_1.initializeFactoryFromEnv)();
39
- // Se multi-provider funcionou, usa o provider padrão
40
- const defaultProvider = this.providerFactory.getDefaultProvider();
41
- this.axios = defaultProvider.client;
42
- this.baseURL = defaultProvider.baseUrl;
43
- }
44
- catch (error) {
45
- // Fallback para configuração legacy
46
- const cfg = config_js_1.config.getConfig();
47
- if (!cfg.giteaUrl || !cfg.giteaToken) {
48
- throw new Error('No valid VCS provider configuration found. Please configure GITEA_URL and GITEA_TOKEN, or use multi-provider configuration.');
49
- }
50
- this.baseURL = `${cfg.giteaUrl}/api/v1`;
51
- // Configuração do cliente Axios com autenticação
52
- this.axios = axios_1.default.create({
53
- baseURL: this.baseURL,
54
- timeout: cfg.timeout,
55
- headers: {
56
- 'Authorization': `token ${cfg.giteaToken}`,
57
- 'Content-Type': 'application/json',
58
- 'Accept': 'application/json',
59
- },
60
- });
61
- }
62
- // Configuração de interceptors para debug e logging
63
- // Apenas ativo quando DEBUG=true
64
- if (config_js_1.config.isDebug()) {
65
- // Interceptor para requisições - log de método e URL
66
- this.axios.interceptors.request.use((config) => {
67
- // Debug: API request
68
- return config;
69
- }, (error) => {
70
- console.error('[Gitea API] Request error:', error);
71
- return Promise.reject(error);
72
- });
73
- // Interceptor para respostas - log de status e URL
74
- this.axios.interceptors.response.use((response) => {
75
- // Debug: API response
76
- return response;
77
- }, (error) => {
78
- console.error('[Gitea API] Response error:', error.response?.status, error.response?.data);
79
- return Promise.reject(error);
80
- });
81
- }
82
- }
83
- /**
84
- * Método helper para chamadas da API
85
- *
86
- * FUNCIONALIDADE:
87
- * - Executa requisições HTTP para API Gitea
88
- * - Trata erros de forma uniforme
89
- * - Formata mensagens de erro
90
- * - Suporta todos os métodos HTTP
91
- *
92
- * PARÂMETROS:
93
- * - method: Método HTTP (GET, POST, PUT, DELETE, PATCH)
94
- * - url: Endpoint da API
95
- * - data: Dados para envio (opcional)
96
- *
97
- * TRATAMENTO DE ERROS:
98
- * - Erros HTTP: formata com status e mensagem
99
- * - Erros de rede: propaga erro original
100
- * - Timeout: captura e formata adequadamente
101
- *
102
- * RECOMENDAÇÕES:
103
- * - Use para todas as chamadas da API
104
- * - Trate erros específicos por status
105
- * - Implemente retry para erros temporários
106
- */
107
- async request(method, url, data) {
108
- try {
109
- const response = await this.axios.request({
110
- method,
111
- url,
112
- data,
113
- });
114
- return response.data;
115
- }
116
- catch (error) {
117
- if (axios_1.default.isAxiosError(error)) {
118
- const message = error.response?.data?.message || error.message;
119
- throw new Error(`Gitea API Error (${error.response?.status}): ${message}`);
120
- }
121
- throw error;
122
- }
123
- }
124
- // Repository methods
125
- async getRepositories(username, page = 1, limit = 30) {
126
- const url = username ? `/users/${username}/repos` : '/user/repos';
127
- return this.request('GET', `${url}?page=${page}&limit=${limit}`);
128
- }
129
- async getRepository(owner, repo) {
130
- return this.request('GET', `/repos/${owner}/${repo}`);
131
- }
132
- async createRepository(data) {
133
- return this.request('POST', '/user/repos', data);
134
- }
135
- async updateRepository(owner, repo, data) {
136
- return this.request('PATCH', `/repos/${owner}/${repo}`, data);
137
- }
138
- async deleteRepository(owner, repo) {
139
- await this.request('DELETE', `/repos/${owner}/${repo}`);
140
- }
141
- async forkRepository(owner, repo, organization) {
142
- const data = organization ? { organization } : {};
143
- return this.request('POST', `/repos/${owner}/${repo}/forks`, data);
144
- }
145
- async searchRepositories(query, page = 1, limit = 30) {
146
- return this.request('GET', `/repos/search?q=${encodeURIComponent(query)}&page=${page}&limit=${limit}`);
147
- }
148
- // Branch methods
149
- async getBranches(owner, repo, page = 1, limit = 30) {
150
- return this.request('GET', `/repos/${owner}/${repo}/branches?page=${page}&limit=${limit}`);
151
- }
152
- async getBranch(owner, repo, branch) {
153
- return this.request('GET', `/repos/${owner}/${repo}/branches/${branch}`);
154
- }
155
- async createBranch(owner, repo, branchName, fromBranch) {
156
- const data = { new_branch_name: branchName, old_branch_name: fromBranch };
157
- return this.request('POST', `/repos/${owner}/${repo}/branches`, data);
158
- }
159
- async deleteBranch(owner, repo, branch) {
160
- await this.request('DELETE', `/repos/${owner}/${repo}/branches/${branch}`);
161
- }
162
- // File methods
163
- async getFile(owner, repo, path, ref) {
164
- const url = `/repos/${owner}/${repo}/contents/${path}${ref ? `?ref=${ref}` : ''}`;
165
- return this.request('GET', url);
166
- }
167
- async getDirectoryContents(owner, repo, path = '', ref) {
168
- const url = `/repos/${owner}/${repo}/contents/${path}${ref ? `?ref=${ref}` : ''}`;
169
- return this.request('GET', url);
170
- }
171
- async createFile(owner, repo, path, data) {
172
- return this.request('POST', `/repos/${owner}/${repo}/contents/${path}`, data);
173
- }
174
- async updateFile(owner, repo, path, data) {
175
- return this.request('PUT', `/repos/${owner}/${repo}/contents/${path}`, data);
176
- }
177
- async deleteFile(owner, repo, path, data) {
178
- return this.request('DELETE', `/repos/${owner}/${repo}/contents/${path}`, data);
179
- }
180
- // Commit methods
181
- async getCommits(owner, repo, page = 1, limit = 30, sha) {
182
- const params = new URLSearchParams({ page: page.toString(), limit: limit.toString() });
183
- if (sha)
184
- params.append('sha', sha);
185
- return this.request('GET', `/repos/${owner}/${repo}/commits?${params}`);
186
- }
187
- async getCommit(owner, repo, sha) {
188
- return this.request('GET', `/repos/${owner}/${repo}/commits/${sha}`);
189
- }
190
- // Issue methods
191
- async getIssues(owner, repo, state = 'open', page = 1, limit = 30) {
192
- return this.request('GET', `/repos/${owner}/${repo}/issues?state=${state}&page=${page}&limit=${limit}`);
193
- }
194
- async getIssue(owner, repo, index) {
195
- return this.request('GET', `/repos/${owner}/${repo}/issues/${index}`);
196
- }
197
- async createIssue(owner, repo, data) {
198
- return this.request('POST', `/repos/${owner}/${repo}/issues`, data);
199
- }
200
- async updateIssue(owner, repo, index, data) {
201
- return this.request('PATCH', `/repos/${owner}/${repo}/issues/${index}`, data);
202
- }
203
- async createIssueComment(owner, repo, index, body) {
204
- return this.request('POST', `/repos/${owner}/${repo}/issues/${index}/comments`, { body });
205
- }
206
- // Pull Request methods
207
- async getPullRequests(owner, repo, state = 'open', page = 1, limit = 30) {
208
- return this.request('GET', `/repos/${owner}/${repo}/pulls?state=${state}&page=${page}&limit=${limit}`);
209
- }
210
- async getPullRequest(owner, repo, index) {
211
- return this.request('GET', `/repos/${owner}/${repo}/pulls/${index}`);
212
- }
213
- async createPullRequest(owner, repo, data) {
214
- return this.request('POST', `/repos/${owner}/${repo}/pulls`, data);
215
- }
216
- async updatePullRequest(owner, repo, index, data) {
217
- return this.request('PATCH', `/repos/${owner}/${repo}/pulls/${index}`, data);
218
- }
219
- async mergePullRequest(owner, repo, index, data) {
220
- return this.request('POST', `/repos/${owner}/${repo}/pulls/${index}/merge`, data);
221
- }
222
- // Release methods
223
- async getReleases(owner, repo, page = 1, limit = 30) {
224
- return this.request('GET', `/repos/${owner}/${repo}/releases?page=${page}&limit=${limit}`);
225
- }
226
- async getRelease(owner, repo, id) {
227
- return this.request('GET', `/repos/${owner}/${repo}/releases/${id}`);
228
- }
229
- async getLatestRelease(owner, repo) {
230
- return this.request('GET', `/repos/${owner}/${repo}/releases/latest`);
231
- }
232
- async createRelease(owner, repo, data) {
233
- return this.request('POST', `/repos/${owner}/${repo}/releases`, data);
234
- }
235
- async updateRelease(owner, repo, id, data) {
236
- return this.request('PATCH', `/repos/${owner}/${repo}/releases/${id}`, data);
237
- }
238
- async deleteRelease(owner, repo, id) {
239
- await this.request('DELETE', `/repos/${owner}/${repo}/releases/${id}`);
240
- }
241
- // Tag methods
242
- async getTags(owner, repo, page = 1, limit = 30) {
243
- return this.request('GET', `/repos/${owner}/${repo}/tags?page=${page}&limit=${limit}`);
244
- }
245
- async createTag(owner, repo, data) {
246
- return this.request('POST', `/repos/${owner}/${repo}/tags`, data);
247
- }
248
- async deleteTag(owner, repo, tag) {
249
- await this.request('DELETE', `/repos/${owner}/${repo}/tags/${tag}`);
250
- }
251
- // User methods
252
- async getCurrentUser() {
253
- return this.request('GET', '/user');
254
- }
255
- async getUser(username) {
256
- return this.request('GET', `/users/${username}`);
257
- }
258
- async searchUsers(query, page = 1, limit = 30) {
259
- return this.request('GET', `/users/search?q=${encodeURIComponent(query)}&page=${page}&limit=${limit}`);
260
- }
261
- async getUserOrganizations(username) {
262
- return this.request('GET', `/users/${username}/orgs`);
263
- }
264
- // Webhook methods
265
- async getWebhooks(owner, repo) {
266
- return this.request('GET', `/repos/${owner}/${repo}/hooks`);
267
- }
268
- async getWebhook(owner, repo, id) {
269
- return this.request('GET', `/repos/${owner}/${repo}/hooks/${id}`);
270
- }
271
- async createWebhook(owner, repo, data) {
272
- return this.request('POST', `/repos/${owner}/${repo}/hooks`, data);
273
- }
274
- async updateWebhook(owner, repo, id, data) {
275
- return this.request('PATCH', `/repos/${owner}/${repo}/hooks/${id}`, data);
276
- }
277
- async deleteWebhook(owner, repo, id) {
278
- await this.request('DELETE', `/repos/${owner}/${repo}/hooks/${id}`);
279
- }
280
- async testWebhook(owner, repo, id) {
281
- return this.request('POST', `/repos/${owner}/${repo}/hooks/${id}/tests`);
282
- }
283
- }
284
- exports.GiteaClient = GiteaClient;
285
- /**
286
- * Instância global do cliente Gitea
287
- *
288
- * USO:
289
- * - import { giteaClient } from './client.js';
290
- * - const repos = await giteaClient.getRepositories();
291
- *
292
- * RECOMENDAÇÕES:
293
- * - Use esta instância para todas as operações
294
- * - Não crie novas instâncias
295
- * - Configure antes de usar
296
- * - Monitore uso e performance
297
- */
298
- exports.giteaClient = new GiteaClient();
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.giteaClient = exports.GiteaClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const config_js_1 = require("./config.js");
9
+ const index_js_1 = require("./providers/index.js");
10
+ /**
11
+ * Cliente principal para API Gitea
12
+ *
13
+ * RESPONSABILIDADES:
14
+ * - Configuração do cliente HTTP
15
+ * - Gerenciamento de autenticação
16
+ * - Implementação de todos os endpoints
17
+ * - Tratamento de erros e respostas
18
+ *
19
+ * ARQUITETURA:
20
+ * - Cliente Axios configurado
21
+ * - Headers de autenticação automáticos
22
+ * - Base URL configurável
23
+ * - Timeout configurável
24
+ *
25
+ * RECOMENDAÇÕES:
26
+ * - Use apenas uma instância por aplicação
27
+ * - Configure interceptors para logging
28
+ * - Trate erros de autenticação adequadamente
29
+ * - Monitore uso da API
30
+ */
31
+ class GiteaClient {
32
+ axios;
33
+ baseURL;
34
+ providerFactory;
35
+ constructor() {
36
+ // Inicializa o sistema multi-provider
37
+ try {
38
+ this.providerFactory = (0, index_js_1.initializeFactoryFromEnv)();
39
+ // Se multi-provider funcionou, usa o provider padrão
40
+ const defaultProvider = this.providerFactory.getDefaultProvider();
41
+ this.axios = defaultProvider.client;
42
+ this.baseURL = defaultProvider.baseUrl;
43
+ }
44
+ catch (error) {
45
+ // Fallback para configuração legacy
46
+ const cfg = config_js_1.config.getConfig();
47
+ if (!cfg.giteaUrl || !cfg.giteaToken) {
48
+ throw new Error('No valid VCS provider configuration found. Please configure GITEA_URL and GITEA_TOKEN, or use multi-provider configuration.');
49
+ }
50
+ this.baseURL = `${cfg.giteaUrl}/api/v1`;
51
+ // Configuração do cliente Axios com autenticação
52
+ this.axios = axios_1.default.create({
53
+ baseURL: this.baseURL,
54
+ timeout: cfg.timeout,
55
+ headers: {
56
+ 'Authorization': `token ${cfg.giteaToken}`,
57
+ 'Content-Type': 'application/json',
58
+ 'Accept': 'application/json',
59
+ },
60
+ });
61
+ }
62
+ // Configuração de interceptors para debug e logging
63
+ // Apenas ativo quando DEBUG=true
64
+ if (config_js_1.config.isDebug()) {
65
+ // Interceptor para requisições - log de método e URL
66
+ this.axios.interceptors.request.use((config) => {
67
+ // Debug: API request
68
+ return config;
69
+ }, (error) => {
70
+ console.error('[Gitea API] Request error:', error);
71
+ return Promise.reject(error);
72
+ });
73
+ // Interceptor para respostas - log de status e URL
74
+ this.axios.interceptors.response.use((response) => {
75
+ // Debug: API response
76
+ return response;
77
+ }, (error) => {
78
+ console.error('[Gitea API] Response error:', error.response?.status, error.response?.data);
79
+ return Promise.reject(error);
80
+ });
81
+ }
82
+ }
83
+ /**
84
+ * Método helper para chamadas da API
85
+ *
86
+ * FUNCIONALIDADE:
87
+ * - Executa requisições HTTP para API Gitea
88
+ * - Trata erros de forma uniforme
89
+ * - Formata mensagens de erro
90
+ * - Suporta todos os métodos HTTP
91
+ *
92
+ * PARÂMETROS:
93
+ * - method: Método HTTP (GET, POST, PUT, DELETE, PATCH)
94
+ * - url: Endpoint da API
95
+ * - data: Dados para envio (opcional)
96
+ *
97
+ * TRATAMENTO DE ERROS:
98
+ * - Erros HTTP: formata com status e mensagem
99
+ * - Erros de rede: propaga erro original
100
+ * - Timeout: captura e formata adequadamente
101
+ *
102
+ * RECOMENDAÇÕES:
103
+ * - Use para todas as chamadas da API
104
+ * - Trate erros específicos por status
105
+ * - Implemente retry para erros temporários
106
+ */
107
+ async request(method, url, data) {
108
+ try {
109
+ const response = await this.axios.request({
110
+ method,
111
+ url,
112
+ data,
113
+ });
114
+ return response.data;
115
+ }
116
+ catch (error) {
117
+ if (axios_1.default.isAxiosError(error)) {
118
+ const message = error.response?.data?.message || error.message;
119
+ throw new Error(`Gitea API Error (${error.response?.status}): ${message}`);
120
+ }
121
+ throw error;
122
+ }
123
+ }
124
+ // Repository methods
125
+ async getRepositories(username, page = 1, limit = 30) {
126
+ const url = username ? `/users/${username}/repos` : '/user/repos';
127
+ return this.request('GET', `${url}?page=${page}&limit=${limit}`);
128
+ }
129
+ async getRepository(owner, repo) {
130
+ return this.request('GET', `/repos/${owner}/${repo}`);
131
+ }
132
+ async createRepository(data) {
133
+ return this.request('POST', '/user/repos', data);
134
+ }
135
+ async updateRepository(owner, repo, data) {
136
+ return this.request('PATCH', `/repos/${owner}/${repo}`, data);
137
+ }
138
+ async deleteRepository(owner, repo) {
139
+ await this.request('DELETE', `/repos/${owner}/${repo}`);
140
+ }
141
+ async forkRepository(owner, repo, organization) {
142
+ const data = organization ? { organization } : {};
143
+ return this.request('POST', `/repos/${owner}/${repo}/forks`, data);
144
+ }
145
+ async searchRepositories(query, page = 1, limit = 30) {
146
+ return this.request('GET', `/repos/search?q=${encodeURIComponent(query)}&page=${page}&limit=${limit}`);
147
+ }
148
+ // Branch methods
149
+ async getBranches(owner, repo, page = 1, limit = 30) {
150
+ return this.request('GET', `/repos/${owner}/${repo}/branches?page=${page}&limit=${limit}`);
151
+ }
152
+ async getBranch(owner, repo, branch) {
153
+ return this.request('GET', `/repos/${owner}/${repo}/branches/${branch}`);
154
+ }
155
+ async createBranch(owner, repo, branchName, fromBranch) {
156
+ const data = { new_branch_name: branchName, old_branch_name: fromBranch };
157
+ return this.request('POST', `/repos/${owner}/${repo}/branches`, data);
158
+ }
159
+ async deleteBranch(owner, repo, branch) {
160
+ await this.request('DELETE', `/repos/${owner}/${repo}/branches/${branch}`);
161
+ }
162
+ // File methods
163
+ async getFile(owner, repo, path, ref) {
164
+ const url = `/repos/${owner}/${repo}/contents/${path}${ref ? `?ref=${ref}` : ''}`;
165
+ return this.request('GET', url);
166
+ }
167
+ async getDirectoryContents(owner, repo, path = '', ref) {
168
+ const url = `/repos/${owner}/${repo}/contents/${path}${ref ? `?ref=${ref}` : ''}`;
169
+ return this.request('GET', url);
170
+ }
171
+ async createFile(owner, repo, path, data) {
172
+ return this.request('POST', `/repos/${owner}/${repo}/contents/${path}`, data);
173
+ }
174
+ async updateFile(owner, repo, path, data) {
175
+ return this.request('PUT', `/repos/${owner}/${repo}/contents/${path}`, data);
176
+ }
177
+ async deleteFile(owner, repo, path, data) {
178
+ return this.request('DELETE', `/repos/${owner}/${repo}/contents/${path}`, data);
179
+ }
180
+ // Commit methods
181
+ async getCommits(owner, repo, page = 1, limit = 30, sha) {
182
+ const params = new URLSearchParams({ page: page.toString(), limit: limit.toString() });
183
+ if (sha)
184
+ params.append('sha', sha);
185
+ return this.request('GET', `/repos/${owner}/${repo}/commits?${params}`);
186
+ }
187
+ async getCommit(owner, repo, sha) {
188
+ return this.request('GET', `/repos/${owner}/${repo}/commits/${sha}`);
189
+ }
190
+ // Issue methods
191
+ async getIssues(owner, repo, state = 'open', page = 1, limit = 30) {
192
+ return this.request('GET', `/repos/${owner}/${repo}/issues?state=${state}&page=${page}&limit=${limit}`);
193
+ }
194
+ async getIssue(owner, repo, index) {
195
+ return this.request('GET', `/repos/${owner}/${repo}/issues/${index}`);
196
+ }
197
+ async createIssue(owner, repo, data) {
198
+ return this.request('POST', `/repos/${owner}/${repo}/issues`, data);
199
+ }
200
+ async updateIssue(owner, repo, index, data) {
201
+ return this.request('PATCH', `/repos/${owner}/${repo}/issues/${index}`, data);
202
+ }
203
+ async createIssueComment(owner, repo, index, body) {
204
+ return this.request('POST', `/repos/${owner}/${repo}/issues/${index}/comments`, { body });
205
+ }
206
+ // Pull Request methods
207
+ async getPullRequests(owner, repo, state = 'open', page = 1, limit = 30) {
208
+ return this.request('GET', `/repos/${owner}/${repo}/pulls?state=${state}&page=${page}&limit=${limit}`);
209
+ }
210
+ async getPullRequest(owner, repo, index) {
211
+ return this.request('GET', `/repos/${owner}/${repo}/pulls/${index}`);
212
+ }
213
+ async createPullRequest(owner, repo, data) {
214
+ return this.request('POST', `/repos/${owner}/${repo}/pulls`, data);
215
+ }
216
+ async updatePullRequest(owner, repo, index, data) {
217
+ return this.request('PATCH', `/repos/${owner}/${repo}/pulls/${index}`, data);
218
+ }
219
+ async mergePullRequest(owner, repo, index, data) {
220
+ return this.request('POST', `/repos/${owner}/${repo}/pulls/${index}/merge`, data);
221
+ }
222
+ // Release methods
223
+ async getReleases(owner, repo, page = 1, limit = 30) {
224
+ return this.request('GET', `/repos/${owner}/${repo}/releases?page=${page}&limit=${limit}`);
225
+ }
226
+ async getRelease(owner, repo, id) {
227
+ return this.request('GET', `/repos/${owner}/${repo}/releases/${id}`);
228
+ }
229
+ async getLatestRelease(owner, repo) {
230
+ return this.request('GET', `/repos/${owner}/${repo}/releases/latest`);
231
+ }
232
+ async createRelease(owner, repo, data) {
233
+ return this.request('POST', `/repos/${owner}/${repo}/releases`, data);
234
+ }
235
+ async updateRelease(owner, repo, id, data) {
236
+ return this.request('PATCH', `/repos/${owner}/${repo}/releases/${id}`, data);
237
+ }
238
+ async deleteRelease(owner, repo, id) {
239
+ await this.request('DELETE', `/repos/${owner}/${repo}/releases/${id}`);
240
+ }
241
+ // Tag methods
242
+ async getTags(owner, repo, page = 1, limit = 30) {
243
+ return this.request('GET', `/repos/${owner}/${repo}/tags?page=${page}&limit=${limit}`);
244
+ }
245
+ async createTag(owner, repo, data) {
246
+ return this.request('POST', `/repos/${owner}/${repo}/tags`, data);
247
+ }
248
+ async deleteTag(owner, repo, tag) {
249
+ await this.request('DELETE', `/repos/${owner}/${repo}/tags/${tag}`);
250
+ }
251
+ // User methods
252
+ async getCurrentUser() {
253
+ return this.request('GET', '/user');
254
+ }
255
+ async getUser(username) {
256
+ return this.request('GET', `/users/${username}`);
257
+ }
258
+ async searchUsers(query, page = 1, limit = 30) {
259
+ return this.request('GET', `/users/search?q=${encodeURIComponent(query)}&page=${page}&limit=${limit}`);
260
+ }
261
+ async getUserOrganizations(username) {
262
+ return this.request('GET', `/users/${username}/orgs`);
263
+ }
264
+ // Webhook methods
265
+ async getWebhooks(owner, repo) {
266
+ return this.request('GET', `/repos/${owner}/${repo}/hooks`);
267
+ }
268
+ async getWebhook(owner, repo, id) {
269
+ return this.request('GET', `/repos/${owner}/${repo}/hooks/${id}`);
270
+ }
271
+ async createWebhook(owner, repo, data) {
272
+ return this.request('POST', `/repos/${owner}/${repo}/hooks`, data);
273
+ }
274
+ async updateWebhook(owner, repo, id, data) {
275
+ return this.request('PATCH', `/repos/${owner}/${repo}/hooks/${id}`, data);
276
+ }
277
+ async deleteWebhook(owner, repo, id) {
278
+ await this.request('DELETE', `/repos/${owner}/${repo}/hooks/${id}`);
279
+ }
280
+ async testWebhook(owner, repo, id) {
281
+ return this.request('POST', `/repos/${owner}/${repo}/hooks/${id}/tests`);
282
+ }
283
+ }
284
+ exports.GiteaClient = GiteaClient;
285
+ /**
286
+ * Instância global do cliente Gitea
287
+ *
288
+ * USO:
289
+ * - import { giteaClient } from './client.js';
290
+ * - const repos = await giteaClient.getRepositories();
291
+ *
292
+ * RECOMENDAÇÕES:
293
+ * - Use esta instância para todas as operações
294
+ * - Não crie novas instâncias
295
+ * - Configure antes de usar
296
+ * - Monitore uso e performance
297
+ */
298
+ exports.giteaClient = new GiteaClient();
299
299
  //# sourceMappingURL=client.js.map