@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
|
@@ -30,7 +30,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
30
30
|
*/
|
|
31
31
|
import { Resolver, Mutation, Query, Arg, Ctx, Float, Int, ObjectType, Field, PubSub, PubSubEngine } from 'type-graphql';
|
|
32
32
|
import { LogError } from '@memberjunction/core';
|
|
33
|
-
import {
|
|
33
|
+
import { NormalizeUUID } from '@memberjunction/global';
|
|
34
34
|
import { NormalizeInstanceKey, RemoteBrowserEngine } from '@memberjunction/remote-browser-server';
|
|
35
35
|
import { BeginBrowserGoalStep, FinalizeBrowserGoalStep, ExtractCoAgentRunID } from '../agentSessions/remoteBrowserGoalEngine.js';
|
|
36
36
|
import { RemoteBrowserGoalRegistry } from '../agentSessions/remoteBrowserGoalRegistry.js';
|
|
@@ -39,11 +39,15 @@ import { randomUUID } from 'node:crypto';
|
|
|
39
39
|
import { RemoteBrowserCapabilityNotSupportedError, } from '@memberjunction/remote-browser-base';
|
|
40
40
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
41
41
|
import { GetReadWriteProvider } from '../util.js';
|
|
42
|
+
import { LoadOwnedRealtimeSession, RealtimeSessionNotFoundError, RealtimeSessionOwnershipError, } from '../realtimeSessions/ownedRealtimeSession.js';
|
|
43
|
+
import { AuthorizeSessionAccess, ResolveSessionScopeIdentity } from '../realtimeSessions/sessionAccess.js';
|
|
44
|
+
import { ConversationBrowserLedger, RemoteBrowserRefusedError } from '../agentSessions/conversationBrowsers.js';
|
|
45
|
+
import { configInfo } from '../config.js';
|
|
42
46
|
import { AIEngine } from '@memberjunction/aiengine';
|
|
43
47
|
import { AIPromptRunner } from '@memberjunction/ai-prompts';
|
|
44
48
|
import { AIPromptParams } from '@memberjunction/ai-core-plus';
|
|
45
|
-
/** Entity name
|
|
46
|
-
const
|
|
49
|
+
/** Entity name for turn-based text conversations that scope a live Remote Browser session. */
|
|
50
|
+
const CONVERSATION_ENTITY = 'MJ: Conversations';
|
|
47
51
|
/** Entity name for the agent whose `TypeConfiguration` carries the remote-browser provider preference. */
|
|
48
52
|
const AGENT_ENTITY = 'MJ: AI Agents';
|
|
49
53
|
/**
|
|
@@ -55,7 +59,7 @@ const AGENT_ENTITY = 'MJ: AI Agents';
|
|
|
55
59
|
const VISUAL_INTERPRETER_PROMPT_NAME = 'Remote Browser Visual Interpreter';
|
|
56
60
|
/**
|
|
57
61
|
* Result of {@link RemoteBrowserActionResolver.ExecuteRemoteBrowserAction} — the outcome of one browser
|
|
58
|
-
* action plus the resulting URL
|
|
62
|
+
* action plus the resulting URL and optional structured DOM observation / filled-field list.
|
|
59
63
|
*/
|
|
60
64
|
let RemoteBrowserActionResult = class RemoteBrowserActionResult {
|
|
61
65
|
};
|
|
@@ -71,6 +75,14 @@ __decorate([
|
|
|
71
75
|
Field(() => String, { nullable: true }),
|
|
72
76
|
__metadata("design:type", String)
|
|
73
77
|
], RemoteBrowserActionResult.prototype, "Detail", void 0);
|
|
78
|
+
__decorate([
|
|
79
|
+
Field(() => String, { nullable: true }),
|
|
80
|
+
__metadata("design:type", String)
|
|
81
|
+
], RemoteBrowserActionResult.prototype, "ObservationJson", void 0);
|
|
82
|
+
__decorate([
|
|
83
|
+
Field(() => String, { nullable: true }),
|
|
84
|
+
__metadata("design:type", String)
|
|
85
|
+
], RemoteBrowserActionResult.prototype, "FilledJson", void 0);
|
|
74
86
|
RemoteBrowserActionResult = __decorate([
|
|
75
87
|
ObjectType()
|
|
76
88
|
], RemoteBrowserActionResult);
|
|
@@ -250,7 +262,7 @@ export { RemoteBrowserInterpretation };
|
|
|
250
262
|
const MAX_STREAM_ENTRY_AGE_MS = 4 * 60 * 60 * 1000; // 4 hours — generous vs. SessionJanitor's 15-minute idle threshold
|
|
251
263
|
let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends ResolverBase {
|
|
252
264
|
constructor() {
|
|
253
|
-
super(
|
|
265
|
+
super();
|
|
254
266
|
/**
|
|
255
267
|
* Surfaces whose live CDP screencast this resolver has already started, keyed by
|
|
256
268
|
* {@link RemoteBrowserActionResolver.streamKey} (agent session **plus** instance) so a re-issued
|
|
@@ -274,6 +286,15 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
274
286
|
* {@link RemoteBrowserActionResolver.startedScreencasts} for why the value is a timestamp.
|
|
275
287
|
*/
|
|
276
288
|
this.startedAudioStreams = new Map();
|
|
289
|
+
/**
|
|
290
|
+
* The push session each surface's frames and audio go to, by stream key. A reloaded tab starts again
|
|
291
|
+
* from a new push session while the browser keeps streaming; it takes the frames over here instead of
|
|
292
|
+
* being told "already streaming" while they still go to the old session. An entry whose streams have
|
|
293
|
+
* stopped is dropped by {@link sweepStreamEntries}.
|
|
294
|
+
*/
|
|
295
|
+
this.streamTargets = new Map();
|
|
296
|
+
// The idle reaper ends a conversation browser the way EndRemoteBrowserSession does.
|
|
297
|
+
ConversationBrowserLedger.Instance.EndBrowser = (conversationID) => this.endBrowser(conversationID);
|
|
277
298
|
}
|
|
278
299
|
/**
|
|
279
300
|
* Drops any {@link startedScreencasts} / {@link startedAudioStreams} entry older than
|
|
@@ -293,6 +314,12 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
293
314
|
this.startedAudioStreams.delete(key);
|
|
294
315
|
}
|
|
295
316
|
}
|
|
317
|
+
// A target outlives its streams only until here (a stop, a failed start, a voice session's end).
|
|
318
|
+
for (const key of this.streamTargets.keys()) {
|
|
319
|
+
if (!this.startedScreencasts.has(key) && !this.startedAudioStreams.has(key)) {
|
|
320
|
+
this.streamTargets.delete(key);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
296
323
|
}
|
|
297
324
|
/**
|
|
298
325
|
* Execute ONE browser action relayed from the client-direct realtime session, returning the outcome +
|
|
@@ -310,18 +337,24 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
310
337
|
* @param kind The action kind (`'navigate' | 'click' | 'type' | 'key' | 'scroll' | 'back' | 'forward' | 'wait'`).
|
|
311
338
|
* @returns The action result (success + resulting URL + detail).
|
|
312
339
|
*/
|
|
313
|
-
async ExecuteRemoteBrowserAction(agentSessionID, kind, { userPayload, providers }, url, selector, x, y, text, key, deltaX, deltaY, ms, instanceKey) {
|
|
340
|
+
async ExecuteRemoteBrowserAction(agentSessionID, kind, { userPayload, providers }, url, selector, x, y, text, key, deltaX, deltaY, ms, instanceKey, ref, valuesJson) {
|
|
314
341
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
315
|
-
const session = await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
316
|
-
const action = this.buildAction({ kind, url, selector, x, y, text, key, deltaX, deltaY, ms });
|
|
342
|
+
const session = await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
343
|
+
const action = this.buildAction({ kind, url, selector, ref, x, y, text, key, deltaX, deltaY, ms, valuesJson });
|
|
317
344
|
if (!action) {
|
|
318
345
|
return { Success: false, Detail: `Unknown or incomplete remote-browser action '${kind}'.` };
|
|
319
346
|
}
|
|
320
347
|
const providerName = await this.resolveProviderName(session, contextUser, provider);
|
|
321
348
|
try {
|
|
322
|
-
const liveSession = await
|
|
349
|
+
const liveSession = await this.startBrowser(agentSessionID, session, contextUser, providerName, instanceKey);
|
|
323
350
|
const result = await liveSession.ExecuteAction(action);
|
|
324
|
-
return {
|
|
351
|
+
return {
|
|
352
|
+
Success: result.Success,
|
|
353
|
+
CurrentUrl: result.CurrentUrl,
|
|
354
|
+
Detail: result.Detail,
|
|
355
|
+
...(result.Observation ? { ObservationJson: JSON.stringify(result.Observation) } : {}),
|
|
356
|
+
...(result.Filled ? { FilledJson: JSON.stringify(result.Filled) } : {}),
|
|
357
|
+
};
|
|
325
358
|
}
|
|
326
359
|
catch (err) {
|
|
327
360
|
// A dead handle is not a failure to report, it is a mapping to delete (#3598) — and this is the
|
|
@@ -347,6 +380,8 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
347
380
|
Detail: retried.Success
|
|
348
381
|
? retried.Detail
|
|
349
382
|
: `The browser had closed and was replaced (it is now on a blank page). ${retried.Detail ?? ''}`.trim(),
|
|
383
|
+
...(retried.Observation ? { ObservationJson: JSON.stringify(retried.Observation) } : {}),
|
|
384
|
+
...(retried.Filled ? { FilledJson: JSON.stringify(retried.Filled) } : {}),
|
|
350
385
|
};
|
|
351
386
|
}
|
|
352
387
|
catch (retryError) {
|
|
@@ -376,7 +411,11 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
376
411
|
*/
|
|
377
412
|
async ExecuteRemoteBrowserGoal(agentSessionID, goal, { userPayload, providers }, startUrl, maxSteps, preferredStrategy, instanceKey) {
|
|
378
413
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
379
|
-
const session = await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
414
|
+
const session = await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
415
|
+
if (session.IsConversation) {
|
|
416
|
+
// A goal loop clicks and navigates on its own, past the click guard the browser_* tools go through.
|
|
417
|
+
return { Success: false, Status: 'Error', Detail: 'Goal runs are not available in a text conversation; use the browser_* tools.' };
|
|
418
|
+
}
|
|
380
419
|
const providerName = await this.resolveProviderName(session, contextUser, provider);
|
|
381
420
|
// Observability: nest this goal's many prompt runs under ONE "Browser goal" step on the realtime
|
|
382
421
|
// co-agent run (when the session has one). Best-effort — a null step just means the goal runs unlinked.
|
|
@@ -444,7 +483,7 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
444
483
|
*/
|
|
445
484
|
async RemoteBrowserSnapshot(agentSessionID, { userPayload, providers }, instanceKey) {
|
|
446
485
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
447
|
-
await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
486
|
+
await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
448
487
|
const liveSession = RemoteBrowserEngine.Instance.GetSessionForAgentSession(agentSessionID, instanceKey);
|
|
449
488
|
if (!liveSession) {
|
|
450
489
|
return {};
|
|
@@ -517,7 +556,7 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
517
556
|
*/
|
|
518
557
|
async InterpretRemoteBrowserPage(agentSessionID, { userPayload, providers }, query, instanceKey) {
|
|
519
558
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
520
|
-
await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
559
|
+
await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
521
560
|
const liveSession = RemoteBrowserEngine.Instance.GetSessionForAgentSession(agentSessionID, instanceKey);
|
|
522
561
|
if (!liveSession) {
|
|
523
562
|
return { Description: undefined, Elements: [], Detail: 'no live browser' };
|
|
@@ -551,18 +590,19 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
551
590
|
*/
|
|
552
591
|
async StartRemoteBrowserScreencast(agentSessionID, { userPayload, providers }, pubSub, instanceKey) {
|
|
553
592
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
554
|
-
const session = await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
593
|
+
const session = await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
555
594
|
// Idempotent PER SURFACE: a re-bind must not stack a second screencast on the one live browser,
|
|
556
595
|
// but a SECOND surface binding for the first time is not a re-bind (#3531).
|
|
557
596
|
this.sweepStreamEntries();
|
|
558
597
|
const streamKey = this.streamKey(agentSessionID, instanceKey);
|
|
598
|
+
this.streamTargets.set(streamKey, userPayload);
|
|
559
599
|
if (this.startedScreencasts.has(streamKey)) {
|
|
560
600
|
return { Streaming: true };
|
|
561
601
|
}
|
|
562
602
|
const providerName = await this.resolveProviderName(session, contextUser, provider);
|
|
563
603
|
try {
|
|
564
|
-
const liveSession = await
|
|
565
|
-
await liveSession.StartScreencast((frame) => this.publishFrame(pubSub, userPayload, agentSessionID, instanceKey, frame, liveSession.GetCurrentUrl()));
|
|
604
|
+
const liveSession = await this.startBrowser(agentSessionID, session, contextUser, providerName, instanceKey);
|
|
605
|
+
await liveSession.StartScreencast((frame) => this.publishFrame(pubSub, this.streamTargets.get(streamKey) ?? userPayload, agentSessionID, instanceKey, frame, liveSession.GetCurrentUrl()));
|
|
566
606
|
this.startedScreencasts.set(streamKey, Date.now());
|
|
567
607
|
return { Streaming: true };
|
|
568
608
|
}
|
|
@@ -571,6 +611,9 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
571
611
|
// Backend can't stream — the client keeps polling. Not an error condition.
|
|
572
612
|
return { Streaming: false };
|
|
573
613
|
}
|
|
614
|
+
if (err instanceof RemoteBrowserRefusedError) {
|
|
615
|
+
throw err; // the client must stop and say so, not poll for a browser that will never start
|
|
616
|
+
}
|
|
574
617
|
const message = err instanceof Error ? err.message : String(err);
|
|
575
618
|
LogError(`StartRemoteBrowserScreencast failed (provider='${providerName}'): ${message}`);
|
|
576
619
|
return { Streaming: false };
|
|
@@ -586,7 +629,7 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
586
629
|
*/
|
|
587
630
|
async StopRemoteBrowserScreencast(agentSessionID, { userPayload, providers }, instanceKey) {
|
|
588
631
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
589
|
-
await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
632
|
+
await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
590
633
|
this.startedScreencasts.delete(this.streamKey(agentSessionID, instanceKey));
|
|
591
634
|
const liveSession = RemoteBrowserEngine.Instance.GetSessionForAgentSession(agentSessionID, instanceKey);
|
|
592
635
|
if (liveSession) {
|
|
@@ -601,6 +644,33 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
601
644
|
}
|
|
602
645
|
return true;
|
|
603
646
|
}
|
|
647
|
+
/**
|
|
648
|
+
* Ends the browser the caller's own session or conversation started, and forgets its stream
|
|
649
|
+
* bookkeeping. Ownership-gated. Idempotent: ending a scope that holds no browser resolves `false`.
|
|
650
|
+
* A text chat calls this when its browser drawer closes, the conversation changes, or the chat is
|
|
651
|
+
* destroyed, so a closed drawer never leaves a Chromium process (or a billed hosted browser) running.
|
|
652
|
+
*
|
|
653
|
+
* @param agentSessionID The `AIAgentSession` id or `Conversation` id.
|
|
654
|
+
* @returns `true` when a live browser was ended.
|
|
655
|
+
*/
|
|
656
|
+
async EndRemoteBrowserSession(agentSessionID, { userPayload, providers }, instanceKey) {
|
|
657
|
+
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
658
|
+
await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
659
|
+
return this.endBrowser(agentSessionID, instanceKey);
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Ends a scope's browser and everything kept about it: the ledger slot (released first, so an action
|
|
663
|
+
* landing during teardown is counted again), the stream entries (so the next open streams the next
|
|
664
|
+
* browser) and the browser itself. The idle reaper ends conversation browsers through here too.
|
|
665
|
+
*/
|
|
666
|
+
async endBrowser(agentSessionID, instanceKey) {
|
|
667
|
+
ConversationBrowserLedger.Instance.Release(agentSessionID);
|
|
668
|
+
const streamKey = this.streamKey(agentSessionID, instanceKey);
|
|
669
|
+
this.startedScreencasts.delete(streamKey);
|
|
670
|
+
this.startedAudioStreams.delete(streamKey);
|
|
671
|
+
this.streamTargets.delete(streamKey);
|
|
672
|
+
return RemoteBrowserEngine.Instance.EndSessionForAgentSession(agentSessionID, instanceKey);
|
|
673
|
+
}
|
|
604
674
|
/**
|
|
605
675
|
* Starts streaming the session browser's TAB AUDIO and PUSHES each encoded chunk to the calling user's
|
|
606
676
|
* push-status topic — so a co-agent demoing a video/audio site is HEARD, not just seen. Ownership-gated.
|
|
@@ -616,17 +686,18 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
616
686
|
*/
|
|
617
687
|
async StartRemoteBrowserAudioStream(agentSessionID, { userPayload, providers }, pubSub, instanceKey) {
|
|
618
688
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
619
|
-
const session = await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
689
|
+
const session = await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
620
690
|
// Idempotent PER SURFACE — same reasoning as the screencast map (#3531).
|
|
621
691
|
this.sweepStreamEntries();
|
|
622
692
|
const streamKey = this.streamKey(agentSessionID, instanceKey);
|
|
693
|
+
this.streamTargets.set(streamKey, userPayload);
|
|
623
694
|
if (this.startedAudioStreams.has(streamKey)) {
|
|
624
695
|
return { Streaming: true };
|
|
625
696
|
}
|
|
626
697
|
const providerName = await this.resolveProviderName(session, contextUser, provider);
|
|
627
698
|
try {
|
|
628
|
-
const liveSession = await
|
|
629
|
-
await liveSession.StartAudioStream((chunk) => this.publishAudioChunk(pubSub, userPayload, agentSessionID, instanceKey, chunk));
|
|
699
|
+
const liveSession = await this.startBrowser(agentSessionID, session, contextUser, providerName, instanceKey);
|
|
700
|
+
await liveSession.StartAudioStream((chunk) => this.publishAudioChunk(pubSub, this.streamTargets.get(streamKey) ?? userPayload, agentSessionID, instanceKey, chunk));
|
|
630
701
|
this.startedAudioStreams.set(streamKey, Date.now());
|
|
631
702
|
return { Streaming: true };
|
|
632
703
|
}
|
|
@@ -635,6 +706,9 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
635
706
|
// Backend can't capture audio — the client plays no audio. Not an error condition.
|
|
636
707
|
return { Streaming: false };
|
|
637
708
|
}
|
|
709
|
+
if (err instanceof RemoteBrowserRefusedError) {
|
|
710
|
+
throw err;
|
|
711
|
+
}
|
|
638
712
|
const message = err instanceof Error ? err.message : String(err);
|
|
639
713
|
LogError(`StartRemoteBrowserAudioStream failed (provider='${providerName}'): ${message}`);
|
|
640
714
|
return { Streaming: false };
|
|
@@ -650,7 +724,7 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
650
724
|
*/
|
|
651
725
|
async StopRemoteBrowserAudioStream(agentSessionID, { userPayload, providers }, instanceKey) {
|
|
652
726
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
653
|
-
await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
727
|
+
await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
654
728
|
this.startedAudioStreams.delete(this.streamKey(agentSessionID, instanceKey));
|
|
655
729
|
const liveSession = RemoteBrowserEngine.Instance.GetSessionForAgentSession(agentSessionID, instanceKey);
|
|
656
730
|
if (liveSession) {
|
|
@@ -691,7 +765,7 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
691
765
|
*/
|
|
692
766
|
async RelayRemoteBrowserHumanInput(agentSessionID, kind, { userPayload, providers }, x, y, button, key, text, deltaX, deltaY, modifiers, instanceKey) {
|
|
693
767
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
694
|
-
await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
768
|
+
await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
695
769
|
const liveSession = RemoteBrowserEngine.Instance.GetSessionForAgentSession(agentSessionID, instanceKey);
|
|
696
770
|
if (!liveSession) {
|
|
697
771
|
return false;
|
|
@@ -730,7 +804,7 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
730
804
|
*/
|
|
731
805
|
async GetRemoteBrowserSelection(agentSessionID, { userPayload, providers }, instanceKey) {
|
|
732
806
|
const { contextUser, provider } = this.requireUserAndProvider(userPayload, providers);
|
|
733
|
-
await this.loadOwnedSession(agentSessionID, contextUser, provider);
|
|
807
|
+
await this.loadOwnedSession(agentSessionID, contextUser, provider, instanceKey);
|
|
734
808
|
const liveSession = RemoteBrowserEngine.Instance.GetSessionForAgentSession(agentSessionID, instanceKey);
|
|
735
809
|
if (!liveSession) {
|
|
736
810
|
return { Text: '' };
|
|
@@ -939,21 +1013,83 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
939
1013
|
return { contextUser, provider: GetReadWriteProvider(providers) };
|
|
940
1014
|
}
|
|
941
1015
|
/**
|
|
942
|
-
* Loads the
|
|
943
|
-
*
|
|
1016
|
+
* Loads the owning scope and enforces inbound ownership: an `MJ: AI Agent Sessions` row (a realtime
|
|
1017
|
+
* call, via `LoadOwnedRealtimeSession`) or, failing that, an `MJ: Conversations` row (a text chat's
|
|
1018
|
+
* browser), both under `AuthorizeSessionAccess`. Throws when neither exists or the caller may not use it.
|
|
944
1019
|
*
|
|
945
|
-
* @param agentSessionID The `AIAgentSession` id.
|
|
946
|
-
* @returns The
|
|
1020
|
+
* @param agentSessionID The `AIAgentSession` id or `Conversation` id.
|
|
1021
|
+
* @returns The owned scope.
|
|
1022
|
+
*/
|
|
1023
|
+
async loadOwnedSession(agentSessionID, contextUser, provider, instanceKey) {
|
|
1024
|
+
try {
|
|
1025
|
+
return await LoadOwnedRealtimeSession(agentSessionID, contextUser, provider);
|
|
1026
|
+
}
|
|
1027
|
+
catch (err) {
|
|
1028
|
+
if (err instanceof RealtimeSessionOwnershipError) {
|
|
1029
|
+
throw new RemoteBrowserRefusedError(`Not authorized: remote-browser session ${agentSessionID} is not owned by you.`);
|
|
1030
|
+
}
|
|
1031
|
+
if (!(err instanceof RealtimeSessionNotFoundError)) {
|
|
1032
|
+
throw err;
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
// Not a realtime session: a text chat scopes its browser to a conversation, which this server must opt
|
|
1036
|
+
// into (each browser is a server Chromium or a billed hosted session), under the same access rule
|
|
1037
|
+
// (owner, and for an anonymous widget guest its scope id), loaded as the caller so its RLS applies too.
|
|
1038
|
+
const settings = this.ConversationBrowserSettings();
|
|
1039
|
+
if (!settings.enabled) {
|
|
1040
|
+
throw new RemoteBrowserRefusedError(`Remote-browser session ${agentSessionID} not found. Conversation browsers are not enabled on this server (realtime.conversationBrowser.enabled).`);
|
|
1041
|
+
}
|
|
1042
|
+
if (contextUser.IsMagicLinkAnonymous && !settings.allowAnonymous) {
|
|
1043
|
+
throw new RemoteBrowserRefusedError(`Not authorized: anonymous users cannot open a conversation browser on this server.`);
|
|
1044
|
+
}
|
|
1045
|
+
// One browser per conversation: an instance key would key a second one past the cap, the network
|
|
1046
|
+
// policy and the reaper (the client never sends one).
|
|
1047
|
+
if (instanceKey?.trim()) {
|
|
1048
|
+
throw new RemoteBrowserRefusedError('A conversation browser has no instances; instanceKey is not accepted.');
|
|
1049
|
+
}
|
|
1050
|
+
const conversation = await provider.GetEntityObject(CONVERSATION_ENTITY, contextUser);
|
|
1051
|
+
if (!(await conversation.Load(agentSessionID))) {
|
|
1052
|
+
throw new RemoteBrowserRefusedError(`Remote-browser session ${agentSessionID} not found.`);
|
|
1053
|
+
}
|
|
1054
|
+
const access = AuthorizeSessionAccess({ SessionUserID: conversation.UserID, ConversationExternalID: conversation.ExternalID, ConversationReadable: true }, contextUser);
|
|
1055
|
+
if (!access.Allowed) {
|
|
1056
|
+
throw new RemoteBrowserRefusedError(`Not authorized: remote-browser session ${agentSessionID} is not owned by you.`);
|
|
1057
|
+
}
|
|
1058
|
+
// Each use puts off the browser's idle end.
|
|
1059
|
+
ConversationBrowserLedger.Instance.Touch(agentSessionID);
|
|
1060
|
+
return { ID: conversation.ID, AgentID: null, Config_: null, IsConversation: true };
|
|
1061
|
+
}
|
|
1062
|
+
/** This server's conversation-browser settings (a seam for tests). */
|
|
1063
|
+
ConversationBrowserSettings() {
|
|
1064
|
+
return configInfo.realtime.conversationBrowser;
|
|
1065
|
+
}
|
|
1066
|
+
/**
|
|
1067
|
+
* Starts (or reuses) the scope's browser. A conversation's browser first counts against its owner's
|
|
1068
|
+
* cap, and gives the slot back when it fails to start.
|
|
947
1069
|
*/
|
|
948
|
-
async
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
1070
|
+
async startBrowser(agentSessionID, scope, contextUser, providerName, instanceKey) {
|
|
1071
|
+
if (scope.IsConversation) {
|
|
1072
|
+
const settings = this.ConversationBrowserSettings();
|
|
1073
|
+
// ponytail: an action that joins a launch a concurrent End then tears down keeps this slot until the
|
|
1074
|
+
// reaper frees it (idleMinutes); release it on that teardown if users hit maxPerUser this way.
|
|
1075
|
+
// An anonymous guest's cap is its own: every guest is the one shared Anonymous user.
|
|
1076
|
+
const guestScope = contextUser.IsMagicLinkAnonymous ? ResolveSessionScopeIdentity(contextUser) : undefined;
|
|
1077
|
+
const owner = { Key: guestScope ? `scope:${guestScope}` : `user:${NormalizeUUID(contextUser.ID)}`, Anonymous: Boolean(contextUser.IsMagicLinkAnonymous) };
|
|
1078
|
+
ConversationBrowserLedger.Instance.Claim(agentSessionID, owner, settings);
|
|
1079
|
+
// Set once, before the browser launches; the engine re-applies it to any replacement.
|
|
1080
|
+
if (!RemoteBrowserEngine.Instance.GetSessionForAgentSession(agentSessionID, instanceKey)) {
|
|
1081
|
+
await RemoteBrowserEngine.Instance.RestrictPrivateNetworkForAgentSession(agentSessionID, settings.allowedPrivateHosts);
|
|
1082
|
+
}
|
|
952
1083
|
}
|
|
953
|
-
|
|
954
|
-
|
|
1084
|
+
try {
|
|
1085
|
+
return await RemoteBrowserEngine.Instance.StartSessionForAgentSession(agentSessionID, contextUser, providerName, instanceKey);
|
|
1086
|
+
}
|
|
1087
|
+
catch (err) {
|
|
1088
|
+
if (scope.IsConversation && !RemoteBrowserEngine.Instance.GetSessionForAgentSession(agentSessionID, instanceKey)) {
|
|
1089
|
+
ConversationBrowserLedger.Instance.Release(agentSessionID);
|
|
1090
|
+
}
|
|
1091
|
+
throw err;
|
|
955
1092
|
}
|
|
956
|
-
return session;
|
|
957
1093
|
}
|
|
958
1094
|
/**
|
|
959
1095
|
* Resolves the remote-browser backend name for the session from the session's agent's
|
|
@@ -961,10 +1097,13 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
961
1097
|
* config, or unparseable JSON all yield `undefined`, letting the engine fall back to the single Active
|
|
962
1098
|
* provider.
|
|
963
1099
|
*
|
|
964
|
-
* @param session The owned
|
|
1100
|
+
* @param session The owned scope (supplies the agent id; a conversation has none).
|
|
965
1101
|
* @returns The configured backend name, or `undefined` to let the engine auto-select.
|
|
966
1102
|
*/
|
|
967
1103
|
async resolveProviderName(session, contextUser, provider) {
|
|
1104
|
+
if (!session.AgentID) {
|
|
1105
|
+
return undefined;
|
|
1106
|
+
}
|
|
968
1107
|
// The session's agent IS the co-agent (the realtime voice agent), and the interactive channels
|
|
969
1108
|
// (Remote Browser, Whiteboard) are the CO-AGENT's abilities — so the remoteBrowser backend config
|
|
970
1109
|
// lives on the co-agent's TypeConfiguration, not on the target agent it voices.
|
|
@@ -1014,8 +1153,15 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
1014
1153
|
case 'navigate':
|
|
1015
1154
|
return input.url ? { Kind: 'navigate', Url: input.url } : null;
|
|
1016
1155
|
case 'click':
|
|
1017
|
-
if (input.selector || (typeof input.x === 'number' && typeof input.y === 'number')) {
|
|
1018
|
-
return {
|
|
1156
|
+
if (input.selector || input.ref || input.text || (typeof input.x === 'number' && typeof input.y === 'number')) {
|
|
1157
|
+
return {
|
|
1158
|
+
Kind: 'click',
|
|
1159
|
+
Selector: input.selector,
|
|
1160
|
+
Ref: input.ref,
|
|
1161
|
+
Text: input.text,
|
|
1162
|
+
X: input.x,
|
|
1163
|
+
Y: input.y,
|
|
1164
|
+
};
|
|
1019
1165
|
}
|
|
1020
1166
|
return null;
|
|
1021
1167
|
case 'type':
|
|
@@ -1036,10 +1182,37 @@ let RemoteBrowserActionResolver = class RemoteBrowserActionResolver extends Reso
|
|
|
1036
1182
|
return { Kind: 'wait', Ms: input.ms, Selector: input.selector };
|
|
1037
1183
|
}
|
|
1038
1184
|
return null;
|
|
1185
|
+
case 'inspect':
|
|
1186
|
+
return { Kind: 'inspect' };
|
|
1187
|
+
case 'getPageText':
|
|
1188
|
+
return { Kind: 'getPageText' };
|
|
1189
|
+
case 'fill': {
|
|
1190
|
+
const values = this.parseFillValues(input.valuesJson);
|
|
1191
|
+
return values.length > 0 ? { Kind: 'fill', Values: values } : null;
|
|
1192
|
+
}
|
|
1039
1193
|
default:
|
|
1040
1194
|
return null;
|
|
1041
1195
|
}
|
|
1042
1196
|
}
|
|
1197
|
+
/**
|
|
1198
|
+
* Parses the `valuesJson` payload for a `fill` action: a JSON object mapping a field ref (`f1`) or
|
|
1199
|
+
* label to its value (`string`, or `boolean` for a checkbox). Anything else yields no values.
|
|
1200
|
+
*/
|
|
1201
|
+
parseFillValues(valuesJson) {
|
|
1202
|
+
let parsed;
|
|
1203
|
+
try {
|
|
1204
|
+
parsed = JSON.parse(valuesJson ?? '');
|
|
1205
|
+
}
|
|
1206
|
+
catch {
|
|
1207
|
+
return [];
|
|
1208
|
+
}
|
|
1209
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
1210
|
+
return [];
|
|
1211
|
+
}
|
|
1212
|
+
return Object.entries(parsed)
|
|
1213
|
+
.filter(([target, value]) => target.trim().length > 0 && value !== undefined && value !== null)
|
|
1214
|
+
.map(([target, value]) => ({ Target: target.trim(), Value: typeof value === 'boolean' ? value : String(value) }));
|
|
1215
|
+
}
|
|
1043
1216
|
/**
|
|
1044
1217
|
* Builds a strongly-typed {@link RemoteBrowserHumanInput} from the relayed `kind` + fields, validating
|
|
1045
1218
|
* each kind's required field(s). Returns `null` for an unknown kind or a kind missing its required
|
|
@@ -1138,8 +1311,10 @@ __decorate([
|
|
|
1138
1311
|
__param(10, Arg('deltaY', () => Float, { nullable: true })),
|
|
1139
1312
|
__param(11, Arg('ms', () => Float, { nullable: true })),
|
|
1140
1313
|
__param(12, Arg('instanceKey', () => String, { nullable: true })),
|
|
1314
|
+
__param(13, Arg('ref', () => String, { nullable: true })),
|
|
1315
|
+
__param(14, Arg('valuesJson', () => String, { nullable: true })),
|
|
1141
1316
|
__metadata("design:type", Function),
|
|
1142
|
-
__metadata("design:paramtypes", [String, String, Object, String, String, Number, Number, String, String, Number, Number, Number, String]),
|
|
1317
|
+
__metadata("design:paramtypes", [String, String, Object, String, String, Number, Number, String, String, Number, Number, Number, String, String, String]),
|
|
1143
1318
|
__metadata("design:returntype", Promise)
|
|
1144
1319
|
], RemoteBrowserActionResolver.prototype, "ExecuteRemoteBrowserAction", null);
|
|
1145
1320
|
__decorate([
|
|
@@ -1202,6 +1377,15 @@ __decorate([
|
|
|
1202
1377
|
__metadata("design:paramtypes", [String, Object, String]),
|
|
1203
1378
|
__metadata("design:returntype", Promise)
|
|
1204
1379
|
], RemoteBrowserActionResolver.prototype, "StopRemoteBrowserScreencast", null);
|
|
1380
|
+
__decorate([
|
|
1381
|
+
Mutation(() => Boolean),
|
|
1382
|
+
__param(0, Arg('agentSessionID', () => String)),
|
|
1383
|
+
__param(1, Ctx()),
|
|
1384
|
+
__param(2, Arg('instanceKey', () => String, { nullable: true })),
|
|
1385
|
+
__metadata("design:type", Function),
|
|
1386
|
+
__metadata("design:paramtypes", [String, Object, String]),
|
|
1387
|
+
__metadata("design:returntype", Promise)
|
|
1388
|
+
], RemoteBrowserActionResolver.prototype, "EndRemoteBrowserSession", null);
|
|
1205
1389
|
__decorate([
|
|
1206
1390
|
Mutation(() => RemoteBrowserAudioStreamResult),
|
|
1207
1391
|
__param(0, Arg('agentSessionID', () => String)),
|
|
@@ -1249,7 +1433,8 @@ __decorate([
|
|
|
1249
1433
|
__metadata("design:returntype", Promise)
|
|
1250
1434
|
], RemoteBrowserActionResolver.prototype, "GetRemoteBrowserSelection", null);
|
|
1251
1435
|
RemoteBrowserActionResolver = __decorate([
|
|
1252
|
-
Resolver()
|
|
1436
|
+
Resolver(),
|
|
1437
|
+
__metadata("design:paramtypes", [])
|
|
1253
1438
|
], RemoteBrowserActionResolver);
|
|
1254
1439
|
export { RemoteBrowserActionResolver };
|
|
1255
1440
|
//# sourceMappingURL=RemoteBrowserActionResolver.js.map
|