@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
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
*/
|
|
34
34
|
import { Resolver, Mutation, Arg, Ctx, Int, Float, ObjectType, Field, PubSub, PubSubEngine } from 'type-graphql';
|
|
35
35
|
import { AppContext, UserPayload } from '../types.js';
|
|
36
|
-
import { AuthorizationEvaluator, UserInfo, IMetadataProvider, LogError, LogErrorEx, LogStatus, RunView, BaseEntity } from '@memberjunction/core';
|
|
37
|
-
import { UUIDsEqual, IsValidUUID } from '@memberjunction/global';
|
|
36
|
+
import { AuthorizationEvaluator, UserInfo, IMetadataProvider, DatabaseProviderBase, LogError, LogErrorEx, LogStatus, RunView, BaseEntity } from '@memberjunction/core';
|
|
37
|
+
import { EscapeSQLString, UUIDsEqual, IsValidUUID } from '@memberjunction/global';
|
|
38
38
|
import {
|
|
39
39
|
MJAIAgentEntity,
|
|
40
40
|
MJAIAgentSessionEntity,
|
|
@@ -44,6 +44,8 @@ import {
|
|
|
44
44
|
MJConversationDetailArtifactEntity,
|
|
45
45
|
MJConversationDetailEntity,
|
|
46
46
|
ConversationEngine,
|
|
47
|
+
MJConversationDetailEntityExtended,
|
|
48
|
+
MJConversationEntity,
|
|
47
49
|
} from '@memberjunction/core-entities';
|
|
48
50
|
import { AIEngine } from '@memberjunction/aiengine';
|
|
49
51
|
import { AIAgentPermissionHelper, AIEngineBase, HasRealtimeUsage, ParseRealtimeUsageRecord, type RealtimeUsageRecord } from '@memberjunction/ai-engine-base';
|
|
@@ -62,6 +64,7 @@ import {
|
|
|
62
64
|
RealtimeAllowedAgent,
|
|
63
65
|
RealtimeDirectActionsConfig,
|
|
64
66
|
REALTIME_ADVANCED_SESSION_CONTROLS_AUTHORIZATION,
|
|
67
|
+
SqlRealtimeRecordingLedger,
|
|
65
68
|
resolveRecordingStorageAccountID,
|
|
66
69
|
storeRealtimeRecording,
|
|
67
70
|
writeRealtimeRecordingSegment,
|
|
@@ -88,6 +91,7 @@ import { RunWithTrustedSessionConfigWrites } from '@memberjunction/core-entities
|
|
|
88
91
|
import { BuildMintConfigStamps, LoadInheritedVerifiedIdentity } from '../realtimeSessions/sessionConfigStamps.js';
|
|
89
92
|
import { ParseConfigObject } from '../realtimeSessions/verificationCore.js';
|
|
90
93
|
import { LoadOwnedRealtimeSession } from '../realtimeSessions/ownedRealtimeSession.js';
|
|
94
|
+
import { AuthorizeSessionAccess, LoadSessionForAccess } from '../realtimeSessions/sessionAccess.js';
|
|
91
95
|
|
|
92
96
|
/**
|
|
93
97
|
* Progress steps worth narrating to the realtime model — mirrors the normal agent-run path's filter
|
|
@@ -102,8 +106,15 @@ const SIGNIFICANT_PROGRESS_STEPS = ['prompt_execution', 'action_execution', 'sub
|
|
|
102
106
|
*/
|
|
103
107
|
const MAX_USAGE_DETAILS_JSON_LENGTH = 4096;
|
|
104
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Sessions already logged as having no co-agent prompt run. Usage, transcript and tool-turn relays all read
|
|
111
|
+
* the id, many times per call, so the gap is logged once per session instead of once per relay. Bounded:
|
|
112
|
+
* past {@link MAX_LOGGED_MISSING_PROMPT_RUN_SESSIONS} entries the oldest is dropped (a Set keeps insertion order).
|
|
113
|
+
*/
|
|
114
|
+
const sessionsLoggedWithoutPromptRun = new Set<string>();
|
|
115
|
+
const MAX_LOGGED_MISSING_PROMPT_RUN_SESSIONS = 5000;
|
|
116
|
+
|
|
105
117
|
/** Entity name — centralised so the `MJ:`-prefix convention is applied in exactly one place. */
|
|
106
|
-
const SESSION_ENTITY = 'MJ: AI Agent Sessions';
|
|
107
118
|
const CO_AGENT_ENTITY = 'MJ: AI Agent Co Agents';
|
|
108
119
|
const CONVERSATION_DETAIL_ENTITY = 'MJ: Conversation Details';
|
|
109
120
|
const CHANNEL_ENTITY = 'MJ: AI Agent Channels';
|
|
@@ -596,7 +607,7 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
596
607
|
);
|
|
597
608
|
|
|
598
609
|
// Best-effort: stamp recording-start metadata when the browser captured (with consent) at start.
|
|
599
|
-
await this.stampRecordingStart(session, recordingConsent, recordingStartedAt);
|
|
610
|
+
await this.stampRecordingStart(session, recordingConsent, recordingStartedAt, contextUser, provider);
|
|
600
611
|
|
|
601
612
|
const clientTools = this.parseClientTools(clientToolsJson);
|
|
602
613
|
const channelCandidates = this.parseChannelCandidates(channelCandidatesJson);
|
|
@@ -665,10 +676,18 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
665
676
|
contextUser: UserInfo,
|
|
666
677
|
provider: IMetadataProvider,
|
|
667
678
|
): Promise<void> {
|
|
679
|
+
let inheritedVerified: Awaited<ReturnType<typeof LoadInheritedVerifiedIdentity>> = undefined;
|
|
680
|
+
try {
|
|
681
|
+
inheritedVerified = await LoadInheritedVerifiedIdentity(lastSessionId, contextUser, provider);
|
|
682
|
+
} catch (error) {
|
|
683
|
+
LogError(
|
|
684
|
+
`StartRealtimeClientSession: failed to load inherited verified identity for prior session ${lastSessionId}: ${(error as Error).message}`,
|
|
685
|
+
);
|
|
686
|
+
}
|
|
668
687
|
const plan = BuildMintConfigStamps({
|
|
669
688
|
EffectiveRealtime: this.readEffectiveRealtime(effectiveConfigJson),
|
|
670
689
|
ExistingConfigRaw: session.Config_,
|
|
671
|
-
InheritedVerified:
|
|
690
|
+
InheritedVerified: inheritedVerified,
|
|
672
691
|
NowMs: Date.now(),
|
|
673
692
|
});
|
|
674
693
|
if (!plan) {
|
|
@@ -903,12 +922,15 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
903
922
|
): Promise<boolean> {
|
|
904
923
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
905
924
|
const session = await this.loadOwnedActiveSession(agentSessionId, contextUser, provider);
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
925
|
+
const persistDetail =
|
|
926
|
+
this.mapTranscriptRole(role) === 'User' || (await this.callerOwnsConversation(session, contextUser, provider));
|
|
927
|
+
if (persistDetail) {
|
|
928
|
+
const saved = replacesPrevious
|
|
929
|
+
? await this.replacePreviousTranscriptTurn(session, role, text, contextUser, provider, utteranceStartMs, utteranceEndMs)
|
|
930
|
+
: await this.persistTranscriptTurn(session, role, text, contextUser, provider, utteranceStartMs, utteranceEndMs);
|
|
931
|
+
if (!saved) {
|
|
932
|
+
return false;
|
|
933
|
+
}
|
|
912
934
|
}
|
|
913
935
|
// Mirror the turn onto the co-agent's long-lived prompt run so its Messages capture the full
|
|
914
936
|
// conversation (run-viewer observability parity). Best-effort — never fails the transcript relay.
|
|
@@ -927,7 +949,7 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
927
949
|
);
|
|
928
950
|
}
|
|
929
951
|
await this.sessionManager.Heartbeat(agentSessionId, contextUser, provider);
|
|
930
|
-
return
|
|
952
|
+
return persistDetail;
|
|
931
953
|
}
|
|
932
954
|
|
|
933
955
|
/**
|
|
@@ -1016,16 +1038,21 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
1016
1038
|
});
|
|
1017
1039
|
|
|
1018
1040
|
// Canonical consolidated file written — drop the crash-recovery shards (best-effort).
|
|
1019
|
-
|
|
1041
|
+
// A FileID with an ErrorMessage is an uploaded file the session was not stamped with: the
|
|
1042
|
+
// shards are then the only recording the janitor could still recover, so keep them.
|
|
1043
|
+
const storedAndStamped = !!stored.FileID && !stored.ErrorMessage;
|
|
1044
|
+
if (storedAndStamped) {
|
|
1020
1045
|
await deleteRealtimeRecordingSegments(agentSessionId, accountID, runUser);
|
|
1046
|
+
} else if (stored.FileID) {
|
|
1047
|
+
LogError(`RealtimeClientSessionResolver.UploadRealtimeRecording: session ${agentSessionId} has file ${stored.FileID} but it is not stamped (${stored.ErrorMessage}); shards kept`);
|
|
1021
1048
|
}
|
|
1022
1049
|
|
|
1023
1050
|
return {
|
|
1024
|
-
Success:
|
|
1051
|
+
Success: storedAndStamped,
|
|
1025
1052
|
FileID: stored.FileID ?? undefined,
|
|
1026
1053
|
// Report the reason the storage layer knew (e.g. Drive's "Service Accounts do not have
|
|
1027
1054
|
// storage quota"); the generic sentence is only for when no layer supplied one.
|
|
1028
|
-
ErrorMessage:
|
|
1055
|
+
ErrorMessage: storedAndStamped ? undefined : (stored.ErrorMessage ?? 'Storage upload failed.'),
|
|
1029
1056
|
};
|
|
1030
1057
|
} catch (error) {
|
|
1031
1058
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -1311,10 +1338,7 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
1311
1338
|
return null;
|
|
1312
1339
|
}
|
|
1313
1340
|
if (!config.promptRunID) {
|
|
1314
|
-
|
|
1315
|
-
`RelayRealtimeUsage: session ${session.ID} has no co-agent promptRunID (observability run ` +
|
|
1316
|
-
'creation was skipped or failed) — usage delta dropped.',
|
|
1317
|
-
);
|
|
1341
|
+
this.logMissingPromptRunOnce(session.ID);
|
|
1318
1342
|
return null;
|
|
1319
1343
|
}
|
|
1320
1344
|
const verified = await this.runIDVerifier.Verify(
|
|
@@ -1330,6 +1354,29 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
1330
1354
|
return verified.PromptRunID;
|
|
1331
1355
|
}
|
|
1332
1356
|
|
|
1357
|
+
/**
|
|
1358
|
+
* Logs, once per session, that the session has no co-agent prompt run, so its usage, cost, transcript and
|
|
1359
|
+
* tool turns are not recorded on one. The reason (no active co-agent prompt, or a failed run save) was
|
|
1360
|
+
* logged when the session was prepared.
|
|
1361
|
+
*/
|
|
1362
|
+
private logMissingPromptRunOnce(sessionID: string): void {
|
|
1363
|
+
if (sessionsLoggedWithoutPromptRun.has(sessionID)) {
|
|
1364
|
+
return;
|
|
1365
|
+
}
|
|
1366
|
+
sessionsLoggedWithoutPromptRun.add(sessionID);
|
|
1367
|
+
if (sessionsLoggedWithoutPromptRun.size > MAX_LOGGED_MISSING_PROMPT_RUN_SESSIONS) {
|
|
1368
|
+
const oldest = sessionsLoggedWithoutPromptRun.values().next().value;
|
|
1369
|
+
if (oldest !== undefined) {
|
|
1370
|
+
sessionsLoggedWithoutPromptRun.delete(oldest);
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
LogError(
|
|
1374
|
+
`RealtimeClientSessionResolver: session ${sessionID} has no co-agent promptRunID, so its usage, cost, ` +
|
|
1375
|
+
'transcript and tool turns are not recorded on a prompt run (the reason was logged when the session ' +
|
|
1376
|
+
'was prepared). Logged once per session.',
|
|
1377
|
+
);
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1333
1380
|
/**
|
|
1334
1381
|
* Persist an interactive channel's state of record (e.g. the live whiteboard's serialized
|
|
1335
1382
|
* scene) onto the session's `MJ: AI Agent Session Channels` row.
|
|
@@ -1477,7 +1524,7 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
1477
1524
|
private requireUserAndProvider(
|
|
1478
1525
|
userPayload: AppContext['userPayload'],
|
|
1479
1526
|
providers: AppContext['providers'],
|
|
1480
|
-
): { contextUser: UserInfo; provider:
|
|
1527
|
+
): { contextUser: UserInfo; provider: DatabaseProviderBase } {
|
|
1481
1528
|
const contextUser = this.GetUserFromPayload(userPayload);
|
|
1482
1529
|
if (!contextUser) {
|
|
1483
1530
|
throw new Error('Not authenticated: no user context for realtime session operation');
|
|
@@ -2013,9 +2060,10 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2013
2060
|
const existing = await rv.RunView<MJAIAgentSessionChannelEntity>(
|
|
2014
2061
|
{
|
|
2015
2062
|
EntityName: SESSION_CHANNEL_ENTITY,
|
|
2016
|
-
ExtraFilter: `AgentSessionID='${agentSessionID}' AND ChannelID='${channelID}'`,
|
|
2063
|
+
ExtraFilter: `AgentSessionID='${EscapeSQLString(agentSessionID)}' AND ChannelID='${EscapeSQLString(channelID)}'`,
|
|
2017
2064
|
ResultType: 'entity_object',
|
|
2018
2065
|
MaxRows: 1,
|
|
2066
|
+
SkipTotalRowCount: true,
|
|
2019
2067
|
},
|
|
2020
2068
|
contextUser,
|
|
2021
2069
|
);
|
|
@@ -2064,14 +2112,18 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2064
2112
|
return null;
|
|
2065
2113
|
}
|
|
2066
2114
|
try {
|
|
2067
|
-
const
|
|
2068
|
-
if (!
|
|
2115
|
+
const loaded = await LoadSessionForAccess(lastSessionId, contextUser, provider);
|
|
2116
|
+
if (!loaded) {
|
|
2069
2117
|
LogError(`StartRealtimeClientSession: prior session ${lastSessionId} not found — skipping channel-state restore.`);
|
|
2070
2118
|
return null;
|
|
2071
2119
|
}
|
|
2072
|
-
|
|
2120
|
+
const access = AuthorizeSessionAccess(
|
|
2121
|
+
{ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID, ConversationReadable: loaded.ConversationReadable },
|
|
2122
|
+
contextUser,
|
|
2123
|
+
);
|
|
2124
|
+
if (!access.Allowed) {
|
|
2073
2125
|
LogError(
|
|
2074
|
-
`StartRealtimeClientSession: prior session ${lastSessionId} is not owned by user ${contextUser.ID} — ` +
|
|
2126
|
+
`StartRealtimeClientSession: prior session ${lastSessionId} is not owned by user ${contextUser.ID} (${access.Reason}) — ` +
|
|
2075
2127
|
'skipping channel-state restore.',
|
|
2076
2128
|
);
|
|
2077
2129
|
return null;
|
|
@@ -2278,24 +2330,28 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2278
2330
|
break;
|
|
2279
2331
|
}
|
|
2280
2332
|
visited.add(key);
|
|
2281
|
-
const
|
|
2282
|
-
if (!
|
|
2333
|
+
const loaded = await LoadSessionForAccess(cursor, contextUser, provider);
|
|
2334
|
+
if (!loaded) {
|
|
2283
2335
|
if (legIDs.length === 0) {
|
|
2284
2336
|
LogError(`StartRealtimeClientSession: prior session ${cursor} not found — skipping transcript hydration.`);
|
|
2285
2337
|
}
|
|
2286
2338
|
break;
|
|
2287
2339
|
}
|
|
2288
|
-
|
|
2340
|
+
const access = AuthorizeSessionAccess(
|
|
2341
|
+
{ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID, ConversationReadable: loaded.ConversationReadable },
|
|
2342
|
+
contextUser,
|
|
2343
|
+
);
|
|
2344
|
+
if (!access.Allowed) {
|
|
2289
2345
|
if (legIDs.length === 0) {
|
|
2290
2346
|
LogError(
|
|
2291
|
-
`StartRealtimeClientSession: prior session ${cursor} is not owned by user ${contextUser.ID} — ` +
|
|
2347
|
+
`StartRealtimeClientSession: prior session ${cursor} is not owned by user ${contextUser.ID} (${access.Reason}) — ` +
|
|
2292
2348
|
'skipping transcript hydration.',
|
|
2293
2349
|
);
|
|
2294
2350
|
}
|
|
2295
2351
|
break;
|
|
2296
2352
|
}
|
|
2297
|
-
legIDs.push(
|
|
2298
|
-
cursor =
|
|
2353
|
+
legIDs.push(loaded.Session.ID);
|
|
2354
|
+
cursor = loaded.Session.LastSessionID ?? null;
|
|
2299
2355
|
}
|
|
2300
2356
|
return legIDs;
|
|
2301
2357
|
}
|
|
@@ -2396,6 +2452,7 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2396
2452
|
Fields: ['ID', 'IsEnabled'],
|
|
2397
2453
|
ResultType: 'simple',
|
|
2398
2454
|
MaxRows: 1,
|
|
2455
|
+
SkipTotalRowCount: true,
|
|
2399
2456
|
},
|
|
2400
2457
|
contextUser,
|
|
2401
2458
|
);
|
|
@@ -2558,6 +2615,7 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2558
2615
|
OrderBy: '__mj_CreatedAt DESC',
|
|
2559
2616
|
ResultType: 'simple',
|
|
2560
2617
|
MaxRows: 1,
|
|
2618
|
+
SkipTotalRowCount: true,
|
|
2561
2619
|
},
|
|
2562
2620
|
contextUser,
|
|
2563
2621
|
);
|
|
@@ -2576,8 +2634,9 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2576
2634
|
callerUser: UserInfo,
|
|
2577
2635
|
provider: IMetadataProvider,
|
|
2578
2636
|
): Promise<string | null> {
|
|
2579
|
-
const detail = await provider.GetEntityObject<
|
|
2637
|
+
const detail = await provider.GetEntityObject<MJConversationDetailEntityExtended>(CONVERSATION_DETAIL_ENTITY, callerUser);
|
|
2580
2638
|
detail.NewRecord();
|
|
2639
|
+
detail.MarkServerAuthoredReply(); // a server-written system anchor, not the caller's words
|
|
2581
2640
|
detail.ConversationID = session.ConversationID;
|
|
2582
2641
|
detail.BranchID = this.sessionBranchIdOf(session);
|
|
2583
2642
|
detail.Role = 'AI';
|
|
@@ -2645,9 +2704,10 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2645
2704
|
const existing = await rv.RunView<MJAIAgentSessionChannelEntity>(
|
|
2646
2705
|
{
|
|
2647
2706
|
EntityName: SESSION_CHANNEL_ENTITY,
|
|
2648
|
-
ExtraFilter: `AgentSessionID='${agentSessionID}' AND ChannelID='${channelID}'`,
|
|
2707
|
+
ExtraFilter: `AgentSessionID='${EscapeSQLString(agentSessionID)}' AND ChannelID='${EscapeSQLString(channelID)}'`,
|
|
2649
2708
|
ResultType: 'entity_object',
|
|
2650
2709
|
MaxRows: 1,
|
|
2710
|
+
SkipTotalRowCount: true,
|
|
2651
2711
|
},
|
|
2652
2712
|
contextUser,
|
|
2653
2713
|
);
|
|
@@ -2845,17 +2905,26 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2845
2905
|
|
|
2846
2906
|
/**
|
|
2847
2907
|
* Stamps `RecordingStartedAt` (the recording `t0` alignment origin) + `RecordingMedia` on a
|
|
2848
|
-
* just-started session when the browser captured WITH consent.
|
|
2849
|
-
*
|
|
2908
|
+
* just-started session when the browser captured WITH consent. `RecordingStartedAt` goes through
|
|
2909
|
+
* the entity save (and stays set on the in-memory session, so a later save of it cannot clear it);
|
|
2910
|
+
* `RecordingMedia` is a recording-ledger column that an entity save cannot write (#6010), so it goes
|
|
2911
|
+
* through the ledger's `spStampAIAgentSessionRecordingFile` proc. The proc stamps `t0` as well, so it
|
|
2912
|
+
* lands even when the entity save fails: the janitor recovers only sessions that carry a
|
|
2913
|
+
* `RecordingStartedAt`. Best-effort: a parse/save/stamp failure is logged and swallowed — a
|
|
2914
|
+
* recording-metadata problem must never fail the session start.
|
|
2850
2915
|
*
|
|
2851
2916
|
* @param session The freshly created/loaded session.
|
|
2852
2917
|
* @param recordingConsent Whether the user consented to recording — only `true` stamps anything.
|
|
2853
2918
|
* @param recordingStartedAt ISO-8601 recording start timestamp from the browser.
|
|
2919
|
+
* @param contextUser The caller, on whose behalf the proc runs.
|
|
2920
|
+
* @param provider The server-side database provider the proc runs through.
|
|
2854
2921
|
*/
|
|
2855
2922
|
private async stampRecordingStart(
|
|
2856
2923
|
session: MJAIAgentSessionEntity,
|
|
2857
2924
|
recordingConsent: boolean | undefined,
|
|
2858
2925
|
recordingStartedAt: string | undefined,
|
|
2926
|
+
contextUser: UserInfo,
|
|
2927
|
+
provider: DatabaseProviderBase,
|
|
2859
2928
|
): Promise<void> {
|
|
2860
2929
|
if (recordingConsent !== true || !recordingStartedAt) {
|
|
2861
2930
|
return;
|
|
@@ -2866,12 +2935,19 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2866
2935
|
return;
|
|
2867
2936
|
}
|
|
2868
2937
|
session.RecordingStartedAt = startedAt;
|
|
2869
|
-
session.RecordingMedia = 'Audio';
|
|
2870
2938
|
if (!(await session.Save())) {
|
|
2871
2939
|
LogError(
|
|
2872
2940
|
`RealtimeClientSessionResolver.stampRecordingStart save failed for session ${session.ID}: ${this.describeSaveFailure(session)}`,
|
|
2873
2941
|
);
|
|
2874
2942
|
}
|
|
2943
|
+
try {
|
|
2944
|
+
await new SqlRealtimeRecordingLedger(provider, contextUser).StampFile(session.ID, { media: 'Audio', startedAt });
|
|
2945
|
+
} catch (error) {
|
|
2946
|
+
LogError(
|
|
2947
|
+
`RealtimeClientSessionResolver.stampRecordingStart media stamp failed for session ${session.ID}: ` +
|
|
2948
|
+
`${error instanceof Error ? error.message : String(error)}`,
|
|
2949
|
+
);
|
|
2950
|
+
}
|
|
2875
2951
|
}
|
|
2876
2952
|
|
|
2877
2953
|
/**
|
|
@@ -2890,11 +2966,14 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2890
2966
|
utteranceStartMs?: number,
|
|
2891
2967
|
utteranceEndMs?: number,
|
|
2892
2968
|
): Promise<boolean> {
|
|
2893
|
-
const detail = await provider.GetEntityObject<
|
|
2969
|
+
const detail = await provider.GetEntityObject<MJConversationDetailEntityExtended>(
|
|
2894
2970
|
CONVERSATION_DETAIL_ENTITY,
|
|
2895
2971
|
contextUser,
|
|
2896
2972
|
);
|
|
2897
2973
|
detail.NewRecord();
|
|
2974
|
+
// The agent's side of the session's transcript is written here, on the server, for the session's owner
|
|
2975
|
+
// (the user's side is theirs and the marker does not touch it).
|
|
2976
|
+
detail.MarkServerAuthoredReply();
|
|
2898
2977
|
detail.ConversationID = session.ConversationID;
|
|
2899
2978
|
detail.BranchID = this.sessionBranchIdOf(session);
|
|
2900
2979
|
detail.Role = this.mapTranscriptRole(role);
|
|
@@ -2967,6 +3046,7 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2967
3046
|
ExtraFilter: `AgentSessionID='${session.ID}' AND Role='${mappedRole}'`,
|
|
2968
3047
|
OrderBy: '__mj_CreatedAt DESC',
|
|
2969
3048
|
MaxRows: 1,
|
|
3049
|
+
SkipTotalRowCount: true,
|
|
2970
3050
|
ResultType: 'entity_object',
|
|
2971
3051
|
},
|
|
2972
3052
|
writeUser,
|
|
@@ -2983,10 +3063,11 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
2983
3063
|
// failure here looked like before the re-load. The insert path beside this one has
|
|
2984
3064
|
// always used `GetEntityObject`; this now matches it, which is also why they now succeed
|
|
2985
3065
|
// and fail for the same reasons.
|
|
2986
|
-
const previous = await provider.GetEntityObject<
|
|
3066
|
+
const previous = await provider.GetEntityObject<MJConversationDetailEntityExtended>(
|
|
2987
3067
|
CONVERSATION_DETAIL_ENTITY,
|
|
2988
3068
|
writeUser,
|
|
2989
3069
|
);
|
|
3070
|
+
previous.MarkServerAuthoredReply(); // as persistTranscriptTurn: the session's own transcript turn
|
|
2990
3071
|
if (!(await previous.Load(found.ID))) {
|
|
2991
3072
|
LogError(
|
|
2992
3073
|
`RealtimeClientSessionResolver.replacePreviousTranscriptTurn could not re-load turn `
|
|
@@ -3027,6 +3108,28 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
3027
3108
|
return role.trim().toLowerCase() === 'user' ? 'User' : 'AI';
|
|
3028
3109
|
}
|
|
3029
3110
|
|
|
3111
|
+
/**
|
|
3112
|
+
* True when the session's conversation belongs to the caller. In client-direct mode the agent's
|
|
3113
|
+
* words and tool facts reach the server only from the browser, so the server can't vouch for them:
|
|
3114
|
+
* they are stored as the agent's reply only in the caller's own conversation (A19). In a
|
|
3115
|
+
* conversation shared with the caller, only the caller's own side of the session is kept.
|
|
3116
|
+
*/
|
|
3117
|
+
private async callerOwnsConversation(
|
|
3118
|
+
session: MJAIAgentSessionEntity,
|
|
3119
|
+
contextUser: UserInfo,
|
|
3120
|
+
provider: IMetadataProvider,
|
|
3121
|
+
): Promise<boolean> {
|
|
3122
|
+
if (!session.ConversationID) {
|
|
3123
|
+
return false;
|
|
3124
|
+
}
|
|
3125
|
+
const conversation = await provider.GetEntityObject<MJConversationEntity>('MJ: Conversations', contextUser);
|
|
3126
|
+
const owned = (await conversation.Load(session.ConversationID)) && UUIDsEqual(conversation.UserID, contextUser.ID);
|
|
3127
|
+
if (!owned) {
|
|
3128
|
+
LogStatus(`RealtimeClientSessionResolver: session ${session.ID} relays the agent's side only into the caller's own conversation; conversation ${session.ConversationID} is not the caller's, so the agent's turn is not stored.`);
|
|
3129
|
+
}
|
|
3130
|
+
return owned;
|
|
3131
|
+
}
|
|
3132
|
+
|
|
3030
3133
|
/**
|
|
3031
3134
|
* Persists a direct action or channel tool execution as a hidden ConversationDetail turn.
|
|
3032
3135
|
* Stored as stable facts (Role: 'AI', HiddenToUser: true, ExternalID: callId, CompletionTime: durationMs,
|
|
@@ -3060,15 +3163,16 @@ export class RealtimeClientSessionResolver extends ResolverBase {
|
|
|
3060
3163
|
contextUser: UserInfo,
|
|
3061
3164
|
provider: IMetadataProvider,
|
|
3062
3165
|
): Promise<boolean> {
|
|
3063
|
-
if (!session
|
|
3166
|
+
if (!(await this.callerOwnsConversation(session, contextUser, provider))) {
|
|
3064
3167
|
return false;
|
|
3065
3168
|
}
|
|
3066
3169
|
try {
|
|
3067
|
-
const detail = await provider.GetEntityObject<
|
|
3170
|
+
const detail = await provider.GetEntityObject<MJConversationDetailEntityExtended>(
|
|
3068
3171
|
CONVERSATION_DETAIL_ENTITY,
|
|
3069
3172
|
contextUser,
|
|
3070
3173
|
);
|
|
3071
3174
|
detail.NewRecord();
|
|
3175
|
+
detail.MarkServerAuthoredReply(); // the tool's facts are recorded by the server, as the session's owner
|
|
3072
3176
|
detail.ConversationID = session.ConversationID;
|
|
3073
3177
|
detail.BranchID = this.sessionBranchIdOf(session);
|
|
3074
3178
|
detail.Role = 'AI';
|