@memberjunction/server 6.1.4 → 6.2.0-edge.1
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/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.d.ts +2 -0
- package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.js +5 -1
- package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
- package/dist/agentSessions/SessionManager.js +2 -2
- package/dist/agentSessions/remoteBrowserGoalEngine.d.ts +8 -0
- package/dist/agentSessions/remoteBrowserGoalEngine.d.ts.map +1 -1
- package/dist/agentSessions/remoteBrowserGoalEngine.js +21 -5
- package/dist/agentSessions/remoteBrowserGoalEngine.js.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.d.ts +2 -0
- package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.js +5 -1
- package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
- package/dist/auth/exampleNewUserSubClass.js +2 -1
- package/dist/auth/exampleNewUserSubClass.js.map +1 -1
- package/dist/auth/index.d.ts +20 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +20 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +8 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +21 -5
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.d.ts +9 -0
- package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.js +22 -10
- package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts +17 -15
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +65 -51
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/magicLink/index.d.ts +2 -2
- package/dist/auth/magicLink/index.d.ts.map +1 -1
- package/dist/auth/magicLink/index.js +2 -2
- package/dist/auth/magicLink/index.js.map +1 -1
- package/dist/auth/magicLink/magicLinkCore.d.ts +54 -33
- package/dist/auth/magicLink/magicLinkCore.d.ts.map +1 -1
- package/dist/auth/magicLink/magicLinkCore.js +61 -61
- package/dist/auth/magicLink/magicLinkCore.js.map +1 -1
- package/dist/auth/magicLink/redeemLanding.d.ts +4 -0
- package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
- package/dist/auth/magicLink/redeemLanding.js +12 -4
- package/dist/auth/magicLink/redeemLanding.js.map +1 -1
- package/dist/auth/magicLink/types.d.ts +4 -4
- package/dist/auth/principals.d.ts +2 -0
- package/dist/auth/principals.d.ts.map +1 -1
- package/dist/auth/principals.js +6 -2
- package/dist/auth/principals.js.map +1 -1
- package/dist/cache.d.ts +2 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +3 -1
- package/dist/cache.js.map +1 -1
- package/dist/config.d.ts +293 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -4
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +20 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +27 -19
- package/dist/context.js.map +1 -1
- package/dist/directives/Public.d.ts +2 -0
- package/dist/directives/Public.d.ts.map +1 -1
- package/dist/directives/Public.js +3 -1
- package/dist/directives/Public.js.map +1 -1
- package/dist/directives/RequireSystemUser.d.ts +2 -0
- package/dist/directives/RequireSystemUser.d.ts.map +1 -1
- package/dist/directives/RequireSystemUser.js +3 -1
- package/dist/directives/RequireSystemUser.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +266 -4
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +1304 -0
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +8 -2
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +7 -3
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.d.ts +3 -1
- package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.js +8 -4
- package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
- package/dist/generic/PushStatusResolver.d.ts +10 -1
- package/dist/generic/PushStatusResolver.d.ts.map +1 -1
- package/dist/generic/PushStatusResolver.js +11 -3
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +27 -1
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +64 -6
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -6
- package/dist/index.js.map +1 -1
- package/dist/integration/CustomColumnPromoter.d.ts +2 -0
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
- package/dist/integration/CustomColumnPromoter.js +5 -1
- package/dist/integration/CustomColumnPromoter.js.map +1 -1
- package/dist/integration/EntityMapLifecycle.d.ts +4 -0
- package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
- package/dist/integration/EntityMapLifecycle.js +10 -2
- package/dist/integration/EntityMapLifecycle.js.map +1 -1
- package/dist/logging/NoLog.d.ts +4 -0
- package/dist/logging/NoLog.d.ts.map +1 -1
- package/dist/logging/NoLog.js +10 -2
- package/dist/logging/NoLog.js.map +1 -1
- package/dist/logging/StartupLogger.d.ts +2 -0
- package/dist/logging/StartupLogger.d.ts.map +1 -1
- package/dist/logging/StartupLogger.js +5 -1
- package/dist/logging/StartupLogger.js.map +1 -1
- package/dist/logging/bootAudit.d.ts +11 -7
- package/dist/logging/bootAudit.d.ts.map +1 -1
- package/dist/logging/bootAudit.js +15 -7
- package/dist/logging/bootAudit.js.map +1 -1
- package/dist/logging/boundaryLogPayload.d.ts +4 -0
- package/dist/logging/boundaryLogPayload.d.ts.map +1 -1
- package/dist/logging/boundaryLogPayload.js +5 -1
- package/dist/logging/boundaryLogPayload.js.map +1 -1
- package/dist/logging/secretRedactor.d.ts +2 -0
- package/dist/logging/secretRedactor.d.ts.map +1 -1
- package/dist/logging/secretRedactor.js +8 -4
- package/dist/logging/secretRedactor.js.map +1 -1
- package/dist/logging/shortenForLog.d.ts +2 -0
- package/dist/logging/shortenForLog.d.ts.map +1 -1
- package/dist/logging/shortenForLog.js +7 -3
- package/dist/logging/shortenForLog.js.map +1 -1
- package/dist/logging/variablesLoggingMiddleware.d.ts +2 -0
- package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
- package/dist/logging/variablesLoggingMiddleware.js +8 -6
- package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
- package/dist/metadataRefreshSignal.d.ts +19 -0
- package/dist/metadataRefreshSignal.d.ts.map +1 -0
- package/dist/metadataRefreshSignal.js +45 -0
- package/dist/metadataRefreshSignal.js.map +1 -0
- package/dist/middleware/MJTenantFilterMiddleware.js +4 -4
- package/dist/multiTenancy/index.d.ts +8 -0
- package/dist/multiTenancy/index.d.ts.map +1 -1
- package/dist/multiTenancy/index.js +21 -5
- package/dist/multiTenancy/index.js.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.d.ts +5 -0
- package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.js +14 -10
- package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.d.ts +6 -6
- package/dist/realtimeWidget/WidgetSessionService.js +27 -27
- package/dist/realtimeWidget/host-identity.d.ts +5 -1
- package/dist/realtimeWidget/host-identity.d.ts.map +1 -1
- package/dist/realtimeWidget/host-identity.js +11 -3
- package/dist/realtimeWidget/host-identity.js.map +1 -1
- package/dist/realtimeWidget/index.d.ts +2 -2
- package/dist/realtimeWidget/index.d.ts.map +1 -1
- package/dist/realtimeWidget/index.js +2 -2
- package/dist/realtimeWidget/index.js.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts +21 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.js +16 -4
- package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
- package/dist/realtimeWidget/widgetCore.d.ts +48 -0
- package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetCore.js +38 -10
- package/dist/realtimeWidget/widgetCore.js.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.d.ts +10 -6
- package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +14 -6
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +3 -3
- package/dist/resolvers/FetchEntityVectorsResolver.js +2 -2
- package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.js +3 -3
- package/dist/resolvers/GeoResolver.d.ts +2 -2
- package/dist/resolvers/GeoResolver.js +4 -4
- package/dist/resolvers/GetDataResolver.d.ts +14 -0
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +43 -15
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +2 -2
- package/dist/resolvers/ListOperationsResolver.d.ts +20 -0
- package/dist/resolvers/ListOperationsResolver.d.ts.map +1 -1
- package/dist/resolvers/ListOperationsResolver.js +68 -28
- package/dist/resolvers/ListOperationsResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts +11 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +7 -3
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +2 -1
- package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +3 -3
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +37 -0
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +101 -11
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +5 -5
- package/dist/resolvers/RunAIAgentResolver.d.ts +10 -4
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +74 -42
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +2 -2
- package/dist/resolvers/RunTestResolver.js +5 -5
- package/dist/resolvers/SearchEntitiesResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchEntitiesResolver.js +3 -1
- package/dist/resolvers/SearchEntitiesResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.d.ts +1 -0
- package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.js +5 -0
- package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.js +1 -0
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.js.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts +8 -4
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +5 -5
- package/dist/resolvers/TaskGraphFrameResolver.d.ts +8 -1
- package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskGraphFrameResolver.js +6 -2
- package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +53 -4
- package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
- package/dist/resolvers/adhoc-query-helpers.d.ts +6 -0
- package/dist/resolvers/adhoc-query-helpers.d.ts.map +1 -1
- package/dist/resolvers/adhoc-query-helpers.js +10 -2
- package/dist/resolvers/adhoc-query-helpers.js.map +1 -1
- package/dist/resolvers/artifact-routing.d.ts +8 -8
- package/dist/resolvers/artifact-routing.js +2 -2
- package/dist/resolvers/artifact-routing.js.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.d.ts +10 -2
- package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.js +24 -8
- package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
- package/dist/resolvers/peaksSidecar.d.ts +4 -0
- package/dist/resolvers/peaksSidecar.d.ts.map +1 -1
- package/dist/resolvers/peaksSidecar.js +10 -2
- package/dist/resolvers/peaksSidecar.js.map +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts +28 -0
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +20 -4
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/MediaStreamHandler.d.ts +2 -0
- package/dist/rest/MediaStreamHandler.d.ts.map +1 -1
- package/dist/rest/MediaStreamHandler.js +10 -6
- package/dist/rest/MediaStreamHandler.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts +9 -0
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
- package/dist/rest/OAuthCallbackHandler.js +15 -3
- package/dist/rest/OAuthCallbackHandler.js.map +1 -1
- package/dist/rest/RESTEndpointHandler.d.ts +6 -4
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +15 -11
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/RealtimeSdpBrokerHandler.d.ts +5 -1
- package/dist/rest/RealtimeSdpBrokerHandler.d.ts.map +1 -1
- package/dist/rest/RealtimeSdpBrokerHandler.js +12 -4
- package/dist/rest/RealtimeSdpBrokerHandler.js.map +1 -1
- package/dist/rest/SignatureWebhookHandler.d.ts +2 -0
- package/dist/rest/SignatureWebhookHandler.d.ts.map +1 -1
- package/dist/rest/SignatureWebhookHandler.js +5 -1
- package/dist/rest/SignatureWebhookHandler.js.map +1 -1
- package/dist/rest/UploadTokenManager.d.ts +24 -8
- package/dist/rest/UploadTokenManager.d.ts.map +1 -1
- package/dist/rest/UploadTokenManager.js +53 -21
- package/dist/rest/UploadTokenManager.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +20 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +20 -4
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/mediaRange.d.ts +4 -0
- package/dist/rest/mediaRange.d.ts.map +1 -1
- package/dist/rest/mediaRange.js +10 -2
- package/dist/rest/mediaRange.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +4 -0
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +13 -7
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/serverExtensionReservedRoots.d.ts +2 -0
- package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
- package/dist/serverExtensionReservedRoots.js +5 -1
- package/dist/serverExtensionReservedRoots.js.map +1 -1
- package/dist/services/MJStorageBlobStore.d.ts +41 -0
- package/dist/services/MJStorageBlobStore.d.ts.map +1 -0
- package/dist/services/MJStorageBlobStore.js +160 -0
- package/dist/services/MJStorageBlobStore.js.map +1 -0
- package/dist/services/TaskGraphActionRunner.d.ts +13 -8
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +16 -15
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -3
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +12 -3
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +19 -8
- package/dist/util.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/FileResolverPeaks.test.ts +13 -13
- package/src/__tests__/ListOperationsResolver.test.ts +17 -17
- package/src/__tests__/MediaStreamHandler.test.ts +28 -28
- package/src/__tests__/NoLog.test.ts +11 -11
- package/src/__tests__/PrimaryKeyAlwaysMapped.test.ts +10 -10
- package/src/__tests__/RESTEndpointHandler.test.ts +14 -14
- package/src/__tests__/RealtimeBridgeResolver.test.ts +4 -2
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +229 -0
- package/src/__tests__/RealtimeSdpBrokerHandler.test.ts +6 -6
- package/src/__tests__/RefreshAdoptsNewColumns.test.ts +8 -8
- package/src/__tests__/RemoteBrowserGoalEngine.test.ts +18 -18
- package/src/__tests__/ResolverBase.isaPromotionCreate.test.ts +412 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +228 -0
- package/src/__tests__/SearchEntitiesResolver.readOnlyFallback.test.ts +78 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +129 -0
- package/src/__tests__/TaskGraphFrameResolver.test.ts +2 -2
- package/src/__tests__/TransactionGroupResolver.refusals.test.ts +290 -0
- package/src/__tests__/WidgetSessionService.test.ts +8 -4
- package/src/__tests__/adhoc-query-helpers.test.ts +21 -21
- package/src/__tests__/bootAudit.test.ts +11 -11
- package/src/__tests__/boundaryLogPayload.test.ts +6 -6
- package/src/__tests__/databaseAbstraction.test.ts +12 -6
- package/src/__tests__/getDataTokenRedaction.test.ts +7 -7
- package/src/__tests__/initializeProviders.refresh.test.ts +4 -4
- package/src/__tests__/magicLink.test.ts +73 -134
- package/src/__tests__/magicLinkService.consume.test.ts +224 -0
- package/src/__tests__/meetingRecordingRegistration.test.ts +12 -12
- package/src/__tests__/metadataRefreshSignal.test.ts +78 -0
- package/src/__tests__/multiTenancy.security.test.ts +40 -40
- package/src/__tests__/multiTenancy.test.ts +18 -18
- package/src/__tests__/newUsers.test.ts +24 -23
- package/src/__tests__/principals.test.ts +22 -22
- package/src/__tests__/pushStatusResolver.filter.test.ts +8 -8
- package/src/__tests__/secretRedactor.failOpen.test.ts +12 -12
- package/src/__tests__/secretRedactor.test.ts +12 -12
- package/src/__tests__/serverExtensionReservedRoots.test.ts +7 -7
- package/src/__tests__/subscriptionRedaction.test.ts +5 -5
- package/src/__tests__/unifiedAuth.test.ts +15 -9
- package/src/__tests__/visitorIdentity.resolve.test.ts +6 -6
- package/src/__tests__/widget.test.ts +45 -45
- package/src/__tests__/widgetGuestElevation.test.ts +7 -7
- package/src/__tests__/widgetHostIdentity.test.ts +14 -14
- package/src/agentSessions/ReturningVisitorRecap.ts +12 -1
- package/src/agentSessions/SessionManager.ts +2 -2
- package/src/agentSessions/remoteBrowserGoalEngine.ts +30 -5
- package/src/auth/AuthProviderCatalogRouter.ts +6 -1
- package/src/auth/__tests__/backward-compatibility.test.ts +3 -3
- package/src/auth/exampleNewUserSubClass.ts +2 -2
- package/src/auth/index.ts +43 -28
- package/src/auth/initializeProviders.ts +25 -5
- package/src/auth/magicLink/MagicLinkRouter.ts +28 -10
- package/src/auth/magicLink/MagicLinkService.ts +71 -52
- package/src/auth/magicLink/index.ts +7 -7
- package/src/auth/magicLink/magicLinkCore.ts +96 -64
- package/src/auth/magicLink/redeemLanding.ts +14 -4
- package/src/auth/magicLink/types.ts +54 -54
- package/src/auth/newUsers.ts +1 -1
- package/src/auth/principals.ts +11 -2
- package/src/cache.ts +4 -1
- package/src/config.ts +14 -4
- package/src/context.ts +37 -24
- package/src/directives/Public.ts +4 -1
- package/src/directives/RequireSystemUser.ts +4 -1
- package/src/generated/graphql-schemas/__mj.ts +933 -5
- package/src/generic/CacheInvalidationResolver.ts +12 -4
- package/src/generic/FireAndForgetHeartbeat.ts +19 -14
- package/src/generic/PushStatusResolver.ts +21 -7
- package/src/generic/ResolverBase.ts +66 -5
- package/src/generic/RunViewResolver.ts +22 -22
- package/src/generic/__tests__/FireAndForgetHeartbeat.test.ts +7 -7
- package/src/index.ts +34 -7
- package/src/integration/CustomColumnPromoter.ts +6 -1
- package/src/integration/EntityMapLifecycle.ts +20 -2
- package/src/logging/NoLog.ts +16 -2
- package/src/logging/StartupLogger.ts +6 -1
- package/src/logging/bootAudit.ts +26 -16
- package/src/logging/boundaryLogPayload.ts +8 -1
- package/src/logging/secretRedactor.ts +14 -9
- package/src/logging/shortenForLog.ts +8 -3
- package/src/logging/variablesLoggingMiddleware.ts +9 -6
- package/src/metadataRefreshSignal.ts +45 -0
- package/src/middleware/MJTenantFilterMiddleware.ts +4 -4
- package/src/multiTenancy/index.ts +29 -5
- package/src/realtimeWidget/WidgetRouter.ts +15 -10
- package/src/realtimeWidget/WidgetSessionService.ts +76 -76
- package/src/realtimeWidget/host-identity.ts +24 -10
- package/src/realtimeWidget/index.ts +3 -3
- package/src/realtimeWidget/visitorIdentity.ts +39 -8
- package/src/realtimeWidget/widgetCore.ts +75 -10
- package/src/realtimeWidget/widgetGuestElevation.ts +25 -12
- package/src/resolvers/AdhocQueryResolver.ts +3 -3
- package/src/resolvers/AgentSessionResolver.ts +3 -3
- package/src/resolvers/ColorResolver.ts +6 -6
- package/src/resolvers/ComponentRegistryResolver.ts +36 -36
- package/src/resolvers/EntityCommunicationsResolver.ts +4 -4
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +9 -9
- package/src/resolvers/FetchEntityVectorsResolver.ts +2 -2
- package/src/resolvers/FileResolver.ts +42 -42
- package/src/resolvers/GeoResolver.ts +4 -4
- package/src/resolvers/GetDataResolver.ts +50 -15
- package/src/resolvers/IntegrationDiscoveryResolver.ts +2 -2
- package/src/resolvers/ListOperationsResolver.ts +78 -28
- package/src/resolvers/MCPResolver.ts +30 -15
- package/src/resolvers/QueryResolver.ts +13 -13
- package/src/resolvers/QuerySystemUserResolver.ts +2 -1
- package/src/resolvers/RealtimeBridgeResolver.ts +3 -3
- package/src/resolvers/RealtimeClientSessionResolver.ts +126 -13
- package/src/resolvers/RemoteBrowserActionResolver.ts +5 -5
- package/src/resolvers/RunAIAgentResolver.ts +118 -76
- package/src/resolvers/RunAIPromptResolver.ts +22 -22
- package/src/resolvers/RunTemplateResolver.ts +4 -4
- package/src/resolvers/RunTestResolver.ts +25 -25
- package/src/resolvers/SearchEntitiesResolver.ts +3 -1
- package/src/resolvers/SearchKnowledgeResolver.ts +4 -0
- package/src/resolvers/SearchKnowledgeSystemUserResolver.ts +1 -0
- package/src/resolvers/SqlLoggingConfigResolver.ts +56 -56
- package/src/resolvers/TaskGraphFrameResolver.ts +37 -28
- package/src/resolvers/TelemetryResolver.ts +79 -79
- package/src/resolvers/TransactionGroupResolver.ts +57 -4
- package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +40 -38
- package/src/resolvers/__tests__/artifact-routing.test.ts +23 -23
- package/src/resolvers/adhoc-query-helpers.ts +19 -2
- package/src/resolvers/artifact-routing.ts +19 -19
- package/src/resolvers/meetingRecordingRegistration.ts +44 -10
- package/src/resolvers/peaksSidecar.ts +12 -2
- package/src/rest/EntityCRUDHandler.ts +24 -4
- package/src/rest/MediaStreamHandler.ts +11 -6
- package/src/rest/OAuthCallbackHandler.ts +25 -7
- package/src/rest/RESTEndpointHandler.ts +20 -15
- package/src/rest/RealtimeSdpBrokerHandler.ts +14 -4
- package/src/rest/SignatureWebhookHandler.ts +6 -1
- package/src/rest/UploadTokenManager.ts +66 -30
- package/src/rest/ViewOperationsHandler.ts +24 -4
- package/src/rest/mediaRange.ts +16 -6
- package/src/rest/setupRESTEndpoints.ts +24 -12
- package/src/serverExtensionReservedRoots.ts +6 -1
- package/src/services/MJStorageBlobStore.ts +209 -0
- package/src/services/TaskGraphActionRunner.ts +16 -15
- package/src/types.ts +21 -16
- package/src/util.ts +22 -9
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* @module @memberjunction/server/widget
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import {
|
|
15
|
+
import { BuildSessionClaims } from '../auth/magicLink/magicLinkCore.js';
|
|
16
16
|
import type { MagicLinkJWTClaims } from '../auth/magicLink/types.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -46,7 +46,7 @@ export interface WidgetInstanceEligibilityInput {
|
|
|
46
46
|
* comma-separated string (tolerated). Returns an empty array for null/blank/garbage
|
|
47
47
|
* — which makes the allowlist FAIL-CLOSED (no origin is allowed) by construction.
|
|
48
48
|
*/
|
|
49
|
-
export function
|
|
49
|
+
export function ParseAllowedOrigins(allowedOrigins: string | null | undefined): string[] {
|
|
50
50
|
const raw = allowedOrigins?.trim();
|
|
51
51
|
if (!raw) {
|
|
52
52
|
return [];
|
|
@@ -64,6 +64,11 @@ export function parseAllowedOrigins(allowedOrigins: string | null | undefined):
|
|
|
64
64
|
return list.filter((s): s is string => typeof s === 'string').map(normalizeOrigin).filter((s): s is string => !!s);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
/** @deprecated Use {@link ParseAllowedOrigins}. */
|
|
68
|
+
export function parseAllowedOrigins(allowedOrigins: string | null | undefined): string[] {
|
|
69
|
+
return ParseAllowedOrigins(allowedOrigins);
|
|
70
|
+
}
|
|
71
|
+
|
|
67
72
|
/** Lowercases + trims an origin and strips a trailing slash for stable comparison. */
|
|
68
73
|
function normalizeOrigin(origin: string): string {
|
|
69
74
|
return origin.trim().toLowerCase().replace(/\/+$/, '');
|
|
@@ -74,7 +79,7 @@ function normalizeOrigin(origin: string): string {
|
|
|
74
79
|
* JSON array (preferred, e.g. `["Whiteboard"]`) or a comma-separated string (tolerated). Returns an
|
|
75
80
|
* empty array for null/blank/garbage — the backwards-compatible default (no channels attached).
|
|
76
81
|
*/
|
|
77
|
-
export function
|
|
82
|
+
export function ParseEnabledChannels(enabledChannels: string | null | undefined): string[] {
|
|
78
83
|
const raw = enabledChannels?.trim();
|
|
79
84
|
if (!raw) {
|
|
80
85
|
return [];
|
|
@@ -89,12 +94,17 @@ export function parseEnabledChannels(enabledChannels: string | null | undefined)
|
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
96
|
|
|
97
|
+
/** @deprecated Use {@link ParseEnabledChannels}. */
|
|
98
|
+
export function parseEnabledChannels(enabledChannels: string | null | undefined): string[] {
|
|
99
|
+
return ParseEnabledChannels(enabledChannels);
|
|
100
|
+
}
|
|
101
|
+
|
|
92
102
|
/**
|
|
93
103
|
* FAIL-CLOSED origin check. The request's `Origin` header must exactly match one of
|
|
94
104
|
* the widget's allowed origins (after normalization). A missing request origin, or
|
|
95
105
|
* an empty allowlist, is rejected — a public mint endpoint must never accept "*".
|
|
96
106
|
*/
|
|
97
|
-
export function
|
|
107
|
+
export function IsOriginAllowed(requestOrigin: string | null | undefined, allowedOrigins: readonly string[]): boolean {
|
|
98
108
|
if (!requestOrigin || allowedOrigins.length === 0) {
|
|
99
109
|
return false;
|
|
100
110
|
}
|
|
@@ -102,8 +112,13 @@ export function isOriginAllowed(requestOrigin: string | null | undefined, allowe
|
|
|
102
112
|
return allowedOrigins.some((o) => o === candidate);
|
|
103
113
|
}
|
|
104
114
|
|
|
115
|
+
/** @deprecated Use {@link IsOriginAllowed}. */
|
|
116
|
+
export function isOriginAllowed(requestOrigin: string | null | undefined, allowedOrigins: readonly string[]): boolean {
|
|
117
|
+
return IsOriginAllowed(requestOrigin, allowedOrigins);
|
|
118
|
+
}
|
|
119
|
+
|
|
105
120
|
/** True when the requested modality (or the widget's default render) is enabled by the instance. */
|
|
106
|
-
export function
|
|
121
|
+
export function IsModalityEnabled(widgetModality: string, requested: 'Text' | 'Voice'): boolean {
|
|
107
122
|
const m = widgetModality.trim().toLowerCase();
|
|
108
123
|
if (m === 'both') {
|
|
109
124
|
return true;
|
|
@@ -111,25 +126,38 @@ export function isModalityEnabled(widgetModality: string, requested: 'Text' | 'V
|
|
|
111
126
|
return m === requested.toLowerCase();
|
|
112
127
|
}
|
|
113
128
|
|
|
129
|
+
/** @deprecated Use {@link IsModalityEnabled}. */
|
|
130
|
+
export function isModalityEnabled(widgetModality: string, requested: 'Text' | 'Voice'): boolean {
|
|
131
|
+
return IsModalityEnabled(widgetModality, requested);
|
|
132
|
+
}
|
|
133
|
+
|
|
114
134
|
/**
|
|
115
135
|
* Pure eligibility check for a mint: the widget must be Active and the request's
|
|
116
136
|
* origin must be on the allowlist. Returns an error code on the first failure so the
|
|
117
137
|
* router can map it to a precise HTTP status. Modality is checked separately by the
|
|
118
138
|
* voice path (W4) since a text mint is always permitted for an enabled widget.
|
|
119
139
|
*/
|
|
120
|
-
export function
|
|
140
|
+
export function EvaluateWidgetMint(
|
|
121
141
|
widget: WidgetInstanceEligibilityInput,
|
|
122
142
|
requestOrigin: string | null | undefined,
|
|
123
143
|
): { ok: boolean; errorCode?: WidgetMintErrorCode } {
|
|
124
144
|
if (widget.Status.trim().toLowerCase() !== 'active') {
|
|
125
145
|
return { ok: false, errorCode: 'disabled' };
|
|
126
146
|
}
|
|
127
|
-
if (!
|
|
147
|
+
if (!IsOriginAllowed(requestOrigin, ParseAllowedOrigins(widget.AllowedOrigins))) {
|
|
128
148
|
return { ok: false, errorCode: 'origin_not_allowed' };
|
|
129
149
|
}
|
|
130
150
|
return { ok: true };
|
|
131
151
|
}
|
|
132
152
|
|
|
153
|
+
/** @deprecated Use {@link EvaluateWidgetMint}. */
|
|
154
|
+
export function evaluateWidgetMint(
|
|
155
|
+
widget: WidgetInstanceEligibilityInput,
|
|
156
|
+
requestOrigin: string | null | undefined,
|
|
157
|
+
): { ok: boolean; errorCode?: WidgetMintErrorCode } {
|
|
158
|
+
return EvaluateWidgetMint(widget, requestOrigin);
|
|
159
|
+
}
|
|
160
|
+
|
|
133
161
|
/**
|
|
134
162
|
* Known automated-client User-Agent substrings (lowercased). A public mint endpoint is a cheap
|
|
135
163
|
* target for crawlers and scripted abuse; this catches the obvious non-browser callers. It is a
|
|
@@ -148,7 +176,7 @@ const BOT_USER_AGENT_MARKERS = [
|
|
|
148
176
|
* known automation marker. Deliberately conservative to avoid false positives on real browsers; pair
|
|
149
177
|
* with the origin allowlist + rate limits, which are the hard controls.
|
|
150
178
|
*/
|
|
151
|
-
export function
|
|
179
|
+
export function LooksLikeBot(userAgent: string | null | undefined): boolean {
|
|
152
180
|
const ua = (userAgent ?? '').trim().toLowerCase();
|
|
153
181
|
if (!ua) {
|
|
154
182
|
return true;
|
|
@@ -156,6 +184,11 @@ export function looksLikeBot(userAgent: string | null | undefined): boolean {
|
|
|
156
184
|
return BOT_USER_AGENT_MARKERS.some((marker) => ua.includes(marker));
|
|
157
185
|
}
|
|
158
186
|
|
|
187
|
+
/** @deprecated Use {@link LooksLikeBot}. */
|
|
188
|
+
export function looksLikeBot(userAgent: string | null | undefined): boolean {
|
|
189
|
+
return LooksLikeBot(userAgent);
|
|
190
|
+
}
|
|
191
|
+
|
|
159
192
|
/**
|
|
160
193
|
* Builds the guest-session JWT claims for a widget visitor. Reuses magic-link's
|
|
161
194
|
* `buildSessionClaims` (anonymous mode → the shared Anonymous principal + claims-based
|
|
@@ -163,7 +196,7 @@ export function looksLikeBot(userAgent: string | null | undefined): boolean {
|
|
|
163
196
|
* principal is locked to one widget instance. The role name carried here is the
|
|
164
197
|
* widget's restricted guest role (D5 backstop).
|
|
165
198
|
*/
|
|
166
|
-
export function
|
|
199
|
+
export function BuildWidgetGuestClaims(args: {
|
|
167
200
|
issuer: string;
|
|
168
201
|
audience: string;
|
|
169
202
|
widgetId: string;
|
|
@@ -191,7 +224,7 @@ export function buildWidgetGuestClaims(args: {
|
|
|
191
224
|
linkedRecordId?: string;
|
|
192
225
|
};
|
|
193
226
|
}): MagicLinkJWTClaims {
|
|
194
|
-
const claims =
|
|
227
|
+
const claims = BuildSessionClaims({
|
|
195
228
|
issuer: args.issuer,
|
|
196
229
|
audience: args.audience,
|
|
197
230
|
// No invite row for a direct-mint guest; the opaque session id stands in as the
|
|
@@ -229,3 +262,35 @@ export function buildWidgetGuestClaims(args: {
|
|
|
229
262
|
}
|
|
230
263
|
return claims;
|
|
231
264
|
}
|
|
265
|
+
|
|
266
|
+
/** @deprecated Use {@link BuildWidgetGuestClaims}. */
|
|
267
|
+
export function buildWidgetGuestClaims(args: {
|
|
268
|
+
issuer: string;
|
|
269
|
+
audience: string;
|
|
270
|
+
widgetId: string;
|
|
271
|
+
sessionId: string;
|
|
272
|
+
anonymousEmail: string;
|
|
273
|
+
applicationId: string;
|
|
274
|
+
guestRoleName: string;
|
|
275
|
+
nowSeconds: number;
|
|
276
|
+
ttlSeconds: number;
|
|
277
|
+
/**
|
|
278
|
+
* Host-asserted identity for a `host-identity` session. Its email/name are carried as
|
|
279
|
+
* INFORMATIONAL claims only — the principal-resolving `email`/`sub` remain the shared
|
|
280
|
+
* Anonymous principal, so a host can never escalate a guest into a real account.
|
|
281
|
+
*/
|
|
282
|
+
hostIdentity?: { email: string; firstName?: string; lastName?: string };
|
|
283
|
+
/**
|
|
284
|
+
* Returning-visitor anchor + linked identity (RV1/RV2/RV4) carried as claims so the VOICE path
|
|
285
|
+
* (server-created conversation) stamps the same fields the text path stamps client-side. Set only
|
|
286
|
+
* when the widget remembers returning visitors. Omitted ⇒ no returning-visitor claims (default off).
|
|
287
|
+
*/
|
|
288
|
+
returningVisitor?: {
|
|
289
|
+
visitorKey?: string;
|
|
290
|
+
lastConversationId?: string;
|
|
291
|
+
linkedEntityId?: string;
|
|
292
|
+
linkedRecordId?: string;
|
|
293
|
+
};
|
|
294
|
+
}): MagicLinkJWTClaims {
|
|
295
|
+
return BuildWidgetGuestClaims(args);
|
|
296
|
+
}
|
|
@@ -22,19 +22,19 @@ const WIDGET_ENTITY = 'MJ: Conversation Widget Instances';
|
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Resolved elevation context for a widget-guest agent run. Returned only when the request is a
|
|
25
|
-
* widget guest; the dispatch resolver runs the agent under {@link WidgetGuestRunContext.
|
|
26
|
-
* with {@link WidgetGuestRunContext.
|
|
25
|
+
* widget guest; the dispatch resolver runs the agent under {@link WidgetGuestRunContext.ElevatedUser}
|
|
26
|
+
* with {@link WidgetGuestRunContext.PinnedAgentId} (authoritative), keeping ownership checks under
|
|
27
27
|
* the guest principal.
|
|
28
28
|
*/
|
|
29
29
|
export interface WidgetGuestRunContext {
|
|
30
30
|
/** The trusted server principal under which the agent run (and its run-entity writes) executes. */
|
|
31
|
-
|
|
31
|
+
ElevatedUser: UserInfo;
|
|
32
32
|
/** The widget instance the guest session is bound to (authoritative config). */
|
|
33
|
-
|
|
33
|
+
Widget: MJConversationWidgetInstanceEntity;
|
|
34
34
|
/** The authoritative pinned support agent id — overrides any client-supplied agent id (D5). */
|
|
35
|
-
|
|
35
|
+
PinnedAgentId: string;
|
|
36
36
|
/** The guest's per-session scope id (Conversation.ExternalID), used to validate conversation ownership. */
|
|
37
|
-
|
|
37
|
+
SessionScopeId?: string;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
/**
|
|
@@ -47,7 +47,7 @@ export interface WidgetGuestRunContext {
|
|
|
47
47
|
* Never throws: a resolution failure (no system user, widget not found, read error) returns `null`,
|
|
48
48
|
* so the caller falls back to the normal (guest-principal) path rather than failing the request.
|
|
49
49
|
*/
|
|
50
|
-
export async function
|
|
50
|
+
export async function ResolveWidgetGuestRunContext(
|
|
51
51
|
userPayload: UserPayload,
|
|
52
52
|
provider: DatabaseProviderBase,
|
|
53
53
|
): Promise<WidgetGuestRunContext | null> {
|
|
@@ -70,13 +70,21 @@ export async function resolveWidgetGuestRunContext(
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
return {
|
|
73
|
-
elevatedUser,
|
|
74
|
-
widget,
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
ElevatedUser: elevatedUser,
|
|
74
|
+
Widget: widget,
|
|
75
|
+
PinnedAgentId: widget.PinnedAgentID,
|
|
76
|
+
SessionScopeId: guest.MagicLinkScope?.ResourceID,
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
/** @deprecated Use {@link ResolveWidgetGuestRunContext}. */
|
|
81
|
+
export async function resolveWidgetGuestRunContext(
|
|
82
|
+
userPayload: UserPayload,
|
|
83
|
+
provider: DatabaseProviderBase,
|
|
84
|
+
): Promise<WidgetGuestRunContext | null> {
|
|
85
|
+
return ResolveWidgetGuestRunContext(userPayload, provider);
|
|
86
|
+
}
|
|
87
|
+
|
|
80
88
|
/**
|
|
81
89
|
* Returns the identity a realtime session's AI-RUN-ENTITY work (delegated tool dispatch +
|
|
82
90
|
* observability run creation/append/finalize) should execute as: the trusted SYSTEM principal when
|
|
@@ -123,7 +131,7 @@ export function ResolveScopedAnonymousRunUser(contextUser: UserInfo): UserInfo {
|
|
|
123
131
|
* preserving the guest's `sessionId` — so progress/streaming PubSub still routes to the guest's
|
|
124
132
|
* live websocket, but all AI run-entity writes happen under the trusted server principal.
|
|
125
133
|
*/
|
|
126
|
-
export function
|
|
134
|
+
export function ElevateUserPayload(userPayload: UserPayload, elevatedUser: UserInfo): UserPayload {
|
|
127
135
|
return {
|
|
128
136
|
...userPayload,
|
|
129
137
|
email: elevatedUser.Email,
|
|
@@ -132,6 +140,11 @@ export function elevateUserPayload(userPayload: UserPayload, elevatedUser: UserI
|
|
|
132
140
|
};
|
|
133
141
|
}
|
|
134
142
|
|
|
143
|
+
/** @deprecated Use {@link ElevateUserPayload}. */
|
|
144
|
+
export function elevateUserPayload(userPayload: UserPayload, elevatedUser: UserInfo): UserPayload {
|
|
145
|
+
return ElevateUserPayload(userPayload, elevatedUser);
|
|
146
|
+
}
|
|
147
|
+
|
|
135
148
|
/** Loads a single widget instance by id under the elevated principal (read-only). */
|
|
136
149
|
async function loadWidgetById(
|
|
137
150
|
widgetId: string,
|
|
@@ -7,7 +7,7 @@ import { GetReadOnlyDataSource, GetReadOnlyProvider } from '../util.js';
|
|
|
7
7
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
8
8
|
import { IsScopeLimitedPrincipal } from '../auth/scopeLimitedPrincipal.js';
|
|
9
9
|
import { RunQueryResultType } from './QueryResolver.js';
|
|
10
|
-
import {
|
|
10
|
+
import { ExactTotalFromPage, ResolveAdhocTotalRowCount } from './adhoc-query-helpers.js';
|
|
11
11
|
import sql from 'mssql';
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -200,7 +200,7 @@ export class AdhocQueryResolver extends ResolverBase {
|
|
|
200
200
|
const recordset = (dataResult.recordset ?? []) as Record<string, unknown>[];
|
|
201
201
|
|
|
202
202
|
// Total already known from the page alone (unpaged, or a short page)? Skip the count.
|
|
203
|
-
const exact =
|
|
203
|
+
const exact = ExactTotalFromPage(startRow, recordset.length, maxRows);
|
|
204
204
|
if (exact != null || !countSQL) {
|
|
205
205
|
return { recordset, totalRowCount: exact ?? recordset.length };
|
|
206
206
|
}
|
|
@@ -209,7 +209,7 @@ export class AdhocQueryResolver extends ResolverBase {
|
|
|
209
209
|
const lowerBound = startRow + recordset.length;
|
|
210
210
|
try {
|
|
211
211
|
const countResult = await this.runSqlWithDeadline<{ TotalRowCount: number }>(ds, countSQL, deadline);
|
|
212
|
-
return { recordset, totalRowCount:
|
|
212
|
+
return { recordset, totalRowCount: ResolveAdhocTotalRowCount(countResult.recordset, lowerBound) };
|
|
213
213
|
} catch (countErr) {
|
|
214
214
|
const msg = countErr instanceof Error ? countErr.message : String(countErr);
|
|
215
215
|
LogError(`Ad-hoc query row-count failed; reporting a lower-bound total (${lowerBound}). ${msg}`);
|
|
@@ -25,15 +25,15 @@ import { SessionManager, SessionAuthorizationError } from '../agentSessions/inde
|
|
|
25
25
|
export class StartAgentSessionResult {
|
|
26
26
|
/** ID of the newly created session. */
|
|
27
27
|
@Field()
|
|
28
|
-
agentSessionId: string;
|
|
28
|
+
agentSessionId: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
29
29
|
|
|
30
30
|
/** Lifecycle status of the session (always `Active` on a successful start). */
|
|
31
31
|
@Field()
|
|
32
|
-
status: string;
|
|
32
|
+
status: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
33
33
|
|
|
34
34
|
/** ID of the conversation the session is attached to (supplied or freshly created). */
|
|
35
35
|
@Field()
|
|
36
|
-
conversationId: string;
|
|
36
|
+
conversationId: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
@@ -10,22 +10,22 @@ export class Color {
|
|
|
10
10
|
|
|
11
11
|
@Field(() => String)
|
|
12
12
|
@Public()
|
|
13
|
-
name: string;
|
|
13
|
+
name: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
14
14
|
|
|
15
15
|
@Field(() => String)
|
|
16
16
|
@Public()
|
|
17
|
-
createdZ: string;
|
|
17
|
+
createdZ: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
@ObjectType()
|
|
21
21
|
export class ColorNotification {
|
|
22
22
|
@Public()
|
|
23
23
|
@Field(() => String, { nullable: true })
|
|
24
|
-
message?: string;
|
|
24
|
+
message?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
25
25
|
|
|
26
26
|
@Public()
|
|
27
27
|
@Field((_type) => Date)
|
|
28
|
-
date!: Date;
|
|
28
|
+
date!: Date; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export interface ColorNotificationPayload {
|
|
@@ -36,13 +36,13 @@ export interface ColorNotificationPayload {
|
|
|
36
36
|
export class ColorResolver {
|
|
37
37
|
@Subscription(() => ColorNotification, { topics: 'COLOR' })
|
|
38
38
|
@Public()
|
|
39
|
-
colorSubscription(@Root() { message }: ColorNotificationPayload): ColorNotification {
|
|
39
|
+
colorSubscription(@Root() { message }: ColorNotificationPayload): ColorNotification { // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
40
40
|
return { message, date: new Date() };
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
@Query(() => [Color])
|
|
44
44
|
@Public()
|
|
45
|
-
async colors(@Ctx() _ctx: AppContext, @PubSub() pubSub: PubSubEngine) {
|
|
45
|
+
async colors(@Ctx() _ctx: AppContext, @PubSub() pubSub: PubSubEngine) { // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
46
46
|
const createdZ = new Date().toISOString();
|
|
47
47
|
|
|
48
48
|
pubSub.publish('COLOR', {
|
|
@@ -25,79 +25,79 @@ import { configInfo } from '../config.js';
|
|
|
25
25
|
@ObjectType()
|
|
26
26
|
class ComponentSpecWithHashType {
|
|
27
27
|
@Field(() => String, { nullable: true })
|
|
28
|
-
specification?: string; // JSON string of ComponentSpec
|
|
28
|
+
specification?: string; // JSON string of ComponentSpec — case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
29
29
|
|
|
30
30
|
@Field(() => String)
|
|
31
|
-
hash: string;
|
|
31
|
+
hash: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
32
32
|
|
|
33
33
|
@Field(() => Boolean)
|
|
34
|
-
notModified: boolean;
|
|
34
|
+
notModified: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
35
35
|
|
|
36
36
|
@Field(() => String, { nullable: true })
|
|
37
|
-
message?: string;
|
|
37
|
+
message?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
@InputType()
|
|
41
41
|
class SearchRegistryComponentsInput {
|
|
42
42
|
@Field({ nullable: true })
|
|
43
|
-
registryId?: string;
|
|
43
|
+
registryId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
44
44
|
|
|
45
45
|
@Field({ nullable: true })
|
|
46
|
-
namespace?: string;
|
|
46
|
+
namespace?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
47
47
|
|
|
48
48
|
@Field({ nullable: true })
|
|
49
|
-
query?: string;
|
|
49
|
+
query?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
50
50
|
|
|
51
51
|
@Field({ nullable: true })
|
|
52
|
-
type?: string;
|
|
52
|
+
type?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
53
53
|
|
|
54
54
|
@Field(() => [String], { nullable: true })
|
|
55
|
-
tags?: string[];
|
|
55
|
+
tags?: string[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
56
56
|
|
|
57
57
|
@Field({ nullable: true })
|
|
58
|
-
limit?: number;
|
|
58
|
+
limit?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
59
59
|
|
|
60
60
|
@Field({ nullable: true })
|
|
61
|
-
offset?: number;
|
|
61
|
+
offset?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
@ObjectType()
|
|
65
65
|
class RegistryComponentSearchResultType {
|
|
66
66
|
@Field(() => [String])
|
|
67
|
-
components: string[]; // Array of JSON strings of ComponentSpec
|
|
67
|
+
components: string[]; // Array of JSON strings of ComponentSpec — case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
68
68
|
|
|
69
69
|
@Field()
|
|
70
|
-
total: number;
|
|
70
|
+
total: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
71
71
|
|
|
72
72
|
@Field()
|
|
73
|
-
offset: number;
|
|
73
|
+
offset: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
74
74
|
|
|
75
75
|
@Field()
|
|
76
|
-
limit: number;
|
|
76
|
+
limit: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
@ObjectType()
|
|
80
80
|
class ComponentDependencyTreeType {
|
|
81
81
|
@Field()
|
|
82
|
-
componentId: string;
|
|
82
|
+
componentId: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
83
83
|
|
|
84
84
|
@Field({ nullable: true })
|
|
85
|
-
name?: string;
|
|
85
|
+
name?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
86
86
|
|
|
87
87
|
@Field({ nullable: true })
|
|
88
|
-
namespace?: string;
|
|
88
|
+
namespace?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
89
89
|
|
|
90
90
|
@Field({ nullable: true })
|
|
91
|
-
version?: string;
|
|
91
|
+
version?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
92
92
|
|
|
93
93
|
@Field({ nullable: true })
|
|
94
|
-
circular?: boolean;
|
|
94
|
+
circular?: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
95
95
|
|
|
96
96
|
@Field({ nullable: true })
|
|
97
|
-
totalCount?: number;
|
|
97
|
+
totalCount?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
98
98
|
|
|
99
99
|
@Field(() => [ComponentDependencyTreeType], { nullable: true })
|
|
100
|
-
dependencies?: ComponentDependencyTreeType[];
|
|
100
|
+
dependencies?: ComponentDependencyTreeType[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
/**
|
|
@@ -107,37 +107,37 @@ class ComponentDependencyTreeType {
|
|
|
107
107
|
@InputType()
|
|
108
108
|
class ComponentFeedbackInput {
|
|
109
109
|
@Field()
|
|
110
|
-
componentName: string;
|
|
110
|
+
componentName: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
111
111
|
|
|
112
112
|
@Field()
|
|
113
|
-
componentNamespace: string;
|
|
113
|
+
componentNamespace: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
114
114
|
|
|
115
115
|
@Field({ nullable: true })
|
|
116
|
-
componentVersion?: string;
|
|
116
|
+
componentVersion?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
117
117
|
|
|
118
118
|
@Field({ nullable: true })
|
|
119
|
-
registryName?: string;
|
|
119
|
+
registryName?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
120
120
|
|
|
121
121
|
@Field()
|
|
122
|
-
rating: number;
|
|
122
|
+
rating: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
123
123
|
|
|
124
124
|
@Field({ nullable: true })
|
|
125
|
-
feedbackType?: string;
|
|
125
|
+
feedbackType?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
126
126
|
|
|
127
127
|
@Field({ nullable: true })
|
|
128
|
-
comments?: string;
|
|
128
|
+
comments?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
129
129
|
|
|
130
130
|
@Field({ nullable: true })
|
|
131
|
-
conversationID?: string;
|
|
131
|
+
conversationID?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
132
132
|
|
|
133
133
|
@Field({ nullable: true })
|
|
134
|
-
conversationDetailID?: string;
|
|
134
|
+
conversationDetailID?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
135
135
|
|
|
136
136
|
@Field({ nullable: true })
|
|
137
|
-
reportID?: string;
|
|
137
|
+
reportID?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
138
138
|
|
|
139
139
|
@Field({ nullable: true })
|
|
140
|
-
dashboardID?: string;
|
|
140
|
+
dashboardID?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
/**
|
|
@@ -146,13 +146,13 @@ class ComponentFeedbackInput {
|
|
|
146
146
|
@ObjectType()
|
|
147
147
|
class ComponentFeedbackResponse {
|
|
148
148
|
@Field()
|
|
149
|
-
success: boolean;
|
|
149
|
+
success: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
150
150
|
|
|
151
151
|
@Field({ nullable: true })
|
|
152
|
-
feedbackID?: string;
|
|
152
|
+
feedbackID?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
153
153
|
|
|
154
154
|
@Field({ nullable: true })
|
|
155
|
-
error?: string;
|
|
155
|
+
error?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
/**
|
|
@@ -31,10 +31,10 @@ export class CommunicationProviderMessageType {
|
|
|
31
31
|
AdditionalAttributes: string;
|
|
32
32
|
|
|
33
33
|
@Field()
|
|
34
|
-
_mj_CreatedAt: Date;
|
|
34
|
+
_mj_CreatedAt: Date; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
35
35
|
|
|
36
36
|
@Field()
|
|
37
|
-
_mj_UpdatedAt: Date;
|
|
37
|
+
_mj_UpdatedAt: Date; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
38
38
|
|
|
39
39
|
@Field()
|
|
40
40
|
CommunicationProvider?: string;
|
|
@@ -73,10 +73,10 @@ export class TemplateInputType {
|
|
|
73
73
|
IsActive: boolean;
|
|
74
74
|
|
|
75
75
|
@Field()
|
|
76
|
-
_mj_CreatedAt: Date;
|
|
76
|
+
_mj_CreatedAt: Date; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
77
77
|
|
|
78
78
|
@Field()
|
|
79
|
-
_mj_UpdatedAt: Date;
|
|
79
|
+
_mj_UpdatedAt: Date; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
80
80
|
|
|
81
81
|
@Field({ nullable: true })
|
|
82
82
|
Category?: string;
|
|
@@ -13,13 +13,13 @@ const REMOTE_OP_PROGRESS_TOPIC = 'RemoteOperationProgress';
|
|
|
13
13
|
@InputType()
|
|
14
14
|
export class ExecuteRemoteOperationInput {
|
|
15
15
|
@Field()
|
|
16
|
-
operationKey: string;
|
|
16
|
+
operationKey: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
17
17
|
|
|
18
18
|
@Field()
|
|
19
|
-
inputJSON: string;
|
|
19
|
+
inputJSON: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
20
20
|
|
|
21
21
|
@Field()
|
|
22
|
-
invokeMode: string;
|
|
22
|
+
invokeMode: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Optional client-generated channel id. When set (attached mode over the wire), the server publishes every
|
|
@@ -27,7 +27,7 @@ export class ExecuteRemoteOperationInput {
|
|
|
27
27
|
* so the caller's `onProgress` fires live while the operation runs. Omitted for sync / no-progress calls.
|
|
28
28
|
*/
|
|
29
29
|
@Field(() => String, { nullable: true })
|
|
30
|
-
progressChannelId?: string;
|
|
30
|
+
progressChannelId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/** A single streamed progress envelope delivered over the `RemoteOperationProgress` subscription. */
|
|
@@ -45,19 +45,19 @@ export class RemoteOperationProgressNotification {
|
|
|
45
45
|
@ObjectType()
|
|
46
46
|
export class ExecuteRemoteOperationResultType {
|
|
47
47
|
@Field(() => Boolean)
|
|
48
|
-
success: boolean;
|
|
48
|
+
success: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
49
49
|
|
|
50
50
|
@Field(() => String, { nullable: true })
|
|
51
|
-
resultCode?: string;
|
|
51
|
+
resultCode?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
52
52
|
|
|
53
53
|
@Field(() => String, { nullable: true })
|
|
54
|
-
outputJSON?: string;
|
|
54
|
+
outputJSON?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
55
55
|
|
|
56
56
|
@Field(() => String, { nullable: true })
|
|
57
|
-
handle?: string;
|
|
57
|
+
handle?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
58
58
|
|
|
59
59
|
@Field(() => String, { nullable: true })
|
|
60
|
-
errorMessage?: string;
|
|
60
|
+
errorMessage?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/**
|
|
@@ -5,7 +5,7 @@ import { MJEntityDocumentEntity, MJVectorIndexEntity, MJVectorDatabaseEntity } f
|
|
|
5
5
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
6
6
|
import { GetAIAPIKey } from '@memberjunction/ai';
|
|
7
7
|
import { VectorDBBase } from '@memberjunction/ai-vectordb';
|
|
8
|
-
import { MJGlobal, UUIDsEqual } from '@memberjunction/global';
|
|
8
|
+
import { EscapeSQLString, MJGlobal, UUIDsEqual } from '@memberjunction/global';
|
|
9
9
|
|
|
10
10
|
/* ───── GraphQL types ───── */
|
|
11
11
|
|
|
@@ -144,7 +144,7 @@ export class FetchEntityVectorsResolver extends ResolverBase {
|
|
|
144
144
|
const rv = new RunView();
|
|
145
145
|
const result = await rv.RunView<MJEntityDocumentEntity>({
|
|
146
146
|
EntityName: 'MJ: Entity Documents',
|
|
147
|
-
ExtraFilter: `ID='${entityDocumentID}'`,
|
|
147
|
+
ExtraFilter: `ID='${EscapeSQLString(entityDocumentID)}'`,
|
|
148
148
|
ResultType: 'entity_object',
|
|
149
149
|
}, contextUser);
|
|
150
150
|
|