mcp-creatio 0.6.3 → 0.6.5
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 +65 -0
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/creatio/engines/engine-manager.d.ts +3 -0
- package/dist/creatio/engines/engine-manager.d.ts.map +1 -1
- package/dist/creatio/engines/engine-manager.js +5 -0
- package/dist/creatio/engines/engine-manager.js.map +1 -1
- package/dist/creatio/provider-context.d.ts +3 -0
- package/dist/creatio/provider-context.d.ts.map +1 -1
- package/dist/creatio/services/client-cache-hash-client.d.ts +22 -0
- package/dist/creatio/services/client-cache-hash-client.d.ts.map +1 -0
- package/dist/creatio/services/client-cache-hash-client.js +56 -0
- package/dist/creatio/services/client-cache-hash-client.js.map +1 -0
- package/dist/creatio/services/creatio-service-context.d.ts +5 -0
- package/dist/creatio/services/creatio-service-context.d.ts.map +1 -1
- package/dist/creatio/services/creatio-service-context.js +15 -1
- package/dist/creatio/services/creatio-service-context.js.map +1 -1
- package/dist/creatio/services/crud-provider-factory.d.ts +4 -0
- package/dist/creatio/services/crud-provider-factory.d.ts.map +1 -1
- package/dist/creatio/services/crud-provider-factory.js +1 -1
- package/dist/creatio/services/crud-provider-factory.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts +2 -0
- package/dist/creatio/services/dataservice/data-service-crud-provider.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-crud-provider.js +3 -1
- package/dist/creatio/services/dataservice/data-service-crud-provider.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-schema.d.ts +3 -1
- package/dist/creatio/services/dataservice/data-service-schema.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-schema.js +13 -4
- package/dist/creatio/services/dataservice/data-service-schema.js.map +1 -1
- package/dist/creatio/services/dataservice/data-service-transport.d.ts +3 -0
- package/dist/creatio/services/dataservice/data-service-transport.d.ts.map +1 -1
- package/dist/creatio/services/dataservice/data-service-transport.js +5 -0
- package/dist/creatio/services/dataservice/data-service-transport.js.map +1 -1
- package/dist/creatio/services/index.d.ts +2 -0
- package/dist/creatio/services/index.d.ts.map +1 -1
- package/dist/creatio/services/index.js +2 -0
- package/dist/creatio/services/index.js.map +1 -1
- package/dist/creatio/services/odata/metadata-store.d.ts +10 -1
- package/dist/creatio/services/odata/metadata-store.d.ts.map +1 -1
- package/dist/creatio/services/odata/metadata-store.js +35 -4
- package/dist/creatio/services/odata/metadata-store.js.map +1 -1
- package/dist/creatio/services/schema-freshness-gate.d.ts +26 -0
- package/dist/creatio/services/schema-freshness-gate.d.ts.map +1 -0
- package/dist/creatio/services/schema-freshness-gate.js +58 -0
- package/dist/creatio/services/schema-freshness-gate.js.map +1 -0
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +4 -1
- package/dist/log.js.map +1 -1
- package/dist/server/http/mcp-handlers.d.ts.map +1 -1
- package/dist/server/http/mcp-handlers.js +8 -6
- package/dist/server/http/mcp-handlers.js.map +1 -1
- package/dist/server/mcp/server.d.ts +37 -28
- package/dist/server/mcp/server.d.ts.map +1 -1
- package/dist/server/mcp/server.js +106 -75
- package/dist/server/mcp/server.js.map +1 -1
- package/dist/server/mcp/tenant-tool-registry.d.ts +66 -0
- package/dist/server/mcp/tenant-tool-registry.d.ts.map +1 -0
- package/dist/server/mcp/tenant-tool-registry.js +113 -0
- package/dist/server/mcp/tenant-tool-registry.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/redact.d.ts +25 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +64 -0
- package/dist/utils/redact.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-service-transport.js","sourceRoot":"","sources":["../../../../src/creatio/services/dataservice/data-service-transport.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,MAAa,oBAAoB;IACf,OAAO,CAAoB;IAE5C,YAAY,MAAyB;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,cAAc,CAAC,SAAiB,EAAE,IAAS;QAClD,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;YACrC,MAAM,OAAO,GACZ,EAAE,CAAC,OAAO;gBACV,EAAE,CAAC,OAAO;gBACV,IAAI,CAAC,SAAS,EAAE,OAAO;gBACvB,IAAI,CAAC,SAAS,EAAE,OAAO;gBACvB,eAAe,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,UAAU,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACF,CAAC;IAEM,QAAQ,CAAC,SAAiB;QAChC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,iCAAiC,SAAS,EAAE,CAAC;IACtF,CAAC;IAEM,KAAK,CAAC,IAAI,CAChB,SAAiB,EACjB,OAAgB,EAChB,OAAyE,EAAE;QAE3E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAC1B,eAAe,SAAS,EAAE,EAC1B,GAAG,EACH,KAAK,IAAI,EAAE;YACV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC,EACD,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,UAAU,CACtB,eAAe,SAAS,EAAE,EAC1B,QAAQ,CAAC,MAAM,EACf,QAAQ,EACR,UAAU,CACV,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC,EACD,EAAE,WAAW,EAAE,uBAAuB,SAAS,SAAS,EAAE,UAAU,EAAE,CACtE,CAAC;IACH,CAAC;CACD;
|
|
1
|
+
{"version":3,"file":"data-service-transport.js","sourceRoot":"","sources":["../../../../src/creatio/services/dataservice/data-service-transport.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,MAAa,oBAAoB;IACf,OAAO,CAAoB;IAE5C,YAAY,MAAyB;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,cAAc,CAAC,SAAiB,EAAE,IAAS;QAClD,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;YACrC,MAAM,OAAO,GACZ,EAAE,CAAC,OAAO;gBACV,EAAE,CAAC,OAAO;gBACV,IAAI,CAAC,SAAS,EAAE,OAAO;gBACvB,IAAI,CAAC,SAAS,EAAE,OAAO;gBACvB,eAAe,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,UAAU,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACF,CAAC;IAED;gDAC4C;IAC5C,IAAW,OAAO;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACvC,CAAC;IAEM,QAAQ,CAAC,SAAiB;QAChC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,iCAAiC,SAAS,EAAE,CAAC;IACtF,CAAC;IAEM,KAAK,CAAC,IAAI,CAChB,SAAiB,EACjB,OAAgB,EAChB,OAAyE,EAAE;QAE3E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAC1B,eAAe,SAAS,EAAE,EAC1B,GAAG,EACH,KAAK,IAAI,EAAE;YACV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC,EACD,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,UAAU,CACtB,eAAe,SAAS,EAAE,EAC1B,QAAQ,CAAC,MAAM,EACf,QAAQ,EACR,UAAU,CACV,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC,EACD,EAAE,WAAW,EAAE,uBAAuB,SAAS,SAAS,EAAE,UAAU,EAAE,CACtE,CAAC;IACH,CAAC;CACD;AA5DD,oDA4DC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export * from './admin-operation-service-provider';
|
|
2
|
+
export * from './client-cache-hash-client';
|
|
2
3
|
export * from './configuration-service-provider';
|
|
3
4
|
export * from './creatio-service-context';
|
|
4
5
|
export * from './crud-provider-factory';
|
|
6
|
+
export * from './schema-freshness-gate';
|
|
5
7
|
export * from './entity-name';
|
|
6
8
|
export * from './lookup-path';
|
|
7
9
|
export * from './dataservice/data-service-types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/creatio/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0CAA0C,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/creatio/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0CAA0C,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC"}
|
|
@@ -15,9 +15,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./admin-operation-service-provider"), exports);
|
|
18
|
+
__exportStar(require("./client-cache-hash-client"), exports);
|
|
18
19
|
__exportStar(require("./configuration-service-provider"), exports);
|
|
19
20
|
__exportStar(require("./creatio-service-context"), exports);
|
|
20
21
|
__exportStar(require("./crud-provider-factory"), exports);
|
|
22
|
+
__exportStar(require("./schema-freshness-gate"), exports);
|
|
21
23
|
__exportStar(require("./entity-name"), exports);
|
|
22
24
|
__exportStar(require("./lookup-path"), exports);
|
|
23
25
|
__exportStar(require("./dataservice/data-service-types"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/creatio/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qEAAmD;AACnD,mEAAiD;AACjD,4DAA0C;AAC1C,0DAAwC;AACxC,gDAA8B;AAC9B,gDAA8B;AAC9B,mEAAiD;AACjD,wEAAsD;AACtD,2EAAyD;AACzD,+EAA6D;AAC7D,2EAAyD;AACzD,uEAAqD;AACrD,oEAAkD;AAClD,2EAAyD;AACzD,6DAA2C;AAC3C,gDAA8B;AAC9B,yDAAuC;AACvC,8DAA4C;AAC5C,iEAA+C;AAC/C,6DAA2C;AAC3C,kEAAgD;AAChD,uDAAqC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/creatio/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qEAAmD;AACnD,6DAA2C;AAC3C,mEAAiD;AACjD,4DAA0C;AAC1C,0DAAwC;AACxC,0DAAwC;AACxC,gDAA8B;AAC9B,gDAA8B;AAC9B,mEAAiD;AACjD,wEAAsD;AACtD,2EAAyD;AACzD,+EAA6D;AAC7D,2EAAyD;AACzD,uEAAqD;AACrD,oEAAkD;AAClD,2EAAyD;AACzD,6DAA2C;AAC3C,gDAA8B;AAC9B,yDAAuC;AACvC,8DAA4C;AAC5C,iEAA+C;AAC/C,6DAA2C;AAC3C,kEAAgD;AAChD,uDAAqC"}
|
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
import { EntitySchemaDescription } from '../../contracts';
|
|
2
2
|
import { CreatioHttpClient } from '../http-client';
|
|
3
|
+
import { SchemaFreshnessGate } from '../schema-freshness-gate';
|
|
3
4
|
export declare class ODataMetadataStore {
|
|
4
5
|
private static readonly METADATA_TTL_MS;
|
|
5
6
|
private readonly _client;
|
|
7
|
+
private readonly _freshness;
|
|
6
8
|
private _metadataXml?;
|
|
7
9
|
private _metadataParsed?;
|
|
8
10
|
private _metadataFetchedAt;
|
|
9
11
|
private _entitySetsCache?;
|
|
10
12
|
private _entitySetsFetchedAt;
|
|
13
|
+
private _metadataBaseUrl?;
|
|
14
|
+
private _metadataVersion?;
|
|
15
|
+
private _entitySetsBaseUrl?;
|
|
16
|
+
private _entitySetsVersion?;
|
|
11
17
|
private _entityTypeBySet;
|
|
12
18
|
private _typeNodeByName;
|
|
13
|
-
constructor(client: CreatioHttpClient);
|
|
19
|
+
constructor(client: CreatioHttpClient, freshness?: SchemaFreshnessGate);
|
|
14
20
|
private _isFresh;
|
|
21
|
+
/** Freshness version for the current request's base URL (empty when no gate is wired, which
|
|
22
|
+
* keeps the cache purely TTL-driven — the prior behaviour). */
|
|
23
|
+
private _version;
|
|
15
24
|
private _arrayify;
|
|
16
25
|
private _getMetadataXml;
|
|
17
26
|
private _getParsedMetadata;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-store.d.ts","sourceRoot":"","sources":["../../../../src/creatio/services/odata/metadata-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"metadata-store.d.ts","sourceRoot":"","sources":["../../../../src/creatio/services/odata/metadata-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAI/D,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAC7D,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAM;IAC9B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAW;IACpC,OAAO,CAAC,oBAAoB,CAAK;IAKjC,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAGpC,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,eAAe,CAA+B;gBAE1C,MAAM,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,mBAAmB;IAKtE,OAAO,CAAC,QAAQ;IAIhB;oEACgE;YAClD,QAAQ;IAMtB,OAAO,CAAC,SAAS;YAOH,eAAe;YAwBf,kBAAkB;IAahC,OAAO,CAAC,eAAe;YAKT,4BAA4B;IA4B1C;;wEAEoE;YACtD,cAAc;YA4Bd,0BAA0B;IAKxC,OAAO,CAAC,sBAAsB;IA2BjB,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBnC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAkBhF"}
|
|
@@ -10,21 +10,38 @@ const odata_routes_1 = require("./odata-routes");
|
|
|
10
10
|
class ODataMetadataStore {
|
|
11
11
|
static METADATA_TTL_MS = 30 * 60 * 1000;
|
|
12
12
|
_client;
|
|
13
|
+
_freshness;
|
|
13
14
|
_metadataXml;
|
|
14
15
|
_metadataParsed;
|
|
15
16
|
_metadataFetchedAt = 0;
|
|
16
17
|
_entitySetsCache;
|
|
17
18
|
_entitySetsFetchedAt = 0;
|
|
19
|
+
// The base URL + freshness version the cached document/list were fetched under. A change in
|
|
20
|
+
// either (a different tenant via the gateway override, or a data-model change) invalidates the
|
|
21
|
+
// single-slot cache. Single-slot is intentional: per-tenant pooling is the multitenancy epic;
|
|
22
|
+
// here correctness (never serve another tenant's / a stale model's metadata) is what matters.
|
|
23
|
+
_metadataBaseUrl;
|
|
24
|
+
_metadataVersion;
|
|
25
|
+
_entitySetsBaseUrl;
|
|
26
|
+
_entitySetsVersion;
|
|
18
27
|
// Built once per parsed-metadata document so describeEntity is O(1) instead of two O(N) scans
|
|
19
28
|
// over the entire (hundreds-to-thousands of types) Creatio EDMX on every call.
|
|
20
29
|
_entityTypeBySet;
|
|
21
30
|
_typeNodeByName;
|
|
22
|
-
constructor(client) {
|
|
31
|
+
constructor(client, freshness) {
|
|
23
32
|
this._client = client;
|
|
33
|
+
this._freshness = freshness;
|
|
24
34
|
}
|
|
25
35
|
_isFresh(fetchedAt) {
|
|
26
36
|
return Date.now() - fetchedAt < ODataMetadataStore.METADATA_TTL_MS;
|
|
27
37
|
}
|
|
38
|
+
/** Freshness version for the current request's base URL (empty when no gate is wired, which
|
|
39
|
+
* keeps the cache purely TTL-driven — the prior behaviour). */
|
|
40
|
+
async _version() {
|
|
41
|
+
return this._freshness
|
|
42
|
+
? this._freshness.getSchemaVersion(this._client.normalizedBaseUrl)
|
|
43
|
+
: '';
|
|
44
|
+
}
|
|
28
45
|
_arrayify(value) {
|
|
29
46
|
if (value == null) {
|
|
30
47
|
return [];
|
|
@@ -32,16 +49,23 @@ class ODataMetadataStore {
|
|
|
32
49
|
return Array.isArray(value) ? value : [value];
|
|
33
50
|
}
|
|
34
51
|
async _getMetadataXml() {
|
|
35
|
-
|
|
52
|
+
const baseUrl = this._client.normalizedBaseUrl;
|
|
53
|
+
const version = await this._version();
|
|
54
|
+
if (this._metadataXml &&
|
|
55
|
+
this._metadataBaseUrl === baseUrl &&
|
|
56
|
+
this._metadataVersion === version &&
|
|
57
|
+
this._isFresh(this._metadataFetchedAt)) {
|
|
36
58
|
return this._metadataXml;
|
|
37
59
|
}
|
|
38
60
|
const headers = await this._client.getXmlHeaders();
|
|
39
|
-
const metadataUrl = `${(0, odata_routes_1.odataRoot)(
|
|
61
|
+
const metadataUrl = `${(0, odata_routes_1.odataRoot)(baseUrl)}/$metadata`;
|
|
40
62
|
const xmlContent = await this._client.fetchText(metadataUrl, async () => ({ headers }));
|
|
41
63
|
this._metadataXml = xmlContent;
|
|
42
64
|
this._metadataParsed = undefined; // force re-parse against the refreshed document
|
|
43
65
|
this._entityTypeBySet = undefined; // and rebuild the lookup indexes
|
|
44
66
|
this._typeNodeByName = undefined;
|
|
67
|
+
this._metadataBaseUrl = baseUrl;
|
|
68
|
+
this._metadataVersion = version;
|
|
45
69
|
this._metadataFetchedAt = Date.now();
|
|
46
70
|
return this._metadataXml;
|
|
47
71
|
}
|
|
@@ -139,12 +163,19 @@ class ODataMetadataStore {
|
|
|
139
163
|
return { key, properties };
|
|
140
164
|
}
|
|
141
165
|
async listEntitySets() {
|
|
142
|
-
|
|
166
|
+
const baseUrl = this._client.normalizedBaseUrl;
|
|
167
|
+
const version = await this._version();
|
|
168
|
+
if (this._entitySetsCache &&
|
|
169
|
+
this._entitySetsBaseUrl === baseUrl &&
|
|
170
|
+
this._entitySetsVersion === version &&
|
|
171
|
+
this._isFresh(this._entitySetsFetchedAt)) {
|
|
143
172
|
return this._entitySetsCache;
|
|
144
173
|
}
|
|
145
174
|
const serviceSets = await this._tryGetEntitySetsFromService();
|
|
146
175
|
const result = serviceSets ?? (await this._getEntitySetsFromMetadata());
|
|
147
176
|
this._entitySetsCache = result;
|
|
177
|
+
this._entitySetsBaseUrl = baseUrl;
|
|
178
|
+
this._entitySetsVersion = version;
|
|
148
179
|
this._entitySetsFetchedAt = Date.now();
|
|
149
180
|
return result;
|
|
150
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-store.js","sourceRoot":"","sources":["../../../../src/creatio/services/odata/metadata-store.ts"],"names":[],"mappings":";;;;;;AAAA,qDAA4C;AAE5C,uDAA+B;
|
|
1
|
+
{"version":3,"file":"metadata-store.js","sourceRoot":"","sources":["../../../../src/creatio/services/odata/metadata-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ClientCacheHashClient } from './client-cache-hash-client';
|
|
2
|
+
/**
|
|
3
|
+
* Freshness policy ("thermostat") for the schema/metadata caches. It turns Creatio's client-cache
|
|
4
|
+
* hashes into a per-base-url VERSION TOKEN: a schema-cache entry stamped with an older token is
|
|
5
|
+
* treated as stale and refetched. This mirrors how the Freedom UI keeps its caches fresh.
|
|
6
|
+
*
|
|
7
|
+
* - Caches the hash snapshot per base URL for a short TTL, so we poll the endpoint at most once per
|
|
8
|
+
* ~TTL no matter how many schema reads happen.
|
|
9
|
+
* - Degrades gracefully: if the endpoint is unavailable, returns a coarse time-bucketed token so
|
|
10
|
+
* caches refresh on a fallback cadence rather than going stale forever.
|
|
11
|
+
* - Keyed by base URL so a multi-tenant gateway deployment never reuses tenant A's version for B.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SchemaFreshnessGate {
|
|
14
|
+
private readonly _client;
|
|
15
|
+
private readonly _ttlMs;
|
|
16
|
+
private readonly _snapshots;
|
|
17
|
+
constructor(client: ClientCacheHashClient, ttlMs?: number);
|
|
18
|
+
/**
|
|
19
|
+
* Current schema-version token for `baseUrl`. Stable while the data model is unchanged; changes
|
|
20
|
+
* when Creatio's `runtime-entity-schema` hash or the global `cacheVersion` changes. Callers stamp
|
|
21
|
+
* cached schemas with this and treat a mismatch as a miss.
|
|
22
|
+
*/
|
|
23
|
+
getSchemaVersion(baseUrl: string): Promise<string>;
|
|
24
|
+
private _fetchToken;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=schema-freshness-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-freshness-gate.d.ts","sourceRoot":"","sources":["../../../src/creatio/services/schema-freshness-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAenE;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoD;gBAEnE,MAAM,EAAE,qBAAqB,EAAE,KAAK,GAAE,MAAgC;IAKlF;;;;OAIG;IACU,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAWjD,WAAW;CAQzB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SchemaFreshnessGate = void 0;
|
|
4
|
+
/** The ClientCache bucket that flips when the entity data model changes (add/alter/remove an
|
|
5
|
+
* entity or column). Its value = configuration hash + user culture. Watching this + `cacheVersion`
|
|
6
|
+
* is exactly what the Freedom UI does to invalidate its own runtime-entity-schema cache. */
|
|
7
|
+
const ENTITY_SCHEMA_HASH_NAME = 'runtime-entity-schema';
|
|
8
|
+
/** How long a fetched hash snapshot is trusted before we re-poll. Bounds endpoint load AND the
|
|
9
|
+
* worst-case staleness window after a data-model change. */
|
|
10
|
+
const DEFAULT_SNAPSHOT_TTL_MS = 60 * 1000;
|
|
11
|
+
/** When the endpoint is unavailable, fall back to a coarse time-bucketed token so schema caches
|
|
12
|
+
* still refresh on a fixed cadence instead of being trusted indefinitely. */
|
|
13
|
+
const FALLBACK_BUCKET_MS = 5 * 60 * 1000;
|
|
14
|
+
/**
|
|
15
|
+
* Freshness policy ("thermostat") for the schema/metadata caches. It turns Creatio's client-cache
|
|
16
|
+
* hashes into a per-base-url VERSION TOKEN: a schema-cache entry stamped with an older token is
|
|
17
|
+
* treated as stale and refetched. This mirrors how the Freedom UI keeps its caches fresh.
|
|
18
|
+
*
|
|
19
|
+
* - Caches the hash snapshot per base URL for a short TTL, so we poll the endpoint at most once per
|
|
20
|
+
* ~TTL no matter how many schema reads happen.
|
|
21
|
+
* - Degrades gracefully: if the endpoint is unavailable, returns a coarse time-bucketed token so
|
|
22
|
+
* caches refresh on a fallback cadence rather than going stale forever.
|
|
23
|
+
* - Keyed by base URL so a multi-tenant gateway deployment never reuses tenant A's version for B.
|
|
24
|
+
*/
|
|
25
|
+
class SchemaFreshnessGate {
|
|
26
|
+
_client;
|
|
27
|
+
_ttlMs;
|
|
28
|
+
_snapshots = new Map();
|
|
29
|
+
constructor(client, ttlMs = DEFAULT_SNAPSHOT_TTL_MS) {
|
|
30
|
+
this._client = client;
|
|
31
|
+
this._ttlMs = ttlMs;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Current schema-version token for `baseUrl`. Stable while the data model is unchanged; changes
|
|
35
|
+
* when Creatio's `runtime-entity-schema` hash or the global `cacheVersion` changes. Callers stamp
|
|
36
|
+
* cached schemas with this and treat a mismatch as a miss.
|
|
37
|
+
*/
|
|
38
|
+
async getSchemaVersion(baseUrl) {
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const cached = this._snapshots.get(baseUrl);
|
|
41
|
+
if (cached && now - cached.at < this._ttlMs) {
|
|
42
|
+
return cached.token;
|
|
43
|
+
}
|
|
44
|
+
const token = await this._fetchToken(now);
|
|
45
|
+
this._snapshots.set(baseUrl, { token, at: now });
|
|
46
|
+
return token;
|
|
47
|
+
}
|
|
48
|
+
async _fetchToken(now) {
|
|
49
|
+
const hashes = await this._client.getHashes();
|
|
50
|
+
if (!hashes) {
|
|
51
|
+
return `fallback:${Math.floor(now / FALLBACK_BUCKET_MS)}`;
|
|
52
|
+
}
|
|
53
|
+
const entitySchema = hashes.hashes[ENTITY_SCHEMA_HASH_NAME] ?? '';
|
|
54
|
+
return `v${hashes.cacheVersion}:${entitySchema}`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.SchemaFreshnessGate = SchemaFreshnessGate;
|
|
58
|
+
//# sourceMappingURL=schema-freshness-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-freshness-gate.js","sourceRoot":"","sources":["../../../src/creatio/services/schema-freshness-gate.ts"],"names":[],"mappings":";;;AAEA;;6FAE6F;AAC7F,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AAExD;6DAC6D;AAC7D,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C;8EAC8E;AAC9E,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzC;;;;;;;;;;GAUG;AACH,MAAa,mBAAmB;IACd,OAAO,CAAwB;IAC/B,MAAM,CAAS;IACf,UAAU,GAAG,IAAI,GAAG,EAAyC,CAAC;IAE/E,YAAY,MAA6B,EAAE,QAAgB,uBAAuB;QACjF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,KAAK,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,GAAW;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,kBAAkB,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,IAAI,MAAM,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC;IAClD,CAAC;CACD;AAlCD,kDAkCC"}
|
package/dist/index.js
CHANGED
|
@@ -45,7 +45,12 @@ async function main() {
|
|
|
45
45
|
_httpInstance = http;
|
|
46
46
|
await http.start(consts_1.HTTP_MCP_PORT);
|
|
47
47
|
if (isSingleSessionMode(cfg.auth.kind)) {
|
|
48
|
-
_keepAlive = new server_1.SessionKeepAlive((0, server_1.keepAliveIntervalMs)(), () =>
|
|
48
|
+
_keepAlive = new server_1.SessionKeepAlive((0, server_1.keepAliveIntervalMs)(), async () => {
|
|
49
|
+
await engines.user.getCurrentUserInfo();
|
|
50
|
+
// Reuse the periodic ping to also refresh the schema-freshness snapshot (not a wasted
|
|
51
|
+
// round-trip): the next schema read starts from a warm, validated cache.
|
|
52
|
+
await engines.warmSchemaCache();
|
|
53
|
+
});
|
|
49
54
|
_keepAlive.start();
|
|
50
55
|
}
|
|
51
56
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,qDAA+E;AAC/E,qCAAyC;AACzC,uCAA0F;AAC1F,gDAAwB;AACxB,qCAMkB;AAClB,yCAA0E;AAC1E,mCAAkC;AAElC,IAAI,aAAqC,CAAC;AAC1C,IAAI,UAAwC,CAAC;AAC7C,IAAI,WAAmC,CAAC;AAExC;6FAC6F;AAC7F,SAAS,mBAAmB,CAAC,IAAsB;IAClD,OAAO,IAAI,KAAK,0BAAgB,CAAC,MAAM,IAAI,IAAI,KAAK,0BAAgB,CAAC,MAAM,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,IAAI;IAClB,IAAA,yBAAgB,GAAE,CAAC;IACnB,aAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,EAAb,sBAAa,EAAE,EAAE,CAAC,CAAC;IAChE,yFAAyF;IACzF,+FAA+F;IAC/F,MAAM,GAAG,GAAG,IAAA,uCAAsB,GAAE,CAAC;IACrC,uFAAuF;IACvF,yFAAyF;IACzF,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,0BAAgB,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,gBAAgB,GAAG,IAAA,oCAAmB,GAAE,CAAC;QAC/C,IAAI,gBAAgB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvC,WAAW,GAAG,MAAM,IAAA,2BAAgB,EAAC,gBAAgB,CAAC,CAAC;YACvD,yBAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC;IACF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,+BAAqB,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAA,eAAO,EAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,8BAAoB,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,EAAE;QAClC,YAAY;QACZ,gBAAgB,EAAE,IAAA,eAAO,EAAC,+BAA+B,EAAE,KAAK,CAAC;QACjE,mBAAmB,EAAE,IAAA,eAAO,EAAC,mCAAmC,EAAE,KAAK,CAAC;KACxE,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAI,mBAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,aAAa,GAAG,IAAI,CAAC;IACrB,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAa,CAAC,CAAC;IAChC,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,UAAU,GAAG,IAAI,yBAAgB,CAAC,IAAA,4BAAmB,GAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/log.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"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"}
|
package/dist/log.js
CHANGED
|
@@ -24,6 +24,7 @@ exports.httpError = httpError;
|
|
|
24
24
|
exports.logOperation = logOperation;
|
|
25
25
|
exports.audit = audit;
|
|
26
26
|
const env_1 = require("./utils/env");
|
|
27
|
+
const redact_1 = require("./utils/redact");
|
|
27
28
|
let _correlationId;
|
|
28
29
|
let _stderrOnly = false;
|
|
29
30
|
function resolveLogVerbosity() {
|
|
@@ -75,7 +76,9 @@ function output(level, msg, meta) {
|
|
|
75
76
|
if (meta && Object.keys(meta).length) {
|
|
76
77
|
entry.meta = meta;
|
|
77
78
|
}
|
|
78
|
-
|
|
79
|
+
// Final outward choke point: scrub any credential-looking substrings (tokens, secrets, auth
|
|
80
|
+
// headers) that may have slipped into msg/meta before they reach stdout/stderr or a log sink.
|
|
81
|
+
const line = (0, redact_1.redactSecrets)(JSON.stringify(entry));
|
|
79
82
|
if (_stderrOnly) {
|
|
80
83
|
process.stderr.write(line + '\n');
|
|
81
84
|
return;
|
package/dist/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-handlers.d.ts","sourceRoot":"","sources":["../../../src/server/http/mcp-handlers.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM;IAIb,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-handlers.d.ts","sourceRoot":"","sources":["../../../src/server/http/mcp-handlers.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM;IAIb,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DzD,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAuB7E"}
|
|
@@ -19,6 +19,9 @@ class McpHandlers {
|
|
|
19
19
|
async handleMcpPost(req, res) {
|
|
20
20
|
const sessionId = (0, utils_1.getSessionIdFromRequest)(req);
|
|
21
21
|
const bearerUserKey = req.userKey;
|
|
22
|
+
// Gateway multi-tenant routing key — selects which tenant the session server and capability
|
|
23
|
+
// probe bind to (absent in single-tenant modes ⇒ the default tenant).
|
|
24
|
+
const baseUrlOverride = req.baseUrlOverride;
|
|
22
25
|
let transport;
|
|
23
26
|
const remoteIp = (0, utils_1.getClientIp)(req);
|
|
24
27
|
if (sessionId && this._sessionContext.hasSession(sessionId)) {
|
|
@@ -42,9 +45,9 @@ class McpHandlers {
|
|
|
42
45
|
},
|
|
43
46
|
});
|
|
44
47
|
// Each session gets its own McpServer (a single McpServer connects to one transport
|
|
45
|
-
// only). Release it when the transport closes so we
|
|
46
|
-
// late-probed tools into dead sessions.
|
|
47
|
-
const mcp = this._server.createSessionServer();
|
|
48
|
+
// only), bound to the request's tenant. Release it when the transport closes so we
|
|
49
|
+
// don't leak servers or register late-probed tools into dead sessions.
|
|
50
|
+
const mcp = this._server.createSessionServer(baseUrlOverride);
|
|
48
51
|
transport.onclose = () => {
|
|
49
52
|
this._server.releaseSessionServer(mcp);
|
|
50
53
|
if (transport?.sessionId) {
|
|
@@ -65,11 +68,10 @@ class McpHandlers {
|
|
|
65
68
|
const session = this._sessionContext.getSession(sessionId);
|
|
66
69
|
const userKey = bearerUserKey || session?.userKey;
|
|
67
70
|
const bearerToken = req.bearerToken;
|
|
68
|
-
const baseUrlOverride = req.baseUrlOverride;
|
|
69
71
|
await (0, utils_1.runWithContext)({ userKey, sessionId, bearerToken, baseUrlOverride }, async () => {
|
|
70
|
-
// Kick the
|
|
72
|
+
// Kick the per-tenant capability probe from inside the request context so its Creatio
|
|
71
73
|
// calls carry this caller's identity (broker mode has no user otherwise). Non-blocking.
|
|
72
|
-
this._server.ensureCapabilitiesProbed();
|
|
74
|
+
this._server.ensureCapabilitiesProbed(baseUrlOverride);
|
|
73
75
|
return transport.handleRequest(req, res, req.body);
|
|
74
76
|
});
|
|
75
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-handlers.js","sourceRoot":"","sources":["../../../src/server/http/mcp-handlers.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AAEzC,0FAAmG;AACnG,iEAAyE;AAEzE,oDAA4B;AAC5B,6CAAgD;AAChD,uCAKqB;AAKrB,MAAa,WAAW;IACN,eAAe,GAAG,yBAAc,CAAC,QAAQ,CAAC;IAC1C,OAAO,CAAS;IAEjC,YAAY,MAAc;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,GAAY,EAAE,GAAa;QACrD,MAAM,SAAS,GAAG,IAAA,+BAAuB,EAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAI,GAAW,CAAC,OAAO,CAAC;QAC3C,IAAI,SAAoD,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,GAAG,CAAC,CAAC;QAClC,IAAI,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3D,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;YAC/B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBACpD,aAAG,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjD,CAAC;QACF,CAAC;aAAM,IAAI,CAAC,SAAS,IAAI,IAAA,8BAAmB,EAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,SAAS,GAAG,IAAI,iDAA6B,CAAC;gBAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAA,wBAAU,GAAE;gBACtC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC7B,IAAI,SAAS,EAAE,CAAC;wBACf,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CACjD,GAAG,EACH,aAAa,EACb,QAAQ,CACR,CAAC;wBACF,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;wBACzD,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;wBAC9C,aAAG,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC3C,CAAC;gBACF,CAAC;aACD,CAAC,CAAC;YACH,oFAAoF;YACpF,mFAAmF;YACnF,
|
|
1
|
+
{"version":3,"file":"mcp-handlers.js","sourceRoot":"","sources":["../../../src/server/http/mcp-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,39 +13,46 @@ export declare class Server {
|
|
|
13
13
|
private readonly _engines;
|
|
14
14
|
private readonly _descriptors;
|
|
15
15
|
private readonly _handlers;
|
|
16
|
-
private readonly
|
|
17
|
-
private _probeComplete;
|
|
18
|
-
private _probeInFlight;
|
|
19
|
-
private _readonly;
|
|
20
|
-
private _serverName;
|
|
21
|
-
private _serverVersion;
|
|
16
|
+
private readonly _registry;
|
|
22
17
|
private readonly _dataForge;
|
|
23
18
|
private readonly _dataForgePreparer;
|
|
24
19
|
private readonly _globalSearchPreparer;
|
|
25
20
|
private readonly _publishedToolsPreparer;
|
|
26
21
|
private readonly _preparers;
|
|
27
|
-
private
|
|
28
|
-
private
|
|
22
|
+
private _readonly;
|
|
23
|
+
private _serverName;
|
|
24
|
+
private _serverVersion;
|
|
29
25
|
get authProvider(): ICreatioAuthProvider;
|
|
30
26
|
constructor(engines: CreatioEngineManager, config: ServerConfig);
|
|
27
|
+
/** Register the static, tenant-agnostic surface (core/mutating tools + prompts) into a session. */
|
|
31
28
|
private _registerAllInto;
|
|
32
|
-
|
|
29
|
+
/** Record a static tool in the shared maps. Registered into each session by {@link
|
|
30
|
+
* _registerAllInto}; called only at construction, before any session exists. */
|
|
31
|
+
private _registerStaticTool;
|
|
33
32
|
private _normalizeToToolHandler;
|
|
34
33
|
private _registerAsTool;
|
|
35
34
|
private _registerPrompts;
|
|
36
|
-
/**
|
|
35
|
+
/** The tenant bucket key for a request's base-URL override: the normalized override (gateway
|
|
36
|
+
* multi-tenant) or {@link DEFAULT_TENANT_KEY} for every single-tenant mode. Mirrors how the
|
|
37
|
+
* HTTP client resolves the effective base URL, so tools and caches key on the same tenant. */
|
|
38
|
+
private _tenantKey;
|
|
39
|
+
/** The current request's tenant state (resolved from the per-request base-URL override). Falls
|
|
40
|
+
* back to the default tenant when there is no active request context (e.g. stdio, tests). */
|
|
41
|
+
private _currentTenantState;
|
|
42
|
+
/** Adapter exposing handler registration to {@link ToolPreparer}s — scoped to ONE tenant: a
|
|
43
|
+
* discovered tool is recorded in that tenant's state and pushed into its live sessions only. */
|
|
37
44
|
private _toolRegistrar;
|
|
38
45
|
/**
|
|
39
|
-
* Probe each optional-capability preparer that has no verdict yet and let it
|
|
40
|
-
* when available. A preparer that returns cleanly (true/false) gets a recorded
|
|
41
|
-
* never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet)
|
|
42
|
-
* so a later authenticated connect can retry it — which also makes registration
|
|
43
|
-
* already-enabled preparer is skipped, so its tools are never registered twice).
|
|
44
|
-
* {@link ensureCapabilitiesProbed} within a request context so probe calls carry the
|
|
45
|
-
* identity. Returns whether EVERY preparer now has a verdict (the probe is complete).
|
|
46
|
+
* Probe each optional-capability preparer that has no verdict yet FOR THIS TENANT and let it
|
|
47
|
+
* register its tools when available. A preparer that returns cleanly (true/false) gets a recorded
|
|
48
|
+
* verdict and is never re-probed; one that THROWS (e.g. the caller's identity isn't usable yet)
|
|
49
|
+
* records nothing so a later authenticated connect can retry it — which also makes registration
|
|
50
|
+
* idempotent (an already-enabled preparer is skipped, so its tools are never registered twice).
|
|
51
|
+
* Invoked from {@link ensureCapabilitiesProbed} within a request context so probe calls carry the
|
|
52
|
+
* caller's identity. Returns whether EVERY preparer now has a verdict (the probe is complete).
|
|
46
53
|
*/
|
|
47
54
|
private _prepareTools;
|
|
48
|
-
/** Whether DataForge was probed as enabled
|
|
55
|
+
/** Whether DataForge was probed as enabled for the given tenant (defaults to the current one). */
|
|
49
56
|
private _isDataForgeReady;
|
|
50
57
|
/** Compile the `read` tool args into a neutral {@link ReadQuery}: structured `filters`
|
|
51
58
|
* become a {@link FilterNode}; a raw `$filter` string and `expand` are carried as
|
|
@@ -65,26 +72,28 @@ export declare class Server {
|
|
|
65
72
|
private _clientToolDefs;
|
|
66
73
|
private _registerClientTools;
|
|
67
74
|
/**
|
|
68
|
-
* Build a fresh {@link McpServer} for one transport/session,
|
|
69
|
-
*
|
|
70
|
-
* late-discovered tools into it. Each session MUST get its own
|
|
71
|
-
* connects to only one transport).
|
|
75
|
+
* Build a fresh {@link McpServer} for one transport/session, registering the static surface plus
|
|
76
|
+
* the calling tenant's already-discovered dynamic tools, and track it under that tenant so the
|
|
77
|
+
* capability probe can later push late-discovered tools into it. Each session MUST get its own
|
|
78
|
+
* server (a single McpServer connects to only one transport). `baseUrlOverride` (gateway
|
|
79
|
+
* `X-Creatio-Base-Url`) selects the tenant; absent ⇒ the single default tenant.
|
|
72
80
|
*/
|
|
73
|
-
createSessionServer(): McpServer;
|
|
81
|
+
createSessionServer(baseUrlOverride?: string): McpServer;
|
|
74
82
|
/**
|
|
75
|
-
* Probe optional capabilities once per
|
|
83
|
+
* Probe optional capabilities once per tenant, WITHOUT blocking the MCP handshake. These do
|
|
76
84
|
* network I/O (DataForge/Global Search probes, and the publishing app's tools/list, which can
|
|
77
85
|
* be slow) — awaiting would delay connect past the client's init timeout. Discovered tools
|
|
78
|
-
* register into
|
|
79
|
-
* notifications/tools/list_changed) and into the
|
|
86
|
+
* register into the tenant's live session servers as they resolve (the SDK emits
|
|
87
|
+
* notifications/tools/list_changed) and into the tenant state for its future sessions.
|
|
80
88
|
*
|
|
81
89
|
* MUST be called from within the per-request context ({@link runWithContext}) so the probe's
|
|
82
90
|
* Creatio calls carry the caller's identity/token — otherwise broker mode resolves no user.
|
|
91
|
+
* `baseUrlOverride` selects the tenant; absent ⇒ the single default tenant.
|
|
83
92
|
*/
|
|
84
|
-
ensureCapabilitiesProbed(): void;
|
|
93
|
+
ensureCapabilitiesProbed(baseUrlOverride?: string): void;
|
|
85
94
|
/** Untrack and close one session's server (call when its transport closes). */
|
|
86
95
|
releaseSessionServer(mcp: McpServer): void;
|
|
87
|
-
/** Close every live session server (process shutdown). */
|
|
96
|
+
/** Close every live session server across all tenants (process shutdown). */
|
|
88
97
|
stopAll(): Promise<void>;
|
|
89
98
|
}
|
|
90
99
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EAGpB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EAGpB,MAAM,eAAe,CAAC;AAiEvB,MAAM,WAAW,YAAY;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;0FACsF;IACtF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAWD,qBAAa,MAAM;IAGlB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAU;IAEzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAKhD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAM5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAI/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwB;IAC3D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2B;IACjE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA+B;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAW;IAEjC,IAAW,YAAY,IAAI,oBAAoB,CAE9C;gBAEW,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,YAAY;IAuB/D,mGAAmG;IACnG,OAAO,CAAC,gBAAgB;IAOxB;qFACiF;IACjF,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,uBAAuB;IAqC/B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,gBAAgB;IAmBxB;;mGAE+F;IAC/F,OAAO,CAAC,UAAU;IAKlB;kGAC8F;IAC9F,OAAO,CAAC,mBAAmB;IAI3B;qGACiG;IACjG,OAAO,CAAC,cAAc;IActB;;;;;;;;OAQG;YACW,aAAa;IAwB3B,kGAAkG;IAClG,OAAO,CAAC,iBAAiB;IAIzB;;;+FAG2F;YAC7E,KAAK;IAyBnB;;iFAE6E;YAC/D,eAAe;IAY7B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA8IvB,OAAO,CAAC,oBAAoB;IAQ5B;;;;;;OAMG;IACI,mBAAmB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS;IAe/D;;;;;;;;;;OAUG;IACI,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB/D,+EAA+E;IACxE,oBAAoB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IASjD,6EAA6E;IAChE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAWrC"}
|