@memberjunction/server 6.2.0-edge.4 → 6.2.0-edge.6
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 +47 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/SessionJanitor.d.ts +91 -30
- package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
- package/dist/agentSessions/SessionJanitor.js +311 -81
- package/dist/agentSessions/SessionJanitor.js.map +1 -1
- package/dist/agentSessions/SessionManager.d.ts +17 -3
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +44 -10
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/apiRoot.d.ts +32 -0
- package/dist/apiRoot.d.ts.map +1 -0
- package/dist/apiRoot.js +67 -0
- package/dist/apiRoot.js.map +1 -0
- package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.js +27 -0
- package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
- package/dist/auth/LoginScreenEngine.d.ts +22 -0
- package/dist/auth/LoginScreenEngine.d.ts.map +1 -0
- package/dist/auth/LoginScreenEngine.js +57 -0
- package/dist/auth/LoginScreenEngine.js.map +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +52 -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/magicLink/MagicLinkKeys.d.ts +2 -2
- package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkKeys.js +1 -1
- package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.js +3 -2
- package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
- package/dist/auth/magicLink/types.d.ts +12 -0
- package/dist/auth/magicLink/types.d.ts.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/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 +632 -22
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +104 -4
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +3 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +29 -8
- package/dist/context.js.map +1 -1
- package/dist/coreRoutes.d.ts +29 -0
- package/dist/coreRoutes.d.ts.map +1 -0
- package/dist/coreRoutes.js +156 -0
- package/dist/coreRoutes.js.map +1 -0
- package/dist/generated/graphql-schemas/__mj.d.ts +1016 -29
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +5125 -434
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +85 -30
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +175 -60
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js +2 -0
- 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 +94 -12
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +168 -69
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +464 -405
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +11 -3
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +91 -13
- 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/globalCors.d.ts +33 -0
- package/dist/globalCors.d.ts.map +1 -0
- package/dist/globalCors.js +58 -0
- package/dist/globalCors.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +230 -222
- package/dist/index.js.map +1 -1
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
- package/dist/integration/CustomColumnPromoter.js +6 -1
- package/dist/integration/CustomColumnPromoter.js.map +1 -1
- 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/multiTenancy/index.d.ts.map +1 -1
- package/dist/multiTenancy/index.js +22 -2
- package/dist/multiTenancy/index.js.map +1 -1
- package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -1
- package/dist/realtimeSessions/RealtimeSessionVerificationService.js +2 -1
- package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -1
- package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -1
- package/dist/realtimeSessions/RealtimeVerifyRouter.js +2 -1
- package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -1
- package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts +100 -0
- package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts.map +1 -0
- package/dist/realtimeSessions/RecordingAssemblyScheduler.js +173 -0
- package/dist/realtimeSessions/RecordingAssemblyScheduler.js.map +1 -0
- 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/index.d.ts +2 -0
- package/dist/realtimeSessions/index.d.ts.map +1 -1
- package/dist/realtimeSessions/index.js +2 -0
- package/dist/realtimeSessions/index.js.map +1 -1
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts +32 -0
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -0
- package/dist/realtimeSessions/ownedRealtimeSession.js +56 -0
- package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -0
- package/dist/realtimeSessions/sessionAccess.d.ts +91 -8
- package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
- package/dist/realtimeSessions/sessionAccess.js +127 -20
- 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 +201 -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/widgetCore.d.ts +20 -1
- package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetCore.js +17 -1
- 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 +2 -1
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- 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 +40 -17
- package/dist/resolvers/AgentSessionResolver.js.map +1 -1
- package/dist/resolvers/ArtifactFileResolver.d.ts +5 -1
- package/dist/resolvers/ArtifactFileResolver.d.ts.map +1 -1
- package/dist/resolvers/ArtifactFileResolver.js +9 -7
- package/dist/resolvers/ArtifactFileResolver.js.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.d.ts +8 -4
- package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.js +6 -6
- package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
- package/dist/resolvers/DatasetResolver.d.ts +24 -3
- package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
- package/dist/resolvers/DatasetResolver.js +57 -8
- package/dist/resolvers/DatasetResolver.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/EntityRecordNameResolver.d.ts +2 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +3 -2
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts +46 -3
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js +211 -50
- 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 +87 -11
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +292 -105
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts +33 -7
- package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js +117 -38
- package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +6 -3
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +49 -9
- package/dist/resolvers/IntegrationDiscoveryResolver.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 +2 -0
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +33 -6
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.d.ts +2 -0
- package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +15 -6
- 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/RealtimeClientSessionResolver.d.ts +18 -10
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +92 -54
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +11 -9
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +56 -8
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +241 -67
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +4 -4
- 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/SearchKnowledgeStreamResolver.d.ts +12 -1
- package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeStreamResolver.js +15 -2
- package/dist/resolvers/SearchKnowledgeStreamResolver.js.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +2 -3
- package/dist/resolvers/SqlLoggingConfigResolver.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/TaskGraphFrameResolver.d.ts +2 -1
- package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskGraphFrameResolver.js +28 -1
- package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
- package/dist/resolvers/TestQuerySQLResolver.d.ts +24 -0
- package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
- package/dist/resolvers/TestQuerySQLResolver.js +66 -13
- package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts +34 -2
- package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +150 -27
- 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/agent-run-data-guard.d.ts +31 -0
- package/dist/resolvers/agent-run-data-guard.d.ts.map +1 -0
- package/dist/resolvers/agent-run-data-guard.js +72 -0
- package/dist/resolvers/agent-run-data-guard.js.map +1 -0
- 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/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 +49 -0
- package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -0
- package/dist/rest/RealtimeRecordingHandler.js +383 -0
- package/dist/rest/RealtimeRecordingHandler.js.map +1 -0
- package/dist/rest/ViewOperationsHandler.d.ts +9 -1
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +43 -17
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +6 -0
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +6 -0
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/serverExtensionReservedRoots.d.ts +12 -10
- package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
- package/dist/serverExtensionReservedRoots.js +14 -17
- package/dist/serverExtensionReservedRoots.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/MJStorageBlobStore.d.ts +8 -1
- package/dist/services/MJStorageBlobStore.d.ts.map +1 -1
- package/dist/services/MJStorageBlobStore.js +25 -19
- package/dist/services/MJStorageBlobStore.js.map +1 -1
- package/dist/services/StartTaskGraphDispatcher.js +2 -2
- package/dist/services/StartTaskGraphDispatcher.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts +5 -3
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +27 -5
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/services/TaskGraphAgentRunner.d.ts +14 -2
- package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphAgentRunner.js +157 -9
- package/dist/services/TaskGraphAgentRunner.js.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.d.ts +59 -2
- package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.js +626 -16
- package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
- package/dist/sharedCache.d.ts.map +1 -1
- package/dist/sharedCache.js +3 -0
- package/dist/sharedCache.js.map +1 -1
- package/dist/types.d.ts +23 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +99 -98
- package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -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 +137 -0
- package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
- package/src/__tests__/DatasetResolver.itemFilters.test.ts +201 -0
- package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
- package/src/__tests__/EntityRecordNameResolver.rowSecurity.test.ts +152 -0
- package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
- package/src/__tests__/FetchEntityVectorsResolver.test.ts +369 -18
- package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
- package/src/__tests__/FileResolver.storageAccess.test.ts +562 -0
- package/src/__tests__/GetDataContextDataResolver.sqlItems.test.ts +416 -0
- package/src/__tests__/ListOperationsResolver.adhocScreen.test.ts +137 -0
- package/src/__tests__/LoginScreenEngine.test.ts +86 -0
- package/src/__tests__/MJStorageBlobStore.storageGate.test.ts +63 -0
- package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
- package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
- package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
- package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +324 -46
- package/src/__tests__/RecordingAssemblyScheduler.test.ts +178 -0
- package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +98 -0
- package/src/__tests__/ResolverBase.adhocReadScope.test.ts +133 -2
- package/src/__tests__/ResolverBase.balancedClause.test.ts +155 -0
- package/src/__tests__/ResolverBase.clauseUnscopedRead.test.ts +127 -0
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +243 -7
- package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
- package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +176 -0
- package/src/__tests__/ResolverBase.filterEscaping.test.ts +5 -2
- package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +23 -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 +69 -13
- package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
- package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +20 -28
- package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +264 -0
- package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
- package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +4 -1
- package/src/__tests__/RunTemplateResolver.test.ts +35 -2
- package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
- package/src/__tests__/RunViewResolver.cacheCheckScreen.test.ts +165 -0
- package/src/__tests__/SearchKnowledgeStreamResolver.test.ts +161 -0
- package/src/__tests__/SessionJanitor.test.ts +365 -10
- package/src/__tests__/SessionManager.test.ts +122 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +25 -0
- package/src/__tests__/TaskGraphAgentRunner.test.ts +266 -0
- package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +468 -23
- package/src/__tests__/TaskGraphFrameResolver.test.ts +22 -0
- package/src/__tests__/TestQuerySQLResolver.test.ts +274 -0
- package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
- package/src/__tests__/TransactionGroupResolver.refusals.test.ts +98 -1
- package/src/__tests__/UpdateMJDataContextItem.oldValues.test.ts +220 -0
- package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
- package/src/__tests__/ViewOperationsHandler.clauseScreen.test.ts +157 -0
- package/src/__tests__/ViewOperationsHandler.test.ts +7 -2
- package/src/__tests__/WidgetSessionService.test.ts +583 -4
- package/src/__tests__/agent-run-data-guard.test.ts +130 -0
- package/src/__tests__/apiRootBoot.test.ts +202 -0
- package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
- package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
- package/src/__tests__/cacheInvalidationRecordData.test.ts +109 -0
- package/src/__tests__/conversationRunEvents.test.ts +56 -14
- package/src/__tests__/fieldSecurityFixtures.ts +91 -0
- package/src/__tests__/globalCors.test.ts +217 -0
- package/src/__tests__/localDevAuth.test.ts +196 -0
- package/src/__tests__/multiTenancy.postgresRewrite.test.ts +181 -0
- package/src/__tests__/multiTenancy.security.test.ts +51 -0
- package/src/__tests__/multiTenancy.test.ts +1 -1
- package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
- package/src/__tests__/ownedRealtimeSession.test.ts +39 -0
- package/src/__tests__/pushStatusResolver.filter.test.ts +64 -1
- package/src/__tests__/realtimeRecordingHandler.test.ts +669 -0
- 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 +146 -7
- package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
- package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
- 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__/serverExtensionHostOverlay.test.ts +66 -0
- package/src/__tests__/serverExtensionReservedRoots.test.ts +11 -98
- package/src/__tests__/sessionUserClone.test.ts +5 -1
- package/src/__tests__/sharedCache.test.ts +5 -3
- package/src/__tests__/startupSweepOrder.test.ts +40 -0
- package/src/__tests__/unifiedAuth.test.ts +28 -0
- package/src/__tests__/widgetGuestElevation.test.ts +2 -0
- package/src/agentSessions/SessionJanitor.ts +369 -93
- package/src/agentSessions/SessionManager.ts +45 -10
- package/src/apiRoot.ts +78 -0
- package/src/auth/AuthProviderCatalogRouter.ts +29 -0
- package/src/auth/LoginScreenEngine.ts +50 -0
- package/src/auth/index.ts +57 -12
- package/src/auth/initializeProviders.ts +43 -1
- package/src/auth/localDevAuth.ts +528 -0
- package/src/auth/magicLink/MagicLinkKeys.ts +2 -2
- package/src/auth/magicLink/MagicLinkRouter.ts +3 -2
- package/src/auth/magicLink/types.ts +10 -0
- package/src/auth/sessionUserClone.ts +3 -2
- 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 +115 -5
- package/src/context.ts +32 -8
- package/src/coreRoutes.ts +181 -0
- package/src/generated/graphql-schemas/__mj.ts +3684 -284
- package/src/generic/CacheInvalidationResolver.ts +172 -60
- package/src/generic/OrphanedConversationDetailReconciler.ts +4 -2
- package/src/generic/PubSubManager.ts +54 -1
- package/src/generic/PushStatusResolver.ts +109 -12
- package/src/generic/ResolverBase.ts +540 -431
- package/src/generic/RunViewResolver.ts +97 -15
- package/src/generic/actionOutputFieldSecurity.ts +75 -0
- package/src/generic/fieldSecurityTransport.ts +62 -0
- package/src/globalCors.ts +71 -0
- package/src/index.ts +239 -238
- package/src/integration/CustomColumnPromoter.ts +6 -1
- package/src/logging/variablesLoggingMiddleware.ts +59 -3
- package/src/multiTenancy/index.ts +24 -2
- package/src/realtimeSessions/README.md +7 -3
- package/src/realtimeSessions/RealtimeSessionVerificationService.ts +2 -1
- package/src/realtimeSessions/RealtimeVerifyRouter.ts +2 -1
- package/src/realtimeSessions/RecordingAssemblyScheduler.ts +234 -0
- package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
- package/src/realtimeSessions/index.ts +2 -0
- package/src/realtimeSessions/ownedRealtimeSession.ts +69 -0
- package/src/realtimeSessions/sessionAccess.ts +183 -23
- 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 +252 -17
- package/src/realtimeWidget/host-identity.ts +1 -1
- package/src/realtimeWidget/widgetCore.ts +30 -1
- package/src/realtimeWidget/widgetGuestElevation.ts +2 -1
- 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 +46 -18
- package/src/resolvers/ArtifactFileResolver.ts +9 -8
- package/src/resolvers/ConversationRunEventsResolver.ts +15 -11
- package/src/resolvers/DatasetResolver.ts +70 -10
- package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
- package/src/resolvers/EntityRecordNameResolver.ts +3 -2
- package/src/resolvers/FetchEntityVectorsResolver.ts +248 -55
- package/src/resolvers/FileCategoryResolver.ts +1 -0
- package/src/resolvers/FileResolver.ts +334 -109
- package/src/resolvers/GetDataContextDataResolver.ts +139 -41
- package/src/resolvers/GetDataResolver.ts +6 -3
- package/src/resolvers/IntegrationDiscoveryResolver.ts +53 -9
- package/src/resolvers/MergeRecordsResolver.ts +23 -2
- package/src/resolvers/PipelineProgressResolver.ts +12 -3
- package/src/resolvers/QueryResolver.ts +31 -6
- package/src/resolvers/QuerySystemUserResolver.ts +15 -6
- package/src/resolvers/RSUResolver.ts +12 -0
- package/src/resolvers/RealtimeClientSessionResolver.ts +114 -66
- package/src/resolvers/RemoteBrowserActionResolver.ts +15 -10
- package/src/resolvers/RunAIAgentResolver.ts +296 -85
- package/src/resolvers/RunTemplateResolver.ts +6 -4
- package/src/resolvers/RunTestResolver.ts +3 -1
- package/src/resolvers/SearchKnowledgeStreamResolver.ts +19 -3
- package/src/resolvers/SqlLoggingConfigResolver.ts +2 -4
- package/src/resolvers/SyncDataResolver.ts +4 -0
- package/src/resolvers/TaskGraphFrameResolver.ts +33 -1
- package/src/resolvers/TestQuerySQLResolver.ts +69 -13
- package/src/resolvers/TransactionGroupResolver.ts +185 -30
- package/src/resolvers/UserViewResolver.ts +2 -1
- package/src/resolvers/__tests__/GetDataResolver.validation.test.ts +95 -0
- package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
- package/src/resolvers/agent-run-data-guard.ts +89 -0
- package/src/rest/EntityCRUDHandler.ts +22 -5
- package/src/rest/RESTEndpointHandler.ts +8 -5
- package/src/rest/RealtimeRecordingHandler.ts +467 -0
- package/src/rest/ViewOperationsHandler.ts +52 -18
- package/src/rest/setupRESTEndpoints.ts +6 -0
- package/src/serverExtensionReservedRoots.ts +14 -17
- package/src/serverRoleConfigUnits.ts +48 -0
- package/src/services/MJStorageBlobStore.ts +31 -30
- package/src/services/StartTaskGraphDispatcher.ts +2 -2
- package/src/services/TaskGraphActionRunner.ts +25 -5
- package/src/services/TaskGraphAgentRunner.ts +188 -11
- package/src/services/TaskGraphContinuationDeliverer.ts +738 -16
- package/src/sharedCache.ts +3 -0
- package/src/types.ts +23 -1
|
@@ -49,7 +49,7 @@ import { UUIDsEqual, IsValidUUID } from '@memberjunction/global';
|
|
|
49
49
|
import { ConversationEngine, } from '@memberjunction/core-entities';
|
|
50
50
|
import { AIEngine } from '@memberjunction/aiengine';
|
|
51
51
|
import { AIAgentPermissionHelper, AIEngineBase, HasRealtimeUsage, ParseRealtimeUsageRecord } from '@memberjunction/ai-engine-base';
|
|
52
|
-
import { RealtimeClientSessionService, RealtimeChannelServerHost, EvaluateRuntimeOverrideAuthorization, FindIgnoredRealtimeConfigKeys, ParseRealtimeTypeConfiguration, ResolveEffectiveRealtimeConfig, ResolveRealtimeCoAgentID, FilterAllowedAgentsByCanRun, INVOKE_TARGET_AGENT_TOOL_NAME, REALTIME_ADVANCED_SESSION_CONTROLS_AUTHORIZATION, resolveRecordingStorageAccountID, storeRealtimeRecording, writeRealtimeRecordingSegment, deleteRealtimeRecordingSegments, } from '@memberjunction/ai-agents';
|
|
52
|
+
import { RealtimeClientSessionService, RealtimeChannelServerHost, EvaluateRuntimeOverrideAuthorization, FindIgnoredRealtimeConfigKeys, ParseRealtimeTypeConfiguration, ResolveEffectiveRealtimeConfig, ResolveRealtimeCoAgentID, FilterAllowedAgentsByCanRun, INVOKE_TARGET_AGENT_TOOL_NAME, REALTIME_ADVANCED_SESSION_CONTROLS_AUTHORIZATION, SqlRealtimeRecordingLedger, resolveRecordingStorageAccountID, storeRealtimeRecording, writeRealtimeRecordingSegment, deleteRealtimeRecordingSegments, } from '@memberjunction/ai-agents';
|
|
53
53
|
import { IsValidRealtimeToolDefinition, NormalizeChannelKey, ParseRealtimeChannelCandidates } from '@memberjunction/ai-core-plus';
|
|
54
54
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
55
55
|
import { GetReadWriteProvider } from '../util.js';
|
|
@@ -60,6 +60,8 @@ import { ResolveWidgetGuestRunContext, ResolveScopedAnonymousRunUser, ResolveRec
|
|
|
60
60
|
import { RunWithTrustedSessionConfigWrites } from '@memberjunction/core-entities-server';
|
|
61
61
|
import { BuildMintConfigStamps, LoadInheritedVerifiedIdentity } from '../realtimeSessions/sessionConfigStamps.js';
|
|
62
62
|
import { ParseConfigObject } from '../realtimeSessions/verificationCore.js';
|
|
63
|
+
import { LoadOwnedRealtimeSession } from '../realtimeSessions/ownedRealtimeSession.js';
|
|
64
|
+
import { AuthorizeSessionAccess, LoadSessionForAccess } from '../realtimeSessions/sessionAccess.js';
|
|
63
65
|
/**
|
|
64
66
|
* Progress steps worth narrating to the realtime model — mirrors the normal agent-run path's filter
|
|
65
67
|
* in {@link import('./RunAIAgentResolver.js').RunAIAgentResolver}. Initialization/validation/finalization
|
|
@@ -72,7 +74,6 @@ const SIGNIFICANT_PROGRESS_STEPS = ['prompt_execution', 'action_execution', 'sub
|
|
|
72
74
|
*/
|
|
73
75
|
const MAX_USAGE_DETAILS_JSON_LENGTH = 4096;
|
|
74
76
|
/** Entity name — centralised so the `MJ:`-prefix convention is applied in exactly one place. */
|
|
75
|
-
const SESSION_ENTITY = 'MJ: AI Agent Sessions';
|
|
76
77
|
const CO_AGENT_ENTITY = 'MJ: AI Agent Co Agents';
|
|
77
78
|
const CONVERSATION_DETAIL_ENTITY = 'MJ: Conversation Details';
|
|
78
79
|
const CHANNEL_ENTITY = 'MJ: AI Agent Channels';
|
|
@@ -247,7 +248,7 @@ export { CancelRealtimeSessionToolResult };
|
|
|
247
248
|
* Result of {@link RealtimeClientSessionResolver.UploadRealtimeRecording} — a structured
|
|
248
249
|
* success/failure envelope. A recording-storage failure must never throw to the browser (the
|
|
249
250
|
* session it belongs to has already ended), so problems come back as `Success: false` with a
|
|
250
|
-
* human-readable reason; only ownership/authn violations (from `
|
|
251
|
+
* human-readable reason; only ownership/authn violations (from `LoadOwnedRealtimeSession`) still throw.
|
|
251
252
|
*/
|
|
252
253
|
let UploadRealtimeRecordingResult = class UploadRealtimeRecordingResult {
|
|
253
254
|
};
|
|
@@ -402,7 +403,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
402
403
|
config: JSON.stringify(config),
|
|
403
404
|
}, contextUser, provider));
|
|
404
405
|
// Best-effort: stamp recording-start metadata when the browser captured (with consent) at start.
|
|
405
|
-
await this.stampRecordingStart(session, recordingConsent, recordingStartedAt);
|
|
406
|
+
await this.stampRecordingStart(session, recordingConsent, recordingStartedAt, contextUser, provider);
|
|
406
407
|
const clientTools = this.parseClientTools(clientToolsJson);
|
|
407
408
|
const channelCandidates = this.parseChannelCandidates(channelCandidatesJson);
|
|
408
409
|
// Best-effort model-context hydration: the PRIOR session chain's transcript (ownership-
|
|
@@ -452,10 +453,17 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
452
453
|
* start fails rather than proceeding without its limits.
|
|
453
454
|
*/
|
|
454
455
|
async stampVerificationPolicy(session, effectiveConfigJson, lastSessionId, contextUser, provider) {
|
|
456
|
+
let inheritedVerified = undefined;
|
|
457
|
+
try {
|
|
458
|
+
inheritedVerified = await LoadInheritedVerifiedIdentity(lastSessionId, contextUser, provider);
|
|
459
|
+
}
|
|
460
|
+
catch (error) {
|
|
461
|
+
LogError(`StartRealtimeClientSession: failed to load inherited verified identity for prior session ${lastSessionId}: ${error.message}`);
|
|
462
|
+
}
|
|
455
463
|
const plan = BuildMintConfigStamps({
|
|
456
464
|
EffectiveRealtime: this.readEffectiveRealtime(effectiveConfigJson),
|
|
457
465
|
ExistingConfigRaw: session.Config_,
|
|
458
|
-
InheritedVerified:
|
|
466
|
+
InheritedVerified: inheritedVerified,
|
|
459
467
|
NowMs: Date.now(),
|
|
460
468
|
});
|
|
461
469
|
if (!plan) {
|
|
@@ -626,11 +634,14 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
626
634
|
async RelayRealtimeTranscript(agentSessionId, role, text, { userPayload, providers }, replacesPrevious, utteranceStartMs, utteranceEndMs) {
|
|
627
635
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
628
636
|
const session = await this.loadOwnedActiveSession(agentSessionId, contextUser, provider);
|
|
629
|
-
const
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
637
|
+
const persistDetail = this.mapTranscriptRole(role) === 'User' || (await this.callerOwnsConversation(session, contextUser, provider));
|
|
638
|
+
if (persistDetail) {
|
|
639
|
+
const saved = replacesPrevious
|
|
640
|
+
? await this.replacePreviousTranscriptTurn(session, role, text, contextUser, provider, utteranceStartMs, utteranceEndMs)
|
|
641
|
+
: await this.persistTranscriptTurn(session, role, text, contextUser, provider, utteranceStartMs, utteranceEndMs);
|
|
642
|
+
if (!saved) {
|
|
643
|
+
return false;
|
|
644
|
+
}
|
|
634
645
|
}
|
|
635
646
|
// Mirror the turn onto the co-agent's long-lived prompt run so its Messages capture the full
|
|
636
647
|
// conversation (run-viewer observability parity). Best-effort — never fails the transcript relay.
|
|
@@ -642,7 +653,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
642
653
|
await this.clientSessionService.AppendPromptRunMessage(promptRunID, this.mapTranscriptRoleToChatRole(role), text, replacesPrevious ?? false, runUser, provider);
|
|
643
654
|
}
|
|
644
655
|
await this.sessionManager.Heartbeat(agentSessionId, contextUser, provider);
|
|
645
|
-
return
|
|
656
|
+
return persistDetail;
|
|
646
657
|
}
|
|
647
658
|
/**
|
|
648
659
|
* Maps the relayed transcript role (`'User'`/`'AI'`/`'Assistant'`, case-insensitive) to the
|
|
@@ -658,7 +669,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
658
669
|
* the call and uploads the assembled blob (base64) once the session ends.
|
|
659
670
|
*
|
|
660
671
|
* Hard gates (in order):
|
|
661
|
-
* 1. Ownership — `
|
|
672
|
+
* 1. Ownership — `LoadOwnedRealtimeSession` enforces `UserID === contextUser.ID` (throws on violation).
|
|
662
673
|
* 2. Consent — `consent !== true` is a hard refusal: no audio is ever stored without it.
|
|
663
674
|
* 3. Storage configuration — the session's agent must resolve a recording storage account (the
|
|
664
675
|
* agent's `RecordingStorageProviderID`, else `AttachmentStorageProviderID`).
|
|
@@ -678,7 +689,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
678
689
|
*/
|
|
679
690
|
async UploadRealtimeRecording(agentSessionId, audioBase64, mimeType, ctx, durationMs, consent, peaks) {
|
|
680
691
|
const { contextUser, provider } = this.requireUserAndProvider(ctx.userPayload, ctx.providers);
|
|
681
|
-
const session = await
|
|
692
|
+
const session = await LoadOwnedRealtimeSession(agentSessionId, contextUser, provider);
|
|
682
693
|
// HARD consent gate — no audio is ever stored without an explicit grant.
|
|
683
694
|
if (consent !== true) {
|
|
684
695
|
return { Success: false, ErrorMessage: 'Recording consent was not granted.' };
|
|
@@ -714,15 +725,21 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
714
725
|
Peaks: this.sanitizePeaks(peaks),
|
|
715
726
|
});
|
|
716
727
|
// Canonical consolidated file written — drop the crash-recovery shards (best-effort).
|
|
717
|
-
|
|
728
|
+
// A FileID with an ErrorMessage is an uploaded file the session was not stamped with: the
|
|
729
|
+
// shards are then the only recording the janitor could still recover, so keep them.
|
|
730
|
+
const storedAndStamped = !!stored.FileID && !stored.ErrorMessage;
|
|
731
|
+
if (storedAndStamped) {
|
|
718
732
|
await deleteRealtimeRecordingSegments(agentSessionId, accountID, runUser);
|
|
719
733
|
}
|
|
734
|
+
else if (stored.FileID) {
|
|
735
|
+
LogError(`RealtimeClientSessionResolver.UploadRealtimeRecording: session ${agentSessionId} has file ${stored.FileID} but it is not stamped (${stored.ErrorMessage}); shards kept`);
|
|
736
|
+
}
|
|
720
737
|
return {
|
|
721
|
-
Success:
|
|
738
|
+
Success: storedAndStamped,
|
|
722
739
|
FileID: stored.FileID ?? undefined,
|
|
723
740
|
// Report the reason the storage layer knew (e.g. Drive's "Service Accounts do not have
|
|
724
741
|
// storage quota"); the generic sentence is only for when no layer supplied one.
|
|
725
|
-
ErrorMessage:
|
|
742
|
+
ErrorMessage: storedAndStamped ? undefined : (stored.ErrorMessage ?? 'Storage upload failed.'),
|
|
726
743
|
};
|
|
727
744
|
}
|
|
728
745
|
catch (error) {
|
|
@@ -751,7 +768,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
751
768
|
async UploadRealtimeRecordingSegment(agentSessionId, segmentIndex, audioBase64, mimeType, ctx) {
|
|
752
769
|
try {
|
|
753
770
|
const { contextUser, provider } = this.requireUserAndProvider(ctx.userPayload, ctx.providers);
|
|
754
|
-
const session = await
|
|
771
|
+
const session = await LoadOwnedRealtimeSession(agentSessionId, contextUser, provider);
|
|
755
772
|
// The consolidated recording already landed and its upload deleted the shards; a shard
|
|
756
773
|
// arriving now (one still on the wire at hang-up) would be an orphan nothing deletes.
|
|
757
774
|
if (session.RecordingFileID) {
|
|
@@ -842,7 +859,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
842
859
|
*/
|
|
843
860
|
async CancelRealtimeSessionTool(agentSessionId, { userPayload, providers }, callId) {
|
|
844
861
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
845
|
-
await
|
|
862
|
+
await LoadOwnedRealtimeSession(agentSessionId, contextUser, provider);
|
|
846
863
|
try {
|
|
847
864
|
const aborted = this.clientSessionService.CancelInFlightDelegations(agentSessionId, callId);
|
|
848
865
|
return { AbortedCount: aborted, Success: true };
|
|
@@ -882,7 +899,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
882
899
|
*/
|
|
883
900
|
async RelayRealtimeUsage(agentSessionId, inputTokens, outputTokens, { userPayload, providers }, usageDetailsJson) {
|
|
884
901
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
885
|
-
const session = await
|
|
902
|
+
const session = await LoadOwnedRealtimeSession(agentSessionId, contextUser, provider);
|
|
886
903
|
const inputDelta = this.clampTokenDelta(inputTokens);
|
|
887
904
|
const outputDelta = this.clampTokenDelta(outputTokens);
|
|
888
905
|
const details = this.readUsageDetails(usageDetailsJson);
|
|
@@ -984,7 +1001,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
984
1001
|
*/
|
|
985
1002
|
async SaveSessionChannelState(agentSessionId, channelName, stateJson, { userPayload, providers }) {
|
|
986
1003
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
987
|
-
const session = await
|
|
1004
|
+
const session = await LoadOwnedRealtimeSession(agentSessionId, contextUser, provider);
|
|
988
1005
|
if (!this.isChannelInSessionScope(session, channelName)) {
|
|
989
1006
|
LogError(`SaveSessionChannelState: channel '${channelName}' is not in session ${agentSessionId}'s resolved scope — state not saved.`);
|
|
990
1007
|
return false;
|
|
@@ -1050,7 +1067,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
1050
1067
|
*/
|
|
1051
1068
|
async SaveSessionChannelArtifact(agentSessionId, channelName, name, contentJson, { userPayload, providers }) {
|
|
1052
1069
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
1053
|
-
const session = await
|
|
1070
|
+
const session = await LoadOwnedRealtimeSession(agentSessionId, contextUser, provider);
|
|
1054
1071
|
if (!this.isChannelInSessionScope(session, channelName)) {
|
|
1055
1072
|
const message = `SaveSessionChannelArtifact: channel '${channelName}' is not in session ${agentSessionId}'s resolved scope — nothing saved.`;
|
|
1056
1073
|
LogError(message);
|
|
@@ -1456,29 +1473,12 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
1456
1473
|
* `Closed`. Throws on any violation. Returns the loaded session for the caller to read from.
|
|
1457
1474
|
*/
|
|
1458
1475
|
async loadOwnedActiveSession(agentSessionId, contextUser, provider) {
|
|
1459
|
-
const session = await
|
|
1476
|
+
const session = await LoadOwnedRealtimeSession(agentSessionId, contextUser, provider);
|
|
1460
1477
|
if (session.Status === 'Closed') {
|
|
1461
1478
|
throw new Error(`Realtime session ${agentSessionId} is closed`);
|
|
1462
1479
|
}
|
|
1463
1480
|
return session;
|
|
1464
1481
|
}
|
|
1465
|
-
/**
|
|
1466
|
-
* Loads a session and enforces inbound ownership (`UserID === contextUser.ID`) WITHOUT
|
|
1467
|
-
* rejecting `Closed` sessions — {@link SaveSessionChannelState}'s final on-end flush
|
|
1468
|
-
* legitimately arrives after the session closed. Throws when not found / not owned.
|
|
1469
|
-
*/
|
|
1470
|
-
async loadOwnedSession(agentSessionId, contextUser, provider) {
|
|
1471
|
-
const session = await provider.GetEntityObject(SESSION_ENTITY, contextUser);
|
|
1472
|
-
const loaded = await session.Load(agentSessionId);
|
|
1473
|
-
if (!loaded) {
|
|
1474
|
-
throw new Error(`Realtime session ${agentSessionId} not found`);
|
|
1475
|
-
}
|
|
1476
|
-
if (!UUIDsEqual(session.UserID, contextUser.ID)) {
|
|
1477
|
-
LogError(`RealtimeClientSessionResolver: ownership check failed — user ${contextUser.ID} attempted to operate on session ${agentSessionId} owned by ${session.UserID}`);
|
|
1478
|
-
throw new Error('Not authorized: you do not own this realtime session');
|
|
1479
|
-
}
|
|
1480
|
-
return session;
|
|
1481
|
-
}
|
|
1482
1482
|
/**
|
|
1483
1483
|
* Resolves an ACTIVE channel definition (`MJ: AI Agent Channels`) by name from
|
|
1484
1484
|
* {@link AIEngineBase}'s cached `AgentChannels` (provider-scoped engine instance, lazy
|
|
@@ -1555,13 +1555,14 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
1555
1555
|
return null;
|
|
1556
1556
|
}
|
|
1557
1557
|
try {
|
|
1558
|
-
const
|
|
1559
|
-
if (!
|
|
1558
|
+
const loaded = await LoadSessionForAccess(lastSessionId, contextUser, provider);
|
|
1559
|
+
if (!loaded) {
|
|
1560
1560
|
LogError(`StartRealtimeClientSession: prior session ${lastSessionId} not found — skipping channel-state restore.`);
|
|
1561
1561
|
return null;
|
|
1562
1562
|
}
|
|
1563
|
-
|
|
1564
|
-
|
|
1563
|
+
const access = AuthorizeSessionAccess({ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID, ConversationReadable: loaded.ConversationReadable }, contextUser);
|
|
1564
|
+
if (!access.Allowed) {
|
|
1565
|
+
LogError(`StartRealtimeClientSession: prior session ${lastSessionId} is not owned by user ${contextUser.ID} (${access.Reason}) — ` +
|
|
1565
1566
|
'skipping channel-state restore.');
|
|
1566
1567
|
return null;
|
|
1567
1568
|
}
|
|
@@ -1731,22 +1732,23 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
1731
1732
|
break;
|
|
1732
1733
|
}
|
|
1733
1734
|
visited.add(key);
|
|
1734
|
-
const
|
|
1735
|
-
if (!
|
|
1735
|
+
const loaded = await LoadSessionForAccess(cursor, contextUser, provider);
|
|
1736
|
+
if (!loaded) {
|
|
1736
1737
|
if (legIDs.length === 0) {
|
|
1737
1738
|
LogError(`StartRealtimeClientSession: prior session ${cursor} not found — skipping transcript hydration.`);
|
|
1738
1739
|
}
|
|
1739
1740
|
break;
|
|
1740
1741
|
}
|
|
1741
|
-
|
|
1742
|
+
const access = AuthorizeSessionAccess({ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID, ConversationReadable: loaded.ConversationReadable }, contextUser);
|
|
1743
|
+
if (!access.Allowed) {
|
|
1742
1744
|
if (legIDs.length === 0) {
|
|
1743
|
-
LogError(`StartRealtimeClientSession: prior session ${cursor} is not owned by user ${contextUser.ID} — ` +
|
|
1745
|
+
LogError(`StartRealtimeClientSession: prior session ${cursor} is not owned by user ${contextUser.ID} (${access.Reason}) — ` +
|
|
1744
1746
|
'skipping transcript hydration.');
|
|
1745
1747
|
}
|
|
1746
1748
|
break;
|
|
1747
1749
|
}
|
|
1748
|
-
legIDs.push(
|
|
1749
|
-
cursor =
|
|
1750
|
+
legIDs.push(loaded.Session.ID);
|
|
1751
|
+
cursor = loaded.Session.LastSessionID ?? null;
|
|
1750
1752
|
}
|
|
1751
1753
|
return legIDs;
|
|
1752
1754
|
}
|
|
@@ -1965,6 +1967,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
1965
1967
|
async createHiddenSessionAnchorDetail(session, callerUser, provider) {
|
|
1966
1968
|
const detail = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, callerUser);
|
|
1967
1969
|
detail.NewRecord();
|
|
1970
|
+
detail.MarkServerAuthoredReply(); // a server-written system anchor, not the caller's words
|
|
1968
1971
|
detail.ConversationID = session.ConversationID;
|
|
1969
1972
|
detail.BranchID = this.sessionBranchIdOf(session);
|
|
1970
1973
|
detail.Role = 'AI';
|
|
@@ -2196,14 +2199,21 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
2196
2199
|
}
|
|
2197
2200
|
/**
|
|
2198
2201
|
* Stamps `RecordingStartedAt` (the recording `t0` alignment origin) + `RecordingMedia` on a
|
|
2199
|
-
* just-started session when the browser captured WITH consent.
|
|
2200
|
-
*
|
|
2202
|
+
* just-started session when the browser captured WITH consent. `RecordingStartedAt` goes through
|
|
2203
|
+
* the entity save (and stays set on the in-memory session, so a later save of it cannot clear it);
|
|
2204
|
+
* `RecordingMedia` is a recording-ledger column that an entity save cannot write (#6010), so it goes
|
|
2205
|
+
* through the ledger's `spStampAIAgentSessionRecordingFile` proc. The proc stamps `t0` as well, so it
|
|
2206
|
+
* lands even when the entity save fails: the janitor recovers only sessions that carry a
|
|
2207
|
+
* `RecordingStartedAt`. Best-effort: a parse/save/stamp failure is logged and swallowed — a
|
|
2208
|
+
* recording-metadata problem must never fail the session start.
|
|
2201
2209
|
*
|
|
2202
2210
|
* @param session The freshly created/loaded session.
|
|
2203
2211
|
* @param recordingConsent Whether the user consented to recording — only `true` stamps anything.
|
|
2204
2212
|
* @param recordingStartedAt ISO-8601 recording start timestamp from the browser.
|
|
2213
|
+
* @param contextUser The caller, on whose behalf the proc runs.
|
|
2214
|
+
* @param provider The server-side database provider the proc runs through.
|
|
2205
2215
|
*/
|
|
2206
|
-
async stampRecordingStart(session, recordingConsent, recordingStartedAt) {
|
|
2216
|
+
async stampRecordingStart(session, recordingConsent, recordingStartedAt, contextUser, provider) {
|
|
2207
2217
|
if (recordingConsent !== true || !recordingStartedAt) {
|
|
2208
2218
|
return;
|
|
2209
2219
|
}
|
|
@@ -2213,10 +2223,16 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
2213
2223
|
return;
|
|
2214
2224
|
}
|
|
2215
2225
|
session.RecordingStartedAt = startedAt;
|
|
2216
|
-
session.RecordingMedia = 'Audio';
|
|
2217
2226
|
if (!(await session.Save())) {
|
|
2218
2227
|
LogError(`RealtimeClientSessionResolver.stampRecordingStart save failed for session ${session.ID}: ${this.describeSaveFailure(session)}`);
|
|
2219
2228
|
}
|
|
2229
|
+
try {
|
|
2230
|
+
await new SqlRealtimeRecordingLedger(provider, contextUser).StampFile(session.ID, { media: 'Audio', startedAt });
|
|
2231
|
+
}
|
|
2232
|
+
catch (error) {
|
|
2233
|
+
LogError(`RealtimeClientSessionResolver.stampRecordingStart media stamp failed for session ${session.ID}: ` +
|
|
2234
|
+
`${error instanceof Error ? error.message : String(error)}`);
|
|
2235
|
+
}
|
|
2220
2236
|
}
|
|
2221
2237
|
/**
|
|
2222
2238
|
* Persists a single transcript turn as a `Conversation Detail` stamped with the session's
|
|
@@ -2228,6 +2244,9 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
2228
2244
|
async persistTranscriptTurn(session, role, text, contextUser, provider, utteranceStartMs, utteranceEndMs) {
|
|
2229
2245
|
const detail = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, contextUser);
|
|
2230
2246
|
detail.NewRecord();
|
|
2247
|
+
// The agent's side of the session's transcript is written here, on the server, for the session's owner
|
|
2248
|
+
// (the user's side is theirs and the marker does not touch it).
|
|
2249
|
+
detail.MarkServerAuthoredReply();
|
|
2231
2250
|
detail.ConversationID = session.ConversationID;
|
|
2232
2251
|
detail.BranchID = this.sessionBranchIdOf(session);
|
|
2233
2252
|
detail.Role = this.mapTranscriptRole(role);
|
|
@@ -2302,6 +2321,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
2302
2321
|
// always used `GetEntityObject`; this now matches it, which is also why they now succeed
|
|
2303
2322
|
// and fail for the same reasons.
|
|
2304
2323
|
const previous = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, writeUser);
|
|
2324
|
+
previous.MarkServerAuthoredReply(); // as persistTranscriptTurn: the session's own transcript turn
|
|
2305
2325
|
if (!(await previous.Load(found.ID))) {
|
|
2306
2326
|
LogError(`RealtimeClientSessionResolver.replacePreviousTranscriptTurn could not re-load turn `
|
|
2307
2327
|
+ `${found.ID} for session ${session.ID}; the transcript keeps its shorter text.`);
|
|
@@ -2336,6 +2356,23 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
2336
2356
|
mapTranscriptRole(role) {
|
|
2337
2357
|
return role.trim().toLowerCase() === 'user' ? 'User' : 'AI';
|
|
2338
2358
|
}
|
|
2359
|
+
/**
|
|
2360
|
+
* True when the session's conversation belongs to the caller. In client-direct mode the agent's
|
|
2361
|
+
* words and tool facts reach the server only from the browser, so the server can't vouch for them:
|
|
2362
|
+
* they are stored as the agent's reply only in the caller's own conversation (A19). In a
|
|
2363
|
+
* conversation shared with the caller, only the caller's own side of the session is kept.
|
|
2364
|
+
*/
|
|
2365
|
+
async callerOwnsConversation(session, contextUser, provider) {
|
|
2366
|
+
if (!session.ConversationID) {
|
|
2367
|
+
return false;
|
|
2368
|
+
}
|
|
2369
|
+
const conversation = await provider.GetEntityObject('MJ: Conversations', contextUser);
|
|
2370
|
+
const owned = (await conversation.Load(session.ConversationID)) && UUIDsEqual(conversation.UserID, contextUser.ID);
|
|
2371
|
+
if (!owned) {
|
|
2372
|
+
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.`);
|
|
2373
|
+
}
|
|
2374
|
+
return owned;
|
|
2375
|
+
}
|
|
2339
2376
|
/**
|
|
2340
2377
|
* Persists a direct action or channel tool execution as a hidden ConversationDetail turn.
|
|
2341
2378
|
* Stored as stable facts (Role: 'AI', HiddenToUser: true, ExternalID: callId, CompletionTime: durationMs,
|
|
@@ -2360,12 +2397,13 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
|
|
|
2360
2397
|
* runs, the relayed dispatch itself) — never this one.
|
|
2361
2398
|
*/
|
|
2362
2399
|
async persistDirectActionTurn(session, callId, toolName, argsJson, resultJson, durationMs, contextUser, provider) {
|
|
2363
|
-
if (!session
|
|
2400
|
+
if (!(await this.callerOwnsConversation(session, contextUser, provider))) {
|
|
2364
2401
|
return false;
|
|
2365
2402
|
}
|
|
2366
2403
|
try {
|
|
2367
2404
|
const detail = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, contextUser);
|
|
2368
2405
|
detail.NewRecord();
|
|
2406
|
+
detail.MarkServerAuthoredReply(); // the tool's facts are recorded by the server, as the session's owner
|
|
2369
2407
|
detail.ConversationID = session.ConversationID;
|
|
2370
2408
|
detail.BranchID = this.sessionBranchIdOf(session);
|
|
2371
2409
|
detail.Role = 'AI';
|