@memberjunction/server 6.2.0-edge.5 → 6.2.0-edge.7
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 +96 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/BridgeHostInstance.d.ts +8 -3
- package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -1
- package/dist/agentSessions/BridgeHostInstance.js +14 -4
- package/dist/agentSessions/BridgeHostInstance.js.map +1 -1
- package/dist/agentSessions/HandoffOfferExpiry.d.ts +10 -0
- package/dist/agentSessions/HandoffOfferExpiry.d.ts.map +1 -0
- package/dist/agentSessions/HandoffOfferExpiry.js +18 -0
- package/dist/agentSessions/HandoffOfferExpiry.js.map +1 -0
- package/dist/agentSessions/ReturningVisitorRecap.js +1 -0
- package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
- package/dist/agentSessions/SessionJanitor.d.ts +34 -11
- package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
- package/dist/agentSessions/SessionJanitor.js +88 -44
- package/dist/agentSessions/SessionJanitor.js.map +1 -1
- package/dist/agentSessions/SessionManager.d.ts +29 -9
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +62 -16
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/agentSessions/conversationBrowsers.d.ts +61 -0
- package/dist/agentSessions/conversationBrowsers.d.ts.map +1 -0
- package/dist/agentSessions/conversationBrowsers.js +118 -0
- package/dist/agentSessions/conversationBrowsers.js.map +1 -0
- package/dist/agentSessions/sessionDeadline.d.ts +43 -0
- package/dist/agentSessions/sessionDeadline.d.ts.map +1 -0
- package/dist/agentSessions/sessionDeadline.js +68 -0
- package/dist/agentSessions/sessionDeadline.js.map +1 -0
- package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
- package/dist/auth/APIKeyScopeAuth.js +5 -4
- package/dist/auth/APIKeyScopeAuth.js.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.js +2 -0
- package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +51 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +10 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +37 -1
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/localDevAuth.d.ts +79 -0
- package/dist/auth/localDevAuth.d.ts.map +1 -0
- package/dist/auth/localDevAuth.js +439 -0
- package/dist/auth/localDevAuth.js.map +1 -0
- package/dist/auth/loginEmailResolution.d.ts +41 -0
- package/dist/auth/loginEmailResolution.d.ts.map +1 -0
- package/dist/auth/loginEmailResolution.js +47 -0
- package/dist/auth/loginEmailResolution.js.map +1 -0
- package/dist/auth/magicLink/MagicLinkKeys.d.ts +51 -3
- package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkKeys.js +130 -13
- package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.d.ts +3 -0
- package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.js +23 -5
- package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts +39 -5
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +221 -9
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/magicLink/index.d.ts +1 -1
- package/dist/auth/magicLink/index.d.ts.map +1 -1
- package/dist/auth/magicLink/index.js +1 -1
- package/dist/auth/magicLink/index.js.map +1 -1
- package/dist/auth/magicLink/redeemLanding.d.ts +2 -2
- package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
- package/dist/auth/magicLink/redeemLanding.js +7 -4
- package/dist/auth/magicLink/redeemLanding.js.map +1 -1
- package/dist/auth/magicLink/types.d.ts +39 -3
- package/dist/auth/magicLink/types.d.ts.map +1 -1
- package/dist/auth/magicLink/types.js +0 -4
- package/dist/auth/magicLink/types.js.map +1 -1
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +1 -0
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/auth/sessionUserClone.d.ts +1 -1
- package/dist/auth/sessionUserClone.d.ts.map +1 -1
- package/dist/auth/sessionUserClone.js +3 -2
- package/dist/auth/sessionUserClone.js.map +1 -1
- package/dist/backgroundSweepConfigUnits.d.ts +231 -0
- package/dist/backgroundSweepConfigUnits.d.ts.map +1 -0
- package/dist/backgroundSweepConfigUnits.js +180 -0
- package/dist/backgroundSweepConfigUnits.js.map +1 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts +292 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +442 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -0
- package/dist/broadcast/index.d.ts +6 -0
- package/dist/broadcast/index.d.ts.map +1 -0
- package/dist/broadcast/index.js +6 -0
- package/dist/broadcast/index.js.map +1 -0
- package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts +43 -0
- package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js +144 -0
- package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js.map +1 -0
- package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts +46 -0
- package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js +149 -0
- package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js.map +1 -0
- package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts +49 -0
- package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js +131 -0
- package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js.map +1 -0
- package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts +24 -0
- package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js +51 -0
- package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js.map +1 -0
- package/dist/cache.d.ts +3 -2
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js.map +1 -1
- package/dist/config.d.ts +1402 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +120 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +5 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +64 -12
- package/dist/context.js.map +1 -1
- package/dist/coreRoutes.d.ts +3 -1
- package/dist/coreRoutes.d.ts.map +1 -1
- package/dist/coreRoutes.js +20 -4
- package/dist/coreRoutes.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +863 -14
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +4167 -62
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +50 -30
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +154 -79
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts +11 -0
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js +29 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
- package/dist/generic/PubSubManager.d.ts +10 -0
- package/dist/generic/PubSubManager.d.ts.map +1 -1
- package/dist/generic/PubSubManager.js +44 -1
- package/dist/generic/PubSubManager.js.map +1 -1
- package/dist/generic/PushStatusResolver.d.ts +39 -6
- package/dist/generic/PushStatusResolver.d.ts.map +1 -1
- package/dist/generic/PushStatusResolver.js +93 -11
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +114 -29
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +509 -220
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +15 -3
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +126 -20
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/generic/actionOutputFieldSecurity.d.ts +26 -0
- package/dist/generic/actionOutputFieldSecurity.d.ts.map +1 -0
- package/dist/generic/actionOutputFieldSecurity.js +47 -0
- package/dist/generic/actionOutputFieldSecurity.js.map +1 -0
- package/dist/generic/fieldSecurityTransport.d.ts +30 -0
- package/dist/generic/fieldSecurityTransport.d.ts.map +1 -0
- package/dist/generic/fieldSecurityTransport.js +30 -0
- package/dist/generic/fieldSecurityTransport.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +262 -84
- package/dist/index.js.map +1 -1
- package/dist/integration/ConnectionPause.d.ts +121 -0
- package/dist/integration/ConnectionPause.d.ts.map +1 -0
- package/dist/integration/ConnectionPause.js +183 -0
- package/dist/integration/ConnectionPause.js.map +1 -0
- package/dist/integration/CustomColumnPromoter.d.ts +72 -6
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
- package/dist/integration/CustomColumnPromoter.js +93 -47
- package/dist/integration/CustomColumnPromoter.js.map +1 -1
- package/dist/integration/EntityMapLifecycle.d.ts +78 -4
- package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
- package/dist/integration/EntityMapLifecycle.js +199 -5
- package/dist/integration/EntityMapLifecycle.js.map +1 -1
- package/dist/integration/InactiveRowWarnings.d.ts +31 -0
- package/dist/integration/InactiveRowWarnings.d.ts.map +1 -1
- package/dist/integration/InactiveRowWarnings.js +29 -0
- package/dist/integration/InactiveRowWarnings.js.map +1 -1
- package/dist/integration/ObjectNamesByID.d.ts +28 -0
- package/dist/integration/ObjectNamesByID.d.ts.map +1 -0
- package/dist/integration/ObjectNamesByID.js +87 -0
- package/dist/integration/ObjectNamesByID.js.map +1 -0
- package/dist/integration/PostRestartIntrospect.d.ts +26 -0
- package/dist/integration/PostRestartIntrospect.d.ts.map +1 -0
- package/dist/integration/PostRestartIntrospect.js +27 -0
- package/dist/integration/PostRestartIntrospect.js.map +1 -0
- package/dist/integration/RSUPostRestartProgress.d.ts +176 -0
- package/dist/integration/RSUPostRestartProgress.d.ts.map +1 -0
- package/dist/integration/RSUPostRestartProgress.js +323 -0
- package/dist/integration/RSUPostRestartProgress.js.map +1 -0
- package/dist/integration/RSUProgressBridge.d.ts +41 -2
- package/dist/integration/RSUProgressBridge.d.ts.map +1 -1
- package/dist/integration/RSUProgressBridge.js +84 -1
- package/dist/integration/RSUProgressBridge.js.map +1 -1
- package/dist/integration/RunArtifactAuthorization.d.ts +39 -0
- package/dist/integration/RunArtifactAuthorization.d.ts.map +1 -0
- package/dist/integration/RunArtifactAuthorization.js +45 -0
- package/dist/integration/RunArtifactAuthorization.js.map +1 -0
- package/dist/integration/SchemaRefreshLaunch.d.ts +9 -0
- package/dist/integration/SchemaRefreshLaunch.d.ts.map +1 -1
- package/dist/integration/SchemaRefreshLaunch.js +3 -2
- package/dist/integration/SchemaRefreshLaunch.js.map +1 -1
- package/dist/integration/ScopedFieldsForBuild.d.ts +46 -0
- package/dist/integration/ScopedFieldsForBuild.d.ts.map +1 -0
- package/dist/integration/ScopedFieldsForBuild.js +91 -0
- package/dist/integration/ScopedFieldsForBuild.js.map +1 -0
- package/dist/integration/TargetConfigGuard.d.ts +40 -0
- package/dist/integration/TargetConfigGuard.d.ts.map +1 -0
- package/dist/integration/TargetConfigGuard.js +40 -0
- package/dist/integration/TargetConfigGuard.js.map +1 -0
- package/dist/logging/variablesLoggingMiddleware.d.ts +12 -0
- package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
- package/dist/logging/variablesLoggingMiddleware.js +50 -1
- package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
- package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -1
- package/dist/realtimeSessions/SessionVerificationPortsBase.js +1 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -1
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts +8 -6
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
- package/dist/realtimeSessions/ownedRealtimeSession.js +14 -6
- package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
- package/dist/realtimeSessions/sessionAccess.d.ts +103 -11
- package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
- package/dist/realtimeSessions/sessionAccess.js +147 -22
- package/dist/realtimeSessions/sessionAccess.js.map +1 -1
- package/dist/realtimeSessions/sessionConfigStamps.js +1 -1
- package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -1
- package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -1
- package/dist/realtimeSessions/subscriptionAuthorization.js +5 -2
- package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -1
- package/dist/realtimeSessions/verificationWorkflow.d.ts +2 -0
- package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -1
- package/dist/realtimeSessions/verificationWorkflow.js +1 -1
- package/dist/realtimeSessions/verificationWorkflow.js.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.js +19 -3
- package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.d.ts +67 -7
- package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.js +203 -19
- package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
- package/dist/realtimeWidget/host-identity.d.ts +1 -1
- package/dist/realtimeWidget/host-identity.js +1 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.js +1 -0
- package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
- package/dist/realtimeWidget/widgetCore.d.ts +20 -1
- package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetCore.js +21 -8
- package/dist/realtimeWidget/widgetCore.js.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.d.ts +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +3 -1
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/requestOrigin.d.ts +22 -0
- package/dist/requestOrigin.d.ts.map +1 -0
- package/dist/requestOrigin.js +60 -0
- package/dist/requestOrigin.js.map +1 -0
- package/dist/resolvers/ActionResolver.d.ts +19 -1
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +63 -12
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +1 -0
- package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
- package/dist/resolvers/AgentRunStatusPublisher.d.ts +18 -4
- package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
- package/dist/resolvers/AgentRunStatusPublisher.js +32 -8
- package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
- package/dist/resolvers/AgentSessionResolver.d.ts +10 -4
- package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/AgentSessionResolver.js +44 -17
- package/dist/resolvers/AgentSessionResolver.js.map +1 -1
- package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
- package/dist/resolvers/AutotagPipelineResolver.js +2 -1
- package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.js +2 -0
- package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
- package/dist/resolvers/EntityCommunicationsResolver.d.ts +13 -1
- package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityCommunicationsResolver.js +50 -14
- package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
- package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts +6 -0
- package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts.map +1 -1
- package/dist/resolvers/ExecuteRemoteOperationResolver.js +30 -7
- package/dist/resolvers/ExecuteRemoteOperationResolver.js.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts +28 -0
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js +117 -21
- package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
- package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
- package/dist/resolvers/FileCategoryResolver.js +1 -0
- package/dist/resolvers/FileCategoryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.d.ts +5 -0
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +13 -4
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +34 -13
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +401 -11
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +2713 -1290
- package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +13 -2
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts +8 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +31 -3
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/PipelineProgressResolver.d.ts +6 -0
- package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -1
- package/dist/resolvers/PipelineProgressResolver.js +5 -3
- package/dist/resolvers/PipelineProgressResolver.js.map +1 -1
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +20 -6
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.d.ts +38 -0
- package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +184 -88
- package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
- package/dist/resolvers/RSUResolver.d.ts.map +1 -1
- package/dist/resolvers/RSUResolver.js +12 -0
- package/dist/resolvers/RSUResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +1 -0
- package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +22 -2
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +118 -33
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts +62 -10
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +224 -39
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +80 -16
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +388 -125
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts +5 -3
- package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +19 -18
- package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +7 -5
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTestResolver.js +3 -1
- package/dist/resolvers/RunTestResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +4 -0
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
- package/dist/resolvers/TestQuerySQLResolver.js +1 -0
- package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts +17 -2
- package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +60 -15
- package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
- package/dist/resolvers/UserViewResolver.d.ts +1 -1
- package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
- package/dist/resolvers/UserViewResolver.js +2 -1
- package/dist/resolvers/UserViewResolver.js.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.js +2 -0
- package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts +6 -0
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +19 -5
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/MediaAccessKeys.d.ts.map +1 -1
- package/dist/rest/MediaAccessKeys.js +6 -2
- package/dist/rest/MediaAccessKeys.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
- package/dist/rest/OAuthCallbackHandler.js +11 -5
- package/dist/rest/OAuthCallbackHandler.js.map +1 -1
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +8 -5
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
- package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
- package/dist/rest/RealtimeRecordingHandler.js +6 -8
- package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +6 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +24 -6
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +3 -1
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +11 -2
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/serverRoleConfigUnits.d.ts +29 -0
- package/dist/serverRoleConfigUnits.d.ts.map +1 -0
- package/dist/serverRoleConfigUnits.js +33 -0
- package/dist/serverRoleConfigUnits.js.map +1 -0
- package/dist/services/DurableEntityActionTaskSubmitter.d.ts.map +1 -1
- package/dist/services/DurableEntityActionTaskSubmitter.js +6 -1
- package/dist/services/DurableEntityActionTaskSubmitter.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +2 -26
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/services/TaskGraphAgentRunner.d.ts +6 -0
- package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphAgentRunner.js +38 -0
- package/dist/services/TaskGraphAgentRunner.js.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.d.ts +5 -0
- package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.js +43 -15
- package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
- package/dist/services/WorkQueueHostService.d.ts +2 -1
- package/dist/services/WorkQueueHostService.d.ts.map +1 -1
- package/dist/services/WorkQueueHostService.js +19 -4
- package/dist/services/WorkQueueHostService.js.map +1 -1
- package/dist/services/workQueueConfig.d.ts +2 -2
- package/dist/services/workQueueConfig.js +5 -5
- package/dist/services/workQueueConfig.js.map +1 -1
- package/dist/sharedCache.js +1 -1
- package/dist/sharedCache.js.map +1 -1
- package/dist/types.d.ts +40 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +98 -98
- package/src/__tests__/APIKeyScopeAuth.test.ts +4 -8
- package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -0
- package/src/__tests__/ActiveOperations.test.ts +68 -0
- package/src/__tests__/AdhocQueryResolver.dialect.test.ts +137 -0
- package/src/__tests__/AgentRunStatusPublisher.test.ts +49 -0
- package/src/__tests__/AgentSessionResolver.ownership.test.ts +150 -0
- package/src/__tests__/AssertTargetConfigs.test.ts +75 -0
- package/src/__tests__/BatchApplyParity.test.ts +109 -0
- package/src/__tests__/BridgeHostInstance.test.ts +42 -0
- package/src/__tests__/CollectInactiveRowWarnings.test.ts +115 -0
- package/src/__tests__/ConnectionPause.test.ts +192 -0
- package/src/__tests__/ConnectionPauseResolver.test.ts +166 -0
- package/src/__tests__/ConnectionPauseSave.test.ts +143 -0
- package/src/__tests__/CustomColumnPromoterCompletion.test.ts +142 -0
- package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
- package/src/__tests__/DeleteConnectionRemovesPerConnectionCatalog.test.ts +51 -0
- package/src/__tests__/DetachedDiscoveryStart.test.ts +65 -0
- package/src/__tests__/DurableEntityActionTaskSubmitter.test.ts +73 -0
- package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
- package/src/__tests__/EntityMapLifecycle.rekey.test.ts +252 -0
- package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
- package/src/__tests__/ExecuteRemoteOperationResolver.test.ts +213 -0
- package/src/__tests__/FetchEntityVectorsResolver.test.ts +206 -3
- package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
- package/src/__tests__/HandoffOfferExpiry.test.ts +40 -0
- package/src/__tests__/IntegrationRunArtifactAuthorization.test.ts +126 -0
- package/src/__tests__/MagicLinkKeys.test.ts +102 -0
- package/src/__tests__/MediaAccessKeys.test.ts +57 -10
- package/src/__tests__/NewArrivalsDefaultDisabled.test.ts +50 -0
- package/src/__tests__/ObjectNamesByID.test.ts +176 -0
- package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
- package/src/__tests__/PostRestartMapsInCatalogScope.test.ts +146 -0
- package/src/__tests__/QuerySystemUserResolver.childRows.test.ts +80 -0
- package/src/__tests__/QuerySystemUserResolver.collision.test.ts +200 -0
- package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
- package/src/__tests__/QuerySystemUserResolver.permissions.test.ts +132 -0
- package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
- package/src/__tests__/RSUPostRestartProgress.test.ts +343 -0
- package/src/__tests__/RSUProgressBridge.test.ts +188 -5
- package/src/__tests__/RSUStartupSweepWiring.test.ts +30 -0
- package/src/__tests__/ReactivateRefreshMessage.test.ts +10 -3
- package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +346 -46
- package/src/__tests__/{RefreshAdoptsNewColumns.test.ts → RefreshReportsNewColumns.test.ts} +25 -16
- package/src/__tests__/RemoteBrowserActionRecovery.test.ts +287 -0
- package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +3 -0
- package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +100 -0
- package/src/__tests__/RemoteBrowserAudioStream.test.ts +3 -0
- package/src/__tests__/RemoteBrowserSnapshot.test.ts +3 -0
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +344 -14
- package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
- package/src/__tests__/ResolverBase.encryptedApiZeroReencrypt.test.ts +307 -0
- package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +227 -0
- package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +83 -1
- package/src/__tests__/ResolverBase.publishStatusUpdate.test.ts +68 -0
- package/src/__tests__/ResolverBase.userViewCacheAndDedup.test.ts +130 -0
- package/src/__tests__/RunAIAgentResolver.branch.test.ts +72 -13
- package/src/__tests__/RunAIAgentResolver.consultPredecessor.test.ts +289 -0
- package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
- package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
- package/src/__tests__/RunAIAgentResolver.handoff.test.ts +649 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +19 -27
- package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +10 -2
- package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
- package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +91 -13
- package/src/__tests__/RunTemplateResolver.test.ts +35 -2
- package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
- package/src/__tests__/SchemaEvolutionCustomColumns.test.ts +119 -0
- package/src/__tests__/SchemaRefreshLaunch.test.ts +24 -2
- package/src/__tests__/ScopedFieldsForBuild.test.ts +192 -0
- package/src/__tests__/SessionJanitor.test.ts +195 -4
- package/src/__tests__/SessionManager.test.ts +164 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +2 -2
- package/src/__tests__/TaskGraphAgentRunner.test.ts +272 -16
- package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +114 -3
- package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
- package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
- package/src/__tests__/ViewOperationsHandler.test.ts +9 -7
- package/src/__tests__/WidgetSessionService.test.ts +583 -4
- package/src/__tests__/WorkQueueHostService.test.ts +25 -7
- package/src/__tests__/apiRootBoot.test.ts +1 -1
- package/src/__tests__/backgroundSweepConfigUnits.test.ts +153 -0
- package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
- package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
- package/src/__tests__/cacheInvalidationRecordData.test.ts +45 -0
- package/src/__tests__/contextRequestOrigin.test.ts +105 -0
- package/src/__tests__/conversationBrowsers.test.ts +62 -0
- package/src/__tests__/fieldSecurityFixtures.ts +91 -0
- package/src/__tests__/globalCors.test.ts +3 -3
- package/src/__tests__/localDevAuth.test.ts +196 -0
- package/src/__tests__/magicLinkExtensionCapabilities.test.ts +413 -0
- package/src/__tests__/orphanedConversationDetailReconciler.start.test.ts +82 -0
- package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
- package/src/__tests__/ownedRealtimeSession.test.ts +14 -0
- package/src/__tests__/pushStatusResolver.filter.test.ts +57 -1
- package/src/__tests__/realtimeRecordingHandler.test.ts +24 -2
- package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +29 -1
- package/src/__tests__/realtimeSessions/ownedRealtimeSession.anonymous.test.ts +31 -0
- package/src/__tests__/realtimeSessions/ownedRealtimeSession.namedScoped.test.ts +37 -0
- package/src/__tests__/realtimeSessions/sessionAccess.test.ts +224 -7
- package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
- package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
- package/src/__tests__/requestOrigin.test.ts +104 -0
- package/src/__tests__/resolverBase.cloudEventChangedFields.test.ts +157 -0
- package/src/__tests__/resolverBase.fieldSecurityTransport.test.ts +222 -0
- package/src/__tests__/resolverBase.fls.test.ts +146 -97
- package/src/__tests__/restTransport.fieldSecurity.test.ts +148 -0
- package/src/__tests__/runParamsTimeZone.test.ts +179 -0
- package/src/__tests__/runStreams.fieldSecurity.test.ts +100 -0
- package/src/__tests__/runViewProperties.test.ts +114 -0
- package/src/__tests__/scalabilityBenchmarks.test.ts +765 -0
- package/src/__tests__/scalabilityDatabaseIntegration.test.ts +207 -0
- package/src/__tests__/securityHardeningPr6034.test.ts +120 -0
- package/src/__tests__/sessionDeadline.test.ts +51 -0
- package/src/__tests__/sessionUserClone.test.ts +5 -1
- package/src/__tests__/sharedCache.test.ts +11 -0
- package/src/__tests__/startupSweepOrder.test.ts +40 -0
- package/src/__tests__/unifiedAuth.test.ts +101 -1
- package/src/__tests__/widgetGuestElevation.test.ts +2 -0
- package/src/agentSessions/BridgeHostInstance.ts +20 -5
- package/src/agentSessions/HandoffOfferExpiry.ts +18 -0
- package/src/agentSessions/ReturningVisitorRecap.ts +1 -0
- package/src/agentSessions/SessionJanitor.ts +95 -45
- package/src/agentSessions/SessionManager.ts +73 -20
- package/src/agentSessions/conversationBrowsers.ts +143 -0
- package/src/agentSessions/sessionDeadline.ts +81 -0
- package/src/auth/APIKeyScopeAuth.ts +5 -4
- package/src/auth/AuthProviderCatalogRouter.ts +3 -0
- package/src/auth/__tests__/loginEmailResolution.test.ts +67 -0
- package/src/auth/index.ts +56 -12
- package/src/auth/initializeProviders.ts +43 -1
- package/src/auth/localDevAuth.ts +528 -0
- package/src/auth/loginEmailResolution.ts +67 -0
- package/src/auth/magicLink/MagicLinkKeys.ts +147 -15
- package/src/auth/magicLink/MagicLinkRouter.ts +33 -6
- package/src/auth/magicLink/MagicLinkService.ts +250 -10
- package/src/auth/magicLink/index.ts +1 -1
- package/src/auth/magicLink/redeemLanding.ts +7 -4
- package/src/auth/magicLink/types.ts +38 -3
- package/src/auth/newUsers.ts +1 -0
- package/src/auth/sessionUserClone.ts +3 -2
- package/src/backgroundSweepConfigUnits.ts +213 -0
- package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +674 -0
- package/src/broadcast/index.ts +5 -0
- package/src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts +180 -0
- package/src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts +182 -0
- package/src/broadcast/providers/GCPPubSubBroadcastProvider.ts +169 -0
- package/src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts +57 -0
- package/src/cache.ts +2 -1
- package/src/config.ts +138 -0
- package/src/context.ts +71 -14
- package/src/coreRoutes.ts +29 -7
- package/src/generated/graphql-schemas/__mj.ts +4145 -1193
- package/src/generic/CacheInvalidationResolver.ts +135 -78
- package/src/generic/OrphanedConversationDetailReconciler.ts +36 -3
- package/src/generic/PubSubManager.ts +54 -1
- package/src/generic/PushStatusResolver.ts +108 -11
- package/src/generic/ResolverBase.ts +635 -234
- package/src/generic/RunViewResolver.ts +176 -64
- package/src/generic/actionOutputFieldSecurity.ts +75 -0
- package/src/generic/fieldSecurityTransport.ts +62 -0
- package/src/index.ts +310 -85
- package/src/integration/ConnectionPause.ts +222 -0
- package/src/integration/CustomColumnPromoter.ts +129 -54
- package/src/integration/EntityMapLifecycle.ts +229 -6
- package/src/integration/InactiveRowWarnings.ts +50 -0
- package/src/integration/ObjectNamesByID.ts +97 -0
- package/src/integration/PostRestartIntrospect.ts +49 -0
- package/src/integration/RSUPostRestartProgress.ts +359 -0
- package/src/integration/RSUProgressBridge.ts +85 -2
- package/src/integration/RunArtifactAuthorization.ts +65 -0
- package/src/integration/SchemaRefreshLaunch.ts +12 -2
- package/src/integration/ScopedFieldsForBuild.ts +113 -0
- package/src/integration/TargetConfigGuard.ts +71 -0
- package/src/logging/variablesLoggingMiddleware.ts +59 -3
- package/src/realtimeSessions/README.md +7 -3
- package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
- package/src/realtimeSessions/ownedRealtimeSession.ts +16 -6
- package/src/realtimeSessions/sessionAccess.ts +211 -25
- package/src/realtimeSessions/sessionConfigStamps.ts +1 -1
- package/src/realtimeSessions/subscriptionAuthorization.ts +4 -2
- package/src/realtimeSessions/verificationWorkflow.ts +3 -1
- package/src/realtimeWidget/WidgetRouter.ts +22 -4
- package/src/realtimeWidget/WidgetSessionService.ts +254 -17
- package/src/realtimeWidget/host-identity.ts +1 -1
- package/src/realtimeWidget/visitorIdentity.ts +1 -0
- package/src/realtimeWidget/widgetCore.ts +34 -9
- package/src/realtimeWidget/widgetGuestElevation.ts +3 -1
- package/src/requestOrigin.ts +64 -0
- package/src/resolvers/ActionResolver.ts +78 -15
- package/src/resolvers/AdhocQueryResolver.ts +1 -0
- package/src/resolvers/AgentRunStatusPublisher.ts +36 -8
- package/src/resolvers/AgentSessionResolver.ts +50 -18
- package/src/resolvers/AutotagPipelineResolver.ts +2 -1
- package/src/resolvers/ConversationRunEventsResolver.ts +2 -0
- package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +41 -9
- package/src/resolvers/FetchEntityVectorsResolver.ts +132 -21
- package/src/resolvers/FileCategoryResolver.ts +1 -0
- package/src/resolvers/FileResolver.ts +14 -4
- package/src/resolvers/GetDataResolver.ts +35 -13
- package/src/resolvers/IntegrationDiscoveryResolver.ts +1570 -209
- package/src/resolvers/MCPResolver.ts +15 -2
- package/src/resolvers/MergeRecordsResolver.ts +23 -2
- package/src/resolvers/PipelineProgressResolver.ts +12 -3
- package/src/resolvers/QueryResolver.ts +20 -6
- package/src/resolvers/QuerySystemUserResolver.ts +207 -99
- package/src/resolvers/RSUResolver.ts +12 -0
- package/src/resolvers/RealtimeBridgeResolver.ts +1 -0
- package/src/resolvers/RealtimeClientSessionResolver.ts +144 -40
- package/src/resolvers/RemoteBrowserActionResolver.ts +252 -37
- package/src/resolvers/RunAIAgentResolver.ts +518 -163
- package/src/resolvers/RunAIPromptResolver.ts +18 -18
- package/src/resolvers/RunTemplateResolver.ts +9 -5
- package/src/resolvers/RunTestResolver.ts +3 -1
- package/src/resolvers/SyncDataResolver.ts +4 -0
- package/src/resolvers/TestQuerySQLResolver.ts +1 -0
- package/src/resolvers/TransactionGroupResolver.ts +66 -15
- package/src/resolvers/UserViewResolver.ts +2 -1
- package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +52 -0
- package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
- package/src/resolvers/meetingRecordingRegistration.ts +2 -0
- package/src/rest/EntityCRUDHandler.ts +22 -5
- package/src/rest/MediaAccessKeys.ts +6 -2
- package/src/rest/OAuthCallbackHandler.ts +13 -5
- package/src/rest/RESTEndpointHandler.ts +8 -5
- package/src/rest/RealtimeRecordingHandler.ts +9 -10
- package/src/rest/ViewOperationsHandler.ts +26 -7
- package/src/rest/setupRESTEndpoints.ts +11 -2
- package/src/serverRoleConfigUnits.ts +48 -0
- package/src/services/DurableEntityActionTaskSubmitter.ts +10 -2
- package/src/services/TaskGraphActionRunner.ts +2 -23
- package/src/services/TaskGraphAgentRunner.ts +43 -0
- package/src/services/TaskGraphContinuationDeliverer.ts +53 -20
- package/src/services/WorkQueueHostService.ts +26 -4
- package/src/services/workQueueConfig.ts +5 -5
- package/src/sharedCache.ts +1 -1
- package/src/types.ts +41 -1
- package/src/services/TaskOrchestration-Integration.md +0 -188
|
@@ -28,6 +28,15 @@ const ENTITY_MCP_SERVERS = 'MJ: MCP Servers';
|
|
|
28
28
|
/** Entity name for OAuth Authorization States */
|
|
29
29
|
const ENTITY_OAUTH_AUTHORIZATION_STATES = 'MJ: O Auth Authorization States';
|
|
30
30
|
|
|
31
|
+
const UUID_SHAPE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
32
|
+
|
|
33
|
+
function sqlUuid(value: string, argName: string): string {
|
|
34
|
+
if (typeof value !== 'string' || !UUID_SHAPE.test(value)) {
|
|
35
|
+
throw new Error(`${argName} must be a UUID`);
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
|
|
31
40
|
/**
|
|
32
41
|
* Configuration for OAuth callback handler
|
|
33
42
|
*/
|
|
@@ -693,12 +702,11 @@ export class OAuthCallbackHandler {
|
|
|
693
702
|
const rv = new RunView();
|
|
694
703
|
|
|
695
704
|
// Get connection to get server ID.
|
|
696
|
-
// connectionId is caller-supplied (POST /oauth/initiate body)
|
|
697
|
-
//
|
|
698
|
-
// escaping used for stateParameter in loadAuthorizationState().
|
|
705
|
+
// connectionId is caller-supplied (POST /oauth/initiate body); enforce strict UUID shape
|
|
706
|
+
// (matching MCPResolver.getServerOAuthConfig) before interpolating into ExtraFilter.
|
|
699
707
|
const connResult = await rv.RunView<{ MCPServerID: string }>({
|
|
700
708
|
EntityName: ENTITY_MCP_SERVER_CONNECTIONS,
|
|
701
|
-
ExtraFilter: `ID='${connectionId
|
|
709
|
+
ExtraFilter: `ID='${sqlUuid(connectionId, 'connectionId')}'`,
|
|
702
710
|
Fields: ['MCPServerID'],
|
|
703
711
|
ResultType: 'simple'
|
|
704
712
|
}, contextUser);
|
|
@@ -719,7 +727,7 @@ export class OAuthCallbackHandler {
|
|
|
719
727
|
OAuthRequirePKCE: boolean | null;
|
|
720
728
|
}>({
|
|
721
729
|
EntityName: ENTITY_MCP_SERVERS,
|
|
722
|
-
ExtraFilter: `ID='${serverId}'`,
|
|
730
|
+
ExtraFilter: `ID='${sqlUuid(serverId, 'serverId')}'`,
|
|
723
731
|
Fields: [
|
|
724
732
|
'OAuthIssuerURL', 'OAuthScopes', 'OAuthMetadataCacheTTLMinutes',
|
|
725
733
|
'OAuthClientID', 'OAuthClientSecretEncrypted', 'OAuthRequirePKCE'
|
|
@@ -2,7 +2,7 @@ import express from 'express';
|
|
|
2
2
|
import {
|
|
3
3
|
BaseEntity, CompositeKey, EntityDeleteOptions, EntityInfo,
|
|
4
4
|
EntityPermissionType, EntitySaveOptions, LogError, Metadata,
|
|
5
|
-
RunView, RunViewParams, UserInfo
|
|
5
|
+
RunView, RunViewParams, StripServerOnlyRunViewParams, UserInfo
|
|
6
6
|
} from '@memberjunction/core';
|
|
7
7
|
import { EntityCRUDHandler } from './EntityCRUDHandler.js';
|
|
8
8
|
import { ViewOperationsHandler } from './ViewOperationsHandler.js';
|
|
@@ -499,10 +499,11 @@ export class RESTEndpointHandler {
|
|
|
499
499
|
|
|
500
500
|
const user = req['mjUser'];
|
|
501
501
|
|
|
502
|
-
// Create RunViewParams from the request body
|
|
502
|
+
// Create RunViewParams from the request body, without the fields only server code sets;
|
|
503
|
+
// the time zone comes from the x-mj-timezone header, as on the GraphQL path
|
|
503
504
|
const params: RunViewParams = {
|
|
504
|
-
EntityName: entityName,
|
|
505
|
-
|
|
505
|
+
...StripServerOnlyRunViewParams({ ...viewParams, EntityName: entityName }),
|
|
506
|
+
TimeZone: req.userPayload?.TimeZone
|
|
506
507
|
};
|
|
507
508
|
|
|
508
509
|
const result = await ViewOperationsHandler.runView(params, user);
|
|
@@ -533,7 +534,9 @@ export class RESTEndpointHandler {
|
|
|
533
534
|
|
|
534
535
|
// Filter out any views for entities that aren't allowed
|
|
535
536
|
// using our enhanced entity filtering with wildcards and schema support
|
|
536
|
-
const filteredParams = params
|
|
537
|
+
const filteredParams = params
|
|
538
|
+
.filter(p => this.isEntityAllowed(p.EntityName))
|
|
539
|
+
.map(p => ({ ...StripServerOnlyRunViewParams(p), TimeZone: req.userPayload?.TimeZone }));
|
|
537
540
|
|
|
538
541
|
// If all requested entities were filtered out, return an error
|
|
539
542
|
if (filteredParams.length === 0 && params.length > 0) {
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
LoadOwnedRealtimeSession, RealtimeSessionNotFoundError, RealtimeSessionOwnershipError,
|
|
35
35
|
} from '../realtimeSessions/ownedRealtimeSession.js';
|
|
36
36
|
import type { IRecordingAssemblyScheduler } from '../realtimeSessions/RecordingAssemblyScheduler.js';
|
|
37
|
-
import {
|
|
37
|
+
import { AuthorizeLoadedSession } from '../realtimeSessions/sessionAccess.js';
|
|
38
38
|
|
|
39
39
|
/** Where {@link CreateRealtimeRecordingRouter} is mounted (under the reserved `/realtime` root). */
|
|
40
40
|
export const REALTIME_RECORDING_MOUNT_PATH = '/realtime/recording';
|
|
@@ -76,8 +76,8 @@ export interface RealtimeRecordingRouterDeps {
|
|
|
76
76
|
/** The authenticated caller, or null (answered 401). */
|
|
77
77
|
ResolveCaller(req: Request): RealtimeRecordingCaller | null;
|
|
78
78
|
LoadOwnedSession: typeof LoadOwnedRealtimeSession;
|
|
79
|
-
/** The
|
|
80
|
-
|
|
79
|
+
/** The per-session scope rule of the access decision, applied to the session {@link LoadOwnedSession} returned. */
|
|
80
|
+
AuthorizeSession: typeof AuthorizeLoadedSession;
|
|
81
81
|
/** The ledger for one request; `contextUser` is the caller (used for logging by the procs). */
|
|
82
82
|
CreateLedger(provider: DatabaseProviderBase, contextUser: UserInfo): IRealtimeRecordingLedger;
|
|
83
83
|
Scheduler: IRecordingAssemblyScheduler;
|
|
@@ -258,16 +258,15 @@ async function handleTerminal(deps: RealtimeRecordingRouterDeps, req: Request, r
|
|
|
258
258
|
|
|
259
259
|
/**
|
|
260
260
|
* Loads the session through the shared ownership gate, then applies the per-session scope rule of
|
|
261
|
-
* {@link
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
261
|
+
* {@link AuthorizeLoadedSession}. The production gate (`LoadOwnedRealtimeSession`) already applies the same
|
|
262
|
+
* rule, so this is a deliberate second check at the HTTP boundary: `LoadOwnedSession` is an injected dependency,
|
|
263
|
+
* and without the scope rule one anonymous guest could write shards to another guest's recording (every guest
|
|
264
|
+
* shares the one Anonymous user), and a different-bytes shard would mark it Failed. It costs one extra
|
|
265
|
+
* conversation read per request. Named users without a scope are unaffected.
|
|
266
266
|
*/
|
|
267
267
|
async function loadAuthorizedSession(deps: RealtimeRecordingRouterDeps, sessionID: string, caller: RealtimeRecordingCaller): Promise<MJAIAgentSessionEntity> {
|
|
268
268
|
const session = await deps.LoadOwnedSession(sessionID, caller.ContextUser, caller.Provider);
|
|
269
|
-
const
|
|
270
|
-
const decision = AuthorizeSessionAccess({ SessionUserID: session.UserID, ConversationExternalID: externalID }, caller.ContextUser);
|
|
269
|
+
const decision = await deps.AuthorizeSession(session, caller.ContextUser, caller.Provider);
|
|
271
270
|
if (decision.Allowed === false) {
|
|
272
271
|
LogError(`RealtimeRecordingHandler: refused user ${caller.ContextUser.ID} on session ${sessionID}: ${decision.Reason}`);
|
|
273
272
|
throw new RecordingRequestError(403, 'Not authorized for this realtime session');
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
BaseEntity, LogError, Metadata, RunView, RunViewParams,
|
|
2
|
+
BaseEntity, EntityInfo, LogError, Metadata, RunView, RunViewParams,
|
|
3
3
|
RunViewResult, UserInfo, type IRunViewProvider
|
|
4
4
|
} from '@memberjunction/core';
|
|
5
|
+
import { EscapeSQLString } from '@memberjunction/global';
|
|
5
6
|
import { ClientClauseScreen } from '@memberjunction/generic-database-provider';
|
|
7
|
+
import { ProjectRowsForCaller } from '../generic/fieldSecurityTransport.js';
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* View Operations Implementation for REST endpoints
|
|
@@ -40,7 +42,7 @@ export class ViewOperationsHandler {
|
|
|
40
42
|
// Execute the view
|
|
41
43
|
const result = await runView.RunView(params, user);
|
|
42
44
|
|
|
43
|
-
return { success: true, result };
|
|
45
|
+
return { success: true, result: this.projectResult(result, entity, user, md) };
|
|
44
46
|
} catch (error) {
|
|
45
47
|
LogError(error);
|
|
46
48
|
return { success: false, error: (error as Error)?.message || 'Unknown error' };
|
|
@@ -60,6 +62,7 @@ export class ViewOperationsHandler {
|
|
|
60
62
|
// Validate and sanitize each set of parameters against the provider that runs the views
|
|
61
63
|
const md = new Metadata(); // global-provider-ok: REST endpoint — no per-request provider injection in REST middleware yet
|
|
62
64
|
const runView = new RunView();
|
|
65
|
+
const entities: EntityInfo[] = [];
|
|
63
66
|
for (const params of paramsArray) {
|
|
64
67
|
// Validate entity exists
|
|
65
68
|
const entity = md.Entities.find(e => e.Name === params.EntityName);
|
|
@@ -81,12 +84,14 @@ export class ViewOperationsHandler {
|
|
|
81
84
|
|
|
82
85
|
// Sanitize parameters
|
|
83
86
|
this.sanitizeRunViewParams(params, md, runView.ProviderToUse, user);
|
|
87
|
+
entities.push(entity);
|
|
84
88
|
}
|
|
85
89
|
|
|
86
90
|
// Execute the views
|
|
87
91
|
const results = await runView.RunViews(paramsArray, user);
|
|
88
92
|
|
|
89
|
-
|
|
93
|
+
const projected = results?.map((r, i) => this.projectResult(r, entities[i], user, md));
|
|
94
|
+
return { success: true, results: projected?.some((r, i) => r !== results[i]) ? projected : results };
|
|
90
95
|
} catch (error) {
|
|
91
96
|
LogError(error);
|
|
92
97
|
return { success: false, error: (error as Error)?.message || 'Unknown error' };
|
|
@@ -120,7 +125,7 @@ export class ViewOperationsHandler {
|
|
|
120
125
|
this.sanitizeRunViewParams(params, md, runView.ProviderToUse, user);
|
|
121
126
|
|
|
122
127
|
// Execute the view
|
|
123
|
-
return await runView.RunView(params, user);
|
|
128
|
+
return this.projectResult(await runView.RunView(params, user), entity, user, md);
|
|
124
129
|
} catch (error) {
|
|
125
130
|
LogError(error);
|
|
126
131
|
throw error;
|
|
@@ -159,7 +164,7 @@ export class ViewOperationsHandler {
|
|
|
159
164
|
// Run a view to get the available views
|
|
160
165
|
const params: RunViewParams = {
|
|
161
166
|
EntityName: 'MJ: User Views',
|
|
162
|
-
ExtraFilter: `Entity = '${
|
|
167
|
+
ExtraFilter: `Entity = '${EscapeSQLString(entity.Name)}'`
|
|
163
168
|
};
|
|
164
169
|
|
|
165
170
|
const runView = new RunView();
|
|
@@ -193,6 +198,19 @@ export class ViewOperationsHandler {
|
|
|
193
198
|
return this.GetEntityViews(entityName, user);
|
|
194
199
|
}
|
|
195
200
|
|
|
201
|
+
/**
|
|
202
|
+
* The result with its rows reduced to what `user` may READ. The provider already narrows the
|
|
203
|
+
* rows it reads for a restricted caller; this is the backstop for any that arrive wider. The
|
|
204
|
+
* same result object comes back when no row needed changing.
|
|
205
|
+
*/
|
|
206
|
+
private static projectResult(result: RunViewResult, entity: EntityInfo, user: UserInfo, md: Metadata): RunViewResult {
|
|
207
|
+
if (!result?.Results?.length) {
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
const rows = ProjectRowsForCaller(entity, result.Results as Record<string, unknown>[], user, md);
|
|
211
|
+
return rows === result.Results ? result : { ...result, Results: rows };
|
|
212
|
+
}
|
|
213
|
+
|
|
196
214
|
/**
|
|
197
215
|
* Sanitize and validate RunViewParams. Client filter and sort text passes the same clause
|
|
198
216
|
* screen as the GraphQL RunView resolvers, parsed in the dialect of `provider`, the provider
|
|
@@ -231,8 +249,9 @@ export class ViewOperationsHandler {
|
|
|
231
249
|
params.StartRow = Number.isFinite(parsed) ? Math.max(0, Math.floor(parsed as number)) : undefined;
|
|
232
250
|
}
|
|
233
251
|
|
|
234
|
-
//
|
|
235
|
-
|
|
252
|
+
// Plain rows only on the wire. An entity object serializes its internal state rather than
|
|
253
|
+
// its projected field values, so a caller may not ask for one; a count carries no row.
|
|
254
|
+
if (params.ResultType !== 'count_only') {
|
|
236
255
|
params.ResultType = 'simple';
|
|
237
256
|
}
|
|
238
257
|
|
|
@@ -53,10 +53,12 @@ export interface RESTApiOptions {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
|
-
* Default REST API configuration
|
|
56
|
+
* Default REST API configuration. Disabled by default (matching the documented default and
|
|
57
|
+
* MJServer's own config default): mounting a full-entity REST API must be an explicit decision,
|
|
58
|
+
* never a side effect of calling SetupRESTEndpoints with no options.
|
|
57
59
|
*/
|
|
58
60
|
export const DEFAULT_REST_API_OPTIONS: RESTApiOptions = {
|
|
59
|
-
enabled:
|
|
61
|
+
enabled: false,
|
|
60
62
|
};
|
|
61
63
|
|
|
62
64
|
/**
|
|
@@ -95,6 +97,13 @@ export function SetupRESTEndpoints(
|
|
|
95
97
|
if (authMiddleware) {
|
|
96
98
|
app.use(basePath, BodyParser.json({ limit: '50mb' }), authMiddleware, restHandler.getRouter());
|
|
97
99
|
} else {
|
|
100
|
+
// MJServer itself is safe here (its unified auth middleware runs globally before this
|
|
101
|
+
// mount), but a third-party caller passing no authMiddleware may be mounting a fully
|
|
102
|
+
// UNauthenticated entity CRUD API — say so loudly.
|
|
103
|
+
LogStatusEx({
|
|
104
|
+
message: `REST API mounted at ${basePath} WITHOUT a route-level auth middleware. ` +
|
|
105
|
+
`Ensure an authentication middleware runs globally before this mount, or pass one to SetupRESTEndpoints.`,
|
|
106
|
+
});
|
|
98
107
|
app.use(basePath, BodyParser.json({ limit: '50mb' }), restHandler.getRouter());
|
|
99
108
|
}
|
|
100
109
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported MJServer horizontal scaling roles (`MJ_SERVER_ROLE`).
|
|
3
|
+
* - `'all'` (default): Monolithic mode — serves HTTP/GraphQL/WebSocket traffic AND runs all background worker loops.
|
|
4
|
+
* - `'api'`: Stateless API/WebSocket edge — serves HTTP/GraphQL/WebSocket traffic ONLY; skips background schedulers,
|
|
5
|
+
* queue dispatchers, and janitors so event-loop responsiveness is isolated from heavy background jobs.
|
|
6
|
+
* - `'worker'`: Background worker replica — runs `ScheduledJobsService`, `IntegrationSyncWorkerService`,
|
|
7
|
+
* `StartTaskGraphDispatcher`, `StartWorkQueueHost`, `SessionJanitor`, and orphan reconcilers while keeping
|
|
8
|
+
* only lightweight healthcheck/metrics HTTP endpoints active.
|
|
9
|
+
*/
|
|
10
|
+
export type ServerRole = 'all' | 'api' | 'worker';
|
|
11
|
+
|
|
12
|
+
const VALID_SERVER_ROLES: ReadonlySet<string> = new Set<ServerRole>(['all', 'api', 'worker']);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Resolves the server role from `MJ_SERVER_ROLE` or `mj.config.cjs`'s `serverRole`.
|
|
16
|
+
* Defaults to `'all'` when unset or blank. Throws on unrecognized values so deployment typos
|
|
17
|
+
* fail fast at startup instead of silently running the wrong workload profile.
|
|
18
|
+
*/
|
|
19
|
+
export function ResolveServerRole(rawValue?: string | null): ServerRole {
|
|
20
|
+
const trimmed = rawValue?.trim().toLowerCase();
|
|
21
|
+
if (!trimmed) {
|
|
22
|
+
return 'all';
|
|
23
|
+
}
|
|
24
|
+
if (VALID_SERVER_ROLES.has(trimmed)) {
|
|
25
|
+
return trimmed as ServerRole;
|
|
26
|
+
}
|
|
27
|
+
throw new Error(
|
|
28
|
+
`Invalid MJ_SERVER_ROLE "${rawValue}". Expected one of: 'all', 'api', 'worker'.`
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Returns `true` when this server instance should start background worker loops
|
|
34
|
+
* (`ScheduledJobsService`, `IntegrationSyncWorkerService`, `StartTaskGraphDispatcher`,
|
|
35
|
+
* `StartWorkQueueHost`, `SessionJanitor`, `StartBridgeOrphanReconciliation`, and
|
|
36
|
+
* `OrphanDetailReconciler`).
|
|
37
|
+
*/
|
|
38
|
+
export function ShouldRunBackgroundWorkers(role: ServerRole): boolean {
|
|
39
|
+
return role === 'all' || role === 'worker';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Returns `true` when this server instance is designated to serve interactive
|
|
44
|
+
* API / GraphQL / WebSocket client traffic.
|
|
45
|
+
*/
|
|
46
|
+
export function ShouldServeInteractiveTraffic(role: ServerRole): boolean {
|
|
47
|
+
return role === 'all' || role === 'api';
|
|
48
|
+
}
|
|
@@ -15,7 +15,7 @@ import type {
|
|
|
15
15
|
DurableEntityActionSubmission,
|
|
16
16
|
DurableEntityActionSubmitter,
|
|
17
17
|
} from '@memberjunction/actions-base';
|
|
18
|
-
import { LogError } from '@memberjunction/core';
|
|
18
|
+
import { type IEntityDataProvider, type IMetadataProvider, LogError } from '@memberjunction/core';
|
|
19
19
|
import { TaskNode, type TaskGraphSpec } from '@memberjunction/ai-core-plus';
|
|
20
20
|
import { MJEnvironmentEntityExtended } from '@memberjunction/core-entities';
|
|
21
21
|
import { TaskGraphService, type ProviderFactory } from '@memberjunction/task-graph';
|
|
@@ -59,7 +59,9 @@ export class DurableEntityActionTaskSubmitter implements DurableEntityActionSubm
|
|
|
59
59
|
durable: true,
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
-
const provider =
|
|
62
|
+
const provider: IMetadataProvider = isMetadataProvider(request.Provider)
|
|
63
|
+
? request.Provider
|
|
64
|
+
: await this.providerFactory.CreateProvider();
|
|
63
65
|
const result = await new TaskGraphService().Submit(spec, {
|
|
64
66
|
EnvironmentID: this.environmentID,
|
|
65
67
|
ContextUser: request.ContextUser,
|
|
@@ -76,3 +78,9 @@ export class DurableEntityActionTaskSubmitter implements DurableEntityActionSubm
|
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
80
|
}
|
|
81
|
+
|
|
82
|
+
function isMetadataProvider(
|
|
83
|
+
provider: IMetadataProvider | IEntityDataProvider | undefined,
|
|
84
|
+
): provider is IMetadataProvider {
|
|
85
|
+
return !!provider && 'GetEntityObject' in provider && typeof provider.GetEntityObject === 'function';
|
|
86
|
+
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { ActionEngineServer } from '@memberjunction/actions';
|
|
13
13
|
import { ActionParam } from '@memberjunction/actions-base';
|
|
14
|
+
import { BuildActionOutputObject } from '@memberjunction/ai-core-plus';
|
|
14
15
|
import { LogError } from '@memberjunction/core';
|
|
15
16
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
16
17
|
import type { TaskActionRunner, TaskActionRunParams, TaskActionRunResult } from '@memberjunction/task-graph';
|
|
@@ -97,29 +98,7 @@ export class TaskGraphActionRunner implements TaskActionRunner {
|
|
|
97
98
|
* produced.
|
|
98
99
|
*/
|
|
99
100
|
private buildOutput(actionParams: ActionParam[], resultMessage?: string | null): Record<string, unknown> {
|
|
100
|
-
|
|
101
|
-
if (typeof resultMessage === 'string') {
|
|
102
|
-
const trimmed = resultMessage.trim();
|
|
103
|
-
if (trimmed.startsWith('{') && trimmed.endsWith('}')) {
|
|
104
|
-
try {
|
|
105
|
-
const parsed: unknown = JSON.parse(trimmed);
|
|
106
|
-
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
107
|
-
Object.assign(output, parsed as Record<string, unknown>);
|
|
108
|
-
}
|
|
109
|
-
} catch {
|
|
110
|
-
// Non-JSON prose message; ignore.
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
for (const p of actionParams ?? []) {
|
|
115
|
-
if (p.Type === 'Output' || p.Type === 'Both') output[p.Name] = p.Value;
|
|
116
|
-
}
|
|
117
|
-
if (typeof output.handle === 'string' && output.Handle === undefined) {
|
|
118
|
-
output.Handle = output.handle;
|
|
119
|
-
} else if (typeof output.Handle === 'string' && output.handle === undefined) {
|
|
120
|
-
output.handle = output.Handle;
|
|
121
|
-
}
|
|
122
|
-
return output;
|
|
101
|
+
return BuildActionOutputObject(actionParams, resultMessage);
|
|
123
102
|
}
|
|
124
103
|
|
|
125
104
|
/**
|
|
@@ -43,6 +43,25 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
+
|
|
47
|
+
let configurationId: string | undefined;
|
|
48
|
+
const requestedPreset = params.ConfigurationPresetName?.trim();
|
|
49
|
+
if (requestedPreset) {
|
|
50
|
+
const matched = AIEngine.Instance.FindActiveAgentConfigurationPreset(agent.ID, requestedPreset);
|
|
51
|
+
if (!matched) {
|
|
52
|
+
const presets = AIEngine.Instance.GetAgentConfigurationPresets(agent.ID, true);
|
|
53
|
+
const available = presets.map((p) => p.Name).join(', ') || 'none';
|
|
54
|
+
return {
|
|
55
|
+
Success: false,
|
|
56
|
+
ErrorMessage: `Agent '${agent.Name || params.AgentID}' has no active preset '${requestedPreset}'. Available: ${available}.`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
configurationId = matched.AIConfigurationID ?? undefined;
|
|
60
|
+
} else {
|
|
61
|
+
configurationId = parentRun?.ConfigurationID ?? undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const parentAgentHierarchy = this.buildParentAgentHierarchy(parentRun, params);
|
|
46
65
|
const taskContext = await this.resolveTaskContext(params);
|
|
47
66
|
const conversationDetailId =
|
|
48
67
|
parentRun?.ConversationDetailID ?? taskContext.conversationDetailId ?? undefined;
|
|
@@ -66,6 +85,8 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
66
85
|
// rather than starting the chain over. Without it MAX_REINVOKE_DEPTH never fires.
|
|
67
86
|
continuationDepth: params.ContinuationDepth ?? 0,
|
|
68
87
|
parentRun,
|
|
88
|
+
parentAgentHierarchy,
|
|
89
|
+
configurationId,
|
|
69
90
|
// The bridge from the agent's own progress stream up to graph-level observers: the
|
|
70
91
|
// dispatcher turns these into rate-limited `NodeProgress` frames, which is how a
|
|
71
92
|
// running Agent step shows "what it is doing right now" on the workflow canvas.
|
|
@@ -221,6 +242,28 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
221
242
|
}
|
|
222
243
|
}
|
|
223
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Reads the root-first ancestor agent name hierarchy carried on the task from when its graph was
|
|
247
|
+
* submitted (`params.ParentAgentHierarchy`), falling back to the submitting run's own agent name
|
|
248
|
+
* when no hierarchy was persisted on the parent task.
|
|
249
|
+
*/
|
|
250
|
+
private buildParentAgentHierarchy(
|
|
251
|
+
parentRun: MJAIAgentRunEntityExtended | undefined,
|
|
252
|
+
params: TaskAgentRunParams,
|
|
253
|
+
): string[] | undefined {
|
|
254
|
+
if (Array.isArray(params.ParentAgentHierarchy)) {
|
|
255
|
+
const carried = params.ParentAgentHierarchy
|
|
256
|
+
.filter((name): name is string => typeof name === 'string')
|
|
257
|
+
.map((name) => name.trim())
|
|
258
|
+
.filter((name) => name.length > 0);
|
|
259
|
+
if (carried.length > 0) {
|
|
260
|
+
return carried;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
const submittingAgentName = parentRun?.Agent?.trim();
|
|
264
|
+
return submittingAgentName ? [submittingAgentName] : undefined;
|
|
265
|
+
}
|
|
266
|
+
|
|
224
267
|
/**
|
|
225
268
|
* Builds the agent's instruction from the task's name/description, its structured input payload,
|
|
226
269
|
* and its dependencies' outputs.
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
* @module @memberjunction/server
|
|
14
14
|
*/
|
|
15
15
|
import { LogError, LogStatus, RunView, type IMetadataProvider, type UserInfo } from '@memberjunction/core';
|
|
16
|
-
import {
|
|
16
|
+
import { MJAIAgentRunEntity, MJConversationDetailEntity, MJConversationDetailEntityExtended } from '@memberjunction/core-entities';
|
|
17
17
|
import { UserCache } from '@memberjunction/generic-database-provider';
|
|
18
|
-
import {
|
|
18
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
19
19
|
import { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';
|
|
20
20
|
import { AgentRunner } from '@memberjunction/ai-agents';
|
|
21
21
|
import { ChatMessageRole } from '@memberjunction/ai';
|
|
@@ -68,7 +68,12 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
const provider = await this.providerFactory.CreateProvider();
|
|
71
|
-
|
|
71
|
+
// Written as the person who submitted the graph, marked as the server's: the conversation detail gate lets
|
|
72
|
+
// only a marked server write create or update an agent's reply, and only in a conversation its user owns or
|
|
73
|
+
// holds an Edit grant on. Not as the conversation's owner: `TaskGraph.Submit` takes any conversation detail
|
|
74
|
+
// ID, so writing as the owner would let anyone who can submit a graph post into a conversation they can't reach.
|
|
75
|
+
const writer = this.resolveSubmitter(params.SubmittedByUserID);
|
|
76
|
+
const origin = await this.resolveOrigin(params.ConversationDetailID, provider, writer.ID);
|
|
72
77
|
if (!origin) {
|
|
73
78
|
LogError(
|
|
74
79
|
`[TaskGraphContinuationDeliverer] Conversation detail ${params.ConversationDetailID} could not be loaded — ` +
|
|
@@ -77,7 +82,6 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
77
82
|
return;
|
|
78
83
|
}
|
|
79
84
|
|
|
80
|
-
const actingUser = this.resolveActingUser(origin.OwnerUserID);
|
|
81
85
|
const enrichedParams = await this.enrichTasksWithOutputs(params, provider);
|
|
82
86
|
const renderedOutcome = this.renderMessage(enrichedParams);
|
|
83
87
|
|
|
@@ -105,8 +109,9 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
105
109
|
return;
|
|
106
110
|
}
|
|
107
111
|
|
|
108
|
-
const detail = await provider.GetEntityObject<
|
|
112
|
+
const detail = await provider.GetEntityObject<MJConversationDetailEntityExtended>('MJ: Conversation Details', writer);
|
|
109
113
|
detail.NewRecord();
|
|
114
|
+
detail.MarkServerAuthoredReply();
|
|
110
115
|
detail.ConversationID = origin.ConversationID;
|
|
111
116
|
detail.BranchID = origin.BranchID;
|
|
112
117
|
detail.ParentID = params.ConversationDetailID;
|
|
@@ -191,7 +196,7 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
191
196
|
|
|
192
197
|
// Run on the fork of the message that started the graph, as PostMessage posts into it:
|
|
193
198
|
// RunAgent derives the conversation from the detail, but not the fork.
|
|
194
|
-
const runUserId = targetRun.UserID || priorRun.UserID;
|
|
199
|
+
const runUserId = targetRun.UserID || priorRun.UserID || params.SubmittedByUserID;
|
|
195
200
|
const origin = params.ConversationDetailID
|
|
196
201
|
? await this.resolveOrigin(params.ConversationDetailID, provider, runUserId)
|
|
197
202
|
: null;
|
|
@@ -205,15 +210,16 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
205
210
|
// - When intervening messages were sent while the workflow ran (origin.IsLatest === false),
|
|
206
211
|
// create a bottom continuation message linked via ParentID = params.ConversationDetailID
|
|
207
212
|
// and update the originating message's stale "I'll follow up..." copy.
|
|
208
|
-
let replyDetail:
|
|
213
|
+
let replyDetail: MJConversationDetailEntityExtended | null = null;
|
|
209
214
|
let replySaved = false;
|
|
210
215
|
if (origin?.ConversationID) {
|
|
211
216
|
if (origin.IsLatest) {
|
|
212
217
|
replyDetail = origin.OriginDetail;
|
|
213
218
|
replySaved = true;
|
|
214
219
|
} else {
|
|
215
|
-
replyDetail = await provider.GetEntityObject<
|
|
220
|
+
replyDetail = await provider.GetEntityObject<MJConversationDetailEntityExtended>('MJ: Conversation Details', actingUser);
|
|
216
221
|
replyDetail.NewRecord();
|
|
222
|
+
replyDetail.MarkServerAuthoredReply();
|
|
217
223
|
replyDetail.ConversationID = origin.ConversationID;
|
|
218
224
|
replyDetail.BranchID = origin.BranchID;
|
|
219
225
|
replyDetail.ParentID = params.ConversationDetailID;
|
|
@@ -272,7 +278,12 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
272
278
|
if (result?.automaticCommands && result.automaticCommands.length > 0) {
|
|
273
279
|
replyDetail.AutomaticCommands = JSON.stringify(result.automaticCommands);
|
|
274
280
|
}
|
|
275
|
-
await replyDetail.Save()
|
|
281
|
+
if (!(await replyDetail.Save())) {
|
|
282
|
+
LogError(
|
|
283
|
+
`[TaskGraphContinuationDeliverer] Could not save synthesized reply for "${params.WorkflowName}": ` +
|
|
284
|
+
`${replyDetail.LatestResult?.CompleteMessage ?? 'unknown error'}`
|
|
285
|
+
);
|
|
286
|
+
}
|
|
276
287
|
|
|
277
288
|
if (!origin?.IsLatest && origin?.OriginDetail) {
|
|
278
289
|
await this.markOriginDetailCompleted(origin.OriginDetail, params.WorkflowName);
|
|
@@ -335,6 +346,18 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
335
346
|
}
|
|
336
347
|
}
|
|
337
348
|
|
|
349
|
+
/**
|
|
350
|
+
* The person who submitted the graph; the deliverer's own user when the graph records no submitter or they are not
|
|
351
|
+
* in the user cache (the gate then decides, and refuses a conversation that user cannot write to).
|
|
352
|
+
*/
|
|
353
|
+
private resolveSubmitter(submittedByUserID: string | null): UserInfo {
|
|
354
|
+
if (!submittedByUserID) {
|
|
355
|
+
return this.contextUser;
|
|
356
|
+
}
|
|
357
|
+
const users = UserCache.Instance?.Users ?? UserCache.Users ?? [];
|
|
358
|
+
return users.find((u) => UUIDsEqual(u.ID, submittedByUserID)) ?? this.contextUser;
|
|
359
|
+
}
|
|
360
|
+
|
|
338
361
|
/**
|
|
339
362
|
* Broadcasts a completion event on `PUSH_STATUS_UPDATES_TOPIC` so open conversation tabs
|
|
340
363
|
* immediately reload both the originating workflow message and the newly posted continuation reply.
|
|
@@ -405,11 +428,11 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
405
428
|
ConversationID: string;
|
|
406
429
|
BranchID: string | null;
|
|
407
430
|
OwnerUserID: string;
|
|
408
|
-
OriginDetail:
|
|
431
|
+
OriginDetail: MJConversationDetailEntityExtended;
|
|
409
432
|
IsLatest: boolean;
|
|
410
433
|
} | null> {
|
|
411
434
|
const initialUser = this.resolveActingUser(fallbackOwnerUserId);
|
|
412
|
-
let detail = await provider.GetEntityObject<
|
|
435
|
+
let detail = await provider.GetEntityObject<MJConversationDetailEntityExtended>('MJ: Conversation Details', initialUser);
|
|
413
436
|
if (!(await detail.Load(conversationDetailID))) {
|
|
414
437
|
return null;
|
|
415
438
|
}
|
|
@@ -418,16 +441,20 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
418
441
|
ownerUserId = await this.lookupConversationOwnerId(detail.ConversationID, provider);
|
|
419
442
|
}
|
|
420
443
|
const resolvedOwnerUserId = ownerUserId || this.contextUser.ID;
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
detail = writableDetail;
|
|
444
|
+
if (!fallbackOwnerUserId && !UUIDsEqual(resolvedOwnerUserId, initialUser.ID)) {
|
|
445
|
+
const ownerUser = this.resolveActingUser(resolvedOwnerUserId);
|
|
446
|
+
if (!UUIDsEqual(ownerUser.ID, initialUser.ID)) {
|
|
447
|
+
const reloaded = await provider.GetEntityObject<MJConversationDetailEntityExtended>('MJ: Conversation Details', ownerUser);
|
|
448
|
+
if (await reloaded.Load(conversationDetailID)) {
|
|
449
|
+
detail = reloaded;
|
|
450
|
+
}
|
|
429
451
|
}
|
|
430
452
|
}
|
|
453
|
+
// Mark the originating detail as server-authored when it is the workflow status or planning AI/error reply.
|
|
454
|
+
const role = detail.Role?.trim().toLowerCase();
|
|
455
|
+
if (!role || role === 'ai' || role === 'error') {
|
|
456
|
+
detail.MarkServerAuthoredReply();
|
|
457
|
+
}
|
|
431
458
|
const branchId = detail.BranchID ?? null;
|
|
432
459
|
const isLatest = detail.ConversationID
|
|
433
460
|
? await this.isLatestConversationMessage(detail.ConversationID, branchId, conversationDetailID, provider)
|
|
@@ -464,6 +491,7 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
464
491
|
Fields: ['ID'],
|
|
465
492
|
OrderBy: '__mj_CreatedAt DESC',
|
|
466
493
|
MaxRows: 1,
|
|
494
|
+
SkipTotalRowCount: true,
|
|
467
495
|
ResultType: 'simple',
|
|
468
496
|
BypassCache: true,
|
|
469
497
|
},
|
|
@@ -497,7 +525,12 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
|
|
|
497
525
|
? `${cleaned}\n\n${completionNote}`
|
|
498
526
|
: completionNote;
|
|
499
527
|
originDetail.Status = 'Complete';
|
|
500
|
-
await originDetail.Save()
|
|
528
|
+
if (!(await originDetail.Save())) {
|
|
529
|
+
LogError(
|
|
530
|
+
`[TaskGraphContinuationDeliverer] Could not update originating detail for "${workflowName}": ` +
|
|
531
|
+
`${originDetail.LatestResult?.CompleteMessage ?? 'unknown error'}`
|
|
532
|
+
);
|
|
533
|
+
}
|
|
501
534
|
}
|
|
502
535
|
} catch {
|
|
503
536
|
// Non-fatal if origin detail note update fails.
|