mcp-creatio 0.6.1 → 0.6.3

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 (327) hide show
  1. package/README.md +236 -149
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +22 -10
  4. package/dist/cli.js.map +1 -1
  5. package/dist/config-builder.d.ts +8 -0
  6. package/dist/config-builder.d.ts.map +1 -1
  7. package/dist/config-builder.js +147 -43
  8. package/dist/config-builder.js.map +1 -1
  9. package/dist/consts.d.ts.map +1 -1
  10. package/dist/consts.js +2 -1
  11. package/dist/consts.js.map +1 -1
  12. package/dist/creatio/auth/auth-manager.d.ts.map +1 -1
  13. package/dist/creatio/auth/auth-manager.js +5 -2
  14. package/dist/creatio/auth/auth-manager.js.map +1 -1
  15. package/dist/creatio/auth/auth.d.ts +4 -31
  16. package/dist/creatio/auth/auth.d.ts.map +1 -1
  17. package/dist/creatio/auth/auth.js +20 -26
  18. package/dist/creatio/auth/auth.js.map +1 -1
  19. package/dist/creatio/auth/constants.d.ts +14 -0
  20. package/dist/creatio/auth/constants.d.ts.map +1 -0
  21. package/dist/creatio/auth/constants.js +20 -0
  22. package/dist/creatio/auth/constants.js.map +1 -0
  23. package/dist/creatio/auth/contracts.d.ts +15 -0
  24. package/dist/creatio/auth/contracts.d.ts.map +1 -0
  25. package/dist/creatio/auth/contracts.js +3 -0
  26. package/dist/creatio/auth/contracts.js.map +1 -0
  27. package/dist/creatio/auth/headers.d.ts +3 -0
  28. package/dist/creatio/auth/headers.d.ts.map +1 -0
  29. package/dist/creatio/auth/headers.js +15 -0
  30. package/dist/creatio/auth/headers.js.map +1 -0
  31. package/dist/creatio/auth/identity.d.ts +8 -0
  32. package/dist/creatio/auth/identity.d.ts.map +1 -0
  33. package/dist/creatio/auth/identity.js +18 -0
  34. package/dist/creatio/auth/identity.js.map +1 -0
  35. package/dist/creatio/auth/index.d.ts +4 -3
  36. package/dist/creatio/auth/index.d.ts.map +1 -1
  37. package/dist/creatio/auth/index.js +5 -3
  38. package/dist/creatio/auth/index.js.map +1 -1
  39. package/dist/creatio/auth/providers/base-oauth2-provider.d.ts +13 -7
  40. package/dist/creatio/auth/providers/base-oauth2-provider.d.ts.map +1 -1
  41. package/dist/creatio/auth/providers/base-oauth2-provider.js +29 -19
  42. package/dist/creatio/auth/providers/base-oauth2-provider.js.map +1 -1
  43. package/dist/creatio/auth/providers/base-provider.js +1 -1
  44. package/dist/creatio/auth/providers/base-provider.js.map +1 -1
  45. package/dist/creatio/auth/providers/broker-provider.d.ts +20 -0
  46. package/dist/creatio/auth/providers/broker-provider.d.ts.map +1 -0
  47. package/dist/creatio/auth/providers/broker-provider.js +72 -0
  48. package/dist/creatio/auth/providers/broker-provider.js.map +1 -0
  49. package/dist/creatio/auth/providers/creatio-oauth-client.d.ts +27 -0
  50. package/dist/creatio/auth/providers/creatio-oauth-client.d.ts.map +1 -0
  51. package/dist/creatio/auth/providers/creatio-oauth-client.js +122 -0
  52. package/dist/creatio/auth/providers/creatio-oauth-client.js.map +1 -0
  53. package/dist/creatio/auth/providers/index.d.ts +3 -1
  54. package/dist/creatio/auth/providers/index.d.ts.map +1 -1
  55. package/dist/creatio/auth/providers/index.js +3 -1
  56. package/dist/creatio/auth/providers/index.js.map +1 -1
  57. package/dist/creatio/auth/providers/oauth2-bearer-provider.d.ts +17 -0
  58. package/dist/creatio/auth/providers/oauth2-bearer-provider.d.ts.map +1 -0
  59. package/dist/creatio/auth/providers/oauth2-bearer-provider.js +33 -0
  60. package/dist/creatio/auth/providers/oauth2-bearer-provider.js.map +1 -0
  61. package/dist/creatio/auth/providers/oauth2-provider.d.ts +2 -2
  62. package/dist/creatio/auth/providers/oauth2-provider.d.ts.map +1 -1
  63. package/dist/creatio/auth/providers/oauth2-provider.js +4 -9
  64. package/dist/creatio/auth/providers/oauth2-provider.js.map +1 -1
  65. package/dist/creatio/auth/providers/type.d.ts +20 -1
  66. package/dist/creatio/auth/providers/type.d.ts.map +1 -1
  67. package/dist/creatio/auth/providers/type.js +22 -2
  68. package/dist/creatio/auth/providers/type.js.map +1 -1
  69. package/dist/creatio/client-config.d.ts +26 -5
  70. package/dist/creatio/client-config.d.ts.map +1 -1
  71. package/dist/creatio/engines/admin-operation-engine.d.ts +1 -1
  72. package/dist/creatio/engines/admin-operation-engine.d.ts.map +1 -1
  73. package/dist/creatio/engines/admin-operation-engine.js +3 -3
  74. package/dist/creatio/engines/admin-operation-engine.js.map +1 -1
  75. package/dist/creatio/engines/configuration-engine.d.ts +1 -1
  76. package/dist/creatio/engines/configuration-engine.d.ts.map +1 -1
  77. package/dist/creatio/engines/configuration-engine.js +3 -3
  78. package/dist/creatio/engines/configuration-engine.js.map +1 -1
  79. package/dist/creatio/engines/crud-engine.d.ts +1 -1
  80. package/dist/creatio/engines/crud-engine.d.ts.map +1 -1
  81. package/dist/creatio/engines/crud-engine.js +4 -4
  82. package/dist/creatio/engines/crud-engine.js.map +1 -1
  83. package/dist/creatio/engines/engine-manager.d.ts +1 -2
  84. package/dist/creatio/engines/engine-manager.d.ts.map +1 -1
  85. package/dist/creatio/engines/engine-manager.js +4 -10
  86. package/dist/creatio/engines/engine-manager.js.map +1 -1
  87. package/dist/creatio/engines/engine.d.ts.map +1 -1
  88. package/dist/creatio/engines/engine.js +12 -1
  89. package/dist/creatio/engines/engine.js.map +1 -1
  90. package/dist/creatio/engines/feature-engine.d.ts +1 -1
  91. package/dist/creatio/engines/feature-engine.d.ts.map +1 -1
  92. package/dist/creatio/engines/feature-engine.js +3 -3
  93. package/dist/creatio/engines/feature-engine.js.map +1 -1
  94. package/dist/creatio/engines/process-engine.d.ts +1 -1
  95. package/dist/creatio/engines/process-engine.d.ts.map +1 -1
  96. package/dist/creatio/engines/process-engine.js +3 -3
  97. package/dist/creatio/engines/process-engine.js.map +1 -1
  98. package/dist/creatio/engines/sys-settings-engine.d.ts +1 -1
  99. package/dist/creatio/engines/sys-settings-engine.d.ts.map +1 -1
  100. package/dist/creatio/engines/sys-settings-engine.js +3 -3
  101. package/dist/creatio/engines/sys-settings-engine.js.map +1 -1
  102. package/dist/creatio/engines/user-engine.d.ts +1 -1
  103. package/dist/creatio/engines/user-engine.d.ts.map +1 -1
  104. package/dist/creatio/engines/user-engine.js +3 -3
  105. package/dist/creatio/engines/user-engine.js.map +1 -1
  106. package/dist/creatio/services/creatio-service-context.d.ts +1 -1
  107. package/dist/creatio/services/creatio-service-context.d.ts.map +1 -1
  108. package/dist/creatio/services/crud-provider-factory.d.ts.map +1 -1
  109. package/dist/creatio/services/crud-provider-factory.js.map +1 -1
  110. package/dist/creatio/services/dataservice/data-service-column-values.d.ts.map +1 -1
  111. package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts +3 -3
  112. package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts.map +1 -1
  113. package/dist/creatio/services/dataservice/data-service-crud-provider.js +5 -5
  114. package/dist/creatio/services/dataservice/data-service-crud-provider.js.map +1 -1
  115. package/dist/creatio/services/dataservice/data-service-filter-translator.d.ts.map +1 -1
  116. package/dist/creatio/services/dataservice/data-service-filter-translator.js +7 -2
  117. package/dist/creatio/services/dataservice/data-service-filter-translator.js.map +1 -1
  118. package/dist/creatio/services/dataservice/data-service-query-builder.d.ts.map +1 -1
  119. package/dist/creatio/services/dataservice/data-service-query-builder.js.map +1 -1
  120. package/dist/creatio/services/dataservice/data-service-schema.d.ts +3 -3
  121. package/dist/creatio/services/dataservice/data-service-schema.d.ts.map +1 -1
  122. package/dist/creatio/services/dataservice/data-service-schema.js +19 -17
  123. package/dist/creatio/services/dataservice/data-service-schema.js.map +1 -1
  124. package/dist/creatio/services/dataservice/data-service-transport.d.ts +1 -1
  125. package/dist/creatio/services/dataservice/data-service-transport.d.ts.map +1 -1
  126. package/dist/creatio/services/dataservice/data-service-transport.js +3 -3
  127. package/dist/creatio/services/dataservice/data-service-transport.js.map +1 -1
  128. package/dist/creatio/services/dataservice/data-service-types.d.ts +0 -19
  129. package/dist/creatio/services/dataservice/data-service-types.d.ts.map +1 -1
  130. package/dist/creatio/services/dataservice/data-service-value-type.d.ts +2 -1
  131. package/dist/creatio/services/dataservice/data-service-value-type.d.ts.map +1 -1
  132. package/dist/creatio/services/dataservice/data-service-value-type.js +20 -16
  133. package/dist/creatio/services/dataservice/data-service-value-type.js.map +1 -1
  134. package/dist/creatio/services/http-client.d.ts +13 -0
  135. package/dist/creatio/services/http-client.d.ts.map +1 -1
  136. package/dist/creatio/services/http-client.js +26 -2
  137. package/dist/creatio/services/http-client.js.map +1 -1
  138. package/dist/creatio/services/identifiers.d.ts +10 -0
  139. package/dist/creatio/services/identifiers.d.ts.map +1 -0
  140. package/dist/creatio/services/identifiers.js +20 -0
  141. package/dist/creatio/services/identifiers.js.map +1 -0
  142. package/dist/creatio/services/odata/metadata-store.d.ts +6 -2
  143. package/dist/creatio/services/odata/metadata-store.d.ts.map +1 -1
  144. package/dist/creatio/services/odata/metadata-store.js +30 -34
  145. package/dist/creatio/services/odata/metadata-store.js.map +1 -1
  146. package/dist/creatio/services/odata/odata-crud-provider.d.ts.map +1 -1
  147. package/dist/creatio/services/odata/odata-crud-provider.js +10 -25
  148. package/dist/creatio/services/odata/odata-crud-provider.js.map +1 -1
  149. package/dist/creatio/services/odata/odata-query-translator.d.ts +4 -5
  150. package/dist/creatio/services/odata/odata-query-translator.d.ts.map +1 -1
  151. package/dist/creatio/services/odata/odata-query-translator.js +32 -20
  152. package/dist/creatio/services/odata/odata-query-translator.js.map +1 -1
  153. package/dist/creatio/services/user-info-provider.d.ts.map +1 -1
  154. package/dist/creatio/services/user-info-provider.js +2 -2
  155. package/dist/creatio/services/user-info-provider.js.map +1 -1
  156. package/dist/index.js +30 -4
  157. package/dist/index.js.map +1 -1
  158. package/dist/log.d.ts +1 -1
  159. package/dist/log.d.ts.map +1 -1
  160. package/dist/log.js +2 -1
  161. package/dist/log.js.map +1 -1
  162. package/dist/server/bearer/base-url-guard.d.ts +20 -0
  163. package/dist/server/bearer/base-url-guard.d.ts.map +1 -0
  164. package/dist/server/bearer/base-url-guard.js +55 -0
  165. package/dist/server/bearer/base-url-guard.js.map +1 -0
  166. package/dist/server/bearer/bearer-edge.d.ts +42 -0
  167. package/dist/server/bearer/bearer-edge.d.ts.map +1 -0
  168. package/dist/server/bearer/bearer-edge.js +122 -0
  169. package/dist/server/bearer/bearer-edge.js.map +1 -0
  170. package/dist/server/bearer/bearer-token.d.ts +27 -0
  171. package/dist/server/bearer/bearer-token.d.ts.map +1 -0
  172. package/dist/server/bearer/bearer-token.js +50 -0
  173. package/dist/server/bearer/bearer-token.js.map +1 -0
  174. package/dist/server/bearer/index.d.ts +3 -0
  175. package/dist/server/bearer/index.d.ts.map +1 -0
  176. package/dist/server/bearer/index.js +19 -0
  177. package/dist/server/bearer/index.js.map +1 -0
  178. package/dist/server/http/auth-edge.d.ts +26 -0
  179. package/dist/server/http/auth-edge.d.ts.map +1 -0
  180. package/dist/server/http/auth-edge.js +75 -0
  181. package/dist/server/http/auth-edge.js.map +1 -0
  182. package/dist/server/http/broker-handlers.d.ts +45 -0
  183. package/dist/server/http/broker-handlers.d.ts.map +1 -0
  184. package/dist/server/http/broker-handlers.js +224 -0
  185. package/dist/server/http/broker-handlers.js.map +1 -0
  186. package/dist/server/http/{httpServer.d.ts → http-server.d.ts} +5 -13
  187. package/dist/server/http/http-server.d.ts.map +1 -0
  188. package/dist/server/http/{httpServer.js → http-server.js} +19 -53
  189. package/dist/server/http/http-server.js.map +1 -0
  190. package/dist/server/http/index.d.ts +1 -3
  191. package/dist/server/http/index.d.ts.map +1 -1
  192. package/dist/server/http/index.js +1 -3
  193. package/dist/server/http/index.js.map +1 -1
  194. package/dist/server/http/mcp-handlers.d.ts.map +1 -1
  195. package/dist/server/http/mcp-handlers.js +16 -3
  196. package/dist/server/http/mcp-handlers.js.map +1 -1
  197. package/dist/server/http/middleware.d.ts +3 -4
  198. package/dist/server/http/middleware.d.ts.map +1 -1
  199. package/dist/server/http/middleware.js +33 -23
  200. package/dist/server/http/middleware.js.map +1 -1
  201. package/dist/server/http/public-origin.d.ts +10 -0
  202. package/dist/server/http/public-origin.d.ts.map +1 -0
  203. package/dist/server/http/public-origin.js +19 -0
  204. package/dist/server/http/public-origin.js.map +1 -0
  205. package/dist/server/http/rate-limiter.d.ts +1 -1
  206. package/dist/server/http/rate-limiter.d.ts.map +1 -1
  207. package/dist/server/http/rate-limiter.js +11 -11
  208. package/dist/server/http/rate-limiter.js.map +1 -1
  209. package/dist/server/http-agent.d.ts +9 -0
  210. package/dist/server/http-agent.d.ts.map +1 -0
  211. package/dist/server/http-agent.js +35 -0
  212. package/dist/server/http-agent.js.map +1 -0
  213. package/dist/server/index.d.ts +2 -0
  214. package/dist/server/index.d.ts.map +1 -1
  215. package/dist/server/index.js +2 -0
  216. package/dist/server/index.js.map +1 -1
  217. package/dist/server/keepalive.d.ts +26 -0
  218. package/dist/server/keepalive.d.ts.map +1 -0
  219. package/dist/server/keepalive.js +64 -0
  220. package/dist/server/keepalive.js.map +1 -0
  221. package/dist/server/mcp/creatio-rest.d.ts +6 -0
  222. package/dist/server/mcp/creatio-rest.d.ts.map +1 -1
  223. package/dist/server/mcp/creatio-rest.js +21 -3
  224. package/dist/server/mcp/creatio-rest.js.map +1 -1
  225. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts +1 -1
  226. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts.map +1 -1
  227. package/dist/server/mcp/crtmcp/crt-mcp-client.js +16 -13
  228. package/dist/server/mcp/crtmcp/crt-mcp-client.js.map +1 -1
  229. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts +2 -2
  230. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts.map +1 -1
  231. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js +17 -17
  232. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js.map +1 -1
  233. package/dist/server/mcp/dataforge/dataforge-client.d.ts +12 -12
  234. package/dist/server/mcp/dataforge/dataforge-client.d.ts.map +1 -1
  235. package/dist/server/mcp/dataforge/dataforge-client.js +40 -47
  236. package/dist/server/mcp/dataforge/dataforge-client.js.map +1 -1
  237. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts +2 -2
  238. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts.map +1 -1
  239. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js +9 -9
  240. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js.map +1 -1
  241. package/dist/server/mcp/filters.d.ts.map +1 -1
  242. package/dist/server/mcp/filters.js +4 -1
  243. package/dist/server/mcp/filters.js.map +1 -1
  244. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts +4 -4
  245. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts.map +1 -1
  246. package/dist/server/mcp/globalsearch/globalsearch-client.js +39 -50
  247. package/dist/server/mcp/globalsearch/globalsearch-client.js.map +1 -1
  248. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts +1 -1
  249. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts.map +1 -1
  250. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js +1 -1
  251. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js.map +1 -1
  252. package/dist/server/mcp/server.d.ts +35 -8
  253. package/dist/server/mcp/server.d.ts.map +1 -1
  254. package/dist/server/mcp/server.js +104 -44
  255. package/dist/server/mcp/server.js.map +1 -1
  256. package/dist/server/mcp/tools-data.d.ts +2 -2
  257. package/dist/server/mcp/tools-data.d.ts.map +1 -1
  258. package/dist/server/mcp/tools-data.js +1 -1
  259. package/dist/server/mcp/tools-data.js.map +1 -1
  260. package/dist/server/oauth/oauth-server.d.ts +41 -10
  261. package/dist/server/oauth/oauth-server.d.ts.map +1 -1
  262. package/dist/server/oauth/oauth-server.js +82 -48
  263. package/dist/server/oauth/oauth-server.js.map +1 -1
  264. package/dist/server/oauth/storage.d.ts +42 -5
  265. package/dist/server/oauth/storage.d.ts.map +1 -1
  266. package/dist/server/oauth/storage.js +81 -18
  267. package/dist/server/oauth/storage.js.map +1 -1
  268. package/dist/server/oauth/token-manager.d.ts +21 -4
  269. package/dist/server/oauth/token-manager.d.ts.map +1 -1
  270. package/dist/server/oauth/token-manager.js +18 -19
  271. package/dist/server/oauth/token-manager.js.map +1 -1
  272. package/dist/server/oauth/types.d.ts +0 -12
  273. package/dist/server/oauth/types.d.ts.map +1 -1
  274. package/dist/server/oauth/validators.d.ts.map +1 -1
  275. package/dist/server/oauth/validators.js +14 -5
  276. package/dist/server/oauth/validators.js.map +1 -1
  277. package/dist/sessions/index.d.ts +1 -1
  278. package/dist/sessions/index.d.ts.map +1 -1
  279. package/dist/sessions/index.js +1 -1
  280. package/dist/sessions/index.js.map +1 -1
  281. package/dist/sessions/redis-token-store.d.ts +22 -0
  282. package/dist/sessions/redis-token-store.d.ts.map +1 -0
  283. package/dist/sessions/redis-token-store.js +70 -0
  284. package/dist/sessions/redis-token-store.js.map +1 -0
  285. package/dist/sessions/session-context.d.ts +21 -40
  286. package/dist/sessions/session-context.d.ts.map +1 -1
  287. package/dist/sessions/session-context.js +25 -105
  288. package/dist/sessions/session-context.js.map +1 -1
  289. package/dist/sessions/token-crypto.d.ts +8 -0
  290. package/dist/sessions/token-crypto.d.ts.map +1 -0
  291. package/dist/sessions/token-crypto.js +43 -0
  292. package/dist/sessions/token-crypto.js.map +1 -0
  293. package/dist/sessions/token-store.d.ts +42 -0
  294. package/dist/sessions/token-store.d.ts.map +1 -0
  295. package/dist/sessions/token-store.js +66 -0
  296. package/dist/sessions/token-store.js.map +1 -0
  297. package/dist/utils/context.d.ts +12 -0
  298. package/dist/utils/context.d.ts.map +1 -1
  299. package/dist/utils/context.js +16 -0
  300. package/dist/utils/context.js.map +1 -1
  301. package/dist/utils/env-aliases.d.ts +9 -0
  302. package/dist/utils/env-aliases.d.ts.map +1 -0
  303. package/dist/utils/env-aliases.js +61 -0
  304. package/dist/utils/env-aliases.js.map +1 -0
  305. package/dist/utils/env.d.ts +5 -0
  306. package/dist/utils/env.d.ts.map +1 -1
  307. package/dist/utils/env.js +10 -1
  308. package/dist/utils/env.js.map +1 -1
  309. package/package.json +78 -74
  310. package/dist/creatio/auth/providers/oauth2-code-provider.d.ts +0 -21
  311. package/dist/creatio/auth/providers/oauth2-code-provider.d.ts.map +0 -1
  312. package/dist/creatio/auth/providers/oauth2-code-provider.js +0 -251
  313. package/dist/creatio/auth/providers/oauth2-code-provider.js.map +0 -1
  314. package/dist/server/http/creatio-oauth-handlers.d.ts +0 -13
  315. package/dist/server/http/creatio-oauth-handlers.d.ts.map +0 -1
  316. package/dist/server/http/creatio-oauth-handlers.js +0 -160
  317. package/dist/server/http/creatio-oauth-handlers.js.map +0 -1
  318. package/dist/server/http/httpServer.d.ts.map +0 -1
  319. package/dist/server/http/httpServer.js.map +0 -1
  320. package/dist/server/http/mcp-oauth-handlers.d.ts +0 -11
  321. package/dist/server/http/mcp-oauth-handlers.d.ts.map +0 -1
  322. package/dist/server/http/mcp-oauth-handlers.js +0 -118
  323. package/dist/server/http/mcp-oauth-handlers.js.map +0 -1
  324. package/dist/sessions/token-refresh-scheduler.d.ts +0 -16
  325. package/dist/sessions/token-refresh-scheduler.d.ts.map +0 -1
  326. package/dist/sessions/token-refresh-scheduler.js +0 -66
  327. package/dist/sessions/token-refresh-scheduler.js.map +0 -1
