@urateam/core 0.1.42 → 0.1.43

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 (100) hide show
  1. package/dist/__tests__/bitbucket-webhook.test.d.ts +13 -0
  2. package/dist/__tests__/bitbucket-webhook.test.d.ts.map +1 -0
  3. package/dist/__tests__/bitbucket-webhook.test.js +379 -0
  4. package/dist/__tests__/bitbucket-webhook.test.js.map +1 -0
  5. package/dist/__tests__/bitbucket.test.d.ts +15 -0
  6. package/dist/__tests__/bitbucket.test.d.ts.map +1 -0
  7. package/dist/__tests__/bitbucket.test.js +237 -0
  8. package/dist/__tests__/bitbucket.test.js.map +1 -0
  9. package/dist/__tests__/gitlab-webhook.test.d.ts +13 -0
  10. package/dist/__tests__/gitlab-webhook.test.d.ts.map +1 -0
  11. package/dist/__tests__/gitlab-webhook.test.js +388 -0
  12. package/dist/__tests__/gitlab-webhook.test.js.map +1 -0
  13. package/dist/__tests__/runner-multi-vcs.test.d.ts +19 -0
  14. package/dist/__tests__/runner-multi-vcs.test.d.ts.map +1 -0
  15. package/dist/__tests__/runner-multi-vcs.test.js +346 -0
  16. package/dist/__tests__/runner-multi-vcs.test.js.map +1 -0
  17. package/dist/__tests__/triage-v2-prediction.test.d.ts +2 -0
  18. package/dist/__tests__/triage-v2-prediction.test.d.ts.map +1 -0
  19. package/dist/__tests__/triage-v2-prediction.test.js +70 -0
  20. package/dist/__tests__/triage-v2-prediction.test.js.map +1 -0
  21. package/dist/__tests__/triage-v2-prompt.test.d.ts +2 -0
  22. package/dist/__tests__/triage-v2-prompt.test.d.ts.map +1 -0
  23. package/dist/__tests__/triage-v2-prompt.test.js +127 -0
  24. package/dist/__tests__/triage-v2-prompt.test.js.map +1 -0
  25. package/dist/__tests__/triage-v2-render.test.d.ts +2 -0
  26. package/dist/__tests__/triage-v2-render.test.d.ts.map +1 -0
  27. package/dist/__tests__/triage-v2-render.test.js +200 -0
  28. package/dist/__tests__/triage-v2-render.test.js.map +1 -0
  29. package/dist/__tests__/triage-v2-schema.test.d.ts +2 -0
  30. package/dist/__tests__/triage-v2-schema.test.d.ts.map +1 -0
  31. package/dist/__tests__/triage-v2-schema.test.js +115 -0
  32. package/dist/__tests__/triage-v2-schema.test.js.map +1 -0
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js.map +1 -1
  36. package/dist/pipeline/feedback-pipeline.d.ts +2 -0
  37. package/dist/pipeline/feedback-pipeline.d.ts.map +1 -1
  38. package/dist/pipeline/feedback-pipeline.js +4 -1
  39. package/dist/pipeline/feedback-pipeline.js.map +1 -1
  40. package/dist/pipeline/runner.d.ts +11 -0
  41. package/dist/pipeline/runner.d.ts.map +1 -1
  42. package/dist/pipeline/runner.js +314 -114
  43. package/dist/pipeline/runner.js.map +1 -1
  44. package/dist/pm/actions/triage-prompt.d.ts +42 -0
  45. package/dist/pm/actions/triage-prompt.d.ts.map +1 -0
  46. package/dist/pm/actions/triage-prompt.js +192 -0
  47. package/dist/pm/actions/triage-prompt.js.map +1 -0
  48. package/dist/pm/actions/triage-render.d.ts +39 -0
  49. package/dist/pm/actions/triage-render.d.ts.map +1 -0
  50. package/dist/pm/actions/triage-render.js +158 -0
  51. package/dist/pm/actions/triage-render.js.map +1 -0
  52. package/dist/pm/actions/triage.d.ts +2 -1
  53. package/dist/pm/actions/triage.d.ts.map +1 -1
  54. package/dist/pm/actions/triage.js +44 -58
  55. package/dist/pm/actions/triage.js.map +1 -1
  56. package/dist/pm/triage-prediction-quality.d.ts +26 -0
  57. package/dist/pm/triage-prediction-quality.d.ts.map +1 -0
  58. package/dist/pm/triage-prediction-quality.js +41 -0
  59. package/dist/pm/triage-prediction-quality.js.map +1 -0
  60. package/dist/pm/types.d.ts +60 -0
  61. package/dist/pm/types.d.ts.map +1 -1
  62. package/dist/pm/types.js +119 -0
  63. package/dist/pm/types.js.map +1 -1
  64. package/dist/repo/bitbucket.d.ts +136 -0
  65. package/dist/repo/bitbucket.d.ts.map +1 -0
  66. package/dist/repo/bitbucket.js +237 -0
  67. package/dist/repo/bitbucket.js.map +1 -0
  68. package/dist/repo/gitlab.d.ts +11 -0
  69. package/dist/repo/gitlab.d.ts.map +1 -1
  70. package/dist/repo/gitlab.js +37 -0
  71. package/dist/repo/gitlab.js.map +1 -1
  72. package/dist/repo/index.d.ts +3 -1
  73. package/dist/repo/index.d.ts.map +1 -1
  74. package/dist/repo/index.js +2 -1
  75. package/dist/repo/index.js.map +1 -1
  76. package/dist/server.d.ts +14 -0
  77. package/dist/server.d.ts.map +1 -1
  78. package/dist/server.js +32 -0
  79. package/dist/server.js.map +1 -1
  80. package/dist/types.d.ts +1 -0
  81. package/dist/types.d.ts.map +1 -1
  82. package/dist/types.js +2 -2
  83. package/dist/types.js.map +1 -1
  84. package/dist/webhook/bitbucket-handler.d.ts +65 -0
  85. package/dist/webhook/bitbucket-handler.d.ts.map +1 -0
  86. package/dist/webhook/bitbucket-handler.js +153 -0
  87. package/dist/webhook/bitbucket-handler.js.map +1 -0
  88. package/dist/webhook/gitlab-handler.d.ts +66 -0
  89. package/dist/webhook/gitlab-handler.d.ts.map +1 -0
  90. package/dist/webhook/gitlab-handler.js +159 -0
  91. package/dist/webhook/gitlab-handler.js.map +1 -0
  92. package/dist/webhook/index.d.ts +3 -0
  93. package/dist/webhook/index.d.ts.map +1 -1
  94. package/dist/webhook/index.js +3 -0
  95. package/dist/webhook/index.js.map +1 -1
  96. package/dist/webhook/shared-handlers.d.ts +110 -0
  97. package/dist/webhook/shared-handlers.d.ts.map +1 -0
  98. package/dist/webhook/shared-handlers.js +251 -0
  99. package/dist/webhook/shared-handlers.js.map +1 -0
  100. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Unit tests for the Bitbucket webhook handler.
