@ai-sdk/mcp 1.0.81 → 1.0.83

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/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 auth(this.authProvider, {
1432
- serverUrl: this.url,
1433
- resourceMetadataUrl: this.resourceMetadataUrl,
1434
- scope,
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 auth(this.authProvider, {
1566
- serverUrl: this.url,
1567
- resourceMetadataUrl: this.resourceMetadataUrl,
1568
- scope,
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 ((_a4 = options == null ? void 0 : options.signal) == null ? void 0 : _a4.aborted) {
1612
+ if ((_b4 = options == null ? void 0 : options.signal) == null ? void 0 : _b4.aborted) {
1588
1613
  throw error;
1589
1614
  }
1590
- (_b4 = this.onerror) == null ? void 0 : _b4.call(this, error);
1615
+ (_c = this.onerror) == null ? void 0 : _c.call(this, error);
1591
1616
  throw error;
1592
1617
  }
1593
1618
  };