@@ -1,10 +1,22 @@
1
1
  export type RequestContext = {
2
2
  userKey?: string | undefined;
3
3
  sessionId?: string | undefined;
4
+ /**
5
+ * The raw Bearer token from the incoming request, in the stateless per-request auth model
6
+ * (delegated/gateway). It is the Creatio access token the client/gateway obtained; the bearer
7
+ * auth provider passes it straight through to Creatio. Absent for legacy/client-credentials.
8
+ */
9
+ bearerToken?: string | undefined;
10
+ /** Optional per-request Creatio instance override (gateway multi-tenant), from X-Creatio-Base-Url. */
11
+ baseUrlOverride?: string | undefined;
4
12
  };
5
13
  export declare function runWithContext<T>(ctx: Partial<RequestContext>, fn: () => Promise<T>): Promise<T>;
6
14
  export declare function getRequestContext(): RequestContext | undefined;
7
15
  export declare function getUserKey(): string | undefined;
8
16
  export declare function getSessionId(): string | undefined;
17
+ /** The raw per-request Bearer token (stateless delegated/gateway auth), if any. */
18
+ export declare function getBearerToken(): string | undefined;
19
+ /** The per-request Creatio base-URL override (gateway multi-tenant), if any. */
20
+ export declare function getBaseUrlOverride(): string | undefined;
9
21
  export declare function getEffectiveUserKey(): string | undefined;