3
+ *
4
+ * Covers:
5
+ * - HMAC-SHA256 signature verification (verifyBitbucketSignature)
6
+ * - Valid X-Hub-Signature-256 → feedback-run trigger
7
+ * - Invalid / missing signature → 401 response
8
+ * - PR fulfilled (merged) event → DB update
9
+ * - Dedup, bot-exclusion, allowed-reviewer filter, trigger-keyword
10
+ * - Integration path: handler → runner.startFeedback()
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=bitbucket-webhook.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket-webhook.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/bitbucket-webhook.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,379 @@
1
+ /**
2
+ * Unit tests for the Bitbucket webhook handler.
3
+ *
4
+ * Covers:
5
+ * - HMAC-SHA256 signature verification (verifyBitbucketSignature)
6
+ * - Valid X-Hub-Signature-256 → feedback-run trigger
7
+ * - Invalid / missing signature → 401 response
8
+ * - PR fulfilled (merged) event → DB update
9
+ * - Dedup, bot-exclusion, allowed-reviewer filter, trigger-keyword
10
+ * - Integration path: handler → runner.startFeedback()
11
+ */
12
+ import { describe, it, expect, vi } from "vitest";
13
+ import { createHmac } from "crypto";
14
+ import { createBitbucketWebhookHandler, verifyBitbucketSignature, } from "../webhook/bitbucket-handler.js";
15
+ // ---------------------------------------------------------------------------
16
+ // Helpers
17
+ // ---------------------------------------------------------------------------
18
+ const SECRET = "bb-webhook-secret";
19
+ function sign(body, secret) {
20
+ return `sha256=${createHmac("sha256", secret).update(body).digest("hex")}`;
21
+ }
22
+ const pipelineConfig = {
23
+ name: "auto-implement",
24
+ stages: ["triage", "implement", "test", "review"],
25
+ retry: { maxAttempts: 1, strategy: "fix-and-retry" },
26
+ review: { requiredApprovals: 1 },
27
+ prStrategy: "draft",
28
+ };
29
+ const repoConfig = {
30
+ url: "https://bitbucket.org/myworkspace/myrepo",
31
+ defaultBranch: "main",
32
+ testCommand: "npm test",
33
+ buildCommand: "npm run build",
34
+ provider: "bitbucket",
35
+ githubFeedback: {
36
+ botLogins: ["bot[bot]"],
37
+ autoTrigger: true,
38
+ },
39
+ };
40
+ const mockRun = {
41
+ id: "run-abc123",
42
+ issueId: "LIN-42",
43
+ issueTitle: "Add user search",
44
+ pipelineKey: "auto-implement",
45
+ repoUrl: "https://bitbucket.org/myworkspace/myrepo",
46
+ branch: "agent/LIN-42-add-user-search",
47
+ status: "completed",
48
+ prUrl: "https://bitbucket.org/myworkspace/myrepo/pull-requests/7",
49
+ runType: "standard",
50
+ parentRunId: null,
51
+ feedbackContext: null,
52
+ };
53
+ function makeMockDb(run = mockRun) {
54
+ return {
55
+ select: vi.fn().mockReturnValue({
56
+ from: vi.fn().mockReturnValue({
57
+ where: vi.fn().mockReturnValue({
58
+ limit: vi.fn().mockResolvedValue(run ? [run] : []),
59
+ }),
60
+ }),
61
+ }),
62
+ update: vi.fn().mockReturnValue({
63
+ set: vi.fn().mockReturnValue({
64
+ where: vi.fn().mockResolvedValue(undefined),
65
+ }),
66
+ }),
67
+ };
68
+ }
69
+ function makeMockRunner() {
70
+ return {
71
+ startFeedback: vi.fn().mockResolvedValue(undefined),
72
+ isActiveFeedback: vi.fn().mockReturnValue(false),
73
+ };
74
+ }
75
+ function buildConfig(overrides = {}) {
76
+ return {
77
+ webhookSecret: SECRET,
78
+ runner: makeMockRunner(),
79
+ pipelineConfigs: { "auto-implement": pipelineConfig },
80
+ repoConfigs: { "myworkspace/myrepo": repoConfig },
81
+ db: makeMockDb(),
82
+ ...overrides,
83
+ };
84
+ }
85
+ function makeCommentPayload(overrides = {}) {
86
+ return {
87
+ pullrequest: {
88
+ id: 7,
89
+ links: {
90
+ html: { href: "https://bitbucket.org/myworkspace/myrepo/pull-requests/7" },
91
+ },
92
+ source: { branch: { name: "agent/LIN-42-add-user-search" } },
93
+ ...overrides.pullrequest,
94
+ },
95
+ actor: {
96
+ nickname: "reviewer-alice",
97
+ display_name: "Reviewer Alice",
98
+ ...overrides.actor,
99
+ },
100
+ comment: {
101
+ id: 12345,
102
+ content: { raw: "Please rename this variable for clarity." },
103
+ links: {
104
+ html: {
105
+ href: "https://bitbucket.org/myworkspace/myrepo/pull-requests/7/_/diff#comment-12345",
106
+ },
107
+ },
108
+ ...overrides.comment,
109
+ },
110
+ ...overrides,
111
+ };
112
+ }
113
+ async function postWebhook(config, payload, eventKey = "pullrequest:comment_created", headers = {}) {
114
+ const app = createBitbucketWebhookHandler(config);
115
+ const body = JSON.stringify(payload);
116
+ const sig = sign(body, SECRET);
117
+ const req = new Request("http://localhost/webhooks/bitbucket", {
118
+ method: "POST",
119
+ headers: {
120
+ "Content-Type": "application/json",
121
+ "X-Event-Key": eventKey,
122
+ "X-Hub-Signature-256": sig,
123
+ ...headers,
124
+ },
125
+ body,
126
+ });
127
+ return app.fetch(req);
128
+ }
129
+ // ---------------------------------------------------------------------------
130
+ // verifyBitbucketSignature
131
+ // ---------------------------------------------------------------------------
132
+ describe("verifyBitbucketSignature", () => {
133
+ const body = '{"hello":"world"}';
134
+ it("verifies a valid sha256 signature", () => {
135
+ const sig = sign(body, "mysecret");
136
+ expect(verifyBitbucketSignature(body, sig, "mysecret")).toBe(true);
137
+ });
138
+ it("rejects a wrong signature", () => {
139
+ expect(verifyBitbucketSignature(body, sign(body, "wrong-secret"), "mysecret")).toBe(false);
140
+ });
141
+ it("rejects a signature without sha256= prefix", () => {
142
+ const hmac = createHmac("sha256", "mysecret").update(body).digest("hex");
143
+ expect(verifyBitbucketSignature(body, hmac, "mysecret")).toBe(false);
144
+ });
145
+ it("rejects mismatched-length signatures", () => {
146
+ expect(verifyBitbucketSignature(body, "sha256=abc", "mysecret")).toBe(false);
147
+ });
148
+ });
149
+ // ---------------------------------------------------------------------------
150
+ // Signature validation in handler
151
+ // ---------------------------------------------------------------------------
152
+ describe("createBitbucketWebhookHandler — signature validation", () => {
153
+ it("accepts a valid X-Hub-Signature-256 and triggers feedback", async () => {
154
+ const config = buildConfig();
155
+ const res = await postWebhook(config, makeCommentPayload());
156
+ expect(res.status).toBe(200);
157
+ const body = await res.json();
158
+ expect(body.action).toBe("feedback-triggered");
159
+ });
160
+ it("rejects an invalid signature with 401", async () => {
161
+ const config = buildConfig();
162
+ const res = await postWebhook(config, makeCommentPayload(), "pullrequest:comment_created", {
163
+ "X-Hub-Signature-256": "sha256=deadbeef0000000000000000000000000000000000000000000000000000000",
164
+ });
165
+ expect(res.status).toBe(401);
166
+ });
167
+ it("rejects a missing signature with 401 when secret is configured", async () => {
168
+ const config = buildConfig();
169
+ const body = JSON.stringify(makeCommentPayload());
170
+ const req = new Request("http://localhost/webhooks/bitbucket", {
171
+ method: "POST",
172
+ headers: {
173
+ "Content-Type": "application/json",
174
+ "X-Event-Key": "pullrequest:comment_created",
175
+ },
176
+ body,
177
+ });
178
+ const res = await createBitbucketWebhookHandler(config).fetch(req);
179
+ expect(res.status).toBe(401);
180
+ });
181
+ it("skips signature check when webhookSecret is not configured", async () => {
182
+ const config = buildConfig({ webhookSecret: undefined });
183
+ const body = JSON.stringify(makeCommentPayload());
184
+ const req = new Request("http://localhost/webhooks/bitbucket", {
185
+ method: "POST",
186
+ headers: {
187
+ "Content-Type": "application/json",
188
+ "X-Event-Key": "pullrequest:comment_created",
189
+ },
190
+ body,
191
+ });
192
+ const res = await createBitbucketWebhookHandler(config).fetch(req);
193
+ expect(res.status).toBe(200);
194
+ });
195
+ });
196
+ // ---------------------------------------------------------------------------
197
+ // PR comment events → review-feedback runs
198
+ // ---------------------------------------------------------------------------
199
+ describe("createBitbucketWebhookHandler — comment events", () => {
200
+ it("triggers runner.startFeedback() for a qualifying PR comment", async () => {
201
+ const runner = makeMockRunner();
202
+ const config = buildConfig({ runner: runner });
203
+ const res = await postWebhook(config, makeCommentPayload());
204
+ expect(res.status).toBe(200);
205
+ const body = await res.json();
206
+ expect(body.action).toBe("feedback-triggered");
207
+ expect(runner.startFeedback).toHaveBeenCalledOnce();
208
+ const callArgs = runner.startFeedback.mock.calls[0][0];
209
+ expect(callArgs.prUrl).toBe("https://bitbucket.org/myworkspace/myrepo/pull-requests/7");
210
+ expect(callArgs.feedbackComments).toHaveLength(1);
211
+ expect(callArgs.feedbackComments[0].body).toBe("Please rename this variable for clarity.");
212
+ expect(callArgs.feedbackComments[0].author).toBe("reviewer-alice");
213
+ });
214
+ it("skips unhandled event keys", async () => {
215
+ const runner = makeMockRunner();
216
+ const config = buildConfig({ runner: runner });
217
+ const res = await postWebhook(config, makeCommentPayload(), "pullrequest:created");
218
+ const body = await res.json();
219
+ expect(body.skipped).toBeDefined();
220
+ expect(runner.startFeedback).not.toHaveBeenCalled();
221
+ });
222
+ it("skips empty comment bodies", async () => {
223
+ const runner = makeMockRunner();
224
+ const config = buildConfig({ runner: runner });
225
+ const payload = makeCommentPayload({
226
+ comment: { id: 12345, content: { raw: " " }, links: { html: { href: "" } } },
227
+ });
228
+ const res = await postWebhook(config, payload);
229
+ const body = await res.json();
230
+ expect(body.skipped).toBe("empty comment body");
231
+ expect(runner.startFeedback).not.toHaveBeenCalled();
232
+ });
233
+ it("skips comments from bot logins", async () => {
234
+ const runner = makeMockRunner();
235
+ const config = buildConfig({ runner: runner });
236
+ const res = await postWebhook(config, makeCommentPayload({ actor: { nickname: "bot[bot]", display_name: "Bot" } }));
237
+ const body = await res.json();
238
+ expect(body.skipped).toBe("comment from bot login");
239
+ expect(runner.startFeedback).not.toHaveBeenCalled();
240
+ });
241
+ it("skips when commenter not in allowedReviewers", async () => {
242
+ const runner = makeMockRunner();
243
+ const config = buildConfig({
244
+ runner: runner,
245
+ repoConfigs: {
246
+ "myworkspace/myrepo": {
247
+ ...repoConfig,
248
+ githubFeedback: {
249
+ allowedReviewers: ["alice"],
250
+ botLogins: [],
251
+ autoTrigger: true,
252
+ },
253
+ },
254
+ },
255
+ });
256
+ const res = await postWebhook(config, makeCommentPayload({ actor: { nickname: "unknown-person", display_name: "Unknown" } }));
257
+ const body = await res.json();
258
+ expect(body.skipped).toBe("commenter not in allowedReviewers");
259
+ expect(runner.startFeedback).not.toHaveBeenCalled();
260
+ });
261
+ it("skips when trigger keyword is required but missing", async () => {
262
+ const runner = makeMockRunner();
263
+ const config = buildConfig({
264
+ runner: runner,
265
+ repoConfigs: {
266
+ "myworkspace/myrepo": {
267
+ ...repoConfig,
268
+ githubFeedback: {
269
+ triggerKeyword: "@agent",
270
+ autoTrigger: false,
271
+ },
272
+ },
273
+ },
274
+ });
275
+ const res = await postWebhook(config, makeCommentPayload());
276
+ const body = await res.json();
277
+ expect(body.skipped).toBe("trigger keyword not found");
278
+ expect(runner.startFeedback).not.toHaveBeenCalled();
279
+ });
280
+ it("triggers when trigger keyword is present", async () => {
281
+ const runner = makeMockRunner();
282
+ const config = buildConfig({
283
+ runner: runner,
284
+ repoConfigs: {
285
+ "myworkspace/myrepo": {
286
+ ...repoConfig,
287
+ githubFeedback: { triggerKeyword: "@agent" },
288
+ },
289
+ },
290
+ });
291
+ const payload = makeCommentPayload({
292
+ comment: {
293
+ id: 12345,
294
+ content: { raw: "please @agent fix this" },
295
+ links: { html: { href: "" } },
296
+ },
297
+ });
298
+ const res = await postWebhook(config, payload);
299
+ expect((await res.json()).action).toBe("feedback-triggered");
300
+ expect(runner.startFeedback).toHaveBeenCalledOnce();
301
+ });
302
+ it("returns not-found for unrecognised PR", async () => {
303
+ const db = makeMockDb(null);
304
+ const config = buildConfig({ db: db });
305
+ const res = await postWebhook(config, makeCommentPayload());
306
+ const body = await res.json();
307
+ expect(body.skipped).toBe("not an agent-created PR");
308
+ });
309
+ it("skips when a feedback run is already active", async () => {
310
+ const runner = makeMockRunner();
311
+ runner.isActiveFeedback.mockReturnValue(true);
312
+ const config = buildConfig({ runner: runner });
313
+ const res = await postWebhook(config, makeCommentPayload());
314
+ const body = await res.json();
315
+ expect(body.skipped).toBe("feedback run already in progress");
316
+ expect(runner.startFeedback).not.toHaveBeenCalled();
317
+ });
318
+ });
319
+ // ---------------------------------------------------------------------------
320
+ // PR fulfilled (merged) events
321
+ // ---------------------------------------------------------------------------
322
+ describe("createBitbucketWebhookHandler — PR fulfilled events", () => {
323
+ it("marks pipeline run merged when PR is fulfilled", async () => {
324
+ const db = makeMockDb();
325
+ const config = buildConfig({ db: db });
326
+ const payload = {
327
+ pullrequest: {
328
+ id: 7,
329
+ links: {
330
+ html: { href: "https://bitbucket.org/myworkspace/myrepo/pull-requests/7" },
331
+ },
332
+ source: { branch: { name: "agent/LIN-42-add-user-search" } },
333
+ },
334
+ };
335
+ const res = await postWebhook(config, payload, "pullrequest:fulfilled");
336
+ expect(res.status).toBe(200);
337
+ const body = await res.json();
338
+ expect(body.action).toBe("pr-merged");
339
+ expect(db.update).toHaveBeenCalled();
340
+ });
341
+ it("calls notifier.onPRMerged when notifier is provided", async () => {
342
+ const db = makeMockDb();
343
+ const notifier = { onPRMerged: vi.fn().mockResolvedValue(undefined) };
344
+ const config = buildConfig({ db: db, notifier: notifier });
345
+ const payload = {
346
+ pullrequest: {
347
+ id: 7,
348
+ links: {
349
+ html: { href: "https://bitbucket.org/myworkspace/myrepo/pull-requests/7" },
350
+ },
351
+ source: { branch: { name: "agent/LIN-42-add-user-search" } },
352
+ },
353
+ };
354
+ await postWebhook(config, payload, "pullrequest:fulfilled");
355
+ expect(notifier.onPRMerged).toHaveBeenCalledOnce();
356
+ });
357
+ });
358
+ // ---------------------------------------------------------------------------
359
+ // Invalid JSON
360
+ // ---------------------------------------------------------------------------
361
+ describe("createBitbucketWebhookHandler — invalid requests", () => {
362
+ it("returns 400 for invalid JSON", async () => {
363
+ const config = buildConfig();
364
+ const badBody = "not json";
365
+ const sig = sign(badBody, SECRET);
366
+ const req = new Request("http://localhost/webhooks/bitbucket", {
367
+ method: "POST",
368
+ headers: {
369
+ "Content-Type": "application/json",
370
+ "X-Event-Key": "pullrequest:comment_created",
371
+ "X-Hub-Signature-256": sig,
372
+ },
373
+ body: badBody,
374
+ });
375
+ const res = await createBitbucketWebhookHandler(config).fetch(req);
376
+ expect(res.status).toBe(400);
377
+ });
378
+ });
379
+ //# sourceMappingURL=bitbucket-webhook.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket-webhook.test.js","sourceRoot":"","sources":["../../src/__tests__/bitbucket-webhook.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Unit tests for the Bitbucket repo provider.
3
+ *
4
+ * All tests run without a live Bitbucket instance — HTTP calls are intercepted
5
+ * by replacing `globalThis.fetch` with a Vitest spy before each test.
6
+ *
7
+ * Bitbucket API tier notes
8
+ * -----------------------
9
+ * - All APIs exercised here are part of the Bitbucket REST API v2.
10
+ * - PR creation, comments, and merging are available on all Bitbucket Cloud plans.
11
+ * - Bitbucket Data Center (self-hosted) uses the same API endpoints via a
12
+ * configurable `apiBaseUrl` in `BitbucketConfig`.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=bitbucket.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/bitbucket.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}