@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
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.AzureDevOpsService = void 0;
|
|
40
|
-
const azdev = __importStar(require("azure-devops-node-api"));
|
|
41
|
-
const os = __importStar(require("os"));
|
|
42
|
-
const WebApi_1 = require("azure-devops-node-api/WebApi");
|
|
43
|
-
const EntraAuthHandler_1 = require("./EntraAuthHandler");
|
|
44
|
-
const repositoryResolver_1 = require("../utils/repositoryResolver");
|
|
45
|
-
const package_json_1 = __importDefault(require("../../package.json"));
|
|
46
|
-
class AzureDevOpsService {
|
|
47
|
-
constructor(config) {
|
|
48
|
-
this.throttleNotices = [];
|
|
49
|
-
this.config = config;
|
|
50
|
-
// Get the appropriate authentication handler
|
|
51
|
-
const tokenCredentialAuthTypes = ["entra", "azcli", "interactive"];
|
|
52
|
-
if (config.auth?.type && tokenCredentialAuthTypes.includes(config.auth.type)) {
|
|
53
|
-
if (config.isOnPremises) {
|
|
54
|
-
throw new Error(`${config.auth.type} authentication is not supported for on-premises Azure DevOps.`);
|
|
55
|
-
}
|
|
56
|
-
if (!config.tokenCredentialAuthHandler) {
|
|
57
|
-
throw new Error(`${config.auth.type} authentication requires a pre-initialized token credential auth handler.`);
|
|
58
|
-
}
|
|
59
|
-
this.authHandler = config.tokenCredentialAuthHandler;
|
|
60
|
-
}
|
|
61
|
-
else if (config.isOnPremises && config.auth) {
|
|
62
|
-
switch (config.auth.type) {
|
|
63
|
-
case 'ntlm':
|
|
64
|
-
if (!config.auth.username || !config.auth.password) {
|
|
65
|
-
throw new Error("NTLM authentication requires username and password");
|
|
66
|
-
}
|
|
67
|
-
this.authHandler = (0, WebApi_1.getNtlmHandler)(config.auth.username, config.auth.password, config.auth.domain);
|
|
68
|
-
break;
|
|
69
|
-
case 'basic':
|
|
70
|
-
if (!config.auth.username || !config.auth.password) {
|
|
71
|
-
throw new Error("Basic authentication requires username and password");
|
|
72
|
-
}
|
|
73
|
-
this.authHandler = (0, WebApi_1.getBasicHandler)(config.auth.username, config.auth.password);
|
|
74
|
-
break;
|
|
75
|
-
case 'pat':
|
|
76
|
-
default: // Default to PAT for on-premises if auth type is missing or unrecognized
|
|
77
|
-
if (!config.personalAccessToken) {
|
|
78
|
-
throw new Error("PAT authentication requires a personal access token for on-premises if specified or as fallback.");
|
|
79
|
-
}
|
|
80
|
-
this.authHandler = (0, WebApi_1.getPersonalAccessTokenHandler)(config.personalAccessToken);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
// Cloud environment, and not 'entra'
|
|
85
|
-
if (config.auth?.type === "pat" || !config.auth) {
|
|
86
|
-
// Explicitly PAT or no auth specified (defaults to PAT for cloud)
|
|
87
|
-
if (!config.personalAccessToken) {
|
|
88
|
-
throw new Error("Personal Access Token is required for cloud authentication when auth type is PAT or not specified.");
|
|
89
|
-
}
|
|
90
|
-
this.authHandler = (0, WebApi_1.getPersonalAccessTokenHandler)(config.personalAccessToken);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
// This case should ideally not be reached if config is validated correctly
|
|
94
|
-
throw new Error(`Unsupported authentication type "${config.auth?.type}" for Azure DevOps cloud.`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Create the connection with the appropriate base URL
|
|
98
|
-
let baseUrl = config.orgUrl;
|
|
99
|
-
if (config.isOnPremises && config.collection) {
|
|
100
|
-
// For on-premises, ensure the collection is included in the URL
|
|
101
|
-
baseUrl = `${config.orgUrl}/${config.collection}`;
|
|
102
|
-
}
|
|
103
|
-
// Create options for the WebApi
|
|
104
|
-
const requestOptions = {};
|
|
105
|
-
const hostName = os.hostname().replace(/[^A-Za-z0-9._-]/g, '_');
|
|
106
|
-
let userName = 'unknown-user';
|
|
107
|
-
try {
|
|
108
|
-
userName = os.userInfo().username.replace(/[^A-Za-z0-9._-]/g, '_');
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
// Best effort only; keep the client traceable even if user info is unavailable.
|
|
112
|
-
}
|
|
113
|
-
const userAgent = `azuredevops-mcp/${package_json_1.default.version} (${hostName}; ${userName})`;
|
|
114
|
-
requestOptions.headers = {
|
|
115
|
-
'User-Agent': userAgent,
|
|
116
|
-
};
|
|
117
|
-
// For on-premises with API version specification, we'll add it to request headers
|
|
118
|
-
if (config.isOnPremises && config.apiVersion) {
|
|
119
|
-
requestOptions.headers = {
|
|
120
|
-
...requestOptions.headers,
|
|
121
|
-
Accept: `application/json;api-version=${config.apiVersion}`,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
// Create the WebApi instance
|
|
125
|
-
// At this point, authHandler is guaranteed to be defined or an error would have been thrown.
|
|
126
|
-
this.connection = new azdev.WebApi(baseUrl, this.authHandler, requestOptions);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Get the WorkItemTracking API client
|
|
130
|
-
*/
|
|
131
|
-
async getWorkItemTrackingApi() {
|
|
132
|
-
return await this.connection.getWorkItemTrackingApi();
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Defense-in-depth: retry an operation once after refreshing the auth token.
|
|
136
|
-
* Catches auth errors (401/403) at the service layer even if the HTTP-level
|
|
137
|
-
* retry in TokenCredentialAuthHandler didn't fire (e.g. SDK swallowed it).
|
|
138
|
-
*/
|
|
139
|
-
async withAuthRetry(operation, context, throttleAccumulator) {
|
|
140
|
-
let authRetried = false;
|
|
141
|
-
let throttleRetried = 0;
|
|
142
|
-
const contextLabel = this.formatRetryContext(context);
|
|
143
|
-
const notices = throttleAccumulator ?? this.throttleNotices;
|
|
144
|
-
while (true) {
|
|
145
|
-
try {
|
|
146
|
-
return await operation();
|
|
147
|
-
}
|
|
148
|
-
catch (error) {
|
|
149
|
-
const statusCode = error?.statusCode || error?.status;
|
|
150
|
-
const message = (error?.message || '').toLowerCase();
|
|
151
|
-
const isAuthError = statusCode === 401 || statusCode === 403
|
|
152
|
-
|| message.includes('unauthorized') || message.includes('authentication failed');
|
|
153
|
-
if (isAuthError && !authRetried && this.authHandler instanceof EntraAuthHandler_1.TokenCredentialAuthHandler) {
|
|
154
|
-
authRetried = true;
|
|
155
|
-
console.error(`[Auth] Service-layer auth retry: refreshing token${contextLabel ? ` for ${contextLabel}` : ''}...`);
|
|
156
|
-
await this.authHandler.forceRefresh();
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
|
-
const throttleInfo = this.getThrottleInfo(error);
|
|
160
|
-
if (throttleInfo && throttleRetried < 2) {
|
|
161
|
-
throttleRetried += 1;
|
|
162
|
-
notices.push({
|
|
163
|
-
...throttleInfo,
|
|
164
|
-
observedAt: new Date().toISOString(),
|
|
165
|
-
});
|
|
166
|
-
console.error(`[Throttle] Azure DevOps throttled request${contextLabel ? ` for ${contextLabel}` : ''}. Waiting ${throttleInfo.waitMs}ms before retry ${throttleRetried}.`);
|
|
167
|
-
await this.sleep(throttleInfo.waitMs);
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
if (throttleInfo) {
|
|
171
|
-
error.throttleInfo = {
|
|
172
|
-
throttled: true,
|
|
173
|
-
retryCount: throttleRetried,
|
|
174
|
-
totalWaitMs: notices.reduce((sum, notice) => sum + notice.waitMs, 0),
|
|
175
|
-
notices: [...notices, { ...throttleInfo, observedAt: new Date().toISOString() }],
|
|
176
|
-
context,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
throw error;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
static buildThrottleInfo(notices) {
|
|
184
|
-
if (notices.length === 0) {
|
|
185
|
-
return undefined;
|
|
186
|
-
}
|
|
187
|
-
return {
|
|
188
|
-
throttled: true,
|
|
189
|
-
retryCount: notices.length,
|
|
190
|
-
totalWaitMs: notices.reduce((sum, notice) => sum + notice.waitMs, 0),
|
|
191
|
-
notices,
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
drainThrottleInfo() {
|
|
195
|
-
if (this.throttleNotices.length === 0) {
|
|
196
|
-
return undefined;
|
|
197
|
-
}
|
|
198
|
-
const notices = [...this.throttleNotices];
|
|
199
|
-
this.throttleNotices = [];
|
|
200
|
-
return AzureDevOpsService.buildThrottleInfo(notices);
|
|
201
|
-
}
|
|
202
|
-
async sleep(waitMs) {
|
|
203
|
-
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
204
|
-
}
|
|
205
|
-
getThrottleInfo(error) {
|
|
206
|
-
const statusCode = error?.statusCode || error?.status;
|
|
207
|
-
const message = String(error?.message || '').toLowerCase();
|
|
208
|
-
const isThrottle = statusCode === 429
|
|
209
|
-
|| message.includes('rate limit')
|
|
210
|
-
|| message.includes('too many requests')
|
|
211
|
-
|| message.includes('throttle');
|
|
212
|
-
if (!isThrottle) {
|
|
213
|
-
return undefined;
|
|
214
|
-
}
|
|
215
|
-
const headers = error?.response?.headers || error?.headers || error?.result?.headers || error?.response?.message?.headers;
|
|
216
|
-
const retryAfter = this.getHeaderValue(headers, 'retry-after');
|
|
217
|
-
const rateLimitDelay = this.getHeaderValue(headers, 'x-ratelimit-delay');
|
|
218
|
-
let waitMs = 15000;
|
|
219
|
-
let reason = 'Azure DevOps is throttling requests.';
|
|
220
|
-
if (retryAfter) {
|
|
221
|
-
const retryAfterSeconds = Number(retryAfter);
|
|
222
|
-
if (!Number.isNaN(retryAfterSeconds)) {
|
|
223
|
-
waitMs = Math.max(1, Math.ceil(retryAfterSeconds)) * 1000;
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
const retryDate = Date.parse(retryAfter);
|
|
227
|
-
if (!Number.isNaN(retryDate)) {
|
|
228
|
-
waitMs = Math.max(1000, retryDate - Date.now());
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
reason = `Azure DevOps requested a retry after ${retryAfter}.`;
|
|
232
|
-
}
|
|
233
|
-
else if (rateLimitDelay) {
|
|
234
|
-
const delaySeconds = Number(rateLimitDelay);
|
|
235
|
-
if (!Number.isNaN(delaySeconds)) {
|
|
236
|
-
waitMs = Math.max(1, Math.ceil(delaySeconds)) * 1000;
|
|
237
|
-
}
|
|
238
|
-
reason = `Azure DevOps returned X-RateLimit-Delay=${rateLimitDelay}.`;
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
waitMs,
|
|
242
|
-
statusCode,
|
|
243
|
-
reason,
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
getHeaderValue(headers, name) {
|
|
247
|
-
if (!headers) {
|
|
248
|
-
return undefined;
|
|
249
|
-
}
|
|
250
|
-
if (typeof headers.get === 'function') {
|
|
251
|
-
return headers.get(name) || headers.get(name.toLowerCase()) || undefined;
|
|
252
|
-
}
|
|
253
|
-
if (Array.isArray(headers)) {
|
|
254
|
-
const match = headers.find((entry) => Array.isArray(entry) && String(entry[0]).toLowerCase() === name.toLowerCase());
|
|
255
|
-
return match ? String(match[1]) : undefined;
|
|
256
|
-
}
|
|
257
|
-
if (typeof headers === 'object') {
|
|
258
|
-
const key = Object.keys(headers).find((headerName) => headerName.toLowerCase() === name.toLowerCase());
|
|
259
|
-
if (key) {
|
|
260
|
-
const value = headers[key];
|
|
261
|
-
return Array.isArray(value) ? String(value[0]) : String(value);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
return undefined;
|
|
265
|
-
}
|
|
266
|
-
formatRetryContext(context) {
|
|
267
|
-
if (!context?.operationName) {
|
|
268
|
-
return '';
|
|
269
|
-
}
|
|
270
|
-
const details = context.details
|
|
271
|
-
? Object.entries(context.details)
|
|
272
|
-
.filter(([, value]) => value !== undefined)
|
|
273
|
-
.map(([key, value]) => `${key}=${value}`)
|
|
274
|
-
.join(', ')
|
|
275
|
-
: '';
|
|
276
|
-
return details ? `${context.operationName} (${details})` : context.operationName;
|
|
277
|
-
}
|
|
278
|
-
getRequestedFields(fields, defaults) {
|
|
279
|
-
const selected = fields && fields.length > 0 ? fields : (defaults || AzureDevOpsService.BASE_SUMMARY_FIELDS);
|
|
280
|
-
return Array.from(new Set(selected));
|
|
281
|
-
}
|
|
282
|
-
transformSummaryWorkItem(workItem) {
|
|
283
|
-
const fields = workItem.fields || {};
|
|
284
|
-
return {
|
|
285
|
-
id: workItem.id,
|
|
286
|
-
url: workItem.url,
|
|
287
|
-
title: fields['System.Title'],
|
|
288
|
-
teamProject: fields['System.TeamProject'],
|
|
289
|
-
workItemType: fields['System.WorkItemType'],
|
|
290
|
-
state: fields['System.State'],
|
|
291
|
-
assignedTo: fields['System.AssignedTo'] ? {
|
|
292
|
-
displayName: fields['System.AssignedTo'].displayName,
|
|
293
|
-
uniqueName: fields['System.AssignedTo'].uniqueName,
|
|
294
|
-
} : null,
|
|
295
|
-
createdBy: fields['System.CreatedBy'] ? {
|
|
296
|
-
displayName: fields['System.CreatedBy'].displayName,
|
|
297
|
-
uniqueName: fields['System.CreatedBy'].uniqueName,
|
|
298
|
-
} : null,
|
|
299
|
-
createdDate: fields['System.CreatedDate'],
|
|
300
|
-
changedDate: fields['System.ChangedDate'],
|
|
301
|
-
areaPath: fields['System.AreaPath'],
|
|
302
|
-
iterationPath: fields['System.IterationPath'],
|
|
303
|
-
priority: fields['Microsoft.VSTS.Common.Priority'],
|
|
304
|
-
originalEstimate: fields['Microsoft.VSTS.Scheduling.OriginalEstimate'],
|
|
305
|
-
completedWork: fields['Microsoft.VSTS.Scheduling.CompletedWork'],
|
|
306
|
-
remainingWork: fields['Microsoft.VSTS.Scheduling.RemainingWork'],
|
|
307
|
-
fields,
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Batch-fetch work item details for an array of refs (IDs or relation objects).
|
|
312
|
-
* Handles the ADO 200-ID-per-call limit automatically.
|
|
313
|
-
*/
|
|
314
|
-
async hydrateWorkItemRefs(refs, options) {
|
|
315
|
-
const extractId = options?.extractId ?? ((ref) => ref?.id);
|
|
316
|
-
const project = options?.project ?? this.config.project;
|
|
317
|
-
const operationName = options?.operationName ?? 'batchHydrate';
|
|
318
|
-
const ids = (refs || [])
|
|
319
|
-
.map(extractId)
|
|
320
|
-
.filter((id) => typeof id === 'number');
|
|
321
|
-
if (ids.length === 0) {
|
|
322
|
-
return [];
|
|
323
|
-
}
|
|
324
|
-
const witApi = await this.getWorkItemTrackingApi();
|
|
325
|
-
const requestedFields = this.getRequestedFields(options?.fields, options?.defaults);
|
|
326
|
-
const BATCH_SIZE = 200;
|
|
327
|
-
const allWorkItems = [];
|
|
328
|
-
for (let i = 0; i < ids.length; i += BATCH_SIZE) {
|
|
329
|
-
const batch = ids.slice(i, i + BATCH_SIZE);
|
|
330
|
-
const batchResult = await this.withAuthRetry(() => witApi.getWorkItems(batch, requestedFields, undefined, undefined, undefined, project), { operationName, details: { project, ids: batch.length, fields: requestedFields.length } }, options?.throttleAccumulator);
|
|
331
|
-
allWorkItems.push(...(batchResult || []));
|
|
332
|
-
}
|
|
333
|
-
return allWorkItems.map((workItem) => this.transformSummaryWorkItem(workItem));
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Get the authenticated user's ID, cached after first resolution.
|
|
337
|
-
*/
|
|
338
|
-
async getAuthenticatedUserId() {
|
|
339
|
-
if (!this._authenticatedUserId) {
|
|
340
|
-
const connectionData = await this.connection.connect();
|
|
341
|
-
this._authenticatedUserId = connectionData.authenticatedUser?.id;
|
|
342
|
-
}
|
|
343
|
-
if (!this._authenticatedUserId) {
|
|
344
|
-
throw new Error('Could not determine authenticated user identity. Ensure your credentials are valid.');
|
|
345
|
-
}
|
|
346
|
-
return this._authenticatedUserId;
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Resolve a repository name to its ID (GUID).
|
|
350
|
-
* Returns as-is if already a GUID. Subclasses (e.g. GitService) may
|
|
351
|
-
* override with caching or richer error handling.
|
|
352
|
-
*/
|
|
353
|
-
async resolveRepositoryId(repository, project) {
|
|
354
|
-
if ((0, repositoryResolver_1.isRepositoryId)(repository)) {
|
|
355
|
-
return repository;
|
|
356
|
-
}
|
|
357
|
-
const gitApi = await this.connection.getGitApi();
|
|
358
|
-
const repo = await gitApi.getRepository(repository, project || this.config.project);
|
|
359
|
-
if (!repo?.id) {
|
|
360
|
-
throw new Error(`Could not resolve repository "${repository}" in project "${project || this.config.project}"`);
|
|
361
|
-
}
|
|
362
|
-
return repo.id;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
exports.AzureDevOpsService = AzureDevOpsService;
|
|
366
|
-
AzureDevOpsService.BASE_SUMMARY_FIELDS = [
|
|
367
|
-
'System.Id',
|
|
368
|
-
'System.Title',
|
|
369
|
-
'System.TeamProject',
|
|
370
|
-
'System.WorkItemType',
|
|
371
|
-
'System.State',
|
|
372
|
-
'System.AssignedTo',
|
|
373
|
-
'System.CreatedBy',
|
|
374
|
-
'System.CreatedDate',
|
|
375
|
-
'System.ChangedDate',
|
|
376
|
-
'System.AreaPath',
|
|
377
|
-
'System.IterationPath',
|
|
378
|
-
'Microsoft.VSTS.Common.Priority',
|
|
379
|
-
];
|
|
380
|
-
AzureDevOpsService.SCHEDULING_FIELDS = [
|
|
381
|
-
'Microsoft.VSTS.Scheduling.OriginalEstimate',
|
|
382
|
-
'Microsoft.VSTS.Scheduling.CompletedWork',
|
|
383
|
-
'Microsoft.VSTS.Scheduling.RemainingWork',
|
|
384
|
-
];
|
|
385
|
-
//# sourceMappingURL=AzureDevOpsService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AzureDevOpsService.js","sourceRoot":"","sources":["../../../src/Services/AzureDevOpsService.ts"],"names":[],"mappings":"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"}
|