10
22
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAMF,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAShG;AAED,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAE/C;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAYxD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,sGAAsG;IACtG,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,CAAC;AAMF,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAehG;AAED,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAE/C;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,mFAAmF;AACnF,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAEnD;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAEvD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAYxD"}
@@ -4,6 +4,8 @@ exports.runWithContext = runWithContext;
4
4
  exports.getRequestContext = getRequestContext;
5
5
  exports.getUserKey = getUserKey;
6
6
  exports.getSessionId = getSessionId;
7
+ exports.getBearerToken = getBearerToken;
8
+ exports.getBaseUrlOverride = getBaseUrlOverride;
7
9
  exports.getEffectiveUserKey = getEffectiveUserKey;
8
10
  const node_async_hooks_1 = require("node:async_hooks");
9
11
  const sessions_1 = require("../sessions");
@@ -17,6 +19,12 @@ function runWithContext(ctx, fn) {
17
19
  if (typeof ctx.sessionId === 'string') {
18
20
  store.sessionId = ctx.sessionId;
19
21
  }
22
+ if (typeof ctx.bearerToken === 'string') {
23
+ store.bearerToken = ctx.bearerToken;
24
+ }
25
+ if (typeof ctx.baseUrlOverride === 'string') {
26
+ store.baseUrlOverride = ctx.baseUrlOverride;
27
+ }
20
28
  return als.run(store, fn);
21
29
  }
