@andrebuzeli/git-mcp 2.28.1 → 2.29.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 (188) 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 +74 -50
  10. package/dist/providers/error-handler.d.ts.map +1 -1
  11. package/dist/providers/error-handler.js +234 -175
  12. package/dist/providers/error-handler.js.map +1 -1
  13. package/dist/providers/gitea-provider.d.ts +97 -97
  14. package/dist/providers/gitea-provider.d.ts.map +1 -1
  15. package/dist/providers/gitea-provider.js +1015 -1001
  16. package/dist/providers/gitea-provider.js.map +1 -1
  17. package/dist/providers/github-provider.d.ts +104 -104
  18. package/dist/providers/github-provider.d.ts.map +1 -1
  19. package/dist/providers/github-provider.js +1248 -1234
  20. package/dist/providers/github-provider.js.map +1 -1
  21. package/dist/providers/index.d.ts +12 -12
  22. package/dist/providers/index.js +40 -40
  23. package/dist/providers/provider-factory.d.ts +74 -74
  24. package/dist/providers/provider-factory.d.ts.map +1 -1
  25. package/dist/providers/provider-factory.js +318 -311
  26. package/dist/providers/provider-factory.js.map +1 -1
  27. package/dist/providers/types.d.ts +318 -318
  28. package/dist/providers/types.js +6 -6
  29. package/dist/server.d.ts +76 -76
  30. package/dist/server.js +306 -306
  31. package/dist/server.js.map +1 -1
  32. package/dist/tools/git-archive.d.ts +169 -165
  33. package/dist/tools/git-archive.d.ts.map +1 -1
  34. package/dist/tools/git-archive.js +246 -233
  35. package/dist/tools/git-archive.js.map +1 -1
  36. package/dist/tools/git-branches.d.ts +434 -430
  37. package/dist/tools/git-branches.d.ts.map +1 -1
  38. package/dist/tools/git-branches.js +640 -627
  39. package/dist/tools/git-branches.js.map +1 -1
  40. package/dist/tools/git-commits.d.ts +489 -485
  41. package/dist/tools/git-commits.d.ts.map +1 -1
  42. package/dist/tools/git-commits.js +748 -735
  43. package/dist/tools/git-commits.js.map +1 -1
  44. package/dist/tools/git-config.d.ts +144 -140
  45. package/dist/tools/git-config.d.ts.map +1 -1
  46. package/dist/tools/git-config.js +281 -268
  47. package/dist/tools/git-config.js.map +1 -1
  48. package/dist/tools/git-files.d.ts +490 -486
  49. package/dist/tools/git-files.d.ts.map +1 -1
  50. package/dist/tools/git-files.js +620 -607
  51. package/dist/tools/git-files.js.map +1 -1
  52. package/dist/tools/git-initialize.d.ts +46 -42
  53. package/dist/tools/git-initialize.d.ts.map +1 -1
  54. package/dist/tools/git-initialize.js +81 -68
  55. package/dist/tools/git-initialize.js.map +1 -1
  56. package/dist/tools/git-issues.d.ts +578 -571
  57. package/dist/tools/git-issues.d.ts.map +1 -1
  58. package/dist/tools/git-issues.js +754 -740
  59. package/dist/tools/git-issues.js.map +1 -1
  60. package/dist/tools/git-pulls.d.ts +701 -694
  61. package/dist/tools/git-pulls.d.ts.map +1 -1
  62. package/dist/tools/git-pulls.js +746 -732
  63. package/dist/tools/git-pulls.js.map +1 -1
  64. package/dist/tools/git-releases.d.ts +494 -487
  65. package/dist/tools/git-releases.d.ts.map +1 -1
  66. package/dist/tools/git-releases.js +571 -557
  67. package/dist/tools/git-releases.js.map +1 -1
  68. package/dist/tools/git-remote.d.ts +142 -138
  69. package/dist/tools/git-remote.d.ts.map +1 -1
  70. package/dist/tools/git-remote.js +287 -274
  71. package/dist/tools/git-remote.js.map +1 -1
  72. package/dist/tools/git-repositories.d.ts +487 -483
  73. package/dist/tools/git-repositories.d.ts.map +1 -1
  74. package/dist/tools/git-repositories.js +653 -640
  75. package/dist/tools/git-repositories.js.map +1 -1
  76. package/dist/tools/git-reset.d.ts +134 -130
  77. package/dist/tools/git-reset.d.ts.map +1 -1
  78. package/dist/tools/git-reset.js +236 -223
  79. package/dist/tools/git-reset.js.map +1 -1
  80. package/dist/tools/git-revert.d.ts +153 -149
  81. package/dist/tools/git-revert.d.ts.map +1 -1
  82. package/dist/tools/git-revert.js +211 -198
  83. package/dist/tools/git-revert.js.map +1 -1
  84. package/dist/tools/git-stash.d.ts +144 -140
  85. package/dist/tools/git-stash.d.ts.map +1 -1
  86. package/dist/tools/git-stash.js +282 -269
  87. package/dist/tools/git-stash.js.map +1 -1
  88. package/dist/tools/git-sync.d.ts +182 -178
  89. package/dist/tools/git-sync.d.ts.map +1 -1
  90. package/dist/tools/git-sync.js +325 -312
  91. package/dist/tools/git-sync.js.map +1 -1
  92. package/dist/tools/git-tags.d.ts +418 -411
  93. package/dist/tools/git-tags.d.ts.map +1 -1
  94. package/dist/tools/git-tags.js +499 -485
  95. package/dist/tools/git-tags.js.map +1 -1
  96. package/dist/tools/git-upload-project.d.ts +5 -1
  97. package/dist/tools/git-upload-project.d.ts.map +1 -1
  98. package/dist/tools/git-upload-project.js +21 -1
  99. package/dist/tools/git-upload-project.js.map +1 -1
  100. package/dist/tools/git-webhooks.d.ts +477 -470
  101. package/dist/tools/git-webhooks.d.ts.map +1 -1
  102. package/dist/tools/git-webhooks.js +561 -543
  103. package/dist/tools/git-webhooks.js.map +1 -1
  104. package/dist/utils/git-error-analyzer.d.ts +64 -0
  105. package/dist/utils/git-error-analyzer.d.ts.map +1 -0
  106. package/dist/utils/git-error-analyzer.js +286 -0
  107. package/dist/utils/git-error-analyzer.js.map +1 -0
  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 +2 -2
  113. package/dist/tools/gh-actions.d.ts +0 -253
  114. package/dist/tools/gh-actions.d.ts.map +0 -1
  115. package/dist/tools/gh-actions.js +0 -390
  116. package/dist/tools/gh-actions.js.map +0 -1
  117. package/dist/tools/gh-analytics.d.ts +0 -264
  118. package/dist/tools/gh-analytics.d.ts.map +0 -1
  119. package/dist/tools/gh-analytics.js +0 -402
  120. package/dist/tools/gh-analytics.js.map +0 -1
  121. package/dist/tools/gh-code-review.d.ts +0 -305
  122. package/dist/tools/gh-code-review.d.ts.map +0 -1
  123. package/dist/tools/gh-code-review.js +0 -513
  124. package/dist/tools/gh-code-review.js.map +0 -1
  125. package/dist/tools/gh-codespaces.d.ts +0 -139
  126. package/dist/tools/gh-codespaces.d.ts.map +0 -1
  127. package/dist/tools/gh-codespaces.js +0 -283
  128. package/dist/tools/gh-codespaces.js.map +0 -1
  129. package/dist/tools/gh-deployments.d.ts +0 -301
  130. package/dist/tools/gh-deployments.d.ts.map +0 -1
  131. package/dist/tools/gh-deployments.js +0 -368
  132. package/dist/tools/gh-deployments.js.map +0 -1
  133. package/dist/tools/gh-gists.d.ts +0 -175
  134. package/dist/tools/gh-gists.d.ts.map +0 -1
  135. package/dist/tools/gh-gists.js +0 -322
  136. package/dist/tools/gh-gists.js.map +0 -1
  137. package/dist/tools/gh-projects.d.ts +0 -206
  138. package/dist/tools/gh-projects.d.ts.map +0 -1
  139. package/dist/tools/gh-projects.js +0 -359
  140. package/dist/tools/gh-projects.js.map +0 -1
  141. package/dist/tools/gh-security.d.ts +0 -275
  142. package/dist/tools/gh-security.d.ts.map +0 -1
  143. package/dist/tools/gh-security.js +0 -396
  144. package/dist/tools/gh-security.js.map +0 -1
  145. package/dist/tools/gh-sync.d.ts +0 -214
  146. package/dist/tools/gh-sync.d.ts.map +0 -1
  147. package/dist/tools/gh-sync.js +0 -379
  148. package/dist/tools/gh-sync.js.map +0 -1
  149. package/dist/tools/gh-workflows.d.ts +0 -291
  150. package/dist/tools/gh-workflows.d.ts.map +0 -1
  151. package/dist/tools/gh-workflows.js +0 -433
  152. package/dist/tools/gh-workflows.js.map +0 -1
  153. package/dist/tools/git-bundle.d.ts +0 -172
  154. package/dist/tools/git-bundle.d.ts.map +0 -1
  155. package/dist/tools/git-bundle.js +0 -242
  156. package/dist/tools/git-bundle.js.map +0 -1
  157. package/dist/tools/git-cherry-pick.d.ts +0 -159
  158. package/dist/tools/git-cherry-pick.d.ts.map +0 -1
  159. package/dist/tools/git-cherry-pick.js +0 -225
  160. package/dist/tools/git-cherry-pick.js.map +0 -1
  161. package/dist/tools/git-rebase.d.ts +0 -138
  162. package/dist/tools/git-rebase.d.ts.map +0 -1
  163. package/dist/tools/git-rebase.js +0 -214
  164. package/dist/tools/git-rebase.js.map +0 -1
  165. package/dist/tools/git-submodule.d.ts +0 -153
  166. package/dist/tools/git-submodule.d.ts.map +0 -1
  167. package/dist/tools/git-submodule.js +0 -290
  168. package/dist/tools/git-submodule.js.map +0 -1
  169. package/dist/tools/git-worktree.d.ts +0 -160
  170. package/dist/tools/git-worktree.d.ts.map +0 -1
  171. package/dist/tools/git-worktree.js +0 -270
  172. package/dist/tools/git-worktree.js.map +0 -1
  173. package/dist/tools/repositories.d.ts +0 -406
  174. package/dist/tools/repositories.d.ts.map +0 -1
  175. package/dist/tools/repositories.js +0 -570
  176. package/dist/tools/repositories.js.map +0 -1
  177. package/dist/tools/users.d.ts +0 -373
  178. package/dist/tools/users.d.ts.map +0 -1
  179. package/dist/tools/users.js +0 -500
  180. package/dist/tools/users.js.map +0 -1
  181. package/dist/tools/validator.d.ts +0 -171
  182. package/dist/tools/validator.d.ts.map +0 -1
  183. package/dist/tools/validator.js +0 -195
  184. package/dist/tools/validator.js.map +0 -1
  185. package/dist/tools/version-control.d.ts +0 -137
  186. package/dist/tools/version-control.d.ts.map +0 -1
  187. package/dist/tools/version-control.js +0 -165
  188. package/dist/tools/version-control.js.map +0 -1
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