@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,7 +1,8 @@
|
|
|
1
1
|
import { Arg, Ctx, Field, InputType, Int, ObjectType, PubSubEngine, Query, Resolver } from 'type-graphql';
|
|
2
2
|
import { AppContext } from '../types.js';
|
|
3
|
-
import { ResolverBase } from './ResolverBase.js';
|
|
4
|
-
import { LogError, LogStatus, EntityInfo, FieldSecurityError, RunViewWithCacheCheckResult, RunViewsWithCacheCheckResponse, RunViewWithCacheCheckParams, AggregateResult, CompositeKey } from '@memberjunction/core';
|
|
3
|
+
import { ResolverBase, type RunViewResultWithResolvedView } from './ResolverBase.js';
|
|
4
|
+
import { LogError, LogStatus, EntityInfo, FieldSecurityError, RunViewWithCacheCheckResult, RunViewsWithCacheCheckResponse, RunViewWithCacheCheckParams, AggregateResult, CompositeKey, ViewPropertyValues } from '@memberjunction/core';
|
|
5
|
+
import { GraphQLJSONObject } from 'graphql-type-json';
|
|
5
6
|
|
|
6
7
|
import { ReplaceByteArraysWithBase64, UUIDsEqual } from '@memberjunction/global';
|
|
7
8
|
import { RequireSystemUser } from '../directives/RequireSystemUser.js';
|
|
@@ -207,6 +208,20 @@ export class RunViewByIDInput {
|
|
|
207
208
|
'Optional, when true the binary fields of the entity (varbinary / bytea columns) are returned, as base64 strings. They are omitted by default because they are usually large and lists rarely read them. A binary field named explicitly in Fields is always returned.',
|
|
208
209
|
})
|
|
209
210
|
IncludeBinaryFields?: boolean;
|
|
211
|
+
|
|
212
|
+
@Field(() => String, {
|
|
213
|
+
nullable: true,
|
|
214
|
+
description:
|
|
215
|
+
'Optional registered Alternate Base View logical Name (from EntityAlternateBaseView.Name) for this entity. When set, overrides both a saved UserView DisplayState.alternateBaseView pin and the entity default BaseView. Pass an empty string ("") to force the entity default BaseView over a saved UserView pin.',
|
|
216
|
+
})
|
|
217
|
+
AlternateBaseView?: string;
|
|
218
|
+
|
|
219
|
+
@Field(() => GraphQLJSONObject, {
|
|
220
|
+
nullable: true,
|
|
221
|
+
description:
|
|
222
|
+
"Optional values for the view's declared properties, keyed by property name ({ \"Chapter\": \"<id>\" }). A list is accepted only for a property whose operator is IN; null means no value. A name the view does not declare, a value of the wrong type, a value for a property that only the server may set, or a required property left without a value refuses the run with an error naming the property.",
|
|
223
|
+
})
|
|
224
|
+
Properties?: ViewPropertyValues;
|
|
210
225
|
}
|
|
211
226
|
|
|
212
227
|
@InputType()
|
|
@@ -335,6 +350,20 @@ export class RunViewByNameInput {
|
|
|
335
350
|
'Optional, when true the binary fields of the entity (varbinary / bytea columns) are returned, as base64 strings. They are omitted by default because they are usually large and lists rarely read them. A binary field named explicitly in Fields is always returned.',
|
|
336
351
|
})
|
|
337
352
|
IncludeBinaryFields?: boolean;
|
|
353
|
+
|
|
354
|
+
@Field(() => String, {
|
|
355
|
+
nullable: true,
|
|
356
|
+
description:
|
|
357
|
+
'Optional registered Alternate Base View logical Name (from EntityAlternateBaseView.Name) for this entity. When set, overrides both a saved UserView DisplayState.alternateBaseView pin and the entity default BaseView. Pass an empty string ("") to force the entity default BaseView over a saved UserView pin.',
|
|
358
|
+
})
|
|
359
|
+
AlternateBaseView?: string;
|
|
360
|
+
|
|
361
|
+
@Field(() => GraphQLJSONObject, {
|
|
362
|
+
nullable: true,
|
|
363
|
+
description:
|
|
364
|
+
"Optional values for the view's declared properties, keyed by property name ({ \"Chapter\": \"<id>\" }). A list is accepted only for a property whose operator is IN; null means no value. A name the view does not declare, a value of the wrong type, a value for a property that only the server may set, or a required property left without a value refuses the run with an error naming the property.",
|
|
365
|
+
})
|
|
366
|
+
Properties?: ViewPropertyValues;
|
|
338
367
|
}
|
|
339
368
|
|
|
340
369
|
@InputType()
|
|
@@ -449,6 +478,13 @@ export class RunDynamicViewInput {
|
|
|
449
478
|
'Optional, when true the binary fields of the entity (varbinary / bytea columns) are returned, as base64 strings. They are omitted by default because they are usually large and lists rarely read them. A binary field named explicitly in Fields is always returned.',
|
|
450
479
|
})
|
|
451
480
|
IncludeBinaryFields?: boolean;
|
|
481
|
+
|
|
482
|
+
@Field(() => String, {
|
|
483
|
+
nullable: true,
|
|
484
|
+
description:
|
|
485
|
+
'Optional registered Alternate Base View logical Name (from EntityAlternateBaseView.Name) for this entity. When set, routes the dynamic view read through the named alternate base view instead of the entity default BaseView.',
|
|
486
|
+
})
|
|
487
|
+
AlternateBaseView?: string;
|
|
452
488
|
}
|
|
453
489
|
|
|
454
490
|
@InputType()
|
|
@@ -592,6 +628,20 @@ export class RunViewGenericInput {
|
|
|
592
628
|
'Optional, when true the binary fields of the entity (varbinary / bytea columns) are returned, as base64 strings. They are omitted by default because they are usually large and lists rarely read them. A binary field named explicitly in Fields is always returned.',
|
|
593
629
|
})
|
|
594
630
|
IncludeBinaryFields?: boolean;
|
|
631
|
+
|
|
632
|
+
@Field(() => String, {
|
|
633
|
+
nullable: true,
|
|
634
|
+
description:
|
|
635
|
+
'Optional registered Alternate Base View logical Name (from EntityAlternateBaseView.Name) for this entity. When set, overrides both a saved UserView DisplayState.alternateBaseView pin and the entity default BaseView. Pass an empty string ("") to force the entity default BaseView over a saved UserView pin.',
|
|
636
|
+
})
|
|
637
|
+
AlternateBaseView?: string;
|
|
638
|
+
|
|
639
|
+
@Field(() => GraphQLJSONObject, {
|
|
640
|
+
nullable: true,
|
|
641
|
+
description:
|
|
642
|
+
"Optional values for the view's declared properties, keyed by property name ({ \"Chapter\": \"<id>\" }). A list is accepted only for a property whose operator is IN; null means no value. A name the view does not declare, a value of the wrong type, a value for a property that only the server may set, or a required property left without a value refuses the run with an error naming the property.",
|
|
643
|
+
})
|
|
644
|
+
Properties?: ViewPropertyValues;
|
|
595
645
|
}
|
|
596
646
|
|
|
597
647
|
//****************************************************************************
|
|
@@ -605,6 +655,12 @@ export class RunViewCacheStatusInput {
|
|
|
605
655
|
|
|
606
656
|
@Field(() => Int, { description: 'The number of rows in cached results' })
|
|
607
657
|
rowCount: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
658
|
+
|
|
659
|
+
@Field(() => String, {
|
|
660
|
+
nullable: true,
|
|
661
|
+
description: "A hash of the client's field-security key for this view ('' when the user is denied nothing). When it differs from the server's for the same user, the server answers stale with fresh rows. Omitted by older clients.",
|
|
662
|
+
})
|
|
663
|
+
fieldSecurityKey?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name, matching its siblings
|
|
608
664
|
}
|
|
609
665
|
|
|
610
666
|
@InputType()
|
|
@@ -796,7 +852,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
796
852
|
await this.CheckAPIKeyScopeAuthorization('view:run', input.ViewName, userPayload);
|
|
797
853
|
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
798
854
|
const rawData = await super.RunViewByNameGeneric(input, provider, userPayload, pubSub);
|
|
799
|
-
if (rawData
|
|
855
|
+
if (!rawData) {
|
|
800
856
|
return {
|
|
801
857
|
Results: [],
|
|
802
858
|
Success: false,
|
|
@@ -807,9 +863,10 @@ export class RunViewResolver extends ResolverBase {
|
|
|
807
863
|
};
|
|
808
864
|
}
|
|
809
865
|
|
|
810
|
-
const viewInfo =
|
|
811
|
-
|
|
812
|
-
const
|
|
866
|
+
const viewInfo = (rawData as RunViewResultWithResolvedView)._resolvedViewEntity
|
|
867
|
+
?? await this.resolveUserViewByName(input.ViewName, provider, userPayload.userRecord);
|
|
868
|
+
const entity = viewInfo ? provider.EntityByID(viewInfo.EntityID) : undefined;
|
|
869
|
+
const returnData = this.processRawData(rawData.Results, viewInfo?.EntityID ?? null, entity);
|
|
813
870
|
return {
|
|
814
871
|
Results: returnData,
|
|
815
872
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -817,6 +874,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
817
874
|
TotalRowCount: rawData?.TotalRowCount,
|
|
818
875
|
ExecutionTime: rawData?.ExecutionTime,
|
|
819
876
|
Success: rawData?.Success,
|
|
877
|
+
ErrorMessage: rawData?.ErrorMessage,
|
|
820
878
|
AggregateResults: this.processAggregateResults(rawData?.AggregateResults),
|
|
821
879
|
AggregateExecutionTime: rawData?.AggregateExecutionTime,
|
|
822
880
|
};
|
|
@@ -845,7 +903,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
845
903
|
await this.CheckAPIKeyScopeAuthorization('view:run', input.ViewID, userPayload);
|
|
846
904
|
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
847
905
|
const rawData = await super.RunViewByIDGeneric(input, provider, userPayload, pubSub);
|
|
848
|
-
if (rawData
|
|
906
|
+
if (!rawData) {
|
|
849
907
|
return {
|
|
850
908
|
Results: [],
|
|
851
909
|
Success: false,
|
|
@@ -856,9 +914,10 @@ export class RunViewResolver extends ResolverBase {
|
|
|
856
914
|
};
|
|
857
915
|
}
|
|
858
916
|
|
|
859
|
-
const viewInfo =
|
|
860
|
-
|
|
861
|
-
const
|
|
917
|
+
const viewInfo = (rawData as RunViewResultWithResolvedView)._resolvedViewEntity
|
|
918
|
+
?? await this.resolveUserViewByID(input.ViewID, provider, userPayload.userRecord);
|
|
919
|
+
const entity = viewInfo ? provider.EntityByID(viewInfo.EntityID) : undefined;
|
|
920
|
+
const returnData = this.processRawData(rawData.Results, viewInfo?.EntityID ?? null, entity);
|
|
862
921
|
return {
|
|
863
922
|
Results: returnData,
|
|
864
923
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -866,6 +925,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
866
925
|
TotalRowCount: rawData?.TotalRowCount,
|
|
867
926
|
ExecutionTime: rawData?.ExecutionTime,
|
|
868
927
|
Success: rawData?.Success,
|
|
928
|
+
ErrorMessage: rawData?.ErrorMessage,
|
|
869
929
|
AggregateResults: this.processAggregateResults(rawData?.AggregateResults),
|
|
870
930
|
AggregateExecutionTime: rawData?.AggregateExecutionTime,
|
|
871
931
|
};
|
|
@@ -1011,8 +1071,9 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1011
1071
|
};
|
|
1012
1072
|
}
|
|
1013
1073
|
|
|
1014
|
-
const
|
|
1015
|
-
const
|
|
1074
|
+
const viewInfo = (rawData as RunViewResultWithResolvedView)._resolvedViewEntity;
|
|
1075
|
+
const entity = viewInfo ? provider.EntityByID(viewInfo.EntityID) : provider.EntityByName(input.ViewName);
|
|
1076
|
+
const entityId = viewInfo?.EntityID ?? (entity ? entity.ID : null);
|
|
1016
1077
|
const returnData = this.processRawData(rawData.Results, entityId, entity);
|
|
1017
1078
|
return {
|
|
1018
1079
|
Results: returnData,
|
|
@@ -1058,9 +1119,10 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1058
1119
|
};
|
|
1059
1120
|
}
|
|
1060
1121
|
|
|
1061
|
-
const viewInfo =
|
|
1062
|
-
|
|
1063
|
-
const
|
|
1122
|
+
const viewInfo = (rawData as RunViewResultWithResolvedView)._resolvedViewEntity
|
|
1123
|
+
?? await this.resolveUserViewByID(input.ViewID, provider, userPayload.userRecord);
|
|
1124
|
+
const entity = viewInfo ? provider.EntityByID(viewInfo.EntityID) : undefined;
|
|
1125
|
+
const returnData = this.processRawData(rawData.Results, viewInfo?.EntityID ?? null, entity);
|
|
1064
1126
|
return {
|
|
1065
1127
|
Results: returnData,
|
|
1066
1128
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -1212,6 +1274,8 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1212
1274
|
@Ctx() { providers, userPayload }: AppContext
|
|
1213
1275
|
): Promise<RunViewsWithCacheCheckOutput> {
|
|
1214
1276
|
try {
|
|
1277
|
+
// Same scope as RunViews: this is the transport RunViews uses for a CacheLocal batch.
|
|
1278
|
+
await this.CheckAPIKeyScopeAuthorization('view:batch', '*', userPayload);
|
|
1215
1279
|
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
1216
1280
|
|
|
1217
1281
|
// Cast provider to SQLServerDataProvider to access RunViewsWithCacheCheck method
|
|
@@ -1220,6 +1284,21 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1220
1284
|
throw new Error('Provider does not support RunViewsWithCacheCheck');
|
|
1221
1285
|
}
|
|
1222
1286
|
|
|
1287
|
+
// SECURITY: same GraphQL-boundary clause screen as RunViews, before the provider runs.
|
|
1288
|
+
const user = this.GetUserFromPayload(userPayload);
|
|
1289
|
+
for (const item of input) {
|
|
1290
|
+
this.screenClientViewClauses(
|
|
1291
|
+
{
|
|
1292
|
+
extraFilter: item.params.ExtraFilter,
|
|
1293
|
+
orderBy: item.params.OrderBy,
|
|
1294
|
+
userSearchString: item.params.UserSearchString,
|
|
1295
|
+
overrideExcludeFilter: item.params.OverrideExcludeFilter,
|
|
1296
|
+
},
|
|
1297
|
+
provider,
|
|
1298
|
+
user,
|
|
1299
|
+
);
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1223
1302
|
// Convert GraphQL input types to core types
|
|
1224
1303
|
const coreParams: RunViewWithCacheCheckParams[] = input.map(item => ({
|
|
1225
1304
|
params: {
|
|
@@ -1247,6 +1326,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1247
1326
|
// DataSource must be forwarded on this transport too (same as the InternalRunView/RunViews maps):
|
|
1248
1327
|
// otherwise a CacheLocal batch's DataSource:'Materialized' request silently reads the live view.
|
|
1249
1328
|
DataSource: item.params.DataSource,
|
|
1329
|
+
AlternateBaseView: item.params.AlternateBaseView,
|
|
1250
1330
|
IncludeBinaryFields: item.params.IncludeBinaryFields,
|
|
1251
1331
|
// BypassCache likewise — the input type (RunDynamicViewInput) has always declared it, and its
|
|
1252
1332
|
// own description promises "the pre-check cache lookup is skipped". Dropping it here left the
|
|
@@ -1255,10 +1335,12 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1255
1335
|
AfterKey: item.params.AfterKey
|
|
1256
1336
|
? CompositeKey.FromKeyValuePairs(item.params.AfterKey.KeyValuePairs)
|
|
1257
1337
|
: undefined,
|
|
1338
|
+
TimeZone: userPayload?.TimeZone,
|
|
1258
1339
|
},
|
|
1259
1340
|
cacheStatus: item.cacheStatus ? {
|
|
1260
1341
|
maxUpdatedAt: item.cacheStatus.maxUpdatedAt,
|
|
1261
1342
|
rowCount: item.cacheStatus.rowCount,
|
|
1343
|
+
fieldSecurityKey: item.cacheStatus.fieldSecurityKey ?? undefined,
|
|
1262
1344
|
} : undefined,
|
|
1263
1345
|
}));
|
|
1264
1346
|
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { BaseEntity, EntityInfo, RecordChangeMetadataSource, UserInfo } from '@memberjunction/core';
|
|
2
|
+
import type { ActionParam } from '@memberjunction/actions-base';
|
|
3
|
+
import { ProjectEntityObjectForCaller, ProjectValuesForCaller } from './fieldSecurityTransport.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The parameters of an entity action that carry a plain copy of the bound record's field values
|
|
7
|
+
* (the `'Entity Object Data'` value type), and the entity those values belong to.
|
|
8
|
+
*/
|
|
9
|
+
export interface EntityObjectDataBinding {
|
|
10
|
+
EntityInfo: EntityInfo;
|
|
11
|
+
/** Parameter names, lowercased and trimmed. */
|
|
12
|
+
ParamNames: ReadonlySet<string>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Action parameters as they may be sent back to `user`, with every value whose entity is KNOWN
|
|
17
|
+
* projected to the fields `user` may read:
|
|
18
|
+
*
|
|
19
|
+
* - an entity object (or an array holding them) becomes its projected field values, as an entity
|
|
20
|
+
* object is serialized by its internal state otherwise; one whose entity `user` may not read at
|
|
21
|
+
* all becomes `null`, since field projection narrows what a reader of the entity sees and must
|
|
22
|
+
* not hand a non-reader the fields it is not denied;
|
|
23
|
+
* - a parameter named in `binding` holds the bound record's values, projected for its entity.
|
|
24
|
+
*
|
|
25
|
+
* Any other value is returned as it is: without knowing which entity a plain object belongs to,
|
|
26
|
+
* removing keys from it would be a guess. Returns the original array when nothing changed.
|
|
27
|
+
*/
|
|
28
|
+
export function ProjectActionParamsForCaller(
|
|
29
|
+
params: ActionParam[] | null | undefined,
|
|
30
|
+
user: UserInfo | null | undefined,
|
|
31
|
+
provider?: RecordChangeMetadataSource,
|
|
32
|
+
binding?: EntityObjectDataBinding
|
|
33
|
+
): ActionParam[] | null | undefined {
|
|
34
|
+
if (!params?.length) {
|
|
35
|
+
return params;
|
|
36
|
+
}
|
|
37
|
+
const projected = params.map((p) => projectParam(p, user, provider, binding));
|
|
38
|
+
return projected.some((p, i) => p !== params[i]) ? projected : params;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function projectParam(
|
|
42
|
+
param: ActionParam,
|
|
43
|
+
user: UserInfo | null | undefined,
|
|
44
|
+
provider: RecordChangeMetadataSource | undefined,
|
|
45
|
+
binding: EntityObjectDataBinding | undefined
|
|
46
|
+
): ActionParam {
|
|
47
|
+
const value: unknown = param?.Value;
|
|
48
|
+
if (value instanceof BaseEntity) {
|
|
49
|
+
return { ...param, Value: projectEntityObject(value, user, provider) };
|
|
50
|
+
}
|
|
51
|
+
if (Array.isArray(value) && value.some((item) => item instanceof BaseEntity)) {
|
|
52
|
+
const items = value.map((item: unknown) => (item instanceof BaseEntity ? projectEntityObject(item, user, provider) : item));
|
|
53
|
+
return { ...param, Value: items };
|
|
54
|
+
}
|
|
55
|
+
if (binding && isPlainRecord(value) && binding.ParamNames.has(String(param.Name ?? '').trim().toLowerCase())) {
|
|
56
|
+
return { ...param, Value: ProjectValuesForCaller(binding.EntityInfo, value, user, provider) };
|
|
57
|
+
}
|
|
58
|
+
return param;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** An entity object's values projected for `user`, or null when `user` may not read its entity at all. */
|
|
62
|
+
function projectEntityObject(
|
|
63
|
+
entity: BaseEntity,
|
|
64
|
+
user: UserInfo | null | undefined,
|
|
65
|
+
provider: RecordChangeMetadataSource | undefined
|
|
66
|
+
): Record<string, unknown> | null {
|
|
67
|
+
if (user && !entity.EntityInfo?.GetUserPermisions(user)?.CanRead) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
return ProjectEntityObjectForCaller(entity, user, provider);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function isPlainRecord(value: unknown): value is Record<string, unknown> {
|
|
74
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date);
|
|
75
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EntityInfo,
|
|
3
|
+
Metadata,
|
|
4
|
+
ProjectEntityValueRowsForUser,
|
|
5
|
+
ProjectEntityValuesForUser,
|
|
6
|
+
RecordChangeMetadataSource,
|
|
7
|
+
UserInfo,
|
|
8
|
+
} from '@memberjunction/core';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The members of an entity object the output projection reads. `BaseEntity` satisfies it; so does
|
|
12
|
+
* any test double that carries an `EntityInfo` and a `GetAll()`.
|
|
13
|
+
*/
|
|
14
|
+
export interface ProjectableEntityObject {
|
|
15
|
+
readonly EntityInfo?: EntityInfo | null;
|
|
16
|
+
GetAll(): Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Field values of `entity`, reduced to what `user` may READ, for a transport that sends them to
|
|
21
|
+
* that user.
|
|
22
|
+
*
|
|
23
|
+
* An entity object built for a restricted user already holds no denied value, so for those this
|
|
24
|
+
* is a no-op returning the `GetAll()` copy unchanged. It is the backstop for objects that were not
|
|
25
|
+
* built for the recipient: a system-identity load, an object a long-running process shares across
|
|
26
|
+
* callers, or one built before its user was known.
|
|
27
|
+
*
|
|
28
|
+
* @param provider Metadata source for the Record Changes payload projection. Defaults to the
|
|
29
|
+
* global provider, which is only consulted when the entity is `MJ: Record Changes`.
|
|
30
|
+
*/
|
|
31
|
+
export function ProjectEntityObjectForCaller(
|
|
32
|
+
entity: ProjectableEntityObject,
|
|
33
|
+
user: UserInfo | null | undefined,
|
|
34
|
+
provider?: RecordChangeMetadataSource
|
|
35
|
+
): Record<string, unknown> {
|
|
36
|
+
// fls-guard: projected by ProjectEntityValuesForUser below
|
|
37
|
+
const values = entity.GetAll();
|
|
38
|
+
return ProjectEntityValuesForUser(provider ?? new Metadata(), entity.EntityInfo, values, user) ?? values;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Plain field values of `entityInfo`, reduced to what `user` may READ. See
|
|
43
|
+
* {@link ProjectEntityObjectForCaller}; this is the form for values that are already plain objects.
|
|
44
|
+
*/
|
|
45
|
+
export function ProjectValuesForCaller<T extends object>(
|
|
46
|
+
entityInfo: EntityInfo | null | undefined,
|
|
47
|
+
values: T,
|
|
48
|
+
user: UserInfo | null | undefined,
|
|
49
|
+
provider?: RecordChangeMetadataSource
|
|
50
|
+
): T {
|
|
51
|
+
return ProjectEntityValuesForUser(provider ?? new Metadata(), entityInfo, values, user) ?? values;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Array form of {@link ProjectValuesForCaller}: the denied set is computed once for the whole set. */
|
|
55
|
+
export function ProjectRowsForCaller<T extends object>(
|
|
56
|
+
entityInfo: EntityInfo | null | undefined,
|
|
57
|
+
rows: T[],
|
|
58
|
+
user: UserInfo | null | undefined,
|
|
59
|
+
provider?: RecordChangeMetadataSource
|
|
60
|
+
): T[] {
|
|
61
|
+
return ProjectEntityValueRowsForUser(provider ?? new Metadata(), entityInfo, rows, user) ?? rows;
|
|
62
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import cors from 'cors';
|
|
2
|
+
import type { RequestHandler } from 'express';
|
|
3
|
+
import { IsPathUnderServerExtensionRoot, SkipForServerExtensionRoots } from '@memberjunction/server-extensions-core';
|
|
4
|
+
import type { CorsConfig } from './config.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The `cors` section of the MJServer config that the global CORS middleware reads: `allowedOrigins`
|
|
8
|
+
* (`['*']` by default — every origin, without credentials), `allowCredentials` (ignored, always
|
|
9
|
+
* false, under the wildcard) and `maxAge` (preflight cache lifetime in seconds, 86400 by default).
|
|
10
|
+
* Partial, because tests and hosts may pass only the keys they care about.
|
|
11
|
+
*/
|
|
12
|
+
export type GlobalCorsSettings = Partial<CorsConfig>;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Builds MJServer's global CORS middleware, mounted before auth so 401 responses carry CORS
|
|
16
|
+
* headers (without them the browser hides the error code and the client never refreshes its token).
|
|
17
|
+
*
|
|
18
|
+
* `extensionOwnedRoots` are the RootPaths of server extensions that declare `OwnsCORS: true`
|
|
19
|
+
* (see `GetCorsOwningServerExtensionRoots`). The global middleware skips requests under those
|
|
20
|
+
* roots entirely, so it neither reflects an origin onto the extension's responses nor answers
|
|
21
|
+
* its preflights; the extension's own CORS handling runs instead.
|
|
22
|
+
*/
|
|
23
|
+
export function CreateGlobalCorsMiddleware(
|
|
24
|
+
settings: GlobalCorsSettings | undefined,
|
|
25
|
+
extensionOwnedRoots: readonly string[] = [],
|
|
26
|
+
): RequestHandler {
|
|
27
|
+
const corsAllowed = settings?.allowedOrigins ?? ['*'];
|
|
28
|
+
const corsWildcard = corsAllowed.includes('*');
|
|
29
|
+
// SECURITY: never combine credentials with a wildcard/reflect-any-origin policy. When
|
|
30
|
+
// allowedOrigins is ['*'] the origin callback reflects the caller's Origin, and pairing that
|
|
31
|
+
// with Access-Control-Allow-Credentials: true lets any site a signed-in user visits make
|
|
32
|
+
// credentialed cross-origin reads. MJ's primary auth is a Bearer token (not auto-sent
|
|
33
|
+
// cross-origin), so dropping credentials under the wildcard default is safe; deployments that
|
|
34
|
+
// genuinely need credentialed CORS must configure an explicit allowedOrigins list.
|
|
35
|
+
const globalCors = cors<cors.CorsRequest>({
|
|
36
|
+
origin: (origin, callback) => {
|
|
37
|
+
// Allow all origins when ['*'] (default/backward-compatible),
|
|
38
|
+
// or when no Origin header (server-to-server calls).
|
|
39
|
+
if (corsWildcard || !origin || corsAllowed.includes(origin)) {
|
|
40
|
+
callback(null, true);
|
|
41
|
+
} else {
|
|
42
|
+
callback(new Error(`Origin ${origin} not allowed by CORS`));
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
credentials: corsWildcard ? false : (settings?.allowCredentials ?? true),
|
|
46
|
+
maxAge: settings?.maxAge ?? 86400,
|
|
47
|
+
}) as RequestHandler;
|
|
48
|
+
return SkipForServerExtensionRoots(globalCors, extensionOwnedRoots);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Terminates a preflight under an extension-owned root that no extension answered.
|
|
53
|
+
*
|
|
54
|
+
* Mount it after every server extension (both phases) and before the core routes. Without it, an
|
|
55
|
+
* unanswered `OPTIONS` request falls through to the next CORS-enabled mount — the GraphQL endpoint
|
|
56
|
+
* at `/` by default, whose `cors()` approves every origin with `Access-Control-Allow-Origin: *` —
|
|
57
|
+
* so an extension that owns its CORS but forgets an `OPTIONS` handler would be opened to every
|
|
58
|
+
* origin rather than closed. The answer is a bare 404 with no CORS headers, which the browser
|
|
59
|
+
* treats as a refused preflight.
|
|
60
|
+
*
|
|
61
|
+
* @param extensionOwnedRoots - RootPaths of extensions that declare `OwnsCORS: true`
|
|
62
|
+
*/
|
|
63
|
+
export function CreateExtensionOwnedPreflightFallback(extensionOwnedRoots: readonly string[]): RequestHandler {
|
|
64
|
+
return (req, res, next) => {
|
|
65
|
+
if (req.method === 'OPTIONS' && IsPathUnderServerExtensionRoot(req.path, extensionOwnedRoots)) {
|
|
66
|
+
res.status(404).end();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
next();
|
|
70
|
+
};
|
|
71
|
+
}
|