@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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The ownership gate for client-direct realtime session writes: the GraphQL mutations of
|
|
3
|
+
* `RealtimeClientSessionResolver` and the recording REST routes both load the session through
|
|
4
|
+
* {@link LoadOwnedRealtimeSession}, so "may this caller write to this session?" is decided in one place.
|
|
5
|
+
*
|
|
6
|
+
* @module @memberjunction/server/realtimeSessions
|
|
7
|
+
*/
|
|
8
|
+
import { LogError } from '@memberjunction/core';
|
|
9
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
10
|
+
import { AuthorizeSessionAccess, LoadSessionConversationScope } from './sessionAccess.js';
|
|
11
|
+
const SESSION_ENTITY = 'MJ: AI Agent Sessions';
|
|
12
|
+
/** The session does not exist, or the caller cannot read it. */
|
|
13
|
+
export class RealtimeSessionNotFoundError extends Error {
|
|
14
|
+
constructor(AgentSessionID) {
|
|
15
|
+
super(`Realtime session ${AgentSessionID} not found`);
|
|
16
|
+
this.AgentSessionID = AgentSessionID;
|
|
17
|
+
this.name = 'RealtimeSessionNotFoundError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/** The session exists but the caller may not use it: another user owns it, or (for a scoped or anonymous caller) its conversation carries another scope identity. */
|
|
21
|
+
export class RealtimeSessionOwnershipError extends Error {
|
|
22
|
+
constructor(AgentSessionID) {
|
|
23
|
+
super('Not authorized: you do not own this realtime session');
|
|
24
|
+
this.AgentSessionID = AgentSessionID;
|
|
25
|
+
this.name = 'RealtimeSessionOwnershipError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Loads a session under the caller's identity and enforces ownership: `UserID === contextUser.ID`, then the
|
|
30
|
+
* scope rule of {@link AuthorizeSessionAccess} (every anonymous visitor shares one Anonymous user, so the
|
|
31
|
+
* session's conversation `ExternalID` must equal the caller's scope identity). It deliberately does NOT
|
|
32
|
+
* reject `Closed` sessions: the final channel-state flush and the recording terminal signal legitimately
|
|
33
|
+
* arrive after the session closed. Loading as the caller also applies the entity's row-level security.
|
|
34
|
+
*
|
|
35
|
+
* @throws RealtimeSessionNotFoundError when the row does not load
|
|
36
|
+
* @throws RealtimeSessionOwnershipError when another user owns the session (logged with both user ids) or
|
|
37
|
+
* the scope rule refuses the caller (logged with the refusal reason)
|
|
38
|
+
*/
|
|
39
|
+
export async function LoadOwnedRealtimeSession(agentSessionId, contextUser, provider) {
|
|
40
|
+
const session = await provider.GetEntityObject(SESSION_ENTITY, contextUser);
|
|
41
|
+
if (!(await session.Load(agentSessionId))) {
|
|
42
|
+
throw new RealtimeSessionNotFoundError(agentSessionId);
|
|
43
|
+
}
|
|
44
|
+
if (!UUIDsEqual(session.UserID, contextUser.ID)) {
|
|
45
|
+
LogError(`LoadOwnedRealtimeSession: ownership check failed — user ${contextUser.ID} attempted to operate on session ${agentSessionId} owned by ${session.UserID}`);
|
|
46
|
+
throw new RealtimeSessionOwnershipError(agentSessionId);
|
|
47
|
+
}
|
|
48
|
+
const conversation = await LoadSessionConversationScope(session, contextUser, provider);
|
|
49
|
+
const access = AuthorizeSessionAccess({ SessionUserID: session.UserID, ConversationExternalID: conversation.ExternalID, ConversationReadable: conversation.Readable }, contextUser);
|
|
50
|
+
if (!access.Allowed) {
|
|
51
|
+
LogError(`LoadOwnedRealtimeSession: session access refused (${access.Reason}) — user ${contextUser.ID} attempted to operate on session ${agentSessionId}`);
|
|
52
|
+
throw new RealtimeSessionOwnershipError(agentSessionId);
|
|
53
|
+
}
|
|
54
|
+
return session;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ownedRealtimeSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownedRealtimeSession.js","sourceRoot":"","sources":["../../src/realtimeSessions/ownedRealtimeSession.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAE1F,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,gEAAgE;AAChE,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACnD,YAA4B,cAAsB;QAC9C,KAAK,CAAC,oBAAoB,cAAc,YAAY,CAAC,CAAC;QAD9B,mBAAc,GAAd,cAAc,CAAQ;QAE9C,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC/C,CAAC;CACJ;AAED,qKAAqK;AACrK,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACpD,YAA4B,cAAsB;QAC9C,KAAK,CAAC,sDAAsD,CAAC,CAAC;QADtC,mBAAc,GAAd,cAAc,CAAQ;QAE9C,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAChD,CAAC;CACJ;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,cAAsB,EACtB,WAAqB,EACrB,QAA2B;IAE3B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAyB,cAAc,EAAE,WAAW,CAAC,CAAC;IACpG,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,4BAA4B,CAAC,cAAc,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9C,QAAQ,CACJ,2DAA2D,WAAW,CAAC,EAAE,oCAAoC,cAAc,aAAa,OAAO,CAAC,MAAM,EAAE,CAC3J,CAAC;QACF,MAAM,IAAI,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,4BAA4B,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,sBAAsB,CACjC,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,UAAU,EAAE,oBAAoB,EAAE,YAAY,CAAC,QAAQ,EAAE,EAC/H,WAAW,CACd,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,QAAQ,CACJ,qDAAqD,MAAM,CAAC,MAAM,YAAY,WAAW,CAAC,EAAE,oCAAoC,cAAc,EAAE,CACnJ,CAAC;QACF,MAAM,IAAI,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
* ## The two ownership rules
|
|
10
10
|
*
|
|
11
11
|
* 1. **Owner.** The session's `UserID` must be the caller's user.
|
|
12
|
-
* 2. **Scope.** A *named* user is fully identified by (1). An **anonymous widget guest
|
|
13
|
-
* every
|
|
14
|
-
* address any other
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
12
|
+
* 2. **Scope.** A *named* user is fully identified by (1). An **anonymous visitor** (widget guest or
|
|
13
|
+
* anonymous magic-link invitee) is not: every one authenticates as the one shared Anonymous user, so
|
|
14
|
+
* (1) alone would let any visitor address any other visitor's session. What separates them is the
|
|
15
|
+
* scope identity {@link ResolveSessionScopeIdentity} reads off the signed token — the resource scope
|
|
16
|
+
* (`MagicLinkScope.ResourceID`) when the token carries one, else the per-token `mj_sid`
|
|
17
|
+
* (`AnonymousVisitorID`). `SessionManager` stamps that same value onto the session's Conversation as
|
|
18
|
+
* `ExternalID`, so a principal with a scope identity must match it, and an anonymous principal with
|
|
19
|
+
* none is refused outright — it cannot be told apart from every other anonymous principal.
|
|
20
|
+
* One allowance: a NAMED principal with a resource scope may also use its own session whose
|
|
21
|
+
* conversation carries no stamp at all, when it could read that conversation (see the comment in
|
|
22
|
+
* {@link AuthorizeSessionAccess}).
|
|
19
23
|
*
|
|
20
24
|
* The decision is deliberately pure (no I/O) so it can be applied identically to a freshly loaded
|
|
21
25
|
* row at subscribe time and to the owner/scope snapshot carried inside each published event.
|
|
@@ -34,13 +38,21 @@ export interface SessionAccessSubject {
|
|
|
34
38
|
* could not be loaded.
|
|
35
39
|
*/
|
|
36
40
|
ConversationExternalID: string | null | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* True when the conversation was loaded under the CALLER's identity (so its row-level security allowed
|
|
43
|
+
* the read). Only consulted for a named principal with a resource scope on a conversation that carries
|
|
44
|
+
* no `ExternalID`; omitted means unknown and is treated as unreadable (fail closed).
|
|
45
|
+
*/
|
|
46
|
+
ConversationReadable?: boolean;
|
|
37
47
|
}
|
|
38
48
|
/** What the decision needs to know about the caller (a subset of `UserInfo`). */
|
|
39
49
|
export interface SessionAccessPrincipal {
|
|
40
50
|
/** The caller's user id. */
|
|
41
51
|
ID: string;
|
|
42
|
-
/** True for the shared-Anonymous-user principal of a public-widget guest. */
|
|
52
|
+
/** True for the shared-Anonymous-user principal of a public-widget guest or anonymous magic-link invitee. */
|
|
43
53
|
IsMagicLinkAnonymous?: boolean;
|
|
54
|
+
/** Per-visitor session identity (`mj_sid`) for an anonymous principal. */
|
|
55
|
+
AnonymousVisitorID?: string;
|
|
44
56
|
/** The signed per-session scope carried by the caller's token, when any. */
|
|
45
57
|
MagicLinkScope?: {
|
|
46
58
|
ResourceID?: string;
|
|
@@ -51,10 +63,24 @@ export type SessionAccessRefusal = 'not_owner' | 'scope_missing' | 'scope_mismat
|
|
|
51
63
|
/** Outcome of {@link AuthorizeSessionAccess}. */
|
|
52
64
|
export type SessionAccessDecision = {
|
|
53
65
|
Allowed: true;
|
|
66
|
+
Reason?: undefined;
|
|
54
67
|
} | {
|
|
55
68
|
Allowed: false;
|
|
56
69
|
Reason: SessionAccessRefusal;
|
|
57
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* The scope identity a session is keyed on for `principal` — the one value `SessionManager` stamps as
|
|
73
|
+
* the session conversation's `ExternalID` and {@link AuthorizeSessionAccess} compares against it.
|
|
74
|
+
*
|
|
75
|
+
* - The token's resource scope (`MagicLinkScope.ResourceID`) when it carries one. A widget guest's
|
|
76
|
+
* resource scope IS its `mj_sid`; an anonymous magic-link invite with a `ResourceID` (e.g. a Caliber
|
|
77
|
+
* Invite Scope, one per subject) shares that scope across its redemptions by design, and the
|
|
78
|
+
* `{{ScopeResourceID}}` RLS filters key on the same value, so the visitor can read its own rows.
|
|
79
|
+
* - Otherwise, for an anonymous principal, the per-token `mj_sid` (`AnonymousVisitorID`), which tells two
|
|
80
|
+
* redemptions of an unscoped multi-use invite apart.
|
|
81
|
+
* - Otherwise `undefined` (a named user without a resource scope).
|
|
82
|
+
*/
|
|
83
|
+
export declare function ResolveSessionScopeIdentity(principal: SessionAccessPrincipal): string | undefined;
|
|
58
84
|
/**
|
|
59
85
|
* Decides whether `principal` may address the session described by `subject`.
|
|
60
86
|
*
|
|
@@ -70,6 +96,8 @@ export interface LoadedSessionForAccess {
|
|
|
70
96
|
Session: MJAIAgentSessionEntity;
|
|
71
97
|
/** The session's conversation `ExternalID` (anonymous scope id), or null. */
|
|
72
98
|
ConversationExternalID: string | null;
|
|
99
|
+
/** Whether the caller could read the session's conversation (false when there is none). */
|
|
100
|
+
ConversationReadable: boolean;
|
|
73
101
|
}
|
|
74
102
|
/**
|
|
75
103
|
* Loads a session (and its conversation's scope id) under `contextUser`'s identity.
|
|
@@ -83,4 +111,59 @@ export interface LoadedSessionForAccess {
|
|
|
83
111
|
* which {@link AuthorizeSessionAccess} then treats as "no scope to match" (refused for a scoped caller).
|
|
84
112
|
*/
|
|
85
113
|
export declare function LoadSessionForAccess(agentSessionId: string, contextUser: UserInfo, provider: IMetadataProvider): Promise<LoadedSessionForAccess | null>;
|
|
114
|
+
/** What the caller could learn about a session's conversation: the scope half of {@link SessionAccessSubject}. */
|
|
115
|
+
export interface SessionConversationScope {
|
|
116
|
+
/** The conversation's `ExternalID` (the anonymous scope id), or null when it has none or was not read. */
|
|
117
|
+
ExternalID: string | null;
|
|
118
|
+
/** Whether the caller could read the conversation (false when the session has none). */
|
|
119
|
+
Readable: boolean;
|
|
120
|
+
}
|
|
121
|
+
/** {@link SessionConversationScope} plus the conversation's owner, for a conversation addressed without a session. */
|
|
122
|
+
export interface ConversationScope extends SessionConversationScope {
|
|
123
|
+
/** `Conversation.UserID`, or null when the conversation was not read. */
|
|
124
|
+
UserID: string | null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Reads an already-loaded session's conversation under `contextUser` (so its row-level security applies).
|
|
128
|
+
* A missing conversation, a refused read and a failed read (logged) all report `Readable: false`. For
|
|
129
|
+
* callers that loaded the session through another gate and only need the scope half of
|
|
130
|
+
* {@link AuthorizeSessionAccess}'s subject.
|
|
131
|
+
*/
|
|
132
|
+
export declare function LoadSessionConversationScope(session: MJAIAgentSessionEntity, contextUser: UserInfo, provider: IMetadataProvider): Promise<SessionConversationScope>;
|
|
133
|
+
/**
|
|
134
|
+
* Reads a conversation's owner and scope id under `contextUser` (so its row-level security applies), for a
|
|
135
|
+
* caller that addresses the conversation directly rather than through a session — a text agent turn, for
|
|
136
|
+
* example, whose only handle is a message in it. Together with the caller's principal this is exactly the
|
|
137
|
+
* subject {@link AuthorizeSessionAccess} decides on: `SessionUserID` is the conversation's owner, since the
|
|
138
|
+
* session a conversation belongs to is owned by the same user.
|
|
139
|
+
*
|
|
140
|
+
* An empty id, a missing conversation, a refused read and a failed read (logged) all report
|
|
141
|
+
* `Readable: false` with no owner, which {@link AuthorizeSessionAccess} then refuses for any scoped caller.
|
|
142
|
+
*/
|
|
143
|
+
export declare function LoadConversationScope(conversationId: string | null | undefined, contextUser: UserInfo, provider: IMetadataProvider): Promise<ConversationScope>;
|
|
144
|
+
/**
|
|
145
|
+
* Who may run a conversation turn (a text agent turn, addressed by a message in the conversation) in
|
|
146
|
+
* `conversationId`, decided the same way as session access.
|
|
147
|
+
*
|
|
148
|
+
* A NAMED principal is allowed without a read: its entity permissions and row filters already decided
|
|
149
|
+
* whether it could load the message, and a named user is fully identified by its `UserID`. An ANONYMOUS
|
|
150
|
+
* principal is not (see the module doc), so the conversation is read as the caller and
|
|
151
|
+
* {@link AuthorizeSessionAccess} compares its scope id with the conversation's stamp — the same
|
|
152
|
+
* decision #5997 applies to the realtime gates, so the text and voice paths agree on ownership.
|
|
153
|
+
* An unreadable conversation refuses (`not_owner`, there is no owner to match).
|
|
154
|
+
*/
|
|
155
|
+
export declare function AuthorizeConversationTurn(conversationId: string, principal: UserInfo, provider: IMetadataProvider): Promise<SessionAccessDecision>;
|
|
156
|
+
/**
|
|
157
|
+
* Whether an anonymous caller owns any of a LiveKit room's agent sessions — the check MJServer registers with
|
|
158
|
+
* `RoomAuthorizationService.SetAnonymousSessionOwnerCheck` (`@memberjunction/livekit-room-server` cannot import
|
|
159
|
+
* this package). Each session is loaded as the caller (its row-level security applies) and decided by
|
|
160
|
+
* {@link AuthorizeSessionAccess}, the same decision every realtime gate makes, so a room admits exactly the visitor
|
|
161
|
+
* whose scope id its session's conversation carries (MJ#6044). Nothing to read, or no provider: refused.
|
|
162
|
+
*/
|
|
163
|
+
export declare function AuthorizeAnonymousRoomSessions(agentSessionIds: string[], user: UserInfo, provider: IMetadataProvider | undefined): Promise<boolean>;
|
|
164
|
+
/**
|
|
165
|
+
* The session conversation's `ExternalID` alone; null when there is none or it cannot be read.
|
|
166
|
+
* Prefer {@link LoadSessionConversationScope}, which also says whether the read succeeded.
|
|
167
|
+
*/
|
|
168
|
+
export declare function LoadSessionConversationExternalID(session: MJAIAgentSessionEntity, contextUser: UserInfo, provider: IMetadataProvider): Promise<string | null>;
|
|
86
169
|
//# sourceMappingURL=sessionAccess.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionAccess.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/sessionAccess.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sessionAccess.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/sessionAccess.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
* ## The two ownership rules
|
|
10
10
|
*
|
|
11
11
|
* 1. **Owner.** The session's `UserID` must be the caller's user.
|
|
12
|
-
* 2. **Scope.** A *named* user is fully identified by (1). An **anonymous widget guest
|
|
13
|
-
* every
|
|
14
|
-
* address any other
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
12
|
+
* 2. **Scope.** A *named* user is fully identified by (1). An **anonymous visitor** (widget guest or
|
|
13
|
+
* anonymous magic-link invitee) is not: every one authenticates as the one shared Anonymous user, so
|
|
14
|
+
* (1) alone would let any visitor address any other visitor's session. What separates them is the
|
|
15
|
+
* scope identity {@link ResolveSessionScopeIdentity} reads off the signed token — the resource scope
|
|
16
|
+
* (`MagicLinkScope.ResourceID`) when the token carries one, else the per-token `mj_sid`
|
|
17
|
+
* (`AnonymousVisitorID`). `SessionManager` stamps that same value onto the session's Conversation as
|
|
18
|
+
* `ExternalID`, so a principal with a scope identity must match it, and an anonymous principal with
|
|
19
|
+
* none is refused outright — it cannot be told apart from every other anonymous principal.
|
|
20
|
+
* One allowance: a NAMED principal with a resource scope may also use its own session whose
|
|
21
|
+
* conversation carries no stamp at all, when it could read that conversation (see the comment in
|
|
22
|
+
* {@link AuthorizeSessionAccess}).
|
|
19
23
|
*
|
|
20
24
|
* The decision is deliberately pure (no I/O) so it can be applied identically to a freshly loaded
|
|
21
25
|
* row at subscribe time and to the owner/scope snapshot carried inside each published event.
|
|
@@ -27,6 +31,25 @@ import { IsValidUUID, UUIDsEqual } from '@memberjunction/global';
|
|
|
27
31
|
/** Entity names, centralised so the `MJ: ` prefix convention lives in one place. */
|
|
28
32
|
const SESSION_ENTITY = 'MJ: AI Agent Sessions';
|
|
29
33
|
const CONVERSATION_ENTITY = 'MJ: Conversations';
|
|
34
|
+
/**
|
|
35
|
+
* The scope identity a session is keyed on for `principal` — the one value `SessionManager` stamps as
|
|
36
|
+
* the session conversation's `ExternalID` and {@link AuthorizeSessionAccess} compares against it.
|
|
37
|
+
*
|
|
38
|
+
* - The token's resource scope (`MagicLinkScope.ResourceID`) when it carries one. A widget guest's
|
|
39
|
+
* resource scope IS its `mj_sid`; an anonymous magic-link invite with a `ResourceID` (e.g. a Caliber
|
|
40
|
+
* Invite Scope, one per subject) shares that scope across its redemptions by design, and the
|
|
41
|
+
* `{{ScopeResourceID}}` RLS filters key on the same value, so the visitor can read its own rows.
|
|
42
|
+
* - Otherwise, for an anonymous principal, the per-token `mj_sid` (`AnonymousVisitorID`), which tells two
|
|
43
|
+
* redemptions of an unscoped multi-use invite apart.
|
|
44
|
+
* - Otherwise `undefined` (a named user without a resource scope).
|
|
45
|
+
*/
|
|
46
|
+
export function ResolveSessionScopeIdentity(principal) {
|
|
47
|
+
const resourceId = principal.MagicLinkScope?.ResourceID;
|
|
48
|
+
if (resourceId) {
|
|
49
|
+
return resourceId;
|
|
50
|
+
}
|
|
51
|
+
return principal.IsMagicLinkAnonymous ? principal.AnonymousVisitorID || undefined : undefined;
|
|
52
|
+
}
|
|
30
53
|
/**
|
|
31
54
|
* Decides whether `principal` may address the session described by `subject`.
|
|
32
55
|
*
|
|
@@ -39,14 +62,26 @@ export function AuthorizeSessionAccess(subject, principal) {
|
|
|
39
62
|
if (!principal?.ID || !subject.SessionUserID || !UUIDsEqual(subject.SessionUserID, principal.ID)) {
|
|
40
63
|
return { Allowed: false, Reason: 'not_owner' };
|
|
41
64
|
}
|
|
42
|
-
const scopeId = principal
|
|
65
|
+
const scopeId = ResolveSessionScopeIdentity(principal);
|
|
43
66
|
if (!scopeId) {
|
|
44
|
-
//
|
|
45
|
-
//
|
|
67
|
+
// A named user without a scope is identified by the owner check alone; an anonymous principal
|
|
68
|
+
// without one cannot be told apart from any other anonymous principal.
|
|
46
69
|
return principal.IsMagicLinkAnonymous ? { Allowed: false, Reason: 'scope_missing' } : { Allowed: true };
|
|
47
70
|
}
|
|
48
71
|
// Scope ids are opaque base64url strings (case-significant), so compare exactly — not UUIDsEqual.
|
|
49
|
-
|
|
72
|
+
if (subject.ConversationExternalID === scopeId) {
|
|
73
|
+
return { Allowed: true };
|
|
74
|
+
}
|
|
75
|
+
// A named user is identified by the owner check; its scope only keeps one link's sessions apart from
|
|
76
|
+
// the same person's other links (magic links resolve the user by email, so one person can hold several).
|
|
77
|
+
// A conversation with no stamp belongs to no link (one started from the Conversations app), so the owner
|
|
78
|
+
// may use it when its own row-level security let it read the conversation. `ExternalID` is not stamped
|
|
79
|
+
// here because other features own that column on their conversations (meeting room names, for example).
|
|
80
|
+
// An anonymous visitor gets no such allowance: the stamp is the only thing that identifies it.
|
|
81
|
+
if (!principal.IsMagicLinkAnonymous && subject.ConversationExternalID === null && subject.ConversationReadable === true) {
|
|
82
|
+
return { Allowed: true };
|
|
83
|
+
}
|
|
84
|
+
return { Allowed: false, Reason: 'scope_mismatch' };
|
|
50
85
|
}
|
|
51
86
|
/**
|
|
52
87
|
* Loads a session (and its conversation's scope id) under `contextUser`'s identity.
|
|
@@ -67,24 +102,96 @@ export async function LoadSessionForAccess(agentSessionId, contextUser, provider
|
|
|
67
102
|
if (!(await session.Load(agentSessionId))) {
|
|
68
103
|
return null;
|
|
69
104
|
}
|
|
70
|
-
|
|
105
|
+
const conversation = await LoadSessionConversationScope(session, contextUser, provider);
|
|
106
|
+
return { Session: session, ConversationExternalID: conversation.ExternalID, ConversationReadable: conversation.Readable };
|
|
71
107
|
}
|
|
72
|
-
/**
|
|
73
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Reads an already-loaded session's conversation under `contextUser` (so its row-level security applies).
|
|
110
|
+
* A missing conversation, a refused read and a failed read (logged) all report `Readable: false`. For
|
|
111
|
+
* callers that loaded the session through another gate and only need the scope half of
|
|
112
|
+
* {@link AuthorizeSessionAccess}'s subject.
|
|
113
|
+
*/
|
|
114
|
+
export async function LoadSessionConversationScope(session, contextUser, provider) {
|
|
74
115
|
if (!session.ConversationID) {
|
|
75
|
-
return null;
|
|
116
|
+
return { ExternalID: null, Readable: false };
|
|
117
|
+
}
|
|
118
|
+
const { ExternalID, Readable } = await LoadConversationScope(session.ConversationID, contextUser, provider);
|
|
119
|
+
return { ExternalID, Readable };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Reads a conversation's owner and scope id under `contextUser` (so its row-level security applies), for a
|
|
123
|
+
* caller that addresses the conversation directly rather than through a session — a text agent turn, for
|
|
124
|
+
* example, whose only handle is a message in it. Together with the caller's principal this is exactly the
|
|
125
|
+
* subject {@link AuthorizeSessionAccess} decides on: `SessionUserID` is the conversation's owner, since the
|
|
126
|
+
* session a conversation belongs to is owned by the same user.
|
|
127
|
+
*
|
|
128
|
+
* An empty id, a missing conversation, a refused read and a failed read (logged) all report
|
|
129
|
+
* `Readable: false` with no owner, which {@link AuthorizeSessionAccess} then refuses for any scoped caller.
|
|
130
|
+
*/
|
|
131
|
+
export async function LoadConversationScope(conversationId, contextUser, provider) {
|
|
132
|
+
const unreadable = { UserID: null, ExternalID: null, Readable: false };
|
|
133
|
+
if (!conversationId) {
|
|
134
|
+
return unreadable;
|
|
76
135
|
}
|
|
77
136
|
try {
|
|
78
137
|
const conversation = await provider.GetEntityObject(CONVERSATION_ENTITY, contextUser);
|
|
79
|
-
if (!(await conversation.Load(
|
|
80
|
-
return
|
|
138
|
+
if (!(await conversation.Load(conversationId))) {
|
|
139
|
+
return unreadable;
|
|
81
140
|
}
|
|
82
|
-
return conversation.ExternalID ?? null;
|
|
141
|
+
return { UserID: conversation.UserID ?? null, ExternalID: conversation.ExternalID ?? null, Readable: true };
|
|
83
142
|
}
|
|
84
143
|
catch (error) {
|
|
85
144
|
const message = error instanceof Error ? error.message : String(error);
|
|
86
|
-
LogError(`
|
|
87
|
-
return
|
|
145
|
+
LogError(`LoadConversationScope: could not read conversation ${conversationId} for user ${contextUser?.ID}: ${message}`);
|
|
146
|
+
return unreadable;
|
|
88
147
|
}
|
|
89
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Who may run a conversation turn (a text agent turn, addressed by a message in the conversation) in
|
|
151
|
+
* `conversationId`, decided the same way as session access.
|
|
152
|
+
*
|
|
153
|
+
* A NAMED principal is allowed without a read: its entity permissions and row filters already decided
|
|
154
|
+
* whether it could load the message, and a named user is fully identified by its `UserID`. An ANONYMOUS
|
|
155
|
+
* principal is not (see the module doc), so the conversation is read as the caller and
|
|
156
|
+
* {@link AuthorizeSessionAccess} compares its scope id with the conversation's stamp — the same
|
|
157
|
+
* decision #5997 applies to the realtime gates, so the text and voice paths agree on ownership.
|
|
158
|
+
* An unreadable conversation refuses (`not_owner`, there is no owner to match).
|
|
159
|
+
*/
|
|
160
|
+
export async function AuthorizeConversationTurn(conversationId, principal, provider) {
|
|
161
|
+
if (!principal?.IsMagicLinkAnonymous) {
|
|
162
|
+
return { Allowed: true };
|
|
163
|
+
}
|
|
164
|
+
const scope = await LoadConversationScope(conversationId, principal, provider);
|
|
165
|
+
return AuthorizeSessionAccess({ SessionUserID: scope.UserID ?? '', ConversationExternalID: scope.ExternalID, ConversationReadable: scope.Readable }, principal);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Whether an anonymous caller owns any of a LiveKit room's agent sessions — the check MJServer registers with
|
|
169
|
+
* `RoomAuthorizationService.SetAnonymousSessionOwnerCheck` (`@memberjunction/livekit-room-server` cannot import
|
|
170
|
+
* this package). Each session is loaded as the caller (its row-level security applies) and decided by
|
|
171
|
+
* {@link AuthorizeSessionAccess}, the same decision every realtime gate makes, so a room admits exactly the visitor
|
|
172
|
+
* whose scope id its session's conversation carries (MJ#6044). Nothing to read, or no provider: refused.
|
|
173
|
+
*/
|
|
174
|
+
export async function AuthorizeAnonymousRoomSessions(agentSessionIds, user, provider) {
|
|
175
|
+
if (agentSessionIds.length === 0 || !provider) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
for (const agentSessionId of agentSessionIds) {
|
|
179
|
+
const loaded = await LoadSessionForAccess(agentSessionId, user, provider);
|
|
180
|
+
if (!loaded) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const decision = AuthorizeSessionAccess({ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID, ConversationReadable: loaded.ConversationReadable }, user);
|
|
184
|
+
if (decision.Allowed) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The session conversation's `ExternalID` alone; null when there is none or it cannot be read.
|
|
192
|
+
* Prefer {@link LoadSessionConversationScope}, which also says whether the read succeeded.
|
|
193
|
+
*/
|
|
194
|
+
export async function LoadSessionConversationExternalID(session, contextUser, provider) {
|
|
195
|
+
return (await LoadSessionConversationScope(session, contextUser, provider)).ExternalID;
|
|
196
|
+
}
|
|
90
197
|
//# sourceMappingURL=sessionAccess.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionAccess.js","sourceRoot":"","sources":["../../src/realtimeSessions/sessionAccess.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sessionAccess.js","sourceRoot":"","sources":["../../src/realtimeSessions/sessionAccess.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,7 +84,7 @@ export async function LoadInheritedVerifiedIdentity(lastSessionId, contextUser,
|
|
|
84
84
|
if (!prior) {
|
|
85
85
|
return undefined;
|
|
86
86
|
}
|
|
87
|
-
const decision = AuthorizeSessionAccess({ SessionUserID: prior.Session.UserID, ConversationExternalID: prior.ConversationExternalID }, contextUser);
|
|
87
|
+
const decision = AuthorizeSessionAccess({ SessionUserID: prior.Session.UserID, ConversationExternalID: prior.ConversationExternalID, ConversationReadable: prior.ConversationReadable }, contextUser);
|
|
88
88
|
if (decision.Allowed === false) {
|
|
89
89
|
return undefined;
|
|
90
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionConfigStamps.js","sourceRoot":"","sources":["../../src/realtimeSessions/sessionConfigStamps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EACH,mDAAmD,EACnD,mCAAmC,EACnC,sBAAsB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,iBAAiB,EACjB,6BAA6B,EAC7B,8BAA8B,GAGjC,MAAM,uBAAuB,CAAC;AAO/B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAKrC;IACG,MAAM,KAAK,GAAG,mDAAmD,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,aAAa,GAAG,6BAA6B,CAAC,IAAI,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;IACjH,MAAM,KAAK,GAA8B;QACrC,GAAG,aAAa;QAChB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAClI,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,uBAAuB,CAAC,CAAC;IAC5F,MAAM,WAAW,GAAG,UAAU;QAC1B,CAAC,CAAC,sBAAsB,CAAC,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;QAC7H,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,EAAE,aAAa,EAAE,8BAA8B,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;AACzG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAC/C,aAAiC,EACjC,WAAqB,EACrB,QAA2B;IAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB,CACnC,EAAE,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"sessionConfigStamps.js","sourceRoot":"","sources":["../../src/realtimeSessions/sessionConfigStamps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EACH,mDAAmD,EACnD,mCAAmC,EACnC,sBAAsB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,iBAAiB,EACjB,6BAA6B,EAC7B,8BAA8B,GAGjC,MAAM,uBAAuB,CAAC;AAO/B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAKrC;IACG,MAAM,KAAK,GAAG,mDAAmD,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,aAAa,GAAG,6BAA6B,CAAC,IAAI,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;IACjH,MAAM,KAAK,GAA8B;QACrC,GAAG,aAAa;QAChB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAClI,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,uBAAuB,CAAC,CAAC;IAC5F,MAAM,WAAW,GAAG,UAAU;QAC1B,CAAC,CAAC,sBAAsB,CAAC,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;QAC7H,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,EAAE,aAAa,EAAE,8BAA8B,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;AACzG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAC/C,aAAiC,EACjC,WAAqB,EACrB,QAA2B;IAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB,CACnC,EAAE,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE,EAC/I,WAAW,CACd,CAAC;IACF,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,6BAA6B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC,QAAQ,CAAC;AAC9G,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptionAuthorization.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/subscriptionAuthorization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgD,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IACzC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAUD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,gCAAgC,CAAC;IAC1C,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,4BAA4B,GAAG,SAAS,CAAC;CACrD,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"subscriptionAuthorization.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/subscriptionAuthorization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgD,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IACzC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAUD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,gCAAgC,CAAC;IAC1C,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,4BAA4B,GAAG,SAAS,CAAC;CACrD,GAAG,OAAO,CAYV;AAED,0FAA0F;AAC1F,MAAM,WAAW,6BAA6B;IAC1C,mDAAmD;IACnD,WAAW,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC7H,2FAA2F;IAC3F,WAAW,EAAE,MAAM,iBAAiB,CAAC;CACxC;AAED,+BAA+B;AAC/B,eAAO,MAAM,uCAAuC,EAAE,6BAGrD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,oCAAoC,CACtD,IAAI,EAAE,yBAAyB,EAC/B,OAAO,EAAE,4BAA4B,GAAG,SAAS,EACjD,IAAI,GAAE,6BAAuE,GAC9E,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
|
|
@@ -34,7 +34,10 @@ export function RealtimeSessionEventsFilter(data) {
|
|
|
34
34
|
if (typeof args?.agentSessionId !== 'string' || !payload?.AgentSessionID || !UUIDsEqual(payload.AgentSessionID, args.agentSessionId)) {
|
|
35
35
|
return false;
|
|
36
36
|
}
|
|
37
|
-
const decision = AuthorizeSessionAccess(
|
|
37
|
+
const decision = AuthorizeSessionAccess(
|
|
38
|
+
// Readability is per caller and was proven when this subscription opened (it only receives events for
|
|
39
|
+
// that one session); the snapshot carries just the stamp, so a null ScopeKey stays usable by that owner.
|
|
40
|
+
{ SessionUserID: payload.OwnerUserID, ConversationExternalID: payload.ScopeKey, ConversationReadable: true }, connectionPrincipal(context));
|
|
38
41
|
return decision.Allowed;
|
|
39
42
|
}
|
|
40
43
|
/** Production dependencies. */
|
|
@@ -61,7 +64,7 @@ export async function AuthorizeRealtimeSessionSubscription(args, context, deps =
|
|
|
61
64
|
if (!loaded) {
|
|
62
65
|
throw new Error(REFUSAL_MESSAGE);
|
|
63
66
|
}
|
|
64
|
-
const decision = AuthorizeSessionAccess({ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID }, principal);
|
|
67
|
+
const decision = AuthorizeSessionAccess({ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID, ConversationReadable: loaded.ConversationReadable }, principal);
|
|
65
68
|
if (decision.Allowed === false) {
|
|
66
69
|
LogError(`RealtimeSessionEvents: refused subscription by user ${principal.ID} to session ${agentSessionId} (${decision.Reason}).`);
|
|
67
70
|
throw new Error(REFUSAL_MESSAGE);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptionAuthorization.js","sourceRoot":"","sources":["../../src/realtimeSessions/subscriptionAuthorization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAqB,QAAQ,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAA+B,MAAM,oBAAoB,CAAC;AAmB/G,gGAAgG;AAChG,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAEtD,mEAAmE;AACnE,SAAS,mBAAmB,CAAC,OAAiD;IAC1E,OAAO,OAAO,EAAE,WAAW,EAAE,UAAkC,CAAC;AACpE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAI3C;IACG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,OAAO,IAAI,EAAE,cAAc,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACnI,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"subscriptionAuthorization.js","sourceRoot":"","sources":["../../src/realtimeSessions/subscriptionAuthorization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAqB,QAAQ,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAA+B,MAAM,oBAAoB,CAAC;AAmB/G,gGAAgG;AAChG,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAEtD,mEAAmE;AACnE,SAAS,mBAAmB,CAAC,OAAiD;IAC1E,OAAO,OAAO,EAAE,WAAW,EAAE,UAAkC,CAAC;AACpE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAI3C;IACG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,OAAO,IAAI,EAAE,cAAc,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACnI,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB;IACnC,sGAAsG;IACtG,yGAAyG;IACzG,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,sBAAsB,EAAE,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAC5G,mBAAmB,CAAC,OAAO,CAAC,CAC/B,CAAC;IACF,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC5B,CAAC;AAUD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,uCAAuC,GAAkC;IAClF,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,oFAAoF;CAC7H,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACtD,IAA+B,EAC/B,OAAiD,EACjD,OAAsC,uCAAuC;IAE7E,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAI,EAAE,cAAc,CAAC;IAC5C,IAAI,CAAC,SAAS,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB,CACnC,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,EAAE,EAClJ,SAAS,CACZ,CAAC;IACF,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,QAAQ,CAAC,uDAAuD,SAAS,CAAC,EAAE,eAAe,cAAc,KAAK,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;QACnI,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,cAAc,CAAC;AAC1B,CAAC"}
|
|
@@ -64,6 +64,8 @@ export interface SessionSnapshot {
|
|
|
64
64
|
OwnerUserID: string;
|
|
65
65
|
/** `Conversation.ExternalID` (anonymous scope id), or null. */
|
|
66
66
|
ConversationExternalID: string | null;
|
|
67
|
+
/** Whether the caller could read the session's conversation. */
|
|
68
|
+
ConversationReadable: boolean;
|
|
67
69
|
Status: 'Active' | 'Idle' | 'Closed';
|
|
68
70
|
/** `AIAgentSession.Config` as stored. */
|
|
69
71
|
ConfigRaw: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verificationWorkflow.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/verificationWorkflow.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verificationWorkflow.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/verificationWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -395,7 +395,7 @@ export class RealtimeSessionVerificationWorkflow {
|
|
|
395
395
|
if (!session) {
|
|
396
396
|
return notFound;
|
|
397
397
|
}
|
|
398
|
-
const decision = AuthorizeSessionAccess({ SessionUserID: session.OwnerUserID, ConversationExternalID: session.ConversationExternalID }, caller.ContextUser);
|
|
398
|
+
const decision = AuthorizeSessionAccess({ SessionUserID: session.OwnerUserID, ConversationExternalID: session.ConversationExternalID, ConversationReadable: session.ConversationReadable }, caller.ContextUser);
|
|
399
399
|
if (decision.Allowed === false) {
|
|
400
400
|
LogError(`RealtimeSessionVerification: refused user ${caller.ContextUser.ID} on session ${agentSessionId} (${decision.Reason}).`);
|
|
401
401
|
return notFound;
|