@andrebuzeli/git-mcp 2.27.4 → 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 -305
  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
@@ -1,556 +1,544 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.webhooksTool = void 0;
4
- const zod_1 = require("zod");
5
- const index_js_1 = require("../providers/index.js");
6
- const user_detection_js_1 = require("../utils/user-detection.js");
7
- /**
8
- * Tool: webhooks
9
- *
10
- * DESCRIÇÃO:
11
- async handler(input: WebhooksInput): Promise<WebhooksResult> {
12
- try {
13
- const validatedInput = WebhooksInputSchema.parse(input);
14
-
15
- // Aplicar auto-detecção apenas para owner dentro do provider especificado
16
- const processedInput = await applyAutoUserDetection(validatedInput, validatedInput.provider);
17
-
18
- // Usar o provider especificado pelo usuário
19
- const provider = globalProviderFactory.getProvider(processedInput.provider);
20
-
21
- if (!provider) {
22
- throw new Error(`Provider '${processedInput.provider}' não encontrado`);
23
- }o completo de webhooks com suporte multi-provider (GitHub e Gitea)
24
- *
25
- * FUNCIONALIDADES:
26
- * - Criação de novos webhooks
27
- * - Listagem e busca de webhooks
28
- * - Obtenção de detalhes específicos
29
- * - Atualização de webhooks existentes
30
- * - Exclusão de webhooks
31
- * - Teste de webhooks
32
- * - Configuração de eventos
33
- *
34
- * USO:
35
- * - Para integração com CI/CD
36
- * - Para notificações automáticas
37
- * - Para sincronização de dados
38
- * - Para automação de workflows
39
- *
40
- * RECOMENDAÇÕES:
41
- * - Use HTTPS sempre que possível
42
- * - Mantenha secrets seguros
43
- * - Monitore falhas de entrega
44
- * - Configure apenas eventos necessários
45
- */
46
- /**
47
- * Schema de validação para entrada da tool webhooks
48
- *
49
- * VALIDAÇÕES:
50
- * - action: Ação obrigatória (create, list, get, update, delete, test)
51
- * - Parâmetros específicos por ação
52
- * - Validação de tipos e formatos
53
- *
54
- * RECOMENDAÇÕES:
55
- * - Sempre valide entrada antes de usar
56
- * - Use parâmetros opcionais adequadamente
57
- * - Documente parâmetros obrigatórios
58
- */
59
- const WebhooksInputSchema = zod_1.z.object({
60
- action: zod_1.z.enum(['create', 'list', 'get', 'update', 'delete', 'test']),
61
- // Parâmetros comuns
62
- repo: zod_1.z.string(),
63
- // Para multi-provider
64
- provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'), // Provider específico: gitea, github ou both
65
- // Para create
66
- url: zod_1.z.string().optional(),
67
- content_type: zod_1.z.enum(['json', 'form']).optional(),
68
- secret: zod_1.z.string().optional(),
69
- events: zod_1.z.array(zod_1.z.string()).optional(),
70
- active: zod_1.z.boolean().optional(),
71
- // Para get/update/delete/test
72
- webhook_id: zod_1.z.number().optional(),
73
- // Para list
74
- page: zod_1.z.number().min(1).optional(),
75
- limit: zod_1.z.number().min(1).max(100).optional(),
76
- // Para update
77
- new_url: zod_1.z.string().optional(),
78
- new_content_type: zod_1.z.enum(['json', 'form']).optional(),
79
- new_secret: zod_1.z.string().optional(),
80
- new_events: zod_1.z.array(zod_1.z.string()).optional(),
81
- new_active: zod_1.z.boolean().optional(),
82
- });
83
- /**
84
- * Schema de saída padronizado
85
- *
86
- * ESTRUTURA:
87
- * - success: Status da operação
88
- * - action: Ação executada
89
- * - message: Mensagem descritiva
90
- * - data: Dados retornados (opcional)
91
- * - error: Detalhes do erro (opcional)
92
- */
93
- const WebhooksResultSchema = zod_1.z.object({
94
- success: zod_1.z.boolean(),
95
- action: zod_1.z.string(),
96
- message: zod_1.z.string(),
97
- data: zod_1.z.any().optional(),
98
- error: zod_1.z.string().optional()
99
- });
100
- /**
101
- * Tool: webhooks
102
- *
103
- * DESCRIÇÃO:
104
- * Gerenciamento completo de webhooks Gitea com múltiplas ações
105
- *
106
- * ACTIONS DISPONÍVEIS:
107
- *
108
- * 1. create - Criar novo webhook
109
- * Parâmetros:
110
- * - owner (obrigatório): Proprietário do repositório
111
- * - repo (obrigatório): Nome do repositório
112
- * - url (obrigatório): URL de destino do webhook
113
- * - content_type (opcional): Tipo de conteúdo (json, form) - padrão: json
114
- * - secret (opcional): Secret para assinatura
115
- * - events (opcional): Array de eventos a serem monitorados
116
- * - active (opcional): Se webhook está ativo (padrão: true)
117
- *
118
- * 2. list - Listar webhooks
119
- * Parâmetros:
120
- * - owner (obrigatório): Proprietário do repositório
121
- * - repo (obrigatório): Nome do repositório
122
- * - page (opcional): Página da listagem (padrão: 1)
123
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
124
- *
125
- * 3. get - Obter detalhes do webhook
126
- * Parâmetros:
127
- * - owner (obrigatório): Proprietário do repositório
128
- * - repo (obrigatório): Nome do repositório
129
- * - webhook_id (obrigatório): ID do webhook
130
- *
131
- * 4. update - Atualizar webhook existente
132
- * Parâmetros:
133
- * - owner (obrigatório): Proprietário do repositório
134
- * - repo (obrigatório): Nome do repositório
135
- * - webhook_id (obrigatório): ID do webhook
136
- * - new_url (opcional): Nova URL
137
- * - new_content_type (opcional): Novo tipo de conteúdo
138
- * - new_secret (opcional): Novo secret
139
- * - new_events (opcional): Novos eventos
140
- * - new_active (opcional): Novo status ativo
141
- *
142
- * 5. delete - Deletar webhook
143
- * Parâmetros:
144
- * - owner (obrigatório): Proprietário do repositório
145
- * - repo (obrigatório): Nome do repositório
146
- * - webhook_id (obrigatório): ID do webhook
147
- *
148
- * 6. test - Testar webhook
149
- * Parâmetros:
150
- * - owner (obrigatório): Proprietário do repositório
151
- * - repo (obrigatório): Nome do repositório
152
- * - webhook_id (obrigatório): ID do webhook
153
- *
154
- * RECOMENDAÇÕES DE USO:
155
- * - Use URLs seguras (HTTPS)
156
- * - Configure eventos adequadamente
157
- * - Monitore falhas de entrega
158
- * - Mantenha secrets seguros
159
- * - Teste webhooks antes de ativar
160
- * - Configure retry adequado
161
- * - Monitore logs de entrega
162
- */
163
- exports.webhooksTool = {
164
- name: 'git-webhooks',
165
- description: 'tool: Gerencia webhooks Git para automação e integrações\n──────────────\naction create: cria novo webhook\naction create requires: repo, url, content_type, secret, events, active, provider\n───────────────\naction list: lista webhooks do repositório\naction list requires: repo, page, limit, provider\n───────────────\naction get: obtém detalhes de webhook\naction get requires: repo, webhook_id, provider\n───────────────\naction update: atualiza webhook existente\naction update requires: repo, webhook_id, new_url, new_content_type, new_secret, new_events, new_active, provider\n───────────────\naction delete: remove webhook\naction delete requires: repo, webhook_id, provider\n───────────────\naction test: testa webhook\naction test requires: repo, webhook_id, provider',
166
- inputSchema: {
167
- type: 'object',
168
- properties: {
169
- action: {
170
- type: 'string',
171
- enum: ['create', 'list', 'get', 'update', 'delete', 'test'],
172
- description: 'Action to perform on webhooks'
173
- },
174
- repo: { type: 'string', description: 'Repository name' },
175
- provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
176
- url: { type: 'string', description: 'Webhook URL' },
177
- content_type: { type: 'string', enum: ['json', 'form'], description: 'Content type' },
178
- secret: { type: 'string', description: 'Webhook secret' },
179
- events: { type: 'array', items: { type: 'string' }, description: 'Webhook events' },
180
- active: { type: 'boolean', description: 'Webhook active status' },
181
- webhook_id: { type: 'number', description: 'Webhook ID' },
182
- page: { type: 'number', description: 'Page number', minimum: 1 },
183
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
184
- new_url: { type: 'string', description: 'New webhook URL' },
185
- new_content_type: { type: 'string', enum: ['json', 'form'], description: 'New content type' },
186
- new_secret: { type: 'string', description: 'New webhook secret' },
187
- new_events: { type: 'array', items: { type: 'string' }, description: 'New webhook events' },
188
- new_active: { type: 'boolean', description: 'New webhook active status' }
189
- },
190
- required: ['action', 'repo', 'provider']
191
- },
192
- /**
193
- * Handler principal da tool webhooks
194
- *
195
- * FUNCIONALIDADE:
196
- * - Valida entrada usando Zod schema
197
- * - Roteia para método específico baseado na ação
198
- * - Trata erros de forma uniforme
199
- * - Retorna resultado padronizado
200
- *
201
- * FLUXO:
202
- * 1. Validação de entrada
203
- * 2. Seleção do provider
204
- * 3. Roteamento por ação
205
- * 4. Execução do método específico
206
- * 5. Tratamento de erros
207
- * 6. Retorno de resultado
208
- *
209
- * TRATAMENTO DE ERROS:
210
- * - Validação: erro de schema
211
- * - Execução: erro da operação
212
- * - Roteamento: ação não suportada
213
- *
214
- * RECOMENDAÇÕES:
215
- * - Sempre valide entrada antes de processar
216
- * - Trate erros específicos adequadamente
217
- * - Log detalhes de erro para debug
218
- * - Retorne mensagens de erro úteis
219
- */
220
- async handler(input) {
221
- try {
222
- const validatedInput = WebhooksInputSchema.parse(input);
223
- // Apply automatic user/owner detection from configured tokens
224
- const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider || 'default');
225
- // Seleciona o provider baseado na entrada ou usa o padrão
226
- const provider = processedInput.provider
227
- ? index_js_1.globalProviderFactory.getProvider(processedInput.provider)
228
- : index_js_1.globalProviderFactory.getDefaultProvider();
229
- if (!provider) {
230
- throw new Error('Provider não encontrado ou não configurado');
231
- }
232
- // Obter o owner do provider
233
- const owner = (await provider.getCurrentUser()).login;
234
- switch (processedInput.action) {
235
- case 'create':
236
- return await this.createWebhook(processedInput, provider, owner);
237
- case 'list':
238
- return await this.listWebhooks(processedInput, provider, owner);
239
- case 'get':
240
- return await this.getWebhook(processedInput, provider, owner);
241
- case 'update':
242
- return await this.updateWebhook(processedInput, provider, owner);
243
- case 'delete':
244
- return await this.deleteWebhook(processedInput, provider, owner);
245
- case 'test':
246
- return await this.testWebhook(processedInput, provider, owner);
247
- default:
248
- throw new Error(`Ação não suportada: ${processedInput.action}`);
249
- }
250
- }
251
- catch (error) {
252
- return {
253
- success: false,
254
- action: input.action,
255
- message: 'Erro na operação de webhooks',
256
- error: error instanceof Error ? error.message : String(error)
257
- };
258
- }
259
- },
260
- /**
261
- * Cria um novo webhook no repositório
262
- *
263
- * FUNCIONALIDADE:
264
- * - Cria webhook com URL e configurações
265
- * - Suporta diferentes tipos de conteúdo
266
- * - Permite configuração de eventos
267
- *
268
- * PARÂMETROS OBRIGATÓRIOS:
269
- * - owner: Proprietário do repositório
270
- * - repo: Nome do repositório
271
- * - url: URL de destino do webhook
272
- *
273
- * PARÂMETROS OPCIONAIS:
274
- * - content_type: Tipo de conteúdo (json, form) - padrão: json
275
- * - secret: Secret para assinatura
276
- * - events: Array de eventos a serem monitorados
277
- * - active: Se webhook está ativo (padrão: true)
278
- *
279
- * VALIDAÇÕES:
280
- * - Todos os parâmetros obrigatórios
281
- * - URL deve ser válida e acessível
282
- * - Usuário deve ter permissão de escrita
283
- *
284
- * RECOMENDAÇÕES:
285
- * - Use URLs seguras (HTTPS)
286
- * - Configure eventos adequadamente
287
- * - Mantenha secrets seguros
288
- * - Teste webhook antes de ativar
289
- */
290
- async createWebhook(params, provider, owner) {
291
- try {
292
- if (!!params.repo || !params.url) {
293
- throw new Error('repo e url são obrigatórios');
294
- }
295
- const webhookData = {
296
- url: params.url,
297
- content_type: params.content_type || 'json',
298
- secret: params.secret || '',
299
- events: params.events || ['push'],
300
- active: params.active !== undefined ? params.active : true
301
- };
302
- const webhook = await provider.createWebhook(owner, params.repo, params.url, params.events || ['push'], params.secret);
303
- return {
304
- success: true,
305
- action: 'create',
306
- message: `Webhook criado com sucesso para '${owner}/${params.repo}'`,
307
- data: webhook
308
- };
309
- }
310
- catch (error) {
311
- throw new Error(`Falha ao criar webhook: ${error instanceof Error ? error.message : String(error)}`);
312
- }
313
- },
314
- /**
315
- * Lista webhooks do repositório
316
- *
317
- * FUNCIONALIDADE:
318
- * - Lista webhooks com paginação
319
- * - Retorna informações básicas de cada webhook
320
- * - Inclui status ativo e eventos configurados
321
- *
322
- * PARÂMETROS OBRIGATÓRIOS:
323
- * - owner: Proprietário do repositório
324
- * - repo: Nome do repositório
325
- *
326
- * PARÂMETROS OPCIONAIS:
327
- * - page: Página da listagem (padrão: 1)
328
- * - limit: Itens por página (padrão: 30, máximo: 100)
329
- *
330
- * VALIDAÇÕES:
331
- * - e repo obrigatórios
332
- * - Page deve ser >= 1
333
- * - Limit deve ser entre 1 e 100
334
- *
335
- * RECOMENDAÇÕES:
336
- * - Use paginação para repositórios com muitos webhooks
337
- * - Monitore número total de webhooks
338
- * - Verifique status ativo de cada webhook
339
- * - Mantenha webhooks organizados
340
- */
341
- async listWebhooks(params, provider, owner) {
342
- try {
343
- if (!params.repo) {
344
- throw new Error('e repo são obrigatórios');
345
- }
346
- const page = params.page || 1;
347
- const limit = params.limit || 30;
348
- const webhooks = await provider.listWebhooks((await provider.getCurrentUser()).login, params.repo, page, limit);
349
- return {
350
- success: true,
351
- action: 'list',
352
- message: `${webhooks.length} webhooks encontrados`,
353
- data: {
354
- webhooks,
355
- page,
356
- limit,
357
- total: webhooks.length
358
- }
359
- };
360
- }
361
- catch (error) {
362
- throw new Error(`Falha ao listar webhooks: ${error instanceof Error ? error.message : String(error)}`);
363
- }
364
- },
365
- /**
366
- * Obtém detalhes de um webhook específico
367
- *
368
- * FUNCIONALIDADE:
369
- * - Retorna informações completas do webhook
370
- * - Inclui URL, tipo de conteúdo, eventos e status
371
- * - Mostra configurações de segurança
372
- *
373
- * PARÂMETROS OBRIGATÓRIOS:
374
- * - owner: Proprietário do repositório
375
- * - repo: Nome do repositório
376
- * - webhook_id: ID do webhook
377
- *
378
- * VALIDAÇÕES:
379
- * - Todos os parâmetros obrigatórios
380
- * - Webhook deve existir no repositório
381
- * - ID deve ser válido
382
- *
383
- * RECOMENDAÇÕES:
384
- * - Use para obter detalhes completos
385
- * - Verifique configurações de segurança
386
- * - Analise eventos configurados
387
- * - Monitore status ativo
388
- */
389
- async getWebhook(params, provider, owner) {
390
- try {
391
- if (!!params.repo || !params.webhook_id) {
392
- throw new Error('repo e webhook_id são obrigatórios');
393
- }
394
- const webhook = await provider.getWebhook((await provider.getCurrentUser()).login, params.repo, params.webhook_id);
395
- return {
396
- success: true,
397
- action: 'get',
398
- message: `Webhook #${params.webhook_id} obtido com sucesso`,
399
- data: webhook
400
- };
401
- }
402
- catch (error) {
403
- throw new Error(`Falha ao obter webhook: ${error instanceof Error ? error.message : String(error)}`);
404
- }
405
- },
406
- /**
407
- * Atualiza um webhook existente
408
- *
409
- * FUNCIONALIDADE:
410
- * - Atualiza campos do webhook
411
- * - Suporta mudança de URL e eventos
412
- * - Permite alteração de status ativo
413
- *
414
- * PARÂMETROS OBRIGATÓRIOS:
415
- * - owner: Proprietário do repositório
416
- * - repo: Nome do repositório
417
- * - webhook_id: ID do webhook
418
- *
419
- * PARÂMETROS OPCIONAIS:
420
- * - new_url: Nova URL
421
- * - new_content_type: Novo tipo de conteúdo
422
- * - new_secret: Novo secret
423
- * - new_events: Novos eventos
424
- * - new_active: Novo status ativo
425
- *
426
- * VALIDAÇÕES:
427
- * - Todos os parâmetros obrigatórios
428
- * - Webhook deve existir
429
- * - Pelo menos um campo deve ser atualizado
430
- *
431
- * RECOMENDAÇÕES:
432
- * - Atualize apenas campos necessários
433
- * - Use mensagens de commit descritivas
434
- * - Documente mudanças importantes
435
- * - Teste webhook após atualização
436
- */
437
- async updateWebhook(params, provider, owner) {
438
- try {
439
- if (!!params.repo || !params.webhook_id) {
440
- throw new Error('repo e webhook_id são obrigatórios');
441
- }
442
- const updateData = {};
443
- if (params.new_url)
444
- updateData.url = params.new_url;
445
- if (params.new_content_type)
446
- updateData.content_type = params.new_content_type;
447
- if (params.new_secret)
448
- updateData.secret = params.new_secret;
449
- if (params.new_events)
450
- updateData.events = params.new_events;
451
- if (params.new_active !== undefined)
452
- updateData.active = params.new_active;
453
- if (Object.keys(updateData).length === 0) {
454
- throw new Error('Nenhum campo para atualizar foi fornecido');
455
- }
456
- const webhook = await provider.updateWebhook((await provider.getCurrentUser()).login, params.repo, params.webhook_id, updateData);
457
- return {
458
- success: true,
459
- action: 'update',
460
- message: `Webhook #${params.webhook_id} atualizado com sucesso`,
461
- data: webhook
462
- };
463
- }
464
- catch (error) {
465
- throw new Error(`Falha ao atualizar webhook: ${error instanceof Error ? error.message : String(error)}`);
466
- }
467
- },
468
- /**
469
- * Deleta um webhook do repositório
470
- *
471
- * FUNCIONALIDADE:
472
- * - Remove webhook especificado
473
- * - Confirma exclusão bem-sucedida
474
- * - Limpa configurações associadas
475
- *
476
- * PARÂMETROS OBRIGATÓRIOS:
477
- * - owner: Proprietário do repositório
478
- * - repo: Nome do repositório
479
- * - webhook_id: ID do webhook
480
- *
481
- * VALIDAÇÕES:
482
- * - Todos os parâmetros obrigatórios
483
- * - Webhook deve existir
484
- * - Usuário deve ter permissão de exclusão
485
- *
486
- * RECOMENDAÇÕES:
487
- * - Confirme exclusão antes de executar
488
- * - Verifique se webhook não está sendo usado
489
- * - Mantenha backup se necessário
490
- * - Documente motivo da exclusão
491
- */
492
- async deleteWebhook(params, provider, owner) {
493
- try {
494
- if (!!params.repo || !params.webhook_id) {
495
- throw new Error('repo e webhook_id são obrigatórios');
496
- }
497
- await provider.deleteWebhook((await provider.getCurrentUser()).login, params.repo, params.webhook_id);
498
- return {
499
- success: true,
500
- action: 'delete',
501
- message: `Webhook #${params.webhook_id} deletado com sucesso`,
502
- data: { deleted: true }
503
- };
504
- }
505
- catch (error) {
506
- throw new Error(`Falha ao deletar webhook: ${error instanceof Error ? error.message : String(error)}`);
507
- }
508
- },
509
- /**
510
- * Testa um webhook existente
511
- *
512
- * FUNCIONALIDADE:
513
- * - Envia payload de teste para webhook
514
- * - Verifica conectividade e resposta
515
- * - Retorna resultado do teste
516
- *
517
- * PARÂMETROS OBRIGATÓRIOS:
518
- * - owner: Proprietário do repositório
519
- * - repo: Nome do repositório
520
- * - webhook_id: ID do webhook
521
- *
522
- * VALIDAÇÕES:
523
- * - Todos os parâmetros obrigatórios
524
- * - Webhook deve existir
525
- * - Webhook deve estar ativo
526
- *
527
- * RECOMENDAÇÕES:
528
- * - Teste webhooks após criação
529
- * - Monitore respostas de teste
530
- * - Verifique logs de entrega
531
- * - Configure retry adequado
532
- */
533
- async testWebhook(params, provider, owner) {
534
- try {
535
- if (!!params.repo || !params.webhook_id) {
536
- throw new Error('repo e webhook_id são obrigatórios');
537
- }
538
- // Implementar testWebhook
539
- const result = {
540
- success: true,
541
- message: 'Webhook testado com sucesso',
542
- note: 'Funcionalidade testWebhook será implementada'
543
- };
544
- return {
545
- success: true,
546
- action: 'test',
547
- message: `Webhook #${params.webhook_id} testado com sucesso`,
548
- data: result
549
- };
550
- }
551
- catch (error) {
552
- throw new Error(`Falha ao testar webhook: ${error instanceof Error ? error.message : String(error)}`);
553
- }
554
- }
555
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.webhooksTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const index_ts_1 = require("../providers/index.ts");
6
+ const user_detection_ts_1 = require("../utils/user-detection.ts");
7
+ /**
8
+ * Tool: webhooks
9
+ *
10
+ * DESCRIÇÃO:
11
+ * Gerenciamento completo de webhooks com suporte multi-provider (GitHub e Gitea)
12
+ *
13
+ * FUNCIONALIDADES:
14
+ * - Criação de novos webhooks
15
+ * - Listagem e busca de webhooks
16
+ * - Obtenção de detalhes específicos
17
+ * - Atualização de webhooks existentes
18
+ * - Exclusão de webhooks
19
+ * - Teste de webhooks
20
+ * - Configuração de eventos
21
+ *
22
+ * USO:
23
+ * - Para integração com CI/CD
24
+ * - Para notificações automáticas
25
+ * - Para sincronização de dados
26
+ * - Para automação de workflows
27
+ *
28
+ * RECOMENDAÇÕES:
29
+ * - Use HTTPS sempre que possível
30
+ * - Mantenha secrets seguros
31
+ * - Monitore falhas de entrega
32
+ * - Configure apenas eventos necessários
33
+ */
34
+ /**
35
+ * Schema de validação para entrada da tool webhooks
36
+ *
37
+ * VALIDAÇÕES:
38
+ * - action: Ação obrigatória (create, list, get, update, delete, test)
39
+ * - Parâmetros específicos por ação
40
+ * - Validação de tipos e formatos
41
+ *
42
+ * RECOMENDAÇÕES:
43
+ * - Sempre valide entrada antes de usar
44
+ * - Use parâmetros opcionais adequadamente
45
+ * - Documente parâmetros obrigatórios
46
+ */
47
+ const WebhooksInputSchema = zod_1.z.object({
48
+ action: zod_1.z.enum(['create', 'list', 'get', 'update', 'delete', 'test']),
49
+ // Parâmetros comuns
50
+ repo: zod_1.z.string(),
51
+ // Para multi-provider
52
+ provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'), // Provider específico: gitea, github ou both
53
+ // Para create
54
+ url: zod_1.z.string().optional(),
55
+ content_type: zod_1.z.enum(['json', 'form']).optional(),
56
+ secret: zod_1.z.string().optional(),
57
+ events: zod_1.z.array(zod_1.z.string()).optional(),
58
+ active: zod_1.z.boolean().optional(),
59
+ // Para get/update/delete/test
60
+ webhook_id: zod_1.z.number().optional(),
61
+ // Para list
62
+ page: zod_1.z.number().min(1).optional(),
63
+ limit: zod_1.z.number().min(1).max(100).optional(),
64
+ // Para update
65
+ new_url: zod_1.z.string().optional(),
66
+ new_content_type: zod_1.z.enum(['json', 'form']).optional(),
67
+ new_secret: zod_1.z.string().optional(),
68
+ new_events: zod_1.z.array(zod_1.z.string()).optional(),
69
+ new_active: zod_1.z.boolean().optional(),
70
+ });
71
+ /**
72
+ * Schema de saída padronizado
73
+ *
74
+ * ESTRUTURA:
75
+ * - success: Status da operação
76
+ * - action: Ação executada
77
+ * - message: Mensagem descritiva
78
+ * - data: Dados retornados (opcional)
79
+ * - error: Detalhes do erro (opcional)
80
+ */
81
+ const WebhooksResultSchema = zod_1.z.object({
82
+ success: zod_1.z.boolean(),
83
+ action: zod_1.z.string(),
84
+ message: zod_1.z.string(),
85
+ data: zod_1.z.any().optional(),
86
+ error: zod_1.z.string().optional()
87
+ });
88
+ /**
89
+ * Tool: webhooks
90
+ *
91
+ * DESCRIÇÃO:
92
+ * Gerenciamento completo de webhooks Gitea com múltiplas ações
93
+ *
94
+ * ACTIONS DISPONÍVEIS:
95
+ *
96
+ * 1. create - Criar novo webhook
97
+ * Parâmetros:
98
+ * - owner (obrigatório): Proprietário do repositório
99
+ * - repo (obrigatório): Nome do repositório
100
+ * - url (obrigatório): URL de destino do webhook
101
+ * - content_type (opcional): Tipo de conteúdo (json, form) - padrão: json
102
+ * - secret (opcional): Secret para assinatura
103
+ * - events (opcional): Array de eventos a serem monitorados
104
+ * - active (opcional): Se webhook está ativo (padrão: true)
105
+ *
106
+ * 2. list - Listar webhooks
107
+ * Parâmetros:
108
+ * - owner (obrigatório): Proprietário do repositório
109
+ * - repo (obrigatório): Nome do repositório
110
+ * - page (opcional): Página da listagem (padrão: 1)
111
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
112
+ *
113
+ * 3. get - Obter detalhes do webhook
114
+ * Parâmetros:
115
+ * - owner (obrigatório): Proprietário do repositório
116
+ * - repo (obrigatório): Nome do repositório
117
+ * - webhook_id (obrigatório): ID do webhook
118
+ *
119
+ * 4. update - Atualizar webhook existente
120
+ * Parâmetros:
121
+ * - owner (obrigatório): Proprietário do repositório
122
+ * - repo (obrigatório): Nome do repositório
123
+ * - webhook_id (obrigatório): ID do webhook
124
+ * - new_url (opcional): Nova URL
125
+ * - new_content_type (opcional): Novo tipo de conteúdo
126
+ * - new_secret (opcional): Novo secret
127
+ * - new_events (opcional): Novos eventos
128
+ * - new_active (opcional): Novo status ativo
129
+ *
130
+ * 5. delete - Deletar webhook
131
+ * Parâmetros:
132
+ * - owner (obrigatório): Proprietário do repositório
133
+ * - repo (obrigatório): Nome do repositório
134
+ * - webhook_id (obrigatório): ID do webhook
135
+ *
136
+ * 6. test - Testar webhook
137
+ * Parâmetros:
138
+ * - owner (obrigatório): Proprietário do repositório
139
+ * - repo (obrigatório): Nome do repositório
140
+ * - webhook_id (obrigatório): ID do webhook
141
+ *
142
+ * RECOMENDAÇÕES DE USO:
143
+ * - Use URLs seguras (HTTPS)
144
+ * - Configure eventos adequadamente
145
+ * - Monitore falhas de entrega
146
+ * - Mantenha secrets seguros
147
+ * - Teste webhooks antes de ativar
148
+ * - Configure retry adequado
149
+ * - Monitore logs de entrega
150
+ */
151
+ exports.webhooksTool = {
152
+ name: 'git-webhooks',
153
+ description: 'tool: Gerencia webhooks Git para automação e integrações\n──────────────\naction create: cria novo webhook\naction create requires: repo, url, content_type, secret, events, active, provider\n───────────────\naction list: lista webhooks do repositório\naction list requires: repo, page, limit, provider\n───────────────\naction get: obtém detalhes de webhook\naction get requires: repo, webhook_id, provider\n───────────────\naction update: atualiza webhook existente\naction update requires: repo, webhook_id, new_url, new_content_type, new_secret, new_events, new_active, provider\n───────────────\naction delete: remove webhook\naction delete requires: repo, webhook_id, provider\n───────────────\naction test: testa webhook\naction test requires: repo, webhook_id, provider',
154
+ inputSchema: {
155
+ type: 'object',
156
+ properties: {
157
+ action: {
158
+ type: 'string',
159
+ enum: ['create', 'list', 'get', 'update', 'delete', 'test'],
160
+ description: 'Action to perform on webhooks'
161
+ },
162
+ repo: { type: 'string', description: 'Repository name' },
163
+ provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
164
+ url: { type: 'string', description: 'Webhook URL' },
165
+ content_type: { type: 'string', enum: ['json', 'form'], description: 'Content type' },
166
+ secret: { type: 'string', description: 'Webhook secret' },
167
+ events: { type: 'array', items: { type: 'string' }, description: 'Webhook events' },
168
+ active: { type: 'boolean', description: 'Webhook active status' },
169
+ webhook_id: { type: 'number', description: 'Webhook ID' },
170
+ page: { type: 'number', description: 'Page number', minimum: 1 },
171
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
172
+ new_url: { type: 'string', description: 'New webhook URL' },
173
+ new_content_type: { type: 'string', enum: ['json', 'form'], description: 'New content type' },
174
+ new_secret: { type: 'string', description: 'New webhook secret' },
175
+ new_events: { type: 'array', items: { type: 'string' }, description: 'New webhook events' },
176
+ new_active: { type: 'boolean', description: 'New webhook active status' }
177
+ },
178
+ required: ['action', 'repo', 'provider']
179
+ },
180
+ /**
181
+ * Handler principal da tool webhooks
182
+ *
183
+ * FUNCIONALIDADE:
184
+ * - Valida entrada usando Zod schema
185
+ * - Roteia para método específico baseado na ação
186
+ * - Trata erros de forma uniforme
187
+ * - Retorna resultado padronizado
188
+ *
189
+ * FLUXO:
190
+ * 1. Validação de entrada
191
+ * 2. Seleção do provider
192
+ * 3. Roteamento por ação
193
+ * 4. Execução do método específico
194
+ * 5. Tratamento de erros
195
+ * 6. Retorno de resultado
196
+ *
197
+ * TRATAMENTO DE ERROS:
198
+ * - Validação: erro de schema
199
+ * - Execução: erro da operação
200
+ * - Roteamento: ação não suportada
201
+ *
202
+ * RECOMENDAÇÕES:
203
+ * - Sempre valide entrada antes de processar
204
+ * - Trate erros específicos adequadamente
205
+ * - Log detalhes de erro para debug
206
+ * - Retorne mensagens de erro úteis
207
+ */
208
+ async handler(input) {
209
+ try {
210
+ const validatedInput = WebhooksInputSchema.parse(input);
211
+ // Apply automatic user/owner detection from configured tokens
212
+ const processedInput = await (0, user_detection_ts_1.applyAutoUserDetection)(validatedInput, validatedInput.provider || 'default');
213
+ // Seleciona o provider baseado na entrada ou usa o padrão
214
+ const provider = processedInput.provider
215
+ ? index_ts_1.globalProviderFactory.getProvider(processedInput.provider)
216
+ : index_ts_1.globalProviderFactory.getDefaultProvider();
217
+ if (!provider) {
218
+ throw new Error('Provider não encontrado ou não configurado');
219
+ }
220
+ // Obter o owner do provider
221
+ const owner = (await provider.getCurrentUser()).login;
222
+ switch (processedInput.action) {
223
+ case 'create':
224
+ return await this.createWebhook(processedInput, provider, owner);
225
+ case 'list':
226
+ return await this.listWebhooks(processedInput, provider, owner);
227
+ case 'get':
228
+ return await this.getWebhook(processedInput, provider, owner);
229
+ case 'update':
230
+ return await this.updateWebhook(processedInput, provider, owner);
231
+ case 'delete':
232
+ return await this.deleteWebhook(processedInput, provider, owner);
233
+ case 'test':
234
+ return await this.testWebhook(processedInput, provider, owner);
235
+ default:
236
+ throw new Error(`Ação não suportada: ${processedInput.action}`);
237
+ }
238
+ }
239
+ catch (error) {
240
+ return {
241
+ success: false,
242
+ action: input.action,
243
+ message: 'Erro na operação de webhooks',
244
+ error: error instanceof Error ? error.message : String(error)
245
+ };
246
+ }
247
+ },
248
+ /**
249
+ * Cria um novo webhook no repositório
250
+ *
251
+ * FUNCIONALIDADE:
252
+ * - Cria webhook com URL e configurações
253
+ * - Suporta diferentes tipos de conteúdo
254
+ * - Permite configuração de eventos
255
+ *
256
+ * PARÂMETROS OBRIGATÓRIOS:
257
+ * - owner: Proprietário do repositório
258
+ * - repo: Nome do repositório
259
+ * - url: URL de destino do webhook
260
+ *
261
+ * PARÂMETROS OPCIONAIS:
262
+ * - content_type: Tipo de conteúdo (json, form) - padrão: json
263
+ * - secret: Secret para assinatura
264
+ * - events: Array de eventos a serem monitorados
265
+ * - active: Se webhook está ativo (padrão: true)
266
+ *
267
+ * VALIDAÇÕES:
268
+ * - Todos os parâmetros obrigatórios
269
+ * - URL deve ser válida e acessível
270
+ * - Usuário deve ter permissão de escrita
271
+ *
272
+ * RECOMENDAÇÕES:
273
+ * - Use URLs seguras (HTTPS)
274
+ * - Configure eventos adequadamente
275
+ * - Mantenha secrets seguros
276
+ * - Teste webhook antes de ativar
277
+ */
278
+ async createWebhook(params, provider, owner) {
279
+ try {
280
+ if (!params.repo || !params.url) {
281
+ throw new Error('repo e url são obrigatórios');
282
+ }
283
+ const webhookData = {
284
+ url: params.url,
285
+ content_type: params.content_type || 'json',
286
+ secret: params.secret || '',
287
+ events: params.events || ['push'],
288
+ active: params.active !== undefined ? params.active : true
289
+ };
290
+ const webhook = await provider.createWebhook(owner, params.repo, params.url, params.events || ['push'], params.secret);
291
+ return {
292
+ success: true,
293
+ action: 'create',
294
+ message: `Webhook criado com sucesso para '${owner}/${params.repo}'`,
295
+ data: webhook
296
+ };
297
+ }
298
+ catch (error) {
299
+ throw new Error(`Falha ao criar webhook: ${error instanceof Error ? error.message : String(error)}`);
300
+ }
301
+ },
302
+ /**
303
+ * Lista webhooks do repositório
304
+ *
305
+ * FUNCIONALIDADE:
306
+ * - Lista webhooks com paginação
307
+ * - Retorna informações básicas de cada webhook
308
+ * - Inclui status ativo e eventos configurados
309
+ *
310
+ * PARÂMETROS OBRIGATÓRIOS:
311
+ * - owner: Proprietário do repositório
312
+ * - repo: Nome do repositório
313
+ *
314
+ * PARÂMETROS OPCIONAIS:
315
+ * - page: Página da listagem (padrão: 1)
316
+ * - limit: Itens por página (padrão: 30, máximo: 100)
317
+ *
318
+ * VALIDAÇÕES:
319
+ * - e repo obrigatórios
320
+ * - Page deve ser >= 1
321
+ * - Limit deve ser entre 1 e 100
322
+ *
323
+ * RECOMENDAÇÕES:
324
+ * - Use paginação para repositórios com muitos webhooks
325
+ * - Monitore número total de webhooks
326
+ * - Verifique status ativo de cada webhook
327
+ * - Mantenha webhooks organizados
328
+ */
329
+ async listWebhooks(params, provider, owner) {
330
+ try {
331
+ if (!params.repo) {
332
+ throw new Error('owner e repo são obrigatórios');
333
+ }
334
+ const page = params.page || 1;
335
+ const limit = params.limit || 30;
336
+ const webhooks = await provider.listWebhooks((await provider.getCurrentUser()).login, params.repo, page, limit);
337
+ return {
338
+ success: true,
339
+ action: 'list',
340
+ message: `${webhooks.length} webhooks encontrados`,
341
+ data: {
342
+ webhooks,
343
+ page,
344
+ limit,
345
+ total: webhooks.length
346
+ }
347
+ };
348
+ }
349
+ catch (error) {
350
+ throw new Error(`Falha ao listar webhooks: ${error instanceof Error ? error.message : String(error)}`);
351
+ }
352
+ },
353
+ /**
354
+ * Obtém detalhes de um webhook específico
355
+ *
356
+ * FUNCIONALIDADE:
357
+ * - Retorna informações completas do webhook
358
+ * - Inclui URL, tipo de conteúdo, eventos e status
359
+ * - Mostra configurações de segurança
360
+ *
361
+ * PARÂMETROS OBRIGATÓRIOS:
362
+ * - owner: Proprietário do repositório
363
+ * - repo: Nome do repositório
364
+ * - webhook_id: ID do webhook
365
+ *
366
+ * VALIDAÇÕES:
367
+ * - Todos os parâmetros obrigatórios
368
+ * - Webhook deve existir no repositório
369
+ * - ID deve ser válido
370
+ *
371
+ * RECOMENDAÇÕES:
372
+ * - Use para obter detalhes completos
373
+ * - Verifique configurações de segurança
374
+ * - Analise eventos configurados
375
+ * - Monitore status ativo
376
+ */
377
+ async getWebhook(params, provider, owner) {
378
+ try {
379
+ if (!params.repo || !params.webhook_id) {
380
+ throw new Error('repo e webhook_id são obrigatórios');
381
+ }
382
+ const webhook = await provider.getWebhook((await provider.getCurrentUser()).login, params.repo, params.webhook_id);
383
+ return {
384
+ success: true,
385
+ action: 'get',
386
+ message: `Webhook #${params.webhook_id} obtido com sucesso`,
387
+ data: webhook
388
+ };
389
+ }
390
+ catch (error) {
391
+ throw new Error(`Falha ao obter webhook: ${error instanceof Error ? error.message : String(error)}`);
392
+ }
393
+ },
394
+ /**
395
+ * Atualiza um webhook existente
396
+ *
397
+ * FUNCIONALIDADE:
398
+ * - Atualiza campos do webhook
399
+ * - Suporta mudança de URL e eventos
400
+ * - Permite alteração de status ativo
401
+ *
402
+ * PARÂMETROS OBRIGATÓRIOS:
403
+ * - owner: Proprietário do repositório
404
+ * - repo: Nome do repositório
405
+ * - webhook_id: ID do webhook
406
+ *
407
+ * PARÂMETROS OPCIONAIS:
408
+ * - new_url: Nova URL
409
+ * - new_content_type: Novo tipo de conteúdo
410
+ * - new_secret: Novo secret
411
+ * - new_events: Novos eventos
412
+ * - new_active: Novo status ativo
413
+ *
414
+ * VALIDAÇÕES:
415
+ * - Todos os parâmetros obrigatórios
416
+ * - Webhook deve existir
417
+ * - Pelo menos um campo deve ser atualizado
418
+ *
419
+ * RECOMENDAÇÕES:
420
+ * - Atualize apenas campos necessários
421
+ * - Use mensagens de commit descritivas
422
+ * - Documente mudanças importantes
423
+ * - Teste webhook após atualização
424
+ */
425
+ async updateWebhook(params, provider, owner) {
426
+ try {
427
+ if (!params.repo || !params.webhook_id) {
428
+ throw new Error('repo e webhook_id são obrigatórios');
429
+ }
430
+ const updateData = {};
431
+ if (params.new_url)
432
+ updateData.url = params.new_url;
433
+ if (params.new_content_type)
434
+ updateData.content_type = params.new_content_type;
435
+ if (params.new_secret)
436
+ updateData.secret = params.new_secret;
437
+ if (params.new_events)
438
+ updateData.events = params.new_events;
439
+ if (params.new_active !== undefined)
440
+ updateData.active = params.new_active;
441
+ if (Object.keys(updateData).length === 0) {
442
+ throw new Error('Nenhum campo para atualizar foi fornecido');
443
+ }
444
+ const webhook = await provider.updateWebhook((await provider.getCurrentUser()).login, params.repo, params.webhook_id, updateData);
445
+ return {
446
+ success: true,
447
+ action: 'update',
448
+ message: `Webhook #${params.webhook_id} atualizado com sucesso`,
449
+ data: webhook
450
+ };
451
+ }
452
+ catch (error) {
453
+ throw new Error(`Falha ao atualizar webhook: ${error instanceof Error ? error.message : String(error)}`);
454
+ }
455
+ },
456
+ /**
457
+ * Deleta um webhook do repositório
458
+ *
459
+ * FUNCIONALIDADE:
460
+ * - Remove webhook especificado
461
+ * - Confirma exclusão bem-sucedida
462
+ * - Limpa configurações associadas
463
+ *
464
+ * PARÂMETROS OBRIGATÓRIOS:
465
+ * - owner: Proprietário do repositório
466
+ * - repo: Nome do repositório
467
+ * - webhook_id: ID do webhook
468
+ *
469
+ * VALIDAÇÕES:
470
+ * - Todos os parâmetros obrigatórios
471
+ * - Webhook deve existir
472
+ * - Usuário deve ter permissão de exclusão
473
+ *
474
+ * RECOMENDAÇÕES:
475
+ * - Confirme exclusão antes de executar
476
+ * - Verifique se webhook não está sendo usado
477
+ * - Mantenha backup se necessário
478
+ * - Documente motivo da exclusão
479
+ */
480
+ async deleteWebhook(params, provider, owner) {
481
+ try {
482
+ if (!params.repo || !params.webhook_id) {
483
+ throw new Error('repo e webhook_id são obrigatórios');
484
+ }
485
+ await provider.deleteWebhook((await provider.getCurrentUser()).login, params.repo, params.webhook_id);
486
+ return {
487
+ success: true,
488
+ action: 'delete',
489
+ message: `Webhook #${params.webhook_id} deletado com sucesso`,
490
+ data: { deleted: true }
491
+ };
492
+ }
493
+ catch (error) {
494
+ throw new Error(`Falha ao deletar webhook: ${error instanceof Error ? error.message : String(error)}`);
495
+ }
496
+ },
497
+ /**
498
+ * Testa um webhook existente
499
+ *
500
+ * FUNCIONALIDADE:
501
+ * - Envia payload de teste para webhook
502
+ * - Verifica conectividade e resposta
503
+ * - Retorna resultado do teste
504
+ *
505
+ * PARÂMETROS OBRIGATÓRIOS:
506
+ * - owner: Proprietário do repositório
507
+ * - repo: Nome do repositório
508
+ * - webhook_id: ID do webhook
509
+ *
510
+ * VALIDAÇÕES:
511
+ * - Todos os parâmetros obrigatórios
512
+ * - Webhook deve existir
513
+ * - Webhook deve estar ativo
514
+ *
515
+ * RECOMENDAÇÕES:
516
+ * - Teste webhooks após criação
517
+ * - Monitore respostas de teste
518
+ * - Verifique logs de entrega
519
+ * - Configure retry adequado
520
+ */
521
+ async testWebhook(params, provider, owner) {
522
+ try {
523
+ if (!params.repo || !params.webhook_id) {
524
+ throw new Error('repo e webhook_id são obrigatórios');
525
+ }
526
+ // Implementar testWebhook
527
+ const result = {
528
+ success: true,
529
+ message: 'Webhook testado com sucesso',
530
+ note: 'Funcionalidade testWebhook será implementada'
531
+ };
532
+ return {
533
+ success: true,
534
+ action: 'test',
535
+ message: `Webhook #${params.webhook_id} testado com sucesso`,
536
+ data: result
537
+ };
538
+ }
539
+ catch (error) {
540
+ throw new Error(`Falha ao testar webhook: ${error instanceof Error ? error.message : String(error)}`);
541
+ }
542
+ }
543
+ };
556
544
  //# sourceMappingURL=git-webhooks.js.map