@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,545 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { parseTextParts } from 'librechat-data-provider';
|
|
3
|
+
import { MeiliSearch, MeiliSearchTimeOutError } from 'meilisearch';
|
|
4
|
+
import logger from '../../config/meiliLogger.es.js';
|
|
5
|
+
|
|
6
|
+
// Environment flags
|
|
7
|
+
/**
|
|
8
|
+
* Flag to indicate if search is enabled based on environment variables.
|
|
9
|
+
*/
|
|
10
|
+
const searchEnabled = process.env.SEARCH != null && process.env.SEARCH.toLowerCase() === 'true';
|
|
11
|
+
/**
|
|
12
|
+
* Flag to indicate if MeiliSearch is enabled based on required environment variables.
|
|
13
|
+
*/
|
|
14
|
+
const meiliEnabled = process.env.MEILI_HOST != null && process.env.MEILI_MASTER_KEY != null && searchEnabled;
|
|
15
|
+
/**
|
|
16
|
+
* Get sync configuration from environment variables
|
|
17
|
+
*/
|
|
18
|
+
const getSyncConfig = () => ({
|
|
19
|
+
batchSize: parseInt(process.env.MEILI_SYNC_BATCH_SIZE || '100', 10),
|
|
20
|
+
delayMs: parseInt(process.env.MEILI_SYNC_DELAY_MS || '100', 10),
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Validates the required options for configuring the mongoMeili plugin.
|
|
24
|
+
*/
|
|
25
|
+
const validateOptions = (options) => {
|
|
26
|
+
const requiredKeys = ['host', 'apiKey', 'indexName'];
|
|
27
|
+
requiredKeys.forEach((key) => {
|
|
28
|
+
if (!options[key]) {
|
|
29
|
+
throw new Error(`Missing mongoMeili Option: ${key}`);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Helper function to process documents in batches with rate limiting
|
|
35
|
+
*/
|
|
36
|
+
const processBatch = async (items, batchSize, delayMs, processor) => {
|
|
37
|
+
for (let i = 0; i < items.length; i += batchSize) {
|
|
38
|
+
const batch = items.slice(i, i + batchSize);
|
|
39
|
+
await processor(batch);
|
|
40
|
+
// Add delay between batches to prevent overwhelming resources
|
|
41
|
+
if (i + batchSize < items.length && delayMs > 0) {
|
|
42
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Factory function to create a MeiliMongooseModel class which extends a Mongoose model.
|
|
48
|
+
* This class contains static and instance methods to synchronize and manage the MeiliSearch index
|
|
49
|
+
* corresponding to the MongoDB collection.
|
|
50
|
+
*
|
|
51
|
+
* @param config - Configuration object.
|
|
52
|
+
* @param config.index - The MeiliSearch index object.
|
|
53
|
+
* @param config.attributesToIndex - List of attributes to index.
|
|
54
|
+
* @param config.syncOptions - Sync configuration options.
|
|
55
|
+
* @returns A class definition that will be loaded into the Mongoose schema.
|
|
56
|
+
*/
|
|
57
|
+
const createMeiliMongooseModel = ({ index, attributesToIndex, syncOptions, }) => {
|
|
58
|
+
const primaryKey = attributesToIndex[0];
|
|
59
|
+
const syncConfig = { ...getSyncConfig(), ...syncOptions };
|
|
60
|
+
class MeiliMongooseModel {
|
|
61
|
+
/**
|
|
62
|
+
* Get the current sync progress
|
|
63
|
+
*/
|
|
64
|
+
static async getSyncProgress() {
|
|
65
|
+
const totalDocuments = await this.countDocuments({ expiredAt: null });
|
|
66
|
+
const indexedDocuments = await this.countDocuments({ expiredAt: null, _meiliIndex: true });
|
|
67
|
+
return {
|
|
68
|
+
totalProcessed: indexedDocuments,
|
|
69
|
+
totalDocuments,
|
|
70
|
+
isComplete: indexedDocuments === totalDocuments,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Synchronizes data between the MongoDB collection and the MeiliSearch index by
|
|
75
|
+
* incrementally indexing only documents where `expiredAt` is `null` and `_meiliIndex` is not `true`
|
|
76
|
+
* (i.e., non-expired documents that have not yet been indexed, including those with missing or null `_meiliIndex`).
|
|
77
|
+
* */
|
|
78
|
+
static async syncWithMeili() {
|
|
79
|
+
const startTime = Date.now();
|
|
80
|
+
const { batchSize, delayMs } = syncConfig;
|
|
81
|
+
const collectionName = primaryKey === 'messageId' ? 'messages' : 'conversations';
|
|
82
|
+
logger.info(`[syncWithMeili] Starting sync for ${collectionName} with batch size ${batchSize}`);
|
|
83
|
+
// Get approximate total count for raw estimation, the sync should not overcome this number
|
|
84
|
+
const approxTotalCount = await this.estimatedDocumentCount();
|
|
85
|
+
logger.info(`[syncWithMeili] Approximate total number of all ${collectionName}: ${approxTotalCount}`);
|
|
86
|
+
try {
|
|
87
|
+
// First, handle documents that need to be removed from Meili
|
|
88
|
+
logger.info(`[syncWithMeili] Starting cleanup of Meili index ${index.uid} before sync`);
|
|
89
|
+
await this.cleanupMeiliIndex(index, primaryKey, batchSize, delayMs);
|
|
90
|
+
logger.info(`[syncWithMeili] Completed cleanup of Meili index: ${index.uid}`);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logger.error('[syncWithMeili] Error during cleanup Meili before sync:', error);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
let processedCount = 0;
|
|
97
|
+
let hasMore = true;
|
|
98
|
+
while (hasMore) {
|
|
99
|
+
const query = {
|
|
100
|
+
expiredAt: null,
|
|
101
|
+
_meiliIndex: { $ne: true },
|
|
102
|
+
};
|
|
103
|
+
try {
|
|
104
|
+
const documents = await this.find(query)
|
|
105
|
+
.select(attributesToIndex.join(' ') + ' _meiliIndex')
|
|
106
|
+
.limit(batchSize)
|
|
107
|
+
.lean();
|
|
108
|
+
// Check if there are more documents to process
|
|
109
|
+
if (documents.length === 0) {
|
|
110
|
+
logger.info('[syncWithMeili] No more documents to process');
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
// Process the batch
|
|
114
|
+
await this.processSyncBatch(index, documents);
|
|
115
|
+
processedCount += documents.length;
|
|
116
|
+
logger.info(`[syncWithMeili] Processed: ${processedCount}`);
|
|
117
|
+
if (documents.length < batchSize) {
|
|
118
|
+
hasMore = false;
|
|
119
|
+
}
|
|
120
|
+
// Add delay to prevent overwhelming resources
|
|
121
|
+
if (hasMore && delayMs > 0) {
|
|
122
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
logger.error('[syncWithMeili] Error processing documents batch:', error);
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const duration = Date.now() - startTime;
|
|
131
|
+
logger.info(`[syncWithMeili] Completed sync for ${collectionName}. Processed ${processedCount} documents in ${duration}ms`);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Process a batch of documents for syncing
|
|
135
|
+
*/
|
|
136
|
+
static async processSyncBatch(index, documents) {
|
|
137
|
+
if (documents.length === 0) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Format documents for MeiliSearch
|
|
141
|
+
const formattedDocs = documents.map((doc) => _.omitBy(_.pick(doc, attributesToIndex), (_v, k) => k.startsWith('$')));
|
|
142
|
+
try {
|
|
143
|
+
// Add documents to MeiliSearch
|
|
144
|
+
await index.addDocumentsInBatches(formattedDocs);
|
|
145
|
+
// Update MongoDB to mark documents as indexed.
|
|
146
|
+
// { timestamps: false } prevents Mongoose from touching updatedAt, preserving
|
|
147
|
+
// original conversation/message timestamps (fixes sidebar chronological sort).
|
|
148
|
+
const docsIds = documents.map((doc) => doc._id);
|
|
149
|
+
await this.updateMany({ _id: { $in: docsIds } }, { $set: { _meiliIndex: true } }, { timestamps: false });
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
logger.error('[processSyncBatch] Error processing batch:', error);
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Clean up documents in MeiliSearch that no longer exist in MongoDB
|
|
158
|
+
*/
|
|
159
|
+
static async cleanupMeiliIndex(index, primaryKey, batchSize, delayMs) {
|
|
160
|
+
try {
|
|
161
|
+
let offset = 0;
|
|
162
|
+
let moreDocuments = true;
|
|
163
|
+
while (moreDocuments) {
|
|
164
|
+
const batch = await index.getDocuments({ limit: batchSize, offset });
|
|
165
|
+
if (batch.results.length === 0) {
|
|
166
|
+
moreDocuments = false;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
const meiliIds = batch.results.map((doc) => doc[primaryKey]);
|
|
170
|
+
const query = {};
|
|
171
|
+
query[primaryKey] = { $in: meiliIds };
|
|
172
|
+
// Find which documents exist in MongoDB
|
|
173
|
+
const existingDocs = await this.find(query).select(primaryKey).lean();
|
|
174
|
+
const existingIds = new Set(existingDocs.map((doc) => doc[primaryKey]));
|
|
175
|
+
// Delete documents that don't exist in MongoDB
|
|
176
|
+
const toDelete = meiliIds.filter((id) => !existingIds.has(id));
|
|
177
|
+
if (toDelete.length > 0) {
|
|
178
|
+
await index.deleteDocuments(toDelete.map(String));
|
|
179
|
+
logger.debug(`[cleanupMeiliIndex] Deleted ${toDelete.length} orphaned documents`);
|
|
180
|
+
}
|
|
181
|
+
// if fetch documents request returns less documents than limit, all documents are processed
|
|
182
|
+
if (batch.results.length < batchSize) {
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
offset += batchSize - toDelete.length;
|
|
186
|
+
// Add delay between batches
|
|
187
|
+
if (delayMs > 0) {
|
|
188
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
logger.error('[cleanupMeiliIndex] Error during cleanup:', error);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Updates settings for the MeiliSearch index
|
|
198
|
+
*/
|
|
199
|
+
static async setMeiliIndexSettings(settings) {
|
|
200
|
+
return await index.updateSettings(settings);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Searches the MeiliSearch index and optionally populates results
|
|
204
|
+
*/
|
|
205
|
+
static async meiliSearch(q, params, populate) {
|
|
206
|
+
const data = await index.search(q, params);
|
|
207
|
+
if (populate) {
|
|
208
|
+
const query = {};
|
|
209
|
+
query[primaryKey] = _.map(data.hits, (hit) => hit[primaryKey]);
|
|
210
|
+
const projection = Object.keys(this.schema.obj).reduce((results, key) => {
|
|
211
|
+
if (!key.startsWith('$')) {
|
|
212
|
+
results[key] = 1;
|
|
213
|
+
}
|
|
214
|
+
return results;
|
|
215
|
+
}, { _id: 1, __v: 1 });
|
|
216
|
+
const hitsFromMongoose = await this.find(query, projection).lean();
|
|
217
|
+
const populatedHits = data.hits.map((hit) => {
|
|
218
|
+
hit[primaryKey];
|
|
219
|
+
const originalHit = _.find(hitsFromMongoose, (item) => {
|
|
220
|
+
const typedItem = item;
|
|
221
|
+
return typedItem[primaryKey] === hit[primaryKey];
|
|
222
|
+
});
|
|
223
|
+
return {
|
|
224
|
+
...(originalHit && typeof originalHit === 'object' ? originalHit : {}),
|
|
225
|
+
...hit,
|
|
226
|
+
};
|
|
227
|
+
});
|
|
228
|
+
data.hits = populatedHits;
|
|
229
|
+
}
|
|
230
|
+
return data;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Preprocesses the current document for indexing
|
|
234
|
+
*/
|
|
235
|
+
preprocessObjectForIndex() {
|
|
236
|
+
const object = _.omitBy(_.pick(this.toJSON(), attributesToIndex), (v, k) => k.startsWith('$'));
|
|
237
|
+
if (object.conversationId &&
|
|
238
|
+
typeof object.conversationId === 'string' &&
|
|
239
|
+
object.conversationId.includes('|')) {
|
|
240
|
+
object.conversationId = object.conversationId.replace(/\|/g, '--');
|
|
241
|
+
}
|
|
242
|
+
if (object.content && Array.isArray(object.content)) {
|
|
243
|
+
object.text = parseTextParts(object.content);
|
|
244
|
+
delete object.content;
|
|
245
|
+
}
|
|
246
|
+
return object;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Adds the current document to the MeiliSearch index with retry logic
|
|
250
|
+
*/
|
|
251
|
+
async addObjectToMeili(next) {
|
|
252
|
+
// If this conversation or message has a TTL, don't index it
|
|
253
|
+
if (!_.isNil(this.expiredAt)) {
|
|
254
|
+
return next();
|
|
255
|
+
}
|
|
256
|
+
const object = this.preprocessObjectForIndex();
|
|
257
|
+
const maxRetries = 3;
|
|
258
|
+
let retryCount = 0;
|
|
259
|
+
while (retryCount < maxRetries) {
|
|
260
|
+
try {
|
|
261
|
+
await index.addDocuments([object]);
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
retryCount++;
|
|
266
|
+
if (retryCount >= maxRetries) {
|
|
267
|
+
logger.error('[addObjectToMeili] Error adding document to Meili after retries:', error);
|
|
268
|
+
return next();
|
|
269
|
+
}
|
|
270
|
+
// Exponential backoff
|
|
271
|
+
await new Promise((resolve) => setTimeout(resolve, Math.pow(2, retryCount) * 1000));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
try {
|
|
275
|
+
await this.collection.updateMany({ _id: this._id }, { $set: { _meiliIndex: true } });
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
logger.error('[addObjectToMeili] Error updating _meiliIndex field:', error);
|
|
279
|
+
return next();
|
|
280
|
+
}
|
|
281
|
+
next();
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Updates the current document in the MeiliSearch index
|
|
285
|
+
*/
|
|
286
|
+
async updateObjectToMeili(next) {
|
|
287
|
+
try {
|
|
288
|
+
const object = _.omitBy(_.pick(this.toJSON(), attributesToIndex), (v, k) => k.startsWith('$'));
|
|
289
|
+
await index.updateDocuments([object]);
|
|
290
|
+
next();
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
logger.error('[updateObjectToMeili] Error updating document in Meili:', error);
|
|
294
|
+
return next();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Deletes the current document from the MeiliSearch index.
|
|
299
|
+
*
|
|
300
|
+
* @returns {Promise<void>}
|
|
301
|
+
*/
|
|
302
|
+
async deleteObjectFromMeili(next) {
|
|
303
|
+
try {
|
|
304
|
+
await index.deleteDocument(this._id);
|
|
305
|
+
next();
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
logger.error('[deleteObjectFromMeili] Error deleting document from Meili:', error);
|
|
309
|
+
return next();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Post-save hook to synchronize the document with MeiliSearch.
|
|
314
|
+
*
|
|
315
|
+
* If the document is already indexed (i.e. `_meiliIndex` is true), it updates it;
|
|
316
|
+
* otherwise, it adds the document to the index.
|
|
317
|
+
*/
|
|
318
|
+
postSaveHook(next) {
|
|
319
|
+
if (this._meiliIndex) {
|
|
320
|
+
this.updateObjectToMeili(next);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
this.addObjectToMeili(next);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Post-update hook to update the document in MeiliSearch.
|
|
328
|
+
*
|
|
329
|
+
* This hook is triggered after a document update, ensuring that changes are
|
|
330
|
+
* propagated to the MeiliSearch index if the document is indexed.
|
|
331
|
+
*/
|
|
332
|
+
postUpdateHook(next) {
|
|
333
|
+
if (this._meiliIndex) {
|
|
334
|
+
this.updateObjectToMeili(next);
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
next();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Post-remove hook to delete the document from MeiliSearch.
|
|
342
|
+
*
|
|
343
|
+
* This hook is triggered after a document is removed, ensuring that the document
|
|
344
|
+
* is also removed from the MeiliSearch index if it was previously indexed.
|
|
345
|
+
*/
|
|
346
|
+
postRemoveHook(next) {
|
|
347
|
+
if (this._meiliIndex) {
|
|
348
|
+
this.deleteObjectFromMeili(next);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
next();
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return MeiliMongooseModel;
|
|
356
|
+
};
|
|
357
|
+
/**
|
|
358
|
+
* Mongoose plugin to synchronize MongoDB collections with a MeiliSearch index.
|
|
359
|
+
*
|
|
360
|
+
* This plugin:
|
|
361
|
+
* - Validates the provided options.
|
|
362
|
+
* - Adds a `_meiliIndex` field to the schema to track indexing status.
|
|
363
|
+
* - Sets up a MeiliSearch client and creates an index if it doesn't already exist.
|
|
364
|
+
* - Loads class methods for syncing, searching, and managing documents in MeiliSearch.
|
|
365
|
+
* - Registers Mongoose hooks (post-save, post-update, post-remove, etc.) to maintain index consistency.
|
|
366
|
+
*
|
|
367
|
+
* @param schema - The Mongoose schema to which the plugin is applied.
|
|
368
|
+
* @param options - Configuration options.
|
|
369
|
+
* @param options.host - The MeiliSearch host.
|
|
370
|
+
* @param options.apiKey - The MeiliSearch API key.
|
|
371
|
+
* @param options.indexName - The name of the MeiliSearch index.
|
|
372
|
+
* @param options.primaryKey - The primary key field for indexing.
|
|
373
|
+
* @param options.syncBatchSize - Batch size for sync operations.
|
|
374
|
+
* @param options.syncDelayMs - Delay between batches in milliseconds.
|
|
375
|
+
*/
|
|
376
|
+
function mongoMeili(schema, options) {
|
|
377
|
+
const mongoose = options.mongoose;
|
|
378
|
+
validateOptions(options);
|
|
379
|
+
// Add _meiliIndex field to the schema to track if a document has been indexed in MeiliSearch.
|
|
380
|
+
schema.add({
|
|
381
|
+
_meiliIndex: {
|
|
382
|
+
type: Boolean,
|
|
383
|
+
required: false,
|
|
384
|
+
select: false,
|
|
385
|
+
default: false,
|
|
386
|
+
},
|
|
387
|
+
});
|
|
388
|
+
const { host, apiKey, indexName, primaryKey } = options;
|
|
389
|
+
const syncOptions = {
|
|
390
|
+
batchSize: options.syncBatchSize || getSyncConfig().batchSize,
|
|
391
|
+
delayMs: options.syncDelayMs || getSyncConfig().delayMs,
|
|
392
|
+
};
|
|
393
|
+
const client = new MeiliSearch({ host, apiKey });
|
|
394
|
+
/** Create index only if it doesn't exist */
|
|
395
|
+
const index = client.index(indexName);
|
|
396
|
+
(async () => {
|
|
397
|
+
try {
|
|
398
|
+
await index.getRawInfo();
|
|
399
|
+
logger.debug(`[mongoMeili] Index ${indexName} already exists`);
|
|
400
|
+
}
|
|
401
|
+
catch (error) {
|
|
402
|
+
const errorCode = error === null || error === void 0 ? void 0 : error.code;
|
|
403
|
+
if (errorCode === 'index_not_found') {
|
|
404
|
+
try {
|
|
405
|
+
logger.info(`[mongoMeili] Creating new index: ${indexName}`);
|
|
406
|
+
const enqueued = await client.createIndex(indexName, { primaryKey });
|
|
407
|
+
const task = await client.waitForTask(enqueued.taskUid, {
|
|
408
|
+
timeOutMs: 10000,
|
|
409
|
+
intervalMs: 100,
|
|
410
|
+
});
|
|
411
|
+
logger.debug(`[mongoMeili] Index ${indexName} creation task:`, task);
|
|
412
|
+
if (task.status !== 'succeeded') {
|
|
413
|
+
const taskError = task.error;
|
|
414
|
+
if ((taskError === null || taskError === void 0 ? void 0 : taskError.code) === 'index_already_exists') {
|
|
415
|
+
logger.debug(`[mongoMeili] Index ${indexName} was created by another instance`);
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
logger.warn(`[mongoMeili] Index ${indexName} creation failed:`, taskError);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
logger.info(`[mongoMeili] Successfully created index: ${indexName}`);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
catch (createError) {
|
|
426
|
+
if (createError instanceof MeiliSearchTimeOutError) {
|
|
427
|
+
logger.warn(`[mongoMeili] Timed out waiting for index ${indexName} creation`);
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
logger.warn(`[mongoMeili] Error creating index ${indexName}:`, createError);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
logger.error(`[mongoMeili] Error checking index ${indexName}:`, error);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
try {
|
|
439
|
+
await index.updateSettings({
|
|
440
|
+
filterableAttributes: ['user'],
|
|
441
|
+
});
|
|
442
|
+
logger.debug(`[mongoMeili] Updated index ${indexName} settings to make 'user' filterable`);
|
|
443
|
+
}
|
|
444
|
+
catch (settingsError) {
|
|
445
|
+
logger.error(`[mongoMeili] Error updating index settings for ${indexName}:`, settingsError);
|
|
446
|
+
}
|
|
447
|
+
})();
|
|
448
|
+
// Collect attributes from the schema that should be indexed
|
|
449
|
+
const attributesToIndex = [
|
|
450
|
+
...Object.entries(schema.obj).reduce((results, [key, value]) => {
|
|
451
|
+
const schemaValue = value;
|
|
452
|
+
return schemaValue.meiliIndex ? [...results, key] : results;
|
|
453
|
+
}, []),
|
|
454
|
+
];
|
|
455
|
+
// CRITICAL: Always include 'user' field for proper filtering
|
|
456
|
+
// This ensures existing deployments can filter by user after migration
|
|
457
|
+
if (schema.obj.user && !attributesToIndex.includes('user')) {
|
|
458
|
+
attributesToIndex.push('user');
|
|
459
|
+
logger.debug(`[mongoMeili] Added 'user' field to ${indexName} index attributes`);
|
|
460
|
+
}
|
|
461
|
+
schema.loadClass(createMeiliMongooseModel({ index, attributesToIndex, syncOptions }));
|
|
462
|
+
// Register Mongoose hooks
|
|
463
|
+
schema.post('save', function (doc, next) {
|
|
464
|
+
var _a;
|
|
465
|
+
(_a = doc.postSaveHook) === null || _a === void 0 ? void 0 : _a.call(doc, next);
|
|
466
|
+
});
|
|
467
|
+
schema.post('updateOne', function (doc, next) {
|
|
468
|
+
var _a;
|
|
469
|
+
(_a = doc.postUpdateHook) === null || _a === void 0 ? void 0 : _a.call(doc, next);
|
|
470
|
+
});
|
|
471
|
+
schema.post('deleteOne', function (doc, next) {
|
|
472
|
+
var _a;
|
|
473
|
+
(_a = doc.postRemoveHook) === null || _a === void 0 ? void 0 : _a.call(doc, next);
|
|
474
|
+
});
|
|
475
|
+
// Pre-deleteMany hook: remove corresponding documents from MeiliSearch when multiple documents are deleted.
|
|
476
|
+
schema.pre('deleteMany', async function (next) {
|
|
477
|
+
if (!meiliEnabled) {
|
|
478
|
+
return next();
|
|
479
|
+
}
|
|
480
|
+
try {
|
|
481
|
+
const conditions = this.getQuery();
|
|
482
|
+
const { batchSize, delayMs } = syncOptions;
|
|
483
|
+
if (Object.prototype.hasOwnProperty.call(schema.obj, 'messages')) {
|
|
484
|
+
const convoIndex = client.index('convos');
|
|
485
|
+
const deletedConvos = await mongoose
|
|
486
|
+
.model('Conversation')
|
|
487
|
+
.find(conditions)
|
|
488
|
+
.select('conversationId')
|
|
489
|
+
.lean();
|
|
490
|
+
// Process deletions in batches
|
|
491
|
+
await processBatch(deletedConvos, batchSize, delayMs, async (batch) => {
|
|
492
|
+
const promises = batch.map((convo) => convoIndex.deleteDocument(convo.conversationId));
|
|
493
|
+
await Promise.all(promises);
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
if (Object.prototype.hasOwnProperty.call(schema.obj, 'messageId')) {
|
|
497
|
+
const messageIndex = client.index('messages');
|
|
498
|
+
const deletedMessages = await mongoose
|
|
499
|
+
.model('Message')
|
|
500
|
+
.find(conditions)
|
|
501
|
+
.select('messageId')
|
|
502
|
+
.lean();
|
|
503
|
+
// Process deletions in batches
|
|
504
|
+
await processBatch(deletedMessages, batchSize, delayMs, async (batch) => {
|
|
505
|
+
const promises = batch.map((message) => messageIndex.deleteDocument(message.messageId));
|
|
506
|
+
await Promise.all(promises);
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
return next();
|
|
510
|
+
}
|
|
511
|
+
catch (error) {
|
|
512
|
+
if (meiliEnabled) {
|
|
513
|
+
logger.error('[MeiliMongooseModel.deleteMany] There was an issue deleting conversation indexes upon deletion. Next startup may trigger syncing.', error);
|
|
514
|
+
}
|
|
515
|
+
return next();
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
// Post-findOneAndUpdate hook
|
|
519
|
+
schema.post('findOneAndUpdate', async function (doc, next) {
|
|
520
|
+
var _a;
|
|
521
|
+
if (!meiliEnabled) {
|
|
522
|
+
return next();
|
|
523
|
+
}
|
|
524
|
+
if (doc.unfinished) {
|
|
525
|
+
return next();
|
|
526
|
+
}
|
|
527
|
+
let meiliDoc;
|
|
528
|
+
if (doc.messages) {
|
|
529
|
+
try {
|
|
530
|
+
meiliDoc = await client.index('convos').getDocument(doc.conversationId);
|
|
531
|
+
}
|
|
532
|
+
catch (error) {
|
|
533
|
+
logger.debug('[MeiliMongooseModel.findOneAndUpdate] Convo not found in MeiliSearch and will index ' +
|
|
534
|
+
doc.conversationId, error);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
if (meiliDoc && meiliDoc.title === doc.title) {
|
|
538
|
+
return next();
|
|
539
|
+
}
|
|
540
|
+
(_a = doc.postSaveHook) === null || _a === void 0 ? void 0 : _a.call(doc, next);
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
export { mongoMeili as default };
|
|
545
|
+
//# sourceMappingURL=mongoMeili.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoMeili.es.js","sources":["../../../src/models/plugins/mongoMeili.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|