integrate-sdk 0.7.43 → 0.7.44
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/adapters/index.js +69 -24
- package/dist/adapters/solid-start.js +69 -24
- package/dist/adapters/svelte-kit.js +69 -24
- package/dist/ai/index.d.ts +1 -3
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +0 -32
- package/dist/index.js +69 -24
- package/dist/server.js +69 -55
- package/dist/src/ai/index.d.ts +1 -3
- package/dist/src/ai/index.d.ts.map +1 -1
- package/dist/src/client.d.ts +5 -2
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/config/types.d.ts +63 -0
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/oauth/manager.d.ts +23 -12
- package/dist/src/oauth/manager.d.ts.map +1 -1
- package/dist/src/server.d.ts +1 -0
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/ai/openai-agents.d.ts +0 -99
- package/dist/ai/openai-agents.d.ts.map +0 -1
- package/dist/ai/openai-agents.js +0 -4235
- package/dist/src/ai/openai-agents.d.ts +0 -99
- package/dist/src/ai/openai-agents.d.ts.map +0 -1
package/dist/adapters/index.js
CHANGED
|
@@ -1117,7 +1117,9 @@ class OAuthManager {
|
|
|
1117
1117
|
flowConfig;
|
|
1118
1118
|
oauthApiBase;
|
|
1119
1119
|
apiBaseUrl;
|
|
1120
|
-
|
|
1120
|
+
getTokenCallback;
|
|
1121
|
+
setTokenCallback;
|
|
1122
|
+
constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
|
|
1121
1123
|
this.oauthApiBase = oauthApiBase;
|
|
1122
1124
|
this.apiBaseUrl = apiBaseUrl;
|
|
1123
1125
|
this.windowManager = new OAuthWindowManager;
|
|
@@ -1126,6 +1128,8 @@ class OAuthManager {
|
|
|
1126
1128
|
popupOptions: flowConfig?.popupOptions,
|
|
1127
1129
|
onAuthCallback: flowConfig?.onAuthCallback
|
|
1128
1130
|
};
|
|
1131
|
+
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
1132
|
+
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
1129
1133
|
this.cleanupExpiredPendingAuths();
|
|
1130
1134
|
}
|
|
1131
1135
|
async initiateFlow(provider, config, returnUrl) {
|
|
@@ -1189,7 +1193,7 @@ class OAuthManager {
|
|
|
1189
1193
|
scopes: response.scopes
|
|
1190
1194
|
};
|
|
1191
1195
|
this.providerTokens.set(pendingAuth.provider, tokenData);
|
|
1192
|
-
this.saveProviderToken(pendingAuth.provider, tokenData);
|
|
1196
|
+
await this.saveProviderToken(pendingAuth.provider, tokenData);
|
|
1193
1197
|
this.pendingAuths.delete(state);
|
|
1194
1198
|
this.removePendingAuthFromStorage(state);
|
|
1195
1199
|
return { ...tokenData, provider: pendingAuth.provider };
|
|
@@ -1200,7 +1204,7 @@ class OAuthManager {
|
|
|
1200
1204
|
}
|
|
1201
1205
|
}
|
|
1202
1206
|
async checkAuthStatus(provider) {
|
|
1203
|
-
const tokenData = this.
|
|
1207
|
+
const tokenData = await this.getProviderToken(provider);
|
|
1204
1208
|
if (!tokenData) {
|
|
1205
1209
|
return {
|
|
1206
1210
|
authorized: false,
|
|
@@ -1215,26 +1219,38 @@ class OAuthManager {
|
|
|
1215
1219
|
};
|
|
1216
1220
|
}
|
|
1217
1221
|
async disconnectProvider(provider) {
|
|
1218
|
-
const tokenData = this.
|
|
1222
|
+
const tokenData = await this.getProviderToken(provider);
|
|
1219
1223
|
if (!tokenData) {
|
|
1220
1224
|
throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
|
|
1221
1225
|
}
|
|
1222
1226
|
this.providerTokens.delete(provider);
|
|
1223
1227
|
this.clearProviderToken(provider);
|
|
1224
1228
|
}
|
|
1225
|
-
getProviderToken(provider) {
|
|
1229
|
+
async getProviderToken(provider) {
|
|
1230
|
+
if (this.getTokenCallback) {
|
|
1231
|
+
try {
|
|
1232
|
+
const tokenData = await this.getTokenCallback(provider);
|
|
1233
|
+
if (tokenData) {
|
|
1234
|
+
this.providerTokens.set(provider, tokenData);
|
|
1235
|
+
}
|
|
1236
|
+
return tokenData;
|
|
1237
|
+
} catch (error) {
|
|
1238
|
+
console.error(`Failed to get token for ${provider} via callback:`, error);
|
|
1239
|
+
return;
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1226
1242
|
return this.providerTokens.get(provider);
|
|
1227
1243
|
}
|
|
1228
1244
|
getAllProviderTokens() {
|
|
1229
1245
|
return new Map(this.providerTokens);
|
|
1230
1246
|
}
|
|
1231
|
-
setProviderToken(provider, tokenData) {
|
|
1247
|
+
async setProviderToken(provider, tokenData) {
|
|
1232
1248
|
this.providerTokens.set(provider, tokenData);
|
|
1233
|
-
this.saveProviderToken(provider, tokenData);
|
|
1249
|
+
await this.saveProviderToken(provider, tokenData);
|
|
1234
1250
|
}
|
|
1235
1251
|
clearProviderToken(provider) {
|
|
1236
1252
|
this.providerTokens.delete(provider);
|
|
1237
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
1253
|
+
if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
|
|
1238
1254
|
try {
|
|
1239
1255
|
window.localStorage.removeItem(`integrate_token_${provider}`);
|
|
1240
1256
|
} catch (error) {
|
|
@@ -1245,7 +1261,7 @@ class OAuthManager {
|
|
|
1245
1261
|
clearAllProviderTokens() {
|
|
1246
1262
|
const providers = Array.from(this.providerTokens.keys());
|
|
1247
1263
|
this.providerTokens.clear();
|
|
1248
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
1264
|
+
if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
|
|
1249
1265
|
for (const provider of providers) {
|
|
1250
1266
|
try {
|
|
1251
1267
|
window.localStorage.removeItem(`integrate_token_${provider}`);
|
|
@@ -1273,7 +1289,16 @@ class OAuthManager {
|
|
|
1273
1289
|
}
|
|
1274
1290
|
}
|
|
1275
1291
|
}
|
|
1276
|
-
saveProviderToken(provider, tokenData) {
|
|
1292
|
+
async saveProviderToken(provider, tokenData) {
|
|
1293
|
+
if (this.setTokenCallback) {
|
|
1294
|
+
try {
|
|
1295
|
+
await this.setTokenCallback(provider, tokenData);
|
|
1296
|
+
} catch (error) {
|
|
1297
|
+
console.error(`Failed to save token for ${provider} via callback:`, error);
|
|
1298
|
+
throw error;
|
|
1299
|
+
}
|
|
1300
|
+
return;
|
|
1301
|
+
}
|
|
1277
1302
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
1278
1303
|
try {
|
|
1279
1304
|
const key = `integrate_token_${provider}`;
|
|
@@ -1283,7 +1308,15 @@ class OAuthManager {
|
|
|
1283
1308
|
}
|
|
1284
1309
|
}
|
|
1285
1310
|
}
|
|
1286
|
-
loadProviderToken(provider) {
|
|
1311
|
+
async loadProviderToken(provider) {
|
|
1312
|
+
if (this.getTokenCallback) {
|
|
1313
|
+
try {
|
|
1314
|
+
return await this.getTokenCallback(provider);
|
|
1315
|
+
} catch (error) {
|
|
1316
|
+
console.error(`Failed to load token for ${provider} via callback:`, error);
|
|
1317
|
+
return;
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1287
1320
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
1288
1321
|
try {
|
|
1289
1322
|
const key = `integrate_token_${provider}`;
|
|
@@ -1297,9 +1330,9 @@ class OAuthManager {
|
|
|
1297
1330
|
}
|
|
1298
1331
|
return;
|
|
1299
1332
|
}
|
|
1300
|
-
loadAllProviderTokens(providers) {
|
|
1333
|
+
async loadAllProviderTokens(providers) {
|
|
1301
1334
|
for (const provider of providers) {
|
|
1302
|
-
const tokenData = this.loadProviderToken(provider);
|
|
1335
|
+
const tokenData = await this.loadProviderToken(provider);
|
|
1303
1336
|
if (tokenData) {
|
|
1304
1337
|
this.providerTokens.set(provider, tokenData);
|
|
1305
1338
|
}
|
|
@@ -1497,16 +1530,28 @@ class MCPClientBase {
|
|
|
1497
1530
|
};
|
|
1498
1531
|
this.onReauthRequired = config.onReauthRequired;
|
|
1499
1532
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
1500
|
-
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl
|
|
1533
|
+
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
1534
|
+
getProviderToken: config.getProviderToken,
|
|
1535
|
+
setProviderToken: config.setProviderToken
|
|
1536
|
+
});
|
|
1501
1537
|
const providers = this.integrations.filter((p) => p.oauth).map((p) => p.oauth.provider);
|
|
1502
|
-
this.oauthManager.loadAllProviderTokens(providers)
|
|
1538
|
+
this.oauthManager.loadAllProviderTokens(providers).catch((error) => {
|
|
1539
|
+
console.error("Failed to load provider tokens:", error);
|
|
1540
|
+
});
|
|
1503
1541
|
for (const integration of this.integrations) {
|
|
1504
1542
|
for (const toolName of integration.tools) {
|
|
1505
1543
|
this.enabledToolNames.add(toolName);
|
|
1506
1544
|
}
|
|
1507
1545
|
if (integration.oauth) {
|
|
1508
|
-
const
|
|
1509
|
-
this.authState.set(
|
|
1546
|
+
const provider = integration.oauth.provider;
|
|
1547
|
+
this.authState.set(provider, { authenticated: false });
|
|
1548
|
+
this.oauthManager.getProviderToken(provider).then((tokenData) => {
|
|
1549
|
+
if (tokenData) {
|
|
1550
|
+
this.authState.set(provider, { authenticated: true });
|
|
1551
|
+
}
|
|
1552
|
+
}).catch((error) => {
|
|
1553
|
+
console.error(`Failed to check token for ${provider}:`, error);
|
|
1554
|
+
});
|
|
1510
1555
|
}
|
|
1511
1556
|
}
|
|
1512
1557
|
const integrationIds = this.integrations.map((i) => i.id);
|
|
@@ -1620,7 +1665,7 @@ class MCPClientBase {
|
|
|
1620
1665
|
const hasApiKey = !!transportHeaders["X-API-KEY"];
|
|
1621
1666
|
if (hasApiKey) {
|
|
1622
1667
|
if (provider) {
|
|
1623
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1668
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1624
1669
|
if (tokenData && this.transport.setHeader) {
|
|
1625
1670
|
const previousAuthHeader = transportHeaders["Authorization"];
|
|
1626
1671
|
try {
|
|
@@ -1650,7 +1695,7 @@ class MCPClientBase {
|
|
|
1650
1695
|
"Content-Type": "application/json"
|
|
1651
1696
|
};
|
|
1652
1697
|
if (provider) {
|
|
1653
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1698
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1654
1699
|
if (tokenData) {
|
|
1655
1700
|
headers["Authorization"] = `Bearer ${tokenData.accessToken}`;
|
|
1656
1701
|
}
|
|
@@ -1845,7 +1890,7 @@ class MCPClientBase {
|
|
|
1845
1890
|
this.eventEmitter.emit("auth:started", { provider });
|
|
1846
1891
|
try {
|
|
1847
1892
|
await this.oauthManager.initiateFlow(provider, integration.oauth, options?.returnUrl);
|
|
1848
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1893
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1849
1894
|
if (tokenData) {
|
|
1850
1895
|
this.eventEmitter.emit("auth:complete", {
|
|
1851
1896
|
provider,
|
|
@@ -1876,11 +1921,11 @@ class MCPClientBase {
|
|
|
1876
1921
|
throw error;
|
|
1877
1922
|
}
|
|
1878
1923
|
}
|
|
1879
|
-
getProviderToken(provider) {
|
|
1880
|
-
return this.oauthManager.getProviderToken(provider);
|
|
1924
|
+
async getProviderToken(provider) {
|
|
1925
|
+
return await this.oauthManager.getProviderToken(provider);
|
|
1881
1926
|
}
|
|
1882
|
-
setProviderToken(provider, tokenData) {
|
|
1883
|
-
this.oauthManager.setProviderToken(provider, tokenData);
|
|
1927
|
+
async setProviderToken(provider, tokenData) {
|
|
1928
|
+
await this.oauthManager.setProviderToken(provider, tokenData);
|
|
1884
1929
|
this.authState.set(provider, { authenticated: true });
|
|
1885
1930
|
}
|
|
1886
1931
|
getAllProviderTokens() {
|
|
@@ -982,7 +982,9 @@ class OAuthManager {
|
|
|
982
982
|
flowConfig;
|
|
983
983
|
oauthApiBase;
|
|
984
984
|
apiBaseUrl;
|
|
985
|
-
|
|
985
|
+
getTokenCallback;
|
|
986
|
+
setTokenCallback;
|
|
987
|
+
constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
|
|
986
988
|
this.oauthApiBase = oauthApiBase;
|
|
987
989
|
this.apiBaseUrl = apiBaseUrl;
|
|
988
990
|
this.windowManager = new OAuthWindowManager;
|
|
@@ -991,6 +993,8 @@ class OAuthManager {
|
|
|
991
993
|
popupOptions: flowConfig?.popupOptions,
|
|
992
994
|
onAuthCallback: flowConfig?.onAuthCallback
|
|
993
995
|
};
|
|
996
|
+
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
997
|
+
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
994
998
|
this.cleanupExpiredPendingAuths();
|
|
995
999
|
}
|
|
996
1000
|
async initiateFlow(provider, config, returnUrl) {
|
|
@@ -1054,7 +1058,7 @@ class OAuthManager {
|
|
|
1054
1058
|
scopes: response.scopes
|
|
1055
1059
|
};
|
|
1056
1060
|
this.providerTokens.set(pendingAuth.provider, tokenData);
|
|
1057
|
-
this.saveProviderToken(pendingAuth.provider, tokenData);
|
|
1061
|
+
await this.saveProviderToken(pendingAuth.provider, tokenData);
|
|
1058
1062
|
this.pendingAuths.delete(state);
|
|
1059
1063
|
this.removePendingAuthFromStorage(state);
|
|
1060
1064
|
return { ...tokenData, provider: pendingAuth.provider };
|
|
@@ -1065,7 +1069,7 @@ class OAuthManager {
|
|
|
1065
1069
|
}
|
|
1066
1070
|
}
|
|
1067
1071
|
async checkAuthStatus(provider) {
|
|
1068
|
-
const tokenData = this.
|
|
1072
|
+
const tokenData = await this.getProviderToken(provider);
|
|
1069
1073
|
if (!tokenData) {
|
|
1070
1074
|
return {
|
|
1071
1075
|
authorized: false,
|
|
@@ -1080,26 +1084,38 @@ class OAuthManager {
|
|
|
1080
1084
|
};
|
|
1081
1085
|
}
|
|
1082
1086
|
async disconnectProvider(provider) {
|
|
1083
|
-
const tokenData = this.
|
|
1087
|
+
const tokenData = await this.getProviderToken(provider);
|
|
1084
1088
|
if (!tokenData) {
|
|
1085
1089
|
throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
|
|
1086
1090
|
}
|
|
1087
1091
|
this.providerTokens.delete(provider);
|
|
1088
1092
|
this.clearProviderToken(provider);
|
|
1089
1093
|
}
|
|
1090
|
-
getProviderToken(provider) {
|
|
1094
|
+
async getProviderToken(provider) {
|
|
1095
|
+
if (this.getTokenCallback) {
|
|
1096
|
+
try {
|
|
1097
|
+
const tokenData = await this.getTokenCallback(provider);
|
|
1098
|
+
if (tokenData) {
|
|
1099
|
+
this.providerTokens.set(provider, tokenData);
|
|
1100
|
+
}
|
|
1101
|
+
return tokenData;
|
|
1102
|
+
} catch (error) {
|
|
1103
|
+
console.error(`Failed to get token for ${provider} via callback:`, error);
|
|
1104
|
+
return;
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1091
1107
|
return this.providerTokens.get(provider);
|
|
1092
1108
|
}
|
|
1093
1109
|
getAllProviderTokens() {
|
|
1094
1110
|
return new Map(this.providerTokens);
|
|
1095
1111
|
}
|
|
1096
|
-
setProviderToken(provider, tokenData) {
|
|
1112
|
+
async setProviderToken(provider, tokenData) {
|
|
1097
1113
|
this.providerTokens.set(provider, tokenData);
|
|
1098
|
-
this.saveProviderToken(provider, tokenData);
|
|
1114
|
+
await this.saveProviderToken(provider, tokenData);
|
|
1099
1115
|
}
|
|
1100
1116
|
clearProviderToken(provider) {
|
|
1101
1117
|
this.providerTokens.delete(provider);
|
|
1102
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
1118
|
+
if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
|
|
1103
1119
|
try {
|
|
1104
1120
|
window.localStorage.removeItem(`integrate_token_${provider}`);
|
|
1105
1121
|
} catch (error) {
|
|
@@ -1110,7 +1126,7 @@ class OAuthManager {
|
|
|
1110
1126
|
clearAllProviderTokens() {
|
|
1111
1127
|
const providers = Array.from(this.providerTokens.keys());
|
|
1112
1128
|
this.providerTokens.clear();
|
|
1113
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
1129
|
+
if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
|
|
1114
1130
|
for (const provider of providers) {
|
|
1115
1131
|
try {
|
|
1116
1132
|
window.localStorage.removeItem(`integrate_token_${provider}`);
|
|
@@ -1138,7 +1154,16 @@ class OAuthManager {
|
|
|
1138
1154
|
}
|
|
1139
1155
|
}
|
|
1140
1156
|
}
|
|
1141
|
-
saveProviderToken(provider, tokenData) {
|
|
1157
|
+
async saveProviderToken(provider, tokenData) {
|
|
1158
|
+
if (this.setTokenCallback) {
|
|
1159
|
+
try {
|
|
1160
|
+
await this.setTokenCallback(provider, tokenData);
|
|
1161
|
+
} catch (error) {
|
|
1162
|
+
console.error(`Failed to save token for ${provider} via callback:`, error);
|
|
1163
|
+
throw error;
|
|
1164
|
+
}
|
|
1165
|
+
return;
|
|
1166
|
+
}
|
|
1142
1167
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
1143
1168
|
try {
|
|
1144
1169
|
const key = `integrate_token_${provider}`;
|
|
@@ -1148,7 +1173,15 @@ class OAuthManager {
|
|
|
1148
1173
|
}
|
|
1149
1174
|
}
|
|
1150
1175
|
}
|
|
1151
|
-
loadProviderToken(provider) {
|
|
1176
|
+
async loadProviderToken(provider) {
|
|
1177
|
+
if (this.getTokenCallback) {
|
|
1178
|
+
try {
|
|
1179
|
+
return await this.getTokenCallback(provider);
|
|
1180
|
+
} catch (error) {
|
|
1181
|
+
console.error(`Failed to load token for ${provider} via callback:`, error);
|
|
1182
|
+
return;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1152
1185
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
1153
1186
|
try {
|
|
1154
1187
|
const key = `integrate_token_${provider}`;
|
|
@@ -1162,9 +1195,9 @@ class OAuthManager {
|
|
|
1162
1195
|
}
|
|
1163
1196
|
return;
|
|
1164
1197
|
}
|
|
1165
|
-
loadAllProviderTokens(providers) {
|
|
1198
|
+
async loadAllProviderTokens(providers) {
|
|
1166
1199
|
for (const provider of providers) {
|
|
1167
|
-
const tokenData = this.loadProviderToken(provider);
|
|
1200
|
+
const tokenData = await this.loadProviderToken(provider);
|
|
1168
1201
|
if (tokenData) {
|
|
1169
1202
|
this.providerTokens.set(provider, tokenData);
|
|
1170
1203
|
}
|
|
@@ -1362,16 +1395,28 @@ class MCPClientBase {
|
|
|
1362
1395
|
};
|
|
1363
1396
|
this.onReauthRequired = config.onReauthRequired;
|
|
1364
1397
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
1365
|
-
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl
|
|
1398
|
+
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
1399
|
+
getProviderToken: config.getProviderToken,
|
|
1400
|
+
setProviderToken: config.setProviderToken
|
|
1401
|
+
});
|
|
1366
1402
|
const providers = this.integrations.filter((p) => p.oauth).map((p) => p.oauth.provider);
|
|
1367
|
-
this.oauthManager.loadAllProviderTokens(providers)
|
|
1403
|
+
this.oauthManager.loadAllProviderTokens(providers).catch((error) => {
|
|
1404
|
+
console.error("Failed to load provider tokens:", error);
|
|
1405
|
+
});
|
|
1368
1406
|
for (const integration of this.integrations) {
|
|
1369
1407
|
for (const toolName of integration.tools) {
|
|
1370
1408
|
this.enabledToolNames.add(toolName);
|
|
1371
1409
|
}
|
|
1372
1410
|
if (integration.oauth) {
|
|
1373
|
-
const
|
|
1374
|
-
this.authState.set(
|
|
1411
|
+
const provider = integration.oauth.provider;
|
|
1412
|
+
this.authState.set(provider, { authenticated: false });
|
|
1413
|
+
this.oauthManager.getProviderToken(provider).then((tokenData) => {
|
|
1414
|
+
if (tokenData) {
|
|
1415
|
+
this.authState.set(provider, { authenticated: true });
|
|
1416
|
+
}
|
|
1417
|
+
}).catch((error) => {
|
|
1418
|
+
console.error(`Failed to check token for ${provider}:`, error);
|
|
1419
|
+
});
|
|
1375
1420
|
}
|
|
1376
1421
|
}
|
|
1377
1422
|
const integrationIds = this.integrations.map((i) => i.id);
|
|
@@ -1485,7 +1530,7 @@ class MCPClientBase {
|
|
|
1485
1530
|
const hasApiKey = !!transportHeaders["X-API-KEY"];
|
|
1486
1531
|
if (hasApiKey) {
|
|
1487
1532
|
if (provider) {
|
|
1488
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1533
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1489
1534
|
if (tokenData && this.transport.setHeader) {
|
|
1490
1535
|
const previousAuthHeader = transportHeaders["Authorization"];
|
|
1491
1536
|
try {
|
|
@@ -1515,7 +1560,7 @@ class MCPClientBase {
|
|
|
1515
1560
|
"Content-Type": "application/json"
|
|
1516
1561
|
};
|
|
1517
1562
|
if (provider) {
|
|
1518
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1563
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1519
1564
|
if (tokenData) {
|
|
1520
1565
|
headers["Authorization"] = `Bearer ${tokenData.accessToken}`;
|
|
1521
1566
|
}
|
|
@@ -1710,7 +1755,7 @@ class MCPClientBase {
|
|
|
1710
1755
|
this.eventEmitter.emit("auth:started", { provider });
|
|
1711
1756
|
try {
|
|
1712
1757
|
await this.oauthManager.initiateFlow(provider, integration.oauth, options?.returnUrl);
|
|
1713
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1758
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1714
1759
|
if (tokenData) {
|
|
1715
1760
|
this.eventEmitter.emit("auth:complete", {
|
|
1716
1761
|
provider,
|
|
@@ -1741,11 +1786,11 @@ class MCPClientBase {
|
|
|
1741
1786
|
throw error;
|
|
1742
1787
|
}
|
|
1743
1788
|
}
|
|
1744
|
-
getProviderToken(provider) {
|
|
1745
|
-
return this.oauthManager.getProviderToken(provider);
|
|
1789
|
+
async getProviderToken(provider) {
|
|
1790
|
+
return await this.oauthManager.getProviderToken(provider);
|
|
1746
1791
|
}
|
|
1747
|
-
setProviderToken(provider, tokenData) {
|
|
1748
|
-
this.oauthManager.setProviderToken(provider, tokenData);
|
|
1792
|
+
async setProviderToken(provider, tokenData) {
|
|
1793
|
+
await this.oauthManager.setProviderToken(provider, tokenData);
|
|
1749
1794
|
this.authState.set(provider, { authenticated: true });
|
|
1750
1795
|
}
|
|
1751
1796
|
getAllProviderTokens() {
|
|
@@ -982,7 +982,9 @@ class OAuthManager {
|
|
|
982
982
|
flowConfig;
|
|
983
983
|
oauthApiBase;
|
|
984
984
|
apiBaseUrl;
|
|
985
|
-
|
|
985
|
+
getTokenCallback;
|
|
986
|
+
setTokenCallback;
|
|
987
|
+
constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
|
|
986
988
|
this.oauthApiBase = oauthApiBase;
|
|
987
989
|
this.apiBaseUrl = apiBaseUrl;
|
|
988
990
|
this.windowManager = new OAuthWindowManager;
|
|
@@ -991,6 +993,8 @@ class OAuthManager {
|
|
|
991
993
|
popupOptions: flowConfig?.popupOptions,
|
|
992
994
|
onAuthCallback: flowConfig?.onAuthCallback
|
|
993
995
|
};
|
|
996
|
+
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
997
|
+
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
994
998
|
this.cleanupExpiredPendingAuths();
|
|
995
999
|
}
|
|
996
1000
|
async initiateFlow(provider, config, returnUrl) {
|
|
@@ -1054,7 +1058,7 @@ class OAuthManager {
|
|
|
1054
1058
|
scopes: response.scopes
|
|
1055
1059
|
};
|
|
1056
1060
|
this.providerTokens.set(pendingAuth.provider, tokenData);
|
|
1057
|
-
this.saveProviderToken(pendingAuth.provider, tokenData);
|
|
1061
|
+
await this.saveProviderToken(pendingAuth.provider, tokenData);
|
|
1058
1062
|
this.pendingAuths.delete(state);
|
|
1059
1063
|
this.removePendingAuthFromStorage(state);
|
|
1060
1064
|
return { ...tokenData, provider: pendingAuth.provider };
|
|
@@ -1065,7 +1069,7 @@ class OAuthManager {
|
|
|
1065
1069
|
}
|
|
1066
1070
|
}
|
|
1067
1071
|
async checkAuthStatus(provider) {
|
|
1068
|
-
const tokenData = this.
|
|
1072
|
+
const tokenData = await this.getProviderToken(provider);
|
|
1069
1073
|
if (!tokenData) {
|
|
1070
1074
|
return {
|
|
1071
1075
|
authorized: false,
|
|
@@ -1080,26 +1084,38 @@ class OAuthManager {
|
|
|
1080
1084
|
};
|
|
1081
1085
|
}
|
|
1082
1086
|
async disconnectProvider(provider) {
|
|
1083
|
-
const tokenData = this.
|
|
1087
|
+
const tokenData = await this.getProviderToken(provider);
|
|
1084
1088
|
if (!tokenData) {
|
|
1085
1089
|
throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
|
|
1086
1090
|
}
|
|
1087
1091
|
this.providerTokens.delete(provider);
|
|
1088
1092
|
this.clearProviderToken(provider);
|
|
1089
1093
|
}
|
|
1090
|
-
getProviderToken(provider) {
|
|
1094
|
+
async getProviderToken(provider) {
|
|
1095
|
+
if (this.getTokenCallback) {
|
|
1096
|
+
try {
|
|
1097
|
+
const tokenData = await this.getTokenCallback(provider);
|
|
1098
|
+
if (tokenData) {
|
|
1099
|
+
this.providerTokens.set(provider, tokenData);
|
|
1100
|
+
}
|
|
1101
|
+
return tokenData;
|
|
1102
|
+
} catch (error) {
|
|
1103
|
+
console.error(`Failed to get token for ${provider} via callback:`, error);
|
|
1104
|
+
return;
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1091
1107
|
return this.providerTokens.get(provider);
|
|
1092
1108
|
}
|
|
1093
1109
|
getAllProviderTokens() {
|
|
1094
1110
|
return new Map(this.providerTokens);
|
|
1095
1111
|
}
|
|
1096
|
-
setProviderToken(provider, tokenData) {
|
|
1112
|
+
async setProviderToken(provider, tokenData) {
|
|
1097
1113
|
this.providerTokens.set(provider, tokenData);
|
|
1098
|
-
this.saveProviderToken(provider, tokenData);
|
|
1114
|
+
await this.saveProviderToken(provider, tokenData);
|
|
1099
1115
|
}
|
|
1100
1116
|
clearProviderToken(provider) {
|
|
1101
1117
|
this.providerTokens.delete(provider);
|
|
1102
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
1118
|
+
if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
|
|
1103
1119
|
try {
|
|
1104
1120
|
window.localStorage.removeItem(`integrate_token_${provider}`);
|
|
1105
1121
|
} catch (error) {
|
|
@@ -1110,7 +1126,7 @@ class OAuthManager {
|
|
|
1110
1126
|
clearAllProviderTokens() {
|
|
1111
1127
|
const providers = Array.from(this.providerTokens.keys());
|
|
1112
1128
|
this.providerTokens.clear();
|
|
1113
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
1129
|
+
if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
|
|
1114
1130
|
for (const provider of providers) {
|
|
1115
1131
|
try {
|
|
1116
1132
|
window.localStorage.removeItem(`integrate_token_${provider}`);
|
|
@@ -1138,7 +1154,16 @@ class OAuthManager {
|
|
|
1138
1154
|
}
|
|
1139
1155
|
}
|
|
1140
1156
|
}
|
|
1141
|
-
saveProviderToken(provider, tokenData) {
|
|
1157
|
+
async saveProviderToken(provider, tokenData) {
|
|
1158
|
+
if (this.setTokenCallback) {
|
|
1159
|
+
try {
|
|
1160
|
+
await this.setTokenCallback(provider, tokenData);
|
|
1161
|
+
} catch (error) {
|
|
1162
|
+
console.error(`Failed to save token for ${provider} via callback:`, error);
|
|
1163
|
+
throw error;
|
|
1164
|
+
}
|
|
1165
|
+
return;
|
|
1166
|
+
}
|
|
1142
1167
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
1143
1168
|
try {
|
|
1144
1169
|
const key = `integrate_token_${provider}`;
|
|
@@ -1148,7 +1173,15 @@ class OAuthManager {
|
|
|
1148
1173
|
}
|
|
1149
1174
|
}
|
|
1150
1175
|
}
|
|
1151
|
-
loadProviderToken(provider) {
|
|
1176
|
+
async loadProviderToken(provider) {
|
|
1177
|
+
if (this.getTokenCallback) {
|
|
1178
|
+
try {
|
|
1179
|
+
return await this.getTokenCallback(provider);
|
|
1180
|
+
} catch (error) {
|
|
1181
|
+
console.error(`Failed to load token for ${provider} via callback:`, error);
|
|
1182
|
+
return;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1152
1185
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
1153
1186
|
try {
|
|
1154
1187
|
const key = `integrate_token_${provider}`;
|
|
@@ -1162,9 +1195,9 @@ class OAuthManager {
|
|
|
1162
1195
|
}
|
|
1163
1196
|
return;
|
|
1164
1197
|
}
|
|
1165
|
-
loadAllProviderTokens(providers) {
|
|
1198
|
+
async loadAllProviderTokens(providers) {
|
|
1166
1199
|
for (const provider of providers) {
|
|
1167
|
-
const tokenData = this.loadProviderToken(provider);
|
|
1200
|
+
const tokenData = await this.loadProviderToken(provider);
|
|
1168
1201
|
if (tokenData) {
|
|
1169
1202
|
this.providerTokens.set(provider, tokenData);
|
|
1170
1203
|
}
|
|
@@ -1362,16 +1395,28 @@ class MCPClientBase {
|
|
|
1362
1395
|
};
|
|
1363
1396
|
this.onReauthRequired = config.onReauthRequired;
|
|
1364
1397
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
1365
|
-
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl
|
|
1398
|
+
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
1399
|
+
getProviderToken: config.getProviderToken,
|
|
1400
|
+
setProviderToken: config.setProviderToken
|
|
1401
|
+
});
|
|
1366
1402
|
const providers = this.integrations.filter((p) => p.oauth).map((p) => p.oauth.provider);
|
|
1367
|
-
this.oauthManager.loadAllProviderTokens(providers)
|
|
1403
|
+
this.oauthManager.loadAllProviderTokens(providers).catch((error) => {
|
|
1404
|
+
console.error("Failed to load provider tokens:", error);
|
|
1405
|
+
});
|
|
1368
1406
|
for (const integration of this.integrations) {
|
|
1369
1407
|
for (const toolName of integration.tools) {
|
|
1370
1408
|
this.enabledToolNames.add(toolName);
|
|
1371
1409
|
}
|
|
1372
1410
|
if (integration.oauth) {
|
|
1373
|
-
const
|
|
1374
|
-
this.authState.set(
|
|
1411
|
+
const provider = integration.oauth.provider;
|
|
1412
|
+
this.authState.set(provider, { authenticated: false });
|
|
1413
|
+
this.oauthManager.getProviderToken(provider).then((tokenData) => {
|
|
1414
|
+
if (tokenData) {
|
|
1415
|
+
this.authState.set(provider, { authenticated: true });
|
|
1416
|
+
}
|
|
1417
|
+
}).catch((error) => {
|
|
1418
|
+
console.error(`Failed to check token for ${provider}:`, error);
|
|
1419
|
+
});
|
|
1375
1420
|
}
|
|
1376
1421
|
}
|
|
1377
1422
|
const integrationIds = this.integrations.map((i) => i.id);
|
|
@@ -1485,7 +1530,7 @@ class MCPClientBase {
|
|
|
1485
1530
|
const hasApiKey = !!transportHeaders["X-API-KEY"];
|
|
1486
1531
|
if (hasApiKey) {
|
|
1487
1532
|
if (provider) {
|
|
1488
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1533
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1489
1534
|
if (tokenData && this.transport.setHeader) {
|
|
1490
1535
|
const previousAuthHeader = transportHeaders["Authorization"];
|
|
1491
1536
|
try {
|
|
@@ -1515,7 +1560,7 @@ class MCPClientBase {
|
|
|
1515
1560
|
"Content-Type": "application/json"
|
|
1516
1561
|
};
|
|
1517
1562
|
if (provider) {
|
|
1518
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1563
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1519
1564
|
if (tokenData) {
|
|
1520
1565
|
headers["Authorization"] = `Bearer ${tokenData.accessToken}`;
|
|
1521
1566
|
}
|
|
@@ -1710,7 +1755,7 @@ class MCPClientBase {
|
|
|
1710
1755
|
this.eventEmitter.emit("auth:started", { provider });
|
|
1711
1756
|
try {
|
|
1712
1757
|
await this.oauthManager.initiateFlow(provider, integration.oauth, options?.returnUrl);
|
|
1713
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1758
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1714
1759
|
if (tokenData) {
|
|
1715
1760
|
this.eventEmitter.emit("auth:complete", {
|
|
1716
1761
|
provider,
|
|
@@ -1741,11 +1786,11 @@ class MCPClientBase {
|
|
|
1741
1786
|
throw error;
|
|
1742
1787
|
}
|
|
1743
1788
|
}
|
|
1744
|
-
getProviderToken(provider) {
|
|
1745
|
-
return this.oauthManager.getProviderToken(provider);
|
|
1789
|
+
async getProviderToken(provider) {
|
|
1790
|
+
return await this.oauthManager.getProviderToken(provider);
|
|
1746
1791
|
}
|
|
1747
|
-
setProviderToken(provider, tokenData) {
|
|
1748
|
-
this.oauthManager.setProviderToken(provider, tokenData);
|
|
1792
|
+
async setProviderToken(provider, tokenData) {
|
|
1793
|
+
await this.oauthManager.setProviderToken(provider, tokenData);
|
|
1749
1794
|
this.authState.set(provider, { authenticated: true });
|
|
1750
1795
|
}
|
|
1751
1796
|
getAllProviderTokens() {
|
package/dist/ai/index.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ import type { MCPClient } from "../client.js";
|
|
|
7
7
|
import type { AIToolsOptions } from "./utils.js";
|
|
8
8
|
export * from "./vercel-ai.js";
|
|
9
9
|
export * from "./openai.js";
|
|
10
|
-
export * from "./openai-agents.js";
|
|
11
10
|
export * from "./anthropic.js";
|
|
12
11
|
export * from "./google.js";
|
|
13
12
|
export * from "./cloudflare.js";
|
|
@@ -18,7 +17,7 @@ export * from "./utils.js";
|
|
|
18
17
|
/**
|
|
19
18
|
* Supported AI provider names
|
|
20
19
|
*/
|
|
21
|
-
export type AIProviderName = "vercel-ai" | "openai" | "
|
|
20
|
+
export type AIProviderName = "vercel-ai" | "openai" | "anthropic" | "google" | "cloudflare" | "langchain" | "llamaindex" | "mastra";
|
|
22
21
|
/**
|
|
23
22
|
* Generic function to get AI tools for any supported provider
|
|
24
23
|
*
|
|
@@ -69,7 +68,6 @@ export type AIProviderName = "vercel-ai" | "openai" | "openai-agents" | "anthrop
|
|
|
69
68
|
*/
|
|
70
69
|
export declare function getAITools(client: MCPClient<any>, provider: "vercel-ai", options?: AIToolsOptions): Promise<Record<string, any>>;
|
|
71
70
|
export declare function getAITools(client: MCPClient<any>, provider: "openai", options?: AIToolsOptions): Promise<Array<any>>;
|
|
72
|
-
export declare function getAITools(client: MCPClient<any>, provider: "openai-agents", options?: AIToolsOptions): Promise<Array<any>>;
|
|
73
71
|
export declare function getAITools(client: MCPClient<any>, provider: "anthropic", options?: AIToolsOptions): Promise<Array<any>>;
|
|
74
72
|
export declare function getAITools(client: MCPClient<any>, provider: "google", options?: AIToolsOptions): Promise<Array<any>>;
|
|
75
73
|
export declare function getAITools(client: MCPClient<any>, provider: "cloudflare", options?: AIToolsOptions): Promise<Record<string, any>>;
|
package/dist/ai/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAY3B;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,QAAQ,CAAC;AAEb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAEhC,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAEhC,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC"}
|