mcp-creatio 0.4.1 → 0.6.0

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 (310) hide show
  1. package/README.md +265 -212
  2. package/dist/cli.js +3 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config-builder.d.ts.map +1 -1
  5. package/dist/config-builder.js +13 -1
  6. package/dist/config-builder.js.map +1 -1
  7. package/dist/creatio/auth/auth.d.ts +16 -2
  8. package/dist/creatio/auth/auth.d.ts.map +1 -1
  9. package/dist/creatio/auth/auth.js +9 -0
  10. package/dist/creatio/auth/auth.js.map +1 -1
  11. package/dist/creatio/auth/index.d.ts +2 -1
  12. package/dist/creatio/auth/index.d.ts.map +1 -1
  13. package/dist/creatio/auth/index.js +4 -1
  14. package/dist/creatio/auth/index.js.map +1 -1
  15. package/dist/creatio/auth/providers/base-provider.d.ts +2 -5
  16. package/dist/creatio/auth/providers/base-provider.d.ts.map +1 -1
  17. package/dist/creatio/auth/providers/base-provider.js +0 -15
  18. package/dist/creatio/auth/providers/base-provider.js.map +1 -1
  19. package/dist/creatio/auth/providers/oauth2-code-provider.js +3 -3
  20. package/dist/creatio/client-config.d.ts +8 -0
  21. package/dist/creatio/client-config.d.ts.map +1 -1
  22. package/dist/creatio/{providers → contracts}/admin-operation-provider.d.ts.map +1 -1
  23. package/dist/creatio/contracts/admin-operation-provider.js.map +1 -0
  24. package/dist/creatio/{providers → contracts}/configuration-provider.d.ts +3 -2
  25. package/dist/creatio/contracts/configuration-provider.d.ts.map +1 -0
  26. package/dist/creatio/contracts/configuration-provider.js.map +1 -0
  27. package/dist/creatio/contracts/crud-provider.d.ts +52 -0
  28. package/dist/creatio/contracts/crud-provider.d.ts.map +1 -0
  29. package/dist/creatio/contracts/crud-provider.js.map +1 -0
  30. package/dist/creatio/{providers → contracts}/feature-provider.d.ts.map +1 -1
  31. package/dist/creatio/contracts/feature-provider.js.map +1 -0
  32. package/dist/creatio/{providers → contracts}/index.d.ts +1 -0
  33. package/dist/creatio/contracts/index.d.ts.map +1 -0
  34. package/dist/creatio/{providers → contracts}/index.js +1 -0
  35. package/dist/creatio/{providers → contracts}/index.js.map +1 -1
  36. package/dist/creatio/{providers → contracts}/process-provider.d.ts.map +1 -1
  37. package/dist/creatio/contracts/process-provider.js.map +1 -0
  38. package/dist/creatio/contracts/query.d.ts +69 -0
  39. package/dist/creatio/contracts/query.d.ts.map +1 -0
  40. package/dist/creatio/contracts/query.js +10 -0
  41. package/dist/creatio/contracts/query.js.map +1 -0
  42. package/dist/creatio/{providers → contracts}/sys-settings-provider.d.ts.map +1 -1
  43. package/dist/creatio/contracts/sys-settings-provider.js.map +1 -0
  44. package/dist/creatio/{providers → contracts}/user-provider.d.ts.map +1 -1
  45. package/dist/creatio/contracts/user-provider.js.map +1 -0
  46. package/dist/creatio/engines/{admin-operation/admin-operation-engine.d.ts → admin-operation-engine.d.ts} +4 -4
  47. package/dist/creatio/engines/admin-operation-engine.d.ts.map +1 -0
  48. package/dist/creatio/engines/admin-operation-engine.js +29 -0
  49. package/dist/creatio/engines/admin-operation-engine.js.map +1 -0
  50. package/dist/creatio/engines/configuration-engine.d.ts +10 -0
  51. package/dist/creatio/engines/configuration-engine.d.ts.map +1 -0
  52. package/dist/creatio/engines/configuration-engine.js +23 -0
  53. package/dist/creatio/engines/configuration-engine.js.map +1 -0
  54. package/dist/creatio/engines/crud-engine.d.ts +17 -0
  55. package/dist/creatio/engines/crud-engine.d.ts.map +1 -0
  56. package/dist/creatio/engines/crud-engine.js +39 -0
  57. package/dist/creatio/engines/crud-engine.js.map +1 -0
  58. package/dist/creatio/engines/engine-manager.d.ts +15 -8
  59. package/dist/creatio/engines/engine-manager.d.ts.map +1 -1
  60. package/dist/creatio/engines/engine-manager.js +26 -14
  61. package/dist/creatio/engines/engine-manager.js.map +1 -1
  62. package/dist/creatio/engines/engine.d.ts +36 -0
  63. package/dist/creatio/engines/engine.d.ts.map +1 -1
  64. package/dist/creatio/engines/engine.js +43 -0
  65. package/dist/creatio/engines/engine.js.map +1 -1
  66. package/dist/creatio/engines/feature-engine.d.ts +10 -0
  67. package/dist/creatio/engines/feature-engine.d.ts.map +1 -0
  68. package/dist/creatio/engines/{feature/feature-engine.js → feature-engine.js} +5 -3
  69. package/dist/creatio/engines/feature-engine.js.map +1 -0
  70. package/dist/creatio/engines/index.d.ts +7 -7
  71. package/dist/creatio/engines/index.d.ts.map +1 -1
  72. package/dist/creatio/engines/index.js +7 -7
  73. package/dist/creatio/engines/index.js.map +1 -1
  74. package/dist/creatio/engines/process-engine.d.ts +10 -0
  75. package/dist/creatio/engines/process-engine.d.ts.map +1 -0
  76. package/dist/creatio/engines/{process/process-engine.js → process-engine.js} +5 -3
  77. package/dist/creatio/engines/process-engine.js.map +1 -0
  78. package/dist/creatio/engines/{sys-settings/sys-settings-engine.d.ts → sys-settings-engine.d.ts} +4 -4
  79. package/dist/creatio/engines/sys-settings-engine.d.ts.map +1 -0
  80. package/dist/creatio/engines/sys-settings-engine.js +29 -0
  81. package/dist/creatio/engines/sys-settings-engine.js.map +1 -0
  82. package/dist/creatio/engines/user-engine.d.ts +10 -0
  83. package/dist/creatio/engines/user-engine.d.ts.map +1 -0
  84. package/dist/creatio/engines/{user/user-engine.js → user-engine.js} +4 -2
  85. package/dist/creatio/engines/user-engine.js.map +1 -0
  86. package/dist/creatio/index.d.ts +1 -1
  87. package/dist/creatio/index.js +1 -1
  88. package/dist/creatio/provider-context.d.ts +1 -1
  89. package/dist/creatio/services/admin-operation-service-provider.d.ts +1 -1
  90. package/dist/creatio/services/admin-operation-service-provider.d.ts.map +1 -1
  91. package/dist/creatio/services/admin-operation-service-provider.js +2 -2
  92. package/dist/creatio/services/admin-operation-service-provider.js.map +1 -1
  93. package/dist/creatio/services/configuration-service-provider.d.ts +1 -1
  94. package/dist/creatio/services/configuration-service-provider.d.ts.map +1 -1
  95. package/dist/creatio/services/configuration-service-provider.js +16 -5
  96. package/dist/creatio/services/configuration-service-provider.js.map +1 -1
  97. package/dist/creatio/services/creatio-service-context.d.ts +1 -1
  98. package/dist/creatio/services/creatio-service-context.d.ts.map +1 -1
  99. package/dist/creatio/services/creatio-service-context.js +6 -3
  100. package/dist/creatio/services/creatio-service-context.js.map +1 -1
  101. package/dist/creatio/services/crud-provider-factory.d.ts +16 -0
  102. package/dist/creatio/services/crud-provider-factory.d.ts.map +1 -0
  103. package/dist/creatio/services/crud-provider-factory.js +22 -0
  104. package/dist/creatio/services/crud-provider-factory.js.map +1 -0
  105. package/dist/creatio/services/dataservice/data-service-column-values.d.ts +12 -0
  106. package/dist/creatio/services/dataservice/data-service-column-values.d.ts.map +1 -0
  107. package/dist/creatio/services/dataservice/data-service-column-values.js +39 -0
  108. package/dist/creatio/services/dataservice/data-service-column-values.js.map +1 -0
  109. package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts +49 -0
  110. package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts.map +1 -0
  111. package/dist/creatio/services/dataservice/data-service-crud-provider.js +157 -0
  112. package/dist/creatio/services/dataservice/data-service-crud-provider.js.map +1 -0
  113. package/dist/creatio/services/dataservice/data-service-filter-translator.d.ts +32 -0
  114. package/dist/creatio/services/dataservice/data-service-filter-translator.d.ts.map +1 -0
  115. package/dist/creatio/services/dataservice/data-service-filter-translator.js +114 -0
  116. package/dist/creatio/services/dataservice/data-service-filter-translator.js.map +1 -0
  117. package/dist/creatio/services/dataservice/data-service-query-builder.d.ts +21 -0
  118. package/dist/creatio/services/dataservice/data-service-query-builder.d.ts.map +1 -0
  119. package/dist/creatio/services/dataservice/data-service-query-builder.js +97 -0
  120. package/dist/creatio/services/dataservice/data-service-query-builder.js.map +1 -0
  121. package/dist/creatio/services/dataservice/data-service-schema.d.ts +31 -0
  122. package/dist/creatio/services/dataservice/data-service-schema.d.ts.map +1 -0
  123. package/dist/creatio/services/dataservice/data-service-schema.js +95 -0
  124. package/dist/creatio/services/dataservice/data-service-schema.js.map +1 -0
  125. package/dist/creatio/services/dataservice/data-service-transport.d.ts +21 -0
  126. package/dist/creatio/services/dataservice/data-service-transport.d.ts.map +1 -0
  127. package/dist/creatio/services/dataservice/data-service-transport.js +49 -0
  128. package/dist/creatio/services/dataservice/data-service-transport.js.map +1 -0
  129. package/dist/creatio/services/dataservice/data-service-types.d.ts +180 -0
  130. package/dist/creatio/services/dataservice/data-service-types.d.ts.map +1 -0
  131. package/dist/creatio/services/dataservice/data-service-types.js +110 -0
  132. package/dist/creatio/services/dataservice/data-service-types.js.map +1 -0
  133. package/dist/creatio/services/dataservice/data-service-value-type.d.ts +27 -0
  134. package/dist/creatio/services/dataservice/data-service-value-type.d.ts.map +1 -0
  135. package/dist/creatio/services/dataservice/data-service-value-type.js +99 -0
  136. package/dist/creatio/services/dataservice/data-service-value-type.js.map +1 -0
  137. package/dist/creatio/services/entity-name.d.ts +8 -0
  138. package/dist/creatio/services/entity-name.d.ts.map +1 -0
  139. package/dist/creatio/services/entity-name.js +17 -0
  140. package/dist/creatio/services/entity-name.js.map +1 -0
  141. package/dist/creatio/services/feature-service-provider.d.ts +1 -1
  142. package/dist/creatio/services/feature-service-provider.d.ts.map +1 -1
  143. package/dist/creatio/services/feature-service-provider.js +5 -5
  144. package/dist/creatio/services/feature-service-provider.js.map +1 -1
  145. package/dist/creatio/services/http-client.d.ts +10 -1
  146. package/dist/creatio/services/http-client.d.ts.map +1 -1
  147. package/dist/creatio/services/http-client.js +15 -3
  148. package/dist/creatio/services/http-client.js.map +1 -1
  149. package/dist/creatio/services/index.d.ts +14 -2
  150. package/dist/creatio/services/index.d.ts.map +1 -1
  151. package/dist/creatio/services/index.js +14 -2
  152. package/dist/creatio/services/index.js.map +1 -1
  153. package/dist/creatio/services/lookup-path.d.ts +18 -0
  154. package/dist/creatio/services/lookup-path.d.ts.map +1 -0
  155. package/dist/creatio/services/lookup-path.js +33 -0
  156. package/dist/creatio/services/lookup-path.js.map +1 -0
  157. package/dist/creatio/services/{metadata-store.d.ts → odata/metadata-store.d.ts} +2 -2
  158. package/dist/creatio/services/odata/metadata-store.d.ts.map +1 -0
  159. package/dist/creatio/services/{metadata-store.js → odata/metadata-store.js} +5 -4
  160. package/dist/creatio/services/odata/metadata-store.js.map +1 -0
  161. package/dist/creatio/services/{odata-crud-provider.d.ts → odata/odata-crud-provider.d.ts} +7 -7
  162. package/dist/creatio/services/odata/odata-crud-provider.d.ts.map +1 -0
  163. package/dist/creatio/services/{odata-crud-provider.js → odata/odata-crud-provider.js} +35 -59
  164. package/dist/creatio/services/odata/odata-crud-provider.js.map +1 -0
  165. package/dist/creatio/services/odata/odata-query-translator.d.ts +37 -0
  166. package/dist/creatio/services/odata/odata-query-translator.d.ts.map +1 -0
  167. package/dist/creatio/services/odata/odata-query-translator.js +160 -0
  168. package/dist/creatio/services/odata/odata-query-translator.js.map +1 -0
  169. package/dist/creatio/services/odata/odata-routes.d.ts +4 -0
  170. package/dist/creatio/services/odata/odata-routes.d.ts.map +1 -0
  171. package/dist/creatio/services/odata/odata-routes.js +9 -0
  172. package/dist/creatio/services/odata/odata-routes.js.map +1 -0
  173. package/dist/creatio/services/process-service-provider.d.ts +1 -1
  174. package/dist/creatio/services/process-service-provider.d.ts.map +1 -1
  175. package/dist/creatio/services/process-service-provider.js +2 -5
  176. package/dist/creatio/services/process-service-provider.js.map +1 -1
  177. package/dist/creatio/services/sys-settings-service-provider.d.ts +1 -1
  178. package/dist/creatio/services/sys-settings-service-provider.d.ts.map +1 -1
  179. package/dist/creatio/services/sys-settings-service-provider.js +12 -16
  180. package/dist/creatio/services/sys-settings-service-provider.js.map +1 -1
  181. package/dist/creatio/services/user-info-provider.d.ts +1 -1
  182. package/dist/index.js +3 -2
  183. package/dist/index.js.map +1 -1
  184. package/dist/log.d.ts +5 -0
  185. package/dist/log.d.ts.map +1 -1
  186. package/dist/log.js +8 -0
  187. package/dist/log.js.map +1 -1
  188. package/dist/server/http/creatio-oauth-handlers.d.ts.map +1 -1
  189. package/dist/server/http/creatio-oauth-handlers.js +21 -5
  190. package/dist/server/http/creatio-oauth-handlers.js.map +1 -1
  191. package/dist/server/http/httpServer.d.ts.map +1 -1
  192. package/dist/server/http/httpServer.js +6 -4
  193. package/dist/server/http/httpServer.js.map +1 -1
  194. package/dist/server/http/mcp-handlers.js +2 -2
  195. package/dist/server/mcp/creatio-rest.d.ts +44 -0
  196. package/dist/server/mcp/creatio-rest.d.ts.map +1 -0
  197. package/dist/server/mcp/creatio-rest.js +26 -0
  198. package/dist/server/mcp/creatio-rest.js.map +1 -0
  199. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts +52 -0
  200. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts.map +1 -0
  201. package/dist/server/mcp/crtmcp/crt-mcp-client.js +67 -0
  202. package/dist/server/mcp/crtmcp/crt-mcp-client.js.map +1 -0
  203. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts +20 -0
  204. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts.map +1 -0
  205. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js +74 -0
  206. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js.map +1 -0
  207. package/dist/server/mcp/dataforge/dataforge-client.d.ts +64 -0
  208. package/dist/server/mcp/dataforge/dataforge-client.d.ts.map +1 -0
  209. package/dist/server/mcp/dataforge/dataforge-client.js +130 -0
  210. package/dist/server/mcp/dataforge/dataforge-client.js.map +1 -0
  211. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts +17 -0
  212. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts.map +1 -0
  213. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js +42 -0
  214. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js.map +1 -0
  215. package/dist/server/mcp/filters.d.ts +7 -1
  216. package/dist/server/mcp/filters.d.ts.map +1 -1
  217. package/dist/server/mcp/filters.js +48 -74
  218. package/dist/server/mcp/filters.js.map +1 -1
  219. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts +50 -0
  220. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts.map +1 -0
  221. package/dist/server/mcp/globalsearch/globalsearch-client.js +118 -0
  222. package/dist/server/mcp/globalsearch/globalsearch-client.js.map +1 -0
  223. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts +16 -0
  224. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts.map +1 -0
  225. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js +34 -0
  226. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js.map +1 -0
  227. package/dist/server/mcp/json-schema-to-zod.d.ts +3 -0
  228. package/dist/server/mcp/json-schema-to-zod.d.ts.map +1 -0
  229. package/dist/server/mcp/json-schema-to-zod.js +54 -0
  230. package/dist/server/mcp/json-schema-to-zod.js.map +1 -0
  231. package/dist/server/mcp/server.d.ts +33 -0
  232. package/dist/server/mcp/server.d.ts.map +1 -1
  233. package/dist/server/mcp/server.js +243 -163
  234. package/dist/server/mcp/server.js.map +1 -1
  235. package/dist/server/mcp/tool-preparer.d.ts +26 -0
  236. package/dist/server/mcp/tool-preparer.d.ts.map +1 -0
  237. package/dist/server/mcp/tool-preparer.js +11 -0
  238. package/dist/server/mcp/tool-preparer.js.map +1 -0
  239. package/dist/server/mcp/tools-data.d.ts +119 -7
  240. package/dist/server/mcp/tools-data.d.ts.map +1 -1
  241. package/dist/server/mcp/tools-data.js +258 -43
  242. package/dist/server/mcp/tools-data.js.map +1 -1
  243. package/dist/sessions/index.d.ts.map +1 -0
  244. package/dist/sessions/index.js.map +1 -0
  245. package/dist/{services → sessions}/session-context.d.ts +16 -0
  246. package/dist/sessions/session-context.d.ts.map +1 -0
  247. package/dist/{services → sessions}/session-context.js +36 -1
  248. package/dist/sessions/session-context.js.map +1 -0
  249. package/dist/{services → sessions}/token-refresh-scheduler.d.ts.map +1 -1
  250. package/dist/{services → sessions}/token-refresh-scheduler.js +2 -2
  251. package/dist/{services → sessions}/token-refresh-scheduler.js.map +1 -1
  252. package/dist/utils/context.js +2 -2
  253. package/package.json +8 -8
  254. package/dist/creatio/engines/admin-operation/admin-operation-engine.d.ts.map +0 -1
  255. package/dist/creatio/engines/admin-operation/admin-operation-engine.js +0 -27
  256. package/dist/creatio/engines/admin-operation/admin-operation-engine.js.map +0 -1
  257. package/dist/creatio/engines/configuration/configuration-engine.d.ts +0 -10
  258. package/dist/creatio/engines/configuration/configuration-engine.d.ts.map +0 -1
  259. package/dist/creatio/engines/configuration/configuration-engine.js +0 -18
  260. package/dist/creatio/engines/configuration/configuration-engine.js.map +0 -1
  261. package/dist/creatio/engines/crud/crud-engine.d.ts +0 -15
  262. package/dist/creatio/engines/crud/crud-engine.d.ts.map +0 -1
  263. package/dist/creatio/engines/crud/crud-engine.js +0 -33
  264. package/dist/creatio/engines/crud/crud-engine.js.map +0 -1
  265. package/dist/creatio/engines/feature/feature-engine.d.ts +0 -10
  266. package/dist/creatio/engines/feature/feature-engine.d.ts.map +0 -1
  267. package/dist/creatio/engines/feature/feature-engine.js.map +0 -1
  268. package/dist/creatio/engines/process/process-engine.d.ts +0 -10
  269. package/dist/creatio/engines/process/process-engine.d.ts.map +0 -1
  270. package/dist/creatio/engines/process/process-engine.js.map +0 -1
  271. package/dist/creatio/engines/sys-settings/sys-settings-engine.d.ts.map +0 -1
  272. package/dist/creatio/engines/sys-settings/sys-settings-engine.js +0 -27
  273. package/dist/creatio/engines/sys-settings/sys-settings-engine.js.map +0 -1
  274. package/dist/creatio/engines/user/user-engine.d.ts +0 -10
  275. package/dist/creatio/engines/user/user-engine.d.ts.map +0 -1
  276. package/dist/creatio/engines/user/user-engine.js.map +0 -1
  277. package/dist/creatio/providers/admin-operation-provider.js.map +0 -1
  278. package/dist/creatio/providers/configuration-provider.d.ts.map +0 -1
  279. package/dist/creatio/providers/configuration-provider.js.map +0 -1
  280. package/dist/creatio/providers/crud-provider.d.ts +0 -40
  281. package/dist/creatio/providers/crud-provider.d.ts.map +0 -1
  282. package/dist/creatio/providers/crud-provider.js.map +0 -1
  283. package/dist/creatio/providers/feature-provider.js.map +0 -1
  284. package/dist/creatio/providers/index.d.ts.map +0 -1
  285. package/dist/creatio/providers/process-provider.js.map +0 -1
  286. package/dist/creatio/providers/sys-settings-provider.js.map +0 -1
  287. package/dist/creatio/providers/user-provider.js.map +0 -1
  288. package/dist/creatio/services/metadata-store.d.ts.map +0 -1
  289. package/dist/creatio/services/metadata-store.js.map +0 -1
  290. package/dist/creatio/services/odata-crud-provider.d.ts.map +0 -1
  291. package/dist/creatio/services/odata-crud-provider.js.map +0 -1
  292. package/dist/services/index.d.ts.map +0 -1
  293. package/dist/services/index.js.map +0 -1
  294. package/dist/services/session-context.d.ts.map +0 -1
  295. package/dist/services/session-context.js.map +0 -1
  296. /package/dist/creatio/{providers → contracts}/admin-operation-provider.d.ts +0 -0
  297. /package/dist/creatio/{providers → contracts}/admin-operation-provider.js +0 -0
  298. /package/dist/creatio/{providers → contracts}/configuration-provider.js +0 -0
  299. /package/dist/creatio/{providers → contracts}/crud-provider.js +0 -0
  300. /package/dist/creatio/{providers → contracts}/feature-provider.d.ts +0 -0
  301. /package/dist/creatio/{providers → contracts}/feature-provider.js +0 -0
  302. /package/dist/creatio/{providers → contracts}/process-provider.d.ts +0 -0
  303. /package/dist/creatio/{providers → contracts}/process-provider.js +0 -0
  304. /package/dist/creatio/{providers → contracts}/sys-settings-provider.d.ts +0 -0
  305. /package/dist/creatio/{providers → contracts}/sys-settings-provider.js +0 -0
  306. /package/dist/creatio/{providers → contracts}/user-provider.d.ts +0 -0
  307. /package/dist/creatio/{providers → contracts}/user-provider.js +0 -0
  308. /package/dist/{services → sessions}/index.d.ts +0 -0
  309. /package/dist/{services → sessions}/index.js +0 -0
  310. /package/dist/{services → sessions}/token-refresh-scheduler.d.ts +0 -0
