@achieveai/azuredevops-mcp 1.2.4 → 1.2.5
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.
|
@@ -149,15 +149,26 @@ class TokenCredentialAuthHandler {
|
|
|
149
149
|
const existingRecord = loadAuthRecord(label);
|
|
150
150
|
if (existingRecord) {
|
|
151
151
|
try {
|
|
152
|
-
|
|
152
|
+
// Probe with disableAutomaticAuthentication to prevent browser popup.
|
|
153
|
+
// If the refresh token is expired, this throws AuthenticationRequiredError
|
|
154
|
+
// instead of silently opening a browser.
|
|
155
|
+
const probe = new identity_1.InteractiveBrowserCredential({
|
|
153
156
|
...credentialOptions,
|
|
154
157
|
authenticationRecord: existingRecord,
|
|
158
|
+
disableAutomaticAuthentication: true,
|
|
155
159
|
});
|
|
156
|
-
|
|
157
|
-
const token = await credential.getToken(AZURE_DEVOPS_SCOPE);
|
|
160
|
+
const token = await probe.getToken(AZURE_DEVOPS_SCOPE);
|
|
158
161
|
if (token) {
|
|
159
162
|
console.error(`[Auth] Silent authentication succeeded for "${label}".`);
|
|
163
|
+
// Create the REAL credential WITHOUT disableAutomaticAuthentication
|
|
164
|
+
// so that ensureToken() can silently refresh during the server's lifetime.
|
|
165
|
+
const credential = new identity_1.InteractiveBrowserCredential({
|
|
166
|
+
...credentialOptions,
|
|
167
|
+
authenticationRecord: existingRecord,
|
|
168
|
+
});
|
|
160
169
|
const handler = new TokenCredentialAuthHandler(credential);
|
|
170
|
+
handler.authRecordLabel = label;
|
|
171
|
+
handler.credentialOptions = credentialOptions;
|
|
161
172
|
handler.token = token;
|
|
162
173
|
handler.authHandler = azdev.getHandlerFromToken(token.token);
|
|
163
174
|
return handler;
|
|
@@ -177,6 +188,8 @@ class TokenCredentialAuthHandler {
|
|
|
177
188
|
console.error(`[Auth] Authentication record saved for "${label}".`);
|
|
178
189
|
}
|
|
179
190
|
const handler = new TokenCredentialAuthHandler(credential);
|
|
191
|
+
handler.authRecordLabel = label;
|
|
192
|
+
handler.credentialOptions = credentialOptions;
|
|
180
193
|
await handler.ensureToken();
|
|
181
194
|
return handler;
|
|
182
195
|
}
|
|
@@ -186,12 +199,35 @@ class TokenCredentialAuthHandler {
|
|
|
186
199
|
}
|
|
187
200
|
async ensureToken() {
|
|
188
201
|
if (!this.token || this.isTokenExpired()) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
202
|
+
try {
|
|
203
|
+
const token = await this.credential.getToken(AZURE_DEVOPS_SCOPE);
|
|
204
|
+
if (!token)
|
|
205
|
+
throw new Error("getToken returned null");
|
|
206
|
+
this.token = token;
|
|
207
|
+
this.authHandler = azdev.getHandlerFromToken(this.token.token);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
// Self-heal: rebuild credential from saved auth record (same as a restart).
|
|
211
|
+
if (this.authRecordLabel && this.credentialOptions) {
|
|
212
|
+
console.error(`[Auth] Token refresh failed, attempting self-heal for "${this.authRecordLabel}"...`);
|
|
213
|
+
const record = loadAuthRecord(this.authRecordLabel);
|
|
214
|
+
if (record) {
|
|
215
|
+
const freshCredential = new identity_1.InteractiveBrowserCredential({
|
|
216
|
+
...this.credentialOptions,
|
|
217
|
+
authenticationRecord: record,
|
|
218
|
+
});
|
|
219
|
+
const token = await freshCredential.getToken(AZURE_DEVOPS_SCOPE);
|
|
220
|
+
if (token) {
|
|
221
|
+
console.error(`[Auth] Self-heal succeeded for "${this.authRecordLabel}".`);
|
|
222
|
+
this.credential = freshCredential;
|
|
223
|
+
this.token = token;
|
|
224
|
+
this.authHandler = azdev.getHandlerFromToken(token.token);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
throw new Error(`Failed to acquire Azure DevOps access token: ${err}`);
|
|
192
230
|
}
|
|
193
|
-
this.token = token;
|
|
194
|
-
this.authHandler = azdev.getHandlerFromToken(this.token.token);
|
|
195
231
|
}
|
|
196
232
|
}
|
|
197
233
|
prepareRequest(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntraAuthHandler.js","sourceRoot":"","sources":["../../src/Services/EntraAuthHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CASyB;AACzB,8CAAoD;AACpD,kFAA2E;AAG3E,6DAA+C;AAC/C,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,wGAAwG;AACxG,IAAI,CAAC;IACH,IAAA,4BAAiB,EAAC,mDAAsB,CAAC,CAAC;AAC5C,CAAC;AAAC,MAAM,CAAC;IACP,iFAAiF;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,kBAAkB,GAAG,+CAA+C,CAAC;AAE3E,gFAAgF;AAChF,MAAM,mBAAmB,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAE9C,mDAAmD;AAEnD,4GAA4G;AAC5G,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,SAAS,CAAC;IAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAA,0CAA+B,EAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,MAA4B;IACjE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,IAAA,wCAA6B,EAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0CAA0C,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAa,0BAA0B;
|
|
1
|
+
{"version":3,"file":"EntraAuthHandler.js","sourceRoot":"","sources":["../../src/Services/EntraAuthHandler.ts"],"names":[],"mappings":"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"}
|