mcp-creatio 0.3.6

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 (370) hide show
  1. package/.dockerignore +12 -0
  2. package/.editorconfig +14 -0
  3. package/.eslintrc.cjs +18 -0
  4. package/.gitattributes +8 -0
  5. package/.github/workflows/docker-publish.yml +50 -0
  6. package/.prettierignore +3 -0
  7. package/.prettierrc +9 -0
  8. package/.vscode/launch.json +23 -0
  9. package/.vscode/mcp.json +13 -0
  10. package/.vscode/settings.json +16 -0
  11. package/Agent.md +187 -0
  12. package/Debug.md +32 -0
  13. package/Dockerfile +23 -0
  14. package/LICENSE +21 -0
  15. package/README.md +162 -0
  16. package/dist/cli.d.ts +3 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +135 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/config-builder.d.ts +3 -0
  21. package/dist/config-builder.d.ts.map +1 -0
  22. package/dist/config-builder.js +66 -0
  23. package/dist/config-builder.js.map +1 -0
  24. package/dist/consts.d.ts +2 -0
  25. package/dist/consts.d.ts.map +1 -0
  26. package/dist/consts.js +6 -0
  27. package/dist/consts.js.map +1 -0
  28. package/dist/creatio/auth/auth-manager.d.ts +9 -0
  29. package/dist/creatio/auth/auth-manager.d.ts.map +1 -0
  30. package/dist/creatio/auth/auth-manager.js +29 -0
  31. package/dist/creatio/auth/auth-manager.js.map +1 -0
  32. package/dist/creatio/auth/auth.d.ts +16 -0
  33. package/dist/creatio/auth/auth.d.ts.map +1 -0
  34. package/dist/creatio/auth/auth.js +20 -0
  35. package/dist/creatio/auth/auth.js.map +1 -0
  36. package/dist/creatio/auth/index.d.ts +4 -0
  37. package/dist/creatio/auth/index.d.ts.map +1 -0
  38. package/dist/creatio/auth/index.js +21 -0
  39. package/dist/creatio/auth/index.js.map +1 -0
  40. package/dist/creatio/auth/providers/base-oauth2-provider.d.ts +17 -0
  41. package/dist/creatio/auth/providers/base-oauth2-provider.d.ts.map +1 -0
  42. package/dist/creatio/auth/providers/base-oauth2-provider.js +49 -0
  43. package/dist/creatio/auth/providers/base-oauth2-provider.js.map +1 -0
  44. package/dist/creatio/auth/providers/base-provider.d.ts +15 -0
  45. package/dist/creatio/auth/providers/base-provider.d.ts.map +1 -0
  46. package/dist/creatio/auth/providers/base-provider.js +32 -0
  47. package/dist/creatio/auth/providers/base-provider.js.map +1 -0
  48. package/dist/creatio/auth/providers/index.d.ts +5 -0
  49. package/dist/creatio/auth/providers/index.d.ts.map +1 -0
  50. package/dist/creatio/auth/providers/index.js +21 -0
  51. package/dist/creatio/auth/providers/index.js.map +1 -0
  52. package/dist/creatio/auth/providers/legacy-provider.d.ts +10 -0
  53. package/dist/creatio/auth/providers/legacy-provider.d.ts.map +1 -0
  54. package/dist/creatio/auth/providers/legacy-provider.js +73 -0
  55. package/dist/creatio/auth/providers/legacy-provider.js.map +1 -0
  56. package/dist/creatio/auth/providers/oauth2-code-provider.d.ts +18 -0
  57. package/dist/creatio/auth/providers/oauth2-code-provider.d.ts.map +1 -0
  58. package/dist/creatio/auth/providers/oauth2-code-provider.js +245 -0
  59. package/dist/creatio/auth/providers/oauth2-code-provider.js.map +1 -0
  60. package/dist/creatio/auth/providers/oauth2-provider.d.ts +9 -0
  61. package/dist/creatio/auth/providers/oauth2-provider.d.ts.map +1 -0
  62. package/dist/creatio/auth/providers/oauth2-provider.js +86 -0
  63. package/dist/creatio/auth/providers/oauth2-provider.js.map +1 -0
  64. package/dist/creatio/auth/providers/type.d.ts +6 -0
  65. package/dist/creatio/auth/providers/type.d.ts.map +1 -0
  66. package/dist/creatio/auth/providers/type.js +10 -0
  67. package/dist/creatio/auth/providers/type.js.map +1 -0
  68. package/dist/creatio/client-config.d.ts +29 -0
  69. package/dist/creatio/client-config.d.ts.map +1 -0
  70. package/dist/creatio/client-config.js +3 -0
  71. package/dist/creatio/client-config.js.map +1 -0
  72. package/dist/creatio/engines/crud/crud-engine.d.ts +15 -0
  73. package/dist/creatio/engines/crud/crud-engine.d.ts.map +1 -0
  74. package/dist/creatio/engines/crud/crud-engine.js +33 -0
  75. package/dist/creatio/engines/crud/crud-engine.js.map +1 -0
  76. package/dist/creatio/engines/engine-manager.d.ts +33 -0
  77. package/dist/creatio/engines/engine-manager.d.ts.map +1 -0
  78. package/dist/creatio/engines/engine-manager.js +54 -0
  79. package/dist/creatio/engines/engine-manager.js.map +1 -0
  80. package/dist/creatio/engines/engine-registry.d.ts +15 -0
  81. package/dist/creatio/engines/engine-registry.d.ts.map +1 -0
  82. package/dist/creatio/engines/engine-registry.js +35 -0
  83. package/dist/creatio/engines/engine-registry.js.map +1 -0
  84. package/dist/creatio/engines/engine.d.ts +4 -0
  85. package/dist/creatio/engines/engine.d.ts.map +1 -0
  86. package/dist/creatio/engines/engine.js +3 -0
  87. package/dist/creatio/engines/engine.js.map +1 -0
  88. package/dist/creatio/engines/index.d.ts +8 -0
  89. package/dist/creatio/engines/index.d.ts.map +1 -0
  90. package/dist/creatio/engines/index.js +24 -0
  91. package/dist/creatio/engines/index.js.map +1 -0
  92. package/dist/creatio/engines/process/process-engine.d.ts +10 -0
  93. package/dist/creatio/engines/process/process-engine.d.ts.map +1 -0
  94. package/dist/creatio/engines/process/process-engine.js +18 -0
  95. package/dist/creatio/engines/process/process-engine.js.map +1 -0
  96. package/dist/creatio/engines/sys-settings/sys-settings-engine.d.ts +13 -0
  97. package/dist/creatio/engines/sys-settings/sys-settings-engine.d.ts.map +1 -0
  98. package/dist/creatio/engines/sys-settings/sys-settings-engine.js +27 -0
  99. package/dist/creatio/engines/sys-settings/sys-settings-engine.js.map +1 -0
  100. package/dist/creatio/engines/user/user-engine.d.ts +10 -0
  101. package/dist/creatio/engines/user/user-engine.d.ts.map +1 -0
  102. package/dist/creatio/engines/user/user-engine.js +18 -0
  103. package/dist/creatio/engines/user/user-engine.js.map +1 -0
  104. package/dist/creatio/index.d.ts +7 -0
  105. package/dist/creatio/index.d.ts.map +1 -0
  106. package/dist/creatio/index.js +23 -0
  107. package/dist/creatio/index.js.map +1 -0
  108. package/dist/creatio/provider-context.d.ts +10 -0
  109. package/dist/creatio/provider-context.d.ts.map +1 -0
  110. package/dist/creatio/provider-context.js +3 -0
  111. package/dist/creatio/provider-context.js.map +1 -0
  112. package/dist/creatio/providers/crud-provider.d.ts +40 -0
  113. package/dist/creatio/providers/crud-provider.d.ts.map +1 -0
  114. package/dist/creatio/providers/crud-provider.js +3 -0
  115. package/dist/creatio/providers/crud-provider.js.map +1 -0
  116. package/dist/creatio/providers/index.d.ts +5 -0
  117. package/dist/creatio/providers/index.d.ts.map +1 -0
  118. package/dist/creatio/providers/index.js +21 -0
  119. package/dist/creatio/providers/index.js.map +1 -0
  120. package/dist/creatio/providers/process-provider.d.ts +14 -0
  121. package/dist/creatio/providers/process-provider.d.ts.map +1 -0
  122. package/dist/creatio/providers/process-provider.js +3 -0
  123. package/dist/creatio/providers/process-provider.js.map +1 -0
  124. package/dist/creatio/providers/sys-settings-provider.d.ts +58 -0
  125. package/dist/creatio/providers/sys-settings-provider.d.ts.map +1 -0
  126. package/dist/creatio/providers/sys-settings-provider.js +3 -0
  127. package/dist/creatio/providers/sys-settings-provider.js.map +1 -0
  128. package/dist/creatio/providers/user-provider.d.ts +12 -0
  129. package/dist/creatio/providers/user-provider.d.ts.map +1 -0
  130. package/dist/creatio/providers/user-provider.js +3 -0
  131. package/dist/creatio/providers/user-provider.js.map +1 -0
  132. package/dist/creatio/services/creatio-service-context.d.ts +17 -0
  133. package/dist/creatio/services/creatio-service-context.d.ts.map +1 -0
  134. package/dist/creatio/services/creatio-service-context.js +35 -0
  135. package/dist/creatio/services/creatio-service-context.js.map +1 -0
  136. package/dist/creatio/services/http-client.d.ts +29 -0
  137. package/dist/creatio/services/http-client.d.ts.map +1 -0
  138. package/dist/creatio/services/http-client.js +136 -0
  139. package/dist/creatio/services/http-client.js.map +1 -0
  140. package/dist/creatio/services/index.d.ts +8 -0
  141. package/dist/creatio/services/index.d.ts.map +1 -0
  142. package/dist/creatio/services/index.js +24 -0
  143. package/dist/creatio/services/index.js.map +1 -0
  144. package/dist/creatio/services/metadata-store.d.ts +20 -0
  145. package/dist/creatio/services/metadata-store.d.ts.map +1 -0
  146. package/dist/creatio/services/metadata-store.js +162 -0
  147. package/dist/creatio/services/metadata-store.js.map +1 -0
  148. package/dist/creatio/services/odata-crud-provider.d.ts +21 -0
  149. package/dist/creatio/services/odata-crud-provider.d.ts.map +1 -0
  150. package/dist/creatio/services/odata-crud-provider.js +145 -0
  151. package/dist/creatio/services/odata-crud-provider.js.map +1 -0
  152. package/dist/creatio/services/process-service-provider.d.ts +11 -0
  153. package/dist/creatio/services/process-service-provider.d.ts.map +1 -0
  154. package/dist/creatio/services/process-service-provider.js +52 -0
  155. package/dist/creatio/services/process-service-provider.js.map +1 -0
  156. package/dist/creatio/services/sys-settings-service-provider.d.ts +19 -0
  157. package/dist/creatio/services/sys-settings-service-provider.d.ts.map +1 -0
  158. package/dist/creatio/services/sys-settings-service-provider.js +107 -0
  159. package/dist/creatio/services/sys-settings-service-provider.js.map +1 -0
  160. package/dist/creatio/services/user-info-provider.d.ts +10 -0
  161. package/dist/creatio/services/user-info-provider.d.ts.map +1 -0
  162. package/dist/creatio/services/user-info-provider.js +26 -0
  163. package/dist/creatio/services/user-info-provider.js.map +1 -0
  164. package/dist/index.d.ts +2 -0
  165. package/dist/index.d.ts.map +1 -0
  166. package/dist/index.js +46 -0
  167. package/dist/index.js.map +1 -0
  168. package/dist/log.d.ts +51 -0
  169. package/dist/log.d.ts.map +1 -0
  170. package/dist/log.js +137 -0
  171. package/dist/log.js.map +1 -0
  172. package/dist/server/http/creatio-oauth-handlers.d.ts +14 -0
  173. package/dist/server/http/creatio-oauth-handlers.d.ts.map +1 -0
  174. package/dist/server/http/creatio-oauth-handlers.js +137 -0
  175. package/dist/server/http/creatio-oauth-handlers.js.map +1 -0
  176. package/dist/server/http/httpServer.d.ts +23 -0
  177. package/dist/server/http/httpServer.d.ts.map +1 -0
  178. package/dist/server/http/httpServer.js +131 -0
  179. package/dist/server/http/httpServer.js.map +1 -0
  180. package/dist/server/http/index.d.ts +6 -0
  181. package/dist/server/http/index.d.ts.map +1 -0
  182. package/dist/server/http/index.js +22 -0
  183. package/dist/server/http/index.js.map +1 -0
  184. package/dist/server/http/mcp-handlers.d.ts +10 -0
  185. package/dist/server/http/mcp-handlers.d.ts.map +1 -0
  186. package/dist/server/http/mcp-handlers.js +82 -0
  187. package/dist/server/http/mcp-handlers.js.map +1 -0
  188. package/dist/server/http/mcp-oauth-handlers.d.ts +11 -0
  189. package/dist/server/http/mcp-oauth-handlers.d.ts.map +1 -0
  190. package/dist/server/http/mcp-oauth-handlers.js +106 -0
  191. package/dist/server/http/mcp-oauth-handlers.js.map +1 -0
  192. package/dist/server/http/middleware.d.ts +11 -0
  193. package/dist/server/http/middleware.d.ts.map +1 -0
  194. package/dist/server/http/middleware.js +88 -0
  195. package/dist/server/http/middleware.js.map +1 -0
  196. package/dist/server/index.d.ts +3 -0
  197. package/dist/server/index.d.ts.map +1 -0
  198. package/dist/server/index.js +19 -0
  199. package/dist/server/index.js.map +1 -0
  200. package/dist/server/mcp/filters.d.ts +2 -0
  201. package/dist/server/mcp/filters.d.ts.map +1 -0
  202. package/dist/server/mcp/filters.js +94 -0
  203. package/dist/server/mcp/filters.js.map +1 -0
  204. package/dist/server/mcp/index.d.ts +2 -0
  205. package/dist/server/mcp/index.d.ts.map +1 -0
  206. package/dist/server/mcp/index.js +18 -0
  207. package/dist/server/mcp/index.js.map +1 -0
  208. package/dist/server/mcp/prompts-data.d.ts +147 -0
  209. package/dist/server/mcp/prompts-data.d.ts.map +1 -0
  210. package/dist/server/mcp/prompts-data.js +884 -0
  211. package/dist/server/mcp/prompts-data.js.map +1 -0
  212. package/dist/server/mcp/server.d.ts +25 -0
  213. package/dist/server/mcp/server.d.ts.map +1 -0
  214. package/dist/server/mcp/server.js +233 -0
  215. package/dist/server/mcp/server.js.map +1 -0
  216. package/dist/server/mcp/tools-data.d.ts +165 -0
  217. package/dist/server/mcp/tools-data.d.ts.map +1 -0
  218. package/dist/server/mcp/tools-data.js +466 -0
  219. package/dist/server/mcp/tools-data.js.map +1 -0
  220. package/dist/server/oauth/client-manager.d.ts +6 -0
  221. package/dist/server/oauth/client-manager.d.ts.map +1 -0
  222. package/dist/server/oauth/client-manager.js +52 -0
  223. package/dist/server/oauth/client-manager.js.map +1 -0
  224. package/dist/server/oauth/index.d.ts +7 -0
  225. package/dist/server/oauth/index.d.ts.map +1 -0
  226. package/dist/server/oauth/index.js +23 -0
  227. package/dist/server/oauth/index.js.map +1 -0
  228. package/dist/server/oauth/oauth-server.d.ts +21 -0
  229. package/dist/server/oauth/oauth-server.d.ts.map +1 -0
  230. package/dist/server/oauth/oauth-server.js +146 -0
  231. package/dist/server/oauth/oauth-server.js.map +1 -0
  232. package/dist/server/oauth/storage.d.ts +31 -0
  233. package/dist/server/oauth/storage.d.ts.map +1 -0
  234. package/dist/server/oauth/storage.js +73 -0
  235. package/dist/server/oauth/storage.js.map +1 -0
  236. package/dist/server/oauth/token-manager.d.ts +13 -0
  237. package/dist/server/oauth/token-manager.d.ts.map +1 -0
  238. package/dist/server/oauth/token-manager.js +69 -0
  239. package/dist/server/oauth/token-manager.js.map +1 -0
  240. package/dist/server/oauth/types.d.ts +51 -0
  241. package/dist/server/oauth/types.d.ts.map +1 -0
  242. package/dist/server/oauth/types.js +3 -0
  243. package/dist/server/oauth/types.js.map +1 -0
  244. package/dist/server/oauth/validators.d.ts +7 -0
  245. package/dist/server/oauth/validators.d.ts.map +1 -0
  246. package/dist/server/oauth/validators.js +51 -0
  247. package/dist/server/oauth/validators.js.map +1 -0
  248. package/dist/services/index.d.ts +3 -0
  249. package/dist/services/index.d.ts.map +1 -0
  250. package/dist/services/index.js +19 -0
  251. package/dist/services/index.js.map +1 -0
  252. package/dist/services/session-context.d.ts +57 -0
  253. package/dist/services/session-context.d.ts.map +1 -0
  254. package/dist/services/session-context.js +182 -0
  255. package/dist/services/session-context.js.map +1 -0
  256. package/dist/services/token-refresh-scheduler.d.ts +16 -0
  257. package/dist/services/token-refresh-scheduler.d.ts.map +1 -0
  258. package/dist/services/token-refresh-scheduler.js +66 -0
  259. package/dist/services/token-refresh-scheduler.js.map +1 -0
  260. package/dist/types/index.d.ts +2 -0
  261. package/dist/types/index.d.ts.map +1 -0
  262. package/dist/types/index.js +18 -0
  263. package/dist/types/index.js.map +1 -0
  264. package/dist/types/network.d.ts +7 -0
  265. package/dist/types/network.d.ts.map +1 -0
  266. package/dist/types/network.js +6 -0
  267. package/dist/types/network.js.map +1 -0
  268. package/dist/utils/context.d.ts +10 -0
  269. package/dist/utils/context.d.ts.map +1 -0
  270. package/dist/utils/context.js +44 -0
  271. package/dist/utils/context.js.map +1 -0
  272. package/dist/utils/env.d.ts +3 -0
  273. package/dist/utils/env.d.ts.map +1 -0
  274. package/dist/utils/env.js +16 -0
  275. package/dist/utils/env.js.map +1 -0
  276. package/dist/utils/index.d.ts +6 -0
  277. package/dist/utils/index.d.ts.map +1 -0
  278. package/dist/utils/index.js +22 -0
  279. package/dist/utils/index.js.map +1 -0
  280. package/dist/utils/mcp.d.ts +3 -0
  281. package/dist/utils/mcp.d.ts.map +1 -0
  282. package/dist/utils/mcp.js +7 -0
  283. package/dist/utils/mcp.js.map +1 -0
  284. package/dist/utils/network.d.ts +7 -0
  285. package/dist/utils/network.d.ts.map +1 -0
  286. package/dist/utils/network.js +63 -0
  287. package/dist/utils/network.js.map +1 -0
  288. package/dist/utils/pkce.d.ts +7 -0
  289. package/dist/utils/pkce.d.ts.map +1 -0
  290. package/dist/utils/pkce.js +43 -0
  291. package/dist/utils/pkce.js.map +1 -0
  292. package/dist/version.d.ts +3 -0
  293. package/dist/version.d.ts.map +1 -0
  294. package/dist/version.js +10 -0
  295. package/dist/version.js.map +1 -0
  296. package/docs/coding-style.md +30 -0
  297. package/ecosystem.config.json +17 -0
  298. package/eslint.config.cjs +95 -0
  299. package/package.json +54 -0
  300. package/src/cli.ts +158 -0
  301. package/src/config-builder.ts +76 -0
  302. package/src/consts.ts +3 -0
  303. package/src/creatio/auth/auth-manager.ts +27 -0
  304. package/src/creatio/auth/auth.ts +31 -0
  305. package/src/creatio/auth/index.ts +3 -0
  306. package/src/creatio/auth/providers/base-oauth2-provider.ts +62 -0
  307. package/src/creatio/auth/providers/base-provider.ts +42 -0
  308. package/src/creatio/auth/providers/index.ts +4 -0
  309. package/src/creatio/auth/providers/legacy-provider.ts +70 -0
  310. package/src/creatio/auth/providers/oauth2-code-provider.ts +252 -0
  311. package/src/creatio/auth/providers/oauth2-provider.ts +91 -0
  312. package/src/creatio/auth/providers/type.ts +5 -0
  313. package/src/creatio/client-config.ts +34 -0
  314. package/src/creatio/engines/crud/crud-engine.ts +47 -0
  315. package/src/creatio/engines/engine-manager.ts +102 -0
  316. package/src/creatio/engines/engine-registry.ts +36 -0
  317. package/src/creatio/engines/engine.ts +3 -0
  318. package/src/creatio/engines/index.ts +7 -0
  319. package/src/creatio/engines/process/process-engine.ts +20 -0
  320. package/src/creatio/engines/sys-settings/sys-settings-engine.ts +41 -0
  321. package/src/creatio/engines/user/user-engine.ts +20 -0
  322. package/src/creatio/index.ts +6 -0
  323. package/src/creatio/provider-context.ts +10 -0
  324. package/src/creatio/providers/crud-provider.ts +45 -0
  325. package/src/creatio/providers/index.ts +4 -0
  326. package/src/creatio/providers/process-provider.ts +15 -0
  327. package/src/creatio/providers/sys-settings-provider.ts +63 -0
  328. package/src/creatio/providers/user-provider.ts +12 -0
  329. package/src/creatio/services/creatio-service-context.ts +38 -0
  330. package/src/creatio/services/http-client.ts +174 -0
  331. package/src/creatio/services/index.ts +7 -0
  332. package/src/creatio/services/metadata-store.ts +181 -0
  333. package/src/creatio/services/odata-crud-provider.ts +210 -0
  334. package/src/creatio/services/process-service-provider.ts +76 -0
  335. package/src/creatio/services/sys-settings-service-provider.ts +192 -0
  336. package/src/creatio/services/user-info-provider.ts +41 -0
  337. package/src/index.ts +44 -0
  338. package/src/log.ts +141 -0
  339. package/src/server/http/creatio-oauth-handlers.ts +146 -0
  340. package/src/server/http/httpServer.ts +150 -0
  341. package/src/server/http/index.ts +5 -0
  342. package/src/server/http/mcp-handlers.ts +92 -0
  343. package/src/server/http/mcp-oauth-handlers.ts +108 -0
  344. package/src/server/http/middleware.ts +91 -0
  345. package/src/server/index.ts +2 -0
  346. package/src/server/mcp/filters.ts +97 -0
  347. package/src/server/mcp/index.ts +1 -0
  348. package/src/server/mcp/prompts-data.ts +896 -0
  349. package/src/server/mcp/server.ts +331 -0
  350. package/src/server/mcp/tools-data.ts +592 -0
  351. package/src/server/oauth/client-manager.ts +47 -0
  352. package/src/server/oauth/index.ts +6 -0
  353. package/src/server/oauth/oauth-server.ts +185 -0
  354. package/src/server/oauth/storage.ts +106 -0
  355. package/src/server/oauth/token-manager.ts +80 -0
  356. package/src/server/oauth/types.ts +55 -0
  357. package/src/server/oauth/validators.ts +56 -0
  358. package/src/services/index.ts +2 -0
  359. package/src/services/session-context.ts +232 -0
  360. package/src/services/token-refresh-scheduler.ts +68 -0
  361. package/src/types/index.ts +1 -0
  362. package/src/types/network.ts +7 -0
  363. package/src/utils/context.ts +49 -0
  364. package/src/utils/env.ts +12 -0
  365. package/src/utils/index.ts +5 -0
  366. package/src/utils/mcp.ts +8 -0
  367. package/src/utils/network.ts +65 -0
  368. package/src/utils/pkce.ts +39 -0
  369. package/src/version.ts +15 -0
  370. package/tsconfig.json +28 -0