22
30
  function getRequestContext() {
@@ -28,6 +36,14 @@ function getUserKey() {
28
36
  function getSessionId() {
29
37
  return als.getStore()?.sessionId;
30
38
  }
39
+ /** The raw per-request Bearer token (stateless delegated/gateway auth), if any. */
40
+ function getBearerToken() {
41
+ return als.getStore()?.bearerToken;
42
+ }
43
+ /** The per-request Creatio base-URL override (gateway multi-tenant), if any. */
44
+ function getBaseUrlOverride() {
45
+ return als.getStore()?.baseUrlOverride;
46
+ }
31
47
  function getEffectiveUserKey() {
32
48
  const ctx = als.getStore();
33
49
  if (ctx?.userKey) {
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":";;AAaA,wCASC;AAED,8CAEC;AAED,gCAEC;AAED,oCAEC;AAED,kDAYC;AAhDD,uDAAqD;AAErD,0CAA6C;AAO7C,MAAM,GAAG,GAAG,IAAI,oCAAiB,EAAkB,CAAC;AAEpD,MAAM,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC;AAE/C,SAAgB,cAAc,CAAI,GAA4B,EAAE,EAAoB;IACnF,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,iBAAiB;IAChC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED,SAAgB,UAAU;IACzB,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY;IAC3B,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;AAClC,CAAC;AAED,SAAgB,mBAAmB;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC3B,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,OAAO,CAAC;IACpB,CAAC;IACD,IAAI,GAAG,EAAE,SAAS,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC,OAAO,CAAC;QACxB,CAAC;IACF,CAAC;IACD,OAAO,GAAG,EAAE,SAAS,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":";;AAqBA,wCAeC;AAED,8CAEC;AAED,gCAEC;AAED,oCAEC;AAGD,wCAEC;AAGD,gDAEC;AAED,kDAYC;AAxED,uDAAqD;AAErD,0CAA6C;AAe7C,MAAM,GAAG,GAAG,IAAI,oCAAiB,EAAkB,CAAC;AAEpD,MAAM,cAAc,GAAG,yBAAc,CAAC,QAAQ,CAAC;AAE/C,SAAgB,cAAc,CAAI,GAA4B,EAAE,EAAoB;IACnF,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACzC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC7C,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;IAC7C,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,SAAgB,iBAAiB;IAChC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED,SAAgB,UAAU;IACzB,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY;IAC3B,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;AAClC,CAAC;AAED,mFAAmF;AACnF,SAAgB,cAAc;IAC7B,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,SAAgB,kBAAkB;IACjC,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,eAAe,CAAC;AACxC,CAAC;AAED,SAAgB,mBAAmB;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC3B,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,OAAO,CAAC;IACpB,CAAC;IACD,IAAI,GAAG,EAAE,SAAS,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC,OAAO,CAAC;QACxB,CAAC;IACF,CAAC;IACD,OAAO,GAAG,EAAE,SAAS,CAAC;AACvB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Resolves a legacy value for a canonical variable when the canonical one is unset. Returns the
3
+ * first legacy alias that holds a value (notifying once per deprecated alias actually used), or
4
+ * `undefined` when the variable has no aliases / none are set.
5
+ *
6
+ * `read` is injected (DIP) so this stays decoupled from how a raw env value is fetched/normalized.
7
+ */
8
+ export declare function resolveLegacyEnv(canonical: string, read: (name: string) => string | undefined): string | undefined;
9
+ //# sourceMappingURL=env-aliases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-aliases.d.ts","sourceRoot":"","sources":["../../src/utils/env-aliases.ts"],"names":[],"mappings":"AAoDA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GACxC,MAAM,GAAG,SAAS,CAgBpB"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveLegacyEnv = resolveLegacyEnv;
4
+ /**
5
+ * Single source of truth for backward-compatible environment names: each CANONICAL variable maps to
6
+ * the legacy names it superseded. Centralizing it here means the rename never leaks ad-hoc fallbacks
7
+ * across the codebase — call sites read only canonical names and this layer resolves the rest.
8
+ *
9
+ * These legacy names are intentionally undocumented; they exist only so an early adopter who already
10
+ * set an old name keeps working (with a deprecation notice) until they migrate.
11
+ */
12
+ const LEGACY_ALIASES = {
13
+ // Platform convention — kept indefinitely, no deprecation notice.
14
+ CREATIO_MCP_PORT: [{ name: 'PORT', deprecated: false }],
15
+ // Renamed under the unified scheme — supported transitionally with a deprecation notice.
16
+ CREATIO_MCP_LOG_LEVEL: [{ name: 'MCP_CREATIO_LOG_LEVEL', deprecated: true }],
17
+ CREATIO_MCP_READONLY: [{ name: 'READONLY_MODE', deprecated: true }],
18
+ CREATIO_MCP_CRUD_BACKEND: [{ name: 'CREATIO_CRUD_BACKEND', deprecated: true }],
19
+ CREATIO_MCP_DISABLE_DATAFORGE: [{ name: 'DISABLE_DATAFORGE', deprecated: true }],
20
+ CREATIO_MCP_DISABLE_GLOBAL_SEARCH: [{ name: 'DISABLE_GLOBAL_SEARCH', deprecated: true }],
21
+ CREATIO_MCP_ENABLE_PUBLISHED_TOOLS: [{ name: 'ENABLE_PUBLISHED_TOOLS', deprecated: true }],
22
+ CREATIO_MCP_TRANSPORT: [{ name: 'MCP_TRANSPORT', deprecated: true }],
23
+ };
24
+ const _warned = new Set();
25
+ /**
26
+ * Emits the deprecation notice straight to stderr (not the structured logger) on purpose: the
27
+ * logging module resolves its own level through `env()`, so depending on it here would create an
28
+ * env ↔ log import cycle. A one-line stderr notice keeps this layer self-contained.
29
+ */
30
+ function noticeOnce(alias, canonical) {
31
+ if (_warned.has(alias)) {
32
+ return;
33
+ }
34
+ _warned.add(alias);
35
+ process.stderr.write(`[mcp-creatio] Environment variable "${alias}" is deprecated; use "${canonical}" instead.\n`);
36
+ }
37
+ /**
38
+ * Resolves a legacy value for a canonical variable when the canonical one is unset. Returns the
39
+ * first legacy alias that holds a value (notifying once per deprecated alias actually used), or
40
+ * `undefined` when the variable has no aliases / none are set.
41
+ *
42
+ * `read` is injected (DIP) so this stays decoupled from how a raw env value is fetched/normalized.
43
+ */
44
+ function resolveLegacyEnv(canonical, read) {
45
+ const aliases = LEGACY_ALIASES[canonical];
46
+ if (!aliases) {
47
+ return undefined;
48
+ }
49
+ for (const alias of aliases) {
50
+ const value = read(alias.name);
51
+ if (value === undefined) {
52
+ continue;
53
+ }
54
+ if (alias.deprecated) {
55
+ noticeOnce(alias.name, canonical);
56
+ }
57
+ return value;
58
+ }
59
+ return undefined;
60
+ }
61
+ //# sourceMappingURL=env-aliases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-aliases.js","sourceRoot":"","sources":["../../src/utils/env-aliases.ts"],"names":[],"mappings":";;AA2DA,4CAmBC;AAhED;;;;;;;GAOG;AACH,MAAM,cAAc,GAAqD;IACxE,kEAAkE;IAClE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACvD,yFAAyF;IACzF,qBAAqB,EAAE,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC5E,oBAAoB,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACnE,wBAAwB,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9E,6BAA6B,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAChF,iCAAiC,EAAE,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACxF,kCAAkC,EAAE,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC1F,qBAAqB,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;CACpE,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAElC;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAa,EAAE,SAAiB;IACnD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,uCAAuC,KAAK,yBAAyB,SAAS,cAAc,CAC5F,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC/B,SAAiB,EACjB,IAA0C;IAE1C,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,SAAS;QACV,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Reads an environment variable by its CANONICAL name, transparently falling back to any legacy
3
+ * alias (see {@link resolveLegacyEnv}) for backward compatibility. Returns `undefined` for unset or
4
+ * blank values.
5
+ */
1
6
  export declare function env(name: string): string | undefined;
2
7
  export declare function envBool(name: string, def: boolean): boolean;
3
8
  //# sourceMappingURL=env.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAM3D"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAM3D"}
package/dist/utils/env.js CHANGED
@@ -2,10 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.env = env;
4
4
  exports.envBool = envBool;
5
- function env(name) {
5
+ const env_aliases_1 = require("./env-aliases");
6
+ function readRaw(name) {
6
7
  const v = process.env[name];
7
8
  return (v && v.trim()) || undefined;
8
9
  }
10
+ /**
11
+ * Reads an environment variable by its CANONICAL name, transparently falling back to any legacy
12
+ * alias (see {@link resolveLegacyEnv}) for backward compatibility. Returns `undefined` for unset or
13
+ * blank values.
14
+ */
15
+ function env(name) {
16
+ return readRaw(name) ?? (0, env_aliases_1.resolveLegacyEnv)(name, readRaw);
17
+ }
9
18
  function envBool(name, def) {
10
19
  const v = env(name);
11
20
  if (v == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":";;AAAA,kBAGC;AAED,0BAMC;AAXD,SAAgB,GAAG,CAAC,IAAY;IAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;AACrC,CAAC;AAED,SAAgB,OAAO,CAAC,IAAY,EAAE,GAAY;IACjD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":";;AAYA,kBAEC;AAED,0BAMC;AAtBD,+CAAiD;AAEjD,SAAS,OAAO,CAAC,IAAY;IAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,SAAgB,GAAG,CAAC,IAAY;IAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAA,8BAAgB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,OAAO,CAAC,IAAY,EAAE,GAAY;IACjD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,CAAC;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,76 +1,80 @@
1
1
  {
2
- "name": "mcp-creatio",
3
- "version": "0.6.1",
4
- "main": "dist/index.js",
5
- "bin": {
6
- "mcp-creatio": "dist/cli.js"
7
- },
8
- "files": [
9
- "dist"
10
- ],
11
- "scripts": {
12
- "test": "vitest run",
13
- "test:watch": "vitest",
14
- "test:coverage": "vitest run --coverage",
15
- "clean": "rimraf ./dist",
16
- "prebuild": "npm run clean",
17
- "build": "tsc",
18
- "start": "ts-node src/index.ts",
19
- "start:cli": "ts-node src/cli.ts",
20
- "start:stdio": "ts-node src/cli.ts",
21
- "prepack": "npm run build",
22
- "lint": "eslint --ext .ts src",
23
- "lint:fix": "eslint --ext .ts src --fix",
24
- "format": "prettier --write \"src/**/*.{ts,js,json,md}\"",
25
- "format:check": "prettier --check \"src/**/*.{ts,js,json,md}\""
26
- },
27
- "repository": {
28
- "type": "git",
29
- "url": "git+https://github.com/CRACKISH/mcp-creatio.git"
30
- },
31
- "keywords": [
32
- "mcp",
33
- "model-context-protocol",
34
- "creatio",
35
- "creatio-crm",
36
- "crm",
37
- "odata",
38
- "mcp-server",
39
- "chatgpt",
40
- "claude",
41
- "github-copilot",
42
- "typescript",
43
- "ai-tools"
44
- ],
45
- "author": "",
46
- "license": "MIT",
47
- "bugs": {
48
- "url": "https://github.com/CRACKISH/mcp-creatio/issues"
49
- },
50
- "homepage": "https://github.com/CRACKISH/mcp-creatio#readme",
51
- "description": "MCP server for Creatio CRM. Connect Claude Desktop, ChatGPT, and GitHub Copilot to Creatio via Model Context Protocol and OData v4.",
52
- "devDependencies": {
53
- "@types/express": "5.0.6",
54
- "@types/node": "^26.0.1",
55
- "@types/supertest": "^7.2.0",
56
- "@typescript-eslint/eslint-plugin": "^8.62.0",
57
- "@typescript-eslint/parser": "^8.62.0",
58
- "@vitest/coverage-v8": "^4.1.9",
59
- "eslint": "^9.39.4",
60
- "eslint-config-prettier": "^10.1.8",
61
- "eslint-plugin-import": "^2.32.0",
62
- "eslint-plugin-prettier": "^5.5.6",
63
- "prettier": "^3.8.4",
64
- "rimraf": "^6.1.3",
65
- "supertest": "^7.2.2",
66
- "ts-node": "^10.9.2",
67
- "typescript": "^6.0.3",
68
- "vitest": "^4.1.9"
69
- },
70
- "dependencies": {
71
- "@modelcontextprotocol/sdk": "^1.29.0",
72
- "@types/jsonwebtoken": "^9.0.10",
73
- "fast-xml-parser": "^5.9.3",
74
- "jsonwebtoken": "^9.0.3"
75
- }
2
+ "name": "mcp-creatio",
3
+ "version": "0.6.3",
4
+ "main": "dist/index.js",
5
+ "bin": {
6
+ "mcp-creatio": "dist/cli.js"
7
+ },
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "test": "vitest run",
13
+ "test:watch": "vitest",
14
+ "test:coverage": "vitest run --coverage",
15
+ "clean": "rimraf ./dist",
16
+ "prebuild": "npm run clean",
17
+ "build": "tsc",
18
+ "start": "ts-node src/index.ts",
19
+ "start:cli": "ts-node src/cli.ts",
20
+ "start:stdio": "ts-node src/cli.ts",
21
+ "prepack": "npm run build",
22
+ "lint": "eslint --ext .ts src",
23
+ "lint:fix": "eslint --ext .ts src --fix",
24
+ "format": "prettier --write \"src/**/*.{ts,js,json}\" \"test/**/*.ts\" \"*.md\"",
25
+ "format:check": "prettier --check \"src/**/*.{ts,js,json}\" \"test/**/*.ts\" \"*.md\""
26
+ },
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/CRACKISH/mcp-creatio.git"
30
+ },
31
+ "keywords": [
32
+ "mcp",
33
+ "model-context-protocol",
34
+ "creatio",
35
+ "creatio-crm",
36
+ "crm",
37
+ "odata",
38
+ "mcp-server",
39
+ "chatgpt",
40
+ "claude",
41
+ "github-copilot",
42
+ "typescript",
43
+ "ai-tools"
44
+ ],
45
+ "author": "",
46
+ "license": "MIT",
47
+ "bugs": {
48
+ "url": "https://github.com/CRACKISH/mcp-creatio/issues"
49
+ },
50
+ "homepage": "https://github.com/CRACKISH/mcp-creatio#readme",
51
+ "description": "MCP server for Creatio CRM. Connect Claude Desktop, ChatGPT, and GitHub Copilot to Creatio via Model Context Protocol and OData v4.",
52
+ "devDependencies": {
53
+ "@types/express": "5.0.6",
54
+ "@types/node": "^26.0.1",
55
+ "@types/supertest": "^7.2.0",
56
+ "@typescript-eslint/eslint-plugin": "^8.62.0",
57
+ "@typescript-eslint/parser": "^8.62.0",
58
+ "@vitest/coverage-v8": "^4.1.9",
59
+ "eslint": "^9.39.4",
60
+ "eslint-config-prettier": "^10.1.8",
61
+ "eslint-plugin-import": "^2.32.0",
62
+ "eslint-plugin-prettier": "^5.5.6",
63
+ "prettier": "^3.8.4",
64
+ "rimraf": "^6.1.3",
65
+ "supertest": "^7.2.2",
66
+ "ts-node": "^10.9.2",
67
+ "typescript": "^6.0.3",
68
+ "vitest": "^4.1.9"
69
+ },
70
+ "dependencies": {
71
+ "@modelcontextprotocol/sdk": "^1.29.0",
72
+ "@types/jsonwebtoken": "^9.0.10",
73
+ "express": "^5.2.1",
74
+ "fast-xml-parser": "^5.9.3",
75
+ "jsonwebtoken": "^9.0.3",
76
+ "redis": "^4.7.1",
77
+ "undici": "^6.27.0",
78
+ "zod": "^4.4.3"
79
+ }
76
80
  }
@@ -1,21 +0,0 @@
1
- import { CreatioClientConfig, OAuth2CodeAuthConfig } from '../../client-config';
2
- import { BaseOAuth2Provider } from './base-oauth2-provider';
3
- export declare class OAuth2CodeProvider extends BaseOAuth2Provider<OAuth2CodeAuthConfig> {
4
- private readonly _sessionContext;
5
- private readonly _tokenRefreshScheduler;
6
- private readonly _inflightRefresh;
7
- protected readonly authErrorCode = "oauth2_code_need_consent";
8
- private get _scope();
9
- constructor(config: CreatioClientConfig);
10
- private _exchangeCodeForTokens;
11
- private _refreshTokens;
12
- protected throwNoTokenError(): void;
13
- private _refreshTokensDeduped;
14
- protected ensureAccessToken(force?: boolean): Promise<string | undefined>;
15
- finishAuthorization(code: string): Promise<void>;
16
- getAuthorizeUrl(state: string): Promise<string>;
17
- revoke(): Promise<void>;
18
- refreshUserTokens(userKey: string): Promise<void>;
19
- cancelAllRefresh(): void;
20
- }
21
- //# sourceMappingURL=oauth2-code-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth2-code-provider.d.ts","sourceRoot":"","sources":["../../../../src/creatio/auth/providers/oauth2-code-provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qBAAa,kBAAmB,SAAQ,kBAAkB,CAAC,oBAAoB,CAAC;IAC/E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA+B;IAGtE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAE3E,SAAS,CAAC,QAAQ,CAAC,aAAa,8BAA8B;IAE9D,OAAO,KAAK,MAAM,GAEjB;gBAEW,MAAM,EAAE,mBAAmB;YAKzB,sBAAsB;YA2CtB,cAAc;IAuD5B,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAQnC,OAAO,CAAC,qBAAqB;cAcb,iBAAiB,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA+BhE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa/C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCvB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvD,gBAAgB,IAAI,IAAI;CAG/B"}
@@ -1,251 +0,0 @@
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.OAuth2CodeProvider = void 0;
7
- const consts_1 = require("../../../consts");
8
- const log_1 = __importDefault(require("../../../log"));
9
- const sessions_1 = require("../../../sessions");
10
- const utils_1 = require("../../../utils");
11
- const auth_1 = require("../auth");
12
- const base_oauth2_provider_1 = require("./base-oauth2-provider");
13
- class OAuth2CodeProvider extends base_oauth2_provider_1.BaseOAuth2Provider {
14
- _sessionContext = sessions_1.SessionContext.instance;
15
- _tokenRefreshScheduler = new sessions_1.TokenRefreshScheduler();
16
- // Deduplicates concurrent refreshes per user so K simultaneous requests trigger
17
- // one refresh call, not K (avoids the thundering herd + rotating-refresh-token races).
18
- _inflightRefresh = new Map();
19
- authErrorCode = 'oauth2_code_need_consent';
20
- get _scope() {
21
- return this.authConfig.scope || 'offline_access';
22
- }
23
- constructor(config) {
24
- super(config);
25
- this._tokenRefreshScheduler.setRefreshCallback(this.refreshUserTokens.bind(this));
26
- }
27
- async _exchangeCodeForTokens(code) {
28
- const idBase = this.getIdentityBase();
29
- const url = idBase + auth_1.TOKEN_ENDPOINT;
30
- const body = new URLSearchParams();
31
- body.set('grant_type', 'authorization_code');
32
- body.set('client_id', this.authConfig.clientId);
33
- if (this.authConfig.clientSecret) {
34
- body.set('client_secret', this.authConfig.clientSecret);
35
- }
36
- body.set('code', code);
37
- body.set('redirect_uri', this.authConfig.redirectUri);
38
- body.set('scope', this._scope);
39
- log_1.default.creatioAuthStart(this.config.baseUrl, 'oauth2_code');
40
- const res = await fetch(url, {
41
- method: 'POST',
42
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
43
- body: body.toString(),
44
- });
45
- const txt = await res.text().catch(() => '');
46
- if (!res.ok || !txt) {
47
- log_1.default.creatioAuthFailed(this.config.baseUrl, `token:${res.status} ${txt}`, 'oauth2_code');
48
- throw new Error(`oauth2_code_token_error:${res.status}`);
49
- }
50
- let j;
51
- try {
52
- j = JSON.parse(txt);
53
- }
54
- catch {
55
- log_1.default.creatioAuthFailed(this.config.baseUrl, 'token_parse_failed', 'oauth2_code');
56
- throw new Error('oauth2_code_token_parse_failed');
57
- }
58
- if (!j.access_token) {
59
- throw new Error('oauth2_code_no_access_token');
60
- }
61
- const expiresIn = Number(j.expires_in) || 180;
62
- const accessTokenExpiryMs = this.computeExpiryMs(expiresIn, 1);
63
- log_1.default.creatioAuthOk(this.config.baseUrl, 'oauth2_code');
64
- return {
65
- accessToken: String(j.access_token),
66
- accessTokenExpiryMs,
67
- refreshToken: j.refresh_token ? String(j.refresh_token) : undefined,
68
- };
69
- }
70
- async _refreshTokens(refreshToken) {
71
- const idBase = this.getIdentityBase();
72
- const url = idBase + auth_1.TOKEN_ENDPOINT;
73
- log_1.default.info('oauth2_code.refresh_attempt', { url, refreshTokenLength: refreshToken.length });
74
- const body = new URLSearchParams();
75
- body.set('grant_type', 'refresh_token');
76
- body.set('client_id', this.authConfig.clientId);
77
- if (this.authConfig.clientSecret) {
78
- body.set('client_secret', this.authConfig.clientSecret);
79
- }
80
- body.set('refresh_token', refreshToken);
81
- body.set('redirect_uri', this.authConfig.redirectUri);
82
- body.set('scope', this._scope);
83
- const res = await fetch(url, {
84
- method: 'POST',
85
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
86
- body: body.toString(),
87
- });
88
- const txt = await res.text().catch(() => '');
89
- log_1.default.info('oauth2_code.refresh_response', {
90
- status: res.status,
91
- hasBody: !!txt,
92
- bodyLength: txt.length,
93
- });
94
- if (!res.ok || !txt) {
95
- log_1.default.error('oauth2_code.refresh_failed', {
96
- status: res.status,
97
- body: txt.substring(0, 200),
98
- });
99
- throw new Error(`oauth2_code_refresh_error:${res.status}`);
100
- }
101
- let j;
102
- try {
103
- j = JSON.parse(txt);
104
- }
105
- catch {
106
- throw new Error('oauth2_code_refresh_parse_failed');
107
- }
108
- if (!j.access_token) {
109
- throw new Error('oauth2_code_refresh_no_access_token');
110
- }
111
- const expiresIn = Number(j.expires_in) || 180;
112
- const accessTokenExpiryMs = this.computeExpiryMs(expiresIn, 1);
113
- const newTokens = {
114
- accessToken: String(j.access_token),
115
- accessTokenExpiryMs,
116
- refreshToken: j.refresh_token ? String(j.refresh_token) : refreshToken,
117
- };
118
- log_1.default.info('oauth2_code.refresh_success', {
119
- hasNewRefreshToken: !!j.refresh_token,
120
- expiresIn,
121
- accessTokenLength: newTokens.accessToken.length,
122
- });
123
- return newTokens;
124
- }
125
- throwNoTokenError() {
126
- const userKey = (0, utils_1.getEffectiveUserKey)();
127
- const errorMessage = userKey
128
- ? `${this.authErrorCode}:http://localhost:${consts_1.HTTP_MCP_PORT}/oauth/start?userKey=${encodeURIComponent(userKey)}`
129
- : this.authErrorCode;
130
- throw new Error(errorMessage);
131
- }
132
- _refreshTokensDeduped(userKey, refreshToken) {
133
- const existing = this._inflightRefresh.get(userKey);
134
- if (existing) {
135
- return existing;
136
- }
137
- const promise = (async () => {
138
- const updated = await this._refreshTokens(refreshToken);
139
- await this._sessionContext.setTokensForUser(userKey, updated);
140
- return updated;
141
- })().finally(() => this._inflightRefresh.delete(userKey));
142
- this._inflightRefresh.set(userKey, promise);
143
- return promise;
144
- }
145
- async ensureAccessToken(force = false) {
146
- // This provider is a process-wide singleton serving many concurrent users, so the
147
- // per-user tokens in SessionContext are the only cache — never instance fields,
148
- // which a second user would overwrite (token thrash + cross-user bleed).
149
- const userKey = (0, utils_1.getEffectiveUserKey)();
150
- if (!userKey) {
151
- log_1.default.warn('oauth2_code.no_user_key');
152
- return undefined;
153
- }
154
- const saved = await this._sessionContext.getTokensForUser(userKey);
155
- if (!saved) {
156
- log_1.default.warn('oauth2_code.no_saved_tokens', { userKey });
157
- return undefined;
158
- }
159
- const now = Date.now();
160
- if (!force &&
161
- saved.accessToken &&
162
- saved.accessTokenExpiryMs &&
163
- now < saved.accessTokenExpiryMs) {
164
- return saved.accessToken;
165
- }
166
- if (saved.refreshToken) {
167
- const updated = await this._refreshTokensDeduped(userKey, saved.refreshToken);
168
- return updated.accessToken;
169
- }
170
- await this._sessionContext.deleteTokensForUser(userKey);
171
- return undefined;
172
- }
173
- async finishAuthorization(code) {
174
- const userKey = (0, utils_1.getEffectiveUserKey)();
175
- log_1.default.info('oauth2_code.finish_authorization', { userKey, hasCode: !!code });
176
- if (!userKey) {
177
- throw new Error('oauth2_code_missing_user');
178
- }
179
- const tokens = await this._exchangeCodeForTokens(code);
180
- await this._sessionContext.setTokensForUser(userKey, tokens);
181
- this._tokenRefreshScheduler.scheduleRefresh(userKey);
182
- log_1.default.info('oauth2_code.authorization_complete', { userKey });
183
- }
184
- async getAuthorizeUrl(state) {
185
- const idBase = this.getIdentityBase();
186
- const u = new URL(idBase + auth_1.AUTHORIZE_ENDPOINT);
187
- u.searchParams.set('client_id', this.authConfig.clientId);
188
- u.searchParams.set('redirect_uri', this.authConfig.redirectUri);
189
- u.searchParams.set('response_type', 'code');
190
- u.searchParams.set('state', state);
191
- const scopeParam = encodeURIComponent(this._scope);
192
- u.search += '&scope=' + scopeParam;
193
- log_1.default.info('oauth2_code.authorize_url', { idBase });
194
- return u.toString();
195
- }
196
- async revoke() {
197
- try {
198
- const userKey = (0, utils_1.getUserKey)();
199
- if (!userKey) {
200
- return;
201
- }
202
- const saved = await this._sessionContext.getTokensForUser(userKey);
203
- if (!saved?.refreshToken) {
204
- await this._sessionContext.deleteTokensForUser(userKey);
205
- return;
206
- }
207
- const idBase = this.getIdentityBase();
208
- const url = idBase + auth_1.REVOCATION_ENDPOINT;
209
- const body = new URLSearchParams();
210
- body.set('client_id', this.authConfig.clientId);
211
- if (this.authConfig.clientSecret) {
212
- body.set('client_secret', this.authConfig.clientSecret);
213
- }
214
- body.set('token', saved.refreshToken);
215
- body.set('token_type_hint', 'refresh_token');
216
- const res = await fetch(url, {
217
- method: 'POST',
218
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
219
- body: body.toString(),
220
- });
221
- if (!res.ok) {
222
- const t = await res.text().catch(() => '');
223
- log_1.default.error('oauth2_code.revoke_failed', { status: res.status, t });
224
- }
225
- }
226
- finally {
227
- const userKey = (0, utils_1.getUserKey)();
228
- if (userKey) {
229
- await this._sessionContext.deleteTokensForUser(userKey);
230
- this._tokenRefreshScheduler.cancelRefresh(userKey);
231
- }
232
- this.accessToken = undefined;
233
- this.accessTokenExpiryMs = undefined;
234
- }
235
- }
236
- async refreshUserTokens(userKey) {
237
- const saved = await this._sessionContext.getTokensForUser(userKey);
238
- if (!saved?.refreshToken) {
239
- throw new Error('oauth2_no_refresh_token');
240
- }
241
- // Share the same in-flight refresh as on-demand callers to avoid colliding
242
- // refresh calls that would invalidate each other's rotating refresh token.
243
- await this._refreshTokensDeduped(userKey, saved.refreshToken);
244
- log_1.default.info('oauth2_code.background_refresh_success', { userKey });
245
- }
246
- cancelAllRefresh() {
247
- this._tokenRefreshScheduler.cancelAllRefresh();
248
- }
249
- }
250
- exports.OAuth2CodeProvider = OAuth2CodeProvider;
251
- //# sourceMappingURL=oauth2-code-provider.js.map