const { EventSource } = require('eventsource'); const { Time } = require('librechat-data-provider'); const { mcpConfig, MCPManager, FlowStateManager, MCPServersRegistry, OAuthReconnectionManager, } = require('@librechat/api'); global.EventSource = EventSource; /** @type {FlowStateManager} */ let flowManager = null; /** @type {FlowStateManager} */ let actionFlowManager = null; /** * Flow manager for MCP OAuth flows. Uses the longer MCP OAuth TTL so the auth * button and flow state outlive the user-completion window. * @param {Keyv} flowsCache * @returns {FlowStateManager} */ function getFlowStateManager(flowsCache) { if (!flowManager) { flowManager = new FlowStateManager(flowsCache, { ttl: mcpConfig.OAUTH_FLOW_TTL, }); } return flowManager; } /** * Flow manager for Action (custom tool) OAuth flows. Kept on the shorter TTL so an * unclicked action login does not leave the tool call waiting for the MCP OAuth window. * @param {Keyv} flowsCache * @returns {FlowStateManager} */ function getActionFlowStateManager(flowsCache) { if (!actionFlowManager) { actionFlowManager = new FlowStateManager(flowsCache, { ttl: Time.ONE_MINUTE * 3, }); } return actionFlowManager; } module.exports = { createMCPServersRegistry: MCPServersRegistry.createInstance, getMCPServersRegistry: MCPServersRegistry.getInstance, createMCPManager: MCPManager.createInstance, getMCPManager: MCPManager.getInstance, getFlowStateManager, getActionFlowStateManager, createOAuthReconnectionManager: OAuthReconnectionManager.createInstance, getOAuthReconnectionManager: OAuthReconnectionManager.getInstance, };