integrate-sdk 0.7.0 → 0.7.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.
- package/dist/adapters/auto-routes.js +1 -2
- package/dist/adapters/base-handler.js +1 -2
- package/dist/adapters/nextjs.js +97 -98
- package/dist/adapters/node.js +1 -2
- package/dist/adapters/solid-start.js +165 -166
- package/dist/adapters/svelte-kit.js +165 -166
- package/dist/index.js +187 -166
- package/dist/oauth.js +5 -1
- package/dist/server.js +187 -167
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -244,6 +244,176 @@ function base64UrlDecode(str) {
|
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
+
// src/adapters/base-handler.ts
|
|
248
|
+
var exports_base_handler = {};
|
|
249
|
+
__export(exports_base_handler, {
|
|
250
|
+
OAuthHandler: () => OAuthHandler
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
class OAuthHandler {
|
|
254
|
+
config;
|
|
255
|
+
serverUrl;
|
|
256
|
+
apiKey;
|
|
257
|
+
constructor(config) {
|
|
258
|
+
this.config = config;
|
|
259
|
+
if (!config || !config.providers) {
|
|
260
|
+
throw new Error("OAuthHandler requires a valid config with providers");
|
|
261
|
+
}
|
|
262
|
+
this.serverUrl = config.serverUrl || MCP_SERVER_URL2;
|
|
263
|
+
this.apiKey = config.apiKey;
|
|
264
|
+
}
|
|
265
|
+
getHeaders(additionalHeaders) {
|
|
266
|
+
const headers = {
|
|
267
|
+
...additionalHeaders
|
|
268
|
+
};
|
|
269
|
+
if (this.apiKey) {
|
|
270
|
+
headers["X-API-KEY"] = this.apiKey;
|
|
271
|
+
}
|
|
272
|
+
return headers;
|
|
273
|
+
}
|
|
274
|
+
async handleAuthorize(request) {
|
|
275
|
+
const providerConfig = this.config.providers[request.provider];
|
|
276
|
+
if (!providerConfig) {
|
|
277
|
+
throw new Error(`Provider ${request.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
278
|
+
}
|
|
279
|
+
if (!providerConfig.clientId || !providerConfig.clientSecret) {
|
|
280
|
+
throw new Error(`Missing OAuth credentials for ${request.provider}. Check your environment variables.`);
|
|
281
|
+
}
|
|
282
|
+
const url = new URL("/oauth/authorize", this.serverUrl);
|
|
283
|
+
url.searchParams.set("provider", request.provider);
|
|
284
|
+
url.searchParams.set("client_id", providerConfig.clientId);
|
|
285
|
+
url.searchParams.set("client_secret", providerConfig.clientSecret);
|
|
286
|
+
url.searchParams.set("scope", request.scopes.join(","));
|
|
287
|
+
url.searchParams.set("state", request.state);
|
|
288
|
+
url.searchParams.set("code_challenge", request.codeChallenge);
|
|
289
|
+
url.searchParams.set("code_challenge_method", request.codeChallengeMethod);
|
|
290
|
+
const redirectUri = request.redirectUri || providerConfig.redirectUri;
|
|
291
|
+
if (redirectUri) {
|
|
292
|
+
url.searchParams.set("redirect_uri", redirectUri);
|
|
293
|
+
}
|
|
294
|
+
const response = await fetch(url.toString(), {
|
|
295
|
+
method: "GET",
|
|
296
|
+
headers: this.getHeaders()
|
|
297
|
+
});
|
|
298
|
+
if (!response.ok) {
|
|
299
|
+
const error = await response.text();
|
|
300
|
+
throw new Error(`MCP server failed to generate authorization URL: ${error}`);
|
|
301
|
+
}
|
|
302
|
+
const data = await response.json();
|
|
303
|
+
return data;
|
|
304
|
+
}
|
|
305
|
+
async handleCallback(request) {
|
|
306
|
+
const providerConfig = this.config.providers[request.provider];
|
|
307
|
+
if (!providerConfig) {
|
|
308
|
+
throw new Error(`Provider ${request.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
309
|
+
}
|
|
310
|
+
if (!providerConfig.clientId || !providerConfig.clientSecret) {
|
|
311
|
+
throw new Error(`Missing OAuth credentials for ${request.provider}. Check your environment variables.`);
|
|
312
|
+
}
|
|
313
|
+
const url = new URL("/oauth/callback", this.serverUrl);
|
|
314
|
+
const response = await fetch(url.toString(), {
|
|
315
|
+
method: "POST",
|
|
316
|
+
headers: this.getHeaders({
|
|
317
|
+
"Content-Type": "application/json"
|
|
318
|
+
}),
|
|
319
|
+
body: JSON.stringify({
|
|
320
|
+
provider: request.provider,
|
|
321
|
+
code: request.code,
|
|
322
|
+
code_verifier: request.codeVerifier,
|
|
323
|
+
state: request.state,
|
|
324
|
+
client_id: providerConfig.clientId,
|
|
325
|
+
client_secret: providerConfig.clientSecret,
|
|
326
|
+
redirect_uri: providerConfig.redirectUri
|
|
327
|
+
})
|
|
328
|
+
});
|
|
329
|
+
if (!response.ok) {
|
|
330
|
+
const error = await response.text();
|
|
331
|
+
throw new Error(`MCP server failed to exchange authorization code: ${error}`);
|
|
332
|
+
}
|
|
333
|
+
const data = await response.json();
|
|
334
|
+
return data;
|
|
335
|
+
}
|
|
336
|
+
async handleStatus(provider, accessToken) {
|
|
337
|
+
const url = new URL("/oauth/status", this.serverUrl);
|
|
338
|
+
url.searchParams.set("provider", provider);
|
|
339
|
+
const response = await fetch(url.toString(), {
|
|
340
|
+
method: "GET",
|
|
341
|
+
headers: this.getHeaders({
|
|
342
|
+
Authorization: `Bearer ${accessToken}`
|
|
343
|
+
})
|
|
344
|
+
});
|
|
345
|
+
if (!response.ok) {
|
|
346
|
+
if (response.status === 401) {
|
|
347
|
+
return {
|
|
348
|
+
authorized: false
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
const error = await response.text();
|
|
352
|
+
throw new Error(`MCP server failed to check authorization status: ${error}`);
|
|
353
|
+
}
|
|
354
|
+
const data = await response.json();
|
|
355
|
+
return data;
|
|
356
|
+
}
|
|
357
|
+
async handleDisconnect(request, accessToken) {
|
|
358
|
+
if (!accessToken) {
|
|
359
|
+
throw new Error("No access token provided. Cannot disconnect provider.");
|
|
360
|
+
}
|
|
361
|
+
const url = new URL("/oauth/disconnect", this.serverUrl);
|
|
362
|
+
const response = await fetch(url.toString(), {
|
|
363
|
+
method: "POST",
|
|
364
|
+
headers: this.getHeaders({
|
|
365
|
+
"Content-Type": "application/json",
|
|
366
|
+
Authorization: `Bearer ${accessToken}`
|
|
367
|
+
}),
|
|
368
|
+
body: JSON.stringify({
|
|
369
|
+
provider: request.provider
|
|
370
|
+
})
|
|
371
|
+
});
|
|
372
|
+
if (!response.ok) {
|
|
373
|
+
const error = await response.text();
|
|
374
|
+
throw new Error(`MCP server failed to disconnect provider: ${error}`);
|
|
375
|
+
}
|
|
376
|
+
const data = await response.json();
|
|
377
|
+
return data;
|
|
378
|
+
}
|
|
379
|
+
async handleToolCall(request, authHeader) {
|
|
380
|
+
const url = new URL("/tools/call", this.serverUrl);
|
|
381
|
+
const headers = this.getHeaders({
|
|
382
|
+
"Content-Type": "application/json"
|
|
383
|
+
});
|
|
384
|
+
if (authHeader && authHeader.startsWith("Bearer ")) {
|
|
385
|
+
headers["Authorization"] = authHeader;
|
|
386
|
+
}
|
|
387
|
+
const jsonRpcRequest = {
|
|
388
|
+
jsonrpc: "2.0",
|
|
389
|
+
id: Date.now() + Math.random(),
|
|
390
|
+
method: "tools/call",
|
|
391
|
+
params: {
|
|
392
|
+
name: request.name,
|
|
393
|
+
arguments: request.arguments || {}
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
const response = await fetch(url.toString(), {
|
|
397
|
+
method: "POST",
|
|
398
|
+
headers,
|
|
399
|
+
body: JSON.stringify(jsonRpcRequest)
|
|
400
|
+
});
|
|
401
|
+
if (!response.ok) {
|
|
402
|
+
const error = await response.text();
|
|
403
|
+
throw new Error(`MCP server failed to execute tool call: ${error}`);
|
|
404
|
+
}
|
|
405
|
+
const jsonRpcResponse = await response.json();
|
|
406
|
+
if (jsonRpcResponse.error) {
|
|
407
|
+
const error = new Error(jsonRpcResponse.error.message || "Tool call failed");
|
|
408
|
+
error.code = jsonRpcResponse.error.code;
|
|
409
|
+
error.data = jsonRpcResponse.error.data;
|
|
410
|
+
throw error;
|
|
411
|
+
}
|
|
412
|
+
return jsonRpcResponse.result;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
var MCP_SERVER_URL2 = "https://mcp.integrate.dev/api/v1/mcp";
|
|
416
|
+
|
|
247
417
|
// src/protocol/jsonrpc.ts
|
|
248
418
|
function parseMessage(message) {
|
|
249
419
|
try {
|
|
@@ -1583,172 +1753,6 @@ async function clearClientCache() {
|
|
|
1583
1753
|
}));
|
|
1584
1754
|
}
|
|
1585
1755
|
|
|
1586
|
-
// src/adapters/base-handler.ts
|
|
1587
|
-
var MCP_SERVER_URL2 = "https://mcp.integrate.dev/api/v1/mcp";
|
|
1588
|
-
|
|
1589
|
-
class OAuthHandler {
|
|
1590
|
-
config;
|
|
1591
|
-
serverUrl;
|
|
1592
|
-
apiKey;
|
|
1593
|
-
constructor(config) {
|
|
1594
|
-
this.config = config;
|
|
1595
|
-
if (!config || !config.providers) {
|
|
1596
|
-
throw new Error("OAuthHandler requires a valid config with providers");
|
|
1597
|
-
}
|
|
1598
|
-
this.serverUrl = config.serverUrl || MCP_SERVER_URL2;
|
|
1599
|
-
this.apiKey = config.apiKey;
|
|
1600
|
-
}
|
|
1601
|
-
getHeaders(additionalHeaders) {
|
|
1602
|
-
const headers = {
|
|
1603
|
-
...additionalHeaders
|
|
1604
|
-
};
|
|
1605
|
-
if (this.apiKey) {
|
|
1606
|
-
headers["X-API-KEY"] = this.apiKey;
|
|
1607
|
-
}
|
|
1608
|
-
return headers;
|
|
1609
|
-
}
|
|
1610
|
-
async handleAuthorize(request) {
|
|
1611
|
-
const providerConfig = this.config.providers[request.provider];
|
|
1612
|
-
if (!providerConfig) {
|
|
1613
|
-
throw new Error(`Provider ${request.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
1614
|
-
}
|
|
1615
|
-
if (!providerConfig.clientId || !providerConfig.clientSecret) {
|
|
1616
|
-
throw new Error(`Missing OAuth credentials for ${request.provider}. Check your environment variables.`);
|
|
1617
|
-
}
|
|
1618
|
-
const url = new URL("/oauth/authorize", this.serverUrl);
|
|
1619
|
-
url.searchParams.set("provider", request.provider);
|
|
1620
|
-
url.searchParams.set("client_id", providerConfig.clientId);
|
|
1621
|
-
url.searchParams.set("client_secret", providerConfig.clientSecret);
|
|
1622
|
-
url.searchParams.set("scope", request.scopes.join(","));
|
|
1623
|
-
url.searchParams.set("state", request.state);
|
|
1624
|
-
url.searchParams.set("code_challenge", request.codeChallenge);
|
|
1625
|
-
url.searchParams.set("code_challenge_method", request.codeChallengeMethod);
|
|
1626
|
-
const redirectUri = request.redirectUri || providerConfig.redirectUri;
|
|
1627
|
-
if (redirectUri) {
|
|
1628
|
-
url.searchParams.set("redirect_uri", redirectUri);
|
|
1629
|
-
}
|
|
1630
|
-
const response = await fetch(url.toString(), {
|
|
1631
|
-
method: "GET",
|
|
1632
|
-
headers: this.getHeaders()
|
|
1633
|
-
});
|
|
1634
|
-
if (!response.ok) {
|
|
1635
|
-
const error = await response.text();
|
|
1636
|
-
throw new Error(`MCP server failed to generate authorization URL: ${error}`);
|
|
1637
|
-
}
|
|
1638
|
-
const data = await response.json();
|
|
1639
|
-
return data;
|
|
1640
|
-
}
|
|
1641
|
-
async handleCallback(request) {
|
|
1642
|
-
const providerConfig = this.config.providers[request.provider];
|
|
1643
|
-
if (!providerConfig) {
|
|
1644
|
-
throw new Error(`Provider ${request.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
1645
|
-
}
|
|
1646
|
-
if (!providerConfig.clientId || !providerConfig.clientSecret) {
|
|
1647
|
-
throw new Error(`Missing OAuth credentials for ${request.provider}. Check your environment variables.`);
|
|
1648
|
-
}
|
|
1649
|
-
const url = new URL("/oauth/callback", this.serverUrl);
|
|
1650
|
-
const response = await fetch(url.toString(), {
|
|
1651
|
-
method: "POST",
|
|
1652
|
-
headers: this.getHeaders({
|
|
1653
|
-
"Content-Type": "application/json"
|
|
1654
|
-
}),
|
|
1655
|
-
body: JSON.stringify({
|
|
1656
|
-
provider: request.provider,
|
|
1657
|
-
code: request.code,
|
|
1658
|
-
code_verifier: request.codeVerifier,
|
|
1659
|
-
state: request.state,
|
|
1660
|
-
client_id: providerConfig.clientId,
|
|
1661
|
-
client_secret: providerConfig.clientSecret,
|
|
1662
|
-
redirect_uri: providerConfig.redirectUri
|
|
1663
|
-
})
|
|
1664
|
-
});
|
|
1665
|
-
if (!response.ok) {
|
|
1666
|
-
const error = await response.text();
|
|
1667
|
-
throw new Error(`MCP server failed to exchange authorization code: ${error}`);
|
|
1668
|
-
}
|
|
1669
|
-
const data = await response.json();
|
|
1670
|
-
return data;
|
|
1671
|
-
}
|
|
1672
|
-
async handleStatus(provider, accessToken) {
|
|
1673
|
-
const url = new URL("/oauth/status", this.serverUrl);
|
|
1674
|
-
url.searchParams.set("provider", provider);
|
|
1675
|
-
const response = await fetch(url.toString(), {
|
|
1676
|
-
method: "GET",
|
|
1677
|
-
headers: this.getHeaders({
|
|
1678
|
-
Authorization: `Bearer ${accessToken}`
|
|
1679
|
-
})
|
|
1680
|
-
});
|
|
1681
|
-
if (!response.ok) {
|
|
1682
|
-
if (response.status === 401) {
|
|
1683
|
-
return {
|
|
1684
|
-
authorized: false
|
|
1685
|
-
};
|
|
1686
|
-
}
|
|
1687
|
-
const error = await response.text();
|
|
1688
|
-
throw new Error(`MCP server failed to check authorization status: ${error}`);
|
|
1689
|
-
}
|
|
1690
|
-
const data = await response.json();
|
|
1691
|
-
return data;
|
|
1692
|
-
}
|
|
1693
|
-
async handleDisconnect(request, accessToken) {
|
|
1694
|
-
if (!accessToken) {
|
|
1695
|
-
throw new Error("No access token provided. Cannot disconnect provider.");
|
|
1696
|
-
}
|
|
1697
|
-
const url = new URL("/oauth/disconnect", this.serverUrl);
|
|
1698
|
-
const response = await fetch(url.toString(), {
|
|
1699
|
-
method: "POST",
|
|
1700
|
-
headers: this.getHeaders({
|
|
1701
|
-
"Content-Type": "application/json",
|
|
1702
|
-
Authorization: `Bearer ${accessToken}`
|
|
1703
|
-
}),
|
|
1704
|
-
body: JSON.stringify({
|
|
1705
|
-
provider: request.provider
|
|
1706
|
-
})
|
|
1707
|
-
});
|
|
1708
|
-
if (!response.ok) {
|
|
1709
|
-
const error = await response.text();
|
|
1710
|
-
throw new Error(`MCP server failed to disconnect provider: ${error}`);
|
|
1711
|
-
}
|
|
1712
|
-
const data = await response.json();
|
|
1713
|
-
return data;
|
|
1714
|
-
}
|
|
1715
|
-
async handleToolCall(request, authHeader) {
|
|
1716
|
-
const url = new URL("/tools/call", this.serverUrl);
|
|
1717
|
-
const headers = this.getHeaders({
|
|
1718
|
-
"Content-Type": "application/json"
|
|
1719
|
-
});
|
|
1720
|
-
if (authHeader && authHeader.startsWith("Bearer ")) {
|
|
1721
|
-
headers["Authorization"] = authHeader;
|
|
1722
|
-
}
|
|
1723
|
-
const jsonRpcRequest = {
|
|
1724
|
-
jsonrpc: "2.0",
|
|
1725
|
-
id: Date.now() + Math.random(),
|
|
1726
|
-
method: "tools/call",
|
|
1727
|
-
params: {
|
|
1728
|
-
name: request.name,
|
|
1729
|
-
arguments: request.arguments || {}
|
|
1730
|
-
}
|
|
1731
|
-
};
|
|
1732
|
-
const response = await fetch(url.toString(), {
|
|
1733
|
-
method: "POST",
|
|
1734
|
-
headers,
|
|
1735
|
-
body: JSON.stringify(jsonRpcRequest)
|
|
1736
|
-
});
|
|
1737
|
-
if (!response.ok) {
|
|
1738
|
-
const error = await response.text();
|
|
1739
|
-
throw new Error(`MCP server failed to execute tool call: ${error}`);
|
|
1740
|
-
}
|
|
1741
|
-
const jsonRpcResponse = await response.json();
|
|
1742
|
-
if (jsonRpcResponse.error) {
|
|
1743
|
-
const error = new Error(jsonRpcResponse.error.message || "Tool call failed");
|
|
1744
|
-
error.code = jsonRpcResponse.error.code;
|
|
1745
|
-
error.data = jsonRpcResponse.error.data;
|
|
1746
|
-
throw error;
|
|
1747
|
-
}
|
|
1748
|
-
return jsonRpcResponse.result;
|
|
1749
|
-
}
|
|
1750
|
-
}
|
|
1751
|
-
|
|
1752
1756
|
// src/adapters/nextjs.ts
|
|
1753
1757
|
function createNextOAuthHandler(config) {
|
|
1754
1758
|
const handler = new OAuthHandler(config);
|
|
@@ -2165,7 +2169,23 @@ function createMCPServer(config) {
|
|
|
2165
2169
|
if (segments.length === 2 && segments[0] !== "oauth") {
|
|
2166
2170
|
return Response.json({ error: `Invalid route: /${segments.join("/")}` }, { status: 404 });
|
|
2167
2171
|
}
|
|
2168
|
-
if (segments.length === 1 && segments[0] === "mcp") {
|
|
2172
|
+
if (segments.length === 1 && segments[0] === "mcp" && method === "POST") {
|
|
2173
|
+
try {
|
|
2174
|
+
const body = await request.json();
|
|
2175
|
+
const authHeader = request.headers.get("authorization");
|
|
2176
|
+
const { OAuthHandler: OAuthHandler2 } = await Promise.resolve().then(() => exports_base_handler);
|
|
2177
|
+
const oauthHandler = new OAuthHandler2({
|
|
2178
|
+
providers,
|
|
2179
|
+
serverUrl: config.serverUrl,
|
|
2180
|
+
apiKey: config.apiKey
|
|
2181
|
+
});
|
|
2182
|
+
const result = await oauthHandler.handleToolCall(body, authHeader);
|
|
2183
|
+
return Response.json(result);
|
|
2184
|
+
} catch (error) {
|
|
2185
|
+
console.error("[MCP Tool Call] Error:", error);
|
|
2186
|
+
return Response.json({ error: error.message || "Failed to execute tool call" }, { status: error.statusCode || 500 });
|
|
2187
|
+
}
|
|
2188
|
+
}
|
|
2169
2189
|
}
|
|
2170
2190
|
if (method === "GET" && action === "callback") {
|
|
2171
2191
|
const url = new URL(request.url);
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA8CpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,eAAe,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,EACnE,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|