mcp-creatio 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.md +252 -212
  2. package/dist/cli.d.ts +5 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +18 -11
  5. package/dist/cli.js.map +1 -1
  6. package/dist/creatio/auth/auth.d.ts +2 -0
  7. package/dist/creatio/auth/auth.d.ts.map +1 -1
  8. package/dist/creatio/auth/auth.js.map +1 -1
  9. package/dist/creatio/auth/providers/base-provider.d.ts +1 -0
  10. package/dist/creatio/auth/providers/base-provider.d.ts.map +1 -1
  11. package/dist/creatio/auth/providers/base-provider.js +3 -0
  12. package/dist/creatio/auth/providers/base-provider.js.map +1 -1
  13. package/dist/creatio/auth/providers/oauth2-code-provider.d.ts +3 -0
  14. package/dist/creatio/auth/providers/oauth2-code-provider.d.ts.map +1 -1
  15. package/dist/creatio/auth/providers/oauth2-code-provider.js +30 -24
  16. package/dist/creatio/auth/providers/oauth2-code-provider.js.map +1 -1
  17. package/dist/creatio/providers/configuration-provider.d.ts +3 -2
  18. package/dist/creatio/providers/configuration-provider.d.ts.map +1 -1
  19. package/dist/creatio/providers/crud-provider.d.ts +2 -0
  20. package/dist/creatio/providers/crud-provider.d.ts.map +1 -1
  21. package/dist/creatio/services/configuration-service-provider.d.ts.map +1 -1
  22. package/dist/creatio/services/configuration-service-provider.js +11 -3
  23. package/dist/creatio/services/configuration-service-provider.js.map +1 -1
  24. package/dist/creatio/services/http-client.d.ts.map +1 -1
  25. package/dist/creatio/services/http-client.js +0 -1
  26. package/dist/creatio/services/http-client.js.map +1 -1
  27. package/dist/creatio/services/metadata-store.d.ts +5 -0
  28. package/dist/creatio/services/metadata-store.d.ts.map +1 -1
  29. package/dist/creatio/services/metadata-store.js +18 -6
  30. package/dist/creatio/services/metadata-store.js.map +1 -1
  31. package/dist/creatio/services/odata-crud-provider.d.ts +3 -1
  32. package/dist/creatio/services/odata-crud-provider.d.ts.map +1 -1
  33. package/dist/creatio/services/odata-crud-provider.js +31 -8
  34. package/dist/creatio/services/odata-crud-provider.js.map +1 -1
  35. package/dist/server/http/creatio-oauth-handlers.d.ts +0 -1
  36. package/dist/server/http/creatio-oauth-handlers.d.ts.map +1 -1
  37. package/dist/server/http/creatio-oauth-handlers.js +30 -23
  38. package/dist/server/http/creatio-oauth-handlers.js.map +1 -1
  39. package/dist/server/http/httpServer.d.ts +9 -0
  40. package/dist/server/http/httpServer.d.ts.map +1 -1
  41. package/dist/server/http/httpServer.js +34 -11
  42. package/dist/server/http/httpServer.js.map +1 -1
  43. package/dist/server/http/mcp-handlers.d.ts.map +1 -1
  44. package/dist/server/http/mcp-handlers.js +4 -1
  45. package/dist/server/http/mcp-handlers.js.map +1 -1
  46. package/dist/server/http/mcp-oauth-handlers.d.ts.map +1 -1
  47. package/dist/server/http/mcp-oauth-handlers.js +18 -6
  48. package/dist/server/http/mcp-oauth-handlers.js.map +1 -1
  49. package/dist/server/http/middleware.d.ts +7 -0
  50. package/dist/server/http/middleware.d.ts.map +1 -1
  51. package/dist/server/http/middleware.js +23 -0
  52. package/dist/server/http/middleware.js.map +1 -1
  53. package/dist/server/http/rate-limiter.d.ts +24 -0
  54. package/dist/server/http/rate-limiter.d.ts.map +1 -0
  55. package/dist/server/http/rate-limiter.js +42 -0
  56. package/dist/server/http/rate-limiter.js.map +1 -0
  57. package/dist/server/mcp/creatio-rest.d.ts +44 -0
  58. package/dist/server/mcp/creatio-rest.d.ts.map +1 -0
  59. package/dist/server/mcp/creatio-rest.js +26 -0
  60. package/dist/server/mcp/creatio-rest.js.map +1 -0
  61. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts +55 -0
  62. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts.map +1 -0
  63. package/dist/server/mcp/crtmcp/crt-mcp-client.js +67 -0
  64. package/dist/server/mcp/crtmcp/crt-mcp-client.js.map +1 -0
  65. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts +20 -0
  66. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts.map +1 -0
  67. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js +74 -0
  68. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js.map +1 -0
  69. package/dist/server/mcp/dataforge/dataforge-client.d.ts +64 -0
  70. package/dist/server/mcp/dataforge/dataforge-client.d.ts.map +1 -0
  71. package/dist/server/mcp/dataforge/dataforge-client.js +130 -0
  72. package/dist/server/mcp/dataforge/dataforge-client.js.map +1 -0
  73. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts +17 -0
  74. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts.map +1 -0
  75. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js +42 -0
  76. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js.map +1 -0
  77. package/dist/server/mcp/filters.d.ts.map +1 -1
  78. package/dist/server/mcp/filters.js +20 -4
  79. package/dist/server/mcp/filters.js.map +1 -1
  80. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts +50 -0
  81. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts.map +1 -0
  82. package/dist/server/mcp/globalsearch/globalsearch-client.js +118 -0
  83. package/dist/server/mcp/globalsearch/globalsearch-client.js.map +1 -0
  84. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts +16 -0
  85. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts.map +1 -0
  86. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js +34 -0
  87. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js.map +1 -0
  88. package/dist/server/mcp/json-schema-to-zod.d.ts +3 -0
  89. package/dist/server/mcp/json-schema-to-zod.d.ts.map +1 -0
  90. package/dist/server/mcp/json-schema-to-zod.js +54 -0
  91. package/dist/server/mcp/json-schema-to-zod.js.map +1 -0
  92. package/dist/server/mcp/server.d.ts +18 -0
  93. package/dist/server/mcp/server.d.ts.map +1 -1
  94. package/dist/server/mcp/server.js +93 -25
  95. package/dist/server/mcp/server.js.map +1 -1
  96. package/dist/server/mcp/tool-preparer.d.ts +26 -0
  97. package/dist/server/mcp/tool-preparer.d.ts.map +1 -0
  98. package/dist/server/mcp/tool-preparer.js +11 -0
  99. package/dist/server/mcp/tool-preparer.js.map +1 -0
  100. package/dist/server/mcp/tools-data.d.ts +69 -10
  101. package/dist/server/mcp/tools-data.d.ts.map +1 -1
  102. package/dist/server/mcp/tools-data.js +222 -32
  103. package/dist/server/mcp/tools-data.js.map +1 -1
  104. package/dist/server/oauth/oauth-server.d.ts +0 -1
  105. package/dist/server/oauth/oauth-server.d.ts.map +1 -1
  106. package/dist/server/oauth/oauth-server.js +11 -21
  107. package/dist/server/oauth/oauth-server.js.map +1 -1
  108. package/dist/server/oauth/storage.d.ts +0 -2
  109. package/dist/server/oauth/storage.d.ts.map +1 -1
  110. package/dist/server/oauth/storage.js +0 -6
  111. package/dist/server/oauth/storage.js.map +1 -1
  112. package/dist/server/oauth/validators.d.ts +6 -0
  113. package/dist/server/oauth/validators.d.ts.map +1 -1
  114. package/dist/server/oauth/validators.js +28 -0
  115. package/dist/server/oauth/validators.js.map +1 -1
  116. package/dist/services/session-context.d.ts +8 -7
  117. package/dist/services/session-context.d.ts.map +1 -1
  118. package/dist/services/session-context.js +7 -27
  119. package/dist/services/session-context.js.map +1 -1
  120. package/package.json +18 -9
  121. package/.dockerignore +0 -12
  122. package/.editorconfig +0 -14
  123. package/.eslintrc.cjs +0 -18
  124. package/.gitattributes +0 -8
  125. package/.github/workflows/docker-publish.yml +0 -50
  126. package/.prettierignore +0 -3
  127. package/.prettierrc +0 -9
  128. package/.vscode/launch.json +0 -23
  129. package/.vscode/mcp.json +0 -13
  130. package/.vscode/settings.json +0 -16
  131. package/Agent.md +0 -190
  132. package/Debug.md +0 -32
  133. package/Dockerfile +0 -23
  134. package/docs/coding-style.md +0 -30
  135. package/eslint.config.cjs +0 -95
  136. package/src/cli.ts +0 -162
  137. package/src/config-builder.ts +0 -76
  138. package/src/consts.ts +0 -3
  139. package/src/creatio/auth/auth-manager.ts +0 -27
  140. package/src/creatio/auth/auth.ts +0 -31
  141. package/src/creatio/auth/index.ts +0 -3
  142. package/src/creatio/auth/providers/base-oauth2-provider.ts +0 -62
  143. package/src/creatio/auth/providers/base-provider.ts +0 -42
  144. package/src/creatio/auth/providers/index.ts +0 -4
  145. package/src/creatio/auth/providers/legacy-provider.ts +0 -70
  146. package/src/creatio/auth/providers/oauth2-code-provider.ts +0 -252
  147. package/src/creatio/auth/providers/oauth2-provider.ts +0 -91
  148. package/src/creatio/auth/providers/type.ts +0 -5
  149. package/src/creatio/client-config.ts +0 -34
  150. package/src/creatio/engines/admin-operation/admin-operation-engine.ts +0 -44
  151. package/src/creatio/engines/configuration/configuration-engine.ts +0 -26
  152. package/src/creatio/engines/crud/crud-engine.ts +0 -47
  153. package/src/creatio/engines/engine-manager.ts +0 -157
  154. package/src/creatio/engines/engine-registry.ts +0 -39
  155. package/src/creatio/engines/engine.ts +0 -3
  156. package/src/creatio/engines/feature/feature-engine.ts +0 -20
  157. package/src/creatio/engines/index.ts +0 -10
  158. package/src/creatio/engines/process/process-engine.ts +0 -20
  159. package/src/creatio/engines/sys-settings/sys-settings-engine.ts +0 -41
  160. package/src/creatio/engines/user/user-engine.ts +0 -20
  161. package/src/creatio/index.ts +0 -6
  162. package/src/creatio/provider-context.ts +0 -21
  163. package/src/creatio/providers/admin-operation-provider.ts +0 -34
  164. package/src/creatio/providers/configuration-provider.ts +0 -22
  165. package/src/creatio/providers/crud-provider.ts +0 -45
  166. package/src/creatio/providers/feature-provider.ts +0 -10
  167. package/src/creatio/providers/index.ts +0 -7
  168. package/src/creatio/providers/process-provider.ts +0 -15
  169. package/src/creatio/providers/sys-settings-provider.ts +0 -63
  170. package/src/creatio/providers/user-provider.ts +0 -12
  171. package/src/creatio/services/admin-operation-service-provider.ts +0 -115
  172. package/src/creatio/services/configuration-service-provider.ts +0 -127
  173. package/src/creatio/services/creatio-service-context.ts +0 -55
  174. package/src/creatio/services/feature-service-provider.ts +0 -60
  175. package/src/creatio/services/http-client.ts +0 -174
  176. package/src/creatio/services/index.ts +0 -10
  177. package/src/creatio/services/metadata-store.ts +0 -181
  178. package/src/creatio/services/odata-crud-provider.ts +0 -210
  179. package/src/creatio/services/process-service-provider.ts +0 -76
  180. package/src/creatio/services/sys-settings-service-provider.ts +0 -192
  181. package/src/creatio/services/user-info-provider.ts +0 -41
  182. package/src/index.ts +0 -44
  183. package/src/log.ts +0 -183
  184. package/src/server/http/creatio-oauth-handlers.ts +0 -146
  185. package/src/server/http/httpServer.ts +0 -150
  186. package/src/server/http/index.ts +0 -5
  187. package/src/server/http/mcp-handlers.ts +0 -92
  188. package/src/server/http/mcp-oauth-handlers.ts +0 -108
  189. package/src/server/http/middleware.ts +0 -91
  190. package/src/server/index.ts +0 -2
  191. package/src/server/mcp/filters.ts +0 -97
  192. package/src/server/mcp/index.ts +0 -1
  193. package/src/server/mcp/prompts-data.ts +0 -1292
  194. package/src/server/mcp/server.ts +0 -442
  195. package/src/server/mcp/tools-data.ts +0 -748
  196. package/src/server/oauth/client-manager.ts +0 -47
  197. package/src/server/oauth/index.ts +0 -6
  198. package/src/server/oauth/oauth-server.ts +0 -185
  199. package/src/server/oauth/storage.ts +0 -106
  200. package/src/server/oauth/token-manager.ts +0 -80
  201. package/src/server/oauth/types.ts +0 -55
  202. package/src/server/oauth/validators.ts +0 -56
  203. package/src/services/index.ts +0 -2
  204. package/src/services/session-context.ts +0 -232
  205. package/src/services/token-refresh-scheduler.ts +0 -68
  206. package/src/types/index.ts +0 -1
  207. package/src/types/network.ts +0 -7
  208. package/src/utils/context.ts +0 -49
  209. package/src/utils/env.ts +0 -12
  210. package/src/utils/index.ts +0 -5
  211. package/src/utils/mcp.ts +0 -8
  212. package/src/utils/network.ts +0 -65
  213. package/src/utils/pkce.ts +0 -39
  214. package/src/version.ts +0 -15
  215. package/tsconfig.json +0 -28
@@ -1,210 +0,0 @@
1
- import log from '../../log';
2
- import {
3
- CrudDeleteParams,
4
- CrudProvider,
5
- CrudReadParams,
6
- CrudUpdateParams,
7
- CrudWriteParams,
8
- EntitySchemaDescription,
9
- } from '../providers';
10
-
11
- import { CreatioHttpClient } from './http-client';
12
- import { ODataMetadataStore } from './metadata-store';
13
-
14
- export class ODataCrudProvider implements CrudProvider {
15
- private readonly _client: CreatioHttpClient;
16
- private readonly _metadataStore: ODataMetadataStore;
17
-
18
- public readonly kind = 'creatio-odata';
19
-
20
- constructor(client: CreatioHttpClient, metadataStore: ODataMetadataStore) {
21
- this._client = client;
22
- this._metadataStore = metadataStore;
23
- }
24
-
25
- private _buildODataQueryParams(
26
- filter?: string,
27
- select?: string[],
28
- top?: number,
29
- expand?: string[],
30
- orderBy?: string,
31
- ): string[] {
32
- const params: string[] = [];
33
- if (filter) {
34
- params.push(`$filter=${encodeURIComponent(filter)}`);
35
- }
36
- if (select && select.length > 0) {
37
- params.push(`$select=${encodeURIComponent(select.join(','))}`);
38
- }
39
- if (expand && expand.length > 0) {
40
- params.push(`$expand=${encodeURIComponent(expand.join(','))}`);
41
- }
42
- if (orderBy) {
43
- params.push(`$orderby=${encodeURIComponent(orderBy)}`);
44
- }
45
- if (top) {
46
- params.push(`$top=${top}`);
47
- }
48
- return params;
49
- }
50
-
51
- private _buildQueryString(params: string[]): string {
52
- return params.length ? `?${params.join('&')}` : '';
53
- }
54
-
55
- private _extractODataValue(body: any): any {
56
- return body && typeof body === 'object' && 'value' in body ? body.value : body;
57
- }
58
-
59
- private _buildEntityUrl(entity: string): string {
60
- return `${this._client.odataRoot}/${entity}`;
61
- }
62
-
63
- private _formatEntityKey(id: string): string {
64
- const GUID_PATTERN =
65
- /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
66
- const NUMERIC_PATTERN = /^\d+$/;
67
- if (NUMERIC_PATTERN.test(id) || GUID_PATTERN.test(id)) {
68
- return id;
69
- }
70
- return `'${id.replace(/'/g, "''")}'`;
71
- }
72
-
73
- public listEntitySets(): Promise<string[]> {
74
- return this._metadataStore.listEntitySets();
75
- }
76
-
77
- public describeEntity(entitySet: string): Promise<EntitySchemaDescription> {
78
- return this._metadataStore.describeEntity(entitySet);
79
- }
80
-
81
- public async create({ entity, data }: CrudWriteParams) {
82
- const url = this._buildEntityUrl(entity);
83
- return this._client.executeWithTiming(
84
- 'create',
85
- url,
86
- async () => {
87
- const headers = await this._client.getJsonHeaders();
88
- return this._client.fetchWithAuth(url, async () => ({
89
- method: 'POST',
90
- headers,
91
- body: JSON.stringify(data),
92
- }));
93
- },
94
- async (response, duration) => {
95
- this._client.logSuccess('create', response.status, duration, { entity });
96
- return response.json().catch(() => ({}));
97
- },
98
- async (response, duration) =>
99
- this._client.handleErrorResponse(
100
- 'create',
101
- response,
102
- duration,
103
- 'creatio_create_failed',
104
- {
105
- entity,
106
- url,
107
- },
108
- ),
109
- { entity },
110
- );
111
- }
112
-
113
- public async read({ entity, filter, select, top, expand, orderBy }: CrudReadParams) {
114
- const startTime = Date.now();
115
- const queryParams = this._buildODataQueryParams(filter, select, top, expand, orderBy);
116
- const url = this._buildEntityUrl(entity) + this._buildQueryString(queryParams);
117
- const headers = await this._client.getJsonHeaders();
118
- try {
119
- const body = await this._client.fetchJson(url, async () => ({ headers }));
120
- const result = this._extractODataValue(body);
121
- const duration = Date.now() - startTime;
122
- const resultCount = Array.isArray(result) ? result.length : result ? 1 : 0;
123
- log.info('creatio.crud.read.success', {
124
- entity,
125
- filter,
126
- select: select?.join(','),
127
- expand: expand?.join(','),
128
- orderBy,
129
- top,
130
- resultCount,
131
- duration,
132
- });
133
- return result;
134
- } catch (error: any) {
135
- const duration = Date.now() - startTime;
136
- log.error('creatio.crud.read.error', {
137
- entity,
138
- url,
139
- error: String(error?.message ?? error),
140
- duration,
141
- });
142
- throw error;
143
- }
144
- }
145
-
146
- public async update({ entity, id, data }: CrudUpdateParams) {
147
- const url = `${this._buildEntityUrl(entity)}(${this._formatEntityKey(id)})`;
148
- return this._client.executeWithTiming(
149
- 'update',
150
- url,
151
- async () => {
152
- const headers = await this._client.getJsonHeaders();
153
- return this._client.fetchWithAuth(url, async () => ({
154
- method: 'PATCH',
155
- headers,
156
- body: JSON.stringify(data),
157
- }));
158
- },
159
- async (response, duration) => {
160
- this._client.logSuccess('update', response.status, duration, { entity, id });
161
- return response.text();
162
- },
163
- async (response, duration) =>
164
- this._client.handleErrorResponse(
165
- 'update',
166
- response,
167
- duration,
168
- 'creatio_update_failed',
169
- {
170
- entity,
171
- id,
172
- url,
173
- },
174
- ),
175
- { entity, id },
176
- );
177
- }
178
-
179
- public async delete({ entity, id }: CrudDeleteParams) {
180
- const url = `${this._buildEntityUrl(entity)}(${this._formatEntityKey(id)})`;
181
- return this._client.executeWithTiming(
182
- 'delete',
183
- url,
184
- async () => {
185
- const headers = await this._client.getJsonHeaders();
186
- return this._client.fetchWithAuth(url, async () => ({
187
- method: 'DELETE',
188
- headers,
189
- }));
190
- },
191
- async (response, duration) => {
192
- this._client.logSuccess('delete', response.status, duration, { entity, id });
193
- return response.text();
194
- },
195
- async (response, duration) =>
196
- this._client.handleErrorResponse(
197
- 'delete',
198
- response,
199
- duration,
200
- 'creatio_delete_failed',
201
- {
202
- entity,
203
- id,
204
- url,
205
- },
206
- ),
207
- { entity, id },
208
- );
209
- }
210
- }
@@ -1,76 +0,0 @@
1
- import { ExecuteProcessParams, ExecuteProcessResult, ProcessProvider } from '../providers';
2
-
3
- import { CreatioHttpClient } from './http-client';
4
-
5
- export class ProcessServiceProvider implements ProcessProvider {
6
- private readonly _client: CreatioHttpClient;
7
-
8
- public readonly kind = 'creatio-process-service';
9
-
10
- constructor(client: CreatioHttpClient) {
11
- this._client = client;
12
- }
13
-
14
- private _getServiceUrl(): string {
15
- return `${this._client.normalizedBaseUrl}/0/ServiceModel/ProcessEngineService.svc/RunProcess`;
16
- }
17
-
18
- private _createProcessParameterValues(parameters?: Record<string, any>): Array<{
19
- name: string;
20
- value: any;
21
- }> {
22
- const parameterValues: Array<{
23
- name: string;
24
- value: any;
25
- }> = [];
26
- if (!parameters) {
27
- return parameterValues;
28
- }
29
- Object.entries(parameters).forEach(([name, value]) => {
30
- let encodedValue = value;
31
- if (value instanceof Date) {
32
- encodedValue = value.toISOString();
33
- }
34
- parameterValues.push({
35
- name,
36
- value: encodedValue,
37
- });
38
- });
39
- return parameterValues;
40
- }
41
-
42
- public async executeProcess({ processName, parameters }: ExecuteProcessParams) {
43
- const url = this._getServiceUrl();
44
- return this._client.executeWithTiming(
45
- 'execute-process',
46
- url,
47
- async () => {
48
- const body = {
49
- schemaName: processName,
50
- parameterValues: this._createProcessParameterValues(parameters),
51
- resultParameterNames: [],
52
- };
53
- const requestInit = await this._client.createPostRequest(body);
54
- return this._client.fetchWithAuth(url, async () => requestInit);
55
- },
56
- async (response, duration) => {
57
- this._client.logSuccess('execute-process', response.status, duration, {
58
- processName,
59
- });
60
- return (await response.json()) as ExecuteProcessResult;
61
- },
62
- async (response, duration) =>
63
- this._client.handleErrorResponse(
64
- 'execute-process',
65
- response,
66
- duration,
67
- 'creatio_execute_process_failed',
68
- {
69
- processName,
70
- url,
71
- },
72
- ),
73
- { processName },
74
- );
75
- }
76
- }
@@ -1,192 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
-
3
- import {
4
- CreateSysSettingRequest,
5
- CreateSysSettingResult,
6
- QuerySysSettingsResponse,
7
- SysSettingDefinition,
8
- SysSettingDefinitionUpdate,
9
- SysSettingInsertResponse,
10
- SysSettingUpdateResponse,
11
- SysSettingsProvider,
12
- } from '../providers';
13
-
14
- import { CreatioHttpClient } from './http-client';
15
-
16
- export class SysSettingsServiceProvider implements SysSettingsProvider {
17
- private readonly _client: CreatioHttpClient;
18
-
19
- public readonly kind = 'creatio-sys-settings-service';
20
-
21
- constructor(client: CreatioHttpClient) {
22
- this._client = client;
23
- }
24
-
25
- private _getSetValuesUrl(): string {
26
- return `${this._client.normalizedBaseUrl}/0/DataService/json/SyncReply/PostSysSettingsValues`;
27
- }
28
-
29
- private _getQueryUrl(): string {
30
- return `${this._client.normalizedBaseUrl}/0/DataService/json/SyncReply/QuerySysSettings`;
31
- }
32
-
33
- private _getInsertUrl(): string {
34
- return `${this._client.normalizedBaseUrl}/0/DataService/json/SyncReply/InsertSysSettingRequest`;
35
- }
36
-
37
- private _getUpdateUrl(): string {
38
- return `${this._client.normalizedBaseUrl}/0/DataService/json/SyncReply/UpdateSysSettingRequest`;
39
- }
40
-
41
- private async _insertSetting(
42
- definition: SysSettingDefinition,
43
- ): Promise<SysSettingInsertResponse> {
44
- const payload = {
45
- id: definition.id ?? randomUUID(),
46
- ...definition,
47
- };
48
- return this._sendDefinitionRequest(
49
- 'insert-sys-setting',
50
- this._getInsertUrl(),
51
- payload,
52
- (response) => response.json() as Promise<SysSettingInsertResponse>,
53
- 'creatio_insert_sys_setting_failed',
54
- );
55
- }
56
-
57
- private async _updateSetting(
58
- definition: SysSettingDefinitionUpdate,
59
- ): Promise<SysSettingUpdateResponse> {
60
- const payload = {
61
- ...definition,
62
- };
63
- return this._sendDefinitionRequest(
64
- 'update-sys-setting',
65
- this._getUpdateUrl(),
66
- payload,
67
- (response) => response.json() as Promise<SysSettingUpdateResponse>,
68
- 'creatio_update_sys_setting_failed',
69
- );
70
- }
71
-
72
- private async _sendDefinitionRequest<T>(
73
- operation: string,
74
- url: string,
75
- payload: Partial<SysSettingDefinition> & { id?: string | undefined },
76
- parser: (response: Response) => Promise<T>,
77
- errorPrefix: string,
78
- ): Promise<T> {
79
- return this._client.executeWithTiming(
80
- operation,
81
- url,
82
- async () => {
83
- const requestInit = await this._client.createPostRequest(payload);
84
- return this._client.fetchWithAuth(url, async () => requestInit);
85
- },
86
- async (response, duration) => {
87
- const body = await parser(response);
88
- this._client.logSuccess(operation, response.status, duration, {
89
- code: payload.code,
90
- id: payload.id,
91
- });
92
- return body;
93
- },
94
- async (response, duration) =>
95
- this._client.handleErrorResponse(operation, response, duration, errorPrefix, {
96
- code: payload.code,
97
- id: payload.id,
98
- url,
99
- }),
100
- { code: payload.code, id: payload.id },
101
- );
102
- }
103
-
104
- public async setValues(sysSettingsValues: Record<string, any>): Promise<any> {
105
- const url = this._getSetValuesUrl();
106
- return this._client.executeWithTiming(
107
- 'set-sys-settings-value',
108
- url,
109
- async () => {
110
- const body = {
111
- isPersonal: false,
112
- sysSettingsValues,
113
- };
114
- const requestInit = await this._client.createPostRequest(body);
115
- return this._client.fetchWithAuth(url, async () => requestInit);
116
- },
117
- async (response, duration) => {
118
- this._client.logSuccess('set-sys-settings-value', response.status, duration, {
119
- settingsCount: Object.keys(sysSettingsValues).length,
120
- });
121
- return response.text();
122
- },
123
- async (response, duration) =>
124
- this._client.handleErrorResponse(
125
- 'set-sys-settings-value',
126
- response,
127
- duration,
128
- 'creatio_set_sys_settings_value_failed',
129
- {
130
- settingsCount: Object.keys(sysSettingsValues).length,
131
- url,
132
- },
133
- ),
134
- { settingsCount: Object.keys(sysSettingsValues).length },
135
- );
136
- }
137
-
138
- public async queryValues(sysSettingCodes: string[]): Promise<QuerySysSettingsResponse> {
139
- if (!sysSettingCodes || sysSettingCodes.length === 0) {
140
- return { success: true, values: {} };
141
- }
142
- const url = this._getQueryUrl();
143
- return this._client.executeWithTiming(
144
- 'query-sys-settings',
145
- url,
146
- async () => {
147
- const body = {
148
- sysSettingsNameCollection: sysSettingCodes,
149
- };
150
- const requestInit = await this._client.createPostRequest(body);
151
- return this._client.fetchWithAuth(url, async () => requestInit);
152
- },
153
- async (response, duration) => {
154
- const payload = (await response.json()) as QuerySysSettingsResponse;
155
- this._client.logSuccess('query-sys-settings', response.status, duration, {
156
- settingsCount: sysSettingCodes.length,
157
- });
158
- return payload;
159
- },
160
- async (response, duration) =>
161
- this._client.handleErrorResponse(
162
- 'query-sys-settings',
163
- response,
164
- duration,
165
- 'creatio_query_sys_settings_failed',
166
- {
167
- settingsCount: sysSettingCodes.length,
168
- url,
169
- },
170
- ),
171
- { settingsCount: sysSettingCodes.length },
172
- );
173
- }
174
-
175
- public async createSetting({
176
- definition,
177
- initialValue,
178
- }: CreateSysSettingRequest): Promise<CreateSysSettingResult> {
179
- const insertResult = await this._insertSetting(definition);
180
- let setValueResult: any;
181
- if (initialValue !== undefined) {
182
- setValueResult = await this.setValues({ [definition.code]: initialValue });
183
- }
184
- return { insertResult, setValueResult };
185
- }
186
-
187
- public updateDefinition(
188
- definition: SysSettingDefinitionUpdate,
189
- ): Promise<SysSettingUpdateResponse> {
190
- return this._updateSetting(definition);
191
- }
192
- }
@@ -1,41 +0,0 @@
1
- import { CurrentUserInfo, UserProvider } from '../providers';
2
-
3
- import { CreatioHttpClient } from './http-client';
4
-
5
- export class UserInfoProvider implements UserProvider {
6
- private readonly _client: CreatioHttpClient;
7
-
8
- public readonly kind = 'creatio-user-info-service';
9
-
10
- constructor(client: CreatioHttpClient) {
11
- this._client = client;
12
- }
13
-
14
- private _getServiceUrl(): string {
15
- return `${this._client.normalizedBaseUrl}/0/ServiceModel/UserInfoService.svc/GetCurrentUserInfo`;
16
- }
17
-
18
- public async getCurrentUserInfo(): Promise<CurrentUserInfo> {
19
- const url = this._getServiceUrl();
20
- return this._client.executeWithTiming(
21
- 'getCurrentUserInfo',
22
- url,
23
- async () => {
24
- const requestInit = await this._client.createPostRequest();
25
- return this._client.fetchWithAuth(url, async () => requestInit);
26
- },
27
- async (response, duration) => {
28
- this._client.logSuccess('getCurrentUserInfo', response.status, duration);
29
- const body = await response.json().catch(() => ({}));
30
- return body as CurrentUserInfo;
31
- },
32
- async (response, duration) =>
33
- this._client.handleErrorResponse(
34
- 'getCurrentUserInfo',
35
- response,
36
- duration,
37
- 'creatio_get_current_user_info_failed',
38
- ),
39
- );
40
- }
41
- }
package/src/index.ts DELETED
@@ -1,44 +0,0 @@
1
- import { getCreatioClientConfig } from './config-builder';
2
- import { HTTP_MCP_PORT } from './consts';
3
- import { CreatioEngineManager, CreatioServiceContext } from './creatio';
4
- import log from './log';
5
- import { HttpServer, Server } from './server';
6
- import { envBool } from './utils';
7
-
8
- let _httpInstance: HttpServer | undefined;
9
-
10
- async function main() {
11
- log.appStart({ env: { node: process.version, HTTP_MCP_PORT } });
12
- const cfg = getCreatioClientConfig();
13
- const provider = new CreatioServiceContext(cfg);
14
- const engines = new CreatioEngineManager(provider);
15
- const server = new Server(engines, { readonlyMode: envBool('READONLY_MODE', false) });
16
- const http = new HttpServer(server);
17
- _httpInstance = http;
18
- await http.start(HTTP_MCP_PORT);
19
- }
20
-
21
- let shuttingDown = false;
22
-
23
- async function shutdown(signal?: string) {
24
- if (shuttingDown) {
25
- return;
26
- }
27
- shuttingDown = true;
28
- try {
29
- log.appStop({ reason: signal || 'shutdown' });
30
- await _httpInstance?.stop();
31
- } catch (err) {
32
- log.error('shutdown.error', { error: String(err) });
33
- } finally {
34
- process.exit(0);
35
- }
36
- }
37
-
38
- main().catch((err) => {
39
- log.error('startup.error', { error: String(err) });
40
- process.exit(1);
41
- });
42
-
43
- process.on('SIGINT', () => shutdown('SIGINT'));
44
- process.on('SIGTERM', () => shutdown('SIGTERM'));