@memberjunction/server 6.2.0-edge.6 → 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 +69 -0
- 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 +31 -8
- package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
- package/dist/agentSessions/SessionJanitor.js +85 -41
- package/dist/agentSessions/SessionJanitor.js.map +1 -1
- package/dist/agentSessions/SessionManager.d.ts +14 -4
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +28 -4
- 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/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 +50 -2
- package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkKeys.js +129 -12
- 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 +27 -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/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/config.d.ts +906 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +35 -4
- 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 +6 -4
- package/dist/coreRoutes.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +228 -0
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +1163 -6
- package/dist/generated/graphql-schemas/__mj.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 +27 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +50 -5
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +321 -132
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +4 -0
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +47 -7
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +157 -35
- 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 +87 -46
- 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/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
- package/dist/realtimeSessions/ownedRealtimeSession.js +2 -3
- package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
- package/dist/realtimeSessions/sessionAccess.d.ts +15 -0
- package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
- package/dist/realtimeSessions/sessionAccess.js +22 -0
- package/dist/realtimeSessions/sessionAccess.js.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.js +2 -0
- package/dist/realtimeWidget/WidgetSessionService.js.map +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.map +1 -1
- package/dist/realtimeWidget/widgetCore.js +4 -7
- package/dist/realtimeWidget/widgetCore.js.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +1 -0
- 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/AgentSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/AgentSessionResolver.js +6 -2
- 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/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/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 +2690 -1305
- 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/QuerySystemUserResolver.d.ts +36 -0
- package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +174 -87
- package/dist/resolvers/QuerySystemUserResolver.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 +6 -0
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +36 -5
- 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 +217 -34
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +24 -8
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +185 -67
- 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 +3 -1
- package/dist/resolvers/RunTemplateResolver.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/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/RealtimeRecordingHandler.d.ts +3 -3
- package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
- package/dist/rest/RealtimeRecordingHandler.js +2 -4
- package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +2 -1
- 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/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.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.js +1 -0
- 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 +17 -0
- 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__/ActiveOperations.test.ts +68 -0
- package/src/__tests__/AgentSessionResolver.ownership.test.ts +13 -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__/DeleteConnectionRemovesPerConnectionCatalog.test.ts +51 -0
- package/src/__tests__/DetachedDiscoveryStart.test.ts +65 -0
- package/src/__tests__/DurableEntityActionTaskSubmitter.test.ts +73 -0
- package/src/__tests__/EntityMapLifecycle.rekey.test.ts +252 -0
- package/src/__tests__/ExecuteRemoteOperationResolver.test.ts +213 -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__/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.permissions.test.ts +132 -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.test.ts +22 -0
- 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 +6 -4
- package/src/__tests__/RemoteBrowserAudioStream.test.ts +3 -0
- package/src/__tests__/RemoteBrowserSnapshot.test.ts +3 -0
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +323 -26
- package/src/__tests__/ResolverBase.encryptedApiZeroReencrypt.test.ts +307 -0
- package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +53 -2
- package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +60 -0
- package/src/__tests__/RunAIAgentResolver.branch.test.ts +4 -0
- package/src/__tests__/RunAIAgentResolver.consultPredecessor.test.ts +289 -0
- package/src/__tests__/RunAIAgentResolver.handoff.test.ts +649 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +2 -0
- package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +2 -0
- package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +87 -12
- 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 +69 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +2 -2
- package/src/__tests__/TaskGraphAgentRunner.test.ts +272 -16
- package/src/__tests__/ViewOperationsHandler.test.ts +2 -5
- package/src/__tests__/WorkQueueHostService.test.ts +25 -7
- package/src/__tests__/backgroundSweepConfigUnits.test.ts +153 -0
- package/src/__tests__/contextRequestOrigin.test.ts +105 -0
- package/src/__tests__/conversationBrowsers.test.ts +62 -0
- package/src/__tests__/magicLinkExtensionCapabilities.test.ts +413 -0
- package/src/__tests__/orphanedConversationDetailReconciler.start.test.ts +82 -0
- package/src/__tests__/ownedRealtimeSession.test.ts +14 -0
- package/src/__tests__/realtimeRecordingHandler.test.ts +7 -2
- package/src/__tests__/realtimeSessions/sessionAccess.test.ts +79 -1
- package/src/__tests__/requestOrigin.test.ts +104 -0
- package/src/__tests__/securityHardeningPr6034.test.ts +120 -0
- package/src/__tests__/sessionDeadline.test.ts +51 -0
- package/src/__tests__/sharedCache.test.ts +11 -0
- package/src/__tests__/unifiedAuth.test.ts +73 -1
- 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 +92 -42
- package/src/agentSessions/SessionManager.ts +38 -8
- package/src/agentSessions/conversationBrowsers.ts +143 -0
- package/src/agentSessions/sessionDeadline.ts +81 -0
- package/src/auth/APIKeyScopeAuth.ts +5 -4
- package/src/auth/__tests__/loginEmailResolution.test.ts +67 -0
- package/src/auth/loginEmailResolution.ts +67 -0
- package/src/auth/magicLink/MagicLinkKeys.ts +146 -14
- 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 +28 -3
- package/src/auth/newUsers.ts +1 -0
- package/src/backgroundSweepConfigUnits.ts +213 -0
- package/src/config.ts +69 -0
- package/src/context.ts +39 -6
- package/src/coreRoutes.ts +14 -7
- package/src/generated/graphql-schemas/__mj.ts +822 -7
- package/src/generic/OrphanedConversationDetailReconciler.ts +32 -1
- package/src/generic/ResolverBase.ts +414 -143
- package/src/generic/RunViewResolver.ts +96 -49
- package/src/index.ts +201 -35
- package/src/integration/ConnectionPause.ts +222 -0
- package/src/integration/CustomColumnPromoter.ts +123 -53
- 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/realtimeSessions/ownedRealtimeSession.ts +2 -6
- package/src/realtimeSessions/sessionAccess.ts +30 -0
- package/src/realtimeWidget/WidgetSessionService.ts +2 -0
- package/src/realtimeWidget/visitorIdentity.ts +1 -0
- package/src/realtimeWidget/widgetCore.ts +4 -8
- package/src/realtimeWidget/widgetGuestElevation.ts +1 -0
- package/src/requestOrigin.ts +64 -0
- package/src/resolvers/AgentSessionResolver.ts +6 -2
- package/src/resolvers/AutotagPipelineResolver.ts +2 -1
- package/src/resolvers/ConversationRunEventsResolver.ts +2 -0
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +41 -9
- package/src/resolvers/GetDataResolver.ts +35 -13
- package/src/resolvers/IntegrationDiscoveryResolver.ts +1522 -203
- package/src/resolvers/MCPResolver.ts +15 -2
- package/src/resolvers/QuerySystemUserResolver.ts +197 -98
- package/src/resolvers/RealtimeBridgeResolver.ts +1 -0
- package/src/resolvers/RealtimeClientSessionResolver.ts +40 -7
- package/src/resolvers/RemoteBrowserActionResolver.ts +242 -32
- package/src/resolvers/RunAIAgentResolver.ts +265 -86
- package/src/resolvers/RunAIPromptResolver.ts +18 -18
- package/src/resolvers/RunTemplateResolver.ts +3 -1
- package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +52 -0
- package/src/resolvers/meetingRecordingRegistration.ts +2 -0
- package/src/rest/MediaAccessKeys.ts +6 -2
- package/src/rest/OAuthCallbackHandler.ts +13 -5
- package/src/rest/RealtimeRecordingHandler.ts +5 -9
- package/src/rest/ViewOperationsHandler.ts +2 -1
- package/src/rest/setupRESTEndpoints.ts +11 -2
- 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 +1 -0
- package/src/services/WorkQueueHostService.ts +26 -4
- package/src/services/workQueueConfig.ts +5 -5
- package/src/sharedCache.ts +1 -1
- package/src/types.ts +18 -0
- package/src/services/TaskOrchestration-Integration.md +0 -188
package/src/config.ts
CHANGED
|
@@ -6,6 +6,14 @@ import { mergeConfigs, parseBooleanEnv } from '@memberjunction/config';
|
|
|
6
6
|
import { TelemetryEnabledDefault } from './telemetryConfigUnits.js';
|
|
7
7
|
import { RealtimeEnabledDefault } from './realtimeConfigUnits.js';
|
|
8
8
|
import { ResolveServerRole, type ServerRole } from './serverRoleConfigUnits.js';
|
|
9
|
+
import {
|
|
10
|
+
AgentRunWatchdogDefaultsFromEnv,
|
|
11
|
+
AgentRunWatchdogSchema,
|
|
12
|
+
AgentSessionsDefaultsFromEnv,
|
|
13
|
+
AgentSessionsSchema,
|
|
14
|
+
ConversationDetailReconcilerDefaultsFromEnv,
|
|
15
|
+
ConversationDetailReconcilerSchema,
|
|
16
|
+
} from './backgroundSweepConfigUnits.js';
|
|
9
17
|
|
|
10
18
|
const explorer = cosmiconfigSync('mj', { searchStrategy: 'global' });
|
|
11
19
|
|
|
@@ -506,6 +514,13 @@ const magicLinkSchema = z.object({
|
|
|
506
514
|
* returns the token as JSON. Append `?format=json` to force JSON regardless.
|
|
507
515
|
*/
|
|
508
516
|
explorerUrl: z.string().optional(),
|
|
517
|
+
/**
|
|
518
|
+
* Explicit frontend origins permitted for per-invite `RedirectUrl` targets (in addition to
|
|
519
|
+
* `explorerUrl` and concrete non-wildcard entries in `cors.allowedOrigins`). Wildcard `'*'`
|
|
520
|
+
* entries are always ignored so deployments using the default `cors.allowedOrigins: ['*']`
|
|
521
|
+
* never expose an open redirect carrying session tokens.
|
|
522
|
+
*/
|
|
523
|
+
allowedRedirectOrigins: z.array(z.string()).optional(),
|
|
509
524
|
}).passthrough();
|
|
510
525
|
|
|
511
526
|
/**
|
|
@@ -871,6 +886,44 @@ const identityVerificationSchema = z.object({
|
|
|
871
886
|
}).optional().default({}),
|
|
872
887
|
}).passthrough();
|
|
873
888
|
|
|
889
|
+
/**
|
|
890
|
+
* Remote browsers a TEXT conversation opens (`<mj-conversation-chat-area [AllowRemoteBrowser]>`), whose
|
|
891
|
+
* agents drive them through the `browser_*` tools. Realtime calls' browsers are not affected.
|
|
892
|
+
*
|
|
893
|
+
* Off by default: until `enabled` is true, every remote-browser operation on a conversation is refused,
|
|
894
|
+
* since each browser is a server Chromium process or a billed hosted session.
|
|
895
|
+
*/
|
|
896
|
+
const conversationBrowserSchema = z.object({
|
|
897
|
+
/** Master switch. When false, no conversation can open a browser. */
|
|
898
|
+
enabled: zodBooleanWithTransforms().default(false),
|
|
899
|
+
/** Also let anonymous principals (public widget guests, anonymous magic links) open one. */
|
|
900
|
+
allowAnonymous: zodBooleanWithTransforms().default(false),
|
|
901
|
+
/** Most conversation browsers one user (or one anonymous guest) may hold at once. Default 2. */
|
|
902
|
+
maxPerUser: z.coerce.number().int().positive().optional().default(2),
|
|
903
|
+
/**
|
|
904
|
+
* Most conversation browsers all anonymous guests together may hold at once, since a guest can start a
|
|
905
|
+
* new guest scope cheaply (limited only by the per-IP rate limit). Applies only with `allowAnonymous`. Default 4.
|
|
906
|
+
*/
|
|
907
|
+
maxAnonymousTotal: z.coerce.number().int().positive().optional().default(4),
|
|
908
|
+
/**
|
|
909
|
+
* Minutes unused after which a conversation browser is ended (a reloaded or closed tab never ends its own).
|
|
910
|
+
* Used means an agent or the user acts on it, or its open drawer polls for a snapshot; a drawer showing a
|
|
911
|
+
* pushed screencast with nothing else happening counts as unused. Default 15.
|
|
912
|
+
*/
|
|
913
|
+
idleMinutes: z.coerce.number().positive().optional().default(15),
|
|
914
|
+
/**
|
|
915
|
+
* Private hosts a conversation browser may still reach, as `host` or `host:port` (e.g. `localhost:4200`).
|
|
916
|
+
* Every other loopback, link-local or private-network HOSTNAME is refused (private IPv4 and IPv6 ranges,
|
|
917
|
+
* `localhost`, names under `.local`, `.localdomain`, `.internal`, `.intranet`, `.lan`, `.corp`, `.home`,
|
|
918
|
+
* `.home.arpa`, `.private` and `.svc`, and the Docker, Kubernetes and cloud-metadata names), including where
|
|
919
|
+
* a main-frame redirect lands, and in popups the page opens. This is a best-effort hostname check. Gets through: a public name that resolves to a
|
|
920
|
+
* private address, WebSockets, service-worker fetches, an iframe whose source redirects to a private
|
|
921
|
+
* host, redirects of the page's own requests, and the redirect request itself (only where it lands is
|
|
922
|
+
* refused). For real isolation, run the browsers under network egress rules. Default none.
|
|
923
|
+
*/
|
|
924
|
+
allowedPrivateHosts: z.array(z.string()).optional().default([]),
|
|
925
|
+
}).passthrough();
|
|
926
|
+
|
|
874
927
|
const realtimeSchema = z.object({
|
|
875
928
|
/** Master switch. When false, the WebRTC SDP broker router is not mounted. Defaults to true. */
|
|
876
929
|
enabled: zodBooleanWithTransforms().default(true),
|
|
@@ -881,6 +934,8 @@ const realtimeSchema = z.object({
|
|
|
881
934
|
* is assembled anyway as `Partial` (gaps become silence). Defaults to 90.
|
|
882
935
|
*/
|
|
883
936
|
recordingAssemblyGraceSeconds: z.coerce.number().positive().optional().default(90),
|
|
937
|
+
/** Remote browsers that text conversations open (off by default). */
|
|
938
|
+
conversationBrowser: conversationBrowserSchema.optional().default({}),
|
|
884
939
|
}).passthrough();
|
|
885
940
|
|
|
886
941
|
const devAuthSchema = z.object({
|
|
@@ -904,6 +959,9 @@ const configInfoSchema = z.object({
|
|
|
904
959
|
authProviders: z.array(authProviderSchema).optional(),
|
|
905
960
|
componentRegistries: z.array(componentRegistrySchema).optional(),
|
|
906
961
|
scheduledJobs: scheduledJobsSchema.optional().default({}),
|
|
962
|
+
agentSessions: AgentSessionsSchema.optional().default({}),
|
|
963
|
+
agentRunWatchdog: AgentRunWatchdogSchema.optional().default({}),
|
|
964
|
+
conversationDetailReconciler: ConversationDetailReconcilerSchema.optional().default({}),
|
|
907
965
|
integrationSyncWorker: integrationSyncWorkerSchema.optional().default({}),
|
|
908
966
|
workQueue: WorkQueueSchema.optional().default({}),
|
|
909
967
|
telemetry: telemetrySchema.optional().default({}),
|
|
@@ -970,6 +1028,7 @@ export type MagicLinkConfig = z.infer<typeof magicLinkSchema>;
|
|
|
970
1028
|
export type WidgetConfig = z.infer<typeof widgetSchema>;
|
|
971
1029
|
export type TelephonyConfig = z.infer<typeof telephonySchema>;
|
|
972
1030
|
export type RealtimeConfig = z.infer<typeof realtimeSchema>;
|
|
1031
|
+
export type ConversationBrowserConfig = z.infer<typeof conversationBrowserSchema>;
|
|
973
1032
|
export type IdentityVerificationConfig = z.infer<typeof identityVerificationSchema>;
|
|
974
1033
|
export type TwilioTelephonyConfig = z.infer<typeof twilioTelephonySchema>;
|
|
975
1034
|
export type VonageTelephonyConfig = z.infer<typeof vonageTelephonySchema>;
|
|
@@ -1114,6 +1173,16 @@ export const DEFAULT_SERVER_CONFIG: Partial<ConfigInfo> = {
|
|
|
1114
1173
|
staleLockCleanupInterval: 300000
|
|
1115
1174
|
},
|
|
1116
1175
|
|
|
1176
|
+
// Background sweeps that query the database on a timer (session janitor, bridge and conversation-
|
|
1177
|
+
// detail reconcilers, agent-run watchdog). Defaults are the values MJAPI always used; each has an
|
|
1178
|
+
// env override (MJ_SESSION_JANITOR_*, MJ_BRIDGE_RECONCILER_*, MJ_CONVERSATION_DETAIL_RECONCILER_*,
|
|
1179
|
+
// MJ_AGENT_RUN_WATCHDOG_SWEEP_INTERVAL_MS), read here rather than in the schema because this object
|
|
1180
|
+
// is the merge base (see the telemetry note below). A bad value fails startup, naming the variable.
|
|
1181
|
+
// guides/SERVERLESS_DATABASE_AUTO_PAUSE_GUIDE.md lists every switch.
|
|
1182
|
+
agentSessions: AgentSessionsDefaultsFromEnv(process.env),
|
|
1183
|
+
conversationDetailReconciler: ConversationDetailReconcilerDefaultsFromEnv(process.env),
|
|
1184
|
+
agentRunWatchdog: AgentRunWatchdogDefaultsFromEnv(process.env),
|
|
1185
|
+
|
|
1117
1186
|
// Integration sync worker defaults (off — syncs run inline unless a worker is enabled)
|
|
1118
1187
|
integrationSyncWorker: {
|
|
1119
1188
|
enabled: false,
|
package/src/context.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { AuthenticationError, AuthorizationError } from 'type-graphql';
|
|
|
7
7
|
import sql from 'mssql';
|
|
8
8
|
import { GetSigningKeys, GetSystemUser, GetValidationOptions, VerifyUserRecord, ExtractUserInfoFromPayload } from './auth/index.js';
|
|
9
9
|
import { CloneUserForSessionContext } from './auth/sessionUserClone.js';
|
|
10
|
+
import { EmailsMatch, ResolveUserLookupEmail, type LoginEmailResolution } from './auth/loginEmailResolution.js';
|
|
10
11
|
import { GetAPIKeyActingContextResolver } from './auth/actingContextResolver.js';
|
|
11
12
|
import { TokenExpiredError, AuthProviderFactory } from '@memberjunction/auth-providers';
|
|
12
13
|
import { AuthCache } from './cache.js';
|
|
@@ -15,12 +16,14 @@ import { BuildPostgreSQLConnectionConfig, PostgreSQLReadOnlyPool, ResolvePostgre
|
|
|
15
16
|
import { BuildBoundaryLogPayload } from './logging/boundaryLogPayload.js';
|
|
16
17
|
import { StartupLogger } from './logging/StartupLogger.js';
|
|
17
18
|
import { DataSourceInfo, UserPayload } from './types.js';
|
|
19
|
+
import { ReadRequestOrigin } from './requestOrigin.js';
|
|
18
20
|
import { GetReadOnlyDataSource, GetReadWriteDataSource } from './util.js';
|
|
19
21
|
import { v4 as uuidv4 } from 'uuid';
|
|
20
22
|
import e from 'express';
|
|
21
23
|
import type { RequestHandler, Request, Response, NextFunction } from 'express';
|
|
22
24
|
import { DatabaseProviderBase, UserInfo, type IMetadataProvider, type MagicLinkScope, type ReturningVisitorContext, type WidgetGuestContext } from '@memberjunction/core';
|
|
23
25
|
import { SQLServerDataProvider, SQLServerProviderConfigData } from '@memberjunction/sqlserver-dataprovider';
|
|
26
|
+
import { PostgreSQLDataProvider, PostgreSQLProviderConfigData } from '@memberjunction/postgresql-dataprovider';
|
|
24
27
|
import { Metadata, IsValidTimeZone, TIME_ZONE_HEADER } from '@memberjunction/core';
|
|
25
28
|
import { IdentityClaimEngineServer } from '@memberjunction/core-entities-server';
|
|
26
29
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
@@ -145,6 +148,28 @@ async function writeSessionAudit(args: {
|
|
|
145
148
|
}
|
|
146
149
|
}
|
|
147
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Logs a session whose User record is not the identity its token carries, and returns whether that
|
|
153
|
+
* is the case. Runs once per issued token (inside the session-audit dedup). A `USER_EMAIL_MAP`
|
|
154
|
+
* rewrite is reported as such; any other difference means the lookup reached another person's
|
|
155
|
+
* record. Anonymous magic-link sessions run as a synthetic principal by design and are skipped.
|
|
156
|
+
*/
|
|
157
|
+
function reportIdentityMismatch(loginEmail: LoginEmailResolution, sessionUser: UserInfo): boolean {
|
|
158
|
+
if (sessionUser.IsMagicLinkAnonymous || EmailsMatch(loginEmail.TokenEmail, sessionUser.Email)) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
if (loginEmail.Remapped) {
|
|
162
|
+
console.warn(
|
|
163
|
+
`[Auth] USER_EMAIL_MAP remapped login '${loginEmail.TokenEmail}' to '${loginEmail.LookupEmail}'; the session runs as user ${sessionUser.ID} (${sessionUser.Email})`,
|
|
164
|
+
);
|
|
165
|
+
} else {
|
|
166
|
+
console.warn(
|
|
167
|
+
`[Auth] Login identity '${loginEmail.TokenEmail ?? ''}' resolved to user ${sessionUser.ID} with a different email (${sessionUser.Email}); check the User records for this address`,
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
|
|
148
173
|
/** Best-effort failure audit: decodes the attempted identity, dedupes, attributes to the system user. */
|
|
149
174
|
async function auditLoginFailure(
|
|
150
175
|
bearerToken: string | undefined,
|
|
@@ -528,7 +553,8 @@ export const GetUserPayload = async (
|
|
|
528
553
|
|
|
529
554
|
// Use provider to extract user information
|
|
530
555
|
const userInfo = ExtractUserInfoFromPayload(payload);
|
|
531
|
-
const
|
|
556
|
+
const loginEmail = ResolveUserLookupEmail(userInfo, userEmailMap);
|
|
557
|
+
const email = loginEmail.LookupEmail;
|
|
532
558
|
|
|
533
559
|
const userRecord = await VerifyUserRecord(
|
|
534
560
|
email,
|
|
@@ -555,6 +581,7 @@ export const GetUserPayload = async (
|
|
|
555
581
|
// Session-established audit — once per issued token (deduped), fire-and-forget so
|
|
556
582
|
// it never adds latency to the request. The dedup mark is set synchronously here.
|
|
557
583
|
if (markSessionAuditSeen(sessionAuditKey('sess', payload))) {
|
|
584
|
+
const identityMismatch = reportIdentityMismatch(loginEmail, sessionUser);
|
|
558
585
|
void writeSessionAudit({
|
|
559
586
|
user: sessionUser,
|
|
560
587
|
auditTypeName: SESSION_AUDIT_TYPE,
|
|
@@ -562,7 +589,16 @@ export const GetUserPayload = async (
|
|
|
562
589
|
payload,
|
|
563
590
|
requestContext,
|
|
564
591
|
requestDomain,
|
|
565
|
-
description:
|
|
592
|
+
description: identityMismatch
|
|
593
|
+
? `Session established via ${payload.iss ?? 'unknown provider'}: token identity '${loginEmail.TokenEmail ?? ''}' runs as user '${sessionUser.Email}'`
|
|
594
|
+
: `Session established via ${payload.iss ?? 'unknown provider'}`,
|
|
595
|
+
extraDetails: {
|
|
596
|
+
tokenEmail: loginEmail.TokenEmail ?? null,
|
|
597
|
+
lookupEmail: loginEmail.LookupEmail ?? null,
|
|
598
|
+
resolvedUserEmail: sessionUser.Email ?? null,
|
|
599
|
+
remappedByUserEmailMap: loginEmail.Remapped,
|
|
600
|
+
identityMismatch,
|
|
601
|
+
},
|
|
566
602
|
});
|
|
567
603
|
}
|
|
568
604
|
|
|
@@ -806,6 +842,7 @@ export const ContextFunction =
|
|
|
806
842
|
userPayload,
|
|
807
843
|
providers,
|
|
808
844
|
ClientIp: expressReq.ip,
|
|
845
|
+
RequestOrigin: ReadRequestOrigin(req.headers.origin),
|
|
809
846
|
};
|
|
810
847
|
};
|
|
811
848
|
|
|
@@ -860,8 +897,6 @@ export async function CreateReadOnlyProvider(dataSources: DataSourceInfo[]): Pro
|
|
|
860
897
|
* from the primary provider to avoid pool exhaustion.
|
|
861
898
|
*/
|
|
862
899
|
async function createPostgresProvider(): Promise<DatabaseProviderBase> {
|
|
863
|
-
const { PostgreSQLDataProvider, PostgreSQLProviderConfigData } = await import('@memberjunction/postgresql-dataprovider');
|
|
864
|
-
|
|
865
900
|
const pgProvider = new PostgreSQLDataProvider();
|
|
866
901
|
const pgConfig = new PostgreSQLProviderConfigData(
|
|
867
902
|
BuildPostgreSQLConnectionConfig(ResolvePostgreSQLEndpoint(), configInfo.databaseSettings, 'api'),
|
|
@@ -896,8 +931,6 @@ async function tryCreateReadOnlyPostgresProvider(): Promise<DatabaseProviderBase
|
|
|
896
931
|
}
|
|
897
932
|
|
|
898
933
|
try {
|
|
899
|
-
const { PostgreSQLDataProvider, PostgreSQLProviderConfigData } = await import('@memberjunction/postgresql-dataprovider');
|
|
900
|
-
|
|
901
934
|
const roProvider = new PostgreSQLDataProvider();
|
|
902
935
|
const roConfig = new PostgreSQLProviderConfigData(
|
|
903
936
|
BuildPostgreSQLConnectionConfig({ ...ResolvePostgreSQLEndpoint(), ...credentials }, configInfo.databaseSettings, 'read-only'),
|
package/src/coreRoutes.ts
CHANGED
|
@@ -19,7 +19,7 @@ import { CreateOAuthCallbackHandler } from './rest/OAuthCallbackHandler.js';
|
|
|
19
19
|
import { CreateSignatureWebhookHandler } from './rest/SignatureWebhookHandler.js';
|
|
20
20
|
import { CreateMediaStreamRouter } from './rest/MediaStreamHandler.js';
|
|
21
21
|
import { CreateRealtimeSdpBrokerRouter } from './rest/RealtimeSdpBrokerHandler.js';
|
|
22
|
-
import { CreateMagicLinkHandler, CreateMagicLinkJwksRouter, RegisterMagicLinkAuthProvider, MAGIC_LINK_MOUNT_PATH } from './auth/magicLink/index.js';
|
|
22
|
+
import { CreateMagicLinkHandler, CreateMagicLinkJwksRouter, MagicLinkService, RegisterMagicLinkAuthProvider, MAGIC_LINK_MOUNT_PATH } from './auth/magicLink/index.js';
|
|
23
23
|
import { CreateWidgetHandler, WIDGET_MOUNT_PATH } from './realtimeWidget/index.js';
|
|
24
24
|
import { CreateRealtimeVerifyRouter, REALTIME_VERIFY_MOUNT_PATH, RealtimeSessionVerificationService } from './realtimeSessions/index.js';
|
|
25
25
|
import { CreateAuthProviderCatalogRouter, AUTH_CATALOG_MOUNT_PATH } from './auth/AuthProviderCatalogRouter.js';
|
|
@@ -28,10 +28,11 @@ import type { StartupLogger } from './logging/StartupLogger.js';
|
|
|
28
28
|
|
|
29
29
|
type RouteLog = Pick<StartupLogger, 'LogIf'>;
|
|
30
30
|
|
|
31
|
-
/** Routers the public mounts create
|
|
31
|
+
/** Routers (and host services) the public mounts create for post-auth mounting and extension sharing. */
|
|
32
32
|
export interface CoreAuthenticatedRouters {
|
|
33
33
|
OAuth?: Router;
|
|
34
34
|
MagicLink?: Router;
|
|
35
|
+
MagicLinkService?: MagicLinkService;
|
|
35
36
|
Widget?: Router;
|
|
36
37
|
}
|
|
37
38
|
|
|
@@ -62,7 +63,9 @@ export function MountPublicCoreRoutes(app: Application, publicUrl: string, log:
|
|
|
62
63
|
log.LogIf('verbose', `[Realtime] WebRTC SDP broker registered at ${ApiRoute(REALTIME_SDP_EXCHANGE_PATH)}`);
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
|
|
66
|
+
const magicLink = mountMagicLinkPublic(app, publicUrl, log);
|
|
67
|
+
routers.MagicLink = magicLink?.authenticatedRouter;
|
|
68
|
+
routers.MagicLinkService = magicLink?.service;
|
|
66
69
|
routers.Widget = mountWidgetPublic(app, publicUrl, log);
|
|
67
70
|
mountLocalDevAuthPublic(app, publicUrl, log);
|
|
68
71
|
mountRealtimeVerify(app, log);
|
|
@@ -99,16 +102,20 @@ function mountOAuthCallback(app: Application, publicUrl: string, log: RouteLog):
|
|
|
99
102
|
return authenticatedRouter;
|
|
100
103
|
}
|
|
101
104
|
|
|
102
|
-
/** Public magic-link router (JWKS + redeem). The invite-creation router
|
|
103
|
-
function mountMagicLinkPublic(
|
|
105
|
+
/** Public magic-link router (JWKS + redeem). The invite-creation router + service are returned for post-auth / extensions. */
|
|
106
|
+
function mountMagicLinkPublic(
|
|
107
|
+
app: Application,
|
|
108
|
+
publicUrl: string,
|
|
109
|
+
log: RouteLog,
|
|
110
|
+
): { authenticatedRouter: Router; service: MagicLinkService } | undefined {
|
|
104
111
|
if (!configInfo.magicLink?.enabled) {
|
|
105
112
|
return undefined;
|
|
106
113
|
}
|
|
107
|
-
const { publicRouter, authenticatedRouter } = CreateMagicLinkHandler(publicUrl, configInfo.magicLink);
|
|
114
|
+
const { publicRouter, authenticatedRouter, service } = CreateMagicLinkHandler(publicUrl, configInfo.magicLink);
|
|
108
115
|
RegisterMagicLinkAuthProvider(publicUrl, configInfo.magicLink);
|
|
109
116
|
app.use(ApiRoute(MAGIC_LINK_MOUNT_PATH), cors<cors.CorsRequest>(), publicRouter);
|
|
110
117
|
log.LogIf('verbose', `[MagicLink] Public routes registered at ${ApiRoute(MAGIC_LINK_MOUNT_PATH)}/redeem and ${ApiRoute(MAGIC_LINK_MOUNT_PATH)}/jwks.json`);
|
|
111
|
-
return authenticatedRouter;
|
|
118
|
+
return { authenticatedRouter, service };
|
|
112
119
|
}
|
|
113
120
|
|
|
114
121
|
/**
|