integrate-sdk 0.3.8 → 0.3.10
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.js +162 -11
- package/dist/server.js +162 -11
- package/dist/src/client.d.ts +43 -1
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/config/types.d.ts +15 -0
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/oauth/manager.d.ts +4 -0
- package/dist/src/oauth/manager.d.ts.map +1 -1
- package/dist/src/oauth/types.d.ts +33 -0
- package/dist/src/oauth/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -839,6 +839,7 @@ class OAuthManager {
|
|
|
839
839
|
try {
|
|
840
840
|
const response = await this.exchangeCodeForToken(pendingAuth.provider, code, pendingAuth.codeVerifier, state);
|
|
841
841
|
this.sessionToken = response.sessionToken;
|
|
842
|
+
this.saveSessionToken(response.sessionToken);
|
|
842
843
|
this.pendingAuths.delete(state);
|
|
843
844
|
return response.sessionToken;
|
|
844
845
|
} catch (error) {
|
|
@@ -882,9 +883,26 @@ class OAuthManager {
|
|
|
882
883
|
}
|
|
883
884
|
setSessionToken(token) {
|
|
884
885
|
this.sessionToken = token;
|
|
886
|
+
this.saveSessionToken(token);
|
|
885
887
|
}
|
|
886
888
|
clearSessionToken() {
|
|
887
889
|
this.sessionToken = undefined;
|
|
890
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
891
|
+
try {
|
|
892
|
+
window.sessionStorage.removeItem("integrate_session_token");
|
|
893
|
+
} catch (error) {
|
|
894
|
+
console.error("Failed to clear session token from sessionStorage:", error);
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
saveSessionToken(token) {
|
|
899
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
900
|
+
try {
|
|
901
|
+
window.sessionStorage.setItem("integrate_session_token", token);
|
|
902
|
+
} catch (error) {
|
|
903
|
+
console.error("Failed to save session token to sessionStorage:", error);
|
|
904
|
+
}
|
|
905
|
+
}
|
|
888
906
|
}
|
|
889
907
|
async getAuthorizationUrl(provider, scopes, state, codeChallenge, redirectUri) {
|
|
890
908
|
const url = `${this.oauthApiBase}/authorize`;
|
|
@@ -936,6 +954,40 @@ class OAuthManager {
|
|
|
936
954
|
}
|
|
937
955
|
|
|
938
956
|
// src/client.ts
|
|
957
|
+
class SimpleEventEmitter {
|
|
958
|
+
handlers = new Map;
|
|
959
|
+
on(event, handler) {
|
|
960
|
+
if (!this.handlers.has(event)) {
|
|
961
|
+
this.handlers.set(event, new Set);
|
|
962
|
+
}
|
|
963
|
+
this.handlers.get(event).add(handler);
|
|
964
|
+
}
|
|
965
|
+
off(event, handler) {
|
|
966
|
+
const handlers = this.handlers.get(event);
|
|
967
|
+
if (handlers) {
|
|
968
|
+
handlers.delete(handler);
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
emit(event, payload) {
|
|
972
|
+
const handlers = this.handlers.get(event);
|
|
973
|
+
if (handlers) {
|
|
974
|
+
handlers.forEach((handler) => {
|
|
975
|
+
try {
|
|
976
|
+
handler(payload);
|
|
977
|
+
} catch (error) {
|
|
978
|
+
console.error(`Error in event handler for ${event}:`, error);
|
|
979
|
+
}
|
|
980
|
+
});
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
removeAllListeners(event) {
|
|
984
|
+
if (event) {
|
|
985
|
+
this.handlers.delete(event);
|
|
986
|
+
} else {
|
|
987
|
+
this.handlers.clear();
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
939
991
|
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
940
992
|
var clientCache = new Map;
|
|
941
993
|
var cleanupClients = new Set;
|
|
@@ -954,6 +1006,7 @@ class MCPClient {
|
|
|
954
1006
|
connectionMode;
|
|
955
1007
|
connecting = null;
|
|
956
1008
|
oauthManager;
|
|
1009
|
+
eventEmitter = new SimpleEventEmitter;
|
|
957
1010
|
github;
|
|
958
1011
|
gmail;
|
|
959
1012
|
server;
|
|
@@ -972,9 +1025,16 @@ class MCPClient {
|
|
|
972
1025
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
973
1026
|
this.connectionMode = config.connectionMode ?? "lazy";
|
|
974
1027
|
this.oauthManager = new OAuthManager(config.oauthApiBase || "/api/integrate/oauth", config.oauthFlow);
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
this.
|
|
1028
|
+
let sessionToken = config.sessionToken;
|
|
1029
|
+
if (!sessionToken) {
|
|
1030
|
+
const storedToken = this.loadSessionToken();
|
|
1031
|
+
if (storedToken) {
|
|
1032
|
+
sessionToken = storedToken;
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
if (sessionToken) {
|
|
1036
|
+
this.oauthManager.setSessionToken(sessionToken);
|
|
1037
|
+
this.transport.setHeader("X-Session-Token", sessionToken);
|
|
978
1038
|
}
|
|
979
1039
|
for (const plugin of this.plugins) {
|
|
980
1040
|
for (const toolName of plugin.tools) {
|
|
@@ -1190,6 +1250,42 @@ class MCPClient {
|
|
|
1190
1250
|
onMessage(handler) {
|
|
1191
1251
|
return this.transport.onMessage(handler);
|
|
1192
1252
|
}
|
|
1253
|
+
on(event, handler) {
|
|
1254
|
+
this.eventEmitter.on(event, handler);
|
|
1255
|
+
}
|
|
1256
|
+
off(event, handler) {
|
|
1257
|
+
this.eventEmitter.off(event, handler);
|
|
1258
|
+
}
|
|
1259
|
+
saveSessionToken(token) {
|
|
1260
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
1261
|
+
try {
|
|
1262
|
+
window.sessionStorage.setItem("integrate_session_token", token);
|
|
1263
|
+
} catch (error) {
|
|
1264
|
+
console.error("Failed to save session token to sessionStorage:", error);
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
loadSessionToken() {
|
|
1269
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
1270
|
+
try {
|
|
1271
|
+
return window.sessionStorage.getItem("integrate_session_token") || undefined;
|
|
1272
|
+
} catch (error) {
|
|
1273
|
+
console.error("Failed to load session token from sessionStorage:", error);
|
|
1274
|
+
return;
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
return;
|
|
1278
|
+
}
|
|
1279
|
+
clearSessionToken() {
|
|
1280
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
1281
|
+
try {
|
|
1282
|
+
window.sessionStorage.removeItem("integrate_session_token");
|
|
1283
|
+
} catch (error) {
|
|
1284
|
+
console.error("Failed to clear session token from sessionStorage:", error);
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
this.oauthManager.clearSessionToken();
|
|
1288
|
+
}
|
|
1193
1289
|
async disconnect() {
|
|
1194
1290
|
for (const plugin of this.plugins) {
|
|
1195
1291
|
if (plugin.onDisconnect) {
|
|
@@ -1233,18 +1329,44 @@ class MCPClient {
|
|
|
1233
1329
|
async authorize(provider) {
|
|
1234
1330
|
const plugin = this.plugins.find((p) => p.oauth?.provider === provider);
|
|
1235
1331
|
if (!plugin?.oauth) {
|
|
1236
|
-
|
|
1332
|
+
const error = new Error(`No OAuth configuration found for provider: ${provider}`);
|
|
1333
|
+
this.eventEmitter.emit("auth:error", { provider, error });
|
|
1334
|
+
throw error;
|
|
1335
|
+
}
|
|
1336
|
+
this.eventEmitter.emit("auth:started", { provider });
|
|
1337
|
+
try {
|
|
1338
|
+
await this.oauthManager.initiateFlow(provider, plugin.oauth);
|
|
1339
|
+
const sessionToken = this.oauthManager.getSessionToken();
|
|
1340
|
+
if (sessionToken) {
|
|
1341
|
+
this.saveSessionToken(sessionToken);
|
|
1342
|
+
this.eventEmitter.emit("auth:complete", { provider, sessionToken });
|
|
1343
|
+
}
|
|
1344
|
+
this.authState.set(provider, { authenticated: true });
|
|
1345
|
+
} catch (error) {
|
|
1346
|
+
this.eventEmitter.emit("auth:error", { provider, error });
|
|
1347
|
+
throw error;
|
|
1237
1348
|
}
|
|
1238
|
-
await this.oauthManager.initiateFlow(provider, plugin.oauth);
|
|
1239
|
-
this.authState.set(provider, { authenticated: true });
|
|
1240
1349
|
}
|
|
1241
1350
|
async handleOAuthCallback(params) {
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1351
|
+
try {
|
|
1352
|
+
const sessionToken = await this.oauthManager.handleCallback(params.code, params.state);
|
|
1353
|
+
this.saveSessionToken(sessionToken);
|
|
1354
|
+
this.transport.setHeader("X-Session-Token", sessionToken);
|
|
1355
|
+
for (const plugin of this.plugins) {
|
|
1356
|
+
if (plugin.oauth) {
|
|
1357
|
+
this.authState.set(plugin.oauth.provider, { authenticated: true });
|
|
1358
|
+
this.eventEmitter.emit("auth:complete", {
|
|
1359
|
+
provider: plugin.oauth.provider,
|
|
1360
|
+
sessionToken
|
|
1361
|
+
});
|
|
1362
|
+
}
|
|
1247
1363
|
}
|
|
1364
|
+
} catch (error) {
|
|
1365
|
+
this.eventEmitter.emit("auth:error", {
|
|
1366
|
+
provider: "unknown",
|
|
1367
|
+
error
|
|
1368
|
+
});
|
|
1369
|
+
throw error;
|
|
1248
1370
|
}
|
|
1249
1371
|
}
|
|
1250
1372
|
getSessionToken() {
|
|
@@ -1339,6 +1461,9 @@ function createMCPClient(config) {
|
|
|
1339
1461
|
console.error("Failed to connect client:", error);
|
|
1340
1462
|
});
|
|
1341
1463
|
}
|
|
1464
|
+
if (config.autoHandleOAuthCallback !== false) {
|
|
1465
|
+
processOAuthCallbackFromHash(client);
|
|
1466
|
+
}
|
|
1342
1467
|
return client;
|
|
1343
1468
|
} else {
|
|
1344
1469
|
const client = new MCPClient(config);
|
|
@@ -1351,9 +1476,35 @@ function createMCPClient(config) {
|
|
|
1351
1476
|
console.error("Failed to connect client:", error);
|
|
1352
1477
|
});
|
|
1353
1478
|
}
|
|
1479
|
+
if (config.autoHandleOAuthCallback !== false) {
|
|
1480
|
+
processOAuthCallbackFromHash(client);
|
|
1481
|
+
}
|
|
1354
1482
|
return client;
|
|
1355
1483
|
}
|
|
1356
1484
|
}
|
|
1485
|
+
function processOAuthCallbackFromHash(client) {
|
|
1486
|
+
if (typeof window === "undefined") {
|
|
1487
|
+
return;
|
|
1488
|
+
}
|
|
1489
|
+
try {
|
|
1490
|
+
const hash = window.location.hash;
|
|
1491
|
+
if (hash && hash.includes("oauth_callback=")) {
|
|
1492
|
+
const hashParams = new URLSearchParams(hash.substring(1));
|
|
1493
|
+
const oauthCallbackData = hashParams.get("oauth_callback");
|
|
1494
|
+
if (oauthCallbackData) {
|
|
1495
|
+
const callbackParams = JSON.parse(decodeURIComponent(oauthCallbackData));
|
|
1496
|
+
if (callbackParams.code && callbackParams.state) {
|
|
1497
|
+
client.handleOAuthCallback(callbackParams).catch((error) => {
|
|
1498
|
+
console.error("Failed to process OAuth callback:", error);
|
|
1499
|
+
});
|
|
1500
|
+
window.history.replaceState(null, "", window.location.pathname + window.location.search);
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1504
|
+
} catch (error) {
|
|
1505
|
+
console.error("Failed to process OAuth callback from hash:", error);
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1357
1508
|
async function clearClientCache() {
|
|
1358
1509
|
const clients = Array.from(clientCache.values());
|
|
1359
1510
|
clientCache.clear();
|
package/dist/server.js
CHANGED
|
@@ -839,6 +839,7 @@ class OAuthManager {
|
|
|
839
839
|
try {
|
|
840
840
|
const response = await this.exchangeCodeForToken(pendingAuth.provider, code, pendingAuth.codeVerifier, state);
|
|
841
841
|
this.sessionToken = response.sessionToken;
|
|
842
|
+
this.saveSessionToken(response.sessionToken);
|
|
842
843
|
this.pendingAuths.delete(state);
|
|
843
844
|
return response.sessionToken;
|
|
844
845
|
} catch (error) {
|
|
@@ -882,9 +883,26 @@ class OAuthManager {
|
|
|
882
883
|
}
|
|
883
884
|
setSessionToken(token) {
|
|
884
885
|
this.sessionToken = token;
|
|
886
|
+
this.saveSessionToken(token);
|
|
885
887
|
}
|
|
886
888
|
clearSessionToken() {
|
|
887
889
|
this.sessionToken = undefined;
|
|
890
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
891
|
+
try {
|
|
892
|
+
window.sessionStorage.removeItem("integrate_session_token");
|
|
893
|
+
} catch (error) {
|
|
894
|
+
console.error("Failed to clear session token from sessionStorage:", error);
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
saveSessionToken(token) {
|
|
899
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
900
|
+
try {
|
|
901
|
+
window.sessionStorage.setItem("integrate_session_token", token);
|
|
902
|
+
} catch (error) {
|
|
903
|
+
console.error("Failed to save session token to sessionStorage:", error);
|
|
904
|
+
}
|
|
905
|
+
}
|
|
888
906
|
}
|
|
889
907
|
async getAuthorizationUrl(provider, scopes, state, codeChallenge, redirectUri) {
|
|
890
908
|
const url = `${this.oauthApiBase}/authorize`;
|
|
@@ -936,6 +954,40 @@ class OAuthManager {
|
|
|
936
954
|
}
|
|
937
955
|
|
|
938
956
|
// src/client.ts
|
|
957
|
+
class SimpleEventEmitter {
|
|
958
|
+
handlers = new Map;
|
|
959
|
+
on(event, handler) {
|
|
960
|
+
if (!this.handlers.has(event)) {
|
|
961
|
+
this.handlers.set(event, new Set);
|
|
962
|
+
}
|
|
963
|
+
this.handlers.get(event).add(handler);
|
|
964
|
+
}
|
|
965
|
+
off(event, handler) {
|
|
966
|
+
const handlers = this.handlers.get(event);
|
|
967
|
+
if (handlers) {
|
|
968
|
+
handlers.delete(handler);
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
emit(event, payload) {
|
|
972
|
+
const handlers = this.handlers.get(event);
|
|
973
|
+
if (handlers) {
|
|
974
|
+
handlers.forEach((handler) => {
|
|
975
|
+
try {
|
|
976
|
+
handler(payload);
|
|
977
|
+
} catch (error) {
|
|
978
|
+
console.error(`Error in event handler for ${event}:`, error);
|
|
979
|
+
}
|
|
980
|
+
});
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
removeAllListeners(event) {
|
|
984
|
+
if (event) {
|
|
985
|
+
this.handlers.delete(event);
|
|
986
|
+
} else {
|
|
987
|
+
this.handlers.clear();
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
939
991
|
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
940
992
|
var clientCache = new Map;
|
|
941
993
|
var cleanupClients = new Set;
|
|
@@ -954,6 +1006,7 @@ class MCPClient {
|
|
|
954
1006
|
connectionMode;
|
|
955
1007
|
connecting = null;
|
|
956
1008
|
oauthManager;
|
|
1009
|
+
eventEmitter = new SimpleEventEmitter;
|
|
957
1010
|
github;
|
|
958
1011
|
gmail;
|
|
959
1012
|
server;
|
|
@@ -972,9 +1025,16 @@ class MCPClient {
|
|
|
972
1025
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
973
1026
|
this.connectionMode = config.connectionMode ?? "lazy";
|
|
974
1027
|
this.oauthManager = new OAuthManager(config.oauthApiBase || "/api/integrate/oauth", config.oauthFlow);
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
this.
|
|
1028
|
+
let sessionToken = config.sessionToken;
|
|
1029
|
+
if (!sessionToken) {
|
|
1030
|
+
const storedToken = this.loadSessionToken();
|
|
1031
|
+
if (storedToken) {
|
|
1032
|
+
sessionToken = storedToken;
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
if (sessionToken) {
|
|
1036
|
+
this.oauthManager.setSessionToken(sessionToken);
|
|
1037
|
+
this.transport.setHeader("X-Session-Token", sessionToken);
|
|
978
1038
|
}
|
|
979
1039
|
for (const plugin of this.plugins) {
|
|
980
1040
|
for (const toolName of plugin.tools) {
|
|
@@ -1190,6 +1250,42 @@ class MCPClient {
|
|
|
1190
1250
|
onMessage(handler) {
|
|
1191
1251
|
return this.transport.onMessage(handler);
|
|
1192
1252
|
}
|
|
1253
|
+
on(event, handler) {
|
|
1254
|
+
this.eventEmitter.on(event, handler);
|
|
1255
|
+
}
|
|
1256
|
+
off(event, handler) {
|
|
1257
|
+
this.eventEmitter.off(event, handler);
|
|
1258
|
+
}
|
|
1259
|
+
saveSessionToken(token) {
|
|
1260
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
1261
|
+
try {
|
|
1262
|
+
window.sessionStorage.setItem("integrate_session_token", token);
|
|
1263
|
+
} catch (error) {
|
|
1264
|
+
console.error("Failed to save session token to sessionStorage:", error);
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
loadSessionToken() {
|
|
1269
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
1270
|
+
try {
|
|
1271
|
+
return window.sessionStorage.getItem("integrate_session_token") || undefined;
|
|
1272
|
+
} catch (error) {
|
|
1273
|
+
console.error("Failed to load session token from sessionStorage:", error);
|
|
1274
|
+
return;
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
return;
|
|
1278
|
+
}
|
|
1279
|
+
clearSessionToken() {
|
|
1280
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
1281
|
+
try {
|
|
1282
|
+
window.sessionStorage.removeItem("integrate_session_token");
|
|
1283
|
+
} catch (error) {
|
|
1284
|
+
console.error("Failed to clear session token from sessionStorage:", error);
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
this.oauthManager.clearSessionToken();
|
|
1288
|
+
}
|
|
1193
1289
|
async disconnect() {
|
|
1194
1290
|
for (const plugin of this.plugins) {
|
|
1195
1291
|
if (plugin.onDisconnect) {
|
|
@@ -1233,18 +1329,44 @@ class MCPClient {
|
|
|
1233
1329
|
async authorize(provider) {
|
|
1234
1330
|
const plugin = this.plugins.find((p) => p.oauth?.provider === provider);
|
|
1235
1331
|
if (!plugin?.oauth) {
|
|
1236
|
-
|
|
1332
|
+
const error = new Error(`No OAuth configuration found for provider: ${provider}`);
|
|
1333
|
+
this.eventEmitter.emit("auth:error", { provider, error });
|
|
1334
|
+
throw error;
|
|
1335
|
+
}
|
|
1336
|
+
this.eventEmitter.emit("auth:started", { provider });
|
|
1337
|
+
try {
|
|
1338
|
+
await this.oauthManager.initiateFlow(provider, plugin.oauth);
|
|
1339
|
+
const sessionToken = this.oauthManager.getSessionToken();
|
|
1340
|
+
if (sessionToken) {
|
|
1341
|
+
this.saveSessionToken(sessionToken);
|
|
1342
|
+
this.eventEmitter.emit("auth:complete", { provider, sessionToken });
|
|
1343
|
+
}
|
|
1344
|
+
this.authState.set(provider, { authenticated: true });
|
|
1345
|
+
} catch (error) {
|
|
1346
|
+
this.eventEmitter.emit("auth:error", { provider, error });
|
|
1347
|
+
throw error;
|
|
1237
1348
|
}
|
|
1238
|
-
await this.oauthManager.initiateFlow(provider, plugin.oauth);
|
|
1239
|
-
this.authState.set(provider, { authenticated: true });
|
|
1240
1349
|
}
|
|
1241
1350
|
async handleOAuthCallback(params) {
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1351
|
+
try {
|
|
1352
|
+
const sessionToken = await this.oauthManager.handleCallback(params.code, params.state);
|
|
1353
|
+
this.saveSessionToken(sessionToken);
|
|
1354
|
+
this.transport.setHeader("X-Session-Token", sessionToken);
|
|
1355
|
+
for (const plugin of this.plugins) {
|
|
1356
|
+
if (plugin.oauth) {
|
|
1357
|
+
this.authState.set(plugin.oauth.provider, { authenticated: true });
|
|
1358
|
+
this.eventEmitter.emit("auth:complete", {
|
|
1359
|
+
provider: plugin.oauth.provider,
|
|
1360
|
+
sessionToken
|
|
1361
|
+
});
|
|
1362
|
+
}
|
|
1247
1363
|
}
|
|
1364
|
+
} catch (error) {
|
|
1365
|
+
this.eventEmitter.emit("auth:error", {
|
|
1366
|
+
provider: "unknown",
|
|
1367
|
+
error
|
|
1368
|
+
});
|
|
1369
|
+
throw error;
|
|
1248
1370
|
}
|
|
1249
1371
|
}
|
|
1250
1372
|
getSessionToken() {
|
|
@@ -1339,6 +1461,9 @@ function createMCPClient(config) {
|
|
|
1339
1461
|
console.error("Failed to connect client:", error);
|
|
1340
1462
|
});
|
|
1341
1463
|
}
|
|
1464
|
+
if (config.autoHandleOAuthCallback !== false) {
|
|
1465
|
+
processOAuthCallbackFromHash(client);
|
|
1466
|
+
}
|
|
1342
1467
|
return client;
|
|
1343
1468
|
} else {
|
|
1344
1469
|
const client = new MCPClient(config);
|
|
@@ -1351,9 +1476,35 @@ function createMCPClient(config) {
|
|
|
1351
1476
|
console.error("Failed to connect client:", error);
|
|
1352
1477
|
});
|
|
1353
1478
|
}
|
|
1479
|
+
if (config.autoHandleOAuthCallback !== false) {
|
|
1480
|
+
processOAuthCallbackFromHash(client);
|
|
1481
|
+
}
|
|
1354
1482
|
return client;
|
|
1355
1483
|
}
|
|
1356
1484
|
}
|
|
1485
|
+
function processOAuthCallbackFromHash(client) {
|
|
1486
|
+
if (typeof window === "undefined") {
|
|
1487
|
+
return;
|
|
1488
|
+
}
|
|
1489
|
+
try {
|
|
1490
|
+
const hash = window.location.hash;
|
|
1491
|
+
if (hash && hash.includes("oauth_callback=")) {
|
|
1492
|
+
const hashParams = new URLSearchParams(hash.substring(1));
|
|
1493
|
+
const oauthCallbackData = hashParams.get("oauth_callback");
|
|
1494
|
+
if (oauthCallbackData) {
|
|
1495
|
+
const callbackParams = JSON.parse(decodeURIComponent(oauthCallbackData));
|
|
1496
|
+
if (callbackParams.code && callbackParams.state) {
|
|
1497
|
+
client.handleOAuthCallback(callbackParams).catch((error) => {
|
|
1498
|
+
console.error("Failed to process OAuth callback:", error);
|
|
1499
|
+
});
|
|
1500
|
+
window.history.replaceState(null, "", window.location.pathname + window.location.search);
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1504
|
+
} catch (error) {
|
|
1505
|
+
console.error("Failed to process OAuth callback from hash:", error);
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1357
1508
|
async function clearClientCache() {
|
|
1358
1509
|
const clients = Array.from(clientCache.values());
|
|
1359
1510
|
clientCache.clear();
|
package/dist/src/client.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { type AuthenticationError } from "./errors.js";
|
|
|
9
9
|
import type { GitHubPluginClient } from "./plugins/github-client.js";
|
|
10
10
|
import type { GmailPluginClient } from "./plugins/gmail-client.js";
|
|
11
11
|
import type { ServerPluginClient } from "./plugins/server-client.js";
|
|
12
|
-
import type { AuthStatus, OAuthCallbackParams } from "./oauth/types.js";
|
|
12
|
+
import type { AuthStatus, OAuthCallbackParams, OAuthEventHandler, AuthStartedEvent, AuthCompleteEvent, AuthErrorEvent } from "./oauth/types.js";
|
|
13
13
|
/**
|
|
14
14
|
* Tool invocation options
|
|
15
15
|
*/
|
|
@@ -56,6 +56,7 @@ export declare class MCPClient<TPlugins extends readonly MCPPlugin[] = readonly
|
|
|
56
56
|
private connectionMode;
|
|
57
57
|
private connecting;
|
|
58
58
|
private oauthManager;
|
|
59
|
+
private eventEmitter;
|
|
59
60
|
readonly github: PluginNamespaces<TPlugins> extends {
|
|
60
61
|
github: GitHubPluginClient;
|
|
61
62
|
} ? GitHubPluginClient : never;
|
|
@@ -148,6 +149,47 @@ export declare class MCPClient<TPlugins extends readonly MCPPlugin[] = readonly
|
|
|
148
149
|
* Register a message handler
|
|
149
150
|
*/
|
|
150
151
|
onMessage(handler: (message: unknown) => void): () => void;
|
|
152
|
+
/**
|
|
153
|
+
* Add event listener for OAuth events
|
|
154
|
+
*
|
|
155
|
+
* @param event - Event type to listen for
|
|
156
|
+
* @param handler - Handler function to call when event is emitted
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```typescript
|
|
160
|
+
* client.on('auth:complete', ({ provider, sessionToken }) => {
|
|
161
|
+
* console.log(`${provider} authorized!`);
|
|
162
|
+
* });
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
on(event: 'auth:started', handler: OAuthEventHandler<AuthStartedEvent>): void;
|
|
166
|
+
on(event: 'auth:complete', handler: OAuthEventHandler<AuthCompleteEvent>): void;
|
|
167
|
+
on(event: 'auth:error', handler: OAuthEventHandler<AuthErrorEvent>): void;
|
|
168
|
+
/**
|
|
169
|
+
* Remove event listener for OAuth events
|
|
170
|
+
*
|
|
171
|
+
* @param event - Event type to stop listening for
|
|
172
|
+
* @param handler - Handler function to remove
|
|
173
|
+
*/
|
|
174
|
+
off(event: 'auth:started', handler: OAuthEventHandler<AuthStartedEvent>): void;
|
|
175
|
+
off(event: 'auth:complete', handler: OAuthEventHandler<AuthCompleteEvent>): void;
|
|
176
|
+
off(event: 'auth:error', handler: OAuthEventHandler<AuthErrorEvent>): void;
|
|
177
|
+
/**
|
|
178
|
+
* Save session token to sessionStorage
|
|
179
|
+
*
|
|
180
|
+
* @param token - Session token to save
|
|
181
|
+
*/
|
|
182
|
+
private saveSessionToken;
|
|
183
|
+
/**
|
|
184
|
+
* Load session token from sessionStorage
|
|
185
|
+
*
|
|
186
|
+
* @returns Session token or undefined if not found
|
|
187
|
+
*/
|
|
188
|
+
private loadSessionToken;
|
|
189
|
+
/**
|
|
190
|
+
* Clear session token from sessionStorage
|
|
191
|
+
*/
|
|
192
|
+
clearSessionToken(): void;
|
|
151
193
|
/**
|
|
152
194
|
* Disconnect from the server
|
|
153
195
|
*/
|
package/dist/src/client.d.ts.map
CHANGED
|
@@ -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,EAIpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -148,6 +148,21 @@ export interface MCPClientConfig<TPlugins extends readonly MCPPlugin[]> {
|
|
|
148
148
|
* ```
|
|
149
149
|
*/
|
|
150
150
|
oauthApiBase?: string;
|
|
151
|
+
/**
|
|
152
|
+
* Automatically detect and handle OAuth callbacks from URL hash fragments
|
|
153
|
+
* When true, the SDK will automatically process #oauth_callback={...} in the URL
|
|
154
|
+
*
|
|
155
|
+
* @default true
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* const client = createMCPClient({
|
|
160
|
+
* plugins: [githubPlugin({ ... })],
|
|
161
|
+
* autoHandleOAuthCallback: false // Disable automatic callback handling
|
|
162
|
+
* });
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
autoHandleOAuthCallback?: boolean;
|
|
151
166
|
}
|
|
152
167
|
/**
|
|
153
168
|
* Helper type to infer enabled tools from plugins
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,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;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE;IACpE,iCAAiC;IACjC,OAAO,EAAE,QAAQ,CAAC;IAElB,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;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,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;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE;IACpE,iCAAiC;IACjC,OAAO,EAAE,QAAQ,CAAC;IAElB,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;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,IACjE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,IAAI;KACnE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;CAC/C,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type { ToolInvocationOptions } from "./client.js";
|
|
|
7
7
|
export { OAuthManager } from "./oauth/manager.js";
|
|
8
8
|
export { OAuthWindowManager, sendCallbackToOpener } from "./oauth/window-manager.js";
|
|
9
9
|
export { generateCodeVerifier, generateCodeChallenge, generateState } from "./oauth/pkce.js";
|
|
10
|
-
export type { OAuthFlowConfig, PopupOptions, AuthStatus, PendingAuth, AuthorizationUrlResponse, OAuthCallbackResponse, OAuthCallbackParams, } from "./oauth/types.js";
|
|
10
|
+
export type { OAuthFlowConfig, PopupOptions, AuthStatus, PendingAuth, AuthorizationUrlResponse, OAuthCallbackResponse, OAuthCallbackParams, OAuthEventType, OAuthEventHandler, AuthStartedEvent, AuthCompleteEvent, AuthErrorEvent, } from "./oauth/types.js";
|
|
11
11
|
export { OAuthHandler } from "./adapters/base-handler.js";
|
|
12
12
|
export type { OAuthHandlerConfig, AuthorizeRequest, AuthorizeResponse, CallbackRequest, CallbackResponse, StatusResponse, } from "./adapters/base-handler.js";
|
|
13
13
|
export { createNextOAuthHandler } from "./adapters/nextjs.js";
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7F,YAAY,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EACX,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7F,YAAY,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EACX,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,YAAY,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG3F,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,YAAY,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,EACP,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EACV,cAAc,EACd,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC"}
|
|
@@ -75,6 +75,10 @@ export declare class OAuthManager {
|
|
|
75
75
|
* Clear session token
|
|
76
76
|
*/
|
|
77
77
|
clearSessionToken(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Save session token to sessionStorage
|
|
80
|
+
*/
|
|
81
|
+
private saveSessionToken;
|
|
78
82
|
/**
|
|
79
83
|
* Request authorization URL from user's API route
|
|
80
84
|
* The API route will add OAuth secrets and forward to MCP server
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/oauth/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EAEf,UAAU,EAGX,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,YAAY,CAAS;gBAG3B,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAWvC;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCxE;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/oauth/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EAEf,UAAU,EAGX,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,YAAY,CAAS;gBAG3B,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAWvC;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCxE;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiDlE;;;;;;;;;;;;;OAaG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAoC5D;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,SAAS;IAIrC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKpC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAWzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;OAGG;YACW,mBAAmB;IAiCjC;;;OAGG;YACW,oBAAoB;IA8BlC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -81,4 +81,37 @@ export interface OAuthCallbackParams {
|
|
|
81
81
|
/** State parameter for CSRF protection */
|
|
82
82
|
state: string;
|
|
83
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Event payload for auth:started event
|
|
86
|
+
*/
|
|
87
|
+
export interface AuthStartedEvent {
|
|
88
|
+
/** Provider being authorized */
|
|
89
|
+
provider: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Event payload for auth:complete event
|
|
93
|
+
*/
|
|
94
|
+
export interface AuthCompleteEvent {
|
|
95
|
+
/** Provider that was authorized */
|
|
96
|
+
provider: string;
|
|
97
|
+
/** Session token for authenticated requests */
|
|
98
|
+
sessionToken: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Event payload for auth:error event
|
|
102
|
+
*/
|
|
103
|
+
export interface AuthErrorEvent {
|
|
104
|
+
/** Provider that failed authorization */
|
|
105
|
+
provider: string;
|
|
106
|
+
/** Error that occurred */
|
|
107
|
+
error: Error;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* All possible OAuth event types
|
|
111
|
+
*/
|
|
112
|
+
export type OAuthEventType = 'auth:started' | 'auth:complete' | 'auth:error';
|
|
113
|
+
/**
|
|
114
|
+
* Event handler function type
|
|
115
|
+
*/
|
|
116
|
+
export type OAuthEventHandler<T = any> = (payload: T) => void;
|
|
84
117
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/oauth/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,oDAAoD;IACpD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sDAAsD;IACtD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,UAAU,EAAE,OAAO,CAAC;IACpB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,qDAAqD;IACrD,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/oauth/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,oDAAoD;IACpD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sDAAsD;IACtD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,UAAU,EAAE,OAAO,CAAC;IACpB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,qDAAqD;IACrD,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,YAAY,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC"}
|