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
|
@@ -8,6 +8,8 @@ export declare class ODataMetadataStore {
|
|
|
8
8
|
private _metadataFetchedAt;
|
|
9
9
|
private _entitySetsCache?;
|
|
10
10
|
private _entitySetsFetchedAt;
|
|
11
|
+
private _entityTypeBySet;
|
|
12
|
+
private _typeNodeByName;
|
|
11
13
|
constructor(client: CreatioHttpClient);
|
|
12
14
|
private _isFresh;
|
|
13
15
|
private _arrayify;
|
|
@@ -15,9 +17,11 @@ export declare class ODataMetadataStore {
|
|
|
15
17
|
private _getParsedMetadata;
|
|
16
18
|
private _extractSchemas;
|
|
17
19
|
private _tryGetEntitySetsFromService;
|
|
20
|
+
/** Build (once per parsed document) the entitySet→entityType and typeName→typeNode lookups.
|
|
21
|
+
* Always goes through {@link _getParsedMetadata} first so the TTL refresh runs (and nulls the
|
|
22
|
+
* indexes on a refetch); only the index build itself is cached. */
|
|
23
|
+
private _ensureIndexes;
|
|
18
24
|
private _getEntitySetsFromMetadata;
|
|
19
|
-
private _findEntityType;
|
|
20
|
-
private _findEntityTypeNode;
|
|
21
25
|
private _parseEntityProperties;
|
|
22
26
|
listEntitySets(): Promise<string[]>;
|
|
23
27
|
describeEntity(entitySet: string): Promise<EntitySchemaDescription>;
|
|
@@ -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;
|
|
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;AAInD,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,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;IAGjC,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,eAAe,CAA+B;gBAE1C,MAAM,EAAE,iBAAiB;IAIrC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;YAOH,eAAe;YAef,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;IAWnC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAkBhF"}
|
|
@@ -15,6 +15,10 @@ class ODataMetadataStore {
|
|
|
15
15
|
_metadataFetchedAt = 0;
|
|
16
16
|
_entitySetsCache;
|
|
17
17
|
_entitySetsFetchedAt = 0;
|
|
18
|
+
// Built once per parsed-metadata document so describeEntity is O(1) instead of two O(N) scans
|
|
19
|
+
// over the entire (hundreds-to-thousands of types) Creatio EDMX on every call.
|
|
20
|
+
_entityTypeBySet;
|
|
21
|
+
_typeNodeByName;
|
|
18
22
|
constructor(client) {
|
|
19
23
|
this._client = client;
|
|
20
24
|
}
|
|
@@ -36,6 +40,8 @@ class ODataMetadataStore {
|
|
|
36
40
|
const xmlContent = await this._client.fetchText(metadataUrl, async () => ({ headers }));
|
|
37
41
|
this._metadataXml = xmlContent;
|
|
38
42
|
this._metadataParsed = undefined; // force re-parse against the refreshed document
|
|
43
|
+
this._entityTypeBySet = undefined; // and rebuild the lookup indexes
|
|
44
|
+
this._typeNodeByName = undefined;
|
|
39
45
|
this._metadataFetchedAt = Date.now();
|
|
40
46
|
return this._metadataXml;
|
|
41
47
|
}
|
|
@@ -83,48 +89,39 @@ class ODataMetadataStore {
|
|
|
83
89
|
}
|
|
84
90
|
return null;
|
|
85
91
|
}
|
|
86
|
-
|
|
92
|
+
/** Build (once per parsed document) the entitySet→entityType and typeName→typeNode lookups.
|
|
93
|
+
* Always goes through {@link _getParsedMetadata} first so the TTL refresh runs (and nulls the
|
|
94
|
+
* indexes on a refetch); only the index build itself is cached. */
|
|
95
|
+
async _ensureIndexes() {
|
|
87
96
|
const metadata = await this._getParsedMetadata();
|
|
97
|
+
if (this._entityTypeBySet && this._typeNodeByName) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
88
100
|
const schemas = this._extractSchemas(metadata);
|
|
89
|
-
const
|
|
101
|
+
const bySet = new Map();
|
|
102
|
+
const byType = new Map();
|
|
90
103
|
for (const schema of schemas) {
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
const sets = this._arrayify(container.EntitySet);
|
|
94
|
-
for (const set of sets) {
|
|
104
|
+
for (const container of this._arrayify(schema.EntityContainer)) {
|
|
105
|
+
for (const set of this._arrayify(container.EntitySet)) {
|
|
95
106
|
const name = set?.['@_Name'];
|
|
96
107
|
if (name) {
|
|
97
|
-
|
|
108
|
+
bySet.set(String(name), String(set?.['@_EntityType'] ?? ''));
|
|
98
109
|
}
|
|
99
110
|
}
|
|
100
111
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
for (const schema of schemas) {
|
|
106
|
-
const containers = this._arrayify(schema.EntityContainer);
|
|
107
|
-
for (const container of containers) {
|
|
108
|
-
const sets = this._arrayify(container.EntitySet);
|
|
109
|
-
for (const set of sets) {
|
|
110
|
-
if (set?.['@_Name'] === entitySet) {
|
|
111
|
-
return String(set?.['@_EntityType'] ?? '');
|
|
112
|
-
}
|
|
112
|
+
for (const type of this._arrayify(schema.EntityType)) {
|
|
113
|
+
const name = type?.['@_Name'];
|
|
114
|
+
if (name) {
|
|
115
|
+
byType.set(String(name), type);
|
|
113
116
|
}
|
|
114
117
|
}
|
|
115
118
|
}
|
|
116
|
-
|
|
119
|
+
this._entityTypeBySet = bySet;
|
|
120
|
+
this._typeNodeByName = byType;
|
|
117
121
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
for (const type of types) {
|
|
122
|
-
if (type?.['@_Name'] === typeName) {
|
|
123
|
-
return type;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return undefined;
|
|
122
|
+
async _getEntitySetsFromMetadata() {
|
|
123
|
+
await this._ensureIndexes();
|
|
124
|
+
return Array.from(this._entityTypeBySet.keys());
|
|
128
125
|
}
|
|
129
126
|
_parseEntityProperties(entityTypeNode) {
|
|
130
127
|
const keyRefs = this._arrayify(entityTypeNode.Key?.PropertyRef);
|
|
@@ -152,16 +149,15 @@ class ODataMetadataStore {
|
|
|
152
149
|
return result;
|
|
153
150
|
}
|
|
154
151
|
async describeEntity(entitySet) {
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
const fullType = this._findEntityType(schemas, entitySet);
|
|
152
|
+
await this._ensureIndexes();
|
|
153
|
+
const fullType = this._entityTypeBySet.get(entitySet) ?? '';
|
|
158
154
|
if (!fullType) {
|
|
159
155
|
const error = `entity_not_found:${entitySet}`;
|
|
160
156
|
log_1.default.error('creatio.metadata.describe_entity.error', { entitySet, error });
|
|
161
157
|
throw new Error(error);
|
|
162
158
|
}
|
|
163
159
|
const typeName = fullType.split('.').pop();
|
|
164
|
-
const entityTypeNode = this.
|
|
160
|
+
const entityTypeNode = this._typeNodeByName.get(typeName);
|
|
165
161
|
if (!entityTypeNode) {
|
|
166
162
|
const error = `entity_type_not_found:${typeName}`;
|
|
167
163
|
log_1.default.error('creatio.metadata.describe_entity.error', { entitySet, error });
|
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odata-crud-provider.d.ts","sourceRoot":"","sources":["../../../../src/creatio/services/odata/odata-crud-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"odata-crud-provider.d.ts","sourceRoot":"","sources":["../../../../src/creatio/services/odata/odata-crud-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,UAAU,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,qBAAa,iBAAkB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAEnD,SAAgB,IAAI,mBAAmB;IAEvC,SAAgB,YAAY,EAAE,gBAAgB,CAAqC;gBAGlF,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,kBAAkB,EACjC,UAAU,uBAA6B;IAOxC,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAQjB,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAInC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAI7D,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,eAAe;IAqBxC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAqC3C,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,gBAAgB;IAqB7C,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,gBAAgB;CAmBpD"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.ODataCrudProvider = void 0;
|
|
7
|
-
const log_1 = __importDefault(require("../../../log"));
|
|
8
4
|
const entity_name_1 = require("../entity-name");
|
|
5
|
+
const identifiers_1 = require("../identifiers");
|
|
9
6
|
const odata_query_translator_1 = require("./odata-query-translator");
|
|
10
7
|
const odata_routes_1 = require("./odata-routes");
|
|
11
8
|
class ODataCrudProvider {
|
|
@@ -31,9 +28,8 @@ class ODataCrudProvider {
|
|
|
31
28
|
return `${(0, odata_routes_1.odataRoot)(this._client.normalizedBaseUrl)}/${(0, entity_name_1.assertEntityName)(entity)}`;
|
|
32
29
|
}
|
|
33
30
|
_formatEntityKey(id) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (NUMERIC_PATTERN.test(id) || GUID_PATTERN.test(id)) {
|
|
31
|
+
// A numeric or GUID key is a bare literal; any other string key is quoted (quotes doubled).
|
|
32
|
+
if (/^\d+$/.test(id) || identifiers_1.GUID_RE.test(id)) {
|
|
37
33
|
return id;
|
|
38
34
|
}
|
|
39
35
|
return `'${id.replace(/'/g, "''")}'`;
|
|
@@ -60,20 +56,20 @@ class ODataCrudProvider {
|
|
|
60
56
|
}
|
|
61
57
|
async read(query) {
|
|
62
58
|
const { entity, count } = query;
|
|
63
|
-
const startTime = Date.now();
|
|
64
59
|
const queryParams = this._translator.buildQueryParams(query);
|
|
65
60
|
const url = this._buildEntityUrl(entity) + this._buildQueryString(queryParams);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
return this._client.request('read', url, async () => {
|
|
62
|
+
const headers = await this._client.getJsonHeaders();
|
|
63
|
+
return this._client.fetchWithAuth(url, async () => ({ headers }));
|
|
64
|
+
}, async (response, duration) => {
|
|
65
|
+
const body = await response.json().catch(() => ({}));
|
|
69
66
|
const value = this._extractODataValue(body);
|
|
70
67
|
const items = Array.isArray(value) ? value : value != null ? [value] : [];
|
|
71
|
-
const duration = Date.now() - startTime;
|
|
72
68
|
// `@odata.count` is the server-side total of all matching records (ignores $top/$skip).
|
|
73
69
|
const total = body && typeof body === 'object' && '@odata.count' in body
|
|
74
70
|
? Number(body['@odata.count'])
|
|
75
71
|
: undefined;
|
|
76
|
-
|
|
72
|
+
this._client.logSuccess('read', response.status, duration, {
|
|
77
73
|
entity,
|
|
78
74
|
select: query.columns?.join(','),
|
|
79
75
|
expand: query.odata?.expand?.join(','),
|
|
@@ -82,21 +78,10 @@ class ODataCrudProvider {
|
|
|
82
78
|
count,
|
|
83
79
|
resultCount: items.length,
|
|
84
80
|
total,
|
|
85
|
-
duration,
|
|
86
81
|
});
|
|
87
82
|
// Surface the server-side total only when a count was requested and present.
|
|
88
83
|
return count && total !== undefined ? { items, totalCount: total } : { items };
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
const duration = Date.now() - startTime;
|
|
92
|
-
log_1.default.error('creatio.crud.read.error', {
|
|
93
|
-
entity,
|
|
94
|
-
url,
|
|
95
|
-
error: String(error?.message ?? error),
|
|
96
|
-
duration,
|
|
97
|
-
});
|
|
98
|
-
throw error;
|
|
99
|
-
}
|
|
84
|
+
}, { errorPrefix: 'creatio_read_failed', logContext: { entity } });
|
|
100
85
|
}
|
|
101
86
|
async update({ entity, id, data }) {
|
|
102
87
|
const url = `${this._buildEntityUrl(entity)}(${this._formatEntityKey(id)})`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odata-crud-provider.js","sourceRoot":"","sources":["../../../../src/creatio/services/odata/odata-crud-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"odata-crud-provider.js","sourceRoot":"","sources":["../../../../src/creatio/services/odata/odata-crud-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,10 +12,9 @@ import { FilterNode, ReadQuery } from '../../contracts';
|
|
|
12
12
|
* embedded quotes doubled.
|
|
13
13
|
*/
|
|
14
14
|
export declare class ODataQueryTranslator {
|
|
15
|
-
private static readonly
|
|
16
|
-
private _isGuid;
|
|
15
|
+
private static readonly SAFE_PATH;
|
|
17
16
|
private _isIdish;
|
|
18
|
-
private
|
|
17
|
+
private _assertPath;
|
|
19
18
|
private _escapeStr;
|
|
20
19
|
/** Render a literal. `temporal` allows ISO date/datetime strings to be emitted unquoted
|
|
21
20
|
* (comparison operators); the string functions (contains/…) always quote. */
|
|
@@ -26,11 +25,11 @@ export declare class ODataQueryTranslator {
|
|
|
26
25
|
private _condition;
|
|
27
26
|
private _inCondition;
|
|
28
27
|
private _node;
|
|
29
|
-
/** Render a {@link FilterNode} into an OData `$filter` expression (or undefined if empty). */
|
|
30
|
-
translateFilter(node: FilterNode | undefined): string | undefined;
|
|
31
28
|
/** Combine the structured filter with an optional raw `$filter` escape hatch (AND-joined). */
|
|
32
29
|
private _resolveFilter;
|
|
33
30
|
private _orderBy;
|
|
31
|
+
/** Render a {@link FilterNode} into an OData `$filter` expression (or undefined if empty). */
|
|
32
|
+
translateFilter(node: FilterNode | undefined): string | undefined;
|
|
34
33
|
/** Build the encoded OData query-string params for a read. */
|
|
35
34
|
buildQueryParams(query: ReadQuery): string[];
|
|
36
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odata-query-translator.d.ts","sourceRoot":"","sources":["../../../../src/creatio/services/odata/odata-query-translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"odata-query-translator.d.ts","sourceRoot":"","sources":["../../../../src/creatio/services/odata/odata-query-translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5F;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAoB;IAKhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAyD;IAI1F,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,UAAU;IAIlB;kFAC8E;IAC9E,OAAO,CAAC,WAAW;IA4BnB;iFAC6E;IAC7E,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,KAAK;IAmBb,8FAA8F;IAC9F,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,QAAQ;IAOhB,8FAA8F;IACvF,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAIxE,8DAA8D;IACvD,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE;CA6BnD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ODataQueryTranslator = void 0;
|
|
4
|
+
const identifiers_1 = require("../identifiers");
|
|
4
5
|
const lookup_path_1 = require("../lookup-path");
|
|
5
6
|
/**
|
|
6
7
|
* Projects a neutral {@link ReadQuery} onto OData query-string parameters. This is the
|
|
@@ -15,17 +16,22 @@ const lookup_path_1 = require("../lookup-path");
|
|
|
15
16
|
* embedded quotes doubled.
|
|
16
17
|
*/
|
|
17
18
|
class ODataQueryTranslator {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
// A column path is an identifier, optionally navigation-dotted with `/` (e.g. `Contact/Name`).
|
|
20
|
+
// Filter/select/orderby field names are concatenated into the `$filter`/`$select`/`$orderby`
|
|
21
|
+
// expressions, so reject anything else to deny OData expression injection via a crafted column
|
|
22
|
+
// name (CWE-943) — filter *values* are already escaped/typed; this guards the *identifiers*.
|
|
23
|
+
static SAFE_PATH = /^[A-Za-z_][A-Za-z0-9_]*(\/[A-Za-z_][A-Za-z0-9_]*)*$/;
|
|
24
|
+
// A field whose name ends in `Id` (the scalar key `Id`, a lookup FK `XxxId`, or a nav `Xxx/Id`)
|
|
25
|
+
// — such a column is GUID-typed, so a GUID literal against it is emitted bare (see _literalFor).
|
|
22
26
|
_isIdish(field) {
|
|
23
|
-
return /
|
|
27
|
+
return /Id$/i.test(field);
|
|
28
|
+
}
|
|
29
|
+
_assertPath(field) {
|
|
30
|
+
if (!ODataQueryTranslator.SAFE_PATH.test(field)) {
|
|
31
|
+
throw new Error(`unsafe_odata_identifier:${field}`);
|
|
32
|
+
}
|
|
33
|
+
return field;
|
|
24
34
|
}
|
|
25
|
-
// ISO-8601 date / date-time. OData v4 expresses Edm.Date and Edm.DateTimeOffset literals
|
|
26
|
-
// UNQUOTED (e.g. `2026-06-01`, `2026-06-01T00:00:00Z`); quoting them 400s with
|
|
27
|
-
// "incompatible types Edm.DateTimeOffset and Edm.String".
|
|
28
|
-
static ISO_DATETIME = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2}(:\d{2})?(\.\d+)?(Z|[+-]\d{2}:?\d{2})?)?$/;
|
|
29
35
|
_escapeStr(value) {
|
|
30
36
|
return value.replace(/'/g, "''");
|
|
31
37
|
}
|
|
@@ -46,10 +52,12 @@ class ODataQueryTranslator {
|
|
|
46
52
|
const v = String(value);
|
|
47
53
|
// Bare (unquoted) GUID for any Id-typed path — the scalar key `Id`, a lookup FK
|
|
48
54
|
// `XxxId`, or a navigation `Xxx/Id`. Other strings (incl. `Xxx/Name`) are quoted.
|
|
49
|
-
if (
|
|
55
|
+
if ((0, identifiers_1.isGuid)(v) && this._isIdish(field)) {
|
|
50
56
|
return v;
|
|
51
57
|
}
|
|
52
|
-
|
|
58
|
+
// OData v4 expresses Edm.Date / Edm.DateTimeOffset literals UNQUOTED (quoting them 400s
|
|
59
|
+
// with "incompatible types Edm.DateTimeOffset and Edm.String").
|
|
60
|
+
if (temporal && (0, identifiers_1.isIsoDateLike)(v)) {
|
|
53
61
|
return v;
|
|
54
62
|
}
|
|
55
63
|
return `'${this._escapeStr(v)}'`;
|
|
@@ -59,10 +67,10 @@ class ODataQueryTranslator {
|
|
|
59
67
|
/** Navigate a lookup compared to a GUID to its `Id` path (`ContactId`/`Owner`/`Contact/Type`
|
|
60
68
|
* -> `…/Id`); non-GUID values and already-`Id` paths are left untouched. */
|
|
61
69
|
_lookupNavField(field, value) {
|
|
62
|
-
return
|
|
70
|
+
return (0, identifiers_1.isGuid)(value) ? (0, lookup_path_1.lookupIdPath)(field, '/') : field;
|
|
63
71
|
}
|
|
64
72
|
_condition(node) {
|
|
65
|
-
const field = String(node.field);
|
|
73
|
+
const field = this._assertPath(String(node.field));
|
|
66
74
|
const { op } = node;
|
|
67
75
|
if (op === 'isNull') {
|
|
68
76
|
return `${field} eq null`;
|
|
@@ -85,6 +93,7 @@ class ODataQueryTranslator {
|
|
|
85
93
|
if (!node.values.length) {
|
|
86
94
|
return undefined;
|
|
87
95
|
}
|
|
96
|
+
this._assertPath(String(node.field));
|
|
88
97
|
const parts = node.values.map((v) => {
|
|
89
98
|
const f = this._lookupNavField(node.field, v);
|
|
90
99
|
return `${f} eq ${this._literalFor(f, v)}`;
|
|
@@ -98,7 +107,9 @@ class ODataQueryTranslator {
|
|
|
98
107
|
if (node.kind === 'in') {
|
|
99
108
|
return this._inCondition(node);
|
|
100
109
|
}
|
|
101
|
-
const rendered = node.items
|
|
110
|
+
const rendered = node.items
|
|
111
|
+
.map((n) => this._node(n))
|
|
112
|
+
.filter((s) => Boolean(s));
|
|
102
113
|
if (!rendered.length) {
|
|
103
114
|
return undefined;
|
|
104
115
|
}
|
|
@@ -107,10 +118,6 @@ class ODataQueryTranslator {
|
|
|
107
118
|
}
|
|
108
119
|
return `(${rendered.join(` ${node.logic} `)})`;
|
|
109
120
|
}
|
|
110
|
-
/** Render a {@link FilterNode} into an OData `$filter` expression (or undefined if empty). */
|
|
111
|
-
translateFilter(node) {
|
|
112
|
-
return node ? this._node(node) : undefined;
|
|
113
|
-
}
|
|
114
121
|
/** Combine the structured filter with an optional raw `$filter` escape hatch (AND-joined). */
|
|
115
122
|
_resolveFilter(query) {
|
|
116
123
|
const structured = this.translateFilter(query.filter);
|
|
@@ -124,7 +131,11 @@ class ODataQueryTranslator {
|
|
|
124
131
|
if (!query.order || query.order.length === 0) {
|
|
125
132
|
return undefined;
|
|
126
133
|
}
|
|
127
|
-
return query.order.map((o) => `${o.field} ${o.dir}`).join(', ');
|
|
134
|
+
return query.order.map((o) => `${this._assertPath(o.field)} ${o.dir}`).join(', ');
|
|
135
|
+
}
|
|
136
|
+
/** Render a {@link FilterNode} into an OData `$filter` expression (or undefined if empty). */
|
|
137
|
+
translateFilter(node) {
|
|
138
|
+
return node ? this._node(node) : undefined;
|
|
128
139
|
}
|
|
129
140
|
/** Build the encoded OData query-string params for a read. */
|
|
130
141
|
buildQueryParams(query) {
|
|
@@ -134,7 +145,8 @@ class ODataQueryTranslator {
|
|
|
134
145
|
params.push(`$filter=${encodeURIComponent(filter)}`);
|
|
135
146
|
}
|
|
136
147
|
if (query.columns && query.columns.length > 0) {
|
|
137
|
-
|
|
148
|
+
const columns = query.columns.map((c) => this._assertPath(c));
|
|
149
|
+
params.push(`$select=${encodeURIComponent(columns.join(','))}`);
|
|
138
150
|
}
|
|
139
151
|
const expand = query.odata?.expand;
|
|
140
152
|
if (expand && expand.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odata-query-translator.js","sourceRoot":"","sources":["../../../../src/creatio/services/odata/odata-query-translator.ts"],"names":[],"mappings":";;;AACA,gDAA8C;AAE9C;;;;;;;;;;;GAWG;AACH,MAAa,oBAAoB;
|
|
1
|
+
{"version":3,"file":"odata-query-translator.js","sourceRoot":"","sources":["../../../../src/creatio/services/odata/odata-query-translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-info-provider.d.ts","sourceRoot":"","sources":["../../../src/creatio/services/user-info-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,qBAAa,gBAAiB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C,SAAgB,IAAI,+BAA+B;gBAEvC,MAAM,EAAE,iBAAiB;IAIrC,OAAO,CAAC,cAAc;IAIT,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"user-info-provider.d.ts","sourceRoot":"","sources":["../../../src/creatio/services/user-info-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,qBAAa,gBAAiB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C,SAAgB,IAAI,+BAA+B;gBAEvC,MAAM,EAAE,iBAAiB;IAIrC,OAAO,CAAC,cAAc;IAIT,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;CAiB3D"}
|
|
@@ -12,14 +12,14 @@ class UserInfoProvider {
|
|
|
12
12
|
}
|
|
13
13
|
async getCurrentUserInfo() {
|
|
14
14
|
const url = this._getServiceUrl();
|
|
15
|
-
return this._client.
|
|
15
|
+
return this._client.request('getCurrentUserInfo', url, async () => {
|
|
16
16
|
const requestInit = await this._client.createPostRequest();
|
|
17
17
|
return this._client.fetchWithAuth(url, async () => requestInit);
|
|
18
18
|
}, async (response, duration) => {
|
|
19
19
|
this._client.logSuccess('getCurrentUserInfo', response.status, duration);
|
|
20
20
|
const body = await response.json().catch(() => ({}));
|
|
21
21
|
return body;
|
|
22
|
-
},
|
|
22
|
+
}, { errorPrefix: 'creatio_get_current_user_info_failed' });
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
exports.UserInfoProvider = UserInfoProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-info-provider.js","sourceRoot":"","sources":["../../../src/creatio/services/user-info-provider.ts"],"names":[],"mappings":";;;AAIA,MAAa,gBAAgB;IACX,OAAO,CAAoB;IAE5B,IAAI,GAAG,2BAA2B,CAAC;IAEnD,YAAY,MAAyB;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,cAAc;QACrB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,wDAAwD,CAAC;IAClG,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"user-info-provider.js","sourceRoot":"","sources":["../../../src/creatio/services/user-info-provider.ts"],"names":[],"mappings":";;;AAIA,MAAa,gBAAgB;IACX,OAAO,CAAoB;IAE5B,IAAI,GAAG,2BAA2B,CAAC;IAEnD,YAAY,MAAyB;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,cAAc;QACrB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,wDAAwD,CAAC;IAClG,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAC1B,oBAAoB,EACpB,GAAG,EACH,KAAK,IAAI,EAAE;YACV,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC;QACjE,CAAC,EACD,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACzE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,IAAuB,CAAC;QAChC,CAAC,EACD,EAAE,WAAW,EAAE,sCAAsC,EAAE,CACvD,CAAC;IACH,CAAC;CACD;AA9BD,4CA8BC"}
|
package/dist/index.js
CHANGED
|
@@ -8,22 +8,46 @@ const consts_1 = require("./consts");
|
|
|
8
8
|
const creatio_1 = require("./creatio");
|
|
9
9
|
const log_1 = __importDefault(require("./log"));
|
|
10
10
|
const server_1 = require("./server");
|
|
11
|
+
const sessions_1 = require("./sessions");
|
|
11
12
|
const utils_1 = require("./utils");
|
|
12
13
|
let _httpInstance;
|
|
14
|
+
let _keepAlive;
|
|
15
|
+
let _tokenStore;
|
|
16
|
+
/** Single shared Creatio session exists only for legacy / client_credentials — the modes the
|
|
17
|
+
* proactive keep-alive applies to (broker/delegated/gateway are per-user / per-request). */
|
|
18
|
+
function isSingleSessionMode(kind) {
|
|
19
|
+
return kind === creatio_1.AuthProviderType.Legacy || kind === creatio_1.AuthProviderType.OAuth2;
|
|
20
|
+
}
|
|
13
21
|
async function main() {
|
|
22
|
+
(0, server_1.installHttpAgent)();
|
|
14
23
|
log_1.default.appStart({ env: { node: process.version, HTTP_MCP_PORT: consts_1.HTTP_MCP_PORT } });
|
|
24
|
+
// Auth mode is resolved in config-builder: explicit CREATIO_MCP_AUTH_MODE, else inferred
|
|
25
|
+
// (legacy/client_credentials from creds, otherwise delegated for this multi-user HTTP server).
|
|
15
26
|
const cfg = (0, config_builder_1.getCreatioClientConfig)();
|
|
27
|
+
// Broker holds users' Creatio tokens server-side; a Redis store makes that stateless +
|
|
28
|
+
// restart-durable + multi-instance (default stays in-memory). Only broker mode needs it.
|
|
29
|
+
if (cfg.auth.kind === creatio_1.AuthProviderType.Broker) {
|
|
30
|
+
const tokenStoreConfig = (0, config_builder_1.getTokenStoreConfig)();
|
|
31
|
+
if (tokenStoreConfig.kind === 'redis') {
|
|
32
|
+
_tokenStore = await (0, sessions_1.createTokenStore)(tokenStoreConfig);
|
|
33
|
+
sessions_1.SessionContext.instance.setTokenStore(_tokenStore);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
16
36
|
const provider = new creatio_1.CreatioServiceContext(cfg);
|
|
17
|
-
const readonlyMode = (0, utils_1.envBool)('
|
|
37
|
+
const readonlyMode = (0, utils_1.envBool)('CREATIO_MCP_READONLY', false);
|
|
18
38
|
const engines = new creatio_1.CreatioEngineManager(provider, { readonly: readonlyMode });
|
|
19
39
|
const server = new server_1.Server(engines, {
|
|
20
40
|
readonlyMode,
|
|
21
|
-
disableDataForge: (0, utils_1.envBool)('
|
|
22
|
-
disableGlobalSearch: (0, utils_1.envBool)('
|
|
41
|
+
disableDataForge: (0, utils_1.envBool)('CREATIO_MCP_DISABLE_DATAFORGE', false),
|
|
42
|
+
disableGlobalSearch: (0, utils_1.envBool)('CREATIO_MCP_DISABLE_GLOBAL_SEARCH', false),
|
|
23
43
|
});
|
|
24
|
-
const http = new server_1.HttpServer(server);
|
|
44
|
+
const http = new server_1.HttpServer(server, cfg);
|
|
25
45
|
_httpInstance = http;
|
|
26
46
|
await http.start(consts_1.HTTP_MCP_PORT);
|
|
47
|
+
if (isSingleSessionMode(cfg.auth.kind)) {
|
|
48
|
+
_keepAlive = new server_1.SessionKeepAlive((0, server_1.keepAliveIntervalMs)(), () => engines.user.getCurrentUserInfo());
|
|
49
|
+
_keepAlive.start();
|
|
50
|
+
}
|
|
27
51
|
}
|
|
28
52
|
let shuttingDown = false;
|
|
29
53
|
async function shutdown(signal) {
|
|
@@ -33,7 +57,9 @@ async function shutdown(signal) {
|
|
|
33
57
|
shuttingDown = true;
|
|
34
58
|
try {
|
|
35
59
|
log_1.default.appStop({ reason: signal || 'shutdown' });
|
|
60
|
+
_keepAlive?.stop();
|
|
36
61
|
await _httpInstance?.stop();
|
|
62
|
+
await _tokenStore?.close();
|
|
37
63
|
}
|
|
38
64
|
catch (err) {
|
|
39
65
|
log_1.default.error('shutdown.error', { error: String(err) });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/log.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type LogLevel = 'info' | 'warn' | 'error';
|
|
2
2
|
export type LogVerbosity = LogLevel | 'silent';
|
|
3
|
-
export type CreatioAuthKind = 'legacy' | 'oauth2'
|
|
3
|
+
export type CreatioAuthKind = 'legacy' | 'oauth2';
|
|
4
4
|
export interface LogConfig {
|
|
5
5
|
level?: LogLevel;
|
|
6
6
|
}
|
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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"}
|