@@ -0,0 +1,41 @@
1
+ import {
2
+ CreateSysSettingRequest,
3
+ CreateSysSettingResult,
4
+ QuerySysSettingsResponse,
5
+ SysSettingDefinitionUpdate,
6
+ SysSettingUpdateResponse,
7
+ SysSettingsProvider,
8
+ } from '../../providers';
9
+ import { CreatioEngine } from '../engine';
10
+
11
+ export class SysSettingsEngine implements CreatioEngine {
12
+ private readonly _provider: SysSettingsProvider;
13
+
14
+ public readonly name = 'sys-settings';
15
+
16
+ constructor(provider: SysSettingsProvider) {
17
+ this._provider = provider;
18
+ }
19
+
20
+ public get kind(): string {
21
+ return this._provider.kind;
22
+ }
23
+
24
+ public setValues(values: Record<string, any>): Promise<any> {
25
+ return this._provider.setValues(values);
26
+ }
27
+
28
+ public queryValues(codes: string[]): Promise<QuerySysSettingsResponse> {
29
+ return this._provider.queryValues(codes);
30
+ }
31
+
32
+ public createSetting(request: CreateSysSettingRequest): Promise<CreateSysSettingResult> {
33
+ return this._provider.createSetting(request);
34
+ }
35
+
36
+ public updateDefinition(
37
+ definition: SysSettingDefinitionUpdate,
38
+ ): Promise<SysSettingUpdateResponse> {
39
+ return this._provider.updateDefinition(definition);
40
+ }
41
+ }
@@ -0,0 +1,20 @@
1
+ import { CurrentUserInfo, UserProvider } from '../../providers';
2
+ import { CreatioEngine } from '../engine';
3
+
4
+ export class UserEngine implements CreatioEngine {
5
+ private readonly _provider: UserProvider;
6
+
7
+ public readonly name = 'user';
8
+
9
+ constructor(provider: UserProvider) {
10
+ this._provider = provider;
11
+ }
12
+
13
+ public get kind(): string {
14
+ return this._provider.kind;
15
+ }
16
+
17
+ public getCurrentUserInfo(): Promise<CurrentUserInfo> {
18
+ return this._provider.getCurrentUserInfo();
19
+ }
20
+ }
@@ -0,0 +1,6 @@
1
+ export * from './client-config';
2
+ export * from './provider-context';
3
+ export * from './providers';
4
+ export * from './engines';
5
+ export * from './services';
6
+ export * from './auth';
@@ -0,0 +1,10 @@
1
+ import { ICreatioAuthProvider } from './auth';
2
+ import { CrudProvider, ProcessProvider, SysSettingsProvider, UserProvider } from './providers';
3
+
4
+ export interface CreatioProviderContext {
5
+ authProvider: ICreatioAuthProvider;
6
+ crud: CrudProvider;
7
+ process: ProcessProvider;
8
+ sysSettings: SysSettingsProvider;
9
+ user: UserProvider;
10
+ }
@@ -0,0 +1,45 @@
1
+ export interface EntitySchemaProperty {
2
+ name: string;
3
+ type: string;
4
+ nullable?: boolean;
5
+ }
6
+
7
+ export interface EntitySchemaDescription {
8
+ entitySet: string;
9
+ entityType: string;
10
+ key: string[];
11
+ properties: EntitySchemaProperty[];
12
+ }
13
+
14
+ export interface CrudReadParams {
15
+ entity: string;
16
+ filter?: string | undefined;
17
+ select?: string[] | undefined;
18
+ top?: number | undefined;
19
+ expand?: string[] | undefined;
20
+ orderBy?: string | undefined;
21
+ }
22
+
23
+ export interface CrudWriteParams {
24
+ entity: string;
25
+ data: any;
26
+ }
27
+
28
+ export interface CrudUpdateParams extends CrudWriteParams {
29
+ id: string;
30
+ }
31
+
32
+ export interface CrudDeleteParams {
33
+ entity: string;
34
+ id: string;
35
+ }
36
+
37
+ export interface CrudProvider {
38
+ readonly kind: string;
39
+ listEntitySets(): Promise<string[]>;
40
+ describeEntity(entitySet: string): Promise<EntitySchemaDescription>;
41
+ read(params: CrudReadParams): Promise<any>;
42
+ create(params: CrudWriteParams): Promise<any>;
43
+ update(params: CrudUpdateParams): Promise<any>;
44
+ delete(params: CrudDeleteParams): Promise<any>;
45
+ }
@@ -0,0 +1,4 @@
1
+ export * from './crud-provider';
2
+ export * from './process-provider';
3
+ export * from './sys-settings-provider';
4
+ export * from './user-provider';
@@ -0,0 +1,15 @@
1
+ export interface ExecuteProcessParams {
2
+ processName: string;
3
+ parameters?: Record<string, any> | undefined;
4
+ }
5
+
6
+ export interface ExecuteProcessResult {
7
+ status?: string;
8
+ returnValues?: Record<string, any>;
9
+ [key: string]: any;
10
+ }
11
+
12
+ export interface ProcessProvider {
13
+ readonly kind: string;
14
+ executeProcess(params: ExecuteProcessParams): Promise<ExecuteProcessResult>;
15
+ }
@@ -0,0 +1,63 @@
1
+ export interface QuerySysSettingsResponse {
2
+ success: boolean;
3
+ values: Record<string, SysSettingDetail>;
4
+ notFoundSettings?: string[];
5
+ }
6
+
7
+ export interface SysSettingDetail {
8
+ code?: string;
9
+ value?: unknown;
10
+ displayValue?: string;
11
+ isCacheable?: boolean;
12
+ dataValueType?: number | string;
13
+ dataValueTypeName?: number | string;
14
+ id?: string;
15
+ name?: string;
16
+ }
17
+
18
+ export interface SysSettingDefinition extends Record<string, unknown> {
19
+ code: string;
20
+ name: string;
21
+ valueTypeName: string;
22
+ id?: string | undefined;
23
+ description?: string | undefined;
24
+ isCacheable?: boolean | undefined;
25
+ isPersonal?: boolean | undefined;
26
+ isSSPAvailable?: boolean | undefined;
27
+ referenceSchemaUId?: string | undefined;
28
+ dataValueType?: number | string | undefined;
29
+ }
30
+
31
+ export type SysSettingDefinitionUpdate = Partial<SysSettingDefinition> & { id: string };
32
+
33
+ export interface CreateSysSettingRequest {
34
+ definition: SysSettingDefinition;
35
+ initialValue?: unknown;
36
+ isPersonal?: boolean;
37
+ }
38
+
39
+ export interface SysSettingInsertResponse extends Record<string, unknown> {
40
+ id: string;
41
+ success: boolean;
42
+ rowsAffected?: number;
43
+ nextPrcElReady?: boolean;
44
+ }
45
+
46
+ export interface SysSettingUpdateResponse extends Record<string, unknown> {
47
+ success?: boolean;
48
+ rowsAffected?: number;
49
+ nextPrcElReady?: boolean;
50
+ }
51
+
52
+ export interface CreateSysSettingResult {
53
+ insertResult: SysSettingInsertResponse;
54
+ setValueResult?: any;
55
+ }
56
+
57
+ export interface SysSettingsProvider {
58
+ readonly kind: string;
59
+ setValues(values: Record<string, any>): Promise<any>;
60
+ queryValues(codes: string[]): Promise<QuerySysSettingsResponse>;
61
+ createSetting(request: CreateSysSettingRequest): Promise<CreateSysSettingResult>;
62
+ updateDefinition(definition: SysSettingDefinitionUpdate): Promise<SysSettingUpdateResponse>;
63
+ }
@@ -0,0 +1,12 @@
1
+ export interface CurrentUserInfo {
2
+ userId?: string;
3
+ contactId?: string;
4
+ userName?: string;
5
+ cultureName?: string;
6
+ [key: string]: any;
7
+ }
8
+
9
+ export interface UserProvider {
10
+ readonly kind: string;
11
+ getCurrentUserInfo(): Promise<CurrentUserInfo>;
12
+ }
@@ -0,0 +1,38 @@
1
+ import { CreatioAuthManager, ICreatioAuthProvider } from '../auth';
2
+ import { CreatioClientConfig } from '../client-config';
3
+ import { CreatioProviderContext } from '../provider-context';
4
+ import { CrudProvider, ProcessProvider, SysSettingsProvider, UserProvider } from '../providers';
5
+
6
+ import { CreatioHttpClient } from './http-client';
7
+ import { ODataMetadataStore } from './metadata-store';
8
+ import { ODataCrudProvider } from './odata-crud-provider';
9
+ import { ProcessServiceProvider } from './process-service-provider';
10
+ import { SysSettingsServiceProvider } from './sys-settings-service-provider';
11
+ import { UserInfoProvider } from './user-info-provider';
12
+
13
+ export class CreatioServiceContext implements CreatioProviderContext {
14
+ private readonly _config: CreatioClientConfig;
15
+ private readonly _authManager: CreatioAuthManager;
16
+ private readonly _httpClient: CreatioHttpClient;
17
+
18
+ public readonly kind = 'creatio-services';
19
+ public readonly crud: CrudProvider;
20
+ public readonly process: ProcessProvider;
21
+ public readonly sysSettings: SysSettingsProvider;
22
+ public readonly user: UserProvider;
23
+
24
+ public get authProvider(): ICreatioAuthProvider {
25
+ return this._authManager.getProvider();
26
+ }
27
+
28
+ constructor(config: CreatioClientConfig) {
29
+ this._config = config;
30
+ this._authManager = new CreatioAuthManager(this._config);
31
+ this._httpClient = new CreatioHttpClient(this._config, this._authManager);
32
+ const metadataStore = new ODataMetadataStore(this._httpClient);
33
+ this.crud = new ODataCrudProvider(this._httpClient, metadataStore);
34
+ this.process = new ProcessServiceProvider(this._httpClient);
35
+ this.sysSettings = new SysSettingsServiceProvider(this._httpClient);
36
+ this.user = new UserInfoProvider(this._httpClient);
37
+ }
38
+ }
@@ -0,0 +1,174 @@
1
+ import log from '../../log';
2
+ import { JSON_ACCEPT, XML_ACCEPT } from '../../types';
3
+ import { CreatioAuthManager, ICreatioAuthProvider } from '../auth';
4
+ import { CreatioClientConfig } from '../client-config';
5
+
6
+ type RequestFactory = () => Promise<RequestInit>;
7
+ type SuccessHandler<T> = (response: Response, duration: number) => Promise<T>;
8
+ type ErrorHandler<T> = (response: Response, duration: number) => Promise<T>;
9
+
10
+ type LogContext = Record<string, any>;
11
+
12
+ export class CreatioHttpClient {
13
+ private readonly _config: CreatioClientConfig;
14
+ private readonly _authManager: CreatioAuthManager;
15
+ private readonly _normalizedBaseUrl: string;
16
+
17
+ public get authProvider(): ICreatioAuthProvider {
18
+ return this._authManager.getProvider();
19
+ }
20
+
21
+ public get normalizedBaseUrl(): string {
22
+ return this._normalizedBaseUrl;
23
+ }
24
+
25
+ public get odataRoot(): string {
26
+ return `${this._normalizedBaseUrl}/0/odata`;
27
+ }
28
+
29
+ constructor(config: CreatioClientConfig, authManager: CreatioAuthManager) {
30
+ this._config = config;
31
+ this._authManager = authManager;
32
+ this._normalizedBaseUrl = this._config.baseUrl.replace(/\/$/, '');
33
+ }
34
+
35
+ private _logRequest(url: string, requestInit: RequestInit): void {
36
+ log.info('creatio.http.request', {
37
+ url,
38
+ method: requestInit.method || 'GET',
39
+ hasAuth: Boolean(requestInit.headers && (requestInit.headers as any)['Authorization']),
40
+ });
41
+ }
42
+
43
+ private _logUnauthorizedResponse(
44
+ url: string,
45
+ response: Response,
46
+ hasTriedRefresh: boolean,
47
+ ): void {
48
+ log.warn('creatio.http.401_response', {
49
+ url,
50
+ status: response.status,
51
+ triedRefresh: hasTriedRefresh,
52
+ responseHeaders: Object.fromEntries(response.headers.entries()),
53
+ });
54
+ }
55
+
56
+ public async getJsonHeaders(): Promise<Record<string, string>> {
57
+ return this.authProvider.getHeaders(JSON_ACCEPT, true);
58
+ }
59
+
60
+ public async getXmlHeaders(): Promise<Record<string, string>> {
61
+ return this.authProvider.getHeaders(XML_ACCEPT, false);
62
+ }
63
+
64
+ public async getPostHeaders(): Promise<Record<string, string>> {
65
+ const headers = await this.getJsonHeaders();
66
+ return {
67
+ ...headers,
68
+ 'Content-Type': 'application/json',
69
+ };
70
+ }
71
+
72
+ public async createPostRequest(body?: any): Promise<RequestInit> {
73
+ const headers = await this.getPostHeaders();
74
+ return {
75
+ method: 'POST',
76
+ headers,
77
+ body: body ? JSON.stringify(body) : JSON.stringify({}),
78
+ };
79
+ }
80
+
81
+ public async fetchJson(url: string, initFactory: RequestFactory) {
82
+ const response = await this.fetchWithAuth(url, initFactory);
83
+ if (!response.ok) {
84
+ const errorText = await response.text().catch(() => '');
85
+ throw new Error(`creatio_http_error:${response.status} ${errorText}`);
86
+ }
87
+ return response.json();
88
+ }
89
+
90
+ public async fetchText(url: string, initFactory: RequestFactory) {
91
+ const response = await this.fetchWithAuth(url, initFactory);
92
+ if (!response.ok) {
93
+ const errorText = await response.text().catch(() => '');
94
+ throw new Error(`creatio_http_error:${response.status} ${errorText}`);
95
+ }
96
+ return response.text();
97
+ }
98
+
99
+ public async fetchWithAuth(url: string, initFactory: RequestFactory): Promise<Response> {
100
+ let hasTriedRefresh = false;
101
+ while (true) {
102
+ const requestInit = await initFactory();
103
+ this._logRequest(url, requestInit);
104
+ const response = await fetch(url, requestInit);
105
+ if (response.status !== 401) {
106
+ return response;
107
+ }
108
+ this._logUnauthorizedResponse(url, response, hasTriedRefresh);
109
+ if (hasTriedRefresh) {
110
+ return response;
111
+ }
112
+ hasTriedRefresh = true;
113
+ await this.authProvider.refresh();
114
+ }
115
+ }
116
+
117
+ public async executeWithTiming<T>(
118
+ operation: string,
119
+ url: string,
120
+ request: () => Promise<Response>,
121
+ successHandler: SuccessHandler<T>,
122
+ errorHandler: ErrorHandler<T>,
123
+ logContext: LogContext = {},
124
+ ): Promise<T> {
125
+ const startTime = Date.now();
126
+ try {
127
+ const response = await request();
128
+ const duration = Date.now() - startTime;
129
+ if (!response.ok) {
130
+ return await errorHandler(response, duration);
131
+ }
132
+ return await successHandler(response, duration);
133
+ } catch (error: any) {
134
+ const duration = Date.now() - startTime;
135
+ log.error(`creatio.http.${operation}.error`, {
136
+ ...logContext,
137
+ url,
138
+ error: String(error?.message ?? error),
139
+ duration,
140
+ });
141
+ throw error;
142
+ }
143
+ }
144
+
145
+ public async handleErrorResponse(
146
+ operation: string,
147
+ response: Response,
148
+ duration: number,
149
+ errorPrefix: string,
150
+ logContext: LogContext = {},
151
+ ): Promise<never> {
152
+ const errorText = await response.text().catch(() => '');
153
+ log.error(`creatio.http.${operation}.error`, {
154
+ ...logContext,
155
+ status: response.status,
156
+ error: errorText,
157
+ duration,
158
+ });
159
+ throw new Error(`${errorPrefix}:${response.status} ${errorText}`);
160
+ }
161
+
162
+ public logSuccess(
163
+ operation: string,
164
+ status: number,
165
+ duration: number,
166
+ logContext: LogContext = {},
167
+ ) {
168
+ log.info(`creatio.http.${operation}.success`, {
169
+ ...logContext,
170
+ status,
171
+ duration,
172
+ });
173
+ }
174
+ }
@@ -0,0 +1,7 @@
1
+ export * from './creatio-service-context';
2
+ export * from './http-client';
3
+ export * from './metadata-store';
4
+ export * from './odata-crud-provider';
5
+ export * from './process-service-provider';
6
+ export * from './sys-settings-service-provider';
7
+ export * from './user-info-provider';
@@ -0,0 +1,181 @@
1
+ import { XMLParser } from 'fast-xml-parser';
2
+
3
+ import log from '../../log';
4
+ import { EntitySchemaDescription } from '../providers';
5
+
6
+ import { CreatioHttpClient } from './http-client';
7
+
8
+ export class ODataMetadataStore {
9
+ private readonly _client: CreatioHttpClient;
10
+ private _metadataXml?: string;
11
+ private _metadataParsed?: any;
12
+
13
+ constructor(client: CreatioHttpClient) {
14
+ this._client = client;
15
+ }
16
+
17
+ private _arrayify<T>(value: T | T[] | undefined | null): T[] {
18
+ if (value == null) {
19
+ return [];
20
+ }
21
+ return Array.isArray(value) ? value : [value];
22
+ }
23
+
24
+ private async _getMetadataXml(): Promise<string> {
25
+ if (this._metadataXml) {
26
+ return this._metadataXml;
27
+ }
28
+ const headers = await this._client.getXmlHeaders();
29
+ const metadataUrl = `${this._client.odataRoot}/$metadata`;
30
+ const xmlContent = await this._client.fetchText(metadataUrl, async () => ({ headers }));
31
+ this._metadataXml = xmlContent;
32
+ return this._metadataXml;
33
+ }
34
+
35
+ private async _getParsedMetadata(): Promise<any> {
36
+ if (this._metadataParsed) {
37
+ return this._metadataParsed;
38
+ }
39
+ const xmlContent = await this._getMetadataXml();
40
+ const parser = new XMLParser({
41
+ ignoreAttributes: false,
42
+ attributeNamePrefix: '@_',
43
+ });
44
+ this._metadataParsed = parser.parse(xmlContent);
45
+ return this._metadataParsed;
46
+ }
47
+
48
+ private _extractSchemas(metadata: any): any[] {
49
+ const dataServices = metadata['edmx:Edmx']?.['edmx:DataServices'];
50
+ return this._arrayify<any>(dataServices?.Schema);
51
+ }
52
+
53
+ private async _tryGetEntitySetsFromService(): Promise<string[] | null> {
54
+ try {
55
+ const serviceUrl = `${this._client.odataRoot}/`;
56
+ const headers = await this._client.getJsonHeaders();
57
+ const response = await this._client.fetchWithAuth(serviceUrl, async () => ({
58
+ headers,
59
+ }));
60
+ if (response.ok) {
61
+ const body: any = await response.json().catch(() => null);
62
+ if (body && Array.isArray(body.value)) {
63
+ return body.value.map((item: any) => String(item.name));
64
+ }
65
+ }
66
+ if (!response.ok) {
67
+ log.error('creatio.metadata.list_entity_sets.error', {
68
+ url: serviceUrl,
69
+ status: response.status,
70
+ });
71
+ }
72
+ } catch (error: any) {
73
+ log.error('creatio.metadata.list_entity_sets.error', {
74
+ url: `${this._client.odataRoot}/`,
75
+ error: String(error?.message ?? error),
76
+ });
77
+ }
78
+ return null;
79
+ }
80
+
81
+ private async _getEntitySetsFromMetadata(): Promise<string[]> {
82
+ const metadata = await this._getParsedMetadata();
83
+ const schemas = this._extractSchemas(metadata);
84
+ const entitySets: string[] = [];
85
+ for (const schema of schemas) {
86
+ const containers = this._arrayify<any>(schema.EntityContainer);
87
+ for (const container of containers) {
88
+ const sets = this._arrayify<any>(container.EntitySet);
89
+ for (const set of sets) {
90
+ const name = set?.['@_Name'];
91
+ if (name) {
92
+ entitySets.push(String(name));
93
+ }
94
+ }
95
+ }
96
+ }
97
+ return Array.from(new Set(entitySets));
98
+ }
99
+
100
+ private _findEntityType(schemas: any[], entitySet: string): string {
101
+ for (const schema of schemas) {
102
+ const containers = this._arrayify<any>(schema.EntityContainer);
103
+ for (const container of containers) {
104
+ const sets = this._arrayify<any>(container.EntitySet);
105
+ for (const set of sets) {
106
+ if (set?.['@_Name'] === entitySet) {
107
+ return String(set?.['@_EntityType'] ?? '');
108
+ }
109
+ }
110
+ }
111
+ }
112
+ return '';
113
+ }
114
+
115
+ private _findEntityTypeNode(schemas: any[], typeName: string): any {
116
+ for (const schema of schemas) {
117
+ const types = this._arrayify<any>(schema.EntityType);
118
+ for (const type of types) {
119
+ if (type?.['@_Name'] === typeName) {
120
+ return type;
121
+ }
122
+ }
123
+ }
124
+ return undefined;
125
+ }
126
+
127
+ private _parseEntityProperties(entityTypeNode: any): {
128
+ key: string[];
129
+ properties: Array<{
130
+ name: string;
131
+ type: string;
132
+ nullable?: boolean;
133
+ }>;
134
+ } {
135
+ const keyRefs = this._arrayify<any>(entityTypeNode.Key?.PropertyRef);
136
+ const key = keyRefs.map((ref) => String(ref?.['@_Name'] ?? '')).filter(Boolean) as string[];
137
+ const propertyNodes = this._arrayify<any>(entityTypeNode.Property);
138
+ const properties = propertyNodes.map((prop) => {
139
+ const name = String(prop?.['@_Name'] ?? '');
140
+ const type = String(prop?.['@_Type'] ?? '');
141
+ const result: {
142
+ name: string;
143
+ type: string;
144
+ nullable?: boolean;
145
+ } = { name, type };
146
+ if (Object.prototype.hasOwnProperty.call(prop, '@_Nullable')) {
147
+ result.nullable = String(prop['@_Nullable']) === 'true';
148
+ }
149
+ return result;
150
+ });
151
+ return { key, properties };
152
+ }
153
+
154
+ public async listEntitySets(): Promise<string[]> {
155
+ const serviceSets = await this._tryGetEntitySetsFromService();
156
+ if (serviceSets) {
157
+ return serviceSets;
158
+ }
159
+ return this._getEntitySetsFromMetadata();
160
+ }
161
+
162
+ public async describeEntity(entitySet: string): Promise<EntitySchemaDescription> {
163
+ const metadata = await this._getParsedMetadata();
164
+ const schemas = this._extractSchemas(metadata);
165
+ const fullType = this._findEntityType(schemas, entitySet);
166
+ if (!fullType) {
167
+ const error = `entity_not_found:${entitySet}`;
168
+ log.error('creatio.metadata.describe_entity.error', { entitySet, error });
169
+ throw new Error(error);
170
+ }
171
+ const typeName = fullType.split('.').pop()!;
172
+ const entityTypeNode = this._findEntityTypeNode(schemas, typeName);
173
+ if (!entityTypeNode) {
174
+ const error = `entity_type_not_found:${typeName}`;
175
+ log.error('creatio.metadata.describe_entity.error', { entitySet, error });
176
+ throw new Error(error);
177
+ }
178
+ const { key, properties } = this._parseEntityProperties(entityTypeNode);
179
+ return { entitySet, entityType: typeName, key, properties };
180
+ }
181
+ }