Skip to content

Commit ce367a3

Browse files
authored
✔️ fix: Resource field TypeError & Missing Role Permission Type (danny-avila#8606)
* fix: resource parameter undefined TypeError in log * chore: Add missing FILE_SEARCH permission type to IRole interface * chore: Bump version of @librechat/data-schemas to 0.0.11 * fix: Ensure resource is defined and handle potential null values in OAuth flow
1 parent bb45e3b commit ce367a3

File tree

4 files changed

+14
-12
lines changed

4 files changed

+14
-12
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/api/src/mcp/oauth/handler.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -269,18 +269,17 @@ export class MCPOAuthHandler {
269269
authorizationUrl.searchParams.set('state', flowId);
270270
logger.debug(`[MCPOAuth] Added state parameter to authorization URL`);
271271

272-
if (resourceMetadata?.resource) {
272+
if (resourceMetadata?.resource != null && resourceMetadata.resource) {
273273
authorizationUrl.searchParams.set('resource', resourceMetadata.resource);
274+
logger.debug(
275+
`[MCPOAuth] Added resource parameter to authorization URL: ${resourceMetadata.resource}`,
276+
);
274277
} else {
275278
logger.warn(
276279
`[MCPOAuth] Resource metadata missing 'resource' property for ${serverName}. ` +
277280
'This can cause issues with some Authorization Servers who expect a "resource" parameter.',
278281
);
279282
}
280-
281-
logger.debug(
282-
`[MCPOAuth] Added resource parameter to authorization URL: ${resourceMetadata.resource}`,
283-
);
284283
} catch (error) {
285284
logger.error(`[MCPOAuth] startAuthorization failed:`, error);
286285
throw error;
@@ -343,9 +342,9 @@ export class MCPOAuthHandler {
343342
throw new Error('Invalid flow metadata');
344343
}
345344

346-
let resource;
345+
let resource: URL | undefined;
347346
try {
348-
if (metadata.resourceMetadata?.resource) {
347+
if (metadata.resourceMetadata?.resource != null && metadata.resourceMetadata.resource) {
349348
resource = new URL(metadata.resourceMetadata.resource);
350349
logger.debug(`[MCPOAuth] Resource URL for flow ${flowId}: ${resource.toString()}`);
351350
}
@@ -358,12 +357,12 @@ export class MCPOAuthHandler {
358357
}
359358

360359
const tokens = await exchangeAuthorization(metadata.serverUrl, {
360+
redirectUri: metadata.clientInfo.redirect_uris?.[0] || this.getDefaultRedirectUri(),
361361
metadata: metadata.metadata as unknown as SDKOAuthMetadata,
362362
clientInformation: metadata.clientInfo,
363-
authorizationCode,
364363
codeVerifier: metadata.codeVerifier,
365-
redirectUri: metadata.clientInfo.redirect_uris?.[0] || this.getDefaultRedirectUri(),
366-
resource: resource,
364+
authorizationCode,
365+
resource,
367366
});
368367

369368
logger.debug('[MCPOAuth] Raw tokens from exchange:', {

packages/data-schemas/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@librechat/data-schemas",
3-
"version": "0.0.10",
3+
"version": "0.0.11",
44
"description": "Mongoose schemas and models for LibreChat",
55
"type": "module",
66
"main": "dist/index.cjs",

packages/data-schemas/src/types/role.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,8 @@ export interface IRole extends Document {
3535
[PermissionTypes.WEB_SEARCH]?: {
3636
[Permissions.USE]?: boolean;
3737
};
38+
[PermissionTypes.FILE_SEARCH]?: {
39+
[Permissions.USE]?: boolean;
40+
};
3841
};
3942
}

0 commit comments

Comments
 (0)