integrate-sdk 0.3.1 → 0.3.3
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.d.ts +17 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/{src/index.js → index.js} +174 -147
- package/dist/oauth.d.ts +19 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +18 -5
- package/dist/server.d.ts +5 -48
- package/dist/server.d.ts.map +1 -1
- package/dist/{src/server.js → server.js} +179 -185
- package/dist/src/adapters/auto-routes.d.ts.map +1 -0
- package/dist/src/adapters/base-handler.d.ts.map +1 -0
- package/dist/src/adapters/nextjs.d.ts.map +1 -0
- package/dist/src/adapters/tanstack-start.d.ts.map +1 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/config/types.d.ts.map +1 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/integrations/vercel-ai.d.ts.map +1 -0
- package/dist/src/oauth/manager.d.ts.map +1 -0
- package/dist/src/oauth/pkce.d.ts.map +1 -0
- package/dist/src/oauth/types.d.ts.map +1 -0
- package/dist/src/oauth/window-manager.d.ts.map +1 -0
- package/dist/src/plugins/generic.d.ts.map +1 -0
- package/dist/src/plugins/github-client.d.ts.map +1 -0
- package/dist/src/plugins/github.d.ts.map +1 -0
- package/dist/src/plugins/gmail-client.d.ts.map +1 -0
- package/dist/src/plugins/gmail.d.ts.map +1 -0
- package/dist/src/plugins/server-client.d.ts.map +1 -0
- package/dist/src/plugins/types.d.ts.map +1 -0
- package/dist/src/protocol/jsonrpc.d.ts.map +1 -0
- package/dist/src/protocol/messages.d.ts.map +1 -0
- package/dist/src/server.d.ts +54 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/transport/http-session.d.ts.map +1 -0
- package/dist/src/transport/http-stream.d.ts.map +1 -0
- package/dist/src/utils/naming.d.ts.map +1 -0
- package/index.ts +21 -0
- package/package.json +3 -2
- package/dist/adapters/auto-routes.d.ts.map +0 -1
- package/dist/adapters/base-handler.d.ts.map +0 -1
- package/dist/adapters/nextjs.d.ts.map +0 -1
- package/dist/adapters/tanstack-start.d.ts.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/config/types.d.ts.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/integrations/vercel-ai.d.ts.map +0 -1
- package/dist/oauth/manager.d.ts.map +0 -1
- package/dist/oauth/pkce.d.ts.map +0 -1
- package/dist/oauth/types.d.ts.map +0 -1
- package/dist/oauth/window-manager.d.ts.map +0 -1
- package/dist/plugins/generic.d.ts.map +0 -1
- package/dist/plugins/github-client.d.ts.map +0 -1
- package/dist/plugins/github.d.ts.map +0 -1
- package/dist/plugins/gmail-client.d.ts.map +0 -1
- package/dist/plugins/gmail.d.ts.map +0 -1
- package/dist/plugins/server-client.d.ts.map +0 -1
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/protocol/jsonrpc.d.ts.map +0 -1
- package/dist/protocol/messages.d.ts.map +0 -1
- package/dist/transport/http-session.d.ts.map +0 -1
- package/dist/transport/http-stream.d.ts.map +0 -1
- package/dist/utils/naming.d.ts.map +0 -1
- /package/dist/{adapters → src/adapters}/auto-routes.d.ts +0 -0
- /package/dist/{adapters → src/adapters}/base-handler.d.ts +0 -0
- /package/dist/{adapters → src/adapters}/nextjs.d.ts +0 -0
- /package/dist/{adapters → src/adapters}/tanstack-start.d.ts +0 -0
- /package/dist/{client.d.ts → src/client.d.ts} +0 -0
- /package/dist/{config → src/config}/types.d.ts +0 -0
- /package/dist/{errors.d.ts → src/errors.d.ts} +0 -0
- /package/dist/{integrations → src/integrations}/vercel-ai.d.ts +0 -0
- /package/dist/{oauth → src/oauth}/manager.d.ts +0 -0
- /package/dist/{oauth → src/oauth}/pkce.d.ts +0 -0
- /package/dist/{oauth → src/oauth}/types.d.ts +0 -0
- /package/dist/{oauth → src/oauth}/window-manager.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/generic.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/github-client.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/github.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/gmail-client.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/gmail.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/server-client.d.ts +0 -0
- /package/dist/{plugins → src/plugins}/types.d.ts +0 -0
- /package/dist/{protocol → src/protocol}/jsonrpc.d.ts +0 -0
- /package/dist/{protocol → src/protocol}/messages.d.ts +0 -0
- /package/dist/{transport → src/transport}/http-session.d.ts +0 -0
- /package/dist/{transport → src/transport}/http-stream.d.ts +0 -0
- /package/dist/{utils → src/utils}/naming.d.ts +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,31 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Integrate SDK
|
|
3
|
-
*
|
|
2
|
+
* Integrate SDK - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Client-side SDK for MCP with plugin-based configuration
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { createMCPClient, githubPlugin } from 'integrate-sdk';
|
|
9
|
+
*
|
|
10
|
+
* const client = createMCPClient({
|
|
11
|
+
* plugins: [
|
|
12
|
+
* githubPlugin({
|
|
13
|
+
* scopes: ['repo', 'user'],
|
|
14
|
+
* }),
|
|
15
|
+
* ],
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
4
18
|
*/
|
|
5
|
-
export
|
|
6
|
-
export type { ToolInvocationOptions } from "./client.js";
|
|
7
|
-
export { OAuthManager } from "./oauth/manager.js";
|
|
8
|
-
export { OAuthWindowManager, sendCallbackToOpener } from "./oauth/window-manager.js";
|
|
9
|
-
export { generateCodeVerifier, generateCodeChallenge, generateState } from "./oauth/pkce.js";
|
|
10
|
-
export type { OAuthFlowConfig, PopupOptions, AuthStatus, PendingAuth, AuthorizationUrlResponse, OAuthCallbackResponse, OAuthCallbackParams, } from "./oauth/types.js";
|
|
11
|
-
export { OAuthHandler } from "./adapters/base-handler.js";
|
|
12
|
-
export type { OAuthHandlerConfig, AuthorizeRequest, AuthorizeResponse, CallbackRequest, CallbackResponse, StatusResponse, } from "./adapters/base-handler.js";
|
|
13
|
-
export { createNextOAuthHandler } from "./adapters/nextjs.js";
|
|
14
|
-
export { createTanStackOAuthHandler } from "./adapters/tanstack-start.js";
|
|
15
|
-
export type { MCPClientConfig, ReauthContext, ReauthHandler } from "./config/types.js";
|
|
16
|
-
export { IntegrateSDKError, AuthenticationError, AuthorizationError, TokenExpiredError, ConnectionError, ToolCallError, isAuthError, isTokenExpiredError, isAuthorizationError, parseServerError, } from "./errors.js";
|
|
17
|
-
export type { MCPPlugin, OAuthConfig, ExtractPluginIds, ExtractPluginTools, } from "./plugins/types.js";
|
|
18
|
-
export { githubPlugin } from "./plugins/github.js";
|
|
19
|
-
export type { GitHubPluginConfig, GitHubTools, GitHubPluginClient } from "./plugins/github.js";
|
|
20
|
-
export { gmailPlugin } from "./plugins/gmail.js";
|
|
21
|
-
export type { GmailPluginConfig, GmailTools, GmailPluginClient } from "./plugins/gmail.js";
|
|
22
|
-
export type { ServerPluginClient } from "./plugins/server-client.js";
|
|
23
|
-
export { genericOAuthPlugin, createSimplePlugin, } from "./plugins/generic.js";
|
|
24
|
-
export type { GenericOAuthPluginConfig } from "./plugins/generic.js";
|
|
25
|
-
export { convertMCPToolToVercelAI, convertMCPToolsToVercelAI, getVercelAITools, } from "./integrations/vercel-ai.js";
|
|
26
|
-
export type { VercelAITool } from "./integrations/vercel-ai.js";
|
|
27
|
-
export type { JSONRPCRequest, JSONRPCResponse, JSONRPCSuccessResponse, JSONRPCErrorResponse, JSONRPCNotification, MCPTool, MCPToolsListResponse, MCPToolCallParams, MCPToolCallResponse, MCPInitializeParams, MCPInitializeResponse, } from "./protocol/messages.js";
|
|
28
|
-
export { MCPMethod } from "./protocol/messages.js";
|
|
29
|
-
export { HttpSessionTransport } from "./transport/http-session.js";
|
|
30
|
-
export type { MessageHandler, HttpSessionTransportOptions, } from "./transport/http-session.js";
|
|
19
|
+
export * from './src/index.js';
|
|
31
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,cAAc,gBAAgB,CAAC"}
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
6
|
+
var __toCommonJS = (from) => {
|
|
7
|
+
var entry = __moduleCache.get(from), desc;
|
|
8
|
+
if (entry)
|
|
9
|
+
return entry;
|
|
10
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
}));
|
|
16
|
+
__moduleCache.set(from, entry);
|
|
17
|
+
return entry;
|
|
18
|
+
};
|
|
2
19
|
var __export = (target, all) => {
|
|
3
20
|
for (var name in all)
|
|
4
21
|
__defProp(target, name, {
|
|
@@ -148,6 +165,160 @@ var init_errors = __esm(() => {
|
|
|
148
165
|
};
|
|
149
166
|
});
|
|
150
167
|
|
|
168
|
+
// src/adapters/base-handler.ts
|
|
169
|
+
class OAuthHandler {
|
|
170
|
+
config;
|
|
171
|
+
serverUrl = MCP_SERVER_URL2;
|
|
172
|
+
constructor(config) {
|
|
173
|
+
this.config = config;
|
|
174
|
+
}
|
|
175
|
+
async handleAuthorize(request) {
|
|
176
|
+
const providerConfig = this.config.providers[request.provider];
|
|
177
|
+
if (!providerConfig) {
|
|
178
|
+
throw new Error(`Provider ${request.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
179
|
+
}
|
|
180
|
+
if (!providerConfig.clientId || !providerConfig.clientSecret) {
|
|
181
|
+
throw new Error(`Missing OAuth credentials for ${request.provider}. Check your environment variables.`);
|
|
182
|
+
}
|
|
183
|
+
const url = new URL("/oauth/authorize", this.serverUrl);
|
|
184
|
+
url.searchParams.set("provider", request.provider);
|
|
185
|
+
url.searchParams.set("client_id", providerConfig.clientId);
|
|
186
|
+
url.searchParams.set("client_secret", providerConfig.clientSecret);
|
|
187
|
+
url.searchParams.set("scope", request.scopes.join(","));
|
|
188
|
+
url.searchParams.set("state", request.state);
|
|
189
|
+
url.searchParams.set("code_challenge", request.codeChallenge);
|
|
190
|
+
url.searchParams.set("code_challenge_method", request.codeChallengeMethod);
|
|
191
|
+
const redirectUri = request.redirectUri || providerConfig.redirectUri;
|
|
192
|
+
if (redirectUri) {
|
|
193
|
+
url.searchParams.set("redirect_uri", redirectUri);
|
|
194
|
+
}
|
|
195
|
+
const response = await fetch(url.toString(), {
|
|
196
|
+
method: "GET"
|
|
197
|
+
});
|
|
198
|
+
if (!response.ok) {
|
|
199
|
+
const error = await response.text();
|
|
200
|
+
throw new Error(`MCP server failed to generate authorization URL: ${error}`);
|
|
201
|
+
}
|
|
202
|
+
const data = await response.json();
|
|
203
|
+
return data;
|
|
204
|
+
}
|
|
205
|
+
async handleCallback(request) {
|
|
206
|
+
const url = new URL("/oauth/callback", this.serverUrl);
|
|
207
|
+
const response = await fetch(url.toString(), {
|
|
208
|
+
method: "POST",
|
|
209
|
+
headers: {
|
|
210
|
+
"Content-Type": "application/json"
|
|
211
|
+
},
|
|
212
|
+
body: JSON.stringify({
|
|
213
|
+
provider: request.provider,
|
|
214
|
+
code: request.code,
|
|
215
|
+
code_verifier: request.codeVerifier,
|
|
216
|
+
state: request.state
|
|
217
|
+
})
|
|
218
|
+
});
|
|
219
|
+
if (!response.ok) {
|
|
220
|
+
const error = await response.text();
|
|
221
|
+
throw new Error(`MCP server failed to exchange authorization code: ${error}`);
|
|
222
|
+
}
|
|
223
|
+
const data = await response.json();
|
|
224
|
+
return data;
|
|
225
|
+
}
|
|
226
|
+
async handleStatus(provider, sessionToken) {
|
|
227
|
+
const url = new URL("/oauth/status", this.serverUrl);
|
|
228
|
+
url.searchParams.set("provider", provider);
|
|
229
|
+
const response = await fetch(url.toString(), {
|
|
230
|
+
method: "GET",
|
|
231
|
+
headers: {
|
|
232
|
+
"X-Session-Token": sessionToken
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
if (!response.ok) {
|
|
236
|
+
if (response.status === 401) {
|
|
237
|
+
return {
|
|
238
|
+
authorized: false,
|
|
239
|
+
provider
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
const error = await response.text();
|
|
243
|
+
throw new Error(`MCP server failed to check authorization status: ${error}`);
|
|
244
|
+
}
|
|
245
|
+
const data = await response.json();
|
|
246
|
+
return data;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
var MCP_SERVER_URL2 = "https://mcp.integrate.dev/api/v1/mcp";
|
|
250
|
+
|
|
251
|
+
// src/adapters/nextjs.ts
|
|
252
|
+
var exports_nextjs = {};
|
|
253
|
+
__export(exports_nextjs, {
|
|
254
|
+
createNextOAuthHandler: () => createNextOAuthHandler
|
|
255
|
+
});
|
|
256
|
+
function createNextOAuthHandler(config) {
|
|
257
|
+
const handler = new OAuthHandler(config);
|
|
258
|
+
const handlers = {
|
|
259
|
+
async authorize(req) {
|
|
260
|
+
try {
|
|
261
|
+
const body = await req.json();
|
|
262
|
+
const result = await handler.handleAuthorize(body);
|
|
263
|
+
return Response.json(result);
|
|
264
|
+
} catch (error) {
|
|
265
|
+
console.error("[OAuth Authorize] Error:", error);
|
|
266
|
+
return Response.json({ error: error.message || "Failed to get authorization URL" }, { status: 500 });
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
async callback(req) {
|
|
270
|
+
try {
|
|
271
|
+
const body = await req.json();
|
|
272
|
+
const result = await handler.handleCallback(body);
|
|
273
|
+
return Response.json(result);
|
|
274
|
+
} catch (error) {
|
|
275
|
+
console.error("[OAuth Callback] Error:", error);
|
|
276
|
+
return Response.json({ error: error.message || "Failed to exchange authorization code" }, { status: 500 });
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
async status(req) {
|
|
280
|
+
try {
|
|
281
|
+
const provider = req.nextUrl.searchParams.get("provider");
|
|
282
|
+
const sessionToken = req.headers.get("x-session-token");
|
|
283
|
+
if (!provider) {
|
|
284
|
+
return Response.json({ error: "Missing provider query parameter" }, { status: 400 });
|
|
285
|
+
}
|
|
286
|
+
if (!sessionToken) {
|
|
287
|
+
return Response.json({ error: "Missing X-Session-Token header" }, { status: 400 });
|
|
288
|
+
}
|
|
289
|
+
const result = await handler.handleStatus(provider, sessionToken);
|
|
290
|
+
return Response.json(result);
|
|
291
|
+
} catch (error) {
|
|
292
|
+
console.error("[OAuth Status] Error:", error);
|
|
293
|
+
return Response.json({ error: error.message || "Failed to check authorization status" }, { status: 500 });
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
createRoutes() {
|
|
297
|
+
return {
|
|
298
|
+
async POST(req, context) {
|
|
299
|
+
const action = context.params.action;
|
|
300
|
+
if (action === "authorize") {
|
|
301
|
+
return handlers.authorize(req);
|
|
302
|
+
}
|
|
303
|
+
if (action === "callback") {
|
|
304
|
+
return handlers.callback(req);
|
|
305
|
+
}
|
|
306
|
+
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
307
|
+
},
|
|
308
|
+
async GET(req, context) {
|
|
309
|
+
const action = context.params.action;
|
|
310
|
+
if (action === "status") {
|
|
311
|
+
return handlers.status(req);
|
|
312
|
+
}
|
|
313
|
+
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
return handlers;
|
|
319
|
+
}
|
|
320
|
+
var init_nextjs = () => {};
|
|
321
|
+
|
|
151
322
|
// src/protocol/jsonrpc.ts
|
|
152
323
|
function parseMessage(message) {
|
|
153
324
|
try {
|
|
@@ -1154,154 +1325,10 @@ async function clearClientCache() {
|
|
|
1154
1325
|
}
|
|
1155
1326
|
}));
|
|
1156
1327
|
}
|
|
1157
|
-
// src/adapters/base-handler.ts
|
|
1158
|
-
var MCP_SERVER_URL2 = "https://mcp.integrate.dev/api/v1/mcp";
|
|
1159
1328
|
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
constructor(config) {
|
|
1164
|
-
this.config = config;
|
|
1165
|
-
}
|
|
1166
|
-
async handleAuthorize(request) {
|
|
1167
|
-
const providerConfig = this.config.providers[request.provider];
|
|
1168
|
-
if (!providerConfig) {
|
|
1169
|
-
throw new Error(`Provider ${request.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
1170
|
-
}
|
|
1171
|
-
if (!providerConfig.clientId || !providerConfig.clientSecret) {
|
|
1172
|
-
throw new Error(`Missing OAuth credentials for ${request.provider}. Check your environment variables.`);
|
|
1173
|
-
}
|
|
1174
|
-
const url = new URL("/oauth/authorize", this.serverUrl);
|
|
1175
|
-
url.searchParams.set("provider", request.provider);
|
|
1176
|
-
url.searchParams.set("client_id", providerConfig.clientId);
|
|
1177
|
-
url.searchParams.set("client_secret", providerConfig.clientSecret);
|
|
1178
|
-
url.searchParams.set("scope", request.scopes.join(","));
|
|
1179
|
-
url.searchParams.set("state", request.state);
|
|
1180
|
-
url.searchParams.set("code_challenge", request.codeChallenge);
|
|
1181
|
-
url.searchParams.set("code_challenge_method", request.codeChallengeMethod);
|
|
1182
|
-
const redirectUri = request.redirectUri || providerConfig.redirectUri;
|
|
1183
|
-
if (redirectUri) {
|
|
1184
|
-
url.searchParams.set("redirect_uri", redirectUri);
|
|
1185
|
-
}
|
|
1186
|
-
const response = await fetch(url.toString(), {
|
|
1187
|
-
method: "GET"
|
|
1188
|
-
});
|
|
1189
|
-
if (!response.ok) {
|
|
1190
|
-
const error = await response.text();
|
|
1191
|
-
throw new Error(`MCP server failed to generate authorization URL: ${error}`);
|
|
1192
|
-
}
|
|
1193
|
-
const data = await response.json();
|
|
1194
|
-
return data;
|
|
1195
|
-
}
|
|
1196
|
-
async handleCallback(request) {
|
|
1197
|
-
const url = new URL("/oauth/callback", this.serverUrl);
|
|
1198
|
-
const response = await fetch(url.toString(), {
|
|
1199
|
-
method: "POST",
|
|
1200
|
-
headers: {
|
|
1201
|
-
"Content-Type": "application/json"
|
|
1202
|
-
},
|
|
1203
|
-
body: JSON.stringify({
|
|
1204
|
-
provider: request.provider,
|
|
1205
|
-
code: request.code,
|
|
1206
|
-
code_verifier: request.codeVerifier,
|
|
1207
|
-
state: request.state
|
|
1208
|
-
})
|
|
1209
|
-
});
|
|
1210
|
-
if (!response.ok) {
|
|
1211
|
-
const error = await response.text();
|
|
1212
|
-
throw new Error(`MCP server failed to exchange authorization code: ${error}`);
|
|
1213
|
-
}
|
|
1214
|
-
const data = await response.json();
|
|
1215
|
-
return data;
|
|
1216
|
-
}
|
|
1217
|
-
async handleStatus(provider, sessionToken) {
|
|
1218
|
-
const url = new URL("/oauth/status", this.serverUrl);
|
|
1219
|
-
url.searchParams.set("provider", provider);
|
|
1220
|
-
const response = await fetch(url.toString(), {
|
|
1221
|
-
method: "GET",
|
|
1222
|
-
headers: {
|
|
1223
|
-
"X-Session-Token": sessionToken
|
|
1224
|
-
}
|
|
1225
|
-
});
|
|
1226
|
-
if (!response.ok) {
|
|
1227
|
-
if (response.status === 401) {
|
|
1228
|
-
return {
|
|
1229
|
-
authorized: false,
|
|
1230
|
-
provider
|
|
1231
|
-
};
|
|
1232
|
-
}
|
|
1233
|
-
const error = await response.text();
|
|
1234
|
-
throw new Error(`MCP server failed to check authorization status: ${error}`);
|
|
1235
|
-
}
|
|
1236
|
-
const data = await response.json();
|
|
1237
|
-
return data;
|
|
1238
|
-
}
|
|
1239
|
-
}
|
|
1240
|
-
// src/adapters/nextjs.ts
|
|
1241
|
-
function createNextOAuthHandler(config) {
|
|
1242
|
-
const handler = new OAuthHandler(config);
|
|
1243
|
-
const handlers = {
|
|
1244
|
-
async authorize(req) {
|
|
1245
|
-
try {
|
|
1246
|
-
const body = await req.json();
|
|
1247
|
-
const result = await handler.handleAuthorize(body);
|
|
1248
|
-
return Response.json(result);
|
|
1249
|
-
} catch (error) {
|
|
1250
|
-
console.error("[OAuth Authorize] Error:", error);
|
|
1251
|
-
return Response.json({ error: error.message || "Failed to get authorization URL" }, { status: 500 });
|
|
1252
|
-
}
|
|
1253
|
-
},
|
|
1254
|
-
async callback(req) {
|
|
1255
|
-
try {
|
|
1256
|
-
const body = await req.json();
|
|
1257
|
-
const result = await handler.handleCallback(body);
|
|
1258
|
-
return Response.json(result);
|
|
1259
|
-
} catch (error) {
|
|
1260
|
-
console.error("[OAuth Callback] Error:", error);
|
|
1261
|
-
return Response.json({ error: error.message || "Failed to exchange authorization code" }, { status: 500 });
|
|
1262
|
-
}
|
|
1263
|
-
},
|
|
1264
|
-
async status(req) {
|
|
1265
|
-
try {
|
|
1266
|
-
const provider = req.nextUrl.searchParams.get("provider");
|
|
1267
|
-
const sessionToken = req.headers.get("x-session-token");
|
|
1268
|
-
if (!provider) {
|
|
1269
|
-
return Response.json({ error: "Missing provider query parameter" }, { status: 400 });
|
|
1270
|
-
}
|
|
1271
|
-
if (!sessionToken) {
|
|
1272
|
-
return Response.json({ error: "Missing X-Session-Token header" }, { status: 400 });
|
|
1273
|
-
}
|
|
1274
|
-
const result = await handler.handleStatus(provider, sessionToken);
|
|
1275
|
-
return Response.json(result);
|
|
1276
|
-
} catch (error) {
|
|
1277
|
-
console.error("[OAuth Status] Error:", error);
|
|
1278
|
-
return Response.json({ error: error.message || "Failed to check authorization status" }, { status: 500 });
|
|
1279
|
-
}
|
|
1280
|
-
},
|
|
1281
|
-
createRoutes() {
|
|
1282
|
-
return {
|
|
1283
|
-
async POST(req, context) {
|
|
1284
|
-
const action = context.params.action;
|
|
1285
|
-
if (action === "authorize") {
|
|
1286
|
-
return handlers.authorize(req);
|
|
1287
|
-
}
|
|
1288
|
-
if (action === "callback") {
|
|
1289
|
-
return handlers.callback(req);
|
|
1290
|
-
}
|
|
1291
|
-
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
1292
|
-
},
|
|
1293
|
-
async GET(req, context) {
|
|
1294
|
-
const action = context.params.action;
|
|
1295
|
-
if (action === "status") {
|
|
1296
|
-
return handlers.status(req);
|
|
1297
|
-
}
|
|
1298
|
-
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
1299
|
-
}
|
|
1300
|
-
};
|
|
1301
|
-
}
|
|
1302
|
-
};
|
|
1303
|
-
return handlers;
|
|
1304
|
-
}
|
|
1329
|
+
// src/index.ts
|
|
1330
|
+
init_nextjs();
|
|
1331
|
+
|
|
1305
1332
|
// src/adapters/tanstack-start.ts
|
|
1306
1333
|
function createTanStackOAuthHandler(config) {
|
|
1307
1334
|
const handler = new OAuthHandler(config);
|
package/dist/oauth.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Routes Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Import this in your framework's route file to automatically handle OAuth
|
|
5
|
+
*
|
|
6
|
+
* @example Next.js
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // app/api/integrate/oauth/[action]/route.ts
|
|
9
|
+
* export * from 'integrate-sdk/oauth';
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @example TanStack Start
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // app/routes/api/integrate/oauth/[action].ts
|
|
15
|
+
* export * from 'integrate-sdk/oauth';
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export { POST, GET } from './src/adapters/auto-routes.js';
|
|
19
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/oauth.js
CHANGED
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
6
|
+
var __toCommonJS = (from) => {
|
|
7
|
+
var entry = __moduleCache.get(from), desc;
|
|
8
|
+
if (entry)
|
|
9
|
+
return entry;
|
|
10
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
}));
|
|
16
|
+
__moduleCache.set(from, entry);
|
|
17
|
+
return entry;
|
|
18
|
+
};
|
|
2
19
|
var __export = (target, all) => {
|
|
3
20
|
for (var name in all)
|
|
4
21
|
__defProp(target, name, {
|
|
@@ -11,8 +28,6 @@ var __export = (target, all) => {
|
|
|
11
28
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
12
29
|
|
|
13
30
|
// src/adapters/base-handler.ts
|
|
14
|
-
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
15
|
-
|
|
16
31
|
class OAuthHandler {
|
|
17
32
|
config;
|
|
18
33
|
serverUrl = MCP_SERVER_URL;
|
|
@@ -93,12 +108,10 @@ class OAuthHandler {
|
|
|
93
108
|
return data;
|
|
94
109
|
}
|
|
95
110
|
}
|
|
111
|
+
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
96
112
|
|
|
97
113
|
// src/adapters/auto-routes.ts
|
|
98
114
|
var globalOAuthConfig = null;
|
|
99
|
-
function setGlobalOAuthConfig(config) {
|
|
100
|
-
globalOAuthConfig = config;
|
|
101
|
-
}
|
|
102
115
|
async function POST(req, context) {
|
|
103
116
|
if (!globalOAuthConfig) {
|
|
104
117
|
throw new Error("OAuth configuration not found. Did you configure oauthProviders in createMCPClient?");
|
package/dist/server.d.ts
CHANGED
|
@@ -1,54 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Server-Side SDK
|
|
3
|
-
*
|
|
4
|
-
*/
|
|
5
|
-
import { MCPClient } from './client.js';
|
|
6
|
-
import type { MCPClientConfig } from './config/types.js';
|
|
7
|
-
import type { MCPPlugin } from './plugins/types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Create MCP Server instance with OAuth secrets
|
|
10
|
-
*
|
|
11
|
-
* This is for SERVER-SIDE ONLY - includes OAuth secrets from environment variables.
|
|
12
|
-
* Use this in your server configuration file (e.g., lib/integrate-server.ts)
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* // lib/integrate-server.ts (server-side only!)
|
|
17
|
-
* import { createMCPServer, githubPlugin, gmailPlugin } from 'integrate-sdk/server';
|
|
18
|
-
*
|
|
19
|
-
* export const { client: serverClient, handlers } = createMCPServer({
|
|
20
|
-
* plugins: [
|
|
21
|
-
* githubPlugin({
|
|
22
|
-
* clientId: process.env.GITHUB_CLIENT_ID!,
|
|
23
|
-
* clientSecret: process.env.GITHUB_CLIENT_SECRET!,
|
|
24
|
-
* scopes: ['repo', 'user'],
|
|
25
|
-
* }),
|
|
26
|
-
* gmailPlugin({
|
|
27
|
-
* clientId: process.env.GMAIL_CLIENT_ID!,
|
|
28
|
-
* clientSecret: process.env.GMAIL_CLIENT_SECRET!,
|
|
29
|
-
* scopes: ['gmail.readonly'],
|
|
30
|
-
* }),
|
|
31
|
-
* ],
|
|
32
|
-
* });
|
|
33
|
-
* ```
|
|
2
|
+
* Server-Side SDK Entry Point
|
|
3
|
+
* Re-exports from src/server.ts for convenience
|
|
34
4
|
*
|
|
35
|
-
*
|
|
5
|
+
* Use this import for server-side configuration with OAuth secrets:
|
|
36
6
|
* ```typescript
|
|
37
|
-
*
|
|
38
|
-
* export * from 'integrate-sdk/oauth';
|
|
7
|
+
* import { createMCPServer, githubPlugin } from 'integrate-sdk/server';
|
|
39
8
|
* ```
|
|
40
9
|
*/
|
|
41
|
-
export
|
|
42
|
-
/** Server-side MCP client instance */
|
|
43
|
-
client: MCPClient<TPlugins>;
|
|
44
|
-
/** OAuth route handlers (use by importing 'integrate-sdk/oauth' in your route file) */
|
|
45
|
-
handlers: {
|
|
46
|
-
info: string;
|
|
47
|
-
};
|
|
48
|
-
};
|
|
49
|
-
export type { MCPPlugin } from './plugins/types.js';
|
|
50
|
-
export type { MCPClientConfig } from './config/types.js';
|
|
51
|
-
export { githubPlugin } from './plugins/github.js';
|
|
52
|
-
export { gmailPlugin } from './plugins/gmail.js';
|
|
53
|
-
export { genericOAuthPlugin, createSimplePlugin } from './plugins/generic.js';
|
|
10
|
+
export * from './src/server.js';
|
|
54
11
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,iBAAiB,CAAC"}
|