@@ -0,0 +1,64 @@
1
+ import { ConfigurationCaller, ConfigurationCallResult, SysSettingReader } from '../creatio-rest';
2
+ export type { ConfigurationCaller, ConfigurationCallRequest, ConfigurationCallResult, ConfigurationHttpMethod, SysSettingReader, } from '../creatio-rest';
3
+ /**
4
+ * DataForge access layer.
5
+ *
6
+ * Single responsibility: build correct requests against the Creatio-hosted
7
+ * DataForge REST services and expose the read/maintenance operations plus an
8
+ * availability probe. It knows nothing about MCP tool registration.
9
+ *
10
+ * The DataForge WCF services use `[WebInvoke(BodyStyle = Wrapped)]`, so each
11
+ * single-parameter method expects its DTO wrapped under a top-level `request`.
12
+ */
13
+ export interface SimilarTablesQuery {
14
+ query: string;
15
+ limit?: number | undefined;
16
+ }
17
+ export interface TableRelationshipsQuery {
18
+ sourceTable: string;
19
+ targetTable: string;
20
+ limit?: number | undefined;
21
+ bidirectional?: boolean | undefined;
22
+ skipDetails?: boolean | undefined;
23
+ }
24
+ export interface LookupValuesQuery {
25
+ query: string;
26
+ schemaName?: string | undefined;
27
+ limit?: number | undefined;
28
+ }
29
+ export declare class DataForgeClient {
30
+ private readonly _configuration;
31
+ private readonly _sysSettings;
32
+ constructor(configuration: ConfigurationCaller, sysSettings: SysSettingReader);
33
+ /**
34
+ * Whether DataForge is configured on this environment. Gated on a non-empty
35
+ * `DataForgeServiceUrl`, mirroring the server-side `IsDataForgeEnabled` check.
36
+ * Probe failures are treated as "disabled" so callers degrade gracefully.
37
+ */
38
+ isEnabled(): Promise<boolean>;
39
+ getSimilarTableNames(q: SimilarTablesQuery): Promise<ConfigurationCallResult>;
40
+ getTableDetails(q: SimilarTablesQuery): Promise<ConfigurationCallResult>;
41
+ getTableRelationships(q: TableRelationshipsQuery): Promise<ConfigurationCallResult>;
42
+ getLookupValues(q: LookupValuesQuery): Promise<ConfigurationCallResult>;
43
+ getTableColumns(tableName: string): Promise<ConfigurationCallResult>;
44
+ getServiceStatus(): Promise<ConfigurationCallResult>;
45
+ /**
46
+ * Column details for `describe-entity` routing: returns the response body when
47
+ * DataForge answers successfully, or `null` so the caller can fall back to
48
+ * OData metadata. Per-call resilience only — a single miss or error never
49
+ * disables DataForge globally (that verdict is owned by {@link isEnabled}).
50
+ */
51
+ getColumnsOrNull(tableName: string): Promise<unknown | null>;
52
+ private _read;
53
+ /**
54
+ * The configuration REST services use WCF `BodyStyle = Wrapped`, so a response
55
+ * is nested under a single `<Method>Result` key (e.g. `GetTableColumnsDetailsResult`).
56
+ * Unwrap it so failure detection and the returned payload see the actual response.
57
+ */
58
+ private _unwrapResult;
59
+ /** Creatio serializes `BaseResponse.Success` as camelCase `success`; tolerate both. */
60
+ private _isFailure;
61
+ private _errorCode;
62
+ private _omitUndefined;
63
+ }
64
+ //# sourceMappingURL=dataforge-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataforge-client.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/dataforge/dataforge-client.ts"],"names":[],"mappings":"AACA,OAAO,EACN,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAEhB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACX,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,GAChB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;GASG;AAEH,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAMD,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;gBAEpC,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB;IAK7E;;;;OAIG;IACU,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC,oBAAoB,CAAC,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAI7E,eAAe,CAAC,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIxE,qBAAqB,CAAC,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAUnF,eAAe,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQvE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIpE,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAS3D;;;;;OAKG;IACU,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAiBzE,OAAO,CAAC,KAAK;IAYb;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAUrB,uFAAuF;IACvF,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,cAAc;CAGtB"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DataForgeClient = void 0;
7
+ const log_1 = __importDefault(require("../../../log"));
8
+ const creatio_rest_1 = require("../creatio-rest");
9
+ const READ_SERVICE = 'DataForgeSchemaReadService';
10
+ const MAINTENANCE_SERVICE = 'DataForgeMaintenanceService';
11
+ const SERVICE_URL_SETTING = 'DataForgeServiceUrl';
12
+ class DataForgeClient {
13
+ _configuration;
14
+ _sysSettings;
15
+ constructor(configuration, sysSettings) {
16
+ this._configuration = configuration;
17
+ this._sysSettings = sysSettings;
18
+ }
19
+ /**
20
+ * Whether DataForge is configured on this environment. Gated on a non-empty
21
+ * `DataForgeServiceUrl`, mirroring the server-side `IsDataForgeEnabled` check.
22
+ * Probe failures are treated as "disabled" so callers degrade gracefully.
23
+ */
24
+ async isEnabled() {
25
+ try {
26
+ const response = await this._sysSettings.queryValues([SERVICE_URL_SETTING]);
27
+ return (0, creatio_rest_1.hasNonEmptySetting)(response, SERVICE_URL_SETTING);
28
+ }
29
+ catch (err) {
30
+ log_1.default.warn('dataforge.probe.failed', { error: String(err) });
31
+ return false;
32
+ }
33
+ }
34
+ getSimilarTableNames(q) {
35
+ return this._read('GetSimilarTableNames', { query: q.query, limit: q.limit });
36
+ }
37
+ getTableDetails(q) {
38
+ return this._read('GetTableDetails', { query: q.query, limit: q.limit });
39
+ }
40
+ getTableRelationships(q) {
41
+ return this._read('GetTableRelationships', {
42
+ sourceTable: q.sourceTable,
43
+ targetTable: q.targetTable,
44
+ limit: q.limit,
45
+ bidirectional: q.bidirectional,
46
+ skipDetails: q.skipDetails,
47
+ });
48
+ }
49
+ getLookupValues(q) {
50
+ return this._read('GetLookupValues', {
51
+ query: q.query,
52
+ schemaName: q.schemaName,
53
+ limit: q.limit,
54
+ });
55
+ }
56
+ getTableColumns(tableName) {
57
+ return this._read('GetTableColumnsDetails', { tableName });
58
+ }
59
+ getServiceStatus() {
60
+ return this._configuration.call({
61
+ service: MAINTENANCE_SERVICE,
62
+ method: 'GetServiceStatus',
63
+ httpMethod: 'POST',
64
+ body: {},
65
+ });
66
+ }
67
+ /**
68
+ * Column details for `describe-entity` routing: returns the response body when
69
+ * DataForge answers successfully, or `null` so the caller can fall back to
70
+ * OData metadata. Per-call resilience only — a single miss or error never
71
+ * disables DataForge globally (that verdict is owned by {@link isEnabled}).
72
+ */
73
+ async getColumnsOrNull(tableName) {
74
+ try {
75
+ const { body } = await this.getTableColumns(tableName);
76
+ const result = this._unwrapResult(body);
77
+ if (this._isFailure(result)) {
78
+ log_1.default.info('dataforge.describe-entity.fallback', {
79
+ reason: this._errorCode(result) ?? 'success_false',
80
+ });
81
+ return null;
82
+ }
83
+ return result ?? null;
84
+ }
85
+ catch (err) {
86
+ log_1.default.warn('dataforge.describe-entity.error', { error: String(err) });
87
+ return null;
88
+ }
89
+ }
90
+ _read(method, request) {
91
+ return this._configuration.call({
92
+ service: READ_SERVICE,
93
+ method,
94
+ httpMethod: 'POST',
95
+ body: { request: this._omitUndefined(request) },
96
+ });
97
+ }
98
+ /**
99
+ * The configuration REST services use WCF `BodyStyle = Wrapped`, so a response
100
+ * is nested under a single `<Method>Result` key (e.g. `GetTableColumnsDetailsResult`).
101
+ * Unwrap it so failure detection and the returned payload see the actual response.
102
+ */
103
+ _unwrapResult(body) {
104
+ if (body && typeof body === 'object' && !Array.isArray(body)) {
105
+ const keys = Object.keys(body);
106
+ if (keys.length === 1 && keys[0].endsWith('Result')) {
107
+ return body[keys[0]];
108
+ }
109
+ }
110
+ return body;
111
+ }
112
+ /** Creatio serializes `BaseResponse.Success` as camelCase `success`; tolerate both. */
113
+ _isFailure(result) {
114
+ if (!result || typeof result !== 'object') {
115
+ return false;
116
+ }
117
+ const r = result;
118
+ return r.success === false || r.Success === false;
119
+ }
120
+ _errorCode(result) {
121
+ const r = result;
122
+ const info = r?.errorInfo ?? r?.ErrorInfo;
123
+ return info?.errorCode ?? info?.ErrorCode;
124
+ }
125
+ _omitUndefined(obj) {
126
+ return Object.fromEntries(Object.entries(obj).filter(([, value]) => value !== undefined));
127
+ }
128
+ }
129
+ exports.DataForgeClient = DataForgeClient;
130
+ //# sourceMappingURL=dataforge-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataforge-client.js","sourceRoot":"","sources":["../../../../src/server/mcp/dataforge/dataforge-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ToolPreparer, ToolRegistrar } from '../tool-preparer';
2
+ import { DataForgeClient } from './dataforge-client';
3
+ /** Stable capability key; also used by the Server to gate describe-entity routing. */
4
+ export declare const DATAFORGE_CAPABILITY = "dataforge";
5
+ /**
6
+ * Registers the DataForge MCP tools, but only when DataForge is enabled on the
7
+ * environment. Encapsulates everything DataForge-specific so the Server remains
8
+ * agnostic of how the capability is probed or wired.
9
+ */
10
+ export declare class DataForgeToolPreparer implements ToolPreparer {
11
+ readonly name = "dataforge";
12
+ private readonly _client;
13
+ constructor(client: DataForgeClient);
14
+ prepare(registrar: ToolRegistrar): Promise<boolean>;
15
+ private _registerTools;
16
+ }
17
+ //# sourceMappingURL=dataforge-tool-preparer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataforge-tool-preparer.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/dataforge/dataforge-tool-preparer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAc/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAEhD;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACzD,SAAgB,IAAI,eAAwB;IAE5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;gBAE9B,MAAM,EAAE,eAAe;IAItB,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAShE,OAAO,CAAC,cAAc;CA2CtB"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataForgeToolPreparer = exports.DATAFORGE_CAPABILITY = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ const tools_data_1 = require("../tools-data");
6
+ /** Stable capability key; also used by the Server to gate describe-entity routing. */
7
+ exports.DATAFORGE_CAPABILITY = 'dataforge';
8
+ /**
9
+ * Registers the DataForge MCP tools, but only when DataForge is enabled on the
10
+ * environment. Encapsulates everything DataForge-specific so the Server remains
11
+ * agnostic of how the capability is probed or wired.
12
+ */
13
+ class DataForgeToolPreparer {
14
+ name = exports.DATAFORGE_CAPABILITY;
15
+ _client;
16
+ constructor(client) {
17
+ this._client = client;
18
+ }
19
+ async prepare(registrar) {
20
+ const enabled = await this._client.isEnabled();
21
+ if (!enabled) {
22
+ return false;
23
+ }
24
+ this._registerTools(registrar);
25
+ return true;
26
+ }
27
+ _registerTools(registrar) {
28
+ registrar.register('dataforge-similar-tables', tools_data_1.dataforgeSimilarTablesDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeSimilarTablesInput, ({ query, limit }) => this._client.getSimilarTableNames({ query, limit })));
29
+ registrar.register('dataforge-table-details', tools_data_1.dataforgeTableDetailsDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeTableDetailsInput, ({ query, limit }) => this._client.getTableDetails({ query, limit })));
30
+ registrar.register('dataforge-table-relationships', tools_data_1.dataforgeTableRelationshipsDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeTableRelationshipsInput, ({ sourceTable, targetTable, limit, bidirectional, skipDetails }) => this._client.getTableRelationships({
31
+ sourceTable,
32
+ targetTable,
33
+ limit,
34
+ bidirectional,
35
+ skipDetails,
36
+ })));
37
+ registrar.register('dataforge-lookup-values', tools_data_1.dataforgeLookupValuesDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeLookupValuesInput, ({ query, schemaName, limit }) => this._client.getLookupValues({ query, schemaName, limit })));
38
+ registrar.register('dataforge-status', tools_data_1.dataforgeStatusDescriptor, (0, utils_1.withValidation)(tools_data_1.dataforgeStatusInput, () => this._client.getServiceStatus()));
39
+ }
40
+ }
41
+ exports.DataForgeToolPreparer = DataForgeToolPreparer;
42
+ //# sourceMappingURL=dataforge-tool-preparer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataforge-tool-preparer.js","sourceRoot":"","sources":["../../../../src/server/mcp/dataforge/dataforge-tool-preparer.ts"],"names":[],"mappings":";;;AAAA,0CAAgD;AAEhD,8CAWuB;AAIvB,sFAAsF;AACzE,QAAA,oBAAoB,GAAG,WAAW,CAAC;AAEhD;;;;GAIG;AACH,MAAa,qBAAqB;IACjB,IAAI,GAAG,4BAAoB,CAAC;IAE3B,OAAO,CAAkB;IAE1C,YAAY,MAAuB;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,SAAwB;QAC5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,cAAc,CAAC,SAAwB;QAC9C,SAAS,CAAC,QAAQ,CACjB,0BAA0B,EAC1B,6CAAgC,EAChC,IAAA,sBAAc,EAAC,wCAA2B,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAChE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACnD,CACD,CAAC;QACF,SAAS,CAAC,QAAQ,CACjB,yBAAyB,EACzB,4CAA+B,EAC/B,IAAA,sBAAc,EAAC,uCAA0B,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAC/D,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAC9C,CACD,CAAC;QACF,SAAS,CAAC,QAAQ,CACjB,+BAA+B,EAC/B,kDAAqC,EACrC,IAAA,sBAAc,EACb,6CAAgC,EAChC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE,EAAE,CACnE,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAClC,WAAW;YACX,WAAW;YACX,KAAK;YACL,aAAa;YACb,WAAW;SACX,CAAC,CACH,CACD,CAAC;QACF,SAAS,CAAC,QAAQ,CACjB,yBAAyB,EACzB,4CAA+B,EAC/B,IAAA,sBAAc,EAAC,uCAA0B,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3E,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAC1D,CACD,CAAC;QACF,SAAS,CAAC,QAAQ,CACjB,kBAAkB,EAClB,sCAAyB,EACzB,IAAA,sBAAc,EAAC,iCAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAC3E,CAAC;IACH,CAAC;CACD;AA7DD,sDA6DC"}
@@ -1,2 +1,8 @@
1
- export declare function buildFilterFromStructured(filters: any | undefined): string | undefined;
1
+ import { FilterNode, OrderSpec } from '../../creatio/contracts';
2
+ /** Build the neutral {@link FilterNode} from the structured `filters` argument (AND of the
3
+ * `all` group with the `any` group), or undefined when there is nothing to filter on. */
4
+ export declare function buildFilterNode(filters: unknown): FilterNode | undefined;
5
+ /** Parse an OData-style `$orderby` clause ("Name asc, CreatedOn desc") into neutral order
6
+ * terms. Direction defaults to ascending when omitted. */
7
+ export declare function parseOrderBy(orderBy: unknown): OrderSpec[] | undefined;
2
8
  //# sourceMappingURL=filters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/filters.ts"],"names":[],"mappings":"AA6DA,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAmCtF"}
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAqDlF;0FAC0F;AAC1F,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAexE;AAED;2DAC2D;AAC3D,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,SAAS,CAatE"}
@@ -1,94 +1,68 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildFilterFromStructured = buildFilterFromStructured;
4
- function isGuid(s) {
5
- return (typeof s === 'string' &&
6
- /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(s));
7
- }
8
- function isIdish(field) {
9
- return /(^|\/)Id$/.test(field) || /Id$/i.test(field);
10
- }
11
- function escapeStr(val) {
12
- return val.replace(/'/g, "''");
13
- }
14
- function literalFor(field, value) {
15
- if (value == null) {
16
- return 'null';
17
- }
18
- const t = typeof value;
19
- if (t === 'number') {
20
- return String(value);
21
- }
22
- if (t === 'boolean') {
23
- return value ? 'true' : 'false';
24
- }
25
- if (t === 'string') {
26
- const v = String(value);
27
- const isNavigationProperty = field.includes('/');
28
- if (isGuid(v) && isIdish(field) && !isNavigationProperty) {
29
- return v;
30
- }
31
- return `'${escapeStr(v)}'`;
32
- }
33
- return `'${escapeStr(JSON.stringify(value))}'`;
34
- }
35
- function buildCondition(c) {
3
+ exports.buildFilterNode = buildFilterNode;
4
+ exports.parseOrderBy = parseOrderBy;
5
+ function toNode(c) {
36
6
  if (!c || !c.field) {
37
7
  return undefined;
38
8
  }
39
9
  const field = String(c.field);
40
10
  if (Array.isArray(c.in)) {
41
- const values = c.in;
42
- if (!values.length) {
43
- return undefined;
44
- }
45
- const parts = values.map((v) => `${field} eq ${literalFor(field, v)}`);
46
- return parts.length === 1 ? parts[0] : `(${parts.join(' or ')})`;
11
+ return c.in.length ? { kind: 'in', field, values: c.in } : undefined;
47
12
  }
48
- const op = String(c.op || 'eq');
49
- const value = c.value;
50
- if (op === 'contains' || op === 'startswith' || op === 'endswith') {
51
- return `${op}(${field},${literalFor(field, value)})`;
13
+ const op = (c.op ? String(c.op) : 'eq');
14
+ // A null/absent value against eq/ne is a null-check; route it through the dedicated
15
+ // neutral ops so each backend renders it correctly (OData `field eq null`,
16
+ // DataService `IsNullFilter`).
17
+ if (c.value === null || c.value === undefined) {
18
+ if (op === 'eq') {
19
+ return { kind: 'condition', field, op: 'isNull' };
20
+ }
21
+ if (op === 'ne') {
22
+ return { kind: 'condition', field, op: 'isNotNull' };
23
+ }
52
24
  }
53
- if (value == null && (op === 'eq' || op === 'ne')) {
54
- return `${field} ${op} null`;
25
+ return { kind: 'condition', field, op, value: c.value };
26
+ }
27
+ function group(logic, conditions) {
28
+ const items = conditions.map(toNode).filter((n) => Boolean(n));
29
+ if (!items.length) {
30
+ return undefined;
55
31
  }
56
- return `${field} ${op} ${literalFor(field, value)}`;
32
+ return { kind: 'group', logic, items };
57
33
  }
58
- function buildFilterFromStructured(filters) {
34
+ /** Build the neutral {@link FilterNode} from the structured `filters` argument (AND of the
35
+ * `all` group with the `any` group), or undefined when there is nothing to filter on. */
36
+ function buildFilterNode(filters) {
59
37
  if (!filters || typeof filters !== 'object') {
60
38
  return undefined;
61
39
  }
62
- const andParts = [];
63
- const orParts = [];
64
- if (Array.isArray(filters.all)) {
65
- for (const c of filters.all) {
66
- const s = buildCondition(c);
67
- if (s) {
68
- andParts.push(s);
69
- }
70
- }
71
- }
72
- if (Array.isArray(filters.any)) {
73
- for (const c of filters.any) {
74
- const s = buildCondition(c);
75
- if (s) {
76
- orParts.push(s);
77
- }
78
- }
79
- }
80
- const andStr = andParts.join(' and ');
81
- const orStr = orParts.join(' or ');
82
- const parts = [];
83
- if (andStr) {
84
- parts.push(andParts.length > 1 ? `(${andStr})` : andStr);
40
+ const f = filters;
41
+ const allNode = Array.isArray(f.all) ? group('and', f.all) : undefined;
42
+ const anyNode = Array.isArray(f.any) ? group('or', f.any) : undefined;
43
+ const parts = [allNode, anyNode].filter((n) => Boolean(n));
44
+ if (!parts.length) {
45
+ return undefined;
85
46
  }
86
- if (orStr) {
87
- parts.push(orParts.length > 1 ? `(${orStr})` : orStr);
47
+ if (parts.length === 1) {
48
+ return parts[0];
88
49
  }
89
- if (!parts.length) {
50
+ return { kind: 'group', logic: 'and', items: parts };
51
+ }
52
+ /** Parse an OData-style `$orderby` clause ("Name asc, CreatedOn desc") into neutral order
53
+ * terms. Direction defaults to ascending when omitted. */
54
+ function parseOrderBy(orderBy) {
55
+ if (typeof orderBy !== 'string' || !orderBy.trim()) {
90
56
  return undefined;
91
57
  }
92
- return parts.join(' and ');
58
+ const terms = orderBy
59
+ .split(',')
60
+ .map((part) => part.trim())
61
+ .filter(Boolean)
62
+ .map((part) => {
63
+ const [field, dir] = part.split(/\s+/);
64
+ return { field: field, dir: (dir ?? '').toLowerCase() === 'desc' ? 'desc' : 'asc' };
65
+ });
66
+ return terms.length ? terms : undefined;
93
67
  }
94
68
  //# sourceMappingURL=filters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/server/mcp/filters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/server/mcp/filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { ConfigurationCaller, SysSettingReader } from '../creatio-rest';
2
+ /**
3
+ * Global Search access layer.
4
+ *
5
+ * Single responsibility: call the Creatio-hosted `GlobalSearchService` (which
6
+ * proxies Elasticsearch) and expose an availability probe. Knows nothing about
7
+ * MCP tool registration.
8
+ *
9
+ * `GlobalSearchService.Search` uses `[WebInvoke(BodyStyle = Wrapped)]` with
10
+ * several primitive parameters, so the request body is a FLAT object with one
11
+ * top-level key per parameter (unlike DataForge's single wrapped `request`).
12
+ */
13
+ export interface GlobalSearchQuery {
14
+ /** Free-text search string. */
15
+ query: string;
16
+ /** Optional comma-separated entity schema names to restrict the search to. */
17
+ type?: string | undefined;
18
+ /** Optional current section entity name (UI context). */
19
+ sectionEntityName?: string | undefined;
20
+ /** Max records to return. */
21
+ recordCount?: number | undefined;
22
+ /** Pagination offset. */
23
+ from?: number | undefined;
24
+ }
25
+ export declare class GlobalSearchClient {
26
+ private readonly _configuration;
27
+ private readonly _sysSettings;
28
+ constructor(configuration: ConfigurationCaller, sysSettings: SysSettingReader);
29
+ /**
30
+ * Whether Global Search is configured on this environment. Gated on a non-empty
31
+ * `GlobalSearchUrl`. Note: the platform additionally requires the `GlobalSearch_V2`
32
+ * feature; a configured URL is the cheap operator-facing signal used to decide
33
+ * whether to expose the tool. Probe failures degrade to "disabled".
34
+ */
35
+ isEnabled(): Promise<boolean>;
36
+ /**
37
+ * Run a global search and return a compact, UI-like result: per match the
38
+ * entity, record id, a display title, and the highlighted `matched` columns —
39
+ * plus `total`/`nextFrom` for paging. (The raw service returns every indexed
40
+ * column of every record as a stringified `SearchResult`; that is far too large
41
+ * to hand to an LLM, so we parse and project it. Use `read` with the id for the
42
+ * full record.)
43
+ */
44
+ search(q: GlobalSearchQuery): Promise<unknown>;
45
+ /** Parse the stringified `SearchResult` envelope and project it to a compact shape. */
46
+ private _project;
47
+ /** Best-effort human title from a record's column values (string or `{ displayValue }`). */
48
+ private _displayName;
49
+ }
50
+ //# sourceMappingURL=globalsearch-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalsearch-client.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/globalsearch/globalsearch-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAsB,MAAM,iBAAiB,CAAC;AAE5F;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,iBAAiB;IACjC,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAQD,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;gBAEpC,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB;IAK7E;;;;;OAKG;IACU,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAU1C;;;;;;;OAOG;IACU,MAAM,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB3D,uFAAuF;IACvF,OAAO,CAAC,QAAQ;IAoChB,4FAA4F;IAC5F,OAAO,CAAC,YAAY;CAmBpB"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GlobalSearchClient = void 0;
7
+ const log_1 = __importDefault(require("../../../log"));
8
+ const creatio_rest_1 = require("../creatio-rest");
9
+ const SEARCH_SERVICE = 'GlobalSearchService';
10
+ // Either URL being set is the operator-facing signal that Global Search is wired;
11
+ // `GlobalSearchUrl` (the Elasticsearch endpoint) is the core requirement.
12
+ const SEARCH_URL_SETTING = 'GlobalSearchUrl';
13
+ const DEFAULT_RECORD_COUNT = 15;
14
+ class GlobalSearchClient {
15
+ _configuration;
16
+ _sysSettings;
17
+ constructor(configuration, sysSettings) {
18
+ this._configuration = configuration;
19
+ this._sysSettings = sysSettings;
20
+ }
21
+ /**
22
+ * Whether Global Search is configured on this environment. Gated on a non-empty
23
+ * `GlobalSearchUrl`. Note: the platform additionally requires the `GlobalSearch_V2`
24
+ * feature; a configured URL is the cheap operator-facing signal used to decide
25
+ * whether to expose the tool. Probe failures degrade to "disabled".
26
+ */
27
+ async isEnabled() {
28
+ try {
29
+ const response = await this._sysSettings.queryValues([SEARCH_URL_SETTING]);
30
+ return (0, creatio_rest_1.hasNonEmptySetting)(response, SEARCH_URL_SETTING);
31
+ }
32
+ catch (err) {
33
+ log_1.default.warn('globalsearch.probe.failed', { error: String(err) });
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Run a global search and return a compact, UI-like result: per match the
39
+ * entity, record id, a display title, and the highlighted `matched` columns —
40
+ * plus `total`/`nextFrom` for paging. (The raw service returns every indexed
41
+ * column of every record as a stringified `SearchResult`; that is far too large
42
+ * to hand to an LLM, so we parse and project it. Use `read` with the id for the
43
+ * full record.)
44
+ */
45
+ async search(q) {
46
+ // `GlobalSearchService.Search(queryString, sectionEntityName, recordCount, type="", from=0)`
47
+ // — the first three parameters have no defaults, so the WCF Wrapped body MUST
48
+ // include them or binding fails with HTTP 400. `type` is optional; only send it
49
+ // when filtering, mirroring the UI call.
50
+ const body = {
51
+ queryString: q.query,
52
+ sectionEntityName: q.sectionEntityName ?? '',
53
+ recordCount: q.recordCount ?? DEFAULT_RECORD_COUNT,
54
+ from: q.from ?? 0,
55
+ };
56
+ if (q.type) {
57
+ body.type = q.type;
58
+ }
59
+ const response = await this._configuration.call({
60
+ service: SEARCH_SERVICE,
61
+ method: 'Search',
62
+ httpMethod: 'POST',
63
+ body,
64
+ });
65
+ return this._project(response.body);
66
+ }
67
+ /** Parse the stringified `SearchResult` envelope and project it to a compact shape. */
68
+ _project(body) {
69
+ const raw = body?.SearchResult;
70
+ let parsed = raw;
71
+ if (typeof raw === 'string') {
72
+ try {
73
+ parsed = JSON.parse(raw);
74
+ }
75
+ catch {
76
+ return body;
77
+ }
78
+ }
79
+ const p = parsed;
80
+ if (!p || !Array.isArray(p.data)) {
81
+ return parsed ?? body;
82
+ }
83
+ return {
84
+ success: p.success,
85
+ total: p.total,
86
+ nextFrom: p.nextFrom,
87
+ took: p.took,
88
+ errorInfo: p.errorInfo ?? null,
89
+ results: p.data.map((r) => ({
90
+ entityName: r.entityName,
91
+ id: r.id,
92
+ title: this._displayName(r.columnValues),
93
+ matched: r.foundColumns,
94
+ })),
95
+ };
96
+ }
97
+ /** Best-effort human title from a record's column values (string or `{ displayValue }`). */
98
+ _displayName(columnValues) {
99
+ if (!columnValues || typeof columnValues !== 'object') {
100
+ return undefined;
101
+ }
102
+ const cv = columnValues;
103
+ for (const key of ['Name', 'Title', 'LeadName', 'BpmName', 'Subject', 'Number', 'Email']) {
104
+ const v = cv[key];
105
+ const s = typeof v === 'string'
106
+ ? v
107
+ : v && typeof v === 'object'
108
+ ? v.displayValue
109
+ : undefined;
110
+ if (typeof s === 'string' && s.trim().length > 0) {
111
+ return s.trim();
112
+ }
113
+ }
114
+ return undefined;
115
+ }
116
+ }
117
+ exports.GlobalSearchClient = GlobalSearchClient;
118
+ //# sourceMappingURL=globalsearch-client.js.map