@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.
Files changed (502) hide show
  1. package/dist/admin/capabilities.cjs +192 -0
  2. package/dist/admin/capabilities.cjs.map +1 -0
  3. package/dist/admin/capabilities.es.js +182 -0
  4. package/dist/admin/capabilities.es.js.map +1 -0
  5. package/dist/app/agents.cjs +24 -0
  6. package/dist/app/agents.cjs.map +1 -0
  7. package/dist/app/agents.es.js +22 -0
  8. package/dist/app/agents.es.js.map +1 -0
  9. package/dist/app/assistants.cjs +56 -0
  10. package/dist/app/assistants.cjs.map +1 -0
  11. package/dist/app/assistants.es.js +53 -0
  12. package/dist/app/assistants.es.js.map +1 -0
  13. package/dist/app/azure.cjs +61 -0
  14. package/dist/app/azure.cjs.map +1 -0
  15. package/dist/app/azure.es.js +59 -0
  16. package/dist/app/azure.es.js.map +1 -0
  17. package/dist/app/endpoints.cjs +63 -0
  18. package/dist/app/endpoints.cjs.map +1 -0
  19. package/dist/app/endpoints.es.js +61 -0
  20. package/dist/app/endpoints.es.js.map +1 -0
  21. package/dist/app/interface.cjs +53 -0
  22. package/dist/app/interface.cjs.map +1 -0
  23. package/dist/app/interface.es.js +51 -0
  24. package/dist/app/interface.es.js.map +1 -0
  25. package/dist/app/memory.cjs +29 -0
  26. package/dist/app/memory.cjs.map +1 -0
  27. package/dist/app/memory.es.js +26 -0
  28. package/dist/app/memory.es.js.map +1 -0
  29. package/dist/app/ocr.cjs +21 -0
  30. package/dist/app/ocr.cjs.map +1 -0
  31. package/dist/app/ocr.es.js +19 -0
  32. package/dist/app/ocr.es.js.map +1 -0
  33. package/dist/app/resolution.cjs +51 -0
  34. package/dist/app/resolution.cjs.map +1 -0
  35. package/dist/app/resolution.es.js +49 -0
  36. package/dist/app/resolution.es.js.map +1 -0
  37. package/dist/app/service.cjs +108 -0
  38. package/dist/app/service.cjs.map +1 -0
  39. package/dist/app/service.es.js +106 -0
  40. package/dist/app/service.es.js.map +1 -0
  41. package/dist/app/specs.cjs +71 -0
  42. package/dist/app/specs.cjs.map +1 -0
  43. package/dist/app/specs.es.js +69 -0
  44. package/dist/app/specs.es.js.map +1 -0
  45. package/dist/app/turnstile.cjs +40 -0
  46. package/dist/app/turnstile.cjs.map +1 -0
  47. package/dist/app/turnstile.es.js +38 -0
  48. package/dist/app/turnstile.es.js.map +1 -0
  49. package/dist/app/vertex.cjs +156 -0
  50. package/dist/app/vertex.cjs.map +1 -0
  51. package/dist/app/vertex.es.js +152 -0
  52. package/dist/app/vertex.es.js.map +1 -0
  53. package/dist/app/web.cjs +87 -0
  54. package/dist/app/web.cjs.map +1 -0
  55. package/dist/app/web.es.js +82 -0
  56. package/dist/app/web.es.js.map +1 -0
  57. package/dist/common/enum.cjs +19 -0
  58. package/dist/common/enum.cjs.map +1 -0
  59. package/dist/common/enum.es.js +19 -0
  60. package/dist/common/enum.es.js.map +1 -0
  61. package/dist/config/meiliLogger.cjs +57 -0
  62. package/dist/config/meiliLogger.cjs.map +1 -0
  63. package/dist/config/meiliLogger.es.js +55 -0
  64. package/dist/config/meiliLogger.es.js.map +1 -0
  65. package/dist/config/parsers.cjs +224 -0
  66. package/dist/config/parsers.cjs.map +1 -0
  67. package/dist/config/parsers.es.js +219 -0
  68. package/dist/config/parsers.es.js.map +1 -0
  69. package/dist/config/tenantContext.cjs +30 -0
  70. package/dist/config/tenantContext.cjs.map +1 -0
  71. package/dist/config/tenantContext.es.js +25 -0
  72. package/dist/config/tenantContext.es.js.map +1 -0
  73. package/dist/config/utils.cjs +37 -0
  74. package/dist/config/utils.cjs.map +1 -0
  75. package/dist/config/utils.es.js +35 -0
  76. package/dist/config/utils.es.js.map +1 -0
  77. package/dist/config/winston.cjs +93 -0
  78. package/dist/config/winston.cjs.map +1 -0
  79. package/dist/config/winston.es.js +91 -0
  80. package/dist/config/winston.es.js.map +1 -0
  81. package/dist/crypto/index.cjs +156 -0
  82. package/dist/crypto/index.cjs.map +1 -0
  83. package/dist/crypto/index.es.js +145 -0
  84. package/dist/crypto/index.es.js.map +1 -0
  85. package/dist/index.cjs +142 -11734
  86. package/dist/index.cjs.map +1 -1
  87. package/dist/index.es.js +52 -11652
  88. package/dist/index.es.js.map +1 -1
  89. package/dist/methods/accessRole.cjs +210 -0
  90. package/dist/methods/accessRole.cjs.map +1 -0
  91. package/dist/methods/accessRole.es.js +208 -0
  92. package/dist/methods/accessRole.es.js.map +1 -0
  93. package/dist/methods/aclEntry.cjs +361 -0
  94. package/dist/methods/aclEntry.cjs.map +1 -0
  95. package/dist/methods/aclEntry.es.js +359 -0
  96. package/dist/methods/aclEntry.es.js.map +1 -0
  97. package/dist/methods/action.cjs +59 -0
  98. package/dist/methods/action.cjs.map +1 -0
  99. package/dist/methods/action.es.js +57 -0
  100. package/dist/methods/action.es.js.map +1 -0
  101. package/dist/methods/agent.cjs +580 -0
  102. package/dist/methods/agent.cjs.map +1 -0
  103. package/dist/methods/agent.es.js +578 -0
  104. package/dist/methods/agent.es.js.map +1 -0
  105. package/dist/methods/agentApiKey.cjs +140 -0
  106. package/dist/methods/agentApiKey.cjs.map +1 -0
  107. package/dist/methods/agentApiKey.es.js +138 -0
  108. package/dist/methods/agentApiKey.es.js.map +1 -0
  109. package/dist/methods/agentCategory.cjs +226 -0
  110. package/dist/methods/agentCategory.cjs.map +1 -0
  111. package/dist/methods/agentCategory.es.js +224 -0
  112. package/dist/methods/agentCategory.es.js.map +1 -0
  113. package/dist/methods/assistant.cjs +53 -0
  114. package/dist/methods/assistant.cjs.map +1 -0
  115. package/dist/methods/assistant.es.js +51 -0
  116. package/dist/methods/assistant.es.js.map +1 -0
  117. package/dist/methods/banner.cjs +32 -0
  118. package/dist/methods/banner.cjs.map +1 -0
  119. package/dist/methods/banner.es.js +30 -0
  120. package/dist/methods/banner.es.js.map +1 -0
  121. package/dist/methods/categories.cjs +33 -0
  122. package/dist/methods/categories.cjs.map +1 -0
  123. package/dist/methods/categories.es.js +31 -0
  124. package/dist/methods/categories.es.js.map +1 -0
  125. package/dist/methods/config.cjs +106 -0
  126. package/dist/methods/config.cjs.map +1 -0
  127. package/dist/methods/config.es.js +104 -0
  128. package/dist/methods/config.es.js.map +1 -0
  129. package/dist/methods/conversation.cjs +344 -0
  130. package/dist/methods/conversation.cjs.map +1 -0
  131. package/dist/methods/conversation.es.js +342 -0
  132. package/dist/methods/conversation.es.js.map +1 -0
  133. package/dist/methods/conversationTag.cjs +234 -0
  134. package/dist/methods/conversationTag.cjs.map +1 -0
  135. package/dist/methods/conversationTag.es.js +232 -0
  136. package/dist/methods/conversationTag.es.js.map +1 -0
  137. package/dist/methods/file.cjs +315 -0
  138. package/dist/methods/file.cjs.map +1 -0
  139. package/dist/methods/file.es.js +313 -0
  140. package/dist/methods/file.es.js.map +1 -0
  141. package/dist/methods/index.cjs +135 -0
  142. package/dist/methods/index.cjs.map +1 -0
  143. package/dist/methods/index.es.js +130 -0
  144. package/dist/methods/index.es.js.map +1 -0
  145. package/dist/methods/key.cjs +136 -0
  146. package/dist/methods/key.cjs.map +1 -0
  147. package/dist/methods/key.es.js +134 -0
  148. package/dist/methods/key.es.js.map +1 -0
  149. package/dist/methods/mcpServer.cjs +259 -0
  150. package/dist/methods/mcpServer.cjs.map +1 -0
  151. package/dist/methods/mcpServer.es.js +257 -0
  152. package/dist/methods/mcpServer.es.js.map +1 -0
  153. package/dist/methods/memory.cjs +145 -0
  154. package/dist/methods/memory.cjs.map +1 -0
  155. package/dist/methods/memory.es.js +143 -0
  156. package/dist/methods/memory.es.js.map +1 -0
  157. package/dist/methods/message.cjs +280 -0
  158. package/dist/methods/message.cjs.map +1 -0
  159. package/dist/methods/message.es.js +278 -0
  160. package/dist/methods/message.es.js.map +1 -0
  161. package/dist/methods/pluginAuth.cjs +108 -0
  162. package/dist/methods/pluginAuth.cjs.map +1 -0
  163. package/dist/methods/pluginAuth.es.js +106 -0
  164. package/dist/methods/pluginAuth.es.js.map +1 -0
  165. package/dist/methods/preset.cjs +105 -0
  166. package/dist/methods/preset.cjs.map +1 -0
  167. package/dist/methods/preset.es.js +103 -0
  168. package/dist/methods/preset.es.js.map +1 -0
  169. package/dist/methods/prompt.cjs +546 -0
  170. package/dist/methods/prompt.cjs.map +1 -0
  171. package/dist/methods/prompt.es.js +544 -0
  172. package/dist/methods/prompt.es.js.map +1 -0
  173. package/dist/methods/role.cjs +290 -0
  174. package/dist/methods/role.cjs.map +1 -0
  175. package/dist/methods/role.es.js +288 -0
  176. package/dist/methods/role.es.js.map +1 -0
  177. package/dist/methods/session.cjs +221 -0
  178. package/dist/methods/session.cjs.map +1 -0
  179. package/dist/methods/session.es.js +217 -0
  180. package/dist/methods/session.es.js.map +1 -0
  181. package/dist/methods/share.cjs +474 -0
  182. package/dist/methods/share.cjs.map +1 -0
  183. package/dist/methods/share.es.js +472 -0
  184. package/dist/methods/share.es.js.map +1 -0
  185. package/dist/methods/spendTokens.cjs +109 -0
  186. package/dist/methods/spendTokens.cjs.map +1 -0
  187. package/dist/methods/spendTokens.es.js +107 -0
  188. package/dist/methods/spendTokens.es.js.map +1 -0
  189. package/dist/methods/systemGrant.cjs +190 -0
  190. package/dist/methods/systemGrant.cjs.map +1 -0
  191. package/dist/methods/systemGrant.es.js +188 -0
  192. package/dist/methods/systemGrant.es.js.map +1 -0
  193. package/dist/methods/token.cjs +117 -0
  194. package/dist/methods/token.cjs.map +1 -0
  195. package/dist/methods/token.es.js +115 -0
  196. package/dist/methods/token.es.js.map +1 -0
  197. package/dist/methods/toolCall.cjs +91 -0
  198. package/dist/methods/toolCall.cjs.map +1 -0
  199. package/dist/methods/toolCall.es.js +89 -0
  200. package/dist/methods/toolCall.es.js.map +1 -0
  201. package/dist/methods/transaction.cjs +305 -0
  202. package/dist/methods/transaction.cjs.map +1 -0
  203. package/dist/methods/transaction.es.js +303 -0
  204. package/dist/methods/transaction.es.js.map +1 -0
  205. package/dist/methods/tx.cjs +443 -0
  206. package/dist/methods/tx.cjs.map +1 -0
  207. package/dist/methods/tx.es.js +437 -0
  208. package/dist/methods/tx.es.js.map +1 -0
  209. package/dist/methods/user.cjs +269 -0
  210. package/dist/methods/user.cjs.map +1 -0
  211. package/dist/methods/user.es.js +266 -0
  212. package/dist/methods/user.es.js.map +1 -0
  213. package/dist/methods/userGroup.cjs +518 -0
  214. package/dist/methods/userGroup.cjs.map +1 -0
  215. package/dist/methods/userGroup.es.js +516 -0
  216. package/dist/methods/userGroup.es.js.map +1 -0
  217. package/dist/migrations/tenantIndexes.cjs +85 -0
  218. package/dist/migrations/tenantIndexes.cjs.map +1 -0
  219. package/dist/migrations/tenantIndexes.es.js +82 -0
  220. package/dist/migrations/tenantIndexes.es.js.map +1 -0
  221. package/dist/models/accessRole.cjs +12 -0
  222. package/dist/models/accessRole.cjs.map +1 -0
  223. package/dist/models/accessRole.es.js +10 -0
  224. package/dist/models/accessRole.es.js.map +1 -0
  225. package/dist/models/aclEntry.cjs +12 -0
  226. package/dist/models/aclEntry.cjs.map +1 -0
  227. package/dist/models/aclEntry.es.js +10 -0
  228. package/dist/models/aclEntry.es.js.map +1 -0
  229. package/dist/models/action.cjs +12 -0
  230. package/dist/models/action.cjs.map +1 -0
  231. package/dist/models/action.es.js +10 -0
  232. package/dist/models/action.es.js.map +1 -0
  233. package/dist/models/agent.cjs +12 -0
  234. package/dist/models/agent.cjs.map +1 -0
  235. package/dist/models/agent.es.js +10 -0
  236. package/dist/models/agent.es.js.map +1 -0
  237. package/dist/models/agentApiKey.cjs +12 -0
  238. package/dist/models/agentApiKey.cjs.map +1 -0
  239. package/dist/models/agentApiKey.es.js +10 -0
  240. package/dist/models/agentApiKey.es.js.map +1 -0
  241. package/dist/models/agentCategory.cjs +13 -0
  242. package/dist/models/agentCategory.cjs.map +1 -0
  243. package/dist/models/agentCategory.es.js +11 -0
  244. package/dist/models/agentCategory.es.js.map +1 -0
  245. package/dist/models/assistant.cjs +12 -0
  246. package/dist/models/assistant.cjs.map +1 -0
  247. package/dist/models/assistant.es.js +10 -0
  248. package/dist/models/assistant.es.js.map +1 -0
  249. package/dist/models/balance.cjs +12 -0
  250. package/dist/models/balance.cjs.map +1 -0
  251. package/dist/models/balance.es.js +10 -0
  252. package/dist/models/balance.es.js.map +1 -0
  253. package/dist/models/banner.cjs +12 -0
  254. package/dist/models/banner.cjs.map +1 -0
  255. package/dist/models/banner.es.js +10 -0
  256. package/dist/models/banner.es.js.map +1 -0
  257. package/dist/models/config.cjs +12 -0
  258. package/dist/models/config.cjs.map +1 -0
  259. package/dist/models/config.es.js +10 -0
  260. package/dist/models/config.es.js.map +1 -0
  261. package/dist/models/conversationTag.cjs +13 -0
  262. package/dist/models/conversationTag.cjs.map +1 -0
  263. package/dist/models/conversationTag.es.js +11 -0
  264. package/dist/models/conversationTag.es.js.map +1 -0
  265. package/dist/models/convo.cjs +23 -0
  266. package/dist/models/convo.cjs.map +1 -0
  267. package/dist/models/convo.es.js +21 -0
  268. package/dist/models/convo.es.js.map +1 -0
  269. package/dist/models/file.cjs +12 -0
  270. package/dist/models/file.cjs.map +1 -0
  271. package/dist/models/file.es.js +10 -0
  272. package/dist/models/file.es.js.map +1 -0
  273. package/dist/models/group.cjs +12 -0
  274. package/dist/models/group.cjs.map +1 -0
  275. package/dist/models/group.es.js +10 -0
  276. package/dist/models/group.es.js.map +1 -0
  277. package/dist/models/index.cjs +73 -0
  278. package/dist/models/index.cjs.map +1 -0
  279. package/dist/models/index.es.js +71 -0
  280. package/dist/models/index.es.js.map +1 -0
  281. package/dist/models/key.cjs +12 -0
  282. package/dist/models/key.cjs.map +1 -0
  283. package/dist/models/key.es.js +10 -0
  284. package/dist/models/key.es.js.map +1 -0
  285. package/dist/models/mcpServer.cjs +12 -0
  286. package/dist/models/mcpServer.cjs.map +1 -0
  287. package/dist/models/mcpServer.es.js +10 -0
  288. package/dist/models/mcpServer.es.js.map +1 -0
  289. package/dist/models/memory.cjs +12 -0
  290. package/dist/models/memory.cjs.map +1 -0
  291. package/dist/models/memory.es.js +10 -0
  292. package/dist/models/memory.es.js.map +1 -0
  293. package/dist/models/message.cjs +22 -0
  294. package/dist/models/message.cjs.map +1 -0
  295. package/dist/models/message.es.js +20 -0
  296. package/dist/models/message.es.js.map +1 -0
  297. package/dist/models/pluginAuth.cjs +12 -0
  298. package/dist/models/pluginAuth.cjs.map +1 -0
  299. package/dist/models/pluginAuth.es.js +10 -0
  300. package/dist/models/pluginAuth.es.js.map +1 -0
  301. package/dist/models/plugins/mongoMeili.cjs +547 -0
  302. package/dist/models/plugins/mongoMeili.cjs.map +1 -0
  303. package/dist/models/plugins/mongoMeili.es.js +545 -0
  304. package/dist/models/plugins/mongoMeili.es.js.map +1 -0
  305. package/dist/models/plugins/tenantIsolation.cjs +140 -0
  306. package/dist/models/plugins/tenantIsolation.cjs.map +1 -0
  307. package/dist/models/plugins/tenantIsolation.es.js +138 -0
  308. package/dist/models/plugins/tenantIsolation.es.js.map +1 -0
  309. package/dist/models/preset.cjs +12 -0
  310. package/dist/models/preset.cjs.map +1 -0
  311. package/dist/models/preset.es.js +10 -0
  312. package/dist/models/preset.es.js.map +1 -0
  313. package/dist/models/prompt.cjs +12 -0
  314. package/dist/models/prompt.cjs.map +1 -0
  315. package/dist/models/prompt.es.js +10 -0
  316. package/dist/models/prompt.es.js.map +1 -0
  317. package/dist/models/promptGroup.cjs +13 -0
  318. package/dist/models/promptGroup.cjs.map +1 -0
  319. package/dist/models/promptGroup.es.js +11 -0
  320. package/dist/models/promptGroup.es.js.map +1 -0
  321. package/dist/models/role.cjs +12 -0
  322. package/dist/models/role.cjs.map +1 -0
  323. package/dist/models/role.es.js +10 -0
  324. package/dist/models/role.es.js.map +1 -0
  325. package/dist/models/session.cjs +12 -0
  326. package/dist/models/session.cjs.map +1 -0
  327. package/dist/models/session.es.js +10 -0
  328. package/dist/models/session.es.js.map +1 -0
  329. package/dist/models/sharedLink.cjs +12 -0
  330. package/dist/models/sharedLink.cjs.map +1 -0
  331. package/dist/models/sharedLink.es.js +10 -0
  332. package/dist/models/sharedLink.es.js.map +1 -0
  333. package/dist/models/systemGrant.cjs +16 -0
  334. package/dist/models/systemGrant.cjs.map +1 -0
  335. package/dist/models/systemGrant.es.js +14 -0
  336. package/dist/models/systemGrant.es.js.map +1 -0
  337. package/dist/models/token.cjs +12 -0
  338. package/dist/models/token.cjs.map +1 -0
  339. package/dist/models/token.es.js +10 -0
  340. package/dist/models/token.es.js.map +1 -0
  341. package/dist/models/toolCall.cjs +12 -0
  342. package/dist/models/toolCall.cjs.map +1 -0
  343. package/dist/models/toolCall.es.js +10 -0
  344. package/dist/models/toolCall.es.js.map +1 -0
  345. package/dist/models/transaction.cjs +12 -0
  346. package/dist/models/transaction.cjs.map +1 -0
  347. package/dist/models/transaction.es.js +10 -0
  348. package/dist/models/transaction.es.js.map +1 -0
  349. package/dist/models/user.cjs +12 -0
  350. package/dist/models/user.cjs.map +1 -0
  351. package/dist/models/user.es.js +10 -0
  352. package/dist/models/user.es.js.map +1 -0
  353. package/dist/schema/accessRole.cjs +34 -0
  354. package/dist/schema/accessRole.cjs.map +1 -0
  355. package/dist/schema/accessRole.es.js +32 -0
  356. package/dist/schema/accessRole.es.js.map +1 -0
  357. package/dist/schema/aclEntry.cjs +74 -0
  358. package/dist/schema/aclEntry.cjs.map +1 -0
  359. package/dist/schema/aclEntry.es.js +72 -0
  360. package/dist/schema/aclEntry.es.js.map +1 -0
  361. package/dist/schema/action.cjs +54 -0
  362. package/dist/schema/action.cjs.map +1 -0
  363. package/dist/schema/action.es.js +52 -0
  364. package/dist/schema/action.es.js.map +1 -0
  365. package/dist/schema/agent.cjs +128 -0
  366. package/dist/schema/agent.cjs.map +1 -0
  367. package/dist/schema/agent.es.js +126 -0
  368. package/dist/schema/agent.es.js.map +1 -0
  369. package/dist/schema/agentApiKey.cjs +50 -0
  370. package/dist/schema/agentApiKey.cjs.map +1 -0
  371. package/dist/schema/agentApiKey.es.js +48 -0
  372. package/dist/schema/agentApiKey.es.js.map +1 -0
  373. package/dist/schema/agentCategory.cjs +49 -0
  374. package/dist/schema/agentCategory.cjs.map +1 -0
  375. package/dist/schema/agentCategory.es.js +47 -0
  376. package/dist/schema/agentCategory.es.js.map +1 -0
  377. package/dist/schema/assistant.cjs +42 -0
  378. package/dist/schema/assistant.cjs.map +1 -0
  379. package/dist/schema/assistant.es.js +40 -0
  380. package/dist/schema/assistant.es.js.map +1 -0
  381. package/dist/schema/balance.cjs +47 -0
  382. package/dist/schema/balance.cjs.map +1 -0
  383. package/dist/schema/balance.es.js +45 -0
  384. package/dist/schema/balance.es.js.map +1 -0
  385. package/dist/schema/banner.cjs +42 -0
  386. package/dist/schema/banner.cjs.map +1 -0
  387. package/dist/schema/banner.es.js +40 -0
  388. package/dist/schema/banner.es.js.map +1 -0
  389. package/dist/schema/categories.cjs +23 -0
  390. package/dist/schema/categories.cjs.map +1 -0
  391. package/dist/schema/categories.es.js +21 -0
  392. package/dist/schema/categories.es.js.map +1 -0
  393. package/dist/schema/config.cjs +59 -0
  394. package/dist/schema/config.cjs.map +1 -0
  395. package/dist/schema/config.es.js +57 -0
  396. package/dist/schema/config.es.js.map +1 -0
  397. package/dist/schema/conversationTag.cjs +36 -0
  398. package/dist/schema/conversationTag.cjs.map +1 -0
  399. package/dist/schema/conversationTag.es.js +34 -0
  400. package/dist/schema/conversationTag.es.js.map +1 -0
  401. package/dist/schema/convo.cjs +52 -0
  402. package/dist/schema/convo.cjs.map +1 -0
  403. package/dist/schema/convo.es.js +50 -0
  404. package/dist/schema/convo.es.js.map +1 -0
  405. package/dist/schema/defaults.cjs +168 -0
  406. package/dist/schema/defaults.cjs.map +1 -0
  407. package/dist/schema/defaults.es.js +166 -0
  408. package/dist/schema/defaults.es.js.map +1 -0
  409. package/dist/schema/file.cjs +92 -0
  410. package/dist/schema/file.cjs.map +1 -0
  411. package/dist/schema/file.es.js +90 -0
  412. package/dist/schema/file.es.js.map +1 -0
  413. package/dist/schema/group.cjs +56 -0
  414. package/dist/schema/group.cjs.map +1 -0
  415. package/dist/schema/group.es.js +54 -0
  416. package/dist/schema/group.es.js.map +1 -0
  417. package/dist/schema/key.cjs +30 -0
  418. package/dist/schema/key.cjs.map +1 -0
  419. package/dist/schema/key.es.js +28 -0
  420. package/dist/schema/key.es.js.map +1 -0
  421. package/dist/schema/mcpServer.cjs +33 -0
  422. package/dist/schema/mcpServer.cjs.map +1 -0
  423. package/dist/schema/mcpServer.es.js +31 -0
  424. package/dist/schema/mcpServer.es.js.map +1 -0
  425. package/dist/schema/memory.cjs +39 -0
  426. package/dist/schema/memory.cjs.map +1 -0
  427. package/dist/schema/memory.es.js +37 -0
  428. package/dist/schema/memory.es.js.map +1 -0
  429. package/dist/schema/message.cjs +167 -0
  430. package/dist/schema/message.cjs.map +1 -0
  431. package/dist/schema/message.es.js +165 -0
  432. package/dist/schema/message.es.js.map +1 -0
  433. package/dist/schema/pluginAuth.cjs +28 -0
  434. package/dist/schema/pluginAuth.cjs.map +1 -0
  435. package/dist/schema/pluginAuth.es.js +26 -0
  436. package/dist/schema/pluginAuth.es.js.map +1 -0
  437. package/dist/schema/preset.cjs +36 -0
  438. package/dist/schema/preset.cjs.map +1 -0
  439. package/dist/schema/preset.es.js +34 -0
  440. package/dist/schema/preset.es.js.map +1 -0
  441. package/dist/schema/prompt.cjs +36 -0
  442. package/dist/schema/prompt.cjs.map +1 -0
  443. package/dist/schema/prompt.es.js +34 -0
  444. package/dist/schema/prompt.es.js.map +1 -0
  445. package/dist/schema/promptGroup.cjs +65 -0
  446. package/dist/schema/promptGroup.cjs.map +1 -0
  447. package/dist/schema/promptGroup.es.js +63 -0
  448. package/dist/schema/promptGroup.es.js.map +1 -0
  449. package/dist/schema/role.cjs +84 -0
  450. package/dist/schema/role.cjs.map +1 -0
  451. package/dist/schema/role.es.js +82 -0
  452. package/dist/schema/role.es.js.map +1 -0
  453. package/dist/schema/session.cjs +27 -0
  454. package/dist/schema/session.cjs.map +1 -0
  455. package/dist/schema/session.es.js +25 -0
  456. package/dist/schema/session.es.js.map +1 -0
  457. package/dist/schema/share.cjs +40 -0
  458. package/dist/schema/share.cjs.map +1 -0
  459. package/dist/schema/share.es.js +38 -0
  460. package/dist/schema/share.es.js.map +1 -0
  461. package/dist/schema/systemGrant.cjs +66 -0
  462. package/dist/schema/systemGrant.cjs.map +1 -0
  463. package/dist/schema/systemGrant.es.js +64 -0
  464. package/dist/schema/systemGrant.es.js.map +1 -0
  465. package/dist/schema/token.cjs +45 -0
  466. package/dist/schema/token.cjs.map +1 -0
  467. package/dist/schema/token.es.js +43 -0
  468. package/dist/schema/token.es.js.map +1 -0
  469. package/dist/schema/toolCall.cjs +44 -0
  470. package/dist/schema/toolCall.cjs.map +1 -0
  471. package/dist/schema/toolCall.es.js +42 -0
  472. package/dist/schema/toolCall.es.js.map +1 -0
  473. package/dist/schema/transaction.cjs +48 -0
  474. package/dist/schema/transaction.cjs.map +1 -0
  475. package/dist/schema/transaction.es.js +46 -0
  476. package/dist/schema/transaction.es.js.map +1 -0
  477. package/dist/schema/user.cjs +165 -0
  478. package/dist/schema/user.cjs.map +1 -0
  479. package/dist/schema/user.es.js +163 -0
  480. package/dist/schema/user.es.js.map +1 -0
  481. package/dist/types/methods/config.d.ts +1 -0
  482. package/dist/utils/object-traverse.cjs +158 -0
  483. package/dist/utils/object-traverse.cjs.map +1 -0
  484. package/dist/utils/object-traverse.es.js +156 -0
  485. package/dist/utils/object-traverse.es.js.map +1 -0
  486. package/dist/utils/principal.cjs +24 -0
  487. package/dist/utils/principal.cjs.map +1 -0
  488. package/dist/utils/principal.es.js +22 -0
  489. package/dist/utils/principal.es.js.map +1 -0
  490. package/dist/utils/string.cjs +11 -0
  491. package/dist/utils/string.cjs.map +1 -0
  492. package/dist/utils/string.es.js +9 -0
  493. package/dist/utils/string.es.js.map +1 -0
  494. package/dist/utils/tempChatRetention.cjs +70 -0
  495. package/dist/utils/tempChatRetention.cjs.map +1 -0
  496. package/dist/utils/tempChatRetention.es.js +64 -0
  497. package/dist/utils/tempChatRetention.es.js.map +1 -0
  498. package/dist/utils/transactions.cjs +60 -0
  499. package/dist/utils/transactions.cjs.map +1 -0
  500. package/dist/utils/transactions.es.js +56 -0
  501. package/dist/utils/transactions.es.js.map +1 -0
  502. 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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"}