mcp-creatio 0.6.2 → 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.
- package/README.md +233 -164
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +22 -10
- package/dist/cli.js.map +1 -1
- package/dist/config-builder.d.ts +8 -0
- package/dist/config-builder.d.ts.map +1 -1
- package/dist/config-builder.js +147 -43
- package/dist/config-builder.js.map +1 -1
- package/dist/consts.d.ts.map +1 -1
- package/dist/consts.js +2 -1
- package/dist/consts.js.map +1 -1
- package/dist/creatio/auth/auth-manager.d.ts.map +1 -1
- package/dist/creatio/auth/auth-manager.js +5 -2
- package/dist/creatio/auth/auth-manager.js.map +1 -1
- package/dist/creatio/auth/auth.d.ts +4 -31
- package/dist/creatio/auth/auth.d.ts.map +1 -1
- package/dist/creatio/auth/auth.js +20 -26
- package/dist/creatio/auth/auth.js.map +1 -1
- package/dist/creatio/auth/constants.d.ts +14 -0
- package/dist/creatio/auth/constants.d.ts.map +1 -0
- package/dist/creatio/auth/constants.js +20 -0
- package/dist/creatio/auth/constants.js.map +1 -0
- package/dist/creatio/auth/contracts.d.ts +15 -0
- package/dist/creatio/auth/contracts.d.ts.map +1 -0
- package/dist/creatio/auth/contracts.js +3 -0
- package/dist/creatio/auth/contracts.js.map +1 -0
- package/dist/creatio/auth/headers.d.ts +3 -0
- package/dist/creatio/auth/headers.d.ts.map +1 -0
- package/dist/creatio/auth/headers.js +15 -0
- package/dist/creatio/auth/headers.js.map +1 -0
- package/dist/creatio/auth/identity.d.ts +8 -0
- package/dist/creatio/auth/identity.d.ts.map +1 -0
- package/dist/creatio/auth/identity.js +18 -0
- package/dist/creatio/auth/identity.js.map +1 -0
- package/dist/creatio/auth/index.d.ts +4 -3
- package/dist/creatio/auth/index.d.ts.map +1 -1
- package/dist/creatio/auth/index.js +5 -3
- package/dist/creatio/auth/index.js.map +1 -1
- package/dist/creatio/auth/providers/base-oauth2-provider.d.ts +13 -7
- package/dist/creatio/auth/providers/base-oauth2-provider.d.ts.map +1 -1
- package/dist/creatio/auth/providers/base-oauth2-provider.js +29 -19
- package/dist/creatio/auth/providers/base-oauth2-provider.js.map +1 -1
- package/dist/creatio/auth/providers/base-provider.js +1 -1
- package/dist/creatio/auth/providers/base-provider.js.map +1 -1
- package/dist/creatio/auth/providers/broker-provider.d.ts +20 -0
- package/dist/creatio/auth/providers/broker-provider.d.ts.map +1 -0
- package/dist/creatio/auth/providers/broker-provider.js +72 -0
- package/dist/creatio/auth/providers/broker-provider.js.map +1 -0
- package/dist/creatio/auth/providers/creatio-oauth-client.d.ts +27 -0
- package/dist/creatio/auth/providers/creatio-oauth-client.d.ts.map +1 -0
- package/dist/creatio/auth/providers/creatio-oauth-client.js +122 -0
- package/dist/creatio/auth/providers/creatio-oauth-client.js.map +1 -0
- package/dist/creatio/auth/providers/index.d.ts +3 -1
- package/dist/creatio/auth/providers/index.d.ts.map +1 -1
- package/dist/creatio/auth/providers/index.js +3 -1
- package/dist/creatio/auth/providers/index.js.map +1 -1
- package/dist/creatio/auth/providers/oauth2-bearer-provider.d.ts +17 -0
- package/dist/creatio/auth/providers/oauth2-bearer-provider.d.ts.map +1 -0
- package/dist/creatio/auth/providers/oauth2-bearer-provider.js +33 -0
- package/dist/creatio/auth/providers/oauth2-bearer-provider.js.map +1 -0
- package/dist/creatio/auth/providers/oauth2-provider.d.ts +2 -2
- package/dist/creatio/auth/providers/oauth2-provider.d.ts.map +1 -1
- package/dist/creatio/auth/providers/oauth2-provider.js +4 -9
- package/dist/creatio/auth/providers/oauth2-provider.js.map +1 -1
- package/dist/creatio/auth/providers/type.d.ts +20 -1
- package/dist/creatio/auth/providers/type.d.ts.map +1 -1
- package/dist/creatio/auth/providers/type.js +22 -2
- package/dist/creatio/auth/providers/type.js.map +1 -1
- package/dist/creatio/client-config.d.ts +26 -5
- package/dist/creatio/client-config.d.ts.map +1 -1
- package/dist/creatio/engines/admin-operation-engine.d.ts +1 -1
- package/dist/creatio/engines/admin-operation-engine.d.ts.map +1 -1
- package/dist/creatio/engines/admin-operation-engine.js +3 -3
- package/dist/creatio/engines/admin-operation-engine.js.map +1 -1
- package/dist/creatio/engines/configuration-engine.d.ts +1 -1
- package/dist/creatio/engines/configuration-engine.d.ts.map +1 -1
- package/dist/creatio/engines/configuration-engine.js +3 -3
- package/dist/creatio/engines/configuration-engine.js.map +1 -1
- package/dist/creatio/engines/crud-engine.d.ts +1 -1
- package/dist/creatio/engines/crud-engine.d.ts.map +1 -1
- package/dist/creatio/engines/crud-engine.js +4 -4
- package/dist/creatio/engines/crud-engine.js.map +1 -1
- package/dist/creatio/engines/engine-manager.d.ts +1 -2
- package/dist/creatio/engines/engine-manager.d.ts.map +1 -1
- package/dist/creatio/engines/engine-manager.js +4 -10
- package/dist/creatio/engines/engine-manager.js.map +1 -1
- package/dist/creatio/engines/engine.d.ts.map +1 -1
- package/dist/creatio/engines/engine.js +12 -1
- package/dist/creatio/engines/engine.js.map +1 -1
- package/dist/creatio/engines/feature-engine.d.ts +1 -1
- package/dist/creatio/engines/feature-engine.d.ts.map +1 -1
- package/dist/creatio/engines/feature-engine.js +3 -3
- package/dist/creatio/engines/feature-engine.js.map +1 -1
- package/dist/creatio/engines/process-engine.d.ts +1 -1
- package/dist/creatio/engines/process-engine.d.ts.map +1 -1
- package/dist/creatio/engines/process-engine.js +3 -3
- package/dist/creatio/engines/process-engine.js.map +1 -1
- package/dist/creatio/engines/sys-settings-engine.d.ts +1 -1
- package/dist/creatio/engines/sys-settings-engine.d.ts.map +1 -1
- package/dist/creatio/engines/sys-settings-engine.js +3 -3
- package/dist/creatio/engines/sys-settings-engine.js.map +1 -1
- package/dist/creatio/engines/user-engine.d.ts +1 -1
- package/dist/creatio/engines/user-engine.d.ts.map +1 -1
- package/dist/creatio/engines/user-engine.js +3 -3
- package/dist/creatio/engines/user-engine.js.map +1 -1
- package/dist/creatio/services/creatio-service-context.d.ts +1 -1
- package/dist/creatio/services/creatio-service-context.d.ts.map +1 -1
- package/dist/creatio/services/crud-provider-factory.d.ts.map +1 -1
- package/dist/creatio/services/crud-provider-factory.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-column-values.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts +3 -3
- package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-crud-provider.js +5 -5
- package/dist/creatio/services/dataservice/data-service-crud-provider.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-filter-translator.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-filter-translator.js +7 -2
- package/dist/creatio/services/dataservice/data-service-filter-translator.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-query-builder.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-query-builder.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-schema.d.ts +3 -3
- package/dist/creatio/services/dataservice/data-service-schema.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-schema.js +19 -17
- package/dist/creatio/services/dataservice/data-service-schema.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-transport.d.ts +1 -1
- package/dist/creatio/services/dataservice/data-service-transport.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-transport.js +3 -3
- package/dist/creatio/services/dataservice/data-service-transport.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-types.d.ts +0 -19
- package/dist/creatio/services/dataservice/data-service-types.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-value-type.d.ts +2 -1
- package/dist/creatio/services/dataservice/data-service-value-type.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-value-type.js +20 -16
- package/dist/creatio/services/dataservice/data-service-value-type.js.map +1 -1
- package/dist/creatio/services/http-client.d.ts +13 -0
- package/dist/creatio/services/http-client.d.ts.map +1 -1
- package/dist/creatio/services/http-client.js +26 -2
- package/dist/creatio/services/http-client.js.map +1 -1
- package/dist/creatio/services/identifiers.d.ts +10 -0
- package/dist/creatio/services/identifiers.d.ts.map +1 -0
- package/dist/creatio/services/identifiers.js +20 -0
- package/dist/creatio/services/identifiers.js.map +1 -0
- package/dist/creatio/services/odata/metadata-store.d.ts +6 -2
- package/dist/creatio/services/odata/metadata-store.d.ts.map +1 -1
- package/dist/creatio/services/odata/metadata-store.js +30 -34
- package/dist/creatio/services/odata/metadata-store.js.map +1 -1
- package/dist/creatio/services/odata/odata-crud-provider.d.ts.map +1 -1
- package/dist/creatio/services/odata/odata-crud-provider.js +10 -25
- package/dist/creatio/services/odata/odata-crud-provider.js.map +1 -1
- package/dist/creatio/services/odata/odata-query-translator.d.ts +4 -5
- package/dist/creatio/services/odata/odata-query-translator.d.ts.map +1 -1
- package/dist/creatio/services/odata/odata-query-translator.js +32 -20
- package/dist/creatio/services/odata/odata-query-translator.js.map +1 -1
- package/dist/creatio/services/user-info-provider.d.ts.map +1 -1
- package/dist/creatio/services/user-info-provider.js +2 -2
- package/dist/creatio/services/user-info-provider.js.map +1 -1
- package/dist/index.js +30 -4
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +1 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +2 -1
- package/dist/log.js.map +1 -1
- package/dist/server/bearer/base-url-guard.d.ts +20 -0
- package/dist/server/bearer/base-url-guard.d.ts.map +1 -0
- package/dist/server/bearer/base-url-guard.js +55 -0
- package/dist/server/bearer/base-url-guard.js.map +1 -0
- package/dist/server/bearer/bearer-edge.d.ts +42 -0
- package/dist/server/bearer/bearer-edge.d.ts.map +1 -0
- package/dist/server/bearer/bearer-edge.js +122 -0
- package/dist/server/bearer/bearer-edge.js.map +1 -0
- package/dist/server/bearer/bearer-token.d.ts +27 -0
- package/dist/server/bearer/bearer-token.d.ts.map +1 -0
- package/dist/server/bearer/bearer-token.js +50 -0
- package/dist/server/bearer/bearer-token.js.map +1 -0
- package/dist/server/bearer/index.d.ts +3 -0
- package/dist/server/bearer/index.d.ts.map +1 -0
- package/dist/server/bearer/index.js +19 -0
- package/dist/server/bearer/index.js.map +1 -0
- package/dist/server/http/auth-edge.d.ts +26 -0
- package/dist/server/http/auth-edge.d.ts.map +1 -0
- package/dist/server/http/auth-edge.js +75 -0
- package/dist/server/http/auth-edge.js.map +1 -0
- package/dist/server/http/broker-handlers.d.ts +45 -0
- package/dist/server/http/broker-handlers.d.ts.map +1 -0
- package/dist/server/http/broker-handlers.js +224 -0
- package/dist/server/http/broker-handlers.js.map +1 -0
- package/dist/server/http/{httpServer.d.ts → http-server.d.ts} +5 -13
- package/dist/server/http/http-server.d.ts.map +1 -0
- package/dist/server/http/{httpServer.js → http-server.js} +19 -53
- package/dist/server/http/http-server.js.map +1 -0
- package/dist/server/http/index.d.ts +1 -3
- package/dist/server/http/index.d.ts.map +1 -1
- package/dist/server/http/index.js +1 -3
- package/dist/server/http/index.js.map +1 -1
- package/dist/server/http/mcp-handlers.d.ts.map +1 -1
- package/dist/server/http/mcp-handlers.js +16 -3
- package/dist/server/http/mcp-handlers.js.map +1 -1
- package/dist/server/http/middleware.d.ts +3 -4
- package/dist/server/http/middleware.d.ts.map +1 -1
- package/dist/server/http/middleware.js +33 -23
- package/dist/server/http/middleware.js.map +1 -1
- package/dist/server/http/public-origin.d.ts +10 -0
- package/dist/server/http/public-origin.d.ts.map +1 -0
- package/dist/server/http/public-origin.js +19 -0
- package/dist/server/http/public-origin.js.map +1 -0
- package/dist/server/http/rate-limiter.d.ts +1 -1
- package/dist/server/http/rate-limiter.d.ts.map +1 -1
- package/dist/server/http/rate-limiter.js +11 -11
- package/dist/server/http/rate-limiter.js.map +1 -1
- package/dist/server/http-agent.d.ts +9 -0
- package/dist/server/http-agent.d.ts.map +1 -0
- package/dist/server/http-agent.js +35 -0
- package/dist/server/http-agent.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/keepalive.d.ts +26 -0
- package/dist/server/keepalive.d.ts.map +1 -0
- package/dist/server/keepalive.js +64 -0
- package/dist/server/keepalive.js.map +1 -0
- package/dist/server/mcp/creatio-rest.d.ts +6 -0
- package/dist/server/mcp/creatio-rest.d.ts.map +1 -1
- package/dist/server/mcp/creatio-rest.js +21 -3
- package/dist/server/mcp/creatio-rest.js.map +1 -1
- package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts +1 -1
- package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts.map +1 -1
- package/dist/server/mcp/crtmcp/crt-mcp-client.js +16 -13
- package/dist/server/mcp/crtmcp/crt-mcp-client.js.map +1 -1
- package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts +2 -2
- package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts.map +1 -1
- package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js +17 -17
- package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js.map +1 -1
- package/dist/server/mcp/dataforge/dataforge-client.d.ts +12 -12
- package/dist/server/mcp/dataforge/dataforge-client.d.ts.map +1 -1
- package/dist/server/mcp/dataforge/dataforge-client.js +40 -47
- package/dist/server/mcp/dataforge/dataforge-client.js.map +1 -1
- package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts +2 -2
- package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts.map +1 -1
- package/dist/server/mcp/dataforge/dataforge-tool-preparer.js +9 -9
- package/dist/server/mcp/dataforge/dataforge-tool-preparer.js.map +1 -1
- package/dist/server/mcp/filters.d.ts.map +1 -1
- package/dist/server/mcp/filters.js +4 -1
- package/dist/server/mcp/filters.js.map +1 -1
- package/dist/server/mcp/globalsearch/globalsearch-client.d.ts +4 -4
- package/dist/server/mcp/globalsearch/globalsearch-client.d.ts.map +1 -1
- package/dist/server/mcp/globalsearch/globalsearch-client.js +39 -50
- package/dist/server/mcp/globalsearch/globalsearch-client.js.map +1 -1
- package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts +1 -1
- package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts.map +1 -1
- package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js +1 -1
- package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js.map +1 -1
- package/dist/server/mcp/server.d.ts +35 -8
- package/dist/server/mcp/server.d.ts.map +1 -1
- package/dist/server/mcp/server.js +104 -44
- package/dist/server/mcp/server.js.map +1 -1
- package/dist/server/mcp/tools-data.d.ts +2 -2
- package/dist/server/mcp/tools-data.d.ts.map +1 -1
- package/dist/server/mcp/tools-data.js +1 -1
- package/dist/server/mcp/tools-data.js.map +1 -1
- package/dist/server/oauth/oauth-server.d.ts +41 -10
- package/dist/server/oauth/oauth-server.d.ts.map +1 -1
- package/dist/server/oauth/oauth-server.js +82 -48
- package/dist/server/oauth/oauth-server.js.map +1 -1
- package/dist/server/oauth/storage.d.ts +42 -5
- package/dist/server/oauth/storage.d.ts.map +1 -1
- package/dist/server/oauth/storage.js +81 -18
- package/dist/server/oauth/storage.js.map +1 -1
- package/dist/server/oauth/token-manager.d.ts +21 -4
- package/dist/server/oauth/token-manager.d.ts.map +1 -1
- package/dist/server/oauth/token-manager.js +18 -19
- package/dist/server/oauth/token-manager.js.map +1 -1
- package/dist/server/oauth/types.d.ts +0 -12
- package/dist/server/oauth/types.d.ts.map +1 -1
- package/dist/server/oauth/validators.d.ts.map +1 -1
- package/dist/server/oauth/validators.js +14 -5
- package/dist/server/oauth/validators.js.map +1 -1
- package/dist/sessions/index.d.ts +1 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +1 -1
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/redis-token-store.d.ts +22 -0
- package/dist/sessions/redis-token-store.d.ts.map +1 -0
- package/dist/sessions/redis-token-store.js +70 -0
- package/dist/sessions/redis-token-store.js.map +1 -0
- package/dist/sessions/session-context.d.ts +21 -40
- package/dist/sessions/session-context.d.ts.map +1 -1
- package/dist/sessions/session-context.js +25 -105
- package/dist/sessions/session-context.js.map +1 -1
- package/dist/sessions/token-crypto.d.ts +8 -0
- package/dist/sessions/token-crypto.d.ts.map +1 -0
- package/dist/sessions/token-crypto.js +43 -0
- package/dist/sessions/token-crypto.js.map +1 -0
- package/dist/sessions/token-store.d.ts +42 -0
- package/dist/sessions/token-store.d.ts.map +1 -0
- package/dist/sessions/token-store.js +66 -0
- package/dist/sessions/token-store.js.map +1 -0
- package/dist/utils/context.d.ts +12 -0
- package/dist/utils/context.d.ts.map +1 -1
- package/dist/utils/context.js +16 -0
- package/dist/utils/context.js.map +1 -1
- package/dist/utils/env-aliases.d.ts +9 -0
- package/dist/utils/env-aliases.d.ts.map +1 -0
- package/dist/utils/env-aliases.js +61 -0
- package/dist/utils/env-aliases.js.map +1 -0
- package/dist/utils/env.d.ts +5 -0
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +10 -1
- package/dist/utils/env.js.map +1 -1
- package/package.json +78 -76
- package/dist/creatio/auth/providers/oauth2-code-provider.d.ts +0 -21
- package/dist/creatio/auth/providers/oauth2-code-provider.d.ts.map +0 -1
- package/dist/creatio/auth/providers/oauth2-code-provider.js +0 -251
- package/dist/creatio/auth/providers/oauth2-code-provider.js.map +0 -1
- package/dist/server/http/creatio-oauth-handlers.d.ts +0 -13
- package/dist/server/http/creatio-oauth-handlers.d.ts.map +0 -1
- package/dist/server/http/creatio-oauth-handlers.js +0 -160
- package/dist/server/http/creatio-oauth-handlers.js.map +0 -1
- package/dist/server/http/httpServer.d.ts.map +0 -1
- package/dist/server/http/httpServer.js.map +0 -1
- package/dist/server/http/mcp-oauth-handlers.d.ts +0 -11
- package/dist/server/http/mcp-oauth-handlers.d.ts.map +0 -1
- package/dist/server/http/mcp-oauth-handlers.js +0 -118
- package/dist/server/http/mcp-oauth-handlers.js.map +0 -1
- package/dist/sessions/token-refresh-scheduler.d.ts +0 -16
- package/dist/sessions/token-refresh-scheduler.d.ts.map +0 -1
- package/dist/sessions/token-refresh-scheduler.js +0 -66
- package/dist/sessions/token-refresh-scheduler.js.map +0 -1
|
@@ -4,15 +4,41 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.HttpMiddleware = void 0;
|
|
7
|
+
exports.redactUrl = redactUrl;
|
|
7
8
|
const crypto_1 = require("crypto");
|
|
8
9
|
const log_1 = __importDefault(require("../../log"));
|
|
9
10
|
const utils_1 = require("../../utils");
|
|
10
11
|
const rate_limiter_1 = require("./rate-limiter");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
/** Single-use / credential query params that must never reach the logs (CWE-532) — the OAuth
|
|
13
|
+
* `/authorize` and `/oauth/callback` URLs carry `code`/`state`/verifier in the query string. */
|
|
14
|
+
const SENSITIVE_QUERY_PARAMS = new Set([
|
|
15
|
+
'code',
|
|
16
|
+
'state',
|
|
17
|
+
'token',
|
|
18
|
+
'access_token',
|
|
19
|
+
'refresh_token',
|
|
20
|
+
'id_token',
|
|
21
|
+
'code_verifier',
|
|
22
|
+
'client_secret',
|
|
23
|
+
]);
|
|
24
|
+
/** Redact sensitive query-string values from a URL before it is logged, preserving the path + the
|
|
25
|
+
* non-sensitive params (which are useful for debugging). Robust to relative URLs. */
|
|
26
|
+
function redactUrl(url) {
|
|
27
|
+
const qIndex = url.indexOf('?');
|
|
28
|
+
if (qIndex === -1) {
|
|
29
|
+
return url;
|
|
30
|
+
}
|
|
31
|
+
const path = url.slice(0, qIndex);
|
|
32
|
+
const params = new URLSearchParams(url.slice(qIndex + 1));
|
|
33
|
+
for (const key of params.keys()) {
|
|
34
|
+
if (SENSITIVE_QUERY_PARAMS.has(key.toLowerCase())) {
|
|
35
|
+
params.set(key, '***');
|
|
36
|
+
}
|
|
15
37
|
}
|
|
38
|
+
const query = params.toString();
|
|
39
|
+
return query ? `${path}?${query}` : path;
|
|
40
|
+
}
|
|
41
|
+
class HttpMiddleware {
|
|
16
42
|
/**
|
|
17
43
|
* Per-route fixed-window rate limit, keyed by the real connection IP (req.ip /
|
|
18
44
|
* socket address) rather than the spoofable X-Forwarded-For header, so an
|
|
@@ -35,23 +61,6 @@ class HttpMiddleware {
|
|
|
35
61
|
next();
|
|
36
62
|
};
|
|
37
63
|
}
|
|
38
|
-
bearerAuth() {
|
|
39
|
-
return (req, res, next) => {
|
|
40
|
-
const authHeader = req.headers.authorization;
|
|
41
|
-
if (authHeader && authHeader.startsWith('Bearer ')) {
|
|
42
|
-
const token = authHeader.slice(7);
|
|
43
|
-
const userKey = this._oauthServer.validateAccessToken(token);
|
|
44
|
-
if (userKey) {
|
|
45
|
-
req.userKey = userKey;
|
|
46
|
-
return next();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
res.status(401).json({
|
|
50
|
-
error: 'unauthorized',
|
|
51
|
-
error_description: 'Valid Bearer token required. Use OAuth 2.1 flow to obtain access token.',
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
64
|
errorHandler() {
|
|
56
65
|
return (error, req, res, next) => {
|
|
57
66
|
log_1.default.error('http.error', {
|
|
@@ -87,7 +96,8 @@ class HttpMiddleware {
|
|
|
87
96
|
const ip = (0, utils_1.getClientIp)(req);
|
|
88
97
|
const userAgent = req.headers['user-agent'];
|
|
89
98
|
const correlationId = req.correlationId;
|
|
90
|
-
|
|
99
|
+
const safeUrl = redactUrl(req.url);
|
|
100
|
+
log_1.default.httpRequest(req.method, safeUrl, {
|
|
91
101
|
ip,
|
|
92
102
|
userAgent,
|
|
93
103
|
correlationId,
|
|
@@ -96,7 +106,7 @@ class HttpMiddleware {
|
|
|
96
106
|
});
|
|
97
107
|
res.on('finish', () => {
|
|
98
108
|
const duration = Date.now() - startTime;
|
|
99
|
-
log_1.default.httpResponse(req.method,
|
|
109
|
+
log_1.default.httpResponse(req.method, safeUrl, res.statusCode, duration, {
|
|
100
110
|
ip,
|
|
101
111
|
correlationId,
|
|
102
112
|
contentLength: res.getHeader('content-length'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/server/http/middleware.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/server/http/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Request } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* The deployment's PUBLIC origin — what clients actually reach. Behind a TLS-terminating proxy /
|
|
4
|
+
* ingress, `req.protocol`/`req.get('host')` reflect the INTERNAL hop (e.g. `http://mcp:3000`), which
|
|
5
|
+
* would poison the broker's issuer/audience, redirect URIs, and discovery metadata. Set
|
|
6
|
+
* `CREATIO_MCP_PUBLIC_URL` (e.g. `https://mcp.example.com`) to pin the external origin; when unset we
|
|
7
|
+
* fall back to the request's own origin (correct for a direct/local deployment).
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolvePublicOrigin(req: Request): string;
|
|
10
|
+
//# sourceMappingURL=public-origin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-origin.d.ts","sourceRoot":"","sources":["../../../src/server/http/public-origin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAMxD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolvePublicOrigin = resolvePublicOrigin;
|
|
4
|
+
const utils_1 = require("../../utils");
|
|
5
|
+
/**
|
|
6
|
+
* The deployment's PUBLIC origin — what clients actually reach. Behind a TLS-terminating proxy /
|
|
7
|
+
* ingress, `req.protocol`/`req.get('host')` reflect the INTERNAL hop (e.g. `http://mcp:3000`), which
|
|
8
|
+
* would poison the broker's issuer/audience, redirect URIs, and discovery metadata. Set
|
|
9
|
+
* `CREATIO_MCP_PUBLIC_URL` (e.g. `https://mcp.example.com`) to pin the external origin; when unset we
|
|
10
|
+
* fall back to the request's own origin (correct for a direct/local deployment).
|
|
11
|
+
*/
|
|
12
|
+
function resolvePublicOrigin(req) {
|
|
13
|
+
const configured = (0, utils_1.env)('CREATIO_MCP_PUBLIC_URL');
|
|
14
|
+
if (configured) {
|
|
15
|
+
return configured.replace(/\/+$/, '');
|
|
16
|
+
}
|
|
17
|
+
return `${req.protocol}://${req.get('host')}`;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=public-origin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-origin.js","sourceRoot":"","sources":["../../../src/server/http/public-origin.ts"],"names":[],"mappings":";;AAWA,kDAMC;AAjBD,uCAAkC;AAIlC;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,GAAY;IAC/C,MAAM,UAAU,GAAG,IAAA,WAAG,EAAC,wBAAwB,CAAC,CAAC;IACjD,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -18,7 +18,7 @@ export declare class RateLimiter {
|
|
|
18
18
|
private readonly _options;
|
|
19
19
|
private _lastSweepAt;
|
|
20
20
|
constructor(options: RateLimitOptions);
|
|
21
|
-
check(key: string, now: number): RateLimitResult;
|
|
22
21
|
private _maybeSweep;
|
|
22
|
+
check(key: string, now: number): RateLimitResult;
|
|
23
23
|
}
|
|
24
24
|
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../src/server/http/rate-limiter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACrB;AAOD;;;;GAIG;AACH,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,YAAY,CAAK;gBAEb,OAAO,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../src/server/http/rate-limiter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACrB;AAOD;;;;GAIG;AACH,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,YAAY,CAAK;gBAEb,OAAO,EAAE,gBAAgB;IAIrC,OAAO,CAAC,WAAW;IAYZ,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe;CAavD"}
|
|
@@ -13,6 +13,17 @@ class RateLimiter {
|
|
|
13
13
|
constructor(options) {
|
|
14
14
|
this._options = options;
|
|
15
15
|
}
|
|
16
|
+
_maybeSweep(now) {
|
|
17
|
+
if (now - this._lastSweepAt < this._options.windowMs) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
this._lastSweepAt = now;
|
|
21
|
+
for (const [key, bucket] of this._buckets.entries()) {
|
|
22
|
+
if (now >= bucket.resetAt) {
|
|
23
|
+
this._buckets.delete(key);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
16
27
|
check(key, now) {
|
|
17
28
|
this._maybeSweep(now);
|
|
18
29
|
const bucket = this._buckets.get(key);
|
|
@@ -26,17 +37,6 @@ class RateLimiter {
|
|
|
26
37
|
bucket.count++;
|
|
27
38
|
return { allowed: true, retryAfterMs: 0 };
|
|
28
39
|
}
|
|
29
|
-
_maybeSweep(now) {
|
|
30
|
-
if (now - this._lastSweepAt < this._options.windowMs) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
this._lastSweepAt = now;
|
|
34
|
-
for (const [key, bucket] of this._buckets.entries()) {
|
|
35
|
-
if (now >= bucket.resetAt) {
|
|
36
|
-
this._buckets.delete(key);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
40
|
}
|
|
41
41
|
exports.RateLimiter = RateLimiter;
|
|
42
42
|
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/server/http/rate-limiter.ts"],"names":[],"mappings":";;;AAiBA;;;;GAIG;AACH,MAAa,WAAW;IACN,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,QAAQ,CAAmB;IACpC,YAAY,GAAG,CAAC,CAAC;IAEzB,YAAY,OAAyB;QACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,GAAW,EAAE,GAAW;QACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAC3C,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;QAC/D,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC3C,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/server/http/rate-limiter.ts"],"names":[],"mappings":";;;AAiBA;;;;GAIG;AACH,MAAa,WAAW;IACN,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,QAAQ,CAAmB;IACpC,YAAY,GAAG,CAAC,CAAC;IAEzB,YAAY,OAAyB;QACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,GAAW;QAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtD,OAAO;QACR,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACF,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,GAAW,EAAE,GAAW;QACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAC3C,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;QAC/D,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC3C,CAAC;CACD;AAlCD,kCAkCC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tune the global undici dispatcher behind Node's `fetch` — every outbound Creatio call goes through
|
|
3
|
+
* it. Node's default keep-alive timeout is short, so bursty MCP tool calls to a remote Creatio keep
|
|
4
|
+
* paying a fresh TLS+TCP handshake; a longer keep-alive plus a real per-origin connection pool reuses
|
|
5
|
+
* warm sockets and roughly halves cold-call latency. Idempotent and best-effort: any failure just
|
|
6
|
+
* leaves Node's default dispatcher in place (correctness is unaffected, only latency).
|
|
7
|
+
*/
|
|
8
|
+
export declare function installHttpAgent(): void;
|
|
9
|
+
//# sourceMappingURL=http-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-agent.d.ts","sourceRoot":"","sources":["../../src/server/http-agent.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAkBvC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
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.installHttpAgent = installHttpAgent;
|
|
7
|
+
const undici_1 = require("undici");
|
|
8
|
+
const log_1 = __importDefault(require("../log"));
|
|
9
|
+
let _installed = false;
|
|
10
|
+
/**
|
|
11
|
+
* Tune the global undici dispatcher behind Node's `fetch` — every outbound Creatio call goes through
|
|
12
|
+
* it. Node's default keep-alive timeout is short, so bursty MCP tool calls to a remote Creatio keep
|
|
13
|
+
* paying a fresh TLS+TCP handshake; a longer keep-alive plus a real per-origin connection pool reuses
|
|
14
|
+
* warm sockets and roughly halves cold-call latency. Idempotent and best-effort: any failure just
|
|
15
|
+
* leaves Node's default dispatcher in place (correctness is unaffected, only latency).
|
|
16
|
+
*/
|
|
17
|
+
function installHttpAgent() {
|
|
18
|
+
if (_installed) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
_installed = true;
|
|
22
|
+
try {
|
|
23
|
+
(0, undici_1.setGlobalDispatcher)(new undici_1.Agent({
|
|
24
|
+
keepAliveTimeout: 30_000, // keep idle sockets ~30s across gaps between tool calls
|
|
25
|
+
keepAliveMaxTimeout: 600_000,
|
|
26
|
+
connections: 64, // per-origin pool (fine for one Creatio or per-tenant in gateway mode)
|
|
27
|
+
pipelining: 1,
|
|
28
|
+
}));
|
|
29
|
+
log_1.default.info('http.dispatcher.tuned', { keepAliveTimeoutMs: 30_000, connections: 64 });
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
log_1.default.warn('http.dispatcher.tune_failed', { error: String(err) });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=http-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-agent.js","sourceRoot":"","sources":["../../src/server/http-agent.ts"],"names":[],"mappings":";;;;;AAaA,4CAkBC;AA/BD,mCAAoD;AAEpD,iDAAyB;AAEzB,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB;;;;;;GAMG;AACH,SAAgB,gBAAgB;IAC/B,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO;IACR,CAAC;IACD,UAAU,GAAG,IAAI,CAAC;IAClB,IAAI,CAAC;QACJ,IAAA,4BAAmB,EAClB,IAAI,cAAK,CAAC;YACT,gBAAgB,EAAE,MAAM,EAAE,wDAAwD;YAClF,mBAAmB,EAAE,OAAO;YAC5B,WAAW,EAAE,EAAE,EAAE,uEAAuE;YACxF,UAAU,EAAE,CAAC;SACb,CAAC,CACF,CAAC;QACF,aAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,aAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;AACF,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -15,5 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./http"), exports);
|
|
18
|
+
__exportStar(require("./http-agent"), exports);
|
|
19
|
+
__exportStar(require("./keepalive"), exports);
|
|
18
20
|
__exportStar(require("./mcp"), exports);
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,wCAAsB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,+CAA6B;AAC7B,8CAA4B;AAC5B,wCAAsB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in proactive session keep-alive for the SINGLE-SESSION auth modes (`legacy` / `client_credentials`).
|
|
3
|
+
*
|
|
4
|
+
* A Creatio forms (cookie) session is auto-logged-out after an idle period, so a long-idle MCP pays a
|
|
5
|
+
* re-login round-trip on the next call. Reactive reconnect (the HTTP client's 401 / login-bounce
|
|
6
|
+
* retry) already keeps things CORRECT; this only removes that first-call latency by issuing a cheap
|
|
7
|
+
* authenticated "pseudo-activity" request on an interval to reset the server-side idle timer.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately NOT used for `broker`/`delegated`/`gateway`: those are per-user / per-request and have
|
|
10
|
+
* no single shared session to keep warm (broker refreshes per-user on demand instead).
|
|
11
|
+
*/
|
|
12
|
+
export declare class SessionKeepAlive {
|
|
13
|
+
private readonly _intervalMs;
|
|
14
|
+
private readonly _ping;
|
|
15
|
+
private _timer;
|
|
16
|
+
constructor(_intervalMs: number, _ping: () => Promise<unknown>);
|
|
17
|
+
start(): void;
|
|
18
|
+
stop(): void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Keep-alive interval in ms from `CREATIO_MCP_KEEPALIVE_SECONDS`. Unset ⇒ the 5-min default;
|
|
22
|
+
* an explicit `0` (or any non-positive / invalid value) disables it. Only consulted for the
|
|
23
|
+
* single-session modes (legacy / client_credentials).
|
|
24
|
+
*/
|
|
25
|
+
export declare function keepAliveIntervalMs(): number;
|
|
26
|
+
//# sourceMappingURL=keepalive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keepalive.d.ts","sourceRoot":"","sources":["../../src/server/keepalive.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAI3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJvB,OAAO,CAAC,MAAM,CAA6B;gBAGzB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC;IAGxC,KAAK,IAAI,IAAI;IAcb,IAAI,IAAI,IAAI;CAMnB;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAO5C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
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.SessionKeepAlive = void 0;
|
|
7
|
+
exports.keepAliveIntervalMs = keepAliveIntervalMs;
|
|
8
|
+
const log_1 = __importDefault(require("../log"));
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
/**
|
|
11
|
+
* Opt-in proactive session keep-alive for the SINGLE-SESSION auth modes (`legacy` / `client_credentials`).
|
|
12
|
+
*
|
|
13
|
+
* A Creatio forms (cookie) session is auto-logged-out after an idle period, so a long-idle MCP pays a
|
|
14
|
+
* re-login round-trip on the next call. Reactive reconnect (the HTTP client's 401 / login-bounce
|
|
15
|
+
* retry) already keeps things CORRECT; this only removes that first-call latency by issuing a cheap
|
|
16
|
+
* authenticated "pseudo-activity" request on an interval to reset the server-side idle timer.
|
|
17
|
+
*
|
|
18
|
+
* Deliberately NOT used for `broker`/`delegated`/`gateway`: those are per-user / per-request and have
|
|
19
|
+
* no single shared session to keep warm (broker refreshes per-user on demand instead).
|
|
20
|
+
*/
|
|
21
|
+
class SessionKeepAlive {
|
|
22
|
+
_intervalMs;
|
|
23
|
+
_ping;
|
|
24
|
+
_timer;
|
|
25
|
+
constructor(_intervalMs, _ping) {
|
|
26
|
+
this._intervalMs = _intervalMs;
|
|
27
|
+
this._ping = _ping;
|
|
28
|
+
}
|
|
29
|
+
start() {
|
|
30
|
+
if (this._intervalMs <= 0 || this._timer) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this._timer = setInterval(() => {
|
|
34
|
+
void this._ping().catch((err) => log_1.default.warn('keepalive.ping.failed', { error: String(err) }));
|
|
35
|
+
}, this._intervalMs);
|
|
36
|
+
// Never hold the event loop open just for the keep-alive.
|
|
37
|
+
this._timer.unref();
|
|
38
|
+
log_1.default.info('keepalive.start', { intervalMs: this._intervalMs });
|
|
39
|
+
}
|
|
40
|
+
stop() {
|
|
41
|
+
if (this._timer) {
|
|
42
|
+
clearInterval(this._timer);
|
|
43
|
+
this._timer = undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.SessionKeepAlive = SessionKeepAlive;
|
|
48
|
+
/** Default keep-alive cadence — 5 min, comfortably below Creatio's idle-session timeout
|
|
49
|
+
* (commonly 20–30 min) so a long-idle single-session deployment never pays a re-login. */
|
|
50
|
+
const DEFAULT_KEEPALIVE_SECONDS = 300;
|
|
51
|
+
/**
|
|
52
|
+
* Keep-alive interval in ms from `CREATIO_MCP_KEEPALIVE_SECONDS`. Unset ⇒ the 5-min default;
|
|
53
|
+
* an explicit `0` (or any non-positive / invalid value) disables it. Only consulted for the
|
|
54
|
+
* single-session modes (legacy / client_credentials).
|
|
55
|
+
*/
|
|
56
|
+
function keepAliveIntervalMs() {
|
|
57
|
+
const rawEnv = (0, utils_1.env)('CREATIO_MCP_KEEPALIVE_SECONDS');
|
|
58
|
+
if (rawEnv === undefined || rawEnv === '') {
|
|
59
|
+
return DEFAULT_KEEPALIVE_SECONDS * 1000;
|
|
60
|
+
}
|
|
61
|
+
const raw = Number(rawEnv);
|
|
62
|
+
return Number.isFinite(raw) && raw > 0 ? Math.floor(raw) * 1000 : 0;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=keepalive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keepalive.js","sourceRoot":"","sources":["../../src/server/keepalive.ts"],"names":[],"mappings":";;;;;;AAqDA,kDAOC;AA5DD,iDAAyB;AACzB,oCAA+B;AAE/B;;;;;;;;;;GAUG;AACH,MAAa,gBAAgB;IAIV;IACA;IAJV,MAAM,CAA6B;IAE3C,YACkB,WAAmB,EACnB,KAA6B;QAD7B,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAwB;IAC5C,CAAC;IAEG,KAAK;QACX,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;YAC9B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAC/B,aAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CACzD,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrB,0DAA0D;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,aAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,CAAC;IAEM,IAAI;QACV,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACzB,CAAC;IACF,CAAC;CACD;AA5BD,4CA4BC;AAED;2FAC2F;AAC3F,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC;;;;GAIG;AACH,SAAgB,mBAAmB;IAClC,MAAM,MAAM,GAAG,IAAA,WAAG,EAAC,+BAA+B,CAAC,CAAC;IACpD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,yBAAyB,GAAG,IAAI,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -41,4 +41,10 @@ export declare function getSettingValue(response: {
|
|
|
41
41
|
export declare function hasNonEmptySetting(response: {
|
|
42
42
|
values?: Record<string, unknown>;
|
|
43
43
|
} | undefined, code: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Probe whether an optional capability is configured by checking a system setting holds a non-empty
|
|
46
|
+
* value (the cheap operator-facing signal both DataForge and Global Search use). Any probe failure
|
|
47
|
+
* degrades to `false` so callers stay graceful. `logLabel` namespaces the warning (e.g. `dataforge`).
|
|
48
|
+
*/
|
|
49
|
+
export declare function probeSettingEnabled(sysSettings: SysSettingReader, settingCode: string, logLabel: string): Promise<boolean>;
|
|
44
50
|
//# sourceMappingURL=creatio-rest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creatio-rest.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/creatio-rest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"creatio-rest.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/creatio-rest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAElF,MAAM,WAAW,wBAAwB;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;2FACuF;IACvF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACd;AAED,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC1E;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAChC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,QAAQ,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,SAAS,EAC1D,IAAI,EAAE,MAAM,GACV,OAAO,CAGT;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,SAAS,EAC1D,IAAI,EAAE,MAAM,GACV,OAAO,CAGT;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACxC,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAQlB"}
|
|
@@ -4,9 +4,14 @@
|
|
|
4
4
|
* reading system settings. Capability clients (DataForge, Global Search, …) depend
|
|
5
5
|
* on these interfaces rather than the concrete engines (Dependency Inversion).
|
|
6
6
|
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
7
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
11
|
exports.getSettingValue = getSettingValue;
|
|
9
12
|
exports.hasNonEmptySetting = hasNonEmptySetting;
|
|
13
|
+
exports.probeSettingEnabled = probeSettingEnabled;
|
|
14
|
+
const log_1 = __importDefault(require("../../log"));
|
|
10
15
|
/**
|
|
11
16
|
* Extract a system setting's value from a QuerySysSettings response. Creatio
|
|
12
17
|
* returns each setting as an object `{ code, value, ... }`; a bare value is also
|
|
@@ -14,13 +19,26 @@ exports.hasNonEmptySetting = hasNonEmptySetting;
|
|
|
14
19
|
*/
|
|
15
20
|
function getSettingValue(response, code) {
|
|
16
21
|
const entry = response?.values?.[code];
|
|
17
|
-
return entry && typeof entry === 'object'
|
|
18
|
-
? entry.value
|
|
19
|
-
: entry;
|
|
22
|
+
return entry && typeof entry === 'object' ? entry.value : entry;
|
|
20
23
|
}
|
|
21
24
|
/** True when the named setting holds a non-empty string value. */
|
|
22
25
|
function hasNonEmptySetting(response, code) {
|
|
23
26
|
const value = getSettingValue(response, code);
|
|
24
27
|
return typeof value === 'string' && value.trim().length > 0;
|
|
25
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Probe whether an optional capability is configured by checking a system setting holds a non-empty
|
|
31
|
+
* value (the cheap operator-facing signal both DataForge and Global Search use). Any probe failure
|
|
32
|
+
* degrades to `false` so callers stay graceful. `logLabel` namespaces the warning (e.g. `dataforge`).
|
|
33
|
+
*/
|
|
34
|
+
async function probeSettingEnabled(sysSettings, settingCode, logLabel) {
|
|
35
|
+
try {
|
|
36
|
+
const response = await sysSettings.queryValues([settingCode]);
|
|
37
|
+
return hasNonEmptySetting(response, settingCode);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
log_1.default.warn(`${logLabel}.probe.failed`, { error: String(err) });
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
26
44
|
//# sourceMappingURL=creatio-rest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creatio-rest.js","sourceRoot":"","sources":["../../../src/server/mcp/creatio-rest.ts"],"names":[],"mappings":";AAAA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"creatio-rest.js","sourceRoot":"","sources":["../../../src/server/mcp/creatio-rest.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AAsCH,0CAMC;AAGD,gDAMC;AAOD,kDAYC;AAtED,oDAA4B;AA+B5B;;;;GAIG;AACH,SAAgB,eAAe,CAC9B,QAA0D,EAC1D,IAAY;IAEZ,MAAM,KAAK,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F,CAAC;AAED,kEAAkE;AAClE,SAAgB,kBAAkB,CACjC,QAA0D,EAC1D,IAAY;IAEZ,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CACxC,WAA6B,EAC7B,WAAmB,EACnB,QAAgB;IAEhB,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9D,OAAO,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,aAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC"}
|
|
@@ -35,6 +35,7 @@ export declare class CrtMcpPublishingClient {
|
|
|
35
35
|
private readonly _configuration;
|
|
36
36
|
private readonly _crud;
|
|
37
37
|
constructor(configuration: ConfigurationCaller, crud: EntityReader);
|
|
38
|
+
private _rpc;
|
|
38
39
|
/** Whether the publishing app is installed on this environment (its `McpServer` entity exists). */
|
|
39
40
|
isInstalled(): Promise<boolean>;
|
|
40
41
|
/** Online published servers (the app filters offline ones out of routing anyway). */
|
|
@@ -47,6 +48,5 @@ export declare class CrtMcpPublishingClient {
|
|
|
47
48
|
* caller unchanged.
|
|
48
49
|
*/
|
|
49
50
|
callTool(serverCode: string, name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
50
|
-
private _rpc;
|
|
51
51
|
}
|
|
52
52
|
//# sourceMappingURL=crt-mcp-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crt-mcp-client.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAChF;AAID,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,aAAa,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"crt-mcp-client.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAChF;AAID,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,aAAa,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY;YAKpD,IAAI;IAkBlB,mGAAmG;IACtF,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU5C,qFAAqF;IACxE,iBAAiB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAe5D,kEAAkE;IACrD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAMpE;;;;OAIG;IACI,QAAQ,CACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC;CAGnB"}
|
|
@@ -13,6 +13,18 @@ class CrtMcpPublishingClient {
|
|
|
13
13
|
this._configuration = configuration;
|
|
14
14
|
this._crud = crud;
|
|
15
15
|
}
|
|
16
|
+
async _rpc(serverCode, method, params) {
|
|
17
|
+
const response = await this._configuration.call({
|
|
18
|
+
rawPath: `/0/rest/ToolServiceMcp/${encodeURIComponent(serverCode)}/v1/mcp`,
|
|
19
|
+
httpMethod: 'POST',
|
|
20
|
+
body: { jsonrpc: '2.0', id: 1, method, params },
|
|
21
|
+
});
|
|
22
|
+
const body = response.body;
|
|
23
|
+
if (body && body.error) {
|
|
24
|
+
throw new Error(`crtmcp_rpc_error:${method}:${body.error.code ?? ''} ${body.error.message ?? ''}`.trim());
|
|
25
|
+
}
|
|
26
|
+
return body?.result;
|
|
27
|
+
}
|
|
16
28
|
/** Whether the publishing app is installed on this environment (its `McpServer` entity exists). */
|
|
17
29
|
async isInstalled() {
|
|
18
30
|
try {
|
|
@@ -34,7 +46,10 @@ class CrtMcpPublishingClient {
|
|
|
34
46
|
const list = Array.isArray(items) ? items : [];
|
|
35
47
|
return list
|
|
36
48
|
.filter((r) => r?.IsOnline === true && typeof r.Code === 'string' && r.Code.length > 0)
|
|
37
|
-
.map((r) => ({
|
|
49
|
+
.map((r) => ({
|
|
50
|
+
code: r.Code,
|
|
51
|
+
title: r.Name ?? r.Code,
|
|
52
|
+
}));
|
|
38
53
|
}
|
|
39
54
|
/** Tool definitions advertised by a server's MCP `tools/list`. */
|
|
40
55
|
async listTools(serverCode) {
|
|
@@ -50,18 +65,6 @@ class CrtMcpPublishingClient {
|
|
|
50
65
|
callTool(serverCode, name, args) {
|
|
51
66
|
return this._rpc(serverCode, 'tools/call', { name, arguments: args ?? {} });
|
|
52
67
|
}
|
|
53
|
-
async _rpc(serverCode, method, params) {
|
|
54
|
-
const response = await this._configuration.call({
|
|
55
|
-
rawPath: `/0/rest/ToolServiceMcp/${encodeURIComponent(serverCode)}/v1/mcp`,
|
|
56
|
-
httpMethod: 'POST',
|
|
57
|
-
body: { jsonrpc: '2.0', id: 1, method, params },
|
|
58
|
-
});
|
|
59
|
-
const body = response.body;
|
|
60
|
-
if (body && body.error) {
|
|
61
|
-
throw new Error(`crtmcp_rpc_error:${method}:${body.error.code ?? ''} ${body.error.message ?? ''}`.trim());
|
|
62
|
-
}
|
|
63
|
-
return body?.result;
|
|
64
|
-
}
|
|
65
68
|
}
|
|
66
69
|
exports.CrtMcpPublishingClient = CrtMcpPublishingClient;
|
|
67
70
|
//# sourceMappingURL=crt-mcp-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crt-mcp-client.js","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-client.ts"],"names":[],"mappings":";;;;;;AACA,uDAA+B;AAsC/B,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC,MAAa,sBAAsB;IACjB,cAAc,CAAsB;IACpC,KAAK,CAAe;IAErC,YAAY,aAAkC,EAAE,IAAkB;QACjE,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,mGAAmG;IAC5F,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,aAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,qFAAqF;IAC9E,KAAK,CAAC,iBAAiB;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACvC,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;YAC3C,GAAG,EAAE,GAAG;SACR,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAwC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO,IAAI;aACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACtF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"crt-mcp-client.js","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,12 +9,12 @@ export declare const PUBLISHED_TOOLS_CAPABILITY = "published-tools";
|
|
|
9
9
|
* JSON-RPC endpoint, so the app keeps ownership of validation/RBAC/execution.
|
|
10
10
|
*/
|
|
11
11
|
export declare class CrtMcpPublishingToolPreparer implements ToolPreparer {
|
|
12
|
-
readonly name = "published-tools";
|
|
13
12
|
private readonly _client;
|
|
14
13
|
private readonly _enabled;
|
|
14
|
+
readonly name = "published-tools";
|
|
15
15
|
constructor(client: CrtMcpPublishingClient, enabled: boolean);
|
|
16
|
-
prepare(registrar: ToolRegistrar): Promise<boolean>;
|
|
17
16
|
private _registerTool;
|
|
18
17
|
private _toolName;
|
|
18
|
+
prepare(registrar: ToolRegistrar): Promise<boolean>;
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=crt-mcp-tool-preparer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crt-mcp-tool-preparer.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-tool-preparer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAiB,MAAM,kBAAkB,CAAC;AAEzE,6BAA6B;AAC7B,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAI5D;;;;;GAKG;AACH,qBAAa,4BAA6B,YAAW,YAAY;IAChE,
|
|
1
|
+
{"version":3,"file":"crt-mcp-tool-preparer.d.ts","sourceRoot":"","sources":["../../../../src/server/mcp/crtmcp/crt-mcp-tool-preparer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAiB,MAAM,kBAAkB,CAAC;AAEzE,6BAA6B;AAC7B,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAI5D;;;;;GAKG;AACH,qBAAa,4BAA6B,YAAW,YAAY;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IAEnC,SAAgB,IAAI,qBAA8B;gBAEtC,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO;IAK5D,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,SAAS;IAKJ,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CA6BhE"}
|