@achieveai/azuredevops-mcp 1.3.17 → 1.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -0
- package/dist/Interfaces/Common.js +37 -1
- package/dist/Interfaces/Common.js.map +1 -1
- package/dist/Services/AzureDevOpsService.js +234 -32
- package/dist/Services/AzureDevOpsService.js.map +1 -1
- package/dist/Services/BoardsSprintsService.js +111 -13
- package/dist/Services/BoardsSprintsService.js.map +1 -1
- package/dist/Services/BuildService.js +157 -24
- package/dist/Services/BuildService.js.map +1 -1
- package/dist/Services/GitService.js +26 -3
- package/dist/Services/GitService.js.map +1 -1
- package/dist/Services/ProjectService.js +47 -6
- package/dist/Services/ProjectService.js.map +1 -1
- package/dist/Services/WorkItemService.js +183 -170
- package/dist/Services/WorkItemService.js.map +1 -1
- package/dist/Tools/BoardsSprintsTools.js +2 -8
- package/dist/Tools/BoardsSprintsTools.js.map +1 -1
- package/dist/Tools/BuildTools.js +5 -8
- package/dist/Tools/BuildTools.js.map +1 -1
- package/dist/Tools/GitTools.js +177 -62
- package/dist/Tools/GitTools.js.map +1 -1
- package/dist/Tools/WorkItemTools.js +110 -172
- package/dist/Tools/WorkItemTools.js.map +1 -1
- package/dist/index.js +31 -26
- package/dist/index.js.map +1 -1
- package/dist/utils/apiUsageGuidance.js +336 -0
- package/dist/utils/apiUsageGuidance.js.map +1 -0
- package/dist/utils/formatHelpers.js +15 -0
- package/dist/utils/formatHelpers.js.map +1 -1
- package/package.json +3 -3
- package/dist/Services/BuildService.project.test.js +0 -91
- package/dist/Services/BuildService.project.test.js.map +0 -1
- package/dist/Services/GitService.project.test.js +0 -407
- package/dist/Services/GitService.project.test.js.map +0 -1
- package/dist/package.json +0 -59
- package/dist/src/Interfaces/AIAssisted.js +0 -3
- package/dist/src/Interfaces/AIAssisted.js.map +0 -1
- package/dist/src/Interfaces/ArtifactManagement.js +0 -3
- package/dist/src/Interfaces/ArtifactManagement.js.map +0 -1
- package/dist/src/Interfaces/AzureDevOps.js +0 -3
- package/dist/src/Interfaces/AzureDevOps.js.map +0 -1
- package/dist/src/Interfaces/BoardsAndSprints.js +0 -3
- package/dist/src/Interfaces/BoardsAndSprints.js.map +0 -1
- package/dist/src/Interfaces/CodeAndRepositories.js +0 -3
- package/dist/src/Interfaces/CodeAndRepositories.js.map +0 -1
- package/dist/src/Interfaces/Common.js +0 -134
- package/dist/src/Interfaces/Common.js.map +0 -1
- package/dist/src/Interfaces/CostResourceManagement.js +0 -3
- package/dist/src/Interfaces/CostResourceManagement.js.map +0 -1
- package/dist/src/Interfaces/DevSecOps.js +0 -3
- package/dist/src/Interfaces/DevSecOps.js.map +0 -1
- package/dist/src/Interfaces/ExternalIntegrations.js +0 -3
- package/dist/src/Interfaces/ExternalIntegrations.js.map +0 -1
- package/dist/src/Interfaces/HybridCrossPlatform.js +0 -3
- package/dist/src/Interfaces/HybridCrossPlatform.js.map +0 -1
- package/dist/src/Interfaces/Pipelines.js +0 -3
- package/dist/src/Interfaces/Pipelines.js.map +0 -1
- package/dist/src/Interfaces/ProjectManagement.js +0 -3
- package/dist/src/Interfaces/ProjectManagement.js.map +0 -1
- package/dist/src/Interfaces/TestingCapabilities.js +0 -3
- package/dist/src/Interfaces/TestingCapabilities.js.map +0 -1
- package/dist/src/Interfaces/Wiki.js +0 -3
- package/dist/src/Interfaces/Wiki.js.map +0 -1
- package/dist/src/Interfaces/WorkItems.js +0 -3
- package/dist/src/Interfaces/WorkItems.js.map +0 -1
- package/dist/src/Services/AIAssistedDevelopmentService.js +0 -195
- package/dist/src/Services/AIAssistedDevelopmentService.js.map +0 -1
- package/dist/src/Services/ArtifactManagementService.js +0 -346
- package/dist/src/Services/ArtifactManagementService.js.map +0 -1
- package/dist/src/Services/AzureDevOpsService.js +0 -385
- package/dist/src/Services/AzureDevOpsService.js.map +0 -1
- package/dist/src/Services/BoardsSprintsService.js +0 -339
- package/dist/src/Services/BoardsSprintsService.js.map +0 -1
- package/dist/src/Services/BuildService.js +0 -405
- package/dist/src/Services/BuildService.js.map +0 -1
- package/dist/src/Services/DevSecOpsService.js +0 -307
- package/dist/src/Services/DevSecOpsService.js.map +0 -1
- package/dist/src/Services/EntraAuthHandler.js +0 -337
- package/dist/src/Services/EntraAuthHandler.js.map +0 -1
- package/dist/src/Services/GitService.js +0 -1595
- package/dist/src/Services/GitService.js.map +0 -1
- package/dist/src/Services/ProjectService.js +0 -257
- package/dist/src/Services/ProjectService.js.map +0 -1
- package/dist/src/Services/TestingCapabilitiesService.js +0 -149
- package/dist/src/Services/TestingCapabilitiesService.js.map +0 -1
- package/dist/src/Services/WikiService.js +0 -90
- package/dist/src/Services/WikiService.js.map +0 -1
- package/dist/src/Services/WorkItemService.js +0 -885
- package/dist/src/Services/WorkItemService.js.map +0 -1
- package/dist/src/Tools/AIAssistedDevelopmentTools.js +0 -137
- package/dist/src/Tools/AIAssistedDevelopmentTools.js.map +0 -1
- package/dist/src/Tools/ArtifactManagementTools.js +0 -140
- package/dist/src/Tools/ArtifactManagementTools.js.map +0 -1
- package/dist/src/Tools/BoardsSprintsTools.js +0 -338
- package/dist/src/Tools/BoardsSprintsTools.js.map +0 -1
- package/dist/src/Tools/BuildTools.js +0 -468
- package/dist/src/Tools/BuildTools.js.map +0 -1
- package/dist/src/Tools/DevSecOpsTools.js +0 -147
- package/dist/src/Tools/DevSecOpsTools.js.map +0 -1
- package/dist/src/Tools/GitTools.js +0 -1475
- package/dist/src/Tools/GitTools.js.map +0 -1
- package/dist/src/Tools/ProjectTools.js +0 -360
- package/dist/src/Tools/ProjectTools.js.map +0 -1
- package/dist/src/Tools/TestingCapabilitiesTools.js +0 -157
- package/dist/src/Tools/TestingCapabilitiesTools.js.map +0 -1
- package/dist/src/Tools/WikiTools.js +0 -137
- package/dist/src/Tools/WikiTools.js.map +0 -1
- package/dist/src/Tools/WorkItemTools.js +0 -862
- package/dist/src/Tools/WorkItemTools.js.map +0 -1
- package/dist/src/config.js +0 -176
- package/dist/src/config.js.map +0 -1
- package/dist/src/index.js +0 -1716
- package/dist/src/index.js.map +0 -1
- package/dist/src/utils/formatHelpers.js +0 -257
- package/dist/src/utils/formatHelpers.js.map +0 -1
- package/dist/src/utils/getClassMethods.js +0 -8
- package/dist/src/utils/getClassMethods.js.map +0 -1
- package/dist/src/utils/repositoryResolver.js +0 -40
- package/dist/src/utils/repositoryResolver.js.map +0 -1
package/README.md
CHANGED
|
@@ -161,6 +161,82 @@ Could not find repository "my-repo" in project "MyProject".
|
|
|
161
161
|
|
|
162
162
|
Set `ENABLE_STRUCTURED_CONTENT=true` to include machine-readable JSON in the `structuredContent` field alongside the markdown `content`. This is useful for programmatic consumers that need typed data while still having a human-readable fallback.
|
|
163
163
|
|
|
164
|
+
For performance-sensitive tools, the raw and structured payload now also includes an `apiUsage` object that reports:
|
|
165
|
+
- relative Azure DevOps cost (`low`, `medium`, `high`, `very-high`)
|
|
166
|
+
- estimated Azure DevOps API round-trips for the specific call shape
|
|
167
|
+
- best-practice guidance and lower-cost alternatives
|
|
168
|
+
- WIQL authoring advice for query tools
|
|
169
|
+
|
|
170
|
+
Exact Azure DevOps TSTU usage is not exposed by a deterministic formula. The server therefore reports relative cost and estimated round-trips, not a fake exact TSTU number.
|
|
171
|
+
|
|
172
|
+
## Performance Guidance
|
|
173
|
+
|
|
174
|
+
Azure DevOps rate limits are enforced using throughput units over a sliding 5-minute window. Query cost varies with organization size, returned ID count, requested fields, and whether you are using expensive operators like `CONTAINS`, `EVER`, `WAS EVER`, or link queries.
|
|
175
|
+
|
|
176
|
+
Prefer these patterns:
|
|
177
|
+
- Use `listWorkItems` for structured discovery with exact filters.
|
|
178
|
+
- Use `getQueryResults` for recurring team queries that already exist as saved queries.
|
|
179
|
+
- Use `getRecentlyUpdatedWorkItems` or `getMyWorkItems` for bounded slices instead of broad project scans.
|
|
180
|
+
- Use `getWorkItemsBatch` after you already know the IDs you care about.
|
|
181
|
+
- Request only the fields you actually need.
|
|
182
|
+
- Honor `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`, and `X-RateLimit-Delay` when present.
|
|
183
|
+
|
|
184
|
+
Avoid these patterns unless they are genuinely required:
|
|
185
|
+
- `CONTAINS` or `CONTAINS WORDS` for routine listing.
|
|
186
|
+
- `EVER` or `WAS EVER` for normal current-state queries.
|
|
187
|
+
- Unbounded queries with no `ChangedDate` or `CreatedDate` filter.
|
|
188
|
+
- Large `top` values paired with large field lists.
|
|
189
|
+
- Repeating sprint/build context lookups in tight loops.
|
|
190
|
+
|
|
191
|
+
### Performance-First WIQL Patterns
|
|
192
|
+
|
|
193
|
+
Use exact filters and bounded date windows instead of substring search.
|
|
194
|
+
|
|
195
|
+
```sql
|
|
196
|
+
SELECT [System.Id]
|
|
197
|
+
FROM WorkItems
|
|
198
|
+
WHERE
|
|
199
|
+
[System.TeamProject] = @project
|
|
200
|
+
AND [System.WorkItemType] = 'Bug'
|
|
201
|
+
AND [System.State] IN ('New', 'Active', 'Resolved')
|
|
202
|
+
AND [System.ChangedDate] >= @Today - 30
|
|
203
|
+
ORDER BY [System.ChangedDate] DESC
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
```sql
|
|
207
|
+
SELECT [System.Id]
|
|
208
|
+
FROM WorkItems
|
|
209
|
+
WHERE
|
|
210
|
+
[System.TeamProject] = @project
|
|
211
|
+
AND [System.AreaPath] UNDER 'Contoso\\Platform'
|
|
212
|
+
AND [System.State] <> 'Closed'
|
|
213
|
+
AND [System.ChangedDate] >= @Today - 14
|
|
214
|
+
ORDER BY [System.ChangedDate] DESC
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
```sql
|
|
218
|
+
SELECT [System.Id]
|
|
219
|
+
FROM WorkItems
|
|
220
|
+
WHERE
|
|
221
|
+
[System.TeamProject] = @project
|
|
222
|
+
AND [System.AssignedTo] = @Me
|
|
223
|
+
AND [System.IterationPath] = @CurrentIteration('[Contoso]\\Web')
|
|
224
|
+
AND [System.State] <> 'Closed'
|
|
225
|
+
ORDER BY [System.ChangedDate] DESC
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Avoid this as a default listing pattern:
|
|
229
|
+
|
|
230
|
+
```sql
|
|
231
|
+
SELECT [System.Id]
|
|
232
|
+
FROM WorkItems
|
|
233
|
+
WHERE
|
|
234
|
+
[System.TeamProject] = @project
|
|
235
|
+
AND [System.Title] CONTAINS 'login'
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Use free-text search only as a fallback discovery step, then rewrite the generated WIQL into exact fielded filters.
|
|
239
|
+
|
|
164
240
|
## Installation
|
|
165
241
|
|
|
166
242
|
### Quick Start (npm)
|
|
@@ -5,6 +5,32 @@ exports.setErrorContext = setErrorContext;
|
|
|
5
5
|
exports.formatErrorResponse = formatErrorResponse;
|
|
6
6
|
const config_1 = require("../config");
|
|
7
7
|
const child_process_1 = require("child_process");
|
|
8
|
+
function buildApiUsageBanner(apiUsage) {
|
|
9
|
+
if (!apiUsage) {
|
|
10
|
+
return '';
|
|
11
|
+
}
|
|
12
|
+
const estimatedCalls = apiUsage.estimatedAdoCalls;
|
|
13
|
+
const bestPractices = Array.isArray(apiUsage.bestPractices) ? apiUsage.bestPractices.slice(0, 3) : [];
|
|
14
|
+
const avoid = Array.isArray(apiUsage.avoid) ? apiUsage.avoid.slice(0, 2) : [];
|
|
15
|
+
const alternatives = Array.isArray(apiUsage.recommendedAlternativeTools)
|
|
16
|
+
? apiUsage.recommendedAlternativeTools.slice(0, 3)
|
|
17
|
+
: [];
|
|
18
|
+
let banner = `Usage profile: **${apiUsage.relativeCost || 'unknown'}** relative Azure DevOps cost`;
|
|
19
|
+
if (typeof estimatedCalls === 'number') {
|
|
20
|
+
banner += `, about **${estimatedCalls}** API call${estimatedCalls === 1 ? '' : 's'}`;
|
|
21
|
+
}
|
|
22
|
+
banner += `. ${apiUsage.tstuGuidance || ''}`;
|
|
23
|
+
if (bestPractices.length > 0) {
|
|
24
|
+
banner += `\n\nBest use:\n- ${bestPractices.join('\n- ')}`;
|
|
25
|
+
}
|
|
26
|
+
if (avoid.length > 0) {
|
|
27
|
+
banner += `\n\nAvoid when possible:\n- ${avoid.join('\n- ')}`;
|
|
28
|
+
}
|
|
29
|
+
if (alternatives.length > 0) {
|
|
30
|
+
banner += `\n\nBetter alternatives for some cases:\n- ${alternatives.join('\n- ')}`;
|
|
31
|
+
}
|
|
32
|
+
return `${banner}\n\n---\n\n`;
|
|
33
|
+
}
|
|
8
34
|
/**
|
|
9
35
|
* Formats a response for MCP compatibility
|
|
10
36
|
* @param data The data to format
|
|
@@ -17,9 +43,14 @@ function formatMcpResponse(data, message, isError = false, includeStructuredCont
|
|
|
17
43
|
// When a message is provided, use it as the sole content (markdown-formatted tools)
|
|
18
44
|
// Only fall back to JSON dump when no message is provided at all
|
|
19
45
|
const hasMessage = message && message.length > 0;
|
|
46
|
+
const throttleInfo = data?.throttleInfo;
|
|
47
|
+
const apiUsageBanner = buildApiUsageBanner(data?.apiUsage);
|
|
48
|
+
const throttleBanner = throttleInfo?.throttled
|
|
49
|
+
? `Warning: Azure DevOps throttled this operation. Waited ${(throttleInfo.totalWaitMs / 1000).toFixed(1)}s across ${throttleInfo.retryCount} retr${throttleInfo.retryCount === 1 ? 'y' : 'ies'} before continuing. This usually means too many requests are being sent in a short period.\n\n---\n\n`
|
|
50
|
+
: '';
|
|
20
51
|
const response = {
|
|
21
52
|
content: hasMessage
|
|
22
|
-
? [{ type: "text", text: message }]
|
|
53
|
+
? [{ type: "text", text: `${throttleBanner}${apiUsageBanner}${message}` }]
|
|
23
54
|
: [
|
|
24
55
|
{ type: "text", text: isError ? "Error occurred" : "Request successful" },
|
|
25
56
|
{ type: "text", text: typeof data === 'string' ? data : JSON.stringify(data, null, 2) }
|
|
@@ -81,7 +112,12 @@ function setErrorContext(context) {
|
|
|
81
112
|
function formatErrorResponse(error) {
|
|
82
113
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
83
114
|
let md = `Error: ${errorMessage}`;
|
|
115
|
+
const throttleInfo = error?.throttleInfo;
|
|
84
116
|
const lower = errorMessage.toLowerCase();
|
|
117
|
+
if (throttleInfo?.throttled || error?.statusCode === 429 || lower.includes('too many requests') || lower.includes('rate limit') || lower.includes('throttle')) {
|
|
118
|
+
const totalWait = throttleInfo?.totalWaitMs ? `${(throttleInfo.totalWaitMs / 1000).toFixed(1)}s` : 'a retry window';
|
|
119
|
+
md += `\n\n**Azure DevOps is throttling requests.** The server waited for ${totalWait} before giving up. This indicates too many requests are being sent in a short period.`;
|
|
120
|
+
}
|
|
85
121
|
// Auth error hints
|
|
86
122
|
const statusCode = error?.statusCode || error?.status;
|
|
87
123
|
if (statusCode === 401 || statusCode === 403 || lower.includes('unauthorized') || lower.includes('authentication failed')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../src/Interfaces/Common.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../src/Interfaces/Common.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,11 +35,26 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.AzureDevOpsService = void 0;
|
|
37
37
|
const azdev = __importStar(require("azure-devops-node-api"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
38
41
|
const WebApi_1 = require("azure-devops-node-api/WebApi");
|
|
39
42
|
const EntraAuthHandler_1 = require("./EntraAuthHandler");
|
|
40
43
|
const repositoryResolver_1 = require("../utils/repositoryResolver");
|
|
44
|
+
const PACKAGE_VERSION = (() => {
|
|
45
|
+
try {
|
|
46
|
+
const packageJsonPath = path.resolve(__dirname, "../../package.json");
|
|
47
|
+
const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8");
|
|
48
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
49
|
+
return packageJson.version || "0.0.0";
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return "0.0.0";
|
|
53
|
+
}
|
|
54
|
+
})();
|
|
41
55
|
class AzureDevOpsService {
|
|
42
56
|
constructor(config) {
|
|
57
|
+
this.throttleNotices = [];
|
|
43
58
|
this.config = config;
|
|
44
59
|
// Get the appropriate authentication handler
|
|
45
60
|
const tokenCredentialAuthTypes = ["entra", "azcli", "interactive"];
|
|
@@ -96,9 +111,22 @@ class AzureDevOpsService {
|
|
|
96
111
|
}
|
|
97
112
|
// Create options for the WebApi
|
|
98
113
|
const requestOptions = {};
|
|
114
|
+
const hostName = os.hostname().replace(/[^A-Za-z0-9._-]/g, '_');
|
|
115
|
+
let userName = 'unknown-user';
|
|
116
|
+
try {
|
|
117
|
+
userName = os.userInfo().username.replace(/[^A-Za-z0-9._-]/g, '_');
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Best effort only; keep the client traceable even if user info is unavailable.
|
|
121
|
+
}
|
|
122
|
+
const userAgent = `azuredevops-mcp/${PACKAGE_VERSION} (${hostName}; ${userName})`;
|
|
123
|
+
requestOptions.headers = {
|
|
124
|
+
'User-Agent': userAgent,
|
|
125
|
+
};
|
|
99
126
|
// For on-premises with API version specification, we'll add it to request headers
|
|
100
127
|
if (config.isOnPremises && config.apiVersion) {
|
|
101
128
|
requestOptions.headers = {
|
|
129
|
+
...requestOptions.headers,
|
|
102
130
|
Accept: `application/json;api-version=${config.apiVersion}`,
|
|
103
131
|
};
|
|
104
132
|
}
|
|
@@ -117,46 +145,201 @@ class AzureDevOpsService {
|
|
|
117
145
|
* Catches auth errors (401/403) at the service layer even if the HTTP-level
|
|
118
146
|
* retry in TokenCredentialAuthHandler didn't fire (e.g. SDK swallowed it).
|
|
119
147
|
*/
|
|
120
|
-
async withAuthRetry(operation) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
const isAuthError = statusCode === 401 || statusCode === 403
|
|
128
|
-
|| message.includes('unauthorized') || message.includes('authentication failed');
|
|
129
|
-
if (isAuthError && this.authHandler instanceof EntraAuthHandler_1.TokenCredentialAuthHandler) {
|
|
130
|
-
console.error(`[Auth] Service-layer auth retry: refreshing token...`);
|
|
131
|
-
await this.authHandler.forceRefresh();
|
|
148
|
+
async withAuthRetry(operation, context, throttleAccumulator) {
|
|
149
|
+
let authRetried = false;
|
|
150
|
+
let throttleRetried = 0;
|
|
151
|
+
const contextLabel = this.formatRetryContext(context);
|
|
152
|
+
const notices = throttleAccumulator ?? this.throttleNotices;
|
|
153
|
+
while (true) {
|
|
154
|
+
try {
|
|
132
155
|
return await operation();
|
|
133
156
|
}
|
|
134
|
-
|
|
157
|
+
catch (error) {
|
|
158
|
+
const statusCode = error?.statusCode || error?.status;
|
|
159
|
+
const message = (error?.message || '').toLowerCase();
|
|
160
|
+
const isAuthError = statusCode === 401 || statusCode === 403
|
|
161
|
+
|| message.includes('unauthorized') || message.includes('authentication failed');
|
|
162
|
+
if (isAuthError && !authRetried && this.authHandler instanceof EntraAuthHandler_1.TokenCredentialAuthHandler) {
|
|
163
|
+
authRetried = true;
|
|
164
|
+
console.error(`[Auth] Service-layer auth retry: refreshing token${contextLabel ? ` for ${contextLabel}` : ''}...`);
|
|
165
|
+
await this.authHandler.forceRefresh();
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const throttleInfo = this.getThrottleInfo(error);
|
|
169
|
+
if (throttleInfo && throttleRetried < 2) {
|
|
170
|
+
throttleRetried += 1;
|
|
171
|
+
notices.push({
|
|
172
|
+
...throttleInfo,
|
|
173
|
+
observedAt: new Date().toISOString(),
|
|
174
|
+
});
|
|
175
|
+
console.error(`[Throttle] Azure DevOps throttled request${contextLabel ? ` for ${contextLabel}` : ''}. Waiting ${throttleInfo.waitMs}ms before retry ${throttleRetried}.`);
|
|
176
|
+
await this.sleep(throttleInfo.waitMs);
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (throttleInfo) {
|
|
180
|
+
error.throttleInfo = {
|
|
181
|
+
throttled: true,
|
|
182
|
+
retryCount: throttleRetried,
|
|
183
|
+
totalWaitMs: notices.reduce((sum, notice) => sum + notice.waitMs, 0),
|
|
184
|
+
notices: [...notices, { ...throttleInfo, observedAt: new Date().toISOString() }],
|
|
185
|
+
context,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
throw error;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
static buildThrottleInfo(notices) {
|
|
193
|
+
if (notices.length === 0) {
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
throttled: true,
|
|
198
|
+
retryCount: notices.length,
|
|
199
|
+
totalWaitMs: notices.reduce((sum, notice) => sum + notice.waitMs, 0),
|
|
200
|
+
notices,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
drainThrottleInfo() {
|
|
204
|
+
if (this.throttleNotices.length === 0) {
|
|
205
|
+
return undefined;
|
|
135
206
|
}
|
|
207
|
+
const notices = [...this.throttleNotices];
|
|
208
|
+
this.throttleNotices = [];
|
|
209
|
+
return AzureDevOpsService.buildThrottleInfo(notices);
|
|
210
|
+
}
|
|
211
|
+
async sleep(waitMs) {
|
|
212
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
213
|
+
}
|
|
214
|
+
getThrottleInfo(error) {
|
|
215
|
+
const statusCode = error?.statusCode || error?.status;
|
|
216
|
+
const message = String(error?.message || '').toLowerCase();
|
|
217
|
+
const isThrottle = statusCode === 429
|
|
218
|
+
|| message.includes('rate limit')
|
|
219
|
+
|| message.includes('too many requests')
|
|
220
|
+
|| message.includes('throttle');
|
|
221
|
+
if (!isThrottle) {
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
const headers = error?.response?.headers || error?.headers || error?.result?.headers || error?.response?.message?.headers;
|
|
225
|
+
const retryAfter = this.getHeaderValue(headers, 'retry-after');
|
|
226
|
+
const rateLimitDelay = this.getHeaderValue(headers, 'x-ratelimit-delay');
|
|
227
|
+
let waitMs = 15000;
|
|
228
|
+
let reason = 'Azure DevOps is throttling requests.';
|
|
229
|
+
if (retryAfter) {
|
|
230
|
+
const retryAfterSeconds = Number(retryAfter);
|
|
231
|
+
if (!Number.isNaN(retryAfterSeconds)) {
|
|
232
|
+
waitMs = Math.max(1, Math.ceil(retryAfterSeconds)) * 1000;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
const retryDate = Date.parse(retryAfter);
|
|
236
|
+
if (!Number.isNaN(retryDate)) {
|
|
237
|
+
waitMs = Math.max(1000, retryDate - Date.now());
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
reason = `Azure DevOps requested a retry after ${retryAfter}.`;
|
|
241
|
+
}
|
|
242
|
+
else if (rateLimitDelay) {
|
|
243
|
+
const delaySeconds = Number(rateLimitDelay);
|
|
244
|
+
if (!Number.isNaN(delaySeconds)) {
|
|
245
|
+
waitMs = Math.max(1, Math.ceil(delaySeconds)) * 1000;
|
|
246
|
+
}
|
|
247
|
+
reason = `Azure DevOps returned X-RateLimit-Delay=${rateLimitDelay}.`;
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
waitMs,
|
|
251
|
+
statusCode,
|
|
252
|
+
reason,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
getHeaderValue(headers, name) {
|
|
256
|
+
if (!headers) {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
if (typeof headers.get === 'function') {
|
|
260
|
+
return headers.get(name) || headers.get(name.toLowerCase()) || undefined;
|
|
261
|
+
}
|
|
262
|
+
if (Array.isArray(headers)) {
|
|
263
|
+
const match = headers.find((entry) => Array.isArray(entry) && String(entry[0]).toLowerCase() === name.toLowerCase());
|
|
264
|
+
return match ? String(match[1]) : undefined;
|
|
265
|
+
}
|
|
266
|
+
if (typeof headers === 'object') {
|
|
267
|
+
const key = Object.keys(headers).find((headerName) => headerName.toLowerCase() === name.toLowerCase());
|
|
268
|
+
if (key) {
|
|
269
|
+
const value = headers[key];
|
|
270
|
+
return Array.isArray(value) ? String(value[0]) : String(value);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return undefined;
|
|
274
|
+
}
|
|
275
|
+
formatRetryContext(context) {
|
|
276
|
+
if (!context?.operationName) {
|
|
277
|
+
return '';
|
|
278
|
+
}
|
|
279
|
+
const details = context.details
|
|
280
|
+
? Object.entries(context.details)
|
|
281
|
+
.filter(([, value]) => value !== undefined)
|
|
282
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
283
|
+
.join(', ')
|
|
284
|
+
: '';
|
|
285
|
+
return details ? `${context.operationName} (${details})` : context.operationName;
|
|
286
|
+
}
|
|
287
|
+
getRequestedFields(fields, defaults) {
|
|
288
|
+
const selected = fields && fields.length > 0 ? fields : (defaults || AzureDevOpsService.BASE_SUMMARY_FIELDS);
|
|
289
|
+
return Array.from(new Set(selected));
|
|
290
|
+
}
|
|
291
|
+
transformSummaryWorkItem(workItem) {
|
|
292
|
+
const fields = workItem.fields || {};
|
|
293
|
+
return {
|
|
294
|
+
id: workItem.id,
|
|
295
|
+
url: workItem.url,
|
|
296
|
+
title: fields['System.Title'],
|
|
297
|
+
teamProject: fields['System.TeamProject'],
|
|
298
|
+
workItemType: fields['System.WorkItemType'],
|
|
299
|
+
state: fields['System.State'],
|
|
300
|
+
assignedTo: fields['System.AssignedTo'] ? {
|
|
301
|
+
displayName: fields['System.AssignedTo'].displayName,
|
|
302
|
+
uniqueName: fields['System.AssignedTo'].uniqueName,
|
|
303
|
+
} : null,
|
|
304
|
+
createdBy: fields['System.CreatedBy'] ? {
|
|
305
|
+
displayName: fields['System.CreatedBy'].displayName,
|
|
306
|
+
uniqueName: fields['System.CreatedBy'].uniqueName,
|
|
307
|
+
} : null,
|
|
308
|
+
createdDate: fields['System.CreatedDate'],
|
|
309
|
+
changedDate: fields['System.ChangedDate'],
|
|
310
|
+
areaPath: fields['System.AreaPath'],
|
|
311
|
+
iterationPath: fields['System.IterationPath'],
|
|
312
|
+
priority: fields['Microsoft.VSTS.Common.Priority'],
|
|
313
|
+
originalEstimate: fields['Microsoft.VSTS.Scheduling.OriginalEstimate'],
|
|
314
|
+
completedWork: fields['Microsoft.VSTS.Scheduling.CompletedWork'],
|
|
315
|
+
remainingWork: fields['Microsoft.VSTS.Scheduling.RemainingWork'],
|
|
316
|
+
fields,
|
|
317
|
+
};
|
|
136
318
|
}
|
|
137
319
|
/**
|
|
138
|
-
*
|
|
320
|
+
* Batch-fetch work item details for an array of refs (IDs or relation objects).
|
|
321
|
+
* Handles the ADO 200-ID-per-call limit automatically.
|
|
139
322
|
*/
|
|
140
|
-
async
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}, undefined, serverTop);
|
|
150
|
-
// Return the work items
|
|
151
|
-
return {
|
|
152
|
-
workItems: queryResult.workItems || [],
|
|
153
|
-
count: queryResult.workItems?.length || 0,
|
|
154
|
-
};
|
|
323
|
+
async hydrateWorkItemRefs(refs, options) {
|
|
324
|
+
const extractId = options?.extractId ?? ((ref) => ref?.id);
|
|
325
|
+
const project = options?.project ?? this.config.project;
|
|
326
|
+
const operationName = options?.operationName ?? 'batchHydrate';
|
|
327
|
+
const ids = (refs || [])
|
|
328
|
+
.map(extractId)
|
|
329
|
+
.filter((id) => typeof id === 'number');
|
|
330
|
+
if (ids.length === 0) {
|
|
331
|
+
return [];
|
|
155
332
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
333
|
+
const witApi = await this.getWorkItemTrackingApi();
|
|
334
|
+
const requestedFields = this.getRequestedFields(options?.fields, options?.defaults);
|
|
335
|
+
const BATCH_SIZE = 200;
|
|
336
|
+
const allWorkItems = [];
|
|
337
|
+
for (let i = 0; i < ids.length; i += BATCH_SIZE) {
|
|
338
|
+
const batch = ids.slice(i, i + BATCH_SIZE);
|
|
339
|
+
const batchResult = await this.withAuthRetry(() => witApi.getWorkItems(batch, requestedFields, undefined, undefined, undefined, project), { operationName, details: { project, ids: batch.length, fields: requestedFields.length } }, options?.throttleAccumulator);
|
|
340
|
+
allWorkItems.push(...(batchResult || []));
|
|
159
341
|
}
|
|
342
|
+
return allWorkItems.map((workItem) => this.transformSummaryWorkItem(workItem));
|
|
160
343
|
}
|
|
161
344
|
/**
|
|
162
345
|
* Get the authenticated user's ID, cached after first resolution.
|
|
@@ -189,4 +372,23 @@ class AzureDevOpsService {
|
|
|
189
372
|
}
|
|
190
373
|
}
|
|
191
374
|
exports.AzureDevOpsService = AzureDevOpsService;
|
|
375
|
+
AzureDevOpsService.BASE_SUMMARY_FIELDS = [
|
|
376
|
+
'System.Id',
|
|
377
|
+
'System.Title',
|
|
378
|
+
'System.TeamProject',
|
|
379
|
+
'System.WorkItemType',
|
|
380
|
+
'System.State',
|
|
381
|
+
'System.AssignedTo',
|
|
382
|
+
'System.CreatedBy',
|
|
383
|
+
'System.CreatedDate',
|
|
384
|
+
'System.ChangedDate',
|
|
385
|
+
'System.AreaPath',
|
|
386
|
+
'System.IterationPath',
|
|
387
|
+
'Microsoft.VSTS.Common.Priority',
|
|
388
|
+
];
|
|
389
|
+
AzureDevOpsService.SCHEDULING_FIELDS = [
|
|
390
|
+
'Microsoft.VSTS.Scheduling.OriginalEstimate',
|
|
391
|
+
'Microsoft.VSTS.Scheduling.CompletedWork',
|
|
392
|
+
'Microsoft.VSTS.Scheduling.RemainingWork',
|
|
393
|
+
];
|
|
192
394
|
//# sourceMappingURL=AzureDevOpsService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureDevOpsService.js","sourceRoot":"","sources":["../../src/Services/AzureDevOpsService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AzureDevOpsService.js","sourceRoot":"","sources":["../../src/Services/AzureDevOpsService.ts"],"names":[],"mappings":"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"}
|