@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
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { EntityInfo } from '@memberjunction/core';
|
|
1
3
|
export declare const CACHE_INVALIDATION_TOPIC = "CACHE_INVALIDATION";
|
|
2
4
|
/**
|
|
3
5
|
* Supply the configured allowlist. Called once from the server entry point during bootstrap.
|
|
@@ -15,17 +17,23 @@ export declare function ConfigureRecordDataBroadcast(entities: readonly string[]
|
|
|
15
17
|
*
|
|
16
18
|
* The subscription below is filtered only by ENTITY-level read permission, so anything included
|
|
17
19
|
* here is disclosed to every signed-in session that may read the entity at all — regardless of
|
|
18
|
-
* row-level security or any tenant scoping a consumer applies on the read
|
|
19
|
-
* this push traverses. The answer is therefore NO unless a deployment has
|
|
20
|
-
* entity in via `cacheSettings.recordDataBroadcastEntities
|
|
20
|
+
* row-level security, field-level security, or any tenant scoping a consumer applies on the read
|
|
21
|
+
* path, none of which this push traverses. The answer is therefore NO unless a deployment has
|
|
22
|
+
* explicitly opted the entity in via `cacheSettings.recordDataBroadcastEntities`, and always NO
|
|
23
|
+
* for an entity under field-level security (its own flag or an IS-A ancestor's), and for
|
|
24
|
+
* `MJ: Record Changes`, whatever the allowlist says: the row would carry columns (or, for Record
|
|
25
|
+
* Changes, other entities' values) some of those sessions may not read.
|
|
21
26
|
*
|
|
22
27
|
* Callers that get `false` simply omit `recordData`; the event still carries the entity name and
|
|
23
28
|
* primary key, so clients evict and re-fetch through the normal access-controlled read path.
|
|
24
29
|
*
|
|
25
30
|
* Matching is exact (trimmed, case-insensitive) rather than substring: a loose match would let an
|
|
26
31
|
* allowlisted name drag in every entity whose name contains it.
|
|
32
|
+
*
|
|
33
|
+
* @param entityInfo The entity's metadata, when the caller holds it. Otherwise it is looked up by
|
|
34
|
+
* name, so the field-security refusal applies either way.
|
|
27
35
|
*/
|
|
28
|
-
export declare function MayBroadcastRecordData(entityName: string): boolean;
|
|
36
|
+
export declare function MayBroadcastRecordData(entityName: string, entityInfo?: EntityInfo | null): boolean;
|
|
29
37
|
export declare class CacheInvalidationNotification {
|
|
30
38
|
EntityName: string;
|
|
31
39
|
PrimaryKeyValues?: string;
|
|
@@ -34,6 +42,22 @@ export declare class CacheInvalidationNotification {
|
|
|
34
42
|
Timestamp: Date;
|
|
35
43
|
OriginSessionID?: string;
|
|
36
44
|
RecordData?: string;
|
|
45
|
+
Sequence?: number;
|
|
46
|
+
}
|
|
47
|
+
export declare class CacheInvalidationCatchUpResult {
|
|
48
|
+
RequiresFullRefresh: boolean;
|
|
49
|
+
CurrentSequence: number;
|
|
50
|
+
ServerProcessID: string;
|
|
51
|
+
Events: CacheInvalidationNotification[];
|
|
52
|
+
}
|
|
53
|
+
export declare class CacheBroadcastConnectionToken {
|
|
54
|
+
Provider: string;
|
|
55
|
+
Url: string;
|
|
56
|
+
Token?: string;
|
|
57
|
+
Groups: string[];
|
|
58
|
+
ExpiresAt: string;
|
|
59
|
+
ServerProcessID: string;
|
|
60
|
+
CurrentSequence: number;
|
|
37
61
|
}
|
|
38
62
|
/**
|
|
39
63
|
* Payload interface for publishing cache invalidation events.
|
|
@@ -47,6 +71,7 @@ export interface CacheInvalidationPayload {
|
|
|
47
71
|
timestamp: Date;
|
|
48
72
|
originSessionId?: string;
|
|
49
73
|
recordData?: string;
|
|
74
|
+
sequence?: number;
|
|
50
75
|
}
|
|
51
76
|
/**
|
|
52
77
|
* What the subscription filter needs off the WS connection.
|
|
@@ -75,13 +100,51 @@ export interface CacheInvalidationFilterContext {
|
|
|
75
100
|
* see the class docblock below.
|
|
76
101
|
*
|
|
77
102
|
* `GetUserPermisions` is an in-memory match of the entity's permission rows against the user's
|
|
78
|
-
* roles,
|
|
79
|
-
*
|
|
103
|
+
* roles, memoized per `(payload, entityName, roleFingerprint)` by the active
|
|
104
|
+
* {@link BaseCacheInvalidationBroadcastProvider} so $N$ connected subscribers sharing $R$ role
|
|
105
|
+
* combinations only run `GetUserPermisions` $R$ times per event.
|
|
80
106
|
*/
|
|
81
107
|
export declare function CacheInvalidationFilter(data: {
|
|
82
108
|
payload: CacheInvalidationPayload;
|
|
83
109
|
context: CacheInvalidationFilterContext | undefined;
|
|
84
110
|
}): boolean;
|
|
111
|
+
/** The part of a permission row and of a user this module reads, so the rule can be tested on plain objects. */
|
|
112
|
+
export interface ReadPermissionRow {
|
|
113
|
+
RoleID: string;
|
|
114
|
+
CanRead: boolean | null;
|
|
115
|
+
/** `Deny` rows subtract; they never carry the read the rule looks at. */
|
|
116
|
+
IsDeny?: boolean;
|
|
117
|
+
Type?: string | null;
|
|
118
|
+
ReadRLSFilterID: string | null;
|
|
119
|
+
}
|
|
120
|
+
export interface RoleHolder {
|
|
121
|
+
UserRoles?: ReadonlyArray<{
|
|
122
|
+
RoleID: string;
|
|
123
|
+
}> | null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Is this user's read of the entity row-filtered? True when every read the user holds on the entity comes through a permission
|
|
127
|
+
* row that carries a `ReadRLSFilterID`: there is a row-level security filter between them and the rows, so a record's key, its
|
|
128
|
+
* existence and when it changed are not theirs to learn unless the row passes the filter — which a subscription filter cannot
|
|
129
|
+
* evaluate per event. False when any of their read rows is unfiltered (they could read the row anyway), and false when they hold
|
|
130
|
+
* no read at all (the entity-level filter has already withheld the event).
|
|
131
|
+
*
|
|
132
|
+
* The same in-memory match `GetUserPermisions` does, with no I/O, so it can run per subscriber per event.
|
|
133
|
+
*/
|
|
134
|
+
export declare function ReadIsRowFiltered(entity: {
|
|
135
|
+
Permissions: ReadonlyArray<ReadPermissionRow>;
|
|
136
|
+
}, user: RoleHolder): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* The event as one subscriber may see it. A subscriber whose read of the entity is row-filtered gets the entity, the action and
|
|
139
|
+
* the time, and neither the key nor the row: "something in this entity changed", which the client already takes as a
|
|
140
|
+
* whole-entity invalidation (a null key on `remote-invalidate`). Everyone else gets the event as published.
|
|
141
|
+
*
|
|
142
|
+
* Memoized per `(payload, entity, roleFingerprint)` via the active broadcast provider so $N$ subscribers
|
|
143
|
+
* sharing $R$ role buckets only allocate and evaluate `ReadIsRowFiltered` $R$ times per event.
|
|
144
|
+
*/
|
|
145
|
+
export declare function ShapeCacheInvalidationEvent(payload: CacheInvalidationPayload, user: RoleHolder | undefined, entity: {
|
|
146
|
+
Permissions: ReadonlyArray<ReadPermissionRow>;
|
|
147
|
+
} | null | undefined): CacheInvalidationNotification;
|
|
85
148
|
/** @deprecated Use {@link CacheInvalidationFilter}. */
|
|
86
149
|
export declare function cacheInvalidationFilter(data: {
|
|
87
150
|
payload: CacheInvalidationPayload;
|
|
@@ -92,31 +155,23 @@ export declare class CacheInvalidationResolver {
|
|
|
92
155
|
* Subscription that broadcasts cache invalidation events to connected clients, so cross-server
|
|
93
156
|
* cache invalidation reaches browsers.
|
|
94
157
|
*
|
|
95
|
-
* Delivery is filtered
|
|
96
|
-
*
|
|
97
|
-
* other session and tenant.
|
|
98
|
-
*
|
|
99
|
-
* Because that narrowing stops well short of row level, `RecordData` is only populated for entities a
|
|
100
|
-
* deployment has opted in through `cacheSettings.recordDataBroadcastEntities` — see
|
|
101
|
-
* {@link MayBroadcastRecordData}, applied at both publish sites.
|
|
102
|
-
*
|
|
103
|
-
* `EntityName`, `PrimaryKeyValues`, `Action` and `Timestamp` ARE still broadcast to every
|
|
104
|
-
* session, and that is a disclosure, not a safe residue. An earlier version of this comment
|
|
105
|
-
* called them "safe to broadcast" on the grounds that reading the record still goes through
|
|
106
|
-
* the access-controlled path — true of the row's CONTENTS, and beside the point for the
|
|
107
|
-
* metadata itself. A session with no relationship to a record still learns that it exists,
|
|
108
|
-
* its stable key, and every time it changes; across entities it learns the cadence and volume
|
|
109
|
-
* of another tenant's activity.
|
|
110
|
-
*
|
|
111
|
-
* The key is kept deliberately, because consumers need it to re-read the record they were
|
|
112
|
-
* told about (see `ResolveEntityEventKey` in @memberjunction/core) and because the alternative
|
|
113
|
-
* — a coarse "something in this entity changed" — forces whole-entity invalidation on the
|
|
114
|
-
* hottest write paths. That is a trade, not an absence of cost. Narrowing it means filtering
|
|
115
|
-
* delivery per subscriber, which needs an authorization predicate cheap enough to run per
|
|
116
|
-
* subscriber per event; entity-level permissions (`EntityInfo.GetUserPermisions`, an in-memory
|
|
117
|
-
* role match) would cover part of it, row-level tenancy would not.
|
|
158
|
+
* Delivery is filtered by ENTITY-level read permission (see {@link CacheInvalidationFilter})
|
|
159
|
+
* and shaped per role-fingerprint bucket (see {@link ShapeCacheInvalidationEvent}).
|
|
118
160
|
*/
|
|
119
161
|
cacheInvalidation(// case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
120
|
-
payload: CacheInvalidationPayload): CacheInvalidationNotification;
|
|
162
|
+
payload: CacheInvalidationPayload, context: CacheInvalidationFilterContext | undefined): CacheInvalidationNotification;
|
|
163
|
+
/**
|
|
164
|
+
* Returns all permission-allowed, RLS-shaped cache invalidation events strictly after
|
|
165
|
+
* `sinceSequence` from the server's bounded circular ring buffer.
|
|
166
|
+
*
|
|
167
|
+
* Invoked by `GraphQLDataProvider` when an HTTP response's `X-MJ-Cache-Seq` header or a
|
|
168
|
+
* WebSocket reconnect reveals missed invalidation sequence numbers.
|
|
169
|
+
*/
|
|
170
|
+
GetCacheInvalidationsSince(sinceSequence: number, context: CacheInvalidationFilterContext | undefined): CacheInvalidationCatchUpResult;
|
|
171
|
+
/**
|
|
172
|
+
* Negotiates a client broadcast connection (URL, signed token, and authorized role-bucket groups)
|
|
173
|
+
* for the active {@link BaseCacheInvalidationBroadcastProvider}.
|
|
174
|
+
*/
|
|
175
|
+
NegotiateCacheBroadcastConnection(context: CacheInvalidationFilterContext | undefined): Promise<CacheBroadcastConnectionToken>;
|
|
121
176
|
}
|
|
122
177
|
//# sourceMappingURL=CacheInvalidationResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheInvalidationResolver.d.ts","sourceRoot":"","sources":["../../src/generic/CacheInvalidationResolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CacheInvalidationResolver.d.ts","sourceRoot":"","sources":["../../src/generic/CacheInvalidationResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
13
|
+
import 'reflect-metadata';
|
|
14
|
+
import { Arg, Ctx, Field, Int, ObjectType, Query, Resolver, Root, Subscription } from 'type-graphql';
|
|
15
|
+
import { Metadata, RecordChangeFieldSecurityProjector, RecordChangesEntityName } from '@memberjunction/core';
|
|
16
|
+
import { CacheInvalidationBroadcastManager, } from '../broadcast/index.js';
|
|
15
17
|
export const CACHE_INVALIDATION_TOPIC = 'CACHE_INVALIDATION';
|
|
16
18
|
/**
|
|
17
19
|
* Entities whose rows may ride along with an invalidation event. Empty until the server entry point
|
|
@@ -44,23 +46,57 @@ export function ConfigureRecordDataBroadcast(entities) {
|
|
|
44
46
|
*
|
|
45
47
|
* The subscription below is filtered only by ENTITY-level read permission, so anything included
|
|
46
48
|
* here is disclosed to every signed-in session that may read the entity at all — regardless of
|
|
47
|
-
* row-level security or any tenant scoping a consumer applies on the read
|
|
48
|
-
* this push traverses. The answer is therefore NO unless a deployment has
|
|
49
|
-
* entity in via `cacheSettings.recordDataBroadcastEntities
|
|
49
|
+
* row-level security, field-level security, or any tenant scoping a consumer applies on the read
|
|
50
|
+
* path, none of which this push traverses. The answer is therefore NO unless a deployment has
|
|
51
|
+
* explicitly opted the entity in via `cacheSettings.recordDataBroadcastEntities`, and always NO
|
|
52
|
+
* for an entity under field-level security (its own flag or an IS-A ancestor's), and for
|
|
53
|
+
* `MJ: Record Changes`, whatever the allowlist says: the row would carry columns (or, for Record
|
|
54
|
+
* Changes, other entities' values) some of those sessions may not read.
|
|
50
55
|
*
|
|
51
56
|
* Callers that get `false` simply omit `recordData`; the event still carries the entity name and
|
|
52
57
|
* primary key, so clients evict and re-fetch through the normal access-controlled read path.
|
|
53
58
|
*
|
|
54
59
|
* Matching is exact (trimmed, case-insensitive) rather than substring: a loose match would let an
|
|
55
60
|
* allowlisted name drag in every entity whose name contains it.
|
|
61
|
+
*
|
|
62
|
+
* @param entityInfo The entity's metadata, when the caller holds it. Otherwise it is looked up by
|
|
63
|
+
* name, so the field-security refusal applies either way.
|
|
56
64
|
*/
|
|
57
|
-
export function MayBroadcastRecordData(entityName) {
|
|
65
|
+
export function MayBroadcastRecordData(entityName, entityInfo) {
|
|
58
66
|
if (allowedRecordDataEntities.length === 0)
|
|
59
67
|
return false;
|
|
68
|
+
if (fieldSecurityApplies(entityName, entityInfo))
|
|
69
|
+
return false;
|
|
70
|
+
if (isRecordChanges(entityName, entityInfo))
|
|
71
|
+
return false;
|
|
60
72
|
if (allowedRecordDataEntities.includes('*'))
|
|
61
73
|
return true;
|
|
62
74
|
return allowedRecordDataEntities.includes(entityName.trim().toLowerCase());
|
|
63
75
|
}
|
|
76
|
+
/** Whether field-level security applies to the entity, resolving it by name when not supplied. */
|
|
77
|
+
function fieldSecurityApplies(entityName, entityInfo) {
|
|
78
|
+
const info = entityInfo ?? lookUpEntity(entityName);
|
|
79
|
+
return Boolean(info?.FieldLevelSecurityApplies);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Whether the entity is the Record Changes audit trail. Its rows carry other entities' values in
|
|
83
|
+
* `ChangesJSON` and `FullRecordJSON`, which are projected per reader, so a row is never broadcast
|
|
84
|
+
* even though field-level security is not switched on for the audit entity itself.
|
|
85
|
+
*/
|
|
86
|
+
function isRecordChanges(entityName, entityInfo) {
|
|
87
|
+
if (entityInfo)
|
|
88
|
+
return RecordChangeFieldSecurityProjector.IsRecordChangesEntity(entityInfo);
|
|
89
|
+
return entityName.trim().toLowerCase() === RecordChangesEntityName.toLowerCase();
|
|
90
|
+
}
|
|
91
|
+
/** The entity by name from the process's metadata, or undefined when none is loaded. */
|
|
92
|
+
function lookUpEntity(entityName) {
|
|
93
|
+
try {
|
|
94
|
+
return new Metadata().EntityByName(entityName) ?? undefined; // global-provider-ok: metadata lookup for a process-wide broadcast gate
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
64
100
|
let CacheInvalidationNotification = class CacheInvalidationNotification {
|
|
65
101
|
};
|
|
66
102
|
__decorate([
|
|
@@ -91,10 +127,70 @@ __decorate([
|
|
|
91
127
|
Field(() => String, { nullable: true }),
|
|
92
128
|
__metadata("design:type", String)
|
|
93
129
|
], CacheInvalidationNotification.prototype, "RecordData", void 0);
|
|
130
|
+
__decorate([
|
|
131
|
+
Field(() => Int, { nullable: true }),
|
|
132
|
+
__metadata("design:type", Number)
|
|
133
|
+
], CacheInvalidationNotification.prototype, "Sequence", void 0);
|
|
94
134
|
CacheInvalidationNotification = __decorate([
|
|
95
135
|
ObjectType()
|
|
96
136
|
], CacheInvalidationNotification);
|
|
97
137
|
export { CacheInvalidationNotification };
|
|
138
|
+
let CacheInvalidationCatchUpResult = class CacheInvalidationCatchUpResult {
|
|
139
|
+
};
|
|
140
|
+
__decorate([
|
|
141
|
+
Field(() => Boolean),
|
|
142
|
+
__metadata("design:type", Boolean)
|
|
143
|
+
], CacheInvalidationCatchUpResult.prototype, "RequiresFullRefresh", void 0);
|
|
144
|
+
__decorate([
|
|
145
|
+
Field(() => Int),
|
|
146
|
+
__metadata("design:type", Number)
|
|
147
|
+
], CacheInvalidationCatchUpResult.prototype, "CurrentSequence", void 0);
|
|
148
|
+
__decorate([
|
|
149
|
+
Field(() => String),
|
|
150
|
+
__metadata("design:type", String)
|
|
151
|
+
], CacheInvalidationCatchUpResult.prototype, "ServerProcessID", void 0);
|
|
152
|
+
__decorate([
|
|
153
|
+
Field(() => [CacheInvalidationNotification]),
|
|
154
|
+
__metadata("design:type", Array)
|
|
155
|
+
], CacheInvalidationCatchUpResult.prototype, "Events", void 0);
|
|
156
|
+
CacheInvalidationCatchUpResult = __decorate([
|
|
157
|
+
ObjectType()
|
|
158
|
+
], CacheInvalidationCatchUpResult);
|
|
159
|
+
export { CacheInvalidationCatchUpResult };
|
|
160
|
+
let CacheBroadcastConnectionToken = class CacheBroadcastConnectionToken {
|
|
161
|
+
};
|
|
162
|
+
__decorate([
|
|
163
|
+
Field(() => String),
|
|
164
|
+
__metadata("design:type", String)
|
|
165
|
+
], CacheBroadcastConnectionToken.prototype, "Provider", void 0);
|
|
166
|
+
__decorate([
|
|
167
|
+
Field(() => String),
|
|
168
|
+
__metadata("design:type", String)
|
|
169
|
+
], CacheBroadcastConnectionToken.prototype, "Url", void 0);
|
|
170
|
+
__decorate([
|
|
171
|
+
Field(() => String, { nullable: true }),
|
|
172
|
+
__metadata("design:type", String)
|
|
173
|
+
], CacheBroadcastConnectionToken.prototype, "Token", void 0);
|
|
174
|
+
__decorate([
|
|
175
|
+
Field(() => [String]),
|
|
176
|
+
__metadata("design:type", Array)
|
|
177
|
+
], CacheBroadcastConnectionToken.prototype, "Groups", void 0);
|
|
178
|
+
__decorate([
|
|
179
|
+
Field(() => String),
|
|
180
|
+
__metadata("design:type", String)
|
|
181
|
+
], CacheBroadcastConnectionToken.prototype, "ExpiresAt", void 0);
|
|
182
|
+
__decorate([
|
|
183
|
+
Field(() => String),
|
|
184
|
+
__metadata("design:type", String)
|
|
185
|
+
], CacheBroadcastConnectionToken.prototype, "ServerProcessID", void 0);
|
|
186
|
+
__decorate([
|
|
187
|
+
Field(() => Int),
|
|
188
|
+
__metadata("design:type", Number)
|
|
189
|
+
], CacheBroadcastConnectionToken.prototype, "CurrentSequence", void 0);
|
|
190
|
+
CacheBroadcastConnectionToken = __decorate([
|
|
191
|
+
ObjectType()
|
|
192
|
+
], CacheBroadcastConnectionToken);
|
|
193
|
+
export { CacheBroadcastConnectionToken };
|
|
98
194
|
/**
|
|
99
195
|
* Should this subscriber hear about this event at all?
|
|
100
196
|
*
|
|
@@ -109,33 +205,40 @@ export { CacheInvalidationNotification };
|
|
|
109
205
|
* see the class docblock below.
|
|
110
206
|
*
|
|
111
207
|
* `GetUserPermisions` is an in-memory match of the entity's permission rows against the user's
|
|
112
|
-
* roles,
|
|
113
|
-
*
|
|
208
|
+
* roles, memoized per `(payload, entityName, roleFingerprint)` by the active
|
|
209
|
+
* {@link BaseCacheInvalidationBroadcastProvider} so $N$ connected subscribers sharing $R$ role
|
|
210
|
+
* combinations only run `GetUserPermisions` $R$ times per event.
|
|
114
211
|
*/
|
|
115
212
|
export function CacheInvalidationFilter(data) {
|
|
116
213
|
const user = data.context?.userPayload?.userRecord;
|
|
117
|
-
// FAIL CLOSED on identity, matching `statusUpdatesFilter`. `onConnect` rejects a socket whose
|
|
118
|
-
// token does not validate, so a subscriber with no user record should not exist; if one does,
|
|
119
|
-
// it is the case least deserving of an unfiltered firehose.
|
|
120
214
|
if (!user) {
|
|
121
215
|
return false;
|
|
122
216
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
217
|
+
return CacheInvalidationBroadcastManager.Instance.Provider.EvaluateEntityReadAccess(data.payload, user, (entityName) => new Metadata().EntityByName(entityName) // global-provider-ok: subscription filter — server-wide metadata, no request-scoped provider exists here
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Is this user's read of the entity row-filtered? True when every read the user holds on the entity comes through a permission
|
|
222
|
+
* row that carries a `ReadRLSFilterID`: there is a row-level security filter between them and the rows, so a record's key, its
|
|
223
|
+
* existence and when it changed are not theirs to learn unless the row passes the filter — which a subscription filter cannot
|
|
224
|
+
* evaluate per event. False when any of their read rows is unfiltered (they could read the row anyway), and false when they hold
|
|
225
|
+
* no read at all (the entity-level filter has already withheld the event).
|
|
226
|
+
*
|
|
227
|
+
* The same in-memory match `GetUserPermisions` does, with no I/O, so it can run per subscriber per event.
|
|
228
|
+
*/
|
|
229
|
+
export function ReadIsRowFiltered(entity, user) {
|
|
230
|
+
return CacheInvalidationBroadcastManager.Instance.Provider.ReadIsRowFiltered(entity, user);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* The event as one subscriber may see it. A subscriber whose read of the entity is row-filtered gets the entity, the action and
|
|
234
|
+
* the time, and neither the key nor the row: "something in this entity changed", which the client already takes as a
|
|
235
|
+
* whole-entity invalidation (a null key on `remote-invalidate`). Everyone else gets the event as published.
|
|
236
|
+
*
|
|
237
|
+
* Memoized per `(payload, entity, roleFingerprint)` via the active broadcast provider so $N$ subscribers
|
|
238
|
+
* sharing $R$ role buckets only allocate and evaluate `ReadIsRowFiltered` $R$ times per event.
|
|
239
|
+
*/
|
|
240
|
+
export function ShapeCacheInvalidationEvent(payload, user, entity) {
|
|
241
|
+
return CacheInvalidationBroadcastManager.Instance.Provider.ShapeEventForSubscriber(payload, user, entity);
|
|
139
242
|
}
|
|
140
243
|
/** @deprecated Use {@link CacheInvalidationFilter}. */
|
|
141
244
|
export function cacheInvalidationFilter(data) {
|
|
@@ -146,40 +249,36 @@ let CacheInvalidationResolver = class CacheInvalidationResolver {
|
|
|
146
249
|
* Subscription that broadcasts cache invalidation events to connected clients, so cross-server
|
|
147
250
|
* cache invalidation reaches browsers.
|
|
148
251
|
*
|
|
149
|
-
* Delivery is filtered
|
|
150
|
-
*
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
* metadata itself. A session with no relationship to a record still learns that it exists,
|
|
162
|
-
* its stable key, and every time it changes; across entities it learns the cadence and volume
|
|
163
|
-
* of another tenant's activity.
|
|
252
|
+
* Delivery is filtered by ENTITY-level read permission (see {@link CacheInvalidationFilter})
|
|
253
|
+
* and shaped per role-fingerprint bucket (see {@link ShapeCacheInvalidationEvent}).
|
|
254
|
+
*/
|
|
255
|
+
cacheInvalidation(payload, context) {
|
|
256
|
+
const user = context?.userPayload?.userRecord;
|
|
257
|
+
const provider = CacheInvalidationBroadcastManager.Instance.Provider;
|
|
258
|
+
const entity = payload?.entityName ? provider.ResolveEntityForPayload(payload) : null;
|
|
259
|
+
return provider.ShapeEventForSubscriber(payload, user, entity);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Returns all permission-allowed, RLS-shaped cache invalidation events strictly after
|
|
263
|
+
* `sinceSequence` from the server's bounded circular ring buffer.
|
|
164
264
|
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
265
|
+
* Invoked by `GraphQLDataProvider` when an HTTP response's `X-MJ-Cache-Seq` header or a
|
|
266
|
+
* WebSocket reconnect reveals missed invalidation sequence numbers.
|
|
267
|
+
*/
|
|
268
|
+
GetCacheInvalidationsSince(sinceSequence, context) {
|
|
269
|
+
const user = context?.userPayload?.userRecord;
|
|
270
|
+
return CacheInvalidationBroadcastManager.Instance.Provider.GetChangesSince(sinceSequence, user);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Negotiates a client broadcast connection (URL, signed token, and authorized role-bucket groups)
|
|
274
|
+
* for the active {@link BaseCacheInvalidationBroadcastProvider}.
|
|
172
275
|
*/
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
Timestamp: payload.timestamp,
|
|
180
|
-
OriginSessionID: payload.originSessionId ?? undefined,
|
|
181
|
-
RecordData: payload.recordData ?? undefined,
|
|
182
|
-
};
|
|
276
|
+
async NegotiateCacheBroadcastConnection(context) {
|
|
277
|
+
const user = context?.userPayload?.userRecord;
|
|
278
|
+
if (!user) {
|
|
279
|
+
throw new Error('Authentication required to negotiate cache broadcast connection.');
|
|
280
|
+
}
|
|
281
|
+
return CacheInvalidationBroadcastManager.Instance.Provider.NegotiateClientConnection(user);
|
|
183
282
|
}
|
|
184
283
|
};
|
|
185
284
|
__decorate([
|
|
@@ -188,10 +287,26 @@ __decorate([
|
|
|
188
287
|
filter: (data) => CacheInvalidationFilter(data),
|
|
189
288
|
}),
|
|
190
289
|
__param(0, Root()),
|
|
290
|
+
__param(1, Ctx()),
|
|
191
291
|
__metadata("design:type", Function),
|
|
192
|
-
__metadata("design:paramtypes", [Object]),
|
|
292
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
193
293
|
__metadata("design:returntype", CacheInvalidationNotification)
|
|
194
294
|
], CacheInvalidationResolver.prototype, "cacheInvalidation", null);
|
|
295
|
+
__decorate([
|
|
296
|
+
Query(() => CacheInvalidationCatchUpResult),
|
|
297
|
+
__param(0, Arg('sinceSequence', () => Int)),
|
|
298
|
+
__param(1, Ctx()),
|
|
299
|
+
__metadata("design:type", Function),
|
|
300
|
+
__metadata("design:paramtypes", [Number, Object]),
|
|
301
|
+
__metadata("design:returntype", CacheInvalidationCatchUpResult)
|
|
302
|
+
], CacheInvalidationResolver.prototype, "GetCacheInvalidationsSince", null);
|
|
303
|
+
__decorate([
|
|
304
|
+
Query(() => CacheBroadcastConnectionToken),
|
|
305
|
+
__param(0, Ctx()),
|
|
306
|
+
__metadata("design:type", Function),
|
|
307
|
+
__metadata("design:paramtypes", [Object]),
|
|
308
|
+
__metadata("design:returntype", Promise)
|
|
309
|
+
], CacheInvalidationResolver.prototype, "NegotiateCacheBroadcastConnection", null);
|
|
195
310
|
CacheInvalidationResolver = __decorate([
|
|
196
311
|
Resolver()
|
|
197
312
|
], CacheInvalidationResolver);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheInvalidationResolver.js","sourceRoot":"","sources":["../../src/generic/CacheInvalidationResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"CacheInvalidationResolver.js","sourceRoot":"","sources":["../../src/generic/CacheInvalidationResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrG,OAAO,EAAc,QAAQ,EAAE,kCAAkC,EAAE,uBAAuB,EAAY,MAAM,sBAAsB,CAAC;AACnI,OAAO,EACH,iCAAiC,GACpC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAE7D;;;;GAIG;AACH,IAAI,yBAAyB,GAAsB,EAAE,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAA8C;IACzF,6FAA6F;IAC7F,yFAAyF;IACzF,6FAA6F;IAC7F,4FAA4F;IAC5F,iEAAiE;IACjE,yBAAyB,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAkB,EAAE,UAA8B;IACvF,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,yBAAyB,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,yBAAyB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,kGAAkG;AAClG,SAAS,oBAAoB,CAAC,UAAkB,EAAE,UAAyC;IACzF,MAAM,IAAI,GAAG,UAAU,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,UAAkB,EAAE,UAAyC;IACpF,IAAI,UAAU;QAAE,OAAO,kCAAkC,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC5F,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,uBAAuB,CAAC,WAAW,EAAE,CAAC;AACnF,CAAC;AAED,wFAAwF;AACxF,SAAS,YAAY,CAAC,UAAkB;IACtC,IAAI,CAAC;QACH,OAAO,IAAI,QAAQ,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,CAAC,wEAAwE;IACvI,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAGM,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;CAwBzC,CAAA;AAtBG;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;iEACA;AAGpB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uEACd;AAG1B;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;6DACJ;AAGhB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;qEACI;AAGxB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;8BACN,IAAI;gEAAC;AAGjB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sEACf;AAGzB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iEACpB;AAGpB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+DACnB;AAvBT,6BAA6B;IADzC,UAAU,EAAE;GACA,6BAA6B,CAwBzC;;AAGM,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;CAY1C,CAAA;AAVG;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;;2EACS;AAG9B;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;;uEACQ;AAGzB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;uEACK;AAGzB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,6BAA6B,CAAC,CAAC;;8DACJ;AAXhC,8BAA8B;IAD1C,UAAU,EAAE;GACA,8BAA8B,CAY1C;;AAGM,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;CAqBzC,CAAA;AAnBG;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;+DACF;AAGlB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;0DACP;AAGb;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4DACzB;AAGf;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;;6DACJ;AAGlB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;gEACD;AAGnB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;sEACK;AAGzB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;;sEACQ;AApBhB,6BAA6B;IADzC,UAAU,EAAE;GACA,6BAA6B,CAqBzC;;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAGvC;IACG,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAkC,CAAC;IAC3E,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,iCAAiC,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAC/E,IAAI,CAAC,OAAO,EACZ,IAAI,EACJ,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,yGAAyG;KACpK,CAAC;AACN,CAAC;AAeD;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyD,EAAE,IAAgB;IACzG,OAAO,iCAAiC,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACvC,OAAiC,EACjC,IAA4B,EAC5B,MAA4E;IAE5E,OAAO,iCAAiC,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9G,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,uBAAuB,CAAC,IAGvC;IACC,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAGM,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IAClC;;;;;;OAMG;IAMH,iBAAiB,CACL,OAAiC,EAClC,OAAmD;QAE1D,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,EAAE,UAAkC,CAAC;QACtE,MAAM,QAAQ,GAAG,iCAAiC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACrE,MAAM,MAAM,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,OAAO,QAAQ,CAAC,uBAAuB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IAEH,0BAA0B,CACW,aAAqB,EAC/C,OAAmD;QAE1D,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,EAAE,UAAkC,CAAC;QACtE,OAAO,iCAAiC,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACpG,CAAC;IAED;;;OAGG;IAEG,AAAN,KAAK,CAAC,iCAAiC,CAC5B,OAAmD;QAE1D,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,EAAE,UAAkC,CAAC;QACtE,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,iCAAiC,CAAC,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC/F,CAAC;CACJ,CAAA;AAxCG;IALC,YAAY,CAAC,GAAG,EAAE,CAAC,6BAA6B,EAAE;QAC/C,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE,CAAC,IAAgG,EAAE,EAAE,CACzG,uBAAuB,CAAC,IAAI,CAAC;KACpC,CAAC;IAEG,WAAA,IAAI,EAAE,CAAA;IACN,WAAA,GAAG,EAAE,CAAA;;;oCACP,6BAA6B;kEAK/B;AAUD;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,8BAA8B,CAAC;IAEvC,WAAA,GAAG,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAC/B,WAAA,GAAG,EAAE,CAAA;;;oCACP,8BAA8B;2EAGhC;AAOK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAAC;IAEtC,WAAA,GAAG,EAAE,CAAA;;;;kFAOT;AApDQ,yBAAyB;IADrC,QAAQ,EAAE;GACE,yBAAyB,CAqDrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrphanedConversationDetailReconciler.d.ts","sourceRoot":"","sources":["../../src/generic/OrphanedConversationDetailReconciler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGxE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAgB,CAAC;AAiBpD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,oCAAoC,CACtD,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,EAAE,QAAQ,EACrB,OAAO,GAAE,MAA+B,GACzC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"OrphanedConversationDetailReconciler.d.ts","sourceRoot":"","sources":["../../src/generic/OrphanedConversationDetailReconciler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGxE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAgB,CAAC;AAiBpD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,oCAAoC,CACtD,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,EAAE,QAAQ,EACrB,OAAO,GAAE,MAA+B,GACzC,OAAO,CAAC,MAAM,CAAC,CAoGjB"}
|
|
@@ -87,6 +87,8 @@ export async function ReconcileOrphanedConversationDetails(provider, contextUser
|
|
|
87
87
|
continue;
|
|
88
88
|
}
|
|
89
89
|
const writable = await provider.GetEntityObject('MJ: Conversation Details', owner);
|
|
90
|
+
// Closing an agent's reply is the server's write: unmarked, the gate refuses any change to what a reply says.
|
|
91
|
+
writable.MarkServerAuthoredReply();
|
|
90
92
|
if (!(await writable.Load(detail.ID))) {
|
|
91
93
|
LogError(`[OrphanDetailReconciler] Could not load detail ${detail.ID} for write`);
|
|
92
94
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrphanedConversationDetailReconciler.js","sourceRoot":"","sources":["../../src/generic/OrphanedConversationDetailReconciler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"OrphanedConversationDetailReconciler.js","sourceRoot":"","sources":["../../src/generic/OrphanedConversationDetailReconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { PubSubEngine } from 'type-graphql';
|
|
2
2
|
import { BaseSingleton } from '@memberjunction/global';
|
|
3
|
+
/**
|
|
4
|
+
* Wraps a TypeGraphQL `PubSubEngine` so that publishes to {@link PUSH_STATUS_UPDATES_TOPIC}
|
|
5
|
+
* carrying a specific `sessionId` (`sessionId !== '*'`) are dynamically routed in $O(1)$ to
|
|
6
|
+
* `PUSH_STATUS_UPDATES:session:<sessionId>` instead of waking every connected browser tab.
|
|
7
|
+
* Wildcard (`sessionId === '*'`) updates continue to publish on {@link PUSH_STATUS_UPDATES_TOPIC}.
|
|
8
|
+
*/
|
|
9
|
+
export declare function CreateSessionRoutingPubSub(pubSub: PubSubEngine): PubSubEngine;
|
|
3
10
|
/**
|
|
4
11
|
* Singleton manager that holds a reference to the type-graphql PubSubEngine,
|
|
5
12
|
* allowing any server-side code (not just resolvers with @PubSub() injection)
|
|
@@ -12,6 +19,7 @@ export declare class PubSubManager extends BaseSingleton<PubSubManager> {
|
|
|
12
19
|
/**
|
|
13
20
|
* Sets the PubSubEngine instance. Should be called once during server startup
|
|
14
21
|
* after buildSchemaSync creates the PubSub instance.
|
|
22
|
+
* Automatically installs $O(1)$ dynamic session routing for `PUSH_STATUS_UPDATES`.
|
|
15
23
|
*/
|
|
16
24
|
SetPubSubEngine(pubSub: PubSubEngine): void;
|
|
17
25
|
/**
|
|
@@ -20,6 +28,8 @@ export declare class PubSubManager extends BaseSingleton<PubSubManager> {
|
|
|
20
28
|
get PubSubEngine(): PubSubEngine | null;
|
|
21
29
|
/**
|
|
22
30
|
* Publishes a payload to the specified topic via the PubSubEngine.
|
|
31
|
+
* For `CACHE_INVALIDATION`, automatically stamps a monotonic sequence number and
|
|
32
|
+
* records the event in the active {@link BaseCacheInvalidationBroadcastProvider}'s ring buffer.
|
|
23
33
|
* No-op if the PubSubEngine has not been configured yet.
|
|
24
34
|
*/
|
|
25
35
|
Publish(topic: string, payload: Record<string, unknown>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["../../src/generic/PubSubManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["../../src/generic/PubSubManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAavD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAqB7E;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC3D,OAAO,CAAC,OAAO,CAA6B;IAE5C,SAAS;IAIT,WAAkB,QAAQ,IAAI,aAAa,CAE1C;IAED;;;;OAIG;IACI,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIlD;;OAEG;IACH,IAAW,YAAY,IAAI,YAAY,GAAG,IAAI,CAE7C;IAED;;;;;OAKG;IACI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAiBxE"}
|