@memberjunction/server 6.2.0-edge.5 → 6.2.0-edge.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/BridgeHostInstance.d.ts +8 -3
- package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -1
- package/dist/agentSessions/BridgeHostInstance.js +14 -4
- package/dist/agentSessions/BridgeHostInstance.js.map +1 -1
- package/dist/agentSessions/HandoffOfferExpiry.d.ts +10 -0
- package/dist/agentSessions/HandoffOfferExpiry.d.ts.map +1 -0
- package/dist/agentSessions/HandoffOfferExpiry.js +18 -0
- package/dist/agentSessions/HandoffOfferExpiry.js.map +1 -0
- package/dist/agentSessions/ReturningVisitorRecap.js +1 -0
- package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
- package/dist/agentSessions/SessionJanitor.d.ts +34 -11
- package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
- package/dist/agentSessions/SessionJanitor.js +88 -44
- package/dist/agentSessions/SessionJanitor.js.map +1 -1
- package/dist/agentSessions/SessionManager.d.ts +29 -9
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +62 -16
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/agentSessions/conversationBrowsers.d.ts +61 -0
- package/dist/agentSessions/conversationBrowsers.d.ts.map +1 -0
- package/dist/agentSessions/conversationBrowsers.js +118 -0
- package/dist/agentSessions/conversationBrowsers.js.map +1 -0
- package/dist/agentSessions/sessionDeadline.d.ts +43 -0
- package/dist/agentSessions/sessionDeadline.d.ts.map +1 -0
- package/dist/agentSessions/sessionDeadline.js +68 -0
- package/dist/agentSessions/sessionDeadline.js.map +1 -0
- package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
- package/dist/auth/APIKeyScopeAuth.js +5 -4
- package/dist/auth/APIKeyScopeAuth.js.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.js +2 -0
- package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +51 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +10 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +37 -1
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/localDevAuth.d.ts +79 -0
- package/dist/auth/localDevAuth.d.ts.map +1 -0
- package/dist/auth/localDevAuth.js +439 -0
- package/dist/auth/localDevAuth.js.map +1 -0
- package/dist/auth/loginEmailResolution.d.ts +41 -0
- package/dist/auth/loginEmailResolution.d.ts.map +1 -0
- package/dist/auth/loginEmailResolution.js +47 -0
- package/dist/auth/loginEmailResolution.js.map +1 -0
- package/dist/auth/magicLink/MagicLinkKeys.d.ts +51 -3
- package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkKeys.js +130 -13
- package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.d.ts +3 -0
- package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.js +23 -5
- package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts +39 -5
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +221 -9
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/magicLink/index.d.ts +1 -1
- package/dist/auth/magicLink/index.d.ts.map +1 -1
- package/dist/auth/magicLink/index.js +1 -1
- package/dist/auth/magicLink/index.js.map +1 -1
- package/dist/auth/magicLink/redeemLanding.d.ts +2 -2
- package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
- package/dist/auth/magicLink/redeemLanding.js +7 -4
- package/dist/auth/magicLink/redeemLanding.js.map +1 -1
- package/dist/auth/magicLink/types.d.ts +39 -3
- package/dist/auth/magicLink/types.d.ts.map +1 -1
- package/dist/auth/magicLink/types.js +0 -4
- package/dist/auth/magicLink/types.js.map +1 -1
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +1 -0
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/auth/sessionUserClone.d.ts +1 -1
- package/dist/auth/sessionUserClone.d.ts.map +1 -1
- package/dist/auth/sessionUserClone.js +3 -2
- package/dist/auth/sessionUserClone.js.map +1 -1
- package/dist/backgroundSweepConfigUnits.d.ts +231 -0
- package/dist/backgroundSweepConfigUnits.d.ts.map +1 -0
- package/dist/backgroundSweepConfigUnits.js +180 -0
- package/dist/backgroundSweepConfigUnits.js.map +1 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts +292 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +442 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -0
- package/dist/broadcast/index.d.ts +6 -0
- package/dist/broadcast/index.d.ts.map +1 -0
- package/dist/broadcast/index.js +6 -0
- package/dist/broadcast/index.js.map +1 -0
- package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts +43 -0
- package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js +144 -0
- package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js.map +1 -0
- package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts +46 -0
- package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js +149 -0
- package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js.map +1 -0
- package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts +49 -0
- package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js +131 -0
- package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js.map +1 -0
- package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts +24 -0
- package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts.map +1 -0
- package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js +51 -0
- package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js.map +1 -0
- package/dist/cache.d.ts +3 -2
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js.map +1 -1
- package/dist/config.d.ts +1402 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +120 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +5 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +64 -12
- package/dist/context.js.map +1 -1
- package/dist/coreRoutes.d.ts +3 -1
- package/dist/coreRoutes.d.ts.map +1 -1
- package/dist/coreRoutes.js +20 -4
- package/dist/coreRoutes.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +863 -14
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +4167 -62
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +50 -30
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +154 -79
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts +11 -0
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js +29 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
- package/dist/generic/PubSubManager.d.ts +10 -0
- package/dist/generic/PubSubManager.d.ts.map +1 -1
- package/dist/generic/PubSubManager.js +44 -1
- package/dist/generic/PubSubManager.js.map +1 -1
- package/dist/generic/PushStatusResolver.d.ts +39 -6
- package/dist/generic/PushStatusResolver.d.ts.map +1 -1
- package/dist/generic/PushStatusResolver.js +93 -11
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +114 -29
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +509 -220
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +15 -3
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +126 -20
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/generic/actionOutputFieldSecurity.d.ts +26 -0
- package/dist/generic/actionOutputFieldSecurity.d.ts.map +1 -0
- package/dist/generic/actionOutputFieldSecurity.js +47 -0
- package/dist/generic/actionOutputFieldSecurity.js.map +1 -0
- package/dist/generic/fieldSecurityTransport.d.ts +30 -0
- package/dist/generic/fieldSecurityTransport.d.ts.map +1 -0
- package/dist/generic/fieldSecurityTransport.js +30 -0
- package/dist/generic/fieldSecurityTransport.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +262 -84
- package/dist/index.js.map +1 -1
- package/dist/integration/ConnectionPause.d.ts +121 -0
- package/dist/integration/ConnectionPause.d.ts.map +1 -0
- package/dist/integration/ConnectionPause.js +183 -0
- package/dist/integration/ConnectionPause.js.map +1 -0
- package/dist/integration/CustomColumnPromoter.d.ts +72 -6
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
- package/dist/integration/CustomColumnPromoter.js +93 -47
- package/dist/integration/CustomColumnPromoter.js.map +1 -1
- package/dist/integration/EntityMapLifecycle.d.ts +78 -4
- package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
- package/dist/integration/EntityMapLifecycle.js +199 -5
- package/dist/integration/EntityMapLifecycle.js.map +1 -1
- package/dist/integration/InactiveRowWarnings.d.ts +31 -0
- package/dist/integration/InactiveRowWarnings.d.ts.map +1 -1
- package/dist/integration/InactiveRowWarnings.js +29 -0
- package/dist/integration/InactiveRowWarnings.js.map +1 -1
- package/dist/integration/ObjectNamesByID.d.ts +28 -0
- package/dist/integration/ObjectNamesByID.d.ts.map +1 -0
- package/dist/integration/ObjectNamesByID.js +87 -0
- package/dist/integration/ObjectNamesByID.js.map +1 -0
- package/dist/integration/PostRestartIntrospect.d.ts +26 -0
- package/dist/integration/PostRestartIntrospect.d.ts.map +1 -0
- package/dist/integration/PostRestartIntrospect.js +27 -0
- package/dist/integration/PostRestartIntrospect.js.map +1 -0
- package/dist/integration/RSUPostRestartProgress.d.ts +176 -0
- package/dist/integration/RSUPostRestartProgress.d.ts.map +1 -0
- package/dist/integration/RSUPostRestartProgress.js +323 -0
- package/dist/integration/RSUPostRestartProgress.js.map +1 -0
- package/dist/integration/RSUProgressBridge.d.ts +41 -2
- package/dist/integration/RSUProgressBridge.d.ts.map +1 -1
- package/dist/integration/RSUProgressBridge.js +84 -1
- package/dist/integration/RSUProgressBridge.js.map +1 -1
- package/dist/integration/RunArtifactAuthorization.d.ts +39 -0
- package/dist/integration/RunArtifactAuthorization.d.ts.map +1 -0
- package/dist/integration/RunArtifactAuthorization.js +45 -0
- package/dist/integration/RunArtifactAuthorization.js.map +1 -0
- package/dist/integration/SchemaRefreshLaunch.d.ts +9 -0
- package/dist/integration/SchemaRefreshLaunch.d.ts.map +1 -1
- package/dist/integration/SchemaRefreshLaunch.js +3 -2
- package/dist/integration/SchemaRefreshLaunch.js.map +1 -1
- package/dist/integration/ScopedFieldsForBuild.d.ts +46 -0
- package/dist/integration/ScopedFieldsForBuild.d.ts.map +1 -0
- package/dist/integration/ScopedFieldsForBuild.js +91 -0
- package/dist/integration/ScopedFieldsForBuild.js.map +1 -0
- package/dist/integration/TargetConfigGuard.d.ts +40 -0
- package/dist/integration/TargetConfigGuard.d.ts.map +1 -0
- package/dist/integration/TargetConfigGuard.js +40 -0
- package/dist/integration/TargetConfigGuard.js.map +1 -0
- package/dist/logging/variablesLoggingMiddleware.d.ts +12 -0
- package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
- package/dist/logging/variablesLoggingMiddleware.js +50 -1
- package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
- package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -1
- package/dist/realtimeSessions/SessionVerificationPortsBase.js +1 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -1
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts +8 -6
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
- package/dist/realtimeSessions/ownedRealtimeSession.js +14 -6
- package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
- package/dist/realtimeSessions/sessionAccess.d.ts +103 -11
- package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
- package/dist/realtimeSessions/sessionAccess.js +147 -22
- package/dist/realtimeSessions/sessionAccess.js.map +1 -1
- package/dist/realtimeSessions/sessionConfigStamps.js +1 -1
- package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -1
- package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -1
- package/dist/realtimeSessions/subscriptionAuthorization.js +5 -2
- package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -1
- package/dist/realtimeSessions/verificationWorkflow.d.ts +2 -0
- package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -1
- package/dist/realtimeSessions/verificationWorkflow.js +1 -1
- package/dist/realtimeSessions/verificationWorkflow.js.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.js +19 -3
- package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.d.ts +67 -7
- package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.js +203 -19
- package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
- package/dist/realtimeWidget/host-identity.d.ts +1 -1
- package/dist/realtimeWidget/host-identity.js +1 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.js +1 -0
- package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
- package/dist/realtimeWidget/widgetCore.d.ts +20 -1
- package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetCore.js +21 -8
- package/dist/realtimeWidget/widgetCore.js.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.d.ts +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +3 -1
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/requestOrigin.d.ts +22 -0
- package/dist/requestOrigin.d.ts.map +1 -0
- package/dist/requestOrigin.js +60 -0
- package/dist/requestOrigin.js.map +1 -0
- package/dist/resolvers/ActionResolver.d.ts +19 -1
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +63 -12
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +1 -0
- package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
- package/dist/resolvers/AgentRunStatusPublisher.d.ts +18 -4
- package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
- package/dist/resolvers/AgentRunStatusPublisher.js +32 -8
- package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
- package/dist/resolvers/AgentSessionResolver.d.ts +10 -4
- package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/AgentSessionResolver.js +44 -17
- package/dist/resolvers/AgentSessionResolver.js.map +1 -1
- package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
- package/dist/resolvers/AutotagPipelineResolver.js +2 -1
- package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.js +2 -0
- package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
- package/dist/resolvers/EntityCommunicationsResolver.d.ts +13 -1
- package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityCommunicationsResolver.js +50 -14
- package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
- package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts +6 -0
- package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts.map +1 -1
- package/dist/resolvers/ExecuteRemoteOperationResolver.js +30 -7
- package/dist/resolvers/ExecuteRemoteOperationResolver.js.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts +28 -0
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js +117 -21
- package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
- package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
- package/dist/resolvers/FileCategoryResolver.js +1 -0
- package/dist/resolvers/FileCategoryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.d.ts +5 -0
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +13 -4
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +34 -13
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +401 -11
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +2713 -1290
- package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +13 -2
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts +8 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +31 -3
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/PipelineProgressResolver.d.ts +6 -0
- package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -1
- package/dist/resolvers/PipelineProgressResolver.js +5 -3
- package/dist/resolvers/PipelineProgressResolver.js.map +1 -1
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +20 -6
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.d.ts +38 -0
- package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +184 -88
- package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
- package/dist/resolvers/RSUResolver.d.ts.map +1 -1
- package/dist/resolvers/RSUResolver.js +12 -0
- package/dist/resolvers/RSUResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +1 -0
- package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +22 -2
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +118 -33
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts +62 -10
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +224 -39
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +80 -16
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +388 -125
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts +5 -3
- package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +19 -18
- package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +7 -5
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTestResolver.js +3 -1
- package/dist/resolvers/RunTestResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +4 -0
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
- package/dist/resolvers/TestQuerySQLResolver.js +1 -0
- package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts +17 -2
- package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +60 -15
- package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
- package/dist/resolvers/UserViewResolver.d.ts +1 -1
- package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
- package/dist/resolvers/UserViewResolver.js +2 -1
- package/dist/resolvers/UserViewResolver.js.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.js +2 -0
- package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts +6 -0
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +19 -5
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/MediaAccessKeys.d.ts.map +1 -1
- package/dist/rest/MediaAccessKeys.js +6 -2
- package/dist/rest/MediaAccessKeys.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
- package/dist/rest/OAuthCallbackHandler.js +11 -5
- package/dist/rest/OAuthCallbackHandler.js.map +1 -1
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +8 -5
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
- package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
- package/dist/rest/RealtimeRecordingHandler.js +6 -8
- package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +6 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +24 -6
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +3 -1
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +11 -2
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/serverRoleConfigUnits.d.ts +29 -0
- package/dist/serverRoleConfigUnits.d.ts.map +1 -0
- package/dist/serverRoleConfigUnits.js +33 -0
- package/dist/serverRoleConfigUnits.js.map +1 -0
- package/dist/services/DurableEntityActionTaskSubmitter.d.ts.map +1 -1
- package/dist/services/DurableEntityActionTaskSubmitter.js +6 -1
- package/dist/services/DurableEntityActionTaskSubmitter.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +2 -26
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/services/TaskGraphAgentRunner.d.ts +6 -0
- package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphAgentRunner.js +38 -0
- package/dist/services/TaskGraphAgentRunner.js.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.d.ts +5 -0
- package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.js +43 -15
- package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
- package/dist/services/WorkQueueHostService.d.ts +2 -1
- package/dist/services/WorkQueueHostService.d.ts.map +1 -1
- package/dist/services/WorkQueueHostService.js +19 -4
- package/dist/services/WorkQueueHostService.js.map +1 -1
- package/dist/services/workQueueConfig.d.ts +2 -2
- package/dist/services/workQueueConfig.js +5 -5
- package/dist/services/workQueueConfig.js.map +1 -1
- package/dist/sharedCache.js +1 -1
- package/dist/sharedCache.js.map +1 -1
- package/dist/types.d.ts +40 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +98 -98
- package/src/__tests__/APIKeyScopeAuth.test.ts +4 -8
- package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -0
- package/src/__tests__/ActiveOperations.test.ts +68 -0
- package/src/__tests__/AdhocQueryResolver.dialect.test.ts +137 -0
- package/src/__tests__/AgentRunStatusPublisher.test.ts +49 -0
- package/src/__tests__/AgentSessionResolver.ownership.test.ts +150 -0
- package/src/__tests__/AssertTargetConfigs.test.ts +75 -0
- package/src/__tests__/BatchApplyParity.test.ts +109 -0
- package/src/__tests__/BridgeHostInstance.test.ts +42 -0
- package/src/__tests__/CollectInactiveRowWarnings.test.ts +115 -0
- package/src/__tests__/ConnectionPause.test.ts +192 -0
- package/src/__tests__/ConnectionPauseResolver.test.ts +166 -0
- package/src/__tests__/ConnectionPauseSave.test.ts +143 -0
- package/src/__tests__/CustomColumnPromoterCompletion.test.ts +142 -0
- package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
- package/src/__tests__/DeleteConnectionRemovesPerConnectionCatalog.test.ts +51 -0
- package/src/__tests__/DetachedDiscoveryStart.test.ts +65 -0
- package/src/__tests__/DurableEntityActionTaskSubmitter.test.ts +73 -0
- package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
- package/src/__tests__/EntityMapLifecycle.rekey.test.ts +252 -0
- package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
- package/src/__tests__/ExecuteRemoteOperationResolver.test.ts +213 -0
- package/src/__tests__/FetchEntityVectorsResolver.test.ts +206 -3
- package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
- package/src/__tests__/HandoffOfferExpiry.test.ts +40 -0
- package/src/__tests__/IntegrationRunArtifactAuthorization.test.ts +126 -0
- package/src/__tests__/MagicLinkKeys.test.ts +102 -0
- package/src/__tests__/MediaAccessKeys.test.ts +57 -10
- package/src/__tests__/NewArrivalsDefaultDisabled.test.ts +50 -0
- package/src/__tests__/ObjectNamesByID.test.ts +176 -0
- package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
- package/src/__tests__/PostRestartMapsInCatalogScope.test.ts +146 -0
- package/src/__tests__/QuerySystemUserResolver.childRows.test.ts +80 -0
- package/src/__tests__/QuerySystemUserResolver.collision.test.ts +200 -0
- package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
- package/src/__tests__/QuerySystemUserResolver.permissions.test.ts +132 -0
- package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
- package/src/__tests__/RSUPostRestartProgress.test.ts +343 -0
- package/src/__tests__/RSUProgressBridge.test.ts +188 -5
- package/src/__tests__/RSUStartupSweepWiring.test.ts +30 -0
- package/src/__tests__/ReactivateRefreshMessage.test.ts +10 -3
- package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +346 -46
- package/src/__tests__/{RefreshAdoptsNewColumns.test.ts → RefreshReportsNewColumns.test.ts} +25 -16
- package/src/__tests__/RemoteBrowserActionRecovery.test.ts +287 -0
- package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +3 -0
- package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +100 -0
- package/src/__tests__/RemoteBrowserAudioStream.test.ts +3 -0
- package/src/__tests__/RemoteBrowserSnapshot.test.ts +3 -0
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +344 -14
- package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
- package/src/__tests__/ResolverBase.encryptedApiZeroReencrypt.test.ts +307 -0
- package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +227 -0
- package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +83 -1
- package/src/__tests__/ResolverBase.publishStatusUpdate.test.ts +68 -0
- package/src/__tests__/ResolverBase.userViewCacheAndDedup.test.ts +130 -0
- package/src/__tests__/RunAIAgentResolver.branch.test.ts +72 -13
- package/src/__tests__/RunAIAgentResolver.consultPredecessor.test.ts +289 -0
- package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
- package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
- package/src/__tests__/RunAIAgentResolver.handoff.test.ts +649 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +19 -27
- package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +10 -2
- package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
- package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +91 -13
- package/src/__tests__/RunTemplateResolver.test.ts +35 -2
- package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
- package/src/__tests__/SchemaEvolutionCustomColumns.test.ts +119 -0
- package/src/__tests__/SchemaRefreshLaunch.test.ts +24 -2
- package/src/__tests__/ScopedFieldsForBuild.test.ts +192 -0
- package/src/__tests__/SessionJanitor.test.ts +195 -4
- package/src/__tests__/SessionManager.test.ts +164 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +2 -2
- package/src/__tests__/TaskGraphAgentRunner.test.ts +272 -16
- package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +114 -3
- package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
- package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
- package/src/__tests__/ViewOperationsHandler.test.ts +9 -7
- package/src/__tests__/WidgetSessionService.test.ts +583 -4
- package/src/__tests__/WorkQueueHostService.test.ts +25 -7
- package/src/__tests__/apiRootBoot.test.ts +1 -1
- package/src/__tests__/backgroundSweepConfigUnits.test.ts +153 -0
- package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
- package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
- package/src/__tests__/cacheInvalidationRecordData.test.ts +45 -0
- package/src/__tests__/contextRequestOrigin.test.ts +105 -0
- package/src/__tests__/conversationBrowsers.test.ts +62 -0
- package/src/__tests__/fieldSecurityFixtures.ts +91 -0
- package/src/__tests__/globalCors.test.ts +3 -3
- package/src/__tests__/localDevAuth.test.ts +196 -0
- package/src/__tests__/magicLinkExtensionCapabilities.test.ts +413 -0
- package/src/__tests__/orphanedConversationDetailReconciler.start.test.ts +82 -0
- package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
- package/src/__tests__/ownedRealtimeSession.test.ts +14 -0
- package/src/__tests__/pushStatusResolver.filter.test.ts +57 -1
- package/src/__tests__/realtimeRecordingHandler.test.ts +24 -2
- package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +29 -1
- package/src/__tests__/realtimeSessions/ownedRealtimeSession.anonymous.test.ts +31 -0
- package/src/__tests__/realtimeSessions/ownedRealtimeSession.namedScoped.test.ts +37 -0
- package/src/__tests__/realtimeSessions/sessionAccess.test.ts +224 -7
- package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
- package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
- package/src/__tests__/requestOrigin.test.ts +104 -0
- package/src/__tests__/resolverBase.cloudEventChangedFields.test.ts +157 -0
- package/src/__tests__/resolverBase.fieldSecurityTransport.test.ts +222 -0
- package/src/__tests__/resolverBase.fls.test.ts +146 -97
- package/src/__tests__/restTransport.fieldSecurity.test.ts +148 -0
- package/src/__tests__/runParamsTimeZone.test.ts +179 -0
- package/src/__tests__/runStreams.fieldSecurity.test.ts +100 -0
- package/src/__tests__/runViewProperties.test.ts +114 -0
- package/src/__tests__/scalabilityBenchmarks.test.ts +765 -0
- package/src/__tests__/scalabilityDatabaseIntegration.test.ts +207 -0
- package/src/__tests__/securityHardeningPr6034.test.ts +120 -0
- package/src/__tests__/sessionDeadline.test.ts +51 -0
- package/src/__tests__/sessionUserClone.test.ts +5 -1
- package/src/__tests__/sharedCache.test.ts +11 -0
- package/src/__tests__/startupSweepOrder.test.ts +40 -0
- package/src/__tests__/unifiedAuth.test.ts +101 -1
- package/src/__tests__/widgetGuestElevation.test.ts +2 -0
- package/src/agentSessions/BridgeHostInstance.ts +20 -5
- package/src/agentSessions/HandoffOfferExpiry.ts +18 -0
- package/src/agentSessions/ReturningVisitorRecap.ts +1 -0
- package/src/agentSessions/SessionJanitor.ts +95 -45
- package/src/agentSessions/SessionManager.ts +73 -20
- package/src/agentSessions/conversationBrowsers.ts +143 -0
- package/src/agentSessions/sessionDeadline.ts +81 -0
- package/src/auth/APIKeyScopeAuth.ts +5 -4
- package/src/auth/AuthProviderCatalogRouter.ts +3 -0
- package/src/auth/__tests__/loginEmailResolution.test.ts +67 -0
- package/src/auth/index.ts +56 -12
- package/src/auth/initializeProviders.ts +43 -1
- package/src/auth/localDevAuth.ts +528 -0
- package/src/auth/loginEmailResolution.ts +67 -0
- package/src/auth/magicLink/MagicLinkKeys.ts +147 -15
- package/src/auth/magicLink/MagicLinkRouter.ts +33 -6
- package/src/auth/magicLink/MagicLinkService.ts +250 -10
- package/src/auth/magicLink/index.ts +1 -1
- package/src/auth/magicLink/redeemLanding.ts +7 -4
- package/src/auth/magicLink/types.ts +38 -3
- package/src/auth/newUsers.ts +1 -0
- package/src/auth/sessionUserClone.ts +3 -2
- package/src/backgroundSweepConfigUnits.ts +213 -0
- package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +674 -0
- package/src/broadcast/index.ts +5 -0
- package/src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts +180 -0
- package/src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts +182 -0
- package/src/broadcast/providers/GCPPubSubBroadcastProvider.ts +169 -0
- package/src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts +57 -0
- package/src/cache.ts +2 -1
- package/src/config.ts +138 -0
- package/src/context.ts +71 -14
- package/src/coreRoutes.ts +29 -7
- package/src/generated/graphql-schemas/__mj.ts +4145 -1193
- package/src/generic/CacheInvalidationResolver.ts +135 -78
- package/src/generic/OrphanedConversationDetailReconciler.ts +36 -3
- package/src/generic/PubSubManager.ts +54 -1
- package/src/generic/PushStatusResolver.ts +108 -11
- package/src/generic/ResolverBase.ts +635 -234
- package/src/generic/RunViewResolver.ts +176 -64
- package/src/generic/actionOutputFieldSecurity.ts +75 -0
- package/src/generic/fieldSecurityTransport.ts +62 -0
- package/src/index.ts +310 -85
- package/src/integration/ConnectionPause.ts +222 -0
- package/src/integration/CustomColumnPromoter.ts +129 -54
- package/src/integration/EntityMapLifecycle.ts +229 -6
- package/src/integration/InactiveRowWarnings.ts +50 -0
- package/src/integration/ObjectNamesByID.ts +97 -0
- package/src/integration/PostRestartIntrospect.ts +49 -0
- package/src/integration/RSUPostRestartProgress.ts +359 -0
- package/src/integration/RSUProgressBridge.ts +85 -2
- package/src/integration/RunArtifactAuthorization.ts +65 -0
- package/src/integration/SchemaRefreshLaunch.ts +12 -2
- package/src/integration/ScopedFieldsForBuild.ts +113 -0
- package/src/integration/TargetConfigGuard.ts +71 -0
- package/src/logging/variablesLoggingMiddleware.ts +59 -3
- package/src/realtimeSessions/README.md +7 -3
- package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
- package/src/realtimeSessions/ownedRealtimeSession.ts +16 -6
- package/src/realtimeSessions/sessionAccess.ts +211 -25
- package/src/realtimeSessions/sessionConfigStamps.ts +1 -1
- package/src/realtimeSessions/subscriptionAuthorization.ts +4 -2
- package/src/realtimeSessions/verificationWorkflow.ts +3 -1
- package/src/realtimeWidget/WidgetRouter.ts +22 -4
- package/src/realtimeWidget/WidgetSessionService.ts +254 -17
- package/src/realtimeWidget/host-identity.ts +1 -1
- package/src/realtimeWidget/visitorIdentity.ts +1 -0
- package/src/realtimeWidget/widgetCore.ts +34 -9
- package/src/realtimeWidget/widgetGuestElevation.ts +3 -1
- package/src/requestOrigin.ts +64 -0
- package/src/resolvers/ActionResolver.ts +78 -15
- package/src/resolvers/AdhocQueryResolver.ts +1 -0
- package/src/resolvers/AgentRunStatusPublisher.ts +36 -8
- package/src/resolvers/AgentSessionResolver.ts +50 -18
- package/src/resolvers/AutotagPipelineResolver.ts +2 -1
- package/src/resolvers/ConversationRunEventsResolver.ts +2 -0
- package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +41 -9
- package/src/resolvers/FetchEntityVectorsResolver.ts +132 -21
- package/src/resolvers/FileCategoryResolver.ts +1 -0
- package/src/resolvers/FileResolver.ts +14 -4
- package/src/resolvers/GetDataResolver.ts +35 -13
- package/src/resolvers/IntegrationDiscoveryResolver.ts +1570 -209
- package/src/resolvers/MCPResolver.ts +15 -2
- package/src/resolvers/MergeRecordsResolver.ts +23 -2
- package/src/resolvers/PipelineProgressResolver.ts +12 -3
- package/src/resolvers/QueryResolver.ts +20 -6
- package/src/resolvers/QuerySystemUserResolver.ts +207 -99
- package/src/resolvers/RSUResolver.ts +12 -0
- package/src/resolvers/RealtimeBridgeResolver.ts +1 -0
- package/src/resolvers/RealtimeClientSessionResolver.ts +144 -40
- package/src/resolvers/RemoteBrowserActionResolver.ts +252 -37
- package/src/resolvers/RunAIAgentResolver.ts +518 -163
- package/src/resolvers/RunAIPromptResolver.ts +18 -18
- package/src/resolvers/RunTemplateResolver.ts +9 -5
- package/src/resolvers/RunTestResolver.ts +3 -1
- package/src/resolvers/SyncDataResolver.ts +4 -0
- package/src/resolvers/TestQuerySQLResolver.ts +1 -0
- package/src/resolvers/TransactionGroupResolver.ts +66 -15
- package/src/resolvers/UserViewResolver.ts +2 -1
- package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +52 -0
- package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
- package/src/resolvers/meetingRecordingRegistration.ts +2 -0
- package/src/rest/EntityCRUDHandler.ts +22 -5
- package/src/rest/MediaAccessKeys.ts +6 -2
- package/src/rest/OAuthCallbackHandler.ts +13 -5
- package/src/rest/RESTEndpointHandler.ts +8 -5
- package/src/rest/RealtimeRecordingHandler.ts +9 -10
- package/src/rest/ViewOperationsHandler.ts +26 -7
- package/src/rest/setupRESTEndpoints.ts +11 -2
- package/src/serverRoleConfigUnits.ts +48 -0
- package/src/services/DurableEntityActionTaskSubmitter.ts +10 -2
- package/src/services/TaskGraphActionRunner.ts +2 -23
- package/src/services/TaskGraphAgentRunner.ts +43 -0
- package/src/services/TaskGraphContinuationDeliverer.ts +53 -20
- package/src/services/WorkQueueHostService.ts +26 -4
- package/src/services/workQueueConfig.ts +5 -5
- package/src/sharedCache.ts +1 -1
- package/src/types.ts +41 -1
- package/src/services/TaskOrchestration-Integration.md +0 -188
|
@@ -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,27 @@ 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(() => Boolean, {
|
|
213
|
+
nullable: true,
|
|
214
|
+
description:
|
|
215
|
+
'Optional, when true the provider does not run a count to populate TotalRowCount, which then comes back null. Ignored for ResultType count_only.',
|
|
216
|
+
})
|
|
217
|
+
SkipTotalRowCount?: boolean;
|
|
218
|
+
|
|
219
|
+
@Field(() => String, {
|
|
220
|
+
nullable: true,
|
|
221
|
+
description:
|
|
222
|
+
'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.',
|
|
223
|
+
})
|
|
224
|
+
AlternateBaseView?: string;
|
|
225
|
+
|
|
226
|
+
@Field(() => GraphQLJSONObject, {
|
|
227
|
+
nullable: true,
|
|
228
|
+
description:
|
|
229
|
+
"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.",
|
|
230
|
+
})
|
|
231
|
+
Properties?: ViewPropertyValues;
|
|
210
232
|
}
|
|
211
233
|
|
|
212
234
|
@InputType()
|
|
@@ -335,6 +357,27 @@ export class RunViewByNameInput {
|
|
|
335
357
|
'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
358
|
})
|
|
337
359
|
IncludeBinaryFields?: boolean;
|
|
360
|
+
|
|
361
|
+
@Field(() => Boolean, {
|
|
362
|
+
nullable: true,
|
|
363
|
+
description:
|
|
364
|
+
'Optional, when true the provider does not run a count to populate TotalRowCount, which then comes back null. Ignored for ResultType count_only.',
|
|
365
|
+
})
|
|
366
|
+
SkipTotalRowCount?: boolean;
|
|
367
|
+
|
|
368
|
+
@Field(() => String, {
|
|
369
|
+
nullable: true,
|
|
370
|
+
description:
|
|
371
|
+
'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.',
|
|
372
|
+
})
|
|
373
|
+
AlternateBaseView?: string;
|
|
374
|
+
|
|
375
|
+
@Field(() => GraphQLJSONObject, {
|
|
376
|
+
nullable: true,
|
|
377
|
+
description:
|
|
378
|
+
"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.",
|
|
379
|
+
})
|
|
380
|
+
Properties?: ViewPropertyValues;
|
|
338
381
|
}
|
|
339
382
|
|
|
340
383
|
@InputType()
|
|
@@ -449,6 +492,20 @@ export class RunDynamicViewInput {
|
|
|
449
492
|
'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
493
|
})
|
|
451
494
|
IncludeBinaryFields?: boolean;
|
|
495
|
+
|
|
496
|
+
@Field(() => Boolean, {
|
|
497
|
+
nullable: true,
|
|
498
|
+
description:
|
|
499
|
+
'Optional, when true the provider does not run a count to populate TotalRowCount, which then comes back null. Ignored for ResultType count_only.',
|
|
500
|
+
})
|
|
501
|
+
SkipTotalRowCount?: boolean;
|
|
502
|
+
|
|
503
|
+
@Field(() => String, {
|
|
504
|
+
nullable: true,
|
|
505
|
+
description:
|
|
506
|
+
'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.',
|
|
507
|
+
})
|
|
508
|
+
AlternateBaseView?: string;
|
|
452
509
|
}
|
|
453
510
|
|
|
454
511
|
@InputType()
|
|
@@ -592,6 +649,27 @@ export class RunViewGenericInput {
|
|
|
592
649
|
'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
650
|
})
|
|
594
651
|
IncludeBinaryFields?: boolean;
|
|
652
|
+
|
|
653
|
+
@Field(() => Boolean, {
|
|
654
|
+
nullable: true,
|
|
655
|
+
description:
|
|
656
|
+
'Optional, when true the provider does not run a count to populate TotalRowCount, which then comes back null. Ignored for ResultType count_only.',
|
|
657
|
+
})
|
|
658
|
+
SkipTotalRowCount?: boolean;
|
|
659
|
+
|
|
660
|
+
@Field(() => String, {
|
|
661
|
+
nullable: true,
|
|
662
|
+
description:
|
|
663
|
+
'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.',
|
|
664
|
+
})
|
|
665
|
+
AlternateBaseView?: string;
|
|
666
|
+
|
|
667
|
+
@Field(() => GraphQLJSONObject, {
|
|
668
|
+
nullable: true,
|
|
669
|
+
description:
|
|
670
|
+
"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.",
|
|
671
|
+
})
|
|
672
|
+
Properties?: ViewPropertyValues;
|
|
595
673
|
}
|
|
596
674
|
|
|
597
675
|
//****************************************************************************
|
|
@@ -605,6 +683,12 @@ export class RunViewCacheStatusInput {
|
|
|
605
683
|
|
|
606
684
|
@Field(() => Int, { description: 'The number of rows in cached results' })
|
|
607
685
|
rowCount: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
|
|
686
|
+
|
|
687
|
+
@Field(() => String, {
|
|
688
|
+
nullable: true,
|
|
689
|
+
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.",
|
|
690
|
+
})
|
|
691
|
+
fieldSecurityKey?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name, matching its siblings
|
|
608
692
|
}
|
|
609
693
|
|
|
610
694
|
@InputType()
|
|
@@ -796,7 +880,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
796
880
|
await this.CheckAPIKeyScopeAuthorization('view:run', input.ViewName, userPayload);
|
|
797
881
|
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
798
882
|
const rawData = await super.RunViewByNameGeneric(input, provider, userPayload, pubSub);
|
|
799
|
-
if (rawData
|
|
883
|
+
if (!rawData) {
|
|
800
884
|
return {
|
|
801
885
|
Results: [],
|
|
802
886
|
Success: false,
|
|
@@ -807,9 +891,10 @@ export class RunViewResolver extends ResolverBase {
|
|
|
807
891
|
};
|
|
808
892
|
}
|
|
809
893
|
|
|
810
|
-
const viewInfo =
|
|
811
|
-
|
|
812
|
-
const
|
|
894
|
+
const viewInfo = (rawData as RunViewResultWithResolvedView)._resolvedViewEntity
|
|
895
|
+
?? await this.resolveUserViewByName(input.ViewName, provider, userPayload.userRecord);
|
|
896
|
+
const entity = viewInfo ? provider.EntityByID(viewInfo.EntityID) : undefined;
|
|
897
|
+
const returnData = this.processRawData(rawData.Results, viewInfo?.EntityID ?? null, entity);
|
|
813
898
|
return {
|
|
814
899
|
Results: returnData,
|
|
815
900
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -817,6 +902,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
817
902
|
TotalRowCount: rawData?.TotalRowCount,
|
|
818
903
|
ExecutionTime: rawData?.ExecutionTime,
|
|
819
904
|
Success: rawData?.Success,
|
|
905
|
+
ErrorMessage: rawData?.ErrorMessage,
|
|
820
906
|
AggregateResults: this.processAggregateResults(rawData?.AggregateResults),
|
|
821
907
|
AggregateExecutionTime: rawData?.AggregateExecutionTime,
|
|
822
908
|
};
|
|
@@ -845,7 +931,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
845
931
|
await this.CheckAPIKeyScopeAuthorization('view:run', input.ViewID, userPayload);
|
|
846
932
|
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
847
933
|
const rawData = await super.RunViewByIDGeneric(input, provider, userPayload, pubSub);
|
|
848
|
-
if (rawData
|
|
934
|
+
if (!rawData) {
|
|
849
935
|
return {
|
|
850
936
|
Results: [],
|
|
851
937
|
Success: false,
|
|
@@ -856,9 +942,10 @@ export class RunViewResolver extends ResolverBase {
|
|
|
856
942
|
};
|
|
857
943
|
}
|
|
858
944
|
|
|
859
|
-
const viewInfo =
|
|
860
|
-
|
|
861
|
-
const
|
|
945
|
+
const viewInfo = (rawData as RunViewResultWithResolvedView)._resolvedViewEntity
|
|
946
|
+
?? await this.resolveUserViewByID(input.ViewID, provider, userPayload.userRecord);
|
|
947
|
+
const entity = viewInfo ? provider.EntityByID(viewInfo.EntityID) : undefined;
|
|
948
|
+
const returnData = this.processRawData(rawData.Results, viewInfo?.EntityID ?? null, entity);
|
|
862
949
|
return {
|
|
863
950
|
Results: returnData,
|
|
864
951
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -866,6 +953,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
866
953
|
TotalRowCount: rawData?.TotalRowCount,
|
|
867
954
|
ExecutionTime: rawData?.ExecutionTime,
|
|
868
955
|
Success: rawData?.Success,
|
|
956
|
+
ErrorMessage: rawData?.ErrorMessage,
|
|
869
957
|
AggregateResults: this.processAggregateResults(rawData?.AggregateResults),
|
|
870
958
|
AggregateExecutionTime: rawData?.AggregateExecutionTime,
|
|
871
959
|
};
|
|
@@ -1011,8 +1099,9 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1011
1099
|
};
|
|
1012
1100
|
}
|
|
1013
1101
|
|
|
1014
|
-
const
|
|
1015
|
-
const
|
|
1102
|
+
const viewInfo = (rawData as RunViewResultWithResolvedView)._resolvedViewEntity;
|
|
1103
|
+
const entity = viewInfo ? provider.EntityByID(viewInfo.EntityID) : provider.EntityByName(input.ViewName);
|
|
1104
|
+
const entityId = viewInfo?.EntityID ?? (entity ? entity.ID : null);
|
|
1016
1105
|
const returnData = this.processRawData(rawData.Results, entityId, entity);
|
|
1017
1106
|
return {
|
|
1018
1107
|
Results: returnData,
|
|
@@ -1058,9 +1147,10 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1058
1147
|
};
|
|
1059
1148
|
}
|
|
1060
1149
|
|
|
1061
|
-
const viewInfo =
|
|
1062
|
-
|
|
1063
|
-
const
|
|
1150
|
+
const viewInfo = (rawData as RunViewResultWithResolvedView)._resolvedViewEntity
|
|
1151
|
+
?? await this.resolveUserViewByID(input.ViewID, provider, userPayload.userRecord);
|
|
1152
|
+
const entity = viewInfo ? provider.EntityByID(viewInfo.EntityID) : undefined;
|
|
1153
|
+
const returnData = this.processRawData(rawData.Results, viewInfo?.EntityID ?? null, entity);
|
|
1064
1154
|
return {
|
|
1065
1155
|
Results: returnData,
|
|
1066
1156
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -1264,7 +1354,9 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1264
1354
|
// DataSource must be forwarded on this transport too (same as the InternalRunView/RunViews maps):
|
|
1265
1355
|
// otherwise a CacheLocal batch's DataSource:'Materialized' request silently reads the live view.
|
|
1266
1356
|
DataSource: item.params.DataSource,
|
|
1357
|
+
AlternateBaseView: item.params.AlternateBaseView,
|
|
1267
1358
|
IncludeBinaryFields: item.params.IncludeBinaryFields,
|
|
1359
|
+
SkipTotalRowCount: item.params.SkipTotalRowCount,
|
|
1268
1360
|
// BypassCache likewise — the input type (RunDynamicViewInput) has always declared it, and its
|
|
1269
1361
|
// own description promises "the pre-check cache lookup is skipped". Dropping it here left the
|
|
1270
1362
|
// provider free to answer a deliberate database read from the server cache.
|
|
@@ -1272,75 +1364,95 @@ export class RunViewResolver extends ResolverBase {
|
|
|
1272
1364
|
AfterKey: item.params.AfterKey
|
|
1273
1365
|
? CompositeKey.FromKeyValuePairs(item.params.AfterKey.KeyValuePairs)
|
|
1274
1366
|
: undefined,
|
|
1367
|
+
TimeZone: userPayload?.TimeZone,
|
|
1275
1368
|
},
|
|
1276
1369
|
cacheStatus: item.cacheStatus ? {
|
|
1277
1370
|
maxUpdatedAt: item.cacheStatus.maxUpdatedAt,
|
|
1278
1371
|
rowCount: item.cacheStatus.rowCount,
|
|
1372
|
+
fieldSecurityKey: item.cacheStatus.fieldSecurityKey ?? undefined,
|
|
1279
1373
|
} : undefined,
|
|
1280
1374
|
}));
|
|
1281
1375
|
|
|
1282
1376
|
const response = await sqlProvider.RunViewsWithCacheCheck(coreParams, userPayload.userRecord);
|
|
1283
1377
|
|
|
1284
|
-
// Transform results to include processed data rows
|
|
1285
|
-
const
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
`This may indicate a metadata sync issue.`
|
|
1294
|
-
);
|
|
1378
|
+
// Transform results to include processed data rows (applying API encryption policy on copies)
|
|
1379
|
+
const protectRawRows = async (
|
|
1380
|
+
entity: EntityInfo,
|
|
1381
|
+
rows: object[]
|
|
1382
|
+
): Promise<Record<string, string | number | boolean | Date | Uint8Array | null | undefined>[]> => {
|
|
1383
|
+
type RawRow = Record<string, string | number | boolean | Date | Uint8Array | null | undefined>;
|
|
1384
|
+
const typedRows = rows as RawRow[];
|
|
1385
|
+
if (!typedRows.length || !entity.EncryptedFields.some((field) => !field.AllowDecryptInAPI)) {
|
|
1386
|
+
return typedRows;
|
|
1295
1387
|
}
|
|
1388
|
+
const shallowCopies: RawRow[] = typedRows.map((row) => ({ ...row }));
|
|
1389
|
+
await this.ArrayFilterEncryptedFieldsForAPI(entity.Name, shallowCopies, user, provider, 'Name');
|
|
1390
|
+
return shallowCopies;
|
|
1391
|
+
};
|
|
1296
1392
|
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
const
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
)
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1393
|
+
const transformedResults: RunViewWithCacheCheckResultOutput[] = await Promise.all(
|
|
1394
|
+
response.results.map(async (result, index) => {
|
|
1395
|
+
const inputItem = input[index];
|
|
1396
|
+
const entity = inputItem.params.EntityName ? provider.EntityByName(inputItem.params.EntityName) : undefined;
|
|
1397
|
+
|
|
1398
|
+
// If we have differential data but no entity, that's a configuration error
|
|
1399
|
+
if (result.status === 'differential' && result.differentialData && !entity) {
|
|
1400
|
+
throw new Error(
|
|
1401
|
+
`Entity '${inputItem.params.EntityName}' not found in provider metadata but server returned differential data. ` +
|
|
1402
|
+
`This may indicate a metadata sync issue.`
|
|
1403
|
+
);
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
if (result.status === 'differential' && result.differentialData && entity) {
|
|
1407
|
+
// Apply API encryption filtering before serializing differential rows
|
|
1408
|
+
const filteredUpdatedRows = await protectRawRows(entity, result.differentialData.updatedRows as object[]);
|
|
1409
|
+
const processedUpdatedRows = this.processRawData(
|
|
1410
|
+
filteredUpdatedRows,
|
|
1411
|
+
entity.ID,
|
|
1412
|
+
entity
|
|
1413
|
+
);
|
|
1414
|
+
return {
|
|
1415
|
+
viewIndex: result.viewIndex,
|
|
1416
|
+
status: result.status,
|
|
1417
|
+
Results: undefined,
|
|
1418
|
+
differentialData: {
|
|
1419
|
+
updatedRows: processedUpdatedRows,
|
|
1420
|
+
deletedRecordIDs: result.differentialData.deletedRecordIDs,
|
|
1421
|
+
},
|
|
1422
|
+
maxUpdatedAt: result.maxUpdatedAt,
|
|
1423
|
+
rowCount: result.rowCount,
|
|
1424
|
+
errorMessage: result.errorMessage,
|
|
1425
|
+
};
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
if (result.status === 'stale' && result.results && entity) {
|
|
1429
|
+
// Apply API encryption filtering before serializing full refresh rows
|
|
1430
|
+
const filteredRows = await protectRawRows(entity, result.results as object[]);
|
|
1431
|
+
const processedRows = this.processRawData(filteredRows, entity.ID, entity);
|
|
1432
|
+
return {
|
|
1433
|
+
viewIndex: result.viewIndex,
|
|
1434
|
+
status: result.status,
|
|
1435
|
+
Results: processedRows,
|
|
1436
|
+
differentialData: undefined,
|
|
1437
|
+
maxUpdatedAt: result.maxUpdatedAt,
|
|
1438
|
+
rowCount: result.rowCount,
|
|
1439
|
+
errorMessage: result.errorMessage,
|
|
1440
|
+
// Same serializer the regular RunView path uses (value → JSON string).
|
|
1441
|
+
aggregateResults: this.processAggregateResults(result.aggregateResults),
|
|
1442
|
+
};
|
|
1443
|
+
}
|
|
1317
1444
|
|
|
1318
|
-
if (result.status === 'stale' && result.results && entity) {
|
|
1319
|
-
// Process raw data into GraphQL-compatible format (full refresh)
|
|
1320
|
-
const processedRows = this.processRawData(result.results as Record<string, unknown>[], entity.ID, entity);
|
|
1321
1445
|
return {
|
|
1322
1446
|
viewIndex: result.viewIndex,
|
|
1323
1447
|
status: result.status,
|
|
1324
|
-
Results:
|
|
1448
|
+
Results: undefined,
|
|
1325
1449
|
differentialData: undefined,
|
|
1326
1450
|
maxUpdatedAt: result.maxUpdatedAt,
|
|
1327
1451
|
rowCount: result.rowCount,
|
|
1328
1452
|
errorMessage: result.errorMessage,
|
|
1329
|
-
// Same serializer the regular RunView path uses (value → JSON string).
|
|
1330
|
-
aggregateResults: this.processAggregateResults(result.aggregateResults),
|
|
1331
1453
|
};
|
|
1332
|
-
}
|
|
1333
|
-
|
|
1334
|
-
return {
|
|
1335
|
-
viewIndex: result.viewIndex,
|
|
1336
|
-
status: result.status,
|
|
1337
|
-
Results: undefined,
|
|
1338
|
-
differentialData: undefined,
|
|
1339
|
-
maxUpdatedAt: result.maxUpdatedAt,
|
|
1340
|
-
rowCount: result.rowCount,
|
|
1341
|
-
errorMessage: result.errorMessage,
|
|
1342
|
-
};
|
|
1343
|
-
});
|
|
1454
|
+
})
|
|
1455
|
+
);
|
|
1344
1456
|
|
|
1345
1457
|
return {
|
|
1346
1458
|
success: response.success,
|
|
@@ -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
|
+
}
|