integrate-sdk 0.9.0-dev.0 → 0.9.2-dev.0
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.d.ts.map +1 -1
- package/dist/adapters/auto-routes.js +94 -0
- package/dist/adapters/base-handler.d.ts +30 -0
- package/dist/adapters/base-handler.d.ts.map +1 -1
- package/dist/adapters/index.js +90 -0
- package/dist/adapters/nextjs.d.ts +17 -0
- package/dist/adapters/nextjs.d.ts.map +1 -1
- package/dist/adapters/nextjs.js +90 -0
- package/dist/adapters/node.js +90 -0
- package/dist/adapters/svelte-kit.js +90 -0
- package/dist/adapters/tanstack-start.js +90 -0
- package/dist/index.js +90 -0
- package/dist/oauth.js +94 -0
- package/dist/server.js +90 -0
- package/dist/src/adapters/auto-routes.d.ts.map +1 -1
- package/dist/src/adapters/base-handler.d.ts +30 -0
- package/dist/src/adapters/base-handler.d.ts.map +1 -1
- package/dist/src/adapters/nextjs.d.ts +17 -0
- package/dist/src/adapters/nextjs.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-routes.d.ts","sourceRoot":"","sources":["../../../src/adapters/auto-routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,kBAAkB,GAAG,IAAI,CAEhE;AAED;;;;;;;;;;;;;;;;;GAiBG;AAkBH;;;GAGG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvC,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"auto-routes.d.ts","sourceRoot":"","sources":["../../../src/adapters/auto-routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,kBAAkB,GAAG,IAAI,CAEhE;AAED;;;;;;;;;;;;;;;;;GAiBG;AAkBH;;;GAGG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvC,OAAO,CAAC,GAAG,CAAC,CAoEd;AAED;;;GAGG;AACH,wBAAsB,GAAG,CACvB,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvC,OAAO,CAAC,GAAG,CAAC,CAoCd"}
|
|
@@ -11826,6 +11826,77 @@ class OAuthHandler {
|
|
|
11826
11826
|
const data = await response.json();
|
|
11827
11827
|
return data;
|
|
11828
11828
|
}
|
|
11829
|
+
async handleRefresh(request) {
|
|
11830
|
+
let webRequest;
|
|
11831
|
+
let refreshRequest;
|
|
11832
|
+
if (request instanceof Request) {
|
|
11833
|
+
webRequest = request;
|
|
11834
|
+
refreshRequest = await request.json();
|
|
11835
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
11836
|
+
refreshRequest = await request.json();
|
|
11837
|
+
} else {
|
|
11838
|
+
refreshRequest = request;
|
|
11839
|
+
}
|
|
11840
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
11841
|
+
if (!providerConfig) {
|
|
11842
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
11843
|
+
}
|
|
11844
|
+
let context;
|
|
11845
|
+
if (webRequest) {
|
|
11846
|
+
try {
|
|
11847
|
+
if (this.config.getSessionContext) {
|
|
11848
|
+
context = await this.config.getSessionContext(webRequest);
|
|
11849
|
+
}
|
|
11850
|
+
if (!context || !context.userId) {
|
|
11851
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
11852
|
+
context = await detectSessionContext2(webRequest);
|
|
11853
|
+
}
|
|
11854
|
+
} catch (error) {}
|
|
11855
|
+
}
|
|
11856
|
+
const body = {
|
|
11857
|
+
provider: refreshRequest.provider,
|
|
11858
|
+
refresh_token: refreshRequest.refreshToken,
|
|
11859
|
+
client_id: providerConfig.clientId
|
|
11860
|
+
};
|
|
11861
|
+
if (providerConfig.clientSecret) {
|
|
11862
|
+
body.client_secret = providerConfig.clientSecret;
|
|
11863
|
+
}
|
|
11864
|
+
if (providerConfig.config?.subdomain) {
|
|
11865
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
11866
|
+
}
|
|
11867
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
11868
|
+
const response = await fetch(url.toString(), {
|
|
11869
|
+
method: "POST",
|
|
11870
|
+
headers: this.getHeaders({
|
|
11871
|
+
"Content-Type": "application/json"
|
|
11872
|
+
}),
|
|
11873
|
+
body: JSON.stringify(body)
|
|
11874
|
+
});
|
|
11875
|
+
if (!response.ok) {
|
|
11876
|
+
const error = await response.text();
|
|
11877
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
11878
|
+
}
|
|
11879
|
+
const data = await response.json();
|
|
11880
|
+
const result = data;
|
|
11881
|
+
if (this.config.setProviderToken) {
|
|
11882
|
+
try {
|
|
11883
|
+
const tokenData = {
|
|
11884
|
+
accessToken: result.accessToken,
|
|
11885
|
+
refreshToken: result.refreshToken,
|
|
11886
|
+
tokenType: result.tokenType,
|
|
11887
|
+
expiresIn: result.expiresIn,
|
|
11888
|
+
expiresAt: result.expiresAt,
|
|
11889
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
11890
|
+
};
|
|
11891
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
11892
|
+
if (email) {
|
|
11893
|
+
tokenData.email = email;
|
|
11894
|
+
}
|
|
11895
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
11896
|
+
} catch (error) {}
|
|
11897
|
+
}
|
|
11898
|
+
return result;
|
|
11899
|
+
}
|
|
11829
11900
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
11830
11901
|
const url = this.serverUrl;
|
|
11831
11902
|
const headers = this.getHeaders({
|
|
@@ -11956,6 +12027,19 @@ function createNextOAuthHandler(config) {
|
|
|
11956
12027
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
11957
12028
|
}
|
|
11958
12029
|
},
|
|
12030
|
+
async refresh(req) {
|
|
12031
|
+
try {
|
|
12032
|
+
const result = await handler.handleRefresh(req);
|
|
12033
|
+
const response = Response.json(result);
|
|
12034
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
12035
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
12036
|
+
}
|
|
12037
|
+
return response;
|
|
12038
|
+
} catch (error) {
|
|
12039
|
+
logger33.error("[OAuth Refresh] Error:", error);
|
|
12040
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
12041
|
+
}
|
|
12042
|
+
},
|
|
11959
12043
|
createRoutes() {
|
|
11960
12044
|
return {
|
|
11961
12045
|
async POST(req, context) {
|
|
@@ -11970,6 +12054,9 @@ function createNextOAuthHandler(config) {
|
|
|
11970
12054
|
if (action === "disconnect") {
|
|
11971
12055
|
return handlers.disconnect(req);
|
|
11972
12056
|
}
|
|
12057
|
+
if (action === "refresh") {
|
|
12058
|
+
return handlers.refresh(req);
|
|
12059
|
+
}
|
|
11973
12060
|
if (action === "mcp") {
|
|
11974
12061
|
return handlers.mcp(req);
|
|
11975
12062
|
}
|
|
@@ -12015,6 +12102,9 @@ function createNextOAuthHandler(config) {
|
|
|
12015
12102
|
if (action === "disconnect") {
|
|
12016
12103
|
return handlers.disconnect(req);
|
|
12017
12104
|
}
|
|
12105
|
+
if (action === "refresh") {
|
|
12106
|
+
return handlers.refresh(req);
|
|
12107
|
+
}
|
|
12018
12108
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
12019
12109
|
}
|
|
12020
12110
|
if (segments.length === 1 && segments[0] === "mcp") {
|
|
@@ -12138,6 +12228,10 @@ async function POST2(req, context) {
|
|
|
12138
12228
|
const result = await handler.handleDisconnect({ provider: body.provider }, accessToken, req);
|
|
12139
12229
|
return createSuccessResponse(result);
|
|
12140
12230
|
}
|
|
12231
|
+
if (action === "refresh") {
|
|
12232
|
+
const result = await handler.handleRefresh(req);
|
|
12233
|
+
return createSuccessResponse(result);
|
|
12234
|
+
}
|
|
12141
12235
|
return createErrorResponse(`Unknown action: ${action}`, 404);
|
|
12142
12236
|
} catch (error) {
|
|
12143
12237
|
logger34.error(`[OAuth ${action}] Error:`, error);
|
|
@@ -179,6 +179,25 @@ export interface DisconnectResponse {
|
|
|
179
179
|
success: boolean;
|
|
180
180
|
provider: string;
|
|
181
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Request body for token refresh endpoint
|
|
184
|
+
*/
|
|
185
|
+
export interface RefreshRequest {
|
|
186
|
+
provider: string;
|
|
187
|
+
refreshToken: string;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Response from token refresh endpoint
|
|
191
|
+
*/
|
|
192
|
+
export interface RefreshResponse {
|
|
193
|
+
accessToken: string;
|
|
194
|
+
refreshToken?: string;
|
|
195
|
+
tokenType: string;
|
|
196
|
+
expiresIn: number;
|
|
197
|
+
expiresAt?: string;
|
|
198
|
+
scopes?: string[];
|
|
199
|
+
email?: string;
|
|
200
|
+
}
|
|
182
201
|
/**
|
|
183
202
|
* Request body for MCP tool call endpoint
|
|
184
203
|
*/
|
|
@@ -285,6 +304,17 @@ export declare class OAuthHandler {
|
|
|
285
304
|
* @throws Error if MCP server request fails
|
|
286
305
|
*/
|
|
287
306
|
handleDisconnect(request: DisconnectRequest, accessToken: string, webRequest?: Request): Promise<DisconnectResponse>;
|
|
307
|
+
/**
|
|
308
|
+
* Handle token refresh
|
|
309
|
+
* Refreshes an expired access token via the MCP server's /oauth/refresh endpoint
|
|
310
|
+
*
|
|
311
|
+
* @param request - Refresh request with provider and refreshToken, OR full Web Request object
|
|
312
|
+
* @returns Refreshed token data
|
|
313
|
+
*
|
|
314
|
+
* @throws Error if provider is not configured
|
|
315
|
+
* @throws Error if MCP server request fails
|
|
316
|
+
*/
|
|
317
|
+
handleRefresh(request: RefreshRequest | Request): Promise<RefreshResponse>;
|
|
288
318
|
/**
|
|
289
319
|
* Handle MCP tool call
|
|
290
320
|
* Forwards tool call requests to MCP server with API key and provider token
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../../src/adapters/base-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../../src/adapters/base-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -11826,6 +11826,77 @@ class OAuthHandler {
|
|
|
11826
11826
|
const data = await response.json();
|
|
11827
11827
|
return data;
|
|
11828
11828
|
}
|
|
11829
|
+
async handleRefresh(request) {
|
|
11830
|
+
let webRequest;
|
|
11831
|
+
let refreshRequest;
|
|
11832
|
+
if (request instanceof Request) {
|
|
11833
|
+
webRequest = request;
|
|
11834
|
+
refreshRequest = await request.json();
|
|
11835
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
11836
|
+
refreshRequest = await request.json();
|
|
11837
|
+
} else {
|
|
11838
|
+
refreshRequest = request;
|
|
11839
|
+
}
|
|
11840
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
11841
|
+
if (!providerConfig) {
|
|
11842
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
11843
|
+
}
|
|
11844
|
+
let context;
|
|
11845
|
+
if (webRequest) {
|
|
11846
|
+
try {
|
|
11847
|
+
if (this.config.getSessionContext) {
|
|
11848
|
+
context = await this.config.getSessionContext(webRequest);
|
|
11849
|
+
}
|
|
11850
|
+
if (!context || !context.userId) {
|
|
11851
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
11852
|
+
context = await detectSessionContext2(webRequest);
|
|
11853
|
+
}
|
|
11854
|
+
} catch (error) {}
|
|
11855
|
+
}
|
|
11856
|
+
const body = {
|
|
11857
|
+
provider: refreshRequest.provider,
|
|
11858
|
+
refresh_token: refreshRequest.refreshToken,
|
|
11859
|
+
client_id: providerConfig.clientId
|
|
11860
|
+
};
|
|
11861
|
+
if (providerConfig.clientSecret) {
|
|
11862
|
+
body.client_secret = providerConfig.clientSecret;
|
|
11863
|
+
}
|
|
11864
|
+
if (providerConfig.config?.subdomain) {
|
|
11865
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
11866
|
+
}
|
|
11867
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
11868
|
+
const response = await fetch(url.toString(), {
|
|
11869
|
+
method: "POST",
|
|
11870
|
+
headers: this.getHeaders({
|
|
11871
|
+
"Content-Type": "application/json"
|
|
11872
|
+
}),
|
|
11873
|
+
body: JSON.stringify(body)
|
|
11874
|
+
});
|
|
11875
|
+
if (!response.ok) {
|
|
11876
|
+
const error = await response.text();
|
|
11877
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
11878
|
+
}
|
|
11879
|
+
const data = await response.json();
|
|
11880
|
+
const result = data;
|
|
11881
|
+
if (this.config.setProviderToken) {
|
|
11882
|
+
try {
|
|
11883
|
+
const tokenData = {
|
|
11884
|
+
accessToken: result.accessToken,
|
|
11885
|
+
refreshToken: result.refreshToken,
|
|
11886
|
+
tokenType: result.tokenType,
|
|
11887
|
+
expiresIn: result.expiresIn,
|
|
11888
|
+
expiresAt: result.expiresAt,
|
|
11889
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
11890
|
+
};
|
|
11891
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
11892
|
+
if (email) {
|
|
11893
|
+
tokenData.email = email;
|
|
11894
|
+
}
|
|
11895
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
11896
|
+
} catch (error) {}
|
|
11897
|
+
}
|
|
11898
|
+
return result;
|
|
11899
|
+
}
|
|
11829
11900
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
11830
11901
|
const url = this.serverUrl;
|
|
11831
11902
|
const headers = this.getHeaders({
|
|
@@ -11956,6 +12027,19 @@ function createNextOAuthHandler(config) {
|
|
|
11956
12027
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
11957
12028
|
}
|
|
11958
12029
|
},
|
|
12030
|
+
async refresh(req) {
|
|
12031
|
+
try {
|
|
12032
|
+
const result = await handler.handleRefresh(req);
|
|
12033
|
+
const response = Response.json(result);
|
|
12034
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
12035
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
12036
|
+
}
|
|
12037
|
+
return response;
|
|
12038
|
+
} catch (error) {
|
|
12039
|
+
logger33.error("[OAuth Refresh] Error:", error);
|
|
12040
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
12041
|
+
}
|
|
12042
|
+
},
|
|
11959
12043
|
createRoutes() {
|
|
11960
12044
|
return {
|
|
11961
12045
|
async POST(req, context) {
|
|
@@ -11970,6 +12054,9 @@ function createNextOAuthHandler(config) {
|
|
|
11970
12054
|
if (action === "disconnect") {
|
|
11971
12055
|
return handlers.disconnect(req);
|
|
11972
12056
|
}
|
|
12057
|
+
if (action === "refresh") {
|
|
12058
|
+
return handlers.refresh(req);
|
|
12059
|
+
}
|
|
11973
12060
|
if (action === "mcp") {
|
|
11974
12061
|
return handlers.mcp(req);
|
|
11975
12062
|
}
|
|
@@ -12015,6 +12102,9 @@ function createNextOAuthHandler(config) {
|
|
|
12015
12102
|
if (action === "disconnect") {
|
|
12016
12103
|
return handlers.disconnect(req);
|
|
12017
12104
|
}
|
|
12105
|
+
if (action === "refresh") {
|
|
12106
|
+
return handlers.refresh(req);
|
|
12107
|
+
}
|
|
12018
12108
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
12019
12109
|
}
|
|
12020
12110
|
if (segments.length === 1 && segments[0] === "mcp") {
|
|
@@ -218,6 +218,22 @@ export declare function createNextOAuthHandler(config: OAuthHandlerConfig): {
|
|
|
218
218
|
* ```
|
|
219
219
|
*/
|
|
220
220
|
disconnect(req: NextRequest): Promise<NextResponse>;
|
|
221
|
+
/**
|
|
222
|
+
* POST /api/integrate/oauth/refresh
|
|
223
|
+
*
|
|
224
|
+
* Refresh an expired access token via the MCP server
|
|
225
|
+
*
|
|
226
|
+
* Request body:
|
|
227
|
+
* ```json
|
|
228
|
+
* {
|
|
229
|
+
* "provider": "github",
|
|
230
|
+
* "refreshToken": "<stored-refresh-token>"
|
|
231
|
+
* }
|
|
232
|
+
* ```
|
|
233
|
+
*
|
|
234
|
+
* Response: Same shape as callback response (accessToken, refreshToken, etc.)
|
|
235
|
+
*/
|
|
236
|
+
refresh(req: NextRequest): Promise<NextResponse>;
|
|
221
237
|
/**
|
|
222
238
|
* Create unified route handlers for catch-all route
|
|
223
239
|
*
|
|
@@ -324,6 +340,7 @@ export declare function createNextOAuthHandler(config: OAuthHandlerConfig): {
|
|
|
324
340
|
* - GET /api/integrate/oauth/callback - Provider OAuth redirect
|
|
325
341
|
* - GET /api/integrate/oauth/status - Check authorization status
|
|
326
342
|
* - POST /api/integrate/oauth/disconnect - Disconnect provider
|
|
343
|
+
* - POST /api/integrate/oauth/refresh - Refresh expired token
|
|
327
344
|
* - POST /api/integrate/mcp - Execute MCP tool calls
|
|
328
345
|
*/
|
|
329
346
|
toNextJsHandler(redirectConfig?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU1E,KAAK,WAAW,GAAG,GAAG,CAAC;AACvB,KAAK,YAAY,GAAG,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;IAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;mBACkB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;kBACiB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;gBACe,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;oBACmB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;;QAGC;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU1E,KAAK,WAAW,GAAG,GAAG,CAAC;AACvB,KAAK,YAAY,GAAG,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;IAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;mBACkB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;kBACiB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;gBACe,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;oBACmB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD;;;;;;;;;;;;;;OAcG;iBACgB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAoBtD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;;QAGC;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;QA+BxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;;IAiB5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACY,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;qCAC8B;QAC/B,6DAA6D;QAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iEAAiE;QACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;QAKG;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;QA0CxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;;EAqG/B"}
|
package/dist/adapters/nextjs.js
CHANGED
|
@@ -11826,6 +11826,77 @@ class OAuthHandler {
|
|
|
11826
11826
|
const data = await response.json();
|
|
11827
11827
|
return data;
|
|
11828
11828
|
}
|
|
11829
|
+
async handleRefresh(request) {
|
|
11830
|
+
let webRequest;
|
|
11831
|
+
let refreshRequest;
|
|
11832
|
+
if (request instanceof Request) {
|
|
11833
|
+
webRequest = request;
|
|
11834
|
+
refreshRequest = await request.json();
|
|
11835
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
11836
|
+
refreshRequest = await request.json();
|
|
11837
|
+
} else {
|
|
11838
|
+
refreshRequest = request;
|
|
11839
|
+
}
|
|
11840
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
11841
|
+
if (!providerConfig) {
|
|
11842
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
11843
|
+
}
|
|
11844
|
+
let context;
|
|
11845
|
+
if (webRequest) {
|
|
11846
|
+
try {
|
|
11847
|
+
if (this.config.getSessionContext) {
|
|
11848
|
+
context = await this.config.getSessionContext(webRequest);
|
|
11849
|
+
}
|
|
11850
|
+
if (!context || !context.userId) {
|
|
11851
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
11852
|
+
context = await detectSessionContext2(webRequest);
|
|
11853
|
+
}
|
|
11854
|
+
} catch (error) {}
|
|
11855
|
+
}
|
|
11856
|
+
const body = {
|
|
11857
|
+
provider: refreshRequest.provider,
|
|
11858
|
+
refresh_token: refreshRequest.refreshToken,
|
|
11859
|
+
client_id: providerConfig.clientId
|
|
11860
|
+
};
|
|
11861
|
+
if (providerConfig.clientSecret) {
|
|
11862
|
+
body.client_secret = providerConfig.clientSecret;
|
|
11863
|
+
}
|
|
11864
|
+
if (providerConfig.config?.subdomain) {
|
|
11865
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
11866
|
+
}
|
|
11867
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
11868
|
+
const response = await fetch(url.toString(), {
|
|
11869
|
+
method: "POST",
|
|
11870
|
+
headers: this.getHeaders({
|
|
11871
|
+
"Content-Type": "application/json"
|
|
11872
|
+
}),
|
|
11873
|
+
body: JSON.stringify(body)
|
|
11874
|
+
});
|
|
11875
|
+
if (!response.ok) {
|
|
11876
|
+
const error = await response.text();
|
|
11877
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
11878
|
+
}
|
|
11879
|
+
const data = await response.json();
|
|
11880
|
+
const result = data;
|
|
11881
|
+
if (this.config.setProviderToken) {
|
|
11882
|
+
try {
|
|
11883
|
+
const tokenData = {
|
|
11884
|
+
accessToken: result.accessToken,
|
|
11885
|
+
refreshToken: result.refreshToken,
|
|
11886
|
+
tokenType: result.tokenType,
|
|
11887
|
+
expiresIn: result.expiresIn,
|
|
11888
|
+
expiresAt: result.expiresAt,
|
|
11889
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
11890
|
+
};
|
|
11891
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
11892
|
+
if (email) {
|
|
11893
|
+
tokenData.email = email;
|
|
11894
|
+
}
|
|
11895
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
11896
|
+
} catch (error) {}
|
|
11897
|
+
}
|
|
11898
|
+
return result;
|
|
11899
|
+
}
|
|
11829
11900
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
11830
11901
|
const url = this.serverUrl;
|
|
11831
11902
|
const headers = this.getHeaders({
|
|
@@ -11956,6 +12027,19 @@ function createNextOAuthHandler(config) {
|
|
|
11956
12027
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
11957
12028
|
}
|
|
11958
12029
|
},
|
|
12030
|
+
async refresh(req) {
|
|
12031
|
+
try {
|
|
12032
|
+
const result = await handler.handleRefresh(req);
|
|
12033
|
+
const response = Response.json(result);
|
|
12034
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
12035
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
12036
|
+
}
|
|
12037
|
+
return response;
|
|
12038
|
+
} catch (error) {
|
|
12039
|
+
logger33.error("[OAuth Refresh] Error:", error);
|
|
12040
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
12041
|
+
}
|
|
12042
|
+
},
|
|
11959
12043
|
createRoutes() {
|
|
11960
12044
|
return {
|
|
11961
12045
|
async POST(req, context) {
|
|
@@ -11970,6 +12054,9 @@ function createNextOAuthHandler(config) {
|
|
|
11970
12054
|
if (action === "disconnect") {
|
|
11971
12055
|
return handlers.disconnect(req);
|
|
11972
12056
|
}
|
|
12057
|
+
if (action === "refresh") {
|
|
12058
|
+
return handlers.refresh(req);
|
|
12059
|
+
}
|
|
11973
12060
|
if (action === "mcp") {
|
|
11974
12061
|
return handlers.mcp(req);
|
|
11975
12062
|
}
|
|
@@ -12015,6 +12102,9 @@ function createNextOAuthHandler(config) {
|
|
|
12015
12102
|
if (action === "disconnect") {
|
|
12016
12103
|
return handlers.disconnect(req);
|
|
12017
12104
|
}
|
|
12105
|
+
if (action === "refresh") {
|
|
12106
|
+
return handlers.refresh(req);
|
|
12107
|
+
}
|
|
12018
12108
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
12019
12109
|
}
|
|
12020
12110
|
if (segments.length === 1 && segments[0] === "mcp") {
|
package/dist/adapters/node.js
CHANGED
|
@@ -11826,6 +11826,77 @@ class OAuthHandler {
|
|
|
11826
11826
|
const data = await response.json();
|
|
11827
11827
|
return data;
|
|
11828
11828
|
}
|
|
11829
|
+
async handleRefresh(request) {
|
|
11830
|
+
let webRequest;
|
|
11831
|
+
let refreshRequest;
|
|
11832
|
+
if (request instanceof Request) {
|
|
11833
|
+
webRequest = request;
|
|
11834
|
+
refreshRequest = await request.json();
|
|
11835
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
11836
|
+
refreshRequest = await request.json();
|
|
11837
|
+
} else {
|
|
11838
|
+
refreshRequest = request;
|
|
11839
|
+
}
|
|
11840
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
11841
|
+
if (!providerConfig) {
|
|
11842
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
11843
|
+
}
|
|
11844
|
+
let context;
|
|
11845
|
+
if (webRequest) {
|
|
11846
|
+
try {
|
|
11847
|
+
if (this.config.getSessionContext) {
|
|
11848
|
+
context = await this.config.getSessionContext(webRequest);
|
|
11849
|
+
}
|
|
11850
|
+
if (!context || !context.userId) {
|
|
11851
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
11852
|
+
context = await detectSessionContext2(webRequest);
|
|
11853
|
+
}
|
|
11854
|
+
} catch (error) {}
|
|
11855
|
+
}
|
|
11856
|
+
const body = {
|
|
11857
|
+
provider: refreshRequest.provider,
|
|
11858
|
+
refresh_token: refreshRequest.refreshToken,
|
|
11859
|
+
client_id: providerConfig.clientId
|
|
11860
|
+
};
|
|
11861
|
+
if (providerConfig.clientSecret) {
|
|
11862
|
+
body.client_secret = providerConfig.clientSecret;
|
|
11863
|
+
}
|
|
11864
|
+
if (providerConfig.config?.subdomain) {
|
|
11865
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
11866
|
+
}
|
|
11867
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
11868
|
+
const response = await fetch(url.toString(), {
|
|
11869
|
+
method: "POST",
|
|
11870
|
+
headers: this.getHeaders({
|
|
11871
|
+
"Content-Type": "application/json"
|
|
11872
|
+
}),
|
|
11873
|
+
body: JSON.stringify(body)
|
|
11874
|
+
});
|
|
11875
|
+
if (!response.ok) {
|
|
11876
|
+
const error = await response.text();
|
|
11877
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
11878
|
+
}
|
|
11879
|
+
const data = await response.json();
|
|
11880
|
+
const result = data;
|
|
11881
|
+
if (this.config.setProviderToken) {
|
|
11882
|
+
try {
|
|
11883
|
+
const tokenData = {
|
|
11884
|
+
accessToken: result.accessToken,
|
|
11885
|
+
refreshToken: result.refreshToken,
|
|
11886
|
+
tokenType: result.tokenType,
|
|
11887
|
+
expiresIn: result.expiresIn,
|
|
11888
|
+
expiresAt: result.expiresAt,
|
|
11889
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
11890
|
+
};
|
|
11891
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
11892
|
+
if (email) {
|
|
11893
|
+
tokenData.email = email;
|
|
11894
|
+
}
|
|
11895
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
11896
|
+
} catch (error) {}
|
|
11897
|
+
}
|
|
11898
|
+
return result;
|
|
11899
|
+
}
|
|
11829
11900
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
11830
11901
|
const url = this.serverUrl;
|
|
11831
11902
|
const headers = this.getHeaders({
|
|
@@ -11956,6 +12027,19 @@ function createNextOAuthHandler(config) {
|
|
|
11956
12027
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
11957
12028
|
}
|
|
11958
12029
|
},
|
|
12030
|
+
async refresh(req) {
|
|
12031
|
+
try {
|
|
12032
|
+
const result = await handler.handleRefresh(req);
|
|
12033
|
+
const response = Response.json(result);
|
|
12034
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
12035
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
12036
|
+
}
|
|
12037
|
+
return response;
|
|
12038
|
+
} catch (error) {
|
|
12039
|
+
logger33.error("[OAuth Refresh] Error:", error);
|
|
12040
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
12041
|
+
}
|
|
12042
|
+
},
|
|
11959
12043
|
createRoutes() {
|
|
11960
12044
|
return {
|
|
11961
12045
|
async POST(req, context) {
|
|
@@ -11970,6 +12054,9 @@ function createNextOAuthHandler(config) {
|
|
|
11970
12054
|
if (action === "disconnect") {
|
|
11971
12055
|
return handlers.disconnect(req);
|
|
11972
12056
|
}
|
|
12057
|
+
if (action === "refresh") {
|
|
12058
|
+
return handlers.refresh(req);
|
|
12059
|
+
}
|
|
11973
12060
|
if (action === "mcp") {
|
|
11974
12061
|
return handlers.mcp(req);
|
|
11975
12062
|
}
|
|
@@ -12015,6 +12102,9 @@ function createNextOAuthHandler(config) {
|
|
|
12015
12102
|
if (action === "disconnect") {
|
|
12016
12103
|
return handlers.disconnect(req);
|
|
12017
12104
|
}
|
|
12105
|
+
if (action === "refresh") {
|
|
12106
|
+
return handlers.refresh(req);
|
|
12107
|
+
}
|
|
12018
12108
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
12019
12109
|
}
|
|
12020
12110
|
if (segments.length === 1 && segments[0] === "mcp") {
|
|
@@ -11826,6 +11826,77 @@ class OAuthHandler {
|
|
|
11826
11826
|
const data = await response.json();
|
|
11827
11827
|
return data;
|
|
11828
11828
|
}
|
|
11829
|
+
async handleRefresh(request) {
|
|
11830
|
+
let webRequest;
|
|
11831
|
+
let refreshRequest;
|
|
11832
|
+
if (request instanceof Request) {
|
|
11833
|
+
webRequest = request;
|
|
11834
|
+
refreshRequest = await request.json();
|
|
11835
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
11836
|
+
refreshRequest = await request.json();
|
|
11837
|
+
} else {
|
|
11838
|
+
refreshRequest = request;
|
|
11839
|
+
}
|
|
11840
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
11841
|
+
if (!providerConfig) {
|
|
11842
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
11843
|
+
}
|
|
11844
|
+
let context;
|
|
11845
|
+
if (webRequest) {
|
|
11846
|
+
try {
|
|
11847
|
+
if (this.config.getSessionContext) {
|
|
11848
|
+
context = await this.config.getSessionContext(webRequest);
|
|
11849
|
+
}
|
|
11850
|
+
if (!context || !context.userId) {
|
|
11851
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
11852
|
+
context = await detectSessionContext2(webRequest);
|
|
11853
|
+
}
|
|
11854
|
+
} catch (error) {}
|
|
11855
|
+
}
|
|
11856
|
+
const body = {
|
|
11857
|
+
provider: refreshRequest.provider,
|
|
11858
|
+
refresh_token: refreshRequest.refreshToken,
|
|
11859
|
+
client_id: providerConfig.clientId
|
|
11860
|
+
};
|
|
11861
|
+
if (providerConfig.clientSecret) {
|
|
11862
|
+
body.client_secret = providerConfig.clientSecret;
|
|
11863
|
+
}
|
|
11864
|
+
if (providerConfig.config?.subdomain) {
|
|
11865
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
11866
|
+
}
|
|
11867
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
11868
|
+
const response = await fetch(url.toString(), {
|
|
11869
|
+
method: "POST",
|
|
11870
|
+
headers: this.getHeaders({
|
|
11871
|
+
"Content-Type": "application/json"
|
|
11872
|
+
}),
|
|
11873
|
+
body: JSON.stringify(body)
|
|
11874
|
+
});
|
|
11875
|
+
if (!response.ok) {
|
|
11876
|
+
const error = await response.text();
|
|
11877
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
11878
|
+
}
|
|
11879
|
+
const data = await response.json();
|
|
11880
|
+
const result = data;
|
|
11881
|
+
if (this.config.setProviderToken) {
|
|
11882
|
+
try {
|
|
11883
|
+
const tokenData = {
|
|
11884
|
+
accessToken: result.accessToken,
|
|
11885
|
+
refreshToken: result.refreshToken,
|
|
11886
|
+
tokenType: result.tokenType,
|
|
11887
|
+
expiresIn: result.expiresIn,
|
|
11888
|
+
expiresAt: result.expiresAt,
|
|
11889
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
11890
|
+
};
|
|
11891
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
11892
|
+
if (email) {
|
|
11893
|
+
tokenData.email = email;
|
|
11894
|
+
}
|
|
11895
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
11896
|
+
} catch (error) {}
|
|
11897
|
+
}
|
|
11898
|
+
return result;
|
|
11899
|
+
}
|
|
11829
11900
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
11830
11901
|
const url = this.serverUrl;
|
|
11831
11902
|
const headers = this.getHeaders({
|
|
@@ -11956,6 +12027,19 @@ function createNextOAuthHandler(config) {
|
|
|
11956
12027
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
11957
12028
|
}
|
|
11958
12029
|
},
|
|
12030
|
+
async refresh(req) {
|
|
12031
|
+
try {
|
|
12032
|
+
const result = await handler.handleRefresh(req);
|
|
12033
|
+
const response = Response.json(result);
|
|
12034
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
12035
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
12036
|
+
}
|
|
12037
|
+
return response;
|
|
12038
|
+
} catch (error) {
|
|
12039
|
+
logger33.error("[OAuth Refresh] Error:", error);
|
|
12040
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
12041
|
+
}
|
|
12042
|
+
},
|
|
11959
12043
|
createRoutes() {
|
|
11960
12044
|
return {
|
|
11961
12045
|
async POST(req, context) {
|
|
@@ -11970,6 +12054,9 @@ function createNextOAuthHandler(config) {
|
|
|
11970
12054
|
if (action === "disconnect") {
|
|
11971
12055
|
return handlers.disconnect(req);
|
|
11972
12056
|
}
|
|
12057
|
+
if (action === "refresh") {
|
|
12058
|
+
return handlers.refresh(req);
|
|
12059
|
+
}
|
|
11973
12060
|
if (action === "mcp") {
|
|
11974
12061
|
return handlers.mcp(req);
|
|
11975
12062
|
}
|
|
@@ -12015,6 +12102,9 @@ function createNextOAuthHandler(config) {
|
|
|
12015
12102
|
if (action === "disconnect") {
|
|
12016
12103
|
return handlers.disconnect(req);
|
|
12017
12104
|
}
|
|
12105
|
+
if (action === "refresh") {
|
|
12106
|
+
return handlers.refresh(req);
|
|
12107
|
+
}
|
|
12018
12108
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
12019
12109
|
}
|
|
12020
12110
|
if (segments.length === 1 && segments[0] === "mcp") {
|
|
@@ -11826,6 +11826,77 @@ class OAuthHandler {
|
|
|
11826
11826
|
const data = await response.json();
|
|
11827
11827
|
return data;
|
|
11828
11828
|
}
|
|
11829
|
+
async handleRefresh(request) {
|
|
11830
|
+
let webRequest;
|
|
11831
|
+
let refreshRequest;
|
|
11832
|
+
if (request instanceof Request) {
|
|
11833
|
+
webRequest = request;
|
|
11834
|
+
refreshRequest = await request.json();
|
|
11835
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
11836
|
+
refreshRequest = await request.json();
|
|
11837
|
+
} else {
|
|
11838
|
+
refreshRequest = request;
|
|
11839
|
+
}
|
|
11840
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
11841
|
+
if (!providerConfig) {
|
|
11842
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
11843
|
+
}
|
|
11844
|
+
let context;
|
|
11845
|
+
if (webRequest) {
|
|
11846
|
+
try {
|
|
11847
|
+
if (this.config.getSessionContext) {
|
|
11848
|
+
context = await this.config.getSessionContext(webRequest);
|
|
11849
|
+
}
|
|
11850
|
+
if (!context || !context.userId) {
|
|
11851
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
11852
|
+
context = await detectSessionContext2(webRequest);
|
|
11853
|
+
}
|
|
11854
|
+
} catch (error) {}
|
|
11855
|
+
}
|
|
11856
|
+
const body = {
|
|
11857
|
+
provider: refreshRequest.provider,
|
|
11858
|
+
refresh_token: refreshRequest.refreshToken,
|
|
11859
|
+
client_id: providerConfig.clientId
|
|
11860
|
+
};
|
|
11861
|
+
if (providerConfig.clientSecret) {
|
|
11862
|
+
body.client_secret = providerConfig.clientSecret;
|
|
11863
|
+
}
|
|
11864
|
+
if (providerConfig.config?.subdomain) {
|
|
11865
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
11866
|
+
}
|
|
11867
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
11868
|
+
const response = await fetch(url.toString(), {
|
|
11869
|
+
method: "POST",
|
|
11870
|
+
headers: this.getHeaders({
|
|
11871
|
+
"Content-Type": "application/json"
|
|
11872
|
+
}),
|
|
11873
|
+
body: JSON.stringify(body)
|
|
11874
|
+
});
|
|
11875
|
+
if (!response.ok) {
|
|
11876
|
+
const error = await response.text();
|
|
11877
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
11878
|
+
}
|
|
11879
|
+
const data = await response.json();
|
|
11880
|
+
const result = data;
|
|
11881
|
+
if (this.config.setProviderToken) {
|
|
11882
|
+
try {
|
|
11883
|
+
const tokenData = {
|
|
11884
|
+
accessToken: result.accessToken,
|
|
11885
|
+
refreshToken: result.refreshToken,
|
|
11886
|
+
tokenType: result.tokenType,
|
|
11887
|
+
expiresIn: result.expiresIn,
|
|
11888
|
+
expiresAt: result.expiresAt,
|
|
11889
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
11890
|
+
};
|
|
11891
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
11892
|
+
if (email) {
|
|
11893
|
+
tokenData.email = email;
|
|
11894
|
+
}
|
|
11895
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
11896
|
+
} catch (error) {}
|
|
11897
|
+
}
|
|
11898
|
+
return result;
|
|
11899
|
+
}
|
|
11829
11900
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
11830
11901
|
const url = this.serverUrl;
|
|
11831
11902
|
const headers = this.getHeaders({
|
|
@@ -11956,6 +12027,19 @@ function createNextOAuthHandler(config) {
|
|
|
11956
12027
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
11957
12028
|
}
|
|
11958
12029
|
},
|
|
12030
|
+
async refresh(req) {
|
|
12031
|
+
try {
|
|
12032
|
+
const result = await handler.handleRefresh(req);
|
|
12033
|
+
const response = Response.json(result);
|
|
12034
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
12035
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
12036
|
+
}
|
|
12037
|
+
return response;
|
|
12038
|
+
} catch (error) {
|
|
12039
|
+
logger33.error("[OAuth Refresh] Error:", error);
|
|
12040
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
12041
|
+
}
|
|
12042
|
+
},
|
|
11959
12043
|
createRoutes() {
|
|
11960
12044
|
return {
|
|
11961
12045
|
async POST(req, context) {
|
|
@@ -11970,6 +12054,9 @@ function createNextOAuthHandler(config) {
|
|
|
11970
12054
|
if (action === "disconnect") {
|
|
11971
12055
|
return handlers.disconnect(req);
|
|
11972
12056
|
}
|
|
12057
|
+
if (action === "refresh") {
|
|
12058
|
+
return handlers.refresh(req);
|
|
12059
|
+
}
|
|
11973
12060
|
if (action === "mcp") {
|
|
11974
12061
|
return handlers.mcp(req);
|
|
11975
12062
|
}
|
|
@@ -12015,6 +12102,9 @@ function createNextOAuthHandler(config) {
|
|
|
12015
12102
|
if (action === "disconnect") {
|
|
12016
12103
|
return handlers.disconnect(req);
|
|
12017
12104
|
}
|
|
12105
|
+
if (action === "refresh") {
|
|
12106
|
+
return handlers.refresh(req);
|
|
12107
|
+
}
|
|
12018
12108
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
12019
12109
|
}
|
|
12020
12110
|
if (segments.length === 1 && segments[0] === "mcp") {
|
package/dist/index.js
CHANGED
|
@@ -2817,6 +2817,19 @@ function createNextOAuthHandler(config) {
|
|
|
2817
2817
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
2818
2818
|
}
|
|
2819
2819
|
},
|
|
2820
|
+
async refresh(req) {
|
|
2821
|
+
try {
|
|
2822
|
+
const result = await handler.handleRefresh(req);
|
|
2823
|
+
const response = Response.json(result);
|
|
2824
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
2825
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
2826
|
+
}
|
|
2827
|
+
return response;
|
|
2828
|
+
} catch (error) {
|
|
2829
|
+
logger6.error("[OAuth Refresh] Error:", error);
|
|
2830
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
2831
|
+
}
|
|
2832
|
+
},
|
|
2820
2833
|
createRoutes() {
|
|
2821
2834
|
return {
|
|
2822
2835
|
async POST(req, context) {
|
|
@@ -2831,6 +2844,9 @@ function createNextOAuthHandler(config) {
|
|
|
2831
2844
|
if (action === "disconnect") {
|
|
2832
2845
|
return handlers.disconnect(req);
|
|
2833
2846
|
}
|
|
2847
|
+
if (action === "refresh") {
|
|
2848
|
+
return handlers.refresh(req);
|
|
2849
|
+
}
|
|
2834
2850
|
if (action === "mcp") {
|
|
2835
2851
|
return handlers.mcp(req);
|
|
2836
2852
|
}
|
|
@@ -2876,6 +2892,9 @@ function createNextOAuthHandler(config) {
|
|
|
2876
2892
|
if (action === "disconnect") {
|
|
2877
2893
|
return handlers.disconnect(req);
|
|
2878
2894
|
}
|
|
2895
|
+
if (action === "refresh") {
|
|
2896
|
+
return handlers.refresh(req);
|
|
2897
|
+
}
|
|
2879
2898
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
2880
2899
|
}
|
|
2881
2900
|
if (segments.length === 1 && segments[0] === "mcp") {
|
|
@@ -12205,6 +12224,77 @@ class OAuthHandler {
|
|
|
12205
12224
|
const data = await response.json();
|
|
12206
12225
|
return data;
|
|
12207
12226
|
}
|
|
12227
|
+
async handleRefresh(request) {
|
|
12228
|
+
let webRequest;
|
|
12229
|
+
let refreshRequest;
|
|
12230
|
+
if (request instanceof Request) {
|
|
12231
|
+
webRequest = request;
|
|
12232
|
+
refreshRequest = await request.json();
|
|
12233
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
12234
|
+
refreshRequest = await request.json();
|
|
12235
|
+
} else {
|
|
12236
|
+
refreshRequest = request;
|
|
12237
|
+
}
|
|
12238
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
12239
|
+
if (!providerConfig) {
|
|
12240
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
12241
|
+
}
|
|
12242
|
+
let context;
|
|
12243
|
+
if (webRequest) {
|
|
12244
|
+
try {
|
|
12245
|
+
if (this.config.getSessionContext) {
|
|
12246
|
+
context = await this.config.getSessionContext(webRequest);
|
|
12247
|
+
}
|
|
12248
|
+
if (!context || !context.userId) {
|
|
12249
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
12250
|
+
context = await detectSessionContext2(webRequest);
|
|
12251
|
+
}
|
|
12252
|
+
} catch (error) {}
|
|
12253
|
+
}
|
|
12254
|
+
const body = {
|
|
12255
|
+
provider: refreshRequest.provider,
|
|
12256
|
+
refresh_token: refreshRequest.refreshToken,
|
|
12257
|
+
client_id: providerConfig.clientId
|
|
12258
|
+
};
|
|
12259
|
+
if (providerConfig.clientSecret) {
|
|
12260
|
+
body.client_secret = providerConfig.clientSecret;
|
|
12261
|
+
}
|
|
12262
|
+
if (providerConfig.config?.subdomain) {
|
|
12263
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
12264
|
+
}
|
|
12265
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
12266
|
+
const response = await fetch(url.toString(), {
|
|
12267
|
+
method: "POST",
|
|
12268
|
+
headers: this.getHeaders({
|
|
12269
|
+
"Content-Type": "application/json"
|
|
12270
|
+
}),
|
|
12271
|
+
body: JSON.stringify(body)
|
|
12272
|
+
});
|
|
12273
|
+
if (!response.ok) {
|
|
12274
|
+
const error = await response.text();
|
|
12275
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
12276
|
+
}
|
|
12277
|
+
const data = await response.json();
|
|
12278
|
+
const result = data;
|
|
12279
|
+
if (this.config.setProviderToken) {
|
|
12280
|
+
try {
|
|
12281
|
+
const tokenData = {
|
|
12282
|
+
accessToken: result.accessToken,
|
|
12283
|
+
refreshToken: result.refreshToken,
|
|
12284
|
+
tokenType: result.tokenType,
|
|
12285
|
+
expiresIn: result.expiresIn,
|
|
12286
|
+
expiresAt: result.expiresAt,
|
|
12287
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
12288
|
+
};
|
|
12289
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
12290
|
+
if (email) {
|
|
12291
|
+
tokenData.email = email;
|
|
12292
|
+
}
|
|
12293
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
12294
|
+
} catch (error) {}
|
|
12295
|
+
}
|
|
12296
|
+
return result;
|
|
12297
|
+
}
|
|
12208
12298
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
12209
12299
|
const url = this.serverUrl;
|
|
12210
12300
|
const headers = this.getHeaders({
|
package/dist/oauth.js
CHANGED
|
@@ -2639,6 +2639,19 @@ function createNextOAuthHandler(config) {
|
|
|
2639
2639
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
2640
2640
|
}
|
|
2641
2641
|
},
|
|
2642
|
+
async refresh(req) {
|
|
2643
|
+
try {
|
|
2644
|
+
const result = await handler.handleRefresh(req);
|
|
2645
|
+
const response = Response.json(result);
|
|
2646
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
2647
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
2648
|
+
}
|
|
2649
|
+
return response;
|
|
2650
|
+
} catch (error) {
|
|
2651
|
+
logger6.error("[OAuth Refresh] Error:", error);
|
|
2652
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
2653
|
+
}
|
|
2654
|
+
},
|
|
2642
2655
|
createRoutes() {
|
|
2643
2656
|
return {
|
|
2644
2657
|
async POST(req, context) {
|
|
@@ -2653,6 +2666,9 @@ function createNextOAuthHandler(config) {
|
|
|
2653
2666
|
if (action === "disconnect") {
|
|
2654
2667
|
return handlers.disconnect(req);
|
|
2655
2668
|
}
|
|
2669
|
+
if (action === "refresh") {
|
|
2670
|
+
return handlers.refresh(req);
|
|
2671
|
+
}
|
|
2656
2672
|
if (action === "mcp") {
|
|
2657
2673
|
return handlers.mcp(req);
|
|
2658
2674
|
}
|
|
@@ -2698,6 +2714,9 @@ function createNextOAuthHandler(config) {
|
|
|
2698
2714
|
if (action === "disconnect") {
|
|
2699
2715
|
return handlers.disconnect(req);
|
|
2700
2716
|
}
|
|
2717
|
+
if (action === "refresh") {
|
|
2718
|
+
return handlers.refresh(req);
|
|
2719
|
+
}
|
|
2701
2720
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
2702
2721
|
}
|
|
2703
2722
|
if (segments.length === 1 && segments[0] === "mcp") {
|
|
@@ -12039,6 +12058,77 @@ class OAuthHandler {
|
|
|
12039
12058
|
const data = await response.json();
|
|
12040
12059
|
return data;
|
|
12041
12060
|
}
|
|
12061
|
+
async handleRefresh(request) {
|
|
12062
|
+
let webRequest;
|
|
12063
|
+
let refreshRequest;
|
|
12064
|
+
if (request instanceof Request) {
|
|
12065
|
+
webRequest = request;
|
|
12066
|
+
refreshRequest = await request.json();
|
|
12067
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
12068
|
+
refreshRequest = await request.json();
|
|
12069
|
+
} else {
|
|
12070
|
+
refreshRequest = request;
|
|
12071
|
+
}
|
|
12072
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
12073
|
+
if (!providerConfig) {
|
|
12074
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
12075
|
+
}
|
|
12076
|
+
let context;
|
|
12077
|
+
if (webRequest) {
|
|
12078
|
+
try {
|
|
12079
|
+
if (this.config.getSessionContext) {
|
|
12080
|
+
context = await this.config.getSessionContext(webRequest);
|
|
12081
|
+
}
|
|
12082
|
+
if (!context || !context.userId) {
|
|
12083
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
12084
|
+
context = await detectSessionContext2(webRequest);
|
|
12085
|
+
}
|
|
12086
|
+
} catch (error) {}
|
|
12087
|
+
}
|
|
12088
|
+
const body = {
|
|
12089
|
+
provider: refreshRequest.provider,
|
|
12090
|
+
refresh_token: refreshRequest.refreshToken,
|
|
12091
|
+
client_id: providerConfig.clientId
|
|
12092
|
+
};
|
|
12093
|
+
if (providerConfig.clientSecret) {
|
|
12094
|
+
body.client_secret = providerConfig.clientSecret;
|
|
12095
|
+
}
|
|
12096
|
+
if (providerConfig.config?.subdomain) {
|
|
12097
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
12098
|
+
}
|
|
12099
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
12100
|
+
const response = await fetch(url.toString(), {
|
|
12101
|
+
method: "POST",
|
|
12102
|
+
headers: this.getHeaders({
|
|
12103
|
+
"Content-Type": "application/json"
|
|
12104
|
+
}),
|
|
12105
|
+
body: JSON.stringify(body)
|
|
12106
|
+
});
|
|
12107
|
+
if (!response.ok) {
|
|
12108
|
+
const error = await response.text();
|
|
12109
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
12110
|
+
}
|
|
12111
|
+
const data = await response.json();
|
|
12112
|
+
const result = data;
|
|
12113
|
+
if (this.config.setProviderToken) {
|
|
12114
|
+
try {
|
|
12115
|
+
const tokenData = {
|
|
12116
|
+
accessToken: result.accessToken,
|
|
12117
|
+
refreshToken: result.refreshToken,
|
|
12118
|
+
tokenType: result.tokenType,
|
|
12119
|
+
expiresIn: result.expiresIn,
|
|
12120
|
+
expiresAt: result.expiresAt,
|
|
12121
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
12122
|
+
};
|
|
12123
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
12124
|
+
if (email) {
|
|
12125
|
+
tokenData.email = email;
|
|
12126
|
+
}
|
|
12127
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
12128
|
+
} catch (error) {}
|
|
12129
|
+
}
|
|
12130
|
+
return result;
|
|
12131
|
+
}
|
|
12042
12132
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
12043
12133
|
const url = this.serverUrl;
|
|
12044
12134
|
const headers = this.getHeaders({
|
|
@@ -12132,6 +12222,10 @@ async function POST2(req, context) {
|
|
|
12132
12222
|
const result = await handler.handleDisconnect({ provider: body.provider }, accessToken, req);
|
|
12133
12223
|
return createSuccessResponse(result);
|
|
12134
12224
|
}
|
|
12225
|
+
if (action === "refresh") {
|
|
12226
|
+
const result = await handler.handleRefresh(req);
|
|
12227
|
+
return createSuccessResponse(result);
|
|
12228
|
+
}
|
|
12135
12229
|
return createErrorResponse(`Unknown action: ${action}`, 404);
|
|
12136
12230
|
} catch (error) {
|
|
12137
12231
|
logger34.error(`[OAuth ${action}] Error:`, error);
|
package/dist/server.js
CHANGED
|
@@ -3114,6 +3114,77 @@ class OAuthHandler {
|
|
|
3114
3114
|
const data = await response.json();
|
|
3115
3115
|
return data;
|
|
3116
3116
|
}
|
|
3117
|
+
async handleRefresh(request) {
|
|
3118
|
+
let webRequest;
|
|
3119
|
+
let refreshRequest;
|
|
3120
|
+
if (request instanceof Request) {
|
|
3121
|
+
webRequest = request;
|
|
3122
|
+
refreshRequest = await request.json();
|
|
3123
|
+
} else if (typeof request === "object" && "json" in request && typeof request.json === "function") {
|
|
3124
|
+
refreshRequest = await request.json();
|
|
3125
|
+
} else {
|
|
3126
|
+
refreshRequest = request;
|
|
3127
|
+
}
|
|
3128
|
+
const providerConfig = this.config.providers[refreshRequest.provider];
|
|
3129
|
+
if (!providerConfig) {
|
|
3130
|
+
throw new Error(`Provider ${refreshRequest.provider} not configured. Add OAuth credentials to your API route configuration.`);
|
|
3131
|
+
}
|
|
3132
|
+
let context;
|
|
3133
|
+
if (webRequest) {
|
|
3134
|
+
try {
|
|
3135
|
+
if (this.config.getSessionContext) {
|
|
3136
|
+
context = await this.config.getSessionContext(webRequest);
|
|
3137
|
+
}
|
|
3138
|
+
if (!context || !context.userId) {
|
|
3139
|
+
const { detectSessionContext: detectSessionContext2 } = await Promise.resolve().then(() => exports_session_detector);
|
|
3140
|
+
context = await detectSessionContext2(webRequest);
|
|
3141
|
+
}
|
|
3142
|
+
} catch (error) {}
|
|
3143
|
+
}
|
|
3144
|
+
const body = {
|
|
3145
|
+
provider: refreshRequest.provider,
|
|
3146
|
+
refresh_token: refreshRequest.refreshToken,
|
|
3147
|
+
client_id: providerConfig.clientId
|
|
3148
|
+
};
|
|
3149
|
+
if (providerConfig.clientSecret) {
|
|
3150
|
+
body.client_secret = providerConfig.clientSecret;
|
|
3151
|
+
}
|
|
3152
|
+
if (providerConfig.config?.subdomain) {
|
|
3153
|
+
body.subdomain = providerConfig.config.subdomain;
|
|
3154
|
+
}
|
|
3155
|
+
const url = new URL("/oauth/refresh", this.serverUrl);
|
|
3156
|
+
const response = await fetch(url.toString(), {
|
|
3157
|
+
method: "POST",
|
|
3158
|
+
headers: this.getHeaders({
|
|
3159
|
+
"Content-Type": "application/json"
|
|
3160
|
+
}),
|
|
3161
|
+
body: JSON.stringify(body)
|
|
3162
|
+
});
|
|
3163
|
+
if (!response.ok) {
|
|
3164
|
+
const error = await response.text();
|
|
3165
|
+
throw new Error(`Token refresh failed: ${error}`);
|
|
3166
|
+
}
|
|
3167
|
+
const data = await response.json();
|
|
3168
|
+
const result = data;
|
|
3169
|
+
if (this.config.setProviderToken) {
|
|
3170
|
+
try {
|
|
3171
|
+
const tokenData = {
|
|
3172
|
+
accessToken: result.accessToken,
|
|
3173
|
+
refreshToken: result.refreshToken,
|
|
3174
|
+
tokenType: result.tokenType,
|
|
3175
|
+
expiresIn: result.expiresIn,
|
|
3176
|
+
expiresAt: result.expiresAt,
|
|
3177
|
+
scopes: result.scopes ? result.scopes.flatMap((s) => s.split(" ").filter(Boolean)) : result.scopes
|
|
3178
|
+
};
|
|
3179
|
+
const email = result.email || await fetchUserEmail(refreshRequest.provider, tokenData);
|
|
3180
|
+
if (email) {
|
|
3181
|
+
tokenData.email = email;
|
|
3182
|
+
}
|
|
3183
|
+
await this.config.setProviderToken(refreshRequest.provider, tokenData, email, context);
|
|
3184
|
+
} catch (error) {}
|
|
3185
|
+
}
|
|
3186
|
+
return result;
|
|
3187
|
+
}
|
|
3117
3188
|
async handleToolCall(request, authHeader, integrationsHeader) {
|
|
3118
3189
|
const url = this.serverUrl;
|
|
3119
3190
|
const headers = this.getHeaders({
|
|
@@ -3244,6 +3315,19 @@ function createNextOAuthHandler(config) {
|
|
|
3244
3315
|
return Response.json({ error: error.message || "Failed to disconnect provider" }, { status: 500 });
|
|
3245
3316
|
}
|
|
3246
3317
|
},
|
|
3318
|
+
async refresh(req) {
|
|
3319
|
+
try {
|
|
3320
|
+
const result = await handler.handleRefresh(req);
|
|
3321
|
+
const response = Response.json(result);
|
|
3322
|
+
if (handler.hasDatabaseCallbacks()) {
|
|
3323
|
+
response.headers.set("X-Integrate-Use-Database", "true");
|
|
3324
|
+
}
|
|
3325
|
+
return response;
|
|
3326
|
+
} catch (error) {
|
|
3327
|
+
logger7.error("[OAuth Refresh] Error:", error);
|
|
3328
|
+
return Response.json({ error: error.message || "Failed to refresh token" }, { status: 500 });
|
|
3329
|
+
}
|
|
3330
|
+
},
|
|
3247
3331
|
createRoutes() {
|
|
3248
3332
|
return {
|
|
3249
3333
|
async POST(req, context) {
|
|
@@ -3258,6 +3342,9 @@ function createNextOAuthHandler(config) {
|
|
|
3258
3342
|
if (action === "disconnect") {
|
|
3259
3343
|
return handlers.disconnect(req);
|
|
3260
3344
|
}
|
|
3345
|
+
if (action === "refresh") {
|
|
3346
|
+
return handlers.refresh(req);
|
|
3347
|
+
}
|
|
3261
3348
|
if (action === "mcp") {
|
|
3262
3349
|
return handlers.mcp(req);
|
|
3263
3350
|
}
|
|
@@ -3303,6 +3390,9 @@ function createNextOAuthHandler(config) {
|
|
|
3303
3390
|
if (action === "disconnect") {
|
|
3304
3391
|
return handlers.disconnect(req);
|
|
3305
3392
|
}
|
|
3393
|
+
if (action === "refresh") {
|
|
3394
|
+
return handlers.refresh(req);
|
|
3395
|
+
}
|
|
3306
3396
|
return Response.json({ error: `Unknown action: ${action}` }, { status: 404 });
|
|
3307
3397
|
}
|
|
3308
3398
|
if (segments.length === 1 && segments[0] === "mcp") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-routes.d.ts","sourceRoot":"","sources":["../../../src/adapters/auto-routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,kBAAkB,GAAG,IAAI,CAEhE;AAED;;;;;;;;;;;;;;;;;GAiBG;AAkBH;;;GAGG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvC,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"auto-routes.d.ts","sourceRoot":"","sources":["../../../src/adapters/auto-routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAe1E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,kBAAkB,GAAG,IAAI,CAEhE;AAED;;;;;;;;;;;;;;;;;GAiBG;AAkBH;;;GAGG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvC,OAAO,CAAC,GAAG,CAAC,CAoEd;AAED;;;GAGG;AACH,wBAAsB,GAAG,CACvB,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACvC,OAAO,CAAC,GAAG,CAAC,CAoCd"}
|
|
@@ -179,6 +179,25 @@ export interface DisconnectResponse {
|
|
|
179
179
|
success: boolean;
|
|
180
180
|
provider: string;
|
|
181
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Request body for token refresh endpoint
|
|
184
|
+
*/
|
|
185
|
+
export interface RefreshRequest {
|
|
186
|
+
provider: string;
|
|
187
|
+
refreshToken: string;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Response from token refresh endpoint
|
|
191
|
+
*/
|
|
192
|
+
export interface RefreshResponse {
|
|
193
|
+
accessToken: string;
|
|
194
|
+
refreshToken?: string;
|
|
195
|
+
tokenType: string;
|
|
196
|
+
expiresIn: number;
|
|
197
|
+
expiresAt?: string;
|
|
198
|
+
scopes?: string[];
|
|
199
|
+
email?: string;
|
|
200
|
+
}
|
|
182
201
|
/**
|
|
183
202
|
* Request body for MCP tool call endpoint
|
|
184
203
|
*/
|
|
@@ -285,6 +304,17 @@ export declare class OAuthHandler {
|
|
|
285
304
|
* @throws Error if MCP server request fails
|
|
286
305
|
*/
|
|
287
306
|
handleDisconnect(request: DisconnectRequest, accessToken: string, webRequest?: Request): Promise<DisconnectResponse>;
|
|
307
|
+
/**
|
|
308
|
+
* Handle token refresh
|
|
309
|
+
* Refreshes an expired access token via the MCP server's /oauth/refresh endpoint
|
|
310
|
+
*
|
|
311
|
+
* @param request - Refresh request with provider and refreshToken, OR full Web Request object
|
|
312
|
+
* @returns Refreshed token data
|
|
313
|
+
*
|
|
314
|
+
* @throws Error if provider is not configured
|
|
315
|
+
* @throws Error if MCP server request fails
|
|
316
|
+
*/
|
|
317
|
+
handleRefresh(request: RefreshRequest | Request): Promise<RefreshResponse>;
|
|
288
318
|
/**
|
|
289
319
|
* Handle MCP tool call
|
|
290
320
|
* Forwards tool call requests to MCP server with API key and provider token
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../../src/adapters/base-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../../src/adapters/base-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -218,6 +218,22 @@ export declare function createNextOAuthHandler(config: OAuthHandlerConfig): {
|
|
|
218
218
|
* ```
|
|
219
219
|
*/
|
|
220
220
|
disconnect(req: NextRequest): Promise<NextResponse>;
|
|
221
|
+
/**
|
|
222
|
+
* POST /api/integrate/oauth/refresh
|
|
223
|
+
*
|
|
224
|
+
* Refresh an expired access token via the MCP server
|
|
225
|
+
*
|
|
226
|
+
* Request body:
|
|
227
|
+
* ```json
|
|
228
|
+
* {
|
|
229
|
+
* "provider": "github",
|
|
230
|
+
* "refreshToken": "<stored-refresh-token>"
|
|
231
|
+
* }
|
|
232
|
+
* ```
|
|
233
|
+
*
|
|
234
|
+
* Response: Same shape as callback response (accessToken, refreshToken, etc.)
|
|
235
|
+
*/
|
|
236
|
+
refresh(req: NextRequest): Promise<NextResponse>;
|
|
221
237
|
/**
|
|
222
238
|
* Create unified route handlers for catch-all route
|
|
223
239
|
*
|
|
@@ -324,6 +340,7 @@ export declare function createNextOAuthHandler(config: OAuthHandlerConfig): {
|
|
|
324
340
|
* - GET /api/integrate/oauth/callback - Provider OAuth redirect
|
|
325
341
|
* - GET /api/integrate/oauth/status - Check authorization status
|
|
326
342
|
* - POST /api/integrate/oauth/disconnect - Disconnect provider
|
|
343
|
+
* - POST /api/integrate/oauth/refresh - Refresh expired token
|
|
327
344
|
* - POST /api/integrate/mcp - Execute MCP tool calls
|
|
328
345
|
*/
|
|
329
346
|
toNextJsHandler(redirectConfig?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU1E,KAAK,WAAW,GAAG,GAAG,CAAC;AACvB,KAAK,YAAY,GAAG,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;IAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;mBACkB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;kBACiB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;gBACe,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;oBACmB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;;QAGC;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/adapters/nextjs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU1E,KAAK,WAAW,GAAG,GAAG,CAAC;AACvB,KAAK,YAAY,GAAG,GAAG,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;IAI7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;mBACkB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;kBACiB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;gBACe,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;oBACmB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD;;;;;;;;;;;;;;OAcG;iBACgB,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAoBtD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;;QAGC;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;QA+BxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GACpE,OAAO,CAAC,YAAY,CAAC;;IAiB5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;aACY,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;qCAC8B;QAC/B,6DAA6D;QAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iEAAiE;QACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;QAKG;;WAEG;kBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;QA0CxB;;WAEG;iBAEI,WAAW,WACP;YAAE,MAAM,EAAE;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,GAAG,OAAO,CAAC;gBAAE,GAAG,EAAE,MAAM,EAAE,CAAA;aAAE,CAAC,CAAA;SAAE,GAClE,OAAO,CAAC,YAAY,CAAC;;EAqG/B"}
|