@ai-sdk/mcp 1.0.81 → 1.0.82
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/CHANGELOG.md +6 -0
- package/dist/index.js +40 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +40 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/tool/mcp-sse-transport.ts +50 -10
package/dist/index.mjs
CHANGED
|
@@ -1407,6 +1407,30 @@ var SseMCPTransport = class {
|
|
|
1407
1407
|
getRuntimeEnvironmentUserAgent()
|
|
1408
1408
|
);
|
|
1409
1409
|
}
|
|
1410
|
+
/**
|
|
1411
|
+
* Runs a single OAuth recovery flow for concurrent 401 responses.
|
|
1412
|
+
*/
|
|
1413
|
+
authorizeOnce(resourceMetadataUrl, scope) {
|
|
1414
|
+
if (!this.authProvider) {
|
|
1415
|
+
return Promise.resolve("REDIRECT");
|
|
1416
|
+
}
|
|
1417
|
+
if (!this.authPromise) {
|
|
1418
|
+
this.authPromise = auth(this.authProvider, {
|
|
1419
|
+
serverUrl: this.url,
|
|
1420
|
+
resourceMetadataUrl,
|
|
1421
|
+
scope,
|
|
1422
|
+
fetchFn: this.fetchFn
|
|
1423
|
+
}).finally(() => {
|
|
1424
|
+
this.authPromise = void 0;
|
|
1425
|
+
});
|
|
1426
|
+
}
|
|
1427
|
+
return this.authPromise;
|
|
1428
|
+
}
|
|
1429
|
+
async accessTokenChanged(requestAuthorization) {
|
|
1430
|
+
var _a3, _b3;
|
|
1431
|
+
const accessToken = (_b3 = await ((_a3 = this.authProvider) == null ? void 0 : _a3.tokens())) == null ? void 0 : _b3.access_token;
|
|
1432
|
+
return accessToken != null && requestAuthorization !== `Bearer ${accessToken}`;
|
|
1433
|
+
}
|
|
1410
1434
|
async start() {
|
|
1411
1435
|
return new Promise((resolve, reject) => {
|
|
1412
1436
|
if (this.connected) {
|
|
@@ -1428,12 +1452,10 @@ var SseMCPTransport = class {
|
|
|
1428
1452
|
const { resourceMetadataUrl, scope } = extractWWWAuthenticateParams(response);
|
|
1429
1453
|
this.resourceMetadataUrl = resourceMetadataUrl;
|
|
1430
1454
|
try {
|
|
1431
|
-
const result = await
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
fetchFn: this.fetchFn
|
|
1436
|
-
});
|
|
1455
|
+
const result = await this.authorizeOnce(
|
|
1456
|
+
this.resourceMetadataUrl,
|
|
1457
|
+
scope
|
|
1458
|
+
);
|
|
1437
1459
|
if (result !== "AUTHORIZED") {
|
|
1438
1460
|
const error = new UnauthorizedError();
|
|
1439
1461
|
(_b3 = this.onerror) == null ? void 0 : _b3.call(this, error);
|
|
@@ -1546,7 +1568,7 @@ var SseMCPTransport = class {
|
|
|
1546
1568
|
const transportSignal = (_b3 = this.abortController) == null ? void 0 : _b3.signal;
|
|
1547
1569
|
const requestSignal = (options == null ? void 0 : options.signal) == null ? transportSignal : transportSignal == null ? options.signal : AbortSignal.any([transportSignal, options.signal]);
|
|
1548
1570
|
const attempt = async (triedAuth = false) => {
|
|
1549
|
-
var _a4, _b4;
|
|
1571
|
+
var _a4, _b4, _c;
|
|
1550
1572
|
try {
|
|
1551
1573
|
const headers = await this.commonHeaders({
|
|
1552
1574
|
"Content-Type": "application/json"
|
|
@@ -1560,14 +1582,17 @@ var SseMCPTransport = class {
|
|
|
1560
1582
|
};
|
|
1561
1583
|
const response = await this.fetchFn(endpoint.href, init);
|
|
1562
1584
|
if (response.status === 401 && this.authProvider && !triedAuth) {
|
|
1585
|
+
if (await this.accessTokenChanged(
|
|
1586
|
+
(_a4 = new Headers(headers).get("authorization")) != null ? _a4 : void 0
|
|
1587
|
+
)) {
|
|
1588
|
+
return attempt(true);
|
|
1589
|
+
}
|
|
1563
1590
|
const { resourceMetadataUrl, scope } = extractWWWAuthenticateParams(response);
|
|
1564
1591
|
this.resourceMetadataUrl = resourceMetadataUrl;
|
|
1565
|
-
const result = await
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
fetchFn: this.fetchFn
|
|
1570
|
-
});
|
|
1592
|
+
const result = await this.authorizeOnce(
|
|
1593
|
+
this.resourceMetadataUrl,
|
|
1594
|
+
scope
|
|
1595
|
+
);
|
|
1571
1596
|
if (result !== "AUTHORIZED") {
|
|
1572
1597
|
throw new UnauthorizedError();
|
|
1573
1598
|
}
|
|
@@ -1584,10 +1609,10 @@ var SseMCPTransport = class {
|
|
|
1584
1609
|
throw error;
|
|
1585
1610
|
}
|
|
1586
1611
|
} catch (error) {
|
|
1587
|
-
if ((
|
|
1612
|
+
if ((_b4 = options == null ? void 0 : options.signal) == null ? void 0 : _b4.aborted) {
|
|
1588
1613
|
throw error;
|
|
1589
1614
|
}
|
|
1590
|
-
(
|
|
1615
|
+
(_c = this.onerror) == null ? void 0 : _c.call(this, error);
|
|
1591
1616
|
throw error;
|
|
1592
1617
|
}
|
|
1593
1618
|
};
|