@librechat/data-schemas 0.0.43 → 0.0.44
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/admin/capabilities.cjs +192 -0
- package/dist/admin/capabilities.cjs.map +1 -0
- package/dist/admin/capabilities.es.js +182 -0
- package/dist/admin/capabilities.es.js.map +1 -0
- package/dist/app/agents.cjs +24 -0
- package/dist/app/agents.cjs.map +1 -0
- package/dist/app/agents.es.js +22 -0
- package/dist/app/agents.es.js.map +1 -0
- package/dist/app/assistants.cjs +56 -0
- package/dist/app/assistants.cjs.map +1 -0
- package/dist/app/assistants.es.js +53 -0
- package/dist/app/assistants.es.js.map +1 -0
- package/dist/app/azure.cjs +61 -0
- package/dist/app/azure.cjs.map +1 -0
- package/dist/app/azure.es.js +59 -0
- package/dist/app/azure.es.js.map +1 -0
- package/dist/app/endpoints.cjs +63 -0
- package/dist/app/endpoints.cjs.map +1 -0
- package/dist/app/endpoints.es.js +61 -0
- package/dist/app/endpoints.es.js.map +1 -0
- package/dist/app/interface.cjs +53 -0
- package/dist/app/interface.cjs.map +1 -0
- package/dist/app/interface.es.js +51 -0
- package/dist/app/interface.es.js.map +1 -0
- package/dist/app/memory.cjs +29 -0
- package/dist/app/memory.cjs.map +1 -0
- package/dist/app/memory.es.js +26 -0
- package/dist/app/memory.es.js.map +1 -0
- package/dist/app/ocr.cjs +21 -0
- package/dist/app/ocr.cjs.map +1 -0
- package/dist/app/ocr.es.js +19 -0
- package/dist/app/ocr.es.js.map +1 -0
- package/dist/app/resolution.cjs +51 -0
- package/dist/app/resolution.cjs.map +1 -0
- package/dist/app/resolution.es.js +49 -0
- package/dist/app/resolution.es.js.map +1 -0
- package/dist/app/service.cjs +108 -0
- package/dist/app/service.cjs.map +1 -0
- package/dist/app/service.es.js +106 -0
- package/dist/app/service.es.js.map +1 -0
- package/dist/app/specs.cjs +71 -0
- package/dist/app/specs.cjs.map +1 -0
- package/dist/app/specs.es.js +69 -0
- package/dist/app/specs.es.js.map +1 -0
- package/dist/app/turnstile.cjs +40 -0
- package/dist/app/turnstile.cjs.map +1 -0
- package/dist/app/turnstile.es.js +38 -0
- package/dist/app/turnstile.es.js.map +1 -0
- package/dist/app/vertex.cjs +156 -0
- package/dist/app/vertex.cjs.map +1 -0
- package/dist/app/vertex.es.js +152 -0
- package/dist/app/vertex.es.js.map +1 -0
- package/dist/app/web.cjs +87 -0
- package/dist/app/web.cjs.map +1 -0
- package/dist/app/web.es.js +82 -0
- package/dist/app/web.es.js.map +1 -0
- package/dist/common/enum.cjs +19 -0
- package/dist/common/enum.cjs.map +1 -0
- package/dist/common/enum.es.js +19 -0
- package/dist/common/enum.es.js.map +1 -0
- package/dist/config/meiliLogger.cjs +57 -0
- package/dist/config/meiliLogger.cjs.map +1 -0
- package/dist/config/meiliLogger.es.js +55 -0
- package/dist/config/meiliLogger.es.js.map +1 -0
- package/dist/config/parsers.cjs +224 -0
- package/dist/config/parsers.cjs.map +1 -0
- package/dist/config/parsers.es.js +219 -0
- package/dist/config/parsers.es.js.map +1 -0
- package/dist/config/tenantContext.cjs +30 -0
- package/dist/config/tenantContext.cjs.map +1 -0
- package/dist/config/tenantContext.es.js +25 -0
- package/dist/config/tenantContext.es.js.map +1 -0
- package/dist/config/utils.cjs +37 -0
- package/dist/config/utils.cjs.map +1 -0
- package/dist/config/utils.es.js +35 -0
- package/dist/config/utils.es.js.map +1 -0
- package/dist/config/winston.cjs +93 -0
- package/dist/config/winston.cjs.map +1 -0
- package/dist/config/winston.es.js +91 -0
- package/dist/config/winston.es.js.map +1 -0
- package/dist/crypto/index.cjs +156 -0
- package/dist/crypto/index.cjs.map +1 -0
- package/dist/crypto/index.es.js +145 -0
- package/dist/crypto/index.es.js.map +1 -0
- package/dist/index.cjs +142 -11734
- package/dist/index.cjs.map +1 -1
- package/dist/index.es.js +52 -11652
- package/dist/index.es.js.map +1 -1
- package/dist/methods/accessRole.cjs +210 -0
- package/dist/methods/accessRole.cjs.map +1 -0
- package/dist/methods/accessRole.es.js +208 -0
- package/dist/methods/accessRole.es.js.map +1 -0
- package/dist/methods/aclEntry.cjs +361 -0
- package/dist/methods/aclEntry.cjs.map +1 -0
- package/dist/methods/aclEntry.es.js +359 -0
- package/dist/methods/aclEntry.es.js.map +1 -0
- package/dist/methods/action.cjs +59 -0
- package/dist/methods/action.cjs.map +1 -0
- package/dist/methods/action.es.js +57 -0
- package/dist/methods/action.es.js.map +1 -0
- package/dist/methods/agent.cjs +580 -0
- package/dist/methods/agent.cjs.map +1 -0
- package/dist/methods/agent.es.js +578 -0
- package/dist/methods/agent.es.js.map +1 -0
- package/dist/methods/agentApiKey.cjs +140 -0
- package/dist/methods/agentApiKey.cjs.map +1 -0
- package/dist/methods/agentApiKey.es.js +138 -0
- package/dist/methods/agentApiKey.es.js.map +1 -0
- package/dist/methods/agentCategory.cjs +226 -0
- package/dist/methods/agentCategory.cjs.map +1 -0
- package/dist/methods/agentCategory.es.js +224 -0
- package/dist/methods/agentCategory.es.js.map +1 -0
- package/dist/methods/assistant.cjs +53 -0
- package/dist/methods/assistant.cjs.map +1 -0
- package/dist/methods/assistant.es.js +51 -0
- package/dist/methods/assistant.es.js.map +1 -0
- package/dist/methods/banner.cjs +32 -0
- package/dist/methods/banner.cjs.map +1 -0
- package/dist/methods/banner.es.js +30 -0
- package/dist/methods/banner.es.js.map +1 -0
- package/dist/methods/categories.cjs +33 -0
- package/dist/methods/categories.cjs.map +1 -0
- package/dist/methods/categories.es.js +31 -0
- package/dist/methods/categories.es.js.map +1 -0
- package/dist/methods/config.cjs +106 -0
- package/dist/methods/config.cjs.map +1 -0
- package/dist/methods/config.es.js +104 -0
- package/dist/methods/config.es.js.map +1 -0
- package/dist/methods/conversation.cjs +344 -0
- package/dist/methods/conversation.cjs.map +1 -0
- package/dist/methods/conversation.es.js +342 -0
- package/dist/methods/conversation.es.js.map +1 -0
- package/dist/methods/conversationTag.cjs +234 -0
- package/dist/methods/conversationTag.cjs.map +1 -0
- package/dist/methods/conversationTag.es.js +232 -0
- package/dist/methods/conversationTag.es.js.map +1 -0
- package/dist/methods/file.cjs +315 -0
- package/dist/methods/file.cjs.map +1 -0
- package/dist/methods/file.es.js +313 -0
- package/dist/methods/file.es.js.map +1 -0
- package/dist/methods/index.cjs +135 -0
- package/dist/methods/index.cjs.map +1 -0
- package/dist/methods/index.es.js +130 -0
- package/dist/methods/index.es.js.map +1 -0
- package/dist/methods/key.cjs +136 -0
- package/dist/methods/key.cjs.map +1 -0
- package/dist/methods/key.es.js +134 -0
- package/dist/methods/key.es.js.map +1 -0
- package/dist/methods/mcpServer.cjs +259 -0
- package/dist/methods/mcpServer.cjs.map +1 -0
- package/dist/methods/mcpServer.es.js +257 -0
- package/dist/methods/mcpServer.es.js.map +1 -0
- package/dist/methods/memory.cjs +145 -0
- package/dist/methods/memory.cjs.map +1 -0
- package/dist/methods/memory.es.js +143 -0
- package/dist/methods/memory.es.js.map +1 -0
- package/dist/methods/message.cjs +280 -0
- package/dist/methods/message.cjs.map +1 -0
- package/dist/methods/message.es.js +278 -0
- package/dist/methods/message.es.js.map +1 -0
- package/dist/methods/pluginAuth.cjs +108 -0
- package/dist/methods/pluginAuth.cjs.map +1 -0
- package/dist/methods/pluginAuth.es.js +106 -0
- package/dist/methods/pluginAuth.es.js.map +1 -0
- package/dist/methods/preset.cjs +105 -0
- package/dist/methods/preset.cjs.map +1 -0
- package/dist/methods/preset.es.js +103 -0
- package/dist/methods/preset.es.js.map +1 -0
- package/dist/methods/prompt.cjs +546 -0
- package/dist/methods/prompt.cjs.map +1 -0
- package/dist/methods/prompt.es.js +544 -0
- package/dist/methods/prompt.es.js.map +1 -0
- package/dist/methods/role.cjs +290 -0
- package/dist/methods/role.cjs.map +1 -0
- package/dist/methods/role.es.js +288 -0
- package/dist/methods/role.es.js.map +1 -0
- package/dist/methods/session.cjs +221 -0
- package/dist/methods/session.cjs.map +1 -0
- package/dist/methods/session.es.js +217 -0
- package/dist/methods/session.es.js.map +1 -0
- package/dist/methods/share.cjs +474 -0
- package/dist/methods/share.cjs.map +1 -0
- package/dist/methods/share.es.js +472 -0
- package/dist/methods/share.es.js.map +1 -0
- package/dist/methods/spendTokens.cjs +109 -0
- package/dist/methods/spendTokens.cjs.map +1 -0
- package/dist/methods/spendTokens.es.js +107 -0
- package/dist/methods/spendTokens.es.js.map +1 -0
- package/dist/methods/systemGrant.cjs +190 -0
- package/dist/methods/systemGrant.cjs.map +1 -0
- package/dist/methods/systemGrant.es.js +188 -0
- package/dist/methods/systemGrant.es.js.map +1 -0
- package/dist/methods/token.cjs +117 -0
- package/dist/methods/token.cjs.map +1 -0
- package/dist/methods/token.es.js +115 -0
- package/dist/methods/token.es.js.map +1 -0
- package/dist/methods/toolCall.cjs +91 -0
- package/dist/methods/toolCall.cjs.map +1 -0
- package/dist/methods/toolCall.es.js +89 -0
- package/dist/methods/toolCall.es.js.map +1 -0
- package/dist/methods/transaction.cjs +305 -0
- package/dist/methods/transaction.cjs.map +1 -0
- package/dist/methods/transaction.es.js +303 -0
- package/dist/methods/transaction.es.js.map +1 -0
- package/dist/methods/tx.cjs +443 -0
- package/dist/methods/tx.cjs.map +1 -0
- package/dist/methods/tx.es.js +437 -0
- package/dist/methods/tx.es.js.map +1 -0
- package/dist/methods/user.cjs +269 -0
- package/dist/methods/user.cjs.map +1 -0
- package/dist/methods/user.es.js +266 -0
- package/dist/methods/user.es.js.map +1 -0
- package/dist/methods/userGroup.cjs +518 -0
- package/dist/methods/userGroup.cjs.map +1 -0
- package/dist/methods/userGroup.es.js +516 -0
- package/dist/methods/userGroup.es.js.map +1 -0
- package/dist/migrations/tenantIndexes.cjs +85 -0
- package/dist/migrations/tenantIndexes.cjs.map +1 -0
- package/dist/migrations/tenantIndexes.es.js +82 -0
- package/dist/migrations/tenantIndexes.es.js.map +1 -0
- package/dist/models/accessRole.cjs +12 -0
- package/dist/models/accessRole.cjs.map +1 -0
- package/dist/models/accessRole.es.js +10 -0
- package/dist/models/accessRole.es.js.map +1 -0
- package/dist/models/aclEntry.cjs +12 -0
- package/dist/models/aclEntry.cjs.map +1 -0
- package/dist/models/aclEntry.es.js +10 -0
- package/dist/models/aclEntry.es.js.map +1 -0
- package/dist/models/action.cjs +12 -0
- package/dist/models/action.cjs.map +1 -0
- package/dist/models/action.es.js +10 -0
- package/dist/models/action.es.js.map +1 -0
- package/dist/models/agent.cjs +12 -0
- package/dist/models/agent.cjs.map +1 -0
- package/dist/models/agent.es.js +10 -0
- package/dist/models/agent.es.js.map +1 -0
- package/dist/models/agentApiKey.cjs +12 -0
- package/dist/models/agentApiKey.cjs.map +1 -0
- package/dist/models/agentApiKey.es.js +10 -0
- package/dist/models/agentApiKey.es.js.map +1 -0
- package/dist/models/agentCategory.cjs +13 -0
- package/dist/models/agentCategory.cjs.map +1 -0
- package/dist/models/agentCategory.es.js +11 -0
- package/dist/models/agentCategory.es.js.map +1 -0
- package/dist/models/assistant.cjs +12 -0
- package/dist/models/assistant.cjs.map +1 -0
- package/dist/models/assistant.es.js +10 -0
- package/dist/models/assistant.es.js.map +1 -0
- package/dist/models/balance.cjs +12 -0
- package/dist/models/balance.cjs.map +1 -0
- package/dist/models/balance.es.js +10 -0
- package/dist/models/balance.es.js.map +1 -0
- package/dist/models/banner.cjs +12 -0
- package/dist/models/banner.cjs.map +1 -0
- package/dist/models/banner.es.js +10 -0
- package/dist/models/banner.es.js.map +1 -0
- package/dist/models/config.cjs +12 -0
- package/dist/models/config.cjs.map +1 -0
- package/dist/models/config.es.js +10 -0
- package/dist/models/config.es.js.map +1 -0
- package/dist/models/conversationTag.cjs +13 -0
- package/dist/models/conversationTag.cjs.map +1 -0
- package/dist/models/conversationTag.es.js +11 -0
- package/dist/models/conversationTag.es.js.map +1 -0
- package/dist/models/convo.cjs +23 -0
- package/dist/models/convo.cjs.map +1 -0
- package/dist/models/convo.es.js +21 -0
- package/dist/models/convo.es.js.map +1 -0
- package/dist/models/file.cjs +12 -0
- package/dist/models/file.cjs.map +1 -0
- package/dist/models/file.es.js +10 -0
- package/dist/models/file.es.js.map +1 -0
- package/dist/models/group.cjs +12 -0
- package/dist/models/group.cjs.map +1 -0
- package/dist/models/group.es.js +10 -0
- package/dist/models/group.es.js.map +1 -0
- package/dist/models/index.cjs +73 -0
- package/dist/models/index.cjs.map +1 -0
- package/dist/models/index.es.js +71 -0
- package/dist/models/index.es.js.map +1 -0
- package/dist/models/key.cjs +12 -0
- package/dist/models/key.cjs.map +1 -0
- package/dist/models/key.es.js +10 -0
- package/dist/models/key.es.js.map +1 -0
- package/dist/models/mcpServer.cjs +12 -0
- package/dist/models/mcpServer.cjs.map +1 -0
- package/dist/models/mcpServer.es.js +10 -0
- package/dist/models/mcpServer.es.js.map +1 -0
- package/dist/models/memory.cjs +12 -0
- package/dist/models/memory.cjs.map +1 -0
- package/dist/models/memory.es.js +10 -0
- package/dist/models/memory.es.js.map +1 -0
- package/dist/models/message.cjs +22 -0
- package/dist/models/message.cjs.map +1 -0
- package/dist/models/message.es.js +20 -0
- package/dist/models/message.es.js.map +1 -0
- package/dist/models/pluginAuth.cjs +12 -0
- package/dist/models/pluginAuth.cjs.map +1 -0
- package/dist/models/pluginAuth.es.js +10 -0
- package/dist/models/pluginAuth.es.js.map +1 -0
- package/dist/models/plugins/mongoMeili.cjs +547 -0
- package/dist/models/plugins/mongoMeili.cjs.map +1 -0
- package/dist/models/plugins/mongoMeili.es.js +545 -0
- package/dist/models/plugins/mongoMeili.es.js.map +1 -0
- package/dist/models/plugins/tenantIsolation.cjs +140 -0
- package/dist/models/plugins/tenantIsolation.cjs.map +1 -0
- package/dist/models/plugins/tenantIsolation.es.js +138 -0
- package/dist/models/plugins/tenantIsolation.es.js.map +1 -0
- package/dist/models/preset.cjs +12 -0
- package/dist/models/preset.cjs.map +1 -0
- package/dist/models/preset.es.js +10 -0
- package/dist/models/preset.es.js.map +1 -0
- package/dist/models/prompt.cjs +12 -0
- package/dist/models/prompt.cjs.map +1 -0
- package/dist/models/prompt.es.js +10 -0
- package/dist/models/prompt.es.js.map +1 -0
- package/dist/models/promptGroup.cjs +13 -0
- package/dist/models/promptGroup.cjs.map +1 -0
- package/dist/models/promptGroup.es.js +11 -0
- package/dist/models/promptGroup.es.js.map +1 -0
- package/dist/models/role.cjs +12 -0
- package/dist/models/role.cjs.map +1 -0
- package/dist/models/role.es.js +10 -0
- package/dist/models/role.es.js.map +1 -0
- package/dist/models/session.cjs +12 -0
- package/dist/models/session.cjs.map +1 -0
- package/dist/models/session.es.js +10 -0
- package/dist/models/session.es.js.map +1 -0
- package/dist/models/sharedLink.cjs +12 -0
- package/dist/models/sharedLink.cjs.map +1 -0
- package/dist/models/sharedLink.es.js +10 -0
- package/dist/models/sharedLink.es.js.map +1 -0
- package/dist/models/systemGrant.cjs +16 -0
- package/dist/models/systemGrant.cjs.map +1 -0
- package/dist/models/systemGrant.es.js +14 -0
- package/dist/models/systemGrant.es.js.map +1 -0
- package/dist/models/token.cjs +12 -0
- package/dist/models/token.cjs.map +1 -0
- package/dist/models/token.es.js +10 -0
- package/dist/models/token.es.js.map +1 -0
- package/dist/models/toolCall.cjs +12 -0
- package/dist/models/toolCall.cjs.map +1 -0
- package/dist/models/toolCall.es.js +10 -0
- package/dist/models/toolCall.es.js.map +1 -0
- package/dist/models/transaction.cjs +12 -0
- package/dist/models/transaction.cjs.map +1 -0
- package/dist/models/transaction.es.js +10 -0
- package/dist/models/transaction.es.js.map +1 -0
- package/dist/models/user.cjs +12 -0
- package/dist/models/user.cjs.map +1 -0
- package/dist/models/user.es.js +10 -0
- package/dist/models/user.es.js.map +1 -0
- package/dist/schema/accessRole.cjs +34 -0
- package/dist/schema/accessRole.cjs.map +1 -0
- package/dist/schema/accessRole.es.js +32 -0
- package/dist/schema/accessRole.es.js.map +1 -0
- package/dist/schema/aclEntry.cjs +74 -0
- package/dist/schema/aclEntry.cjs.map +1 -0
- package/dist/schema/aclEntry.es.js +72 -0
- package/dist/schema/aclEntry.es.js.map +1 -0
- package/dist/schema/action.cjs +54 -0
- package/dist/schema/action.cjs.map +1 -0
- package/dist/schema/action.es.js +52 -0
- package/dist/schema/action.es.js.map +1 -0
- package/dist/schema/agent.cjs +128 -0
- package/dist/schema/agent.cjs.map +1 -0
- package/dist/schema/agent.es.js +126 -0
- package/dist/schema/agent.es.js.map +1 -0
- package/dist/schema/agentApiKey.cjs +50 -0
- package/dist/schema/agentApiKey.cjs.map +1 -0
- package/dist/schema/agentApiKey.es.js +48 -0
- package/dist/schema/agentApiKey.es.js.map +1 -0
- package/dist/schema/agentCategory.cjs +49 -0
- package/dist/schema/agentCategory.cjs.map +1 -0
- package/dist/schema/agentCategory.es.js +47 -0
- package/dist/schema/agentCategory.es.js.map +1 -0
- package/dist/schema/assistant.cjs +42 -0
- package/dist/schema/assistant.cjs.map +1 -0
- package/dist/schema/assistant.es.js +40 -0
- package/dist/schema/assistant.es.js.map +1 -0
- package/dist/schema/balance.cjs +47 -0
- package/dist/schema/balance.cjs.map +1 -0
- package/dist/schema/balance.es.js +45 -0
- package/dist/schema/balance.es.js.map +1 -0
- package/dist/schema/banner.cjs +42 -0
- package/dist/schema/banner.cjs.map +1 -0
- package/dist/schema/banner.es.js +40 -0
- package/dist/schema/banner.es.js.map +1 -0
- package/dist/schema/categories.cjs +23 -0
- package/dist/schema/categories.cjs.map +1 -0
- package/dist/schema/categories.es.js +21 -0
- package/dist/schema/categories.es.js.map +1 -0
- package/dist/schema/config.cjs +59 -0
- package/dist/schema/config.cjs.map +1 -0
- package/dist/schema/config.es.js +57 -0
- package/dist/schema/config.es.js.map +1 -0
- package/dist/schema/conversationTag.cjs +36 -0
- package/dist/schema/conversationTag.cjs.map +1 -0
- package/dist/schema/conversationTag.es.js +34 -0
- package/dist/schema/conversationTag.es.js.map +1 -0
- package/dist/schema/convo.cjs +52 -0
- package/dist/schema/convo.cjs.map +1 -0
- package/dist/schema/convo.es.js +50 -0
- package/dist/schema/convo.es.js.map +1 -0
- package/dist/schema/defaults.cjs +168 -0
- package/dist/schema/defaults.cjs.map +1 -0
- package/dist/schema/defaults.es.js +166 -0
- package/dist/schema/defaults.es.js.map +1 -0
- package/dist/schema/file.cjs +92 -0
- package/dist/schema/file.cjs.map +1 -0
- package/dist/schema/file.es.js +90 -0
- package/dist/schema/file.es.js.map +1 -0
- package/dist/schema/group.cjs +56 -0
- package/dist/schema/group.cjs.map +1 -0
- package/dist/schema/group.es.js +54 -0
- package/dist/schema/group.es.js.map +1 -0
- package/dist/schema/key.cjs +30 -0
- package/dist/schema/key.cjs.map +1 -0
- package/dist/schema/key.es.js +28 -0
- package/dist/schema/key.es.js.map +1 -0
- package/dist/schema/mcpServer.cjs +33 -0
- package/dist/schema/mcpServer.cjs.map +1 -0
- package/dist/schema/mcpServer.es.js +31 -0
- package/dist/schema/mcpServer.es.js.map +1 -0
- package/dist/schema/memory.cjs +39 -0
- package/dist/schema/memory.cjs.map +1 -0
- package/dist/schema/memory.es.js +37 -0
- package/dist/schema/memory.es.js.map +1 -0
- package/dist/schema/message.cjs +167 -0
- package/dist/schema/message.cjs.map +1 -0
- package/dist/schema/message.es.js +165 -0
- package/dist/schema/message.es.js.map +1 -0
- package/dist/schema/pluginAuth.cjs +28 -0
- package/dist/schema/pluginAuth.cjs.map +1 -0
- package/dist/schema/pluginAuth.es.js +26 -0
- package/dist/schema/pluginAuth.es.js.map +1 -0
- package/dist/schema/preset.cjs +36 -0
- package/dist/schema/preset.cjs.map +1 -0
- package/dist/schema/preset.es.js +34 -0
- package/dist/schema/preset.es.js.map +1 -0
- package/dist/schema/prompt.cjs +36 -0
- package/dist/schema/prompt.cjs.map +1 -0
- package/dist/schema/prompt.es.js +34 -0
- package/dist/schema/prompt.es.js.map +1 -0
- package/dist/schema/promptGroup.cjs +65 -0
- package/dist/schema/promptGroup.cjs.map +1 -0
- package/dist/schema/promptGroup.es.js +63 -0
- package/dist/schema/promptGroup.es.js.map +1 -0
- package/dist/schema/role.cjs +84 -0
- package/dist/schema/role.cjs.map +1 -0
- package/dist/schema/role.es.js +82 -0
- package/dist/schema/role.es.js.map +1 -0
- package/dist/schema/session.cjs +27 -0
- package/dist/schema/session.cjs.map +1 -0
- package/dist/schema/session.es.js +25 -0
- package/dist/schema/session.es.js.map +1 -0
- package/dist/schema/share.cjs +40 -0
- package/dist/schema/share.cjs.map +1 -0
- package/dist/schema/share.es.js +38 -0
- package/dist/schema/share.es.js.map +1 -0
- package/dist/schema/systemGrant.cjs +66 -0
- package/dist/schema/systemGrant.cjs.map +1 -0
- package/dist/schema/systemGrant.es.js +64 -0
- package/dist/schema/systemGrant.es.js.map +1 -0
- package/dist/schema/token.cjs +45 -0
- package/dist/schema/token.cjs.map +1 -0
- package/dist/schema/token.es.js +43 -0
- package/dist/schema/token.es.js.map +1 -0
- package/dist/schema/toolCall.cjs +44 -0
- package/dist/schema/toolCall.cjs.map +1 -0
- package/dist/schema/toolCall.es.js +42 -0
- package/dist/schema/toolCall.es.js.map +1 -0
- package/dist/schema/transaction.cjs +48 -0
- package/dist/schema/transaction.cjs.map +1 -0
- package/dist/schema/transaction.es.js +46 -0
- package/dist/schema/transaction.es.js.map +1 -0
- package/dist/schema/user.cjs +165 -0
- package/dist/schema/user.cjs.map +1 -0
- package/dist/schema/user.es.js +163 -0
- package/dist/schema/user.es.js.map +1 -0
- package/dist/types/methods/config.d.ts +1 -0
- package/dist/utils/object-traverse.cjs +158 -0
- package/dist/utils/object-traverse.cjs.map +1 -0
- package/dist/utils/object-traverse.es.js +156 -0
- package/dist/utils/object-traverse.es.js.map +1 -0
- package/dist/utils/principal.cjs +24 -0
- package/dist/utils/principal.cjs.map +1 -0
- package/dist/utils/principal.es.js +22 -0
- package/dist/utils/principal.es.js.map +1 -0
- package/dist/utils/string.cjs +11 -0
- package/dist/utils/string.cjs.map +1 -0
- package/dist/utils/string.es.js +9 -0
- package/dist/utils/string.es.js.map +1 -0
- package/dist/utils/tempChatRetention.cjs +70 -0
- package/dist/utils/tempChatRetention.cjs.map +1 -0
- package/dist/utils/tempChatRetention.es.js +64 -0
- package/dist/utils/tempChatRetention.es.js.map +1 -0
- package/dist/utils/transactions.cjs +60 -0
- package/dist/utils/transactions.cjs.map +1 -0
- package/dist/utils/transactions.es.js +56 -0
- package/dist/utils/transactions.es.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var librechatDataProvider = require('librechat-data-provider');
|
|
4
|
+
var index = require('../crypto/index.cjs');
|
|
5
|
+
var winston = require('../config/winston.cjs');
|
|
6
|
+
|
|
7
|
+
/** Factory function that takes mongoose instance and returns the key methods */
|
|
8
|
+
function createKeyMethods(mongoose) {
|
|
9
|
+
/**
|
|
10
|
+
* Retrieves and decrypts the key value for a given user identified by userId and identifier name.
|
|
11
|
+
* @param params - The parameters object
|
|
12
|
+
* @param params.userId - The unique identifier for the user
|
|
13
|
+
* @param params.name - The name associated with the key
|
|
14
|
+
* @returns The decrypted key value
|
|
15
|
+
* @throws Error if the key is not found or if there is a problem during key retrieval
|
|
16
|
+
* @description This function searches for a user's key in the database using their userId and name.
|
|
17
|
+
* If found, it decrypts the value of the key and returns it. If no key is found, it throws
|
|
18
|
+
* an error indicating that there is no user key available.
|
|
19
|
+
*/
|
|
20
|
+
async function getUserKey(params) {
|
|
21
|
+
const { userId, name } = params;
|
|
22
|
+
const Key = mongoose.models.Key;
|
|
23
|
+
const keyValue = (await Key.findOne({ userId, name }).lean());
|
|
24
|
+
if (!keyValue) {
|
|
25
|
+
throw new Error(JSON.stringify({
|
|
26
|
+
type: librechatDataProvider.ErrorTypes.NO_USER_KEY,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
return await index.decrypt(keyValue.value);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Retrieves, decrypts, and parses the key values for a given user identified by userId and name.
|
|
33
|
+
* @param params - The parameters object
|
|
34
|
+
* @param params.userId - The unique identifier for the user
|
|
35
|
+
* @param params.name - The name associated with the key
|
|
36
|
+
* @returns The decrypted and parsed key values
|
|
37
|
+
* @throws Error if the key is invalid or if there is a problem during key value parsing
|
|
38
|
+
* @description This function retrieves a user's encrypted key using their userId and name, decrypts it,
|
|
39
|
+
* and then attempts to parse the decrypted string into a JSON object. If the parsing fails,
|
|
40
|
+
* it throws an error indicating that the user key is invalid.
|
|
41
|
+
*/
|
|
42
|
+
async function getUserKeyValues(params) {
|
|
43
|
+
const { userId, name } = params;
|
|
44
|
+
const userValues = await getUserKey({ userId, name });
|
|
45
|
+
try {
|
|
46
|
+
return JSON.parse(userValues);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
winston.error('[getUserKeyValues]', e);
|
|
50
|
+
throw new Error(JSON.stringify({
|
|
51
|
+
type: librechatDataProvider.ErrorTypes.INVALID_USER_KEY,
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Retrieves the expiry information of a user's key identified by userId and name.
|
|
57
|
+
* @param params - The parameters object
|
|
58
|
+
* @param params.userId - The unique identifier for the user
|
|
59
|
+
* @param params.name - The name associated with the key
|
|
60
|
+
* @returns The expiry date of the key or null if the key doesn't exist
|
|
61
|
+
* @description This function fetches a user's key from the database using their userId and name and
|
|
62
|
+
* returns its expiry date. If the key is not found, it returns null for the expiry date.
|
|
63
|
+
*/
|
|
64
|
+
async function getUserKeyExpiry(params) {
|
|
65
|
+
const { userId, name } = params;
|
|
66
|
+
const Key = mongoose.models.Key;
|
|
67
|
+
const keyValue = (await Key.findOne({ userId, name }).lean());
|
|
68
|
+
if (!keyValue) {
|
|
69
|
+
return { expiresAt: null };
|
|
70
|
+
}
|
|
71
|
+
return { expiresAt: keyValue.expiresAt || 'never' };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Updates or inserts a new key for a given user identified by userId and name, with a specified value and expiry date.
|
|
75
|
+
* @param params - The parameters object
|
|
76
|
+
* @param params.userId - The unique identifier for the user
|
|
77
|
+
* @param params.name - The name associated with the key
|
|
78
|
+
* @param params.value - The value to be encrypted and stored as the key's value
|
|
79
|
+
* @param params.expiresAt - The expiry date for the key [optional]
|
|
80
|
+
* @returns The updated or newly inserted key document
|
|
81
|
+
* @description This function either updates an existing user key or inserts a new one into the database,
|
|
82
|
+
* after encrypting the provided value. It sets the provided expiry date for the key (or unsets for no expiry).
|
|
83
|
+
*/
|
|
84
|
+
async function updateUserKey(params) {
|
|
85
|
+
const { userId, name, value, expiresAt = null } = params;
|
|
86
|
+
const Key = mongoose.models.Key;
|
|
87
|
+
const encryptedValue = await index.encrypt(value);
|
|
88
|
+
const updateObject = {
|
|
89
|
+
userId,
|
|
90
|
+
name,
|
|
91
|
+
value: encryptedValue,
|
|
92
|
+
};
|
|
93
|
+
const updateQuery = {
|
|
94
|
+
$set: updateObject,
|
|
95
|
+
};
|
|
96
|
+
if (expiresAt) {
|
|
97
|
+
updateObject.expiresAt = new Date(expiresAt);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
updateQuery.$unset = { expiresAt: '' };
|
|
101
|
+
}
|
|
102
|
+
return await Key.findOneAndUpdate({ userId, name }, updateQuery, {
|
|
103
|
+
upsert: true,
|
|
104
|
+
new: true,
|
|
105
|
+
}).lean();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Deletes a key or all keys for a given user identified by userId, optionally based on a specified name.
|
|
109
|
+
* @param params - The parameters object
|
|
110
|
+
* @param params.userId - The unique identifier for the user
|
|
111
|
+
* @param params.name - The name associated with the key to delete. If not provided and all is true, deletes all keys
|
|
112
|
+
* @param params.all - Whether to delete all keys for the user
|
|
113
|
+
* @returns The result of the deletion operation
|
|
114
|
+
* @description This function deletes a specific key or all keys for a user from the database.
|
|
115
|
+
* If a name is provided and all is false, it deletes only the key with that name.
|
|
116
|
+
* If all is true, it ignores the name and deletes all keys for the user.
|
|
117
|
+
*/
|
|
118
|
+
async function deleteUserKey(params) {
|
|
119
|
+
const { userId, name, all = false } = params;
|
|
120
|
+
const Key = mongoose.models.Key;
|
|
121
|
+
if (all) {
|
|
122
|
+
return await Key.deleteMany({ userId });
|
|
123
|
+
}
|
|
124
|
+
return await Key.findOneAndDelete({ userId, name }).lean();
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
getUserKey,
|
|
128
|
+
updateUserKey,
|
|
129
|
+
deleteUserKey,
|
|
130
|
+
getUserKeyValues,
|
|
131
|
+
getUserKeyExpiry,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
exports.createKeyMethods = createKeyMethods;
|
|
136
|
+
//# sourceMappingURL=key.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.cjs","sources":["../../src/methods/key.ts"],"sourcesContent":[null],"names":["ErrorTypes","decrypt","logger","encrypt"],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { ErrorTypes } from 'librechat-data-provider';
|
|
2
|
+
import { encrypt, decrypt } from '../crypto/index.es.js';
|
|
3
|
+
import logger from '../config/winston.es.js';
|
|
4
|
+
|
|
5
|
+
/** Factory function that takes mongoose instance and returns the key methods */
|
|
6
|
+
function createKeyMethods(mongoose) {
|
|
7
|
+
/**
|
|
8
|
+
* Retrieves and decrypts the key value for a given user identified by userId and identifier name.
|
|
9
|
+
* @param params - The parameters object
|
|
10
|
+
* @param params.userId - The unique identifier for the user
|
|
11
|
+
* @param params.name - The name associated with the key
|
|
12
|
+
* @returns The decrypted key value
|
|
13
|
+
* @throws Error if the key is not found or if there is a problem during key retrieval
|
|
14
|
+
* @description This function searches for a user's key in the database using their userId and name.
|
|
15
|
+
* If found, it decrypts the value of the key and returns it. If no key is found, it throws
|
|
16
|
+
* an error indicating that there is no user key available.
|
|
17
|
+
*/
|
|
18
|
+
async function getUserKey(params) {
|
|
19
|
+
const { userId, name } = params;
|
|
20
|
+
const Key = mongoose.models.Key;
|
|
21
|
+
const keyValue = (await Key.findOne({ userId, name }).lean());
|
|
22
|
+
if (!keyValue) {
|
|
23
|
+
throw new Error(JSON.stringify({
|
|
24
|
+
type: ErrorTypes.NO_USER_KEY,
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
return await decrypt(keyValue.value);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Retrieves, decrypts, and parses the key values for a given user identified by userId and name.
|
|
31
|
+
* @param params - The parameters object
|
|
32
|
+
* @param params.userId - The unique identifier for the user
|
|
33
|
+
* @param params.name - The name associated with the key
|
|
34
|
+
* @returns The decrypted and parsed key values
|
|
35
|
+
* @throws Error if the key is invalid or if there is a problem during key value parsing
|
|
36
|
+
* @description This function retrieves a user's encrypted key using their userId and name, decrypts it,
|
|
37
|
+
* and then attempts to parse the decrypted string into a JSON object. If the parsing fails,
|
|
38
|
+
* it throws an error indicating that the user key is invalid.
|
|
39
|
+
*/
|
|
40
|
+
async function getUserKeyValues(params) {
|
|
41
|
+
const { userId, name } = params;
|
|
42
|
+
const userValues = await getUserKey({ userId, name });
|
|
43
|
+
try {
|
|
44
|
+
return JSON.parse(userValues);
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
logger.error('[getUserKeyValues]', e);
|
|
48
|
+
throw new Error(JSON.stringify({
|
|
49
|
+
type: ErrorTypes.INVALID_USER_KEY,
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Retrieves the expiry information of a user's key identified by userId and name.
|
|
55
|
+
* @param params - The parameters object
|
|
56
|
+
* @param params.userId - The unique identifier for the user
|
|
57
|
+
* @param params.name - The name associated with the key
|
|
58
|
+
* @returns The expiry date of the key or null if the key doesn't exist
|
|
59
|
+
* @description This function fetches a user's key from the database using their userId and name and
|
|
60
|
+
* returns its expiry date. If the key is not found, it returns null for the expiry date.
|
|
61
|
+
*/
|
|
62
|
+
async function getUserKeyExpiry(params) {
|
|
63
|
+
const { userId, name } = params;
|
|
64
|
+
const Key = mongoose.models.Key;
|
|
65
|
+
const keyValue = (await Key.findOne({ userId, name }).lean());
|
|
66
|
+
if (!keyValue) {
|
|
67
|
+
return { expiresAt: null };
|
|
68
|
+
}
|
|
69
|
+
return { expiresAt: keyValue.expiresAt || 'never' };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Updates or inserts a new key for a given user identified by userId and name, with a specified value and expiry date.
|
|
73
|
+
* @param params - The parameters object
|
|
74
|
+
* @param params.userId - The unique identifier for the user
|
|
75
|
+
* @param params.name - The name associated with the key
|
|
76
|
+
* @param params.value - The value to be encrypted and stored as the key's value
|
|
77
|
+
* @param params.expiresAt - The expiry date for the key [optional]
|
|
78
|
+
* @returns The updated or newly inserted key document
|
|
79
|
+
* @description This function either updates an existing user key or inserts a new one into the database,
|
|
80
|
+
* after encrypting the provided value. It sets the provided expiry date for the key (or unsets for no expiry).
|
|
81
|
+
*/
|
|
82
|
+
async function updateUserKey(params) {
|
|
83
|
+
const { userId, name, value, expiresAt = null } = params;
|
|
84
|
+
const Key = mongoose.models.Key;
|
|
85
|
+
const encryptedValue = await encrypt(value);
|
|
86
|
+
const updateObject = {
|
|
87
|
+
userId,
|
|
88
|
+
name,
|
|
89
|
+
value: encryptedValue,
|
|
90
|
+
};
|
|
91
|
+
const updateQuery = {
|
|
92
|
+
$set: updateObject,
|
|
93
|
+
};
|
|
94
|
+
if (expiresAt) {
|
|
95
|
+
updateObject.expiresAt = new Date(expiresAt);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
updateQuery.$unset = { expiresAt: '' };
|
|
99
|
+
}
|
|
100
|
+
return await Key.findOneAndUpdate({ userId, name }, updateQuery, {
|
|
101
|
+
upsert: true,
|
|
102
|
+
new: true,
|
|
103
|
+
}).lean();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Deletes a key or all keys for a given user identified by userId, optionally based on a specified name.
|
|
107
|
+
* @param params - The parameters object
|
|
108
|
+
* @param params.userId - The unique identifier for the user
|
|
109
|
+
* @param params.name - The name associated with the key to delete. If not provided and all is true, deletes all keys
|
|
110
|
+
* @param params.all - Whether to delete all keys for the user
|
|
111
|
+
* @returns The result of the deletion operation
|
|
112
|
+
* @description This function deletes a specific key or all keys for a user from the database.
|
|
113
|
+
* If a name is provided and all is false, it deletes only the key with that name.
|
|
114
|
+
* If all is true, it ignores the name and deletes all keys for the user.
|
|
115
|
+
*/
|
|
116
|
+
async function deleteUserKey(params) {
|
|
117
|
+
const { userId, name, all = false } = params;
|
|
118
|
+
const Key = mongoose.models.Key;
|
|
119
|
+
if (all) {
|
|
120
|
+
return await Key.deleteMany({ userId });
|
|
121
|
+
}
|
|
122
|
+
return await Key.findOneAndDelete({ userId, name }).lean();
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
getUserKey,
|
|
126
|
+
updateUserKey,
|
|
127
|
+
deleteUserKey,
|
|
128
|
+
getUserKeyValues,
|
|
129
|
+
getUserKeyExpiry,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { createKeyMethods };
|
|
134
|
+
//# sourceMappingURL=key.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.es.js","sources":["../../src/methods/key.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var winston = require('../config/winston.cjs');
|
|
4
|
+
var nanoid = require('nanoid');
|
|
5
|
+
|
|
6
|
+
const NORMALIZED_LIMIT_DEFAULT = 20;
|
|
7
|
+
const MAX_CREATE_RETRIES = 5;
|
|
8
|
+
const RETRY_BASE_DELAY_MS = 25;
|
|
9
|
+
/**
|
|
10
|
+
* Helper to check if an error is a MongoDB duplicate key error.
|
|
11
|
+
* Since serverName is the only unique index on MCPServer, any E11000 error
|
|
12
|
+
* during creation is necessarily a serverName collision.
|
|
13
|
+
*/
|
|
14
|
+
function isDuplicateKeyError(error) {
|
|
15
|
+
if (error && typeof error === 'object' && 'code' in error) {
|
|
16
|
+
const mongoError = error;
|
|
17
|
+
return mongoError.code === 11000;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Escapes special regex characters in a string so they are treated literally.
|
|
23
|
+
*/
|
|
24
|
+
function escapeRegex(str) {
|
|
25
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generates a URL-friendly server name from a title.
|
|
29
|
+
* Converts to lowercase, replaces spaces with hyphens, removes special characters.
|
|
30
|
+
*/
|
|
31
|
+
function generateServerNameFromTitle(title) {
|
|
32
|
+
const slug = title
|
|
33
|
+
.toLowerCase()
|
|
34
|
+
.trim()
|
|
35
|
+
.replace(/[^a-z0-9\s-]/g, '') // Remove special chars except spaces and hyphens
|
|
36
|
+
.replace(/\s+/g, '-') // Replace spaces with hyphens
|
|
37
|
+
.replace(/-+/g, '-') // Remove consecutive hyphens
|
|
38
|
+
.replace(/^-|-$/g, ''); // Trim leading/trailing hyphens
|
|
39
|
+
return slug || 'mcp-server'; // Fallback if empty
|
|
40
|
+
}
|
|
41
|
+
function createMCPServerMethods(mongoose) {
|
|
42
|
+
/**
|
|
43
|
+
* Finds the next available server name by checking for duplicates.
|
|
44
|
+
* If baseName exists, returns baseName-2, baseName-3, etc.
|
|
45
|
+
*/
|
|
46
|
+
async function findNextAvailableServerName(baseName) {
|
|
47
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
48
|
+
// Find all servers with matching base name pattern (baseName or baseName-N)
|
|
49
|
+
const escapedBaseName = escapeRegex(baseName);
|
|
50
|
+
const existing = await MCPServer.find({
|
|
51
|
+
serverName: { $regex: `^${escapedBaseName}(-\\d+)?$` },
|
|
52
|
+
})
|
|
53
|
+
.select('serverName')
|
|
54
|
+
.lean();
|
|
55
|
+
if (existing.length === 0) {
|
|
56
|
+
return baseName;
|
|
57
|
+
}
|
|
58
|
+
// Extract numbers from existing names
|
|
59
|
+
const numbers = existing.map((s) => {
|
|
60
|
+
const match = s.serverName.match(/-(\d+)$/);
|
|
61
|
+
return match ? parseInt(match[1], 10) : 1;
|
|
62
|
+
});
|
|
63
|
+
const maxNumber = Math.max(...numbers);
|
|
64
|
+
return `${baseName}-${maxNumber + 1}`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a new MCP server with retry logic for handling race conditions.
|
|
68
|
+
* When multiple requests try to create servers with the same title simultaneously,
|
|
69
|
+
* they may get the same serverName from findNextAvailableServerName() before any
|
|
70
|
+
* creates the record (TOCTOU race condition). This is handled by retrying with
|
|
71
|
+
* exponential backoff when a duplicate key error occurs.
|
|
72
|
+
* @param data - Object containing config (with title, description, url, etc.) and author
|
|
73
|
+
* @returns The created MCP server document
|
|
74
|
+
*/
|
|
75
|
+
async function createMCPServer(data) {
|
|
76
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
77
|
+
let lastError;
|
|
78
|
+
for (let attempt = 0; attempt < MAX_CREATE_RETRIES; attempt++) {
|
|
79
|
+
try {
|
|
80
|
+
// Generate serverName from title, with fallback to nanoid if no title
|
|
81
|
+
// Important: regenerate on each attempt to get fresh available name
|
|
82
|
+
let serverName;
|
|
83
|
+
if (data.config.title) {
|
|
84
|
+
const baseSlug = generateServerNameFromTitle(data.config.title);
|
|
85
|
+
serverName = await findNextAvailableServerName(baseSlug);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
serverName = `mcp-${nanoid.nanoid(16)}`;
|
|
89
|
+
}
|
|
90
|
+
const newServer = await MCPServer.create({
|
|
91
|
+
serverName,
|
|
92
|
+
config: data.config,
|
|
93
|
+
author: data.author,
|
|
94
|
+
});
|
|
95
|
+
return newServer.toObject();
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
lastError = error;
|
|
99
|
+
// Only retry on duplicate key errors (serverName collision)
|
|
100
|
+
if (isDuplicateKeyError(error) && attempt < MAX_CREATE_RETRIES - 1) {
|
|
101
|
+
// Exponential backoff: 10ms, 20ms, 40ms
|
|
102
|
+
const delay = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);
|
|
103
|
+
winston.debug(`[createMCPServer] Duplicate serverName detected, retrying (attempt ${attempt + 2}/${MAX_CREATE_RETRIES}) after ${delay}ms`);
|
|
104
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// Not a duplicate key error or out of retries - throw immediately
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Should not reach here, but TypeScript requires a return
|
|
112
|
+
throw lastError;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Find an MCP server by serverName
|
|
116
|
+
* @param serverName - The unique server name identifier
|
|
117
|
+
* @returns The MCP server document or null
|
|
118
|
+
*/
|
|
119
|
+
async function findMCPServerByServerName(serverName) {
|
|
120
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
121
|
+
return await MCPServer.findOne({ serverName }).lean();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Find an MCP server by MongoDB ObjectId
|
|
125
|
+
* @param _id - The MongoDB ObjectId
|
|
126
|
+
* @returns The MCP server document or null
|
|
127
|
+
*/
|
|
128
|
+
async function findMCPServerByObjectId(_id) {
|
|
129
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
130
|
+
return await MCPServer.findById(_id).lean();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Find MCP servers by author
|
|
134
|
+
* @param authorId - The author's ObjectId or string
|
|
135
|
+
* @returns Array of MCP server documents
|
|
136
|
+
*/
|
|
137
|
+
async function findMCPServersByAuthor(authorId) {
|
|
138
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
139
|
+
return await MCPServer.find({ author: authorId }).sort({ updatedAt: -1 }).lean();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get a paginated list of MCP servers by IDs with filtering and search
|
|
143
|
+
* @param ids - Array of ObjectIds to include
|
|
144
|
+
* @param otherParams - Additional filter parameters (e.g., search)
|
|
145
|
+
* @param limit - Page size limit (null for no pagination)
|
|
146
|
+
* @param after - Cursor for pagination
|
|
147
|
+
* @returns Paginated list of MCP servers
|
|
148
|
+
*/
|
|
149
|
+
async function getListMCPServersByIds({ ids = [], otherParams = {}, limit = null, after = null, }) {
|
|
150
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
151
|
+
const isPaginated = limit !== null && limit !== undefined;
|
|
152
|
+
const normalizedLimit = isPaginated
|
|
153
|
+
? Math.min(Math.max(1, parseInt(String(limit)) || NORMALIZED_LIMIT_DEFAULT), 100)
|
|
154
|
+
: null;
|
|
155
|
+
// Build base query combining accessible servers with other filters
|
|
156
|
+
const baseQuery = { ...otherParams, _id: { $in: ids } };
|
|
157
|
+
// Add cursor condition
|
|
158
|
+
if (after) {
|
|
159
|
+
try {
|
|
160
|
+
const cursor = JSON.parse(Buffer.from(after, 'base64').toString('utf8'));
|
|
161
|
+
const { updatedAt, _id } = cursor;
|
|
162
|
+
const cursorCondition = {
|
|
163
|
+
$or: [
|
|
164
|
+
{ updatedAt: { $lt: new Date(updatedAt) } },
|
|
165
|
+
{ updatedAt: new Date(updatedAt), _id: { $gt: new mongoose.Types.ObjectId(_id) } },
|
|
166
|
+
],
|
|
167
|
+
};
|
|
168
|
+
// Merge cursor condition with base query
|
|
169
|
+
if (Object.keys(baseQuery).length > 0) {
|
|
170
|
+
baseQuery.$and = [{ ...baseQuery }, cursorCondition];
|
|
171
|
+
// Remove the original conditions from baseQuery to avoid duplication
|
|
172
|
+
Object.keys(baseQuery).forEach((key) => {
|
|
173
|
+
if (key !== '$and') {
|
|
174
|
+
delete baseQuery[key];
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
// Invalid cursor, ignore
|
|
181
|
+
winston.warn('[getListMCPServersByIds] Invalid cursor provided', error);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (normalizedLimit === null) {
|
|
185
|
+
// No pagination - return all matching servers
|
|
186
|
+
const servers = await MCPServer.find(baseQuery).sort({ updatedAt: -1, _id: 1 }).lean();
|
|
187
|
+
return {
|
|
188
|
+
data: servers,
|
|
189
|
+
has_more: false,
|
|
190
|
+
after: null,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// Paginated query - assign to const to help TypeScript
|
|
194
|
+
const servers = await MCPServer.find(baseQuery)
|
|
195
|
+
.sort({ updatedAt: -1, _id: 1 })
|
|
196
|
+
.limit(normalizedLimit + 1)
|
|
197
|
+
.lean();
|
|
198
|
+
const hasMore = servers.length > normalizedLimit;
|
|
199
|
+
const data = hasMore ? servers.slice(0, normalizedLimit) : servers;
|
|
200
|
+
let nextCursor = null;
|
|
201
|
+
if (hasMore && data.length > 0) {
|
|
202
|
+
const lastItem = data[data.length - 1];
|
|
203
|
+
nextCursor = Buffer.from(JSON.stringify({
|
|
204
|
+
updatedAt: lastItem.updatedAt,
|
|
205
|
+
_id: lastItem._id,
|
|
206
|
+
})).toString('base64');
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
data,
|
|
210
|
+
has_more: hasMore,
|
|
211
|
+
after: nextCursor,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Update an MCP server
|
|
216
|
+
* @param serverName - The MCP server ID
|
|
217
|
+
* @param updateData - Object containing config to update
|
|
218
|
+
* @returns The updated MCP server document or null
|
|
219
|
+
*/
|
|
220
|
+
async function updateMCPServer(serverName, updateData) {
|
|
221
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
222
|
+
return await MCPServer.findOneAndUpdate({ serverName }, { $set: updateData }, { new: true, runValidators: true }).lean();
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Delete an MCP server
|
|
226
|
+
* @param serverName - The MCP server ID
|
|
227
|
+
* @returns The deleted MCP server document or null
|
|
228
|
+
*/
|
|
229
|
+
async function deleteMCPServer(serverName) {
|
|
230
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
231
|
+
return await MCPServer.findOneAndDelete({ serverName }).lean();
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get MCP servers by their serverName strings
|
|
235
|
+
* @param names - Array of serverName strings to fetch
|
|
236
|
+
* @returns Object containing array of MCP server documents
|
|
237
|
+
*/
|
|
238
|
+
async function getListMCPServersByNames({ names = [] }) {
|
|
239
|
+
if (names.length === 0) {
|
|
240
|
+
return { data: [] };
|
|
241
|
+
}
|
|
242
|
+
const MCPServer = mongoose.models.MCPServer;
|
|
243
|
+
const servers = await MCPServer.find({ serverName: { $in: names } }).lean();
|
|
244
|
+
return { data: servers };
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
createMCPServer,
|
|
248
|
+
findMCPServerByServerName,
|
|
249
|
+
findMCPServerByObjectId,
|
|
250
|
+
findMCPServersByAuthor,
|
|
251
|
+
getListMCPServersByIds,
|
|
252
|
+
getListMCPServersByNames,
|
|
253
|
+
updateMCPServer,
|
|
254
|
+
deleteMCPServer,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
exports.createMCPServerMethods = createMCPServerMethods;
|
|
259
|
+
//# sourceMappingURL=mcpServer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpServer.cjs","sources":["../../src/methods/mcpServer.ts"],"sourcesContent":[null],"names":["nanoid","logger"],"mappings":"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"}
|