integrate-sdk 0.7.67 → 0.8.1

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.
@@ -1489,6 +1489,7 @@ class OAuthManager {
1489
1489
  apiBaseUrl;
1490
1490
  getTokenCallback;
1491
1491
  setTokenCallback;
1492
+ removeTokenCallback;
1492
1493
  skipLocalStorage;
1493
1494
  constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
1494
1495
  this.oauthApiBase = oauthApiBase;
@@ -1501,6 +1502,7 @@ class OAuthManager {
1501
1502
  };
1502
1503
  this.getTokenCallback = tokenCallbacks?.getProviderToken;
1503
1504
  this.setTokenCallback = tokenCallbacks?.setProviderToken;
1505
+ this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
1504
1506
  this.skipLocalStorage = tokenCallbacks?.skipLocalStorage ?? !!tokenCallbacks?.getProviderToken;
1505
1507
  this.cleanupExpiredPendingAuths();
1506
1508
  }
@@ -1590,10 +1592,22 @@ class OAuthManager {
1590
1592
  expiresAt: tokenData.expiresAt
1591
1593
  };
1592
1594
  }
1593
- async disconnectProvider(provider) {
1594
- const tokenData = await this.getProviderToken(provider);
1595
- if (!tokenData) {
1596
- throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
1595
+ async disconnectProvider(provider, context) {
1596
+ if (this.removeTokenCallback) {
1597
+ try {
1598
+ await this.removeTokenCallback(provider, context);
1599
+ } catch (error) {
1600
+ console.error(`Failed to delete token for ${provider} from database via removeProviderToken:`, error);
1601
+ }
1602
+ } else if (this.setTokenCallback) {
1603
+ try {
1604
+ const tokenData = await this.getProviderToken(provider, context);
1605
+ if (tokenData) {
1606
+ await this.setTokenCallback(provider, null, context);
1607
+ }
1608
+ } catch (error) {
1609
+ console.error(`Failed to delete token for ${provider} from database via setProviderToken:`, error);
1610
+ }
1597
1611
  }
1598
1612
  this.providerTokens.delete(provider);
1599
1613
  this.clearProviderToken(provider);
@@ -1620,7 +1634,11 @@ class OAuthManager {
1620
1634
  return this.providerTokens.get(provider);
1621
1635
  }
1622
1636
  async setProviderToken(provider, tokenData, context) {
1623
- this.providerTokens.set(provider, tokenData);
1637
+ if (tokenData === null) {
1638
+ this.providerTokens.delete(provider);
1639
+ } else {
1640
+ this.providerTokens.set(provider, tokenData);
1641
+ }
1624
1642
  await this.saveProviderToken(provider, tokenData, context);
1625
1643
  }
1626
1644
  clearProviderToken(provider) {
@@ -1669,11 +1687,15 @@ class OAuthManager {
1669
1687
  try {
1670
1688
  await this.setTokenCallback(provider, tokenData, context);
1671
1689
  } catch (error) {
1672
- console.error(`Failed to save token for ${provider} via callback:`, error);
1690
+ console.error(`Failed to ${tokenData === null ? "delete" : "save"} token for ${provider} via callback:`, error);
1673
1691
  throw error;
1674
1692
  }
1675
1693
  return;
1676
1694
  }
1695
+ if (tokenData === null) {
1696
+ this.clearProviderToken(provider);
1697
+ return;
1698
+ }
1677
1699
  if (this.skipLocalStorage) {
1678
1700
  return;
1679
1701
  }
@@ -1952,6 +1974,7 @@ class MCPClientBase {
1952
1974
  this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
1953
1975
  getProviderToken: config.getProviderToken,
1954
1976
  setProviderToken: config.setProviderToken,
1977
+ removeProviderToken: config.removeProviderToken,
1955
1978
  skipLocalStorage: config.skipLocalStorage
1956
1979
  });
1957
1980
  for (const integration of this.integrations) {
@@ -2310,12 +2333,33 @@ class MCPClientBase {
2310
2333
  isProviderAuthenticated(provider) {
2311
2334
  return this.authState.get(provider)?.authenticated ?? false;
2312
2335
  }
2313
- async isAuthorized(provider) {
2336
+ async isAuthorized(provider, context) {
2314
2337
  if (this.oauthCallbackPromise) {
2315
2338
  await this.oauthCallbackPromise;
2316
2339
  this.oauthCallbackPromise = null;
2317
2340
  }
2318
- return this.authState.get(provider)?.authenticated ?? false;
2341
+ try {
2342
+ const tokenData = await this.oauthManager.getProviderToken(provider, context);
2343
+ const isAuthenticated = !!tokenData;
2344
+ const currentState = this.authState.get(provider);
2345
+ if (currentState) {
2346
+ currentState.authenticated = isAuthenticated;
2347
+ if (isAuthenticated) {
2348
+ currentState.lastError = undefined;
2349
+ }
2350
+ } else {
2351
+ this.authState.set(provider, { authenticated: isAuthenticated });
2352
+ }
2353
+ return isAuthenticated;
2354
+ } catch (error) {
2355
+ const currentState = this.authState.get(provider);
2356
+ if (currentState) {
2357
+ currentState.authenticated = false;
2358
+ } else {
2359
+ this.authState.set(provider, { authenticated: false });
2360
+ }
2361
+ return false;
2362
+ }
2319
2363
  }
2320
2364
  async authorizedProviders() {
2321
2365
  if (this.oauthCallbackPromise) {
@@ -1348,6 +1348,7 @@ class OAuthManager {
1348
1348
  apiBaseUrl;
1349
1349
  getTokenCallback;
1350
1350
  setTokenCallback;
1351
+ removeTokenCallback;
1351
1352
  skipLocalStorage;
1352
1353
  constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
1353
1354
  this.oauthApiBase = oauthApiBase;
@@ -1360,6 +1361,7 @@ class OAuthManager {
1360
1361
  };
1361
1362
  this.getTokenCallback = tokenCallbacks?.getProviderToken;
1362
1363
  this.setTokenCallback = tokenCallbacks?.setProviderToken;
1364
+ this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
1363
1365
  this.skipLocalStorage = tokenCallbacks?.skipLocalStorage ?? !!tokenCallbacks?.getProviderToken;
1364
1366
  this.cleanupExpiredPendingAuths();
1365
1367
  }
@@ -1449,10 +1451,22 @@ class OAuthManager {
1449
1451
  expiresAt: tokenData.expiresAt
1450
1452
  };
1451
1453
  }
1452
- async disconnectProvider(provider) {
1453
- const tokenData = await this.getProviderToken(provider);
1454
- if (!tokenData) {
1455
- throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
1454
+ async disconnectProvider(provider, context) {
1455
+ if (this.removeTokenCallback) {
1456
+ try {
1457
+ await this.removeTokenCallback(provider, context);
1458
+ } catch (error) {
1459
+ console.error(`Failed to delete token for ${provider} from database via removeProviderToken:`, error);
1460
+ }
1461
+ } else if (this.setTokenCallback) {
1462
+ try {
1463
+ const tokenData = await this.getProviderToken(provider, context);
1464
+ if (tokenData) {
1465
+ await this.setTokenCallback(provider, null, context);
1466
+ }
1467
+ } catch (error) {
1468
+ console.error(`Failed to delete token for ${provider} from database via setProviderToken:`, error);
1469
+ }
1456
1470
  }
1457
1471
  this.providerTokens.delete(provider);
1458
1472
  this.clearProviderToken(provider);
@@ -1479,7 +1493,11 @@ class OAuthManager {
1479
1493
  return this.providerTokens.get(provider);
1480
1494
  }
1481
1495
  async setProviderToken(provider, tokenData, context) {
1482
- this.providerTokens.set(provider, tokenData);
1496
+ if (tokenData === null) {
1497
+ this.providerTokens.delete(provider);
1498
+ } else {
1499
+ this.providerTokens.set(provider, tokenData);
1500
+ }
1483
1501
  await this.saveProviderToken(provider, tokenData, context);
1484
1502
  }
1485
1503
  clearProviderToken(provider) {
@@ -1528,11 +1546,15 @@ class OAuthManager {
1528
1546
  try {
1529
1547
  await this.setTokenCallback(provider, tokenData, context);
1530
1548
  } catch (error) {
1531
- console.error(`Failed to save token for ${provider} via callback:`, error);
1549
+ console.error(`Failed to ${tokenData === null ? "delete" : "save"} token for ${provider} via callback:`, error);
1532
1550
  throw error;
1533
1551
  }
1534
1552
  return;
1535
1553
  }
1554
+ if (tokenData === null) {
1555
+ this.clearProviderToken(provider);
1556
+ return;
1557
+ }
1536
1558
  if (this.skipLocalStorage) {
1537
1559
  return;
1538
1560
  }
@@ -1811,6 +1833,7 @@ class MCPClientBase {
1811
1833
  this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
1812
1834
  getProviderToken: config.getProviderToken,
1813
1835
  setProviderToken: config.setProviderToken,
1836
+ removeProviderToken: config.removeProviderToken,
1814
1837
  skipLocalStorage: config.skipLocalStorage
1815
1838
  });
1816
1839
  for (const integration of this.integrations) {
@@ -2169,12 +2192,33 @@ class MCPClientBase {
2169
2192
  isProviderAuthenticated(provider) {
2170
2193
  return this.authState.get(provider)?.authenticated ?? false;
2171
2194
  }
2172
- async isAuthorized(provider) {
2195
+ async isAuthorized(provider, context) {
2173
2196
  if (this.oauthCallbackPromise) {
2174
2197
  await this.oauthCallbackPromise;
2175
2198
  this.oauthCallbackPromise = null;
2176
2199
  }
2177
- return this.authState.get(provider)?.authenticated ?? false;
2200
+ try {
2201
+ const tokenData = await this.oauthManager.getProviderToken(provider, context);
2202
+ const isAuthenticated = !!tokenData;
2203
+ const currentState = this.authState.get(provider);
2204
+ if (currentState) {
2205
+ currentState.authenticated = isAuthenticated;
2206
+ if (isAuthenticated) {
2207
+ currentState.lastError = undefined;
2208
+ }
2209
+ } else {
2210
+ this.authState.set(provider, { authenticated: isAuthenticated });
2211
+ }
2212
+ return isAuthenticated;
2213
+ } catch (error) {
2214
+ const currentState = this.authState.get(provider);
2215
+ if (currentState) {
2216
+ currentState.authenticated = false;
2217
+ } else {
2218
+ this.authState.set(provider, { authenticated: false });
2219
+ }
2220
+ return false;
2221
+ }
2178
2222
  }
2179
2223
  async authorizedProviders() {
2180
2224
  if (this.oauthCallbackPromise) {
@@ -1348,6 +1348,7 @@ class OAuthManager {
1348
1348
  apiBaseUrl;
1349
1349
  getTokenCallback;
1350
1350
  setTokenCallback;
1351
+ removeTokenCallback;
1351
1352
  skipLocalStorage;
1352
1353
  constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
1353
1354
  this.oauthApiBase = oauthApiBase;
@@ -1360,6 +1361,7 @@ class OAuthManager {
1360
1361
  };
1361
1362
  this.getTokenCallback = tokenCallbacks?.getProviderToken;
1362
1363
  this.setTokenCallback = tokenCallbacks?.setProviderToken;
1364
+ this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
1363
1365
  this.skipLocalStorage = tokenCallbacks?.skipLocalStorage ?? !!tokenCallbacks?.getProviderToken;
1364
1366
  this.cleanupExpiredPendingAuths();
1365
1367
  }
@@ -1449,10 +1451,22 @@ class OAuthManager {
1449
1451
  expiresAt: tokenData.expiresAt
1450
1452
  };
1451
1453
  }
1452
- async disconnectProvider(provider) {
1453
- const tokenData = await this.getProviderToken(provider);
1454
- if (!tokenData) {
1455
- throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
1454
+ async disconnectProvider(provider, context) {
1455
+ if (this.removeTokenCallback) {
1456
+ try {
1457
+ await this.removeTokenCallback(provider, context);
1458
+ } catch (error) {
1459
+ console.error(`Failed to delete token for ${provider} from database via removeProviderToken:`, error);
1460
+ }
1461
+ } else if (this.setTokenCallback) {
1462
+ try {
1463
+ const tokenData = await this.getProviderToken(provider, context);
1464
+ if (tokenData) {
1465
+ await this.setTokenCallback(provider, null, context);
1466
+ }
1467
+ } catch (error) {
1468
+ console.error(`Failed to delete token for ${provider} from database via setProviderToken:`, error);
1469
+ }
1456
1470
  }
1457
1471
  this.providerTokens.delete(provider);
1458
1472
  this.clearProviderToken(provider);
@@ -1479,7 +1493,11 @@ class OAuthManager {
1479
1493
  return this.providerTokens.get(provider);
1480
1494
  }
1481
1495
  async setProviderToken(provider, tokenData, context) {
1482
- this.providerTokens.set(provider, tokenData);
1496
+ if (tokenData === null) {
1497
+ this.providerTokens.delete(provider);
1498
+ } else {
1499
+ this.providerTokens.set(provider, tokenData);
1500
+ }
1483
1501
  await this.saveProviderToken(provider, tokenData, context);
1484
1502
  }
1485
1503
  clearProviderToken(provider) {
@@ -1528,11 +1546,15 @@ class OAuthManager {
1528
1546
  try {
1529
1547
  await this.setTokenCallback(provider, tokenData, context);
1530
1548
  } catch (error) {
1531
- console.error(`Failed to save token for ${provider} via callback:`, error);
1549
+ console.error(`Failed to ${tokenData === null ? "delete" : "save"} token for ${provider} via callback:`, error);
1532
1550
  throw error;
1533
1551
  }
1534
1552
  return;
1535
1553
  }
1554
+ if (tokenData === null) {
1555
+ this.clearProviderToken(provider);
1556
+ return;
1557
+ }
1536
1558
  if (this.skipLocalStorage) {
1537
1559
  return;
1538
1560
  }
@@ -1811,6 +1833,7 @@ class MCPClientBase {
1811
1833
  this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
1812
1834
  getProviderToken: config.getProviderToken,
1813
1835
  setProviderToken: config.setProviderToken,
1836
+ removeProviderToken: config.removeProviderToken,
1814
1837
  skipLocalStorage: config.skipLocalStorage
1815
1838
  });
1816
1839
  for (const integration of this.integrations) {
@@ -2169,12 +2192,33 @@ class MCPClientBase {
2169
2192
  isProviderAuthenticated(provider) {
2170
2193
  return this.authState.get(provider)?.authenticated ?? false;
2171
2194
  }
2172
- async isAuthorized(provider) {
2195
+ async isAuthorized(provider, context) {
2173
2196
  if (this.oauthCallbackPromise) {
2174
2197
  await this.oauthCallbackPromise;
2175
2198
  this.oauthCallbackPromise = null;
2176
2199
  }
2177
- return this.authState.get(provider)?.authenticated ?? false;
2200
+ try {
2201
+ const tokenData = await this.oauthManager.getProviderToken(provider, context);
2202
+ const isAuthenticated = !!tokenData;
2203
+ const currentState = this.authState.get(provider);
2204
+ if (currentState) {
2205
+ currentState.authenticated = isAuthenticated;
2206
+ if (isAuthenticated) {
2207
+ currentState.lastError = undefined;
2208
+ }
2209
+ } else {
2210
+ this.authState.set(provider, { authenticated: isAuthenticated });
2211
+ }
2212
+ return isAuthenticated;
2213
+ } catch (error) {
2214
+ const currentState = this.authState.get(provider);
2215
+ if (currentState) {
2216
+ currentState.authenticated = false;
2217
+ } else {
2218
+ this.authState.set(provider, { authenticated: false });
2219
+ }
2220
+ return false;
2221
+ }
2178
2222
  }
2179
2223
  async authorizedProviders() {
2180
2224
  if (this.oauthCallbackPromise) {
package/dist/index.js CHANGED
@@ -1189,6 +1189,7 @@ class OAuthManager {
1189
1189
  apiBaseUrl;
1190
1190
  getTokenCallback;
1191
1191
  setTokenCallback;
1192
+ removeTokenCallback;
1192
1193
  skipLocalStorage;
1193
1194
  constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
1194
1195
  this.oauthApiBase = oauthApiBase;
@@ -1201,6 +1202,7 @@ class OAuthManager {
1201
1202
  };
1202
1203
  this.getTokenCallback = tokenCallbacks?.getProviderToken;
1203
1204
  this.setTokenCallback = tokenCallbacks?.setProviderToken;
1205
+ this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
1204
1206
  this.skipLocalStorage = tokenCallbacks?.skipLocalStorage ?? !!tokenCallbacks?.getProviderToken;
1205
1207
  this.cleanupExpiredPendingAuths();
1206
1208
  }
@@ -1290,10 +1292,22 @@ class OAuthManager {
1290
1292
  expiresAt: tokenData.expiresAt
1291
1293
  };
1292
1294
  }
1293
- async disconnectProvider(provider) {
1294
- const tokenData = await this.getProviderToken(provider);
1295
- if (!tokenData) {
1296
- throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
1295
+ async disconnectProvider(provider, context) {
1296
+ if (this.removeTokenCallback) {
1297
+ try {
1298
+ await this.removeTokenCallback(provider, context);
1299
+ } catch (error) {
1300
+ console.error(`Failed to delete token for ${provider} from database via removeProviderToken:`, error);
1301
+ }
1302
+ } else if (this.setTokenCallback) {
1303
+ try {
1304
+ const tokenData = await this.getProviderToken(provider, context);
1305
+ if (tokenData) {
1306
+ await this.setTokenCallback(provider, null, context);
1307
+ }
1308
+ } catch (error) {
1309
+ console.error(`Failed to delete token for ${provider} from database via setProviderToken:`, error);
1310
+ }
1297
1311
  }
1298
1312
  this.providerTokens.delete(provider);
1299
1313
  this.clearProviderToken(provider);
@@ -1320,7 +1334,11 @@ class OAuthManager {
1320
1334
  return this.providerTokens.get(provider);
1321
1335
  }
1322
1336
  async setProviderToken(provider, tokenData, context) {
1323
- this.providerTokens.set(provider, tokenData);
1337
+ if (tokenData === null) {
1338
+ this.providerTokens.delete(provider);
1339
+ } else {
1340
+ this.providerTokens.set(provider, tokenData);
1341
+ }
1324
1342
  await this.saveProviderToken(provider, tokenData, context);
1325
1343
  }
1326
1344
  clearProviderToken(provider) {
@@ -1369,11 +1387,15 @@ class OAuthManager {
1369
1387
  try {
1370
1388
  await this.setTokenCallback(provider, tokenData, context);
1371
1389
  } catch (error) {
1372
- console.error(`Failed to save token for ${provider} via callback:`, error);
1390
+ console.error(`Failed to ${tokenData === null ? "delete" : "save"} token for ${provider} via callback:`, error);
1373
1391
  throw error;
1374
1392
  }
1375
1393
  return;
1376
1394
  }
1395
+ if (tokenData === null) {
1396
+ this.clearProviderToken(provider);
1397
+ return;
1398
+ }
1377
1399
  if (this.skipLocalStorage) {
1378
1400
  return;
1379
1401
  }
@@ -1654,6 +1676,7 @@ class MCPClientBase {
1654
1676
  this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
1655
1677
  getProviderToken: config.getProviderToken,
1656
1678
  setProviderToken: config.setProviderToken,
1679
+ removeProviderToken: config.removeProviderToken,
1657
1680
  skipLocalStorage: config.skipLocalStorage
1658
1681
  });
1659
1682
  for (const integration of this.integrations) {
@@ -2012,12 +2035,33 @@ class MCPClientBase {
2012
2035
  isProviderAuthenticated(provider) {
2013
2036
  return this.authState.get(provider)?.authenticated ?? false;
2014
2037
  }
2015
- async isAuthorized(provider) {
2038
+ async isAuthorized(provider, context) {
2016
2039
  if (this.oauthCallbackPromise) {
2017
2040
  await this.oauthCallbackPromise;
2018
2041
  this.oauthCallbackPromise = null;
2019
2042
  }
2020
- return this.authState.get(provider)?.authenticated ?? false;
2043
+ try {
2044
+ const tokenData = await this.oauthManager.getProviderToken(provider, context);
2045
+ const isAuthenticated = !!tokenData;
2046
+ const currentState = this.authState.get(provider);
2047
+ if (currentState) {
2048
+ currentState.authenticated = isAuthenticated;
2049
+ if (isAuthenticated) {
2050
+ currentState.lastError = undefined;
2051
+ }
2052
+ } else {
2053
+ this.authState.set(provider, { authenticated: isAuthenticated });
2054
+ }
2055
+ return isAuthenticated;
2056
+ } catch (error) {
2057
+ const currentState = this.authState.get(provider);
2058
+ if (currentState) {
2059
+ currentState.authenticated = false;
2060
+ } else {
2061
+ this.authState.set(provider, { authenticated: false });
2062
+ }
2063
+ return false;
2064
+ }
2021
2065
  }
2022
2066
  async authorizedProviders() {
2023
2067
  if (this.oauthCallbackPromise) {
package/dist/server.js CHANGED
@@ -1182,6 +1182,7 @@ class OAuthManager {
1182
1182
  apiBaseUrl;
1183
1183
  getTokenCallback;
1184
1184
  setTokenCallback;
1185
+ removeTokenCallback;
1185
1186
  skipLocalStorage;
1186
1187
  constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
1187
1188
  this.oauthApiBase = oauthApiBase;
@@ -1194,6 +1195,7 @@ class OAuthManager {
1194
1195
  };
1195
1196
  this.getTokenCallback = tokenCallbacks?.getProviderToken;
1196
1197
  this.setTokenCallback = tokenCallbacks?.setProviderToken;
1198
+ this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
1197
1199
  this.skipLocalStorage = tokenCallbacks?.skipLocalStorage ?? !!tokenCallbacks?.getProviderToken;
1198
1200
  this.cleanupExpiredPendingAuths();
1199
1201
  }
@@ -1283,10 +1285,22 @@ class OAuthManager {
1283
1285
  expiresAt: tokenData.expiresAt
1284
1286
  };
1285
1287
  }
1286
- async disconnectProvider(provider) {
1287
- const tokenData = await this.getProviderToken(provider);
1288
- if (!tokenData) {
1289
- throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
1288
+ async disconnectProvider(provider, context) {
1289
+ if (this.removeTokenCallback) {
1290
+ try {
1291
+ await this.removeTokenCallback(provider, context);
1292
+ } catch (error) {
1293
+ console.error(`Failed to delete token for ${provider} from database via removeProviderToken:`, error);
1294
+ }
1295
+ } else if (this.setTokenCallback) {
1296
+ try {
1297
+ const tokenData = await this.getProviderToken(provider, context);
1298
+ if (tokenData) {
1299
+ await this.setTokenCallback(provider, null, context);
1300
+ }
1301
+ } catch (error) {
1302
+ console.error(`Failed to delete token for ${provider} from database via setProviderToken:`, error);
1303
+ }
1290
1304
  }
1291
1305
  this.providerTokens.delete(provider);
1292
1306
  this.clearProviderToken(provider);
@@ -1313,7 +1327,11 @@ class OAuthManager {
1313
1327
  return this.providerTokens.get(provider);
1314
1328
  }
1315
1329
  async setProviderToken(provider, tokenData, context) {
1316
- this.providerTokens.set(provider, tokenData);
1330
+ if (tokenData === null) {
1331
+ this.providerTokens.delete(provider);
1332
+ } else {
1333
+ this.providerTokens.set(provider, tokenData);
1334
+ }
1317
1335
  await this.saveProviderToken(provider, tokenData, context);
1318
1336
  }
1319
1337
  clearProviderToken(provider) {
@@ -1362,11 +1380,15 @@ class OAuthManager {
1362
1380
  try {
1363
1381
  await this.setTokenCallback(provider, tokenData, context);
1364
1382
  } catch (error) {
1365
- console.error(`Failed to save token for ${provider} via callback:`, error);
1383
+ console.error(`Failed to ${tokenData === null ? "delete" : "save"} token for ${provider} via callback:`, error);
1366
1384
  throw error;
1367
1385
  }
1368
1386
  return;
1369
1387
  }
1388
+ if (tokenData === null) {
1389
+ this.clearProviderToken(provider);
1390
+ return;
1391
+ }
1370
1392
  if (this.skipLocalStorage) {
1371
1393
  return;
1372
1394
  }
@@ -1645,6 +1667,7 @@ class MCPClientBase {
1645
1667
  this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
1646
1668
  getProviderToken: config.getProviderToken,
1647
1669
  setProviderToken: config.setProviderToken,
1670
+ removeProviderToken: config.removeProviderToken,
1648
1671
  skipLocalStorage: config.skipLocalStorage
1649
1672
  });
1650
1673
  for (const integration of this.integrations) {
@@ -2003,12 +2026,33 @@ class MCPClientBase {
2003
2026
  isProviderAuthenticated(provider) {
2004
2027
  return this.authState.get(provider)?.authenticated ?? false;
2005
2028
  }
2006
- async isAuthorized(provider) {
2029
+ async isAuthorized(provider, context) {
2007
2030
  if (this.oauthCallbackPromise) {
2008
2031
  await this.oauthCallbackPromise;
2009
2032
  this.oauthCallbackPromise = null;
2010
2033
  }
2011
- return this.authState.get(provider)?.authenticated ?? false;
2034
+ try {
2035
+ const tokenData = await this.oauthManager.getProviderToken(provider, context);
2036
+ const isAuthenticated = !!tokenData;
2037
+ const currentState = this.authState.get(provider);
2038
+ if (currentState) {
2039
+ currentState.authenticated = isAuthenticated;
2040
+ if (isAuthenticated) {
2041
+ currentState.lastError = undefined;
2042
+ }
2043
+ } else {
2044
+ this.authState.set(provider, { authenticated: isAuthenticated });
2045
+ }
2046
+ return isAuthenticated;
2047
+ } catch (error) {
2048
+ const currentState = this.authState.get(provider);
2049
+ if (currentState) {
2050
+ currentState.authenticated = false;
2051
+ } else {
2052
+ this.authState.set(provider, { authenticated: false });
2053
+ }
2054
+ return false;
2055
+ }
2012
2056
  }
2013
2057
  async authorizedProviders() {
2014
2058
  if (this.oauthCallbackPromise) {
@@ -268,17 +268,24 @@ export declare class MCPClientBase<TIntegrations extends readonly MCPIntegration
268
268
  isProviderAuthenticated(provider: string): boolean;
269
269
  /**
270
270
  * Check if a provider is authorized via OAuth
271
- * Returns the cached authorization status that is automatically updated when
271
+ * Checks the current token status and updates the cache accordingly.
272
+ * Returns the authorization status that is automatically updated when
272
273
  * authorize() or disconnectProvider() are called
273
274
  *
274
275
  * Automatically waits for any pending OAuth callback to complete, ensuring
275
276
  * the auth state is always up-to-date, even immediately after OAuth redirects
276
277
  *
278
+ * When using database callbacks (server-side), provide context to check
279
+ * the correct user's token. Without context, it will check without user
280
+ * identification (works for single-user scenarios).
281
+ *
277
282
  * @param provider - Provider name (github, gmail, etc.)
283
+ * @param context - Optional user context (userId, organizationId, etc.) for multi-tenant apps
278
284
  * @returns Promise that resolves to authorization status
279
285
  *
280
286
  * @example
281
287
  * ```typescript
288
+ * // Client-side usage (no context needed)
282
289
  * const isAuthorized = await client.isAuthorized('github');
283
290
  * if (!isAuthorized) {
284
291
  * await client.authorize('github');
@@ -286,8 +293,15 @@ export declare class MCPClientBase<TIntegrations extends readonly MCPIntegration
286
293
  * console.log(await client.isAuthorized('github')); // true
287
294
  * }
288
295
  * ```
296
+ *
297
+ * @example
298
+ * ```typescript
299
+ * // Server-side usage with context
300
+ * const context = await getSessionContext(request);
301
+ * const isAuthorized = await client.isAuthorized('github', context);
302
+ * ```
289
303
  */
290
- isAuthorized(provider: string): Promise<boolean>;
304
+ isAuthorized(provider: string, context?: MCPContext): Promise<boolean>;
291
305
  /**
292
306
  * Get list of all authorized providers
293
307
  * Returns cached authorization status for all configured OAuth providers
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,OAAO,EAEP,mBAAmB,EAGpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAiB,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE/E,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAgE1B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,KAAK,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AACvE,KAAK,cAAc,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,IAAI,oBAAoB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnH;;;GAGG;AACH,KAAK,qBAAqB,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,IAAI;KAC3E,CAAC,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,QAAQ,GACrD,QAAQ,GACR,CAAC,SAAS,OAAO,GACjB,OAAO,GACP,CAAC,SAAS,QAAQ,GAClB,QAAQ,GACR,KAAK,GACL,CAAC,SAAS,QAAQ,GAAG,uBAAuB,GAC5C,CAAC,SAAS,OAAO,GAAG,sBAAsB,GAC1C,CAAC,SAAS,QAAQ,GAAG,uBAAuB,GAC5C,KAAK;CACV,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,SAAS,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,EAAE,IAC/F,aAAa,CAAC,aAAa,CAAC,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAEtE;;;;GAIG;AACH,qBAAa,aAAa,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,EAAE;IACpG,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,gBAAgB,CAAC,CAAgB;IACzC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAuF;IACxG,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAS;IAE5B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAG5C,SAAgB,MAAM,EAAG,uBAAuB,CAAC;gBAErC,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC;IA+IlD;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;YACW,sBAAsB;IAiBpC;;OAEG;YACW,sBAAsB;IAQpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB9B;;OAEG;YACW,UAAU;IAkBxB;;OAEG;YACW,aAAa;IAoB3B;;;;OAIG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,mBAAmB,CAAC;IAI/B;;;;;;;;;;;OAWG;IACG,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IAc/B;;;OAGG;YACW,sBAAsB;IA8GpC;;OAEG;YACW,iBAAiB;IA6D/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI1C;;OAEG;IACH,iBAAiB,IAAI,OAAO,EAAE;IAI9B;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlD;;OAEG;IACH,eAAe,IAAI,OAAO,EAAE;IAM5B;;OAEG;IACH,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAK9D;;OAEG;IACH,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAU9C;;OAEG;IACH,SAAS,CACP,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAClC,MAAM,IAAI;IAIb;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAC7E,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAC/E,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,GAAG,IAAI;IACzE,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,IAAI;IACnF,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAC,GAAG,IAAI;IAK3E;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAC9E,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAChF,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,GAAG,IAAI;IAC1E,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,IAAI;IACpF,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAC,GAAG,IAAI;IAM5E;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;;;;;;;;;;;;;;;;;OAkBG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BzD;;;;;;;;;;;;;OAaG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB7B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,mBAAmB,CAAA;KAAE,GAAG,SAAS;IAIvG;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlD;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAStD;;;;;;;;;;;;;;;;;;OAkBG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAsB9C;;;;;OAKG;IACG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAInE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DnH;;;;;;;;;;;;;;;;;;OAkBG;IACG,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrE;;;;;;;OAOG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,kBAAkB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAIjI;;;;;;;OAOG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtI;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW9C;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CA2BzD;AAmED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,eAAe,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,EAC7E,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,GACrC,SAAS,CAAC,aAAa,CAAC,CAmE1B;AAiFD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAetD"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -179,7 +179,38 @@ export interface MCPServerConfig<TIntegrations extends readonly MCPIntegration[]
179
179
  * });
180
180
  * ```
181
181
  */
182
- setProviderToken?: (provider: string, tokenData: ProviderTokenData, context?: MCPContext) => Promise<void> | void;
182
+ setProviderToken?: (provider: string, tokenData: ProviderTokenData | null, context?: MCPContext) => Promise<void> | void;
183
+ /**
184
+ * Custom token deletion callback (SERVER-SIDE ONLY)
185
+ * Allows deleting OAuth provider tokens from your database
186
+ *
187
+ * When provided, this callback is used for deleting tokens when disconnecting providers.
188
+ * If not provided, the SDK will fall back to calling `setProviderToken(provider, null, context)`
189
+ * for backward compatibility.
190
+ *
191
+ * @param provider - Provider name (e.g., 'github', 'gmail')
192
+ * @param context - Optional user context (userId, organizationId, etc.) for multi-tenant apps
193
+ *
194
+ * @example
195
+ * ```typescript
196
+ * import { createMCPServer } from 'integrate-sdk/server';
197
+ *
198
+ * createMCPServer({
199
+ * integrations: [...],
200
+ * removeProviderToken: async (provider, context) => {
201
+ * const userId = context?.userId;
202
+ * if (!userId) return;
203
+ *
204
+ * await db.tokens.delete({
205
+ * where: {
206
+ * provider_userId: { provider, userId }
207
+ * }
208
+ * });
209
+ * }
210
+ * });
211
+ * ```
212
+ */
213
+ removeProviderToken?: (provider: string, context?: MCPContext) => Promise<void> | void;
183
214
  }
184
215
  /**
185
216
  * Main client configuration
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,mBAAmB,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEnF;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,CAAE,SAAQ,eAAe,CAAC,aAAa,CAAC;IACtH;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAEtI;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC;IAEnG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEzH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACxF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE;IAC9E,sCAAsC;IACtC,YAAY,EAAE,aAAa,CAAC;IAE5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAE7C;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,EAAE;QACV,+DAA+D;QAC/D,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;QAC5B,oDAAoD;QACpD,YAAY,CAAC,EAAE;YACb,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,sDAAsD;QACtD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACnF,CAAC;IAEF;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;;;;OAgBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,0BAA0B,CAAC,EAAE;QAC3B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;QACxC,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,IAC3E,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,aAAa,SAAS,SAAS,cAAc,EAAE,IAAI;KAC7E,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,IAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;CACnD,CAAC"}
@@ -18,10 +18,12 @@ export declare class OAuthManager {
18
18
  private apiBaseUrl?;
19
19
  private getTokenCallback?;
20
20
  private setTokenCallback?;
21
+ private removeTokenCallback?;
21
22
  private skipLocalStorage;
22
23
  constructor(oauthApiBase: string, flowConfig?: Partial<OAuthFlowConfig>, apiBaseUrl?: string, tokenCallbacks?: {
23
24
  getProviderToken?: (provider: string, context?: MCPContext) => Promise<ProviderTokenData | undefined> | ProviderTokenData | undefined;
24
- setProviderToken?: (provider: string, tokenData: ProviderTokenData, context?: MCPContext) => Promise<void> | void;
25
+ setProviderToken?: (provider: string, tokenData: ProviderTokenData | null, context?: MCPContext) => Promise<void> | void;
26
+ removeProviderToken?: (provider: string, context?: MCPContext) => Promise<void> | void;
25
27
  skipLocalStorage?: boolean;
26
28
  });
27
29
  /**
@@ -86,22 +88,31 @@ export declare class OAuthManager {
86
88
  checkAuthStatus(provider: string): Promise<AuthStatus>;
87
89
  /**
88
90
  * Disconnect a specific provider
89
- * Clears the local token for the provider (stateless operation)
91
+ * Clears the local token for the provider and removes it from the database if using callbacks
90
92
  *
91
- * Note: This only clears the local/in-memory token. It does not revoke the token
93
+ * This method is idempotent - it can be called safely even if the provider
94
+ * is already disconnected or has no token. If no token exists, it will
95
+ * simply ensure all state is cleared and return successfully.
96
+ *
97
+ * When using database callbacks (server-side), this will also delete the token
98
+ * from the database. It first tries to use `removeProviderToken` callback if provided,
99
+ * otherwise falls back to calling `setProviderToken` with null for backward compatibility.
100
+ *
101
+ * Note: This only clears the local/in-memory token and database token. It does not revoke the token
92
102
  * on the provider's side. For full revocation, handle that separately
93
103
  * in your application if needed.
94
104
  *
95
105
  * @param provider - OAuth provider to disconnect
106
+ * @param context - Optional user context (userId, organizationId, etc.) for multi-tenant apps
96
107
  * @returns Promise that resolves when disconnection is complete
97
108
  *
98
109
  * @example
99
110
  * ```typescript
100
111
  * await oauthManager.disconnectProvider('github');
101
- * // GitHub token is now cleared from cache
112
+ * // GitHub token is now cleared from cache and database
102
113
  * ```
103
114
  */
104
- disconnectProvider(provider: string): Promise<void>;
115
+ disconnectProvider(provider: string, context?: MCPContext): Promise<void>;
105
116
  /**
106
117
  * Get provider token data
107
118
  * Uses callback if provided, otherwise checks in-memory cache
@@ -127,7 +138,7 @@ export declare class OAuthManager {
127
138
  * @param tokenData - Token data to store
128
139
  * @param context - Optional user context (userId, organizationId, etc.) for multi-tenant apps
129
140
  */
130
- setProviderToken(provider: string, tokenData: ProviderTokenData, context?: MCPContext): Promise<void>;
141
+ setProviderToken(provider: string, tokenData: ProviderTokenData | null, context?: MCPContext): Promise<void>;
131
142
  /**
132
143
  * Clear specific provider token
133
144
  * Note: When using database callbacks, this only clears the in-memory cache.
@@ -148,7 +159,7 @@ export declare class OAuthManager {
148
159
  /**
149
160
  * Save provider token to database (via callback) or localStorage
150
161
  * @param provider - Provider name (e.g., 'github', 'gmail')
151
- * @param tokenData - Token data to store
162
+ * @param tokenData - Token data to store, or null to delete
152
163
  * @param context - Optional user context (userId, organizationId, etc.) for multi-tenant apps
153
164
  */
154
165
  private saveProviderToken;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/oauth/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/oauth/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EACV,eAAe,EAEf,UAAU,EAGV,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAC,CAAqH;IAC9I,OAAO,CAAC,gBAAgB,CAAC,CAAwG;IACjI,OAAO,CAAC,mBAAmB,CAAC,CAAmE;IAC/F,OAAO,CAAC,gBAAgB,CAAU;gBAGhC,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACrC,UAAU,CAAC,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE;QACf,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,GAAG,iBAAiB,GAAG,SAAS,CAAC;QACtI,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACzH,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACvF,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B;IAqBH;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C5F;;;;;;;;;;;;;;OAcG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAkEpG;;;;;;;;;;;;;;;;;OAiBG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAoB5D;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B/E;;;;;OAKG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAoBtG;;OAEG;IACH,oBAAoB,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAItD;;;;;OAKG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI1E;;;;;;OAMG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlH;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C;;;;OAIG;IACH,sBAAsB,IAAI,IAAI;IAgB9B;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAwB5B;;;;;OAKG;YACW,iBAAiB;IAoC/B;;;OAGG;YACW,iBAAiB;IA0B/B;;OAEG;IACG,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/D;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;;;OAIG;IACH,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAcpD;;;;;;;OAOG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IAoBlC;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAgBpC;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IAyClC;;;OAGG;YACW,mBAAmB;IAoCjC;;;OAGG;YACW,oBAAoB;IAkClC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "integrate-sdk",
3
- "version": "0.7.67",
3
+ "version": "0.8.1",
4
4
  "description": "Type-safe 3rd party integration SDK for the Integrate MCP server",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",