@memberjunction/server 6.2.0-edge.2 → 6.2.0-edge.4
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 +30 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/BridgeHostInstance.d.ts +25 -0
- package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -0
- package/dist/agentSessions/BridgeHostInstance.js +30 -0
- package/dist/agentSessions/BridgeHostInstance.js.map +1 -0
- package/dist/agentSessions/HostInstance.d.ts +75 -11
- package/dist/agentSessions/HostInstance.d.ts.map +1 -1
- package/dist/agentSessions/HostInstance.js +99 -28
- package/dist/agentSessions/HostInstance.js.map +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.js +7 -3
- package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
- package/dist/agentSessions/SessionJanitor.d.ts +173 -25
- package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
- package/dist/agentSessions/SessionJanitor.js +452 -54
- package/dist/agentSessions/SessionJanitor.js.map +1 -1
- package/dist/agentSessions/SessionManager.d.ts +43 -2
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +99 -8
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/agentSessions/SessionRunIDVerifier.d.ts +63 -0
- package/dist/agentSessions/SessionRunIDVerifier.d.ts.map +1 -0
- package/dist/agentSessions/SessionRunIDVerifier.js +129 -0
- package/dist/agentSessions/SessionRunIDVerifier.js.map +1 -0
- package/dist/agentSessions/index.d.ts +2 -0
- package/dist/agentSessions/index.d.ts.map +1 -1
- package/dist/agentSessions/index.js +10 -3
- package/dist/agentSessions/index.js.map +1 -1
- package/dist/auth/actionAuthorization.d.ts +40 -0
- package/dist/auth/actionAuthorization.d.ts.map +1 -0
- package/dist/auth/actionAuthorization.js +94 -0
- package/dist/auth/actionAuthorization.js.map +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +3 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +6 -3
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/newUsers.d.ts +10 -0
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +80 -11
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/config.d.ts +4567 -71
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +246 -3
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +8 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +25 -34
- package/dist/context.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +1073 -10
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +9188 -3649
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js +3 -3
- package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +62 -6
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +179 -35
- 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 +37 -1
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +214 -159
- package/dist/index.js.map +1 -1
- package/dist/isolatedProvider.d.ts +20 -0
- package/dist/isolatedProvider.d.ts.map +1 -0
- package/dist/isolatedProvider.js +22 -0
- package/dist/isolatedProvider.js.map +1 -0
- package/dist/postgresqlCompat.d.ts +8 -0
- package/dist/postgresqlCompat.d.ts.map +1 -0
- package/dist/postgresqlCompat.js +19 -0
- package/dist/postgresqlCompat.js.map +1 -0
- package/dist/postgresqlPoolSettings.d.ts +108 -0
- package/dist/postgresqlPoolSettings.d.ts.map +1 -0
- package/dist/postgresqlPoolSettings.js +134 -0
- package/dist/postgresqlPoolSettings.js.map +1 -0
- package/dist/realtimeProxy/RealtimeProxyServer.d.ts +44 -4
- package/dist/realtimeProxy/RealtimeProxyServer.d.ts.map +1 -1
- package/dist/realtimeProxy/RealtimeProxyServer.js +121 -16
- package/dist/realtimeProxy/RealtimeProxyServer.js.map +1 -1
- package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts +171 -0
- package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts.map +1 -0
- package/dist/realtimeProxy/RealtimeRelayTunnel.js +532 -0
- package/dist/realtimeProxy/RealtimeRelayTunnel.js.map +1 -0
- package/dist/realtimeSessions/RealtimeSessionEventService.d.ts +148 -0
- package/dist/realtimeSessions/RealtimeSessionEventService.d.ts.map +1 -0
- package/dist/realtimeSessions/RealtimeSessionEventService.js +191 -0
- package/dist/realtimeSessions/RealtimeSessionEventService.js.map +1 -0
- package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts +66 -0
- package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -0
- package/dist/realtimeSessions/RealtimeSessionVerificationService.js +138 -0
- package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -0
- package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts +38 -0
- package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -0
- package/dist/realtimeSessions/RealtimeVerifyRouter.js +98 -0
- package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts +61 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.js +149 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -0
- package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts +57 -0
- package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts.map +1 -0
- package/dist/realtimeSessions/SlidingWindowRateLimiter.js +69 -0
- package/dist/realtimeSessions/SlidingWindowRateLimiter.js.map +1 -0
- package/dist/realtimeSessions/index.d.ts +17 -0
- package/dist/realtimeSessions/index.d.ts.map +1 -0
- package/dist/realtimeSessions/index.js +17 -0
- package/dist/realtimeSessions/index.js.map +1 -0
- package/dist/realtimeSessions/sessionAccess.d.ts +86 -0
- package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -0
- package/dist/realtimeSessions/sessionAccess.js +90 -0
- package/dist/realtimeSessions/sessionAccess.js.map +1 -0
- package/dist/realtimeSessions/sessionConfigStamps.d.ts +70 -0
- package/dist/realtimeSessions/sessionConfigStamps.d.ts.map +1 -0
- package/dist/realtimeSessions/sessionConfigStamps.js +93 -0
- package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -0
- package/dist/realtimeSessions/subscriptionAuthorization.d.ts +65 -0
- package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -0
- package/dist/realtimeSessions/subscriptionAuthorization.js +71 -0
- package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -0
- package/dist/realtimeSessions/verificationCore.d.ts +243 -0
- package/dist/realtimeSessions/verificationCore.d.ts.map +1 -0
- package/dist/realtimeSessions/verificationCore.js +356 -0
- package/dist/realtimeSessions/verificationCore.js.map +1 -0
- package/dist/realtimeSessions/verificationPages.d.ts +66 -0
- package/dist/realtimeSessions/verificationPages.d.ts.map +1 -0
- package/dist/realtimeSessions/verificationPages.js +110 -0
- package/dist/realtimeSessions/verificationPages.js.map +1 -0
- package/dist/realtimeSessions/verificationPolicy.d.ts +147 -0
- package/dist/realtimeSessions/verificationPolicy.d.ts.map +1 -0
- package/dist/realtimeSessions/verificationPolicy.js +249 -0
- package/dist/realtimeSessions/verificationPolicy.js.map +1 -0
- package/dist/realtimeSessions/verificationWorkflow.d.ts +263 -0
- package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -0
- package/dist/realtimeSessions/verificationWorkflow.js +435 -0
- package/dist/realtimeSessions/verificationWorkflow.js.map +1 -0
- package/dist/realtimeWidget/widgetGuestElevation.d.ts +20 -2
- package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +31 -2
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/resolvers/ActionResolver.d.ts +31 -5
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +75 -14
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.d.ts +35 -17
- package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +92 -166
- package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
- package/dist/resolvers/CacheStatsResolver.d.ts +27 -0
- package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -1
- package/dist/resolvers/CacheStatsResolver.js +113 -2
- package/dist/resolvers/CacheStatsResolver.js.map +1 -1
- package/dist/resolvers/ClientToolRequestResolver.d.ts +4 -2
- package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -1
- package/dist/resolvers/ClientToolRequestResolver.js +28 -10
- package/dist/resolvers/ClientToolRequestResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts +7 -23
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +9 -47
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts +12 -1
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js +83 -2
- package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +9 -0
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/HumanHandoffResolver.d.ts +107 -0
- package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -0
- package/dist/resolvers/HumanHandoffResolver.js +330 -0
- package/dist/resolvers/HumanHandoffResolver.js.map +1 -0
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +9 -4
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/MeetingResolver.d.ts +69 -0
- package/dist/resolvers/MeetingResolver.d.ts.map +1 -0
- package/dist/resolvers/MeetingResolver.js +381 -0
- package/dist/resolvers/MeetingResolver.js.map +1 -0
- package/dist/resolvers/RealtimeBridgeResolver.d.ts +88 -3
- package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +352 -12
- package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +156 -108
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +395 -293
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RealtimeSessionEventsResolver.d.ts +61 -0
- package/dist/resolvers/RealtimeSessionEventsResolver.d.ts.map +1 -0
- package/dist/resolvers/RealtimeSessionEventsResolver.js +130 -0
- package/dist/resolvers/RealtimeSessionEventsResolver.js.map +1 -0
- package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts +85 -0
- package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts.map +1 -0
- package/dist/resolvers/RealtimeSessionVerificationResolver.js +188 -0
- package/dist/resolvers/RealtimeSessionVerificationResolver.js.map +1 -0
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts +2 -0
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +5 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +10 -0
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +68 -11
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +12 -11
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +6 -2
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts +2 -0
- package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.js +23 -6
- package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
- package/dist/resolvers/UserAvatarResolver.d.ts +16 -0
- package/dist/resolvers/UserAvatarResolver.d.ts.map +1 -0
- package/dist/resolvers/UserAvatarResolver.js +124 -0
- package/dist/resolvers/UserAvatarResolver.js.map +1 -0
- package/dist/resolvers/UserResolver.d.ts.map +1 -1
- package/dist/resolvers/UserResolver.js +2 -17
- package/dist/resolvers/UserResolver.js.map +1 -1
- package/dist/resolvers/adhocTimeout.d.ts +7 -0
- package/dist/resolvers/adhocTimeout.d.ts.map +1 -0
- package/dist/resolvers/adhocTimeout.js +12 -0
- package/dist/resolvers/adhocTimeout.js.map +1 -0
- package/dist/resolvers/agentVisionConsentAudit.d.ts +37 -0
- package/dist/resolvers/agentVisionConsentAudit.d.ts.map +1 -0
- package/dist/resolvers/agentVisionConsentAudit.js +63 -0
- package/dist/resolvers/agentVisionConsentAudit.js.map +1 -0
- package/dist/resolvers/avatarInputValidation.d.ts +40 -0
- package/dist/resolvers/avatarInputValidation.d.ts.map +1 -0
- package/dist/resolvers/avatarInputValidation.js +97 -0
- package/dist/resolvers/avatarInputValidation.js.map +1 -0
- package/dist/resolvers/currentUserRoles.d.ts +29 -0
- package/dist/resolvers/currentUserRoles.d.ts.map +1 -1
- package/dist/resolvers/currentUserRoles.js +30 -0
- package/dist/resolvers/currentUserRoles.js.map +1 -1
- package/dist/resolvers/meetings/index.d.ts +5 -0
- package/dist/resolvers/meetings/index.d.ts.map +1 -0
- package/dist/resolvers/meetings/index.js +5 -0
- package/dist/resolvers/meetings/index.js.map +1 -0
- package/dist/resolvers/meetings/meetingHelpers.d.ts +17 -0
- package/dist/resolvers/meetings/meetingHelpers.d.ts.map +1 -0
- package/dist/resolvers/meetings/meetingHelpers.js +212 -0
- package/dist/resolvers/meetings/meetingHelpers.js.map +1 -0
- package/dist/resolvers/meetings/meetingMutations.d.ts +18 -0
- package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -0
- package/dist/resolvers/meetings/meetingMutations.js +439 -0
- package/dist/resolvers/meetings/meetingMutations.js.map +1 -0
- package/dist/resolvers/meetings/meetingQueries.d.ts +7 -0
- package/dist/resolvers/meetings/meetingQueries.d.ts.map +1 -0
- package/dist/resolvers/meetings/meetingQueries.js +113 -0
- package/dist/resolvers/meetings/meetingQueries.js.map +1 -0
- package/dist/resolvers/meetings/meetingTypes.d.ts +89 -0
- package/dist/resolvers/meetings/meetingTypes.d.ts.map +1 -0
- package/dist/resolvers/meetings/meetingTypes.js +345 -0
- package/dist/resolvers/meetings/meetingTypes.js.map +1 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +8 -5
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts +8 -0
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +27 -1
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.d.ts +4 -3
- package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.js +13 -7
- package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
- package/dist/services/WorkQueueHostService.d.ts +36 -0
- package/dist/services/WorkQueueHostService.d.ts.map +1 -0
- package/dist/services/WorkQueueHostService.js +97 -0
- package/dist/services/WorkQueueHostService.js.map +1 -0
- package/dist/services/workQueueConfig.d.ts +103 -0
- package/dist/services/workQueueConfig.d.ts.map +1 -0
- package/dist/services/workQueueConfig.js +48 -0
- package/dist/services/workQueueConfig.js.map +1 -0
- package/dist/sharedCache.d.ts +105 -0
- package/dist/sharedCache.d.ts.map +1 -0
- package/dist/sharedCache.js +276 -0
- package/dist/sharedCache.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +97 -94
- package/src/__tests__/ActionResolver.authorization.test.ts +353 -0
- package/src/__tests__/AdhocQueryResolver.bugs.test.ts +14 -35
- package/src/__tests__/AdhocQueryResolver.pagination.test.ts +6 -2
- package/src/__tests__/AdhocQueryResolver.scopeGuard.test.ts +3 -3
- package/src/__tests__/AdhocQueryResolver.sqlAuthorizer.test.ts +104 -0
- package/src/__tests__/BridgeHostInstance.test.ts +232 -0
- package/src/__tests__/ClientToolRequestResolver.test.ts +116 -0
- package/src/__tests__/EntityRecordNameResolver.fieldSecurity.test.ts +27 -72
- package/src/__tests__/FetchEntityVectorsResolver.test.ts +285 -0
- package/src/__tests__/HostInstance.test.ts +84 -0
- package/src/__tests__/HumanHandoffResolver.test.ts +250 -0
- package/src/__tests__/MeetingResolver.test.ts +448 -0
- package/src/__tests__/RealtimeBridgeResolver.test.ts +651 -4
- package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +383 -0
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +682 -58
- package/src/__tests__/RealtimeProxyServer.test.ts +16 -1
- package/src/__tests__/RealtimeRelay.test.ts +876 -0
- package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +129 -0
- package/src/__tests__/ResolverBase.adhocReadScope.test.ts +96 -0
- package/src/__tests__/ResolverBase.aggregateScreen.test.ts +174 -0
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +6 -3
- package/src/__tests__/ResolverBase.filterEscaping.test.ts +21 -2
- package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +291 -0
- package/src/__tests__/ReturningVisitorRecap.test.ts +115 -0
- package/src/__tests__/RunAIAgentResolver.branch.test.ts +169 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +4 -4
- package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +166 -0
- package/src/__tests__/RunTemplateResolver.test.ts +132 -0
- package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +63 -0
- package/src/__tests__/SessionJanitor.test.ts +845 -18
- package/src/__tests__/SessionManager.test.ts +213 -17
- package/src/__tests__/SessionRunIDVerifier.test.ts +251 -0
- package/src/__tests__/SyncRolesUsersResolver.userRoles.test.ts +97 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +41 -0
- package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +50 -3
- package/src/__tests__/UserAvatarResolver.test.ts +255 -0
- package/src/__tests__/UserResolver.currentUser.test.ts +16 -1
- package/src/__tests__/WorkQueueHostService.test.ts +133 -0
- package/src/__tests__/actionAuthorization.test.ts +130 -0
- package/src/__tests__/adhocTimeoutClamp.test.ts +26 -0
- package/src/__tests__/agentVisionConsentAudit.test.ts +118 -0
- package/src/__tests__/avatarInputValidation.test.ts +160 -0
- package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
- package/src/__tests__/magicLinkService.consume.test.ts +6 -0
- package/src/__tests__/magicLinkService.provisionLog.test.ts +5 -0
- package/src/__tests__/newUsers.template.test.ts +151 -0
- package/src/__tests__/newUsers.test.ts +74 -5
- package/src/__tests__/orphanedConversationDetailReconciler.test.ts +17 -2
- package/src/__tests__/postgresqlPoolSettings.test.ts +131 -0
- package/src/__tests__/realtimeSessions/RealtimeSessionEventService.test.ts +201 -0
- package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +215 -0
- package/src/__tests__/realtimeSessions/RealtimeSessionVerificationResolver.test.ts +102 -0
- package/src/__tests__/realtimeSessions/RealtimeSessionVerificationService.test.ts +349 -0
- package/src/__tests__/realtimeSessions/RealtimeVerifyRouter.test.ts +131 -0
- package/src/__tests__/realtimeSessions/SlidingWindowRateLimiter.test.ts +56 -0
- package/src/__tests__/realtimeSessions/helpers.ts +4 -0
- package/src/__tests__/realtimeSessions/sessionAccess.test.ts +129 -0
- package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +124 -0
- package/src/__tests__/realtimeSessions/verificationCore.test.ts +355 -0
- package/src/__tests__/realtimeSessions/verificationPages.test.ts +84 -0
- package/src/__tests__/realtimeSessions/verificationPolicy.test.ts +226 -0
- package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +633 -0
- package/src/__tests__/resolverBase.fls.test.ts +87 -4
- package/src/__tests__/serverExtensionReservedRoots.test.ts +2 -0
- package/src/__tests__/sharedCache.test.ts +310 -0
- package/src/__tests__/translateBracketsToPG.test.ts +20 -0
- package/src/__tests__/widgetGuestElevation.test.ts +44 -0
- package/src/agentSessions/BridgeHostInstance.ts +32 -0
- package/src/agentSessions/HostInstance.ts +124 -28
- package/src/agentSessions/ReturningVisitorRecap.ts +7 -3
- package/src/agentSessions/SessionJanitor.ts +543 -57
- package/src/agentSessions/SessionManager.ts +125 -25
- package/src/agentSessions/SessionRunIDVerifier.ts +171 -0
- package/src/agentSessions/index.ts +10 -3
- package/src/auth/actionAuthorization.ts +116 -0
- package/src/auth/index.ts +3 -8
- package/src/auth/magicLink/MagicLinkService.ts +6 -3
- package/src/auth/newUsers.ts +99 -11
- package/src/config.ts +255 -3
- package/src/context.ts +26 -34
- package/src/generated/graphql-schemas/__mj.ts +22701 -18838
- package/src/generic/OrphanedConversationDetailReconciler.ts +3 -3
- package/src/generic/ResolverBase.ts +210 -36
- package/src/generic/RunViewResolver.ts +37 -2
- package/src/index.ts +236 -170
- package/src/isolatedProvider.ts +22 -0
- package/src/postgresqlCompat.ts +21 -0
- package/src/postgresqlPoolSettings.ts +213 -0
- package/src/realtimeProxy/RealtimeProxyServer.ts +148 -16
- package/src/realtimeProxy/RealtimeRelayTunnel.ts +645 -0
- package/src/realtimeSessions/README.md +179 -0
- package/src/realtimeSessions/RealtimeSessionEventService.ts +274 -0
- package/src/realtimeSessions/RealtimeSessionVerificationService.ts +167 -0
- package/src/realtimeSessions/RealtimeVerifyRouter.ts +108 -0
- package/src/realtimeSessions/SessionVerificationPortsBase.ts +189 -0
- package/src/realtimeSessions/SlidingWindowRateLimiter.ts +92 -0
- package/src/realtimeSessions/index.ts +16 -0
- package/src/realtimeSessions/sessionAccess.ts +141 -0
- package/src/realtimeSessions/sessionConfigStamps.ts +123 -0
- package/src/realtimeSessions/subscriptionAuthorization.ts +116 -0
- package/src/realtimeSessions/verificationCore.ts +502 -0
- package/src/realtimeSessions/verificationPages.ts +149 -0
- package/src/realtimeSessions/verificationPolicy.ts +321 -0
- package/src/realtimeSessions/verificationWorkflow.ts +702 -0
- package/src/realtimeWidget/widgetGuestElevation.ts +34 -2
- package/src/resolvers/ActionResolver.ts +84 -21
- package/src/resolvers/AdhocQueryResolver.ts +105 -187
- package/src/resolvers/CacheStatsResolver.ts +89 -2
- package/src/resolvers/ClientToolRequestResolver.ts +25 -7
- package/src/resolvers/EntityRecordNameResolver.ts +9 -51
- package/src/resolvers/FetchEntityVectorsResolver.ts +97 -2
- package/src/resolvers/GetDataResolver.ts +10 -0
- package/src/resolvers/HumanHandoffResolver.ts +312 -0
- package/src/resolvers/MCPResolver.ts +8 -5
- package/src/resolvers/MeetingResolver.ts +438 -0
- package/src/resolvers/RealtimeBridgeResolver.ts +385 -19
- package/src/resolvers/RealtimeClientSessionResolver.ts +503 -344
- package/src/resolvers/RealtimeSessionEventsResolver.ts +133 -0
- package/src/resolvers/RealtimeSessionVerificationResolver.ts +174 -0
- package/src/resolvers/RemoteBrowserActionResolver.ts +11 -1
- package/src/resolvers/RunAIAgentResolver.ts +78 -11
- package/src/resolvers/RunTemplateResolver.ts +13 -12
- package/src/resolvers/SyncDataResolver.ts +6 -2
- package/src/resolvers/SyncRolesUsersResolver.ts +24 -6
- package/src/resolvers/UserAvatarResolver.ts +111 -0
- package/src/resolvers/UserResolver.ts +2 -16
- package/src/resolvers/adhocTimeout.ts +12 -0
- package/src/resolvers/agentVisionConsentAudit.ts +82 -0
- package/src/resolvers/avatarInputValidation.ts +123 -0
- package/src/resolvers/currentUserRoles.ts +32 -1
- package/src/resolvers/meetings/index.ts +4 -0
- package/src/resolvers/meetings/meetingHelpers.ts +307 -0
- package/src/resolvers/meetings/meetingMutations.ts +556 -0
- package/src/resolvers/meetings/meetingQueries.ts +172 -0
- package/src/resolvers/meetings/meetingTypes.ts +238 -0
- package/src/rest/ViewOperationsHandler.ts +8 -5
- package/src/services/TaskGraphActionRunner.ts +29 -1
- package/src/services/TaskGraphContinuationDeliverer.ts +13 -7
- package/src/services/WorkQueueHostService.ts +129 -0
- package/src/services/workQueueConfig.ts +52 -0
- package/src/sharedCache.ts +302 -0
- package/src/types.ts +12 -0
- package/dist/resolvers/adhoc-query-helpers.d.ts +0 -33
- package/dist/resolvers/adhoc-query-helpers.d.ts.map +0 -1
- package/dist/resolvers/adhoc-query-helpers.js +0 -50
- package/dist/resolvers/adhoc-query-helpers.js.map +0 -1
- package/src/__tests__/adhoc-query-helpers.test.ts +0 -50
- package/src/resolvers/adhoc-query-helpers.ts +0 -67
|
@@ -1,61 +1,117 @@
|
|
|
1
1
|
import { BaseSingleton, IShutdownable } from '@memberjunction/global';
|
|
2
2
|
import { IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
3
|
+
import { HostInstanceIdentity } from './HostInstance.js';
|
|
3
4
|
/** Tuning knobs for the janitor. All durations in their named units. */
|
|
4
5
|
export interface SessionJanitorConfig {
|
|
5
6
|
/** A non-`Closed` session whose `LastActiveAt` is older than this is force-closed by the global sweep. */
|
|
6
7
|
closeThresholdMinutes: number;
|
|
7
|
-
/** How often the periodic
|
|
8
|
+
/** How often the periodic tick (close sweeps, then recording recovery) runs once {@link SessionJanitor.Start} is called. */
|
|
8
9
|
sweepIntervalMs: number;
|
|
10
|
+
/**
|
|
11
|
+
* How long after `ClosedAt` a recording-less session waits before recording recovery rebuilds it.
|
|
12
|
+
* Sessions are closed BEFORE the browser uploads the recording (#5195), so a fresh close without a
|
|
13
|
+
* recording is normal; recovery must not race the upload that is about to arrive.
|
|
14
|
+
*/
|
|
15
|
+
recordingRecoveryGraceMinutes: number;
|
|
16
|
+
/** Sessions closed longer ago than this are no longer considered by recording recovery. */
|
|
17
|
+
recordingRecoveryLookbackHours: number;
|
|
18
|
+
/**
|
|
19
|
+
* How long one session's recovery may run before the sweep abandons it and moves on. Storage clients
|
|
20
|
+
* can wait forever on a connection that stops answering (the S3 driver sets no request timeout), and
|
|
21
|
+
* one such call must not hold the single recovery pass for the life of the process.
|
|
22
|
+
*/
|
|
23
|
+
recordingRecoveryAttemptTimeoutMinutes: number;
|
|
9
24
|
}
|
|
10
25
|
/**
|
|
11
26
|
* `BaseSingleton` background reconciler that keeps the durable `AIAgentSession` state from drifting
|
|
12
27
|
* away from volatile process reality. A crash/redeploy vaporizes a host's in-memory sockets but
|
|
13
28
|
* leaves its session rows reading `Active`/`Idle` forever; the janitor force-closes those orphans.
|
|
14
29
|
*
|
|
15
|
-
*
|
|
30
|
+
* Three close sweeps, all writing through {@link SessionManager.CloseSession} so Record Changes captures
|
|
16
31
|
* each transition and channel rows are disconnected consistently:
|
|
17
32
|
*
|
|
18
|
-
* 1. **Own-
|
|
19
|
-
* session whose `HostInstanceID` belongs to
|
|
20
|
-
* different
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
33
|
+
* 1. **Own-instance recovery ({@link RunStartupRecovery})** — run once at boot. Closes any `Active`/`Idle`
|
|
34
|
+
* session whose `HostInstanceID` belongs to an *earlier* boot of *this* MJAPI instance (same host and port,
|
|
35
|
+
* different boot; see {@link HostInstanceIdentity}). Another MJAPI on the same host serves on another port,
|
|
36
|
+
* so its live sessions are left alone. Primary defense against the "Active forever" leak after a restart.
|
|
37
|
+
* 2. **Global staleness sweep ({@link RunStalenessSweep})** — run on every periodic tick, on every
|
|
38
|
+
* instance. Closes any `Active`/`Idle` session whose `LastActiveAt` is older than
|
|
39
|
+
* `closeThresholdMinutes`, regardless of host. Catches sessions whose owner died without a clean
|
|
40
|
+
* reboot (OOM, scaled-down pod).
|
|
41
|
+
* 3. **Max-duration sweep ({@link RunMaxDurationSweep})** — run on every periodic tick after the
|
|
42
|
+
* staleness sweep. Closes any session past its stored hard deadline (the public voice cost cap).
|
|
43
|
+
*
|
|
44
|
+
* The close sweeps stamp `CloseReason = 'Janitor'`. A shutdown-time path — {@link RunShutdownDrain},
|
|
45
|
+
* invoked from {@link Shutdown} during the graceful ShutdownRegistry drain — closes this exact host
|
|
46
|
+
* instance's own live sessions with `CloseReason = 'Shutdown'`.
|
|
24
47
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
48
|
+
* Separately from closing, {@link RunRecordingRecoverySweep} runs after the close sweeps on every
|
|
49
|
+
* periodic tick, without blocking them, and rebuilds the recording of already-`Closed` sessions whose
|
|
50
|
+
* end-of-call upload never arrived (it closes nothing).
|
|
28
51
|
*
|
|
29
|
-
*
|
|
30
|
-
* already-`Closed` session is a no-op, and the close path is last-writer-wins.
|
|
52
|
+
* The close sweeps are **idempotent and safe to run concurrently** on every instance: closing an
|
|
53
|
+
* already-`Closed` session is a no-op, and the close path is last-writer-wins. Recording recovery is not
|
|
54
|
+
* strictly so: two instances can recover the same session at once (there is no claim column). Each
|
|
55
|
+
* attempt uploads its own file and defers to an already-stamped recording on a best-effort basis, so
|
|
56
|
+
* the cost is duplicate work and an extra file, not a lost recording. The extra file is an orphan when the
|
|
57
|
+
* second attempt's re-check sees the first stamp; when both re-checks pass first, both files are stamped in
|
|
58
|
+
* turn and both are linked to the session (the later stamp wins `RecordingFileID`). Every sweep pages with keyset
|
|
31
59
|
* (`AfterKey`) pagination per the deep-pagination guide so a large backlog can't blow up memory.
|
|
32
60
|
*/
|
|
33
61
|
export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implements IShutdownable {
|
|
34
62
|
private _config;
|
|
35
63
|
private _sweepTimer;
|
|
36
64
|
private _sweepRunning;
|
|
65
|
+
/**
|
|
66
|
+
* The in-flight recording recovery pass, or null. Separate from {@link _sweepRunning}: slow recovery
|
|
67
|
+
* must never block the close sweeps. Kept as a promise so {@link Shutdown} can wait for it.
|
|
68
|
+
*/
|
|
69
|
+
private _recoveryPass;
|
|
70
|
+
/** Set by {@link Stop}, cleared by {@link Start}: no new recovery pass starts while stopped. */
|
|
71
|
+
private _stopped;
|
|
37
72
|
private _registered;
|
|
38
73
|
private _provider;
|
|
39
74
|
private _systemUser;
|
|
40
75
|
private readonly sessionManager;
|
|
76
|
+
/** Recovery retry state keyed by lowercase session id. Process-local: a restart gets fresh attempts. */
|
|
77
|
+
private readonly recoveryBackoff;
|
|
78
|
+
/**
|
|
79
|
+
* Lowercase ids of sessions whose recovery attempt timed out but has not settled. Skipped by later
|
|
80
|
+
* sweeps so a second attempt never runs alongside the abandoned one; removed when it settles.
|
|
81
|
+
*/
|
|
82
|
+
private readonly abandonedRecoveries;
|
|
83
|
+
/** True once the "recovery paused" error has been logged for the current pause; reset when it lifts. */
|
|
84
|
+
private _recoveryPauseLogged;
|
|
41
85
|
protected constructor();
|
|
42
86
|
/** Process-wide singleton accessor (Global Object Store backed via {@link BaseSingleton}). */
|
|
43
87
|
static get Instance(): SessionJanitor;
|
|
44
88
|
/** Identifier surfaced in graceful-shutdown logs. */
|
|
45
89
|
readonly ShutdownName = "SessionJanitor";
|
|
46
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Overrides default tuning. Safe to call before or after {@link Start}. Every value given must be a
|
|
92
|
+
* finite number greater than zero: a NaN or non-positive duration would otherwise build an invalid
|
|
93
|
+
* cutoff date and make every later sweep throw. All-or-nothing: on an invalid value it throws, naming
|
|
94
|
+
* the field and value, and applies nothing. `undefined` values are ignored.
|
|
95
|
+
*/
|
|
47
96
|
Configure(config: Partial<SessionJanitorConfig>): void;
|
|
48
97
|
/**
|
|
49
|
-
* Run own-host startup recovery once, then schedule the periodic staleness
|
|
50
|
-
* a second call does not stack a second timer.
|
|
51
|
-
* callback can run without re-supplying them
|
|
98
|
+
* Run own-host startup recovery once, then schedule the periodic tick (staleness and max-duration
|
|
99
|
+
* close sweeps, then recording recovery). Idempotent: a second call does not stack a second timer.
|
|
100
|
+
* Captures the provider + system user so the timer callback can run without re-supplying them, and
|
|
101
|
+
* re-enables recording recovery after a {@link Stop}. Throws, before doing any work, when
|
|
102
|
+
* `intervalMs` is invalid (see {@link Configure}).
|
|
52
103
|
*/
|
|
53
104
|
Start(provider: IMetadataProvider, systemUser: UserInfo, intervalMs?: number): Promise<void>;
|
|
54
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* Stops the periodic tick and keeps any new recording recovery pass from starting until the next
|
|
107
|
+
* {@link Start}, including one a tick already in progress would have started. A pass that is already
|
|
108
|
+
* running is not interrupted ({@link Shutdown} waits for it). Idempotent. Part of {@link IShutdownable}.
|
|
109
|
+
*/
|
|
55
110
|
Stop(): void;
|
|
56
111
|
/**
|
|
57
|
-
* {@link IShutdownable}:
|
|
58
|
-
* graceful stop never strands `Active`/`Idle` rows for the next boot's janitor to mop up
|
|
112
|
+
* {@link IShutdownable}: stop the timer, then drain this host's own live sessions so a
|
|
113
|
+
* graceful stop never strands `Active`/`Idle` rows for the next boot's janitor to mop up, then wait
|
|
114
|
+
* (at most {@link RECOVERY_SHUTDOWN_WAIT_MS}) for an in-flight recording recovery pass.
|
|
59
115
|
* Drained sessions are stamped `CloseReason = 'Shutdown'` (vs. `'Janitor'` for crash orphans),
|
|
60
116
|
* so the dashboards can tell a clean redeploy from a reconciled crash. Never throws; the drain
|
|
61
117
|
* is skipped when {@link Start} was never called (no captured provider/user).
|
|
@@ -69,10 +125,16 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
|
|
|
69
125
|
*/
|
|
70
126
|
RunShutdownDrain(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
|
|
71
127
|
/**
|
|
72
|
-
* Force-close any `Active`/`Idle` session left behind by
|
|
73
|
-
*
|
|
128
|
+
* Force-close any `Active`/`Idle` session left behind by an earlier boot of this MJAPI instance: its
|
|
129
|
+
* `HostInstanceID` has this instance's prefix (`hostname:port:`) and another boot. The sessions of another
|
|
130
|
+
* MJAPI on the same host carry another port and stay open. Returns the number of sessions closed.
|
|
131
|
+
*
|
|
132
|
+
* @param provider The metadata provider for the reads and writes.
|
|
133
|
+
* @param systemUser The user the closes run as.
|
|
134
|
+
* @param hostInstance The instance whose earlier boots to close. Defaults to this process's
|
|
135
|
+
* ({@link GetCurrentHostInstance}).
|
|
74
136
|
*/
|
|
75
|
-
RunStartupRecovery(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
|
|
137
|
+
RunStartupRecovery(provider: IMetadataProvider, systemUser: UserInfo, hostInstance?: HostInstanceIdentity): Promise<number>;
|
|
76
138
|
/**
|
|
77
139
|
* Force-close any `Active`/`Idle` session whose `LastActiveAt` is older than the configured
|
|
78
140
|
* close threshold, regardless of host. Idempotent and concurrency-safe. Returns the count closed.
|
|
@@ -89,14 +151,87 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
|
|
|
89
151
|
* `CloseReason = 'Janitor'`, idempotent + concurrency-safe like the other sweeps. Returns the count closed.
|
|
90
152
|
*/
|
|
91
153
|
RunMaxDurationSweep(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
|
|
154
|
+
/**
|
|
155
|
+
* Rebuilds the recording of sessions whose end-of-call upload never arrived (browser died, tab
|
|
156
|
+
* closed). A session is a candidate when it is `Closed`, has `RecordingStartedAt` (consent is implied:
|
|
157
|
+
* recording only starts after the guest agreed), still has no `RecordingFileID`, and closed between
|
|
158
|
+
* the lookback window and the grace period (see {@link SessionJanitorConfig.recordingRecoveryGraceMinutes}).
|
|
159
|
+
*
|
|
160
|
+
* Work is bounded: candidates are handled sequentially, at most {@link MAX_RECOVERIES_PER_SWEEP}
|
|
161
|
+
* recovery attempts per call, and a failing session backs off exponentially (`min(2^k * 5 min, 6 h)`)
|
|
162
|
+
* and is abandoned after {@link MAX_RECOVERY_ATTEMPTS} failures with one `LogError`. Backoff entries of
|
|
163
|
+
* sessions that left the candidate set are pruned, but only after a pass that saw every candidate, so
|
|
164
|
+
* a capped pass never forgets sessions it did not reach.
|
|
165
|
+
*
|
|
166
|
+
* Never throws for a single bad session. Returns the number of recordings recovered.
|
|
167
|
+
*/
|
|
168
|
+
RunRecordingRecoverySweep(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
|
|
92
169
|
/** Parses the absolute deadline (ms) from a session's `Config_` JSON, or null when absent/malformed. */
|
|
93
170
|
private parseSessionDeadlineMs;
|
|
94
171
|
/** Register for graceful shutdown exactly once. */
|
|
95
172
|
private ensureRegistered;
|
|
96
|
-
/** Schedule the periodic
|
|
173
|
+
/** Schedule the periodic sweep tick (close sweeps + recording recovery), exactly once. Timer is unref'd so it never blocks exit. */
|
|
97
174
|
private scheduleSweep;
|
|
98
|
-
/**
|
|
175
|
+
/**
|
|
176
|
+
* Timer tick: run the close sweeps (staleness, then max-duration) under the captured
|
|
177
|
+
* provider/user, guarding overlap, then kick off recording recovery.
|
|
178
|
+
*
|
|
179
|
+
* Recovery is started WITHOUT awaiting and has its own overlap guard: it can spend minutes on
|
|
180
|
+
* large downloads/uploads, and awaiting it under the close sweeps' guard would delay the
|
|
181
|
+
* max-duration cost cap and make every later tick return early. Each tick skips recovery while a pass
|
|
182
|
+
* is still running; because every session's attempt is bounded by
|
|
183
|
+
* `recordingRecoveryAttemptTimeoutMinutes`, a hung storage call delays later passes, never stops them.
|
|
184
|
+
*/
|
|
99
185
|
private periodicSweep;
|
|
186
|
+
/**
|
|
187
|
+
* Fire-and-forget recording recovery, skipped when the previous pass is still running or the janitor
|
|
188
|
+
* has been stopped (a tick that was mid-close-sweep when {@link Stop} ran must not start one).
|
|
189
|
+
*/
|
|
190
|
+
private startRecoveryPass;
|
|
191
|
+
/**
|
|
192
|
+
* Waits for the in-flight recovery pass, if any, for at most {@link RECOVERY_SHUTDOWN_WAIT_MS}; logs
|
|
193
|
+
* once when it gives up. Never throws: the pass promise already logs and absorbs its own errors.
|
|
194
|
+
*/
|
|
195
|
+
private waitForRecoveryPass;
|
|
196
|
+
/**
|
|
197
|
+
* Recovers one candidate's recording and updates its backoff. Never throws: any exception is logged
|
|
198
|
+
* with the session id and counted as a failure.
|
|
199
|
+
*/
|
|
200
|
+
private recoverSessionRecording;
|
|
201
|
+
/**
|
|
202
|
+
* Runs one session's recovery, giving up on waiting after `recordingRecoveryAttemptTimeoutMinutes`.
|
|
203
|
+
* A call cannot be cancelled, so a timed-out one keeps running: the session is marked abandoned until
|
|
204
|
+
* it settles (later sweeps skip it), and its late outcome is logged then.
|
|
205
|
+
*/
|
|
206
|
+
private recoverWithinTimeout;
|
|
207
|
+
/**
|
|
208
|
+
* True while {@link MAX_ABANDONED_RECOVERIES} timed-out attempts are still running: no new attempt
|
|
209
|
+
* starts until one settles. Logs one `LogError` per pause.
|
|
210
|
+
*/
|
|
211
|
+
private isRecoveryPausedForAbandonedAttempts;
|
|
212
|
+
/**
|
|
213
|
+
* Defers a session that cannot be recovered until configuration changes (its agent has no recording
|
|
214
|
+
* storage account). That is not a failed attempt, so it never counts toward the give-up: the session
|
|
215
|
+
* is re-checked every {@link RECOVERY_BACKOFF_MAX_MS} and logged only the first time.
|
|
216
|
+
*/
|
|
217
|
+
private deferRecovery;
|
|
218
|
+
/**
|
|
219
|
+
* Loads the agent carrying a session's recording storage config and resolves its storage account,
|
|
220
|
+
* memoized per agent for the sweep: the resolve may force a storage-engine reload, so it must not
|
|
221
|
+
* repeat for every session of the same agent.
|
|
222
|
+
*/
|
|
223
|
+
private resolveRecoveryStorage;
|
|
224
|
+
/** True while a session's backoff (or give-up) window has not elapsed. */
|
|
225
|
+
private isRecoveryBackedOff;
|
|
226
|
+
/**
|
|
227
|
+
* Counts one more unsuccessful recovery for a session and schedules its next attempt
|
|
228
|
+
* (`min(2^k * 5 min, 6 h)`); at {@link MAX_RECOVERY_ATTEMPTS} it stops checking the session for this
|
|
229
|
+
* process with a single log line: a `LogError` when the last attempt failed, a `LogStatus` when it
|
|
230
|
+
* simply found no shards (nothing to recover is not an error).
|
|
231
|
+
*/
|
|
232
|
+
private recordRecoveryFailure;
|
|
233
|
+
/** Drops backoff state for sessions that were not in the latest complete candidate set. */
|
|
234
|
+
private pruneRecoveryBackoff;
|
|
100
235
|
/**
|
|
101
236
|
* Page through every session matching `filter` with keyset (`AfterKey`) pagination and close each
|
|
102
237
|
* via {@link SessionManager.CloseSession}, stamping `closeReason` on every row it transitions.
|
|
@@ -104,6 +239,19 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
|
|
|
104
239
|
* harmless no-op that keeps its original reason.
|
|
105
240
|
*/
|
|
106
241
|
private sweepAndClose;
|
|
242
|
+
/**
|
|
243
|
+
* Keyset-page (`AfterKey`) through every session matching `filter`, handing each full fetched page
|
|
244
|
+
* to `visit`. Stops on a load failure (already logged), an empty page, a partial page, or when
|
|
245
|
+
* `visit` returns `false`.
|
|
246
|
+
*
|
|
247
|
+
* `visit` receives the page exactly as the SQL filter matched it. The keyset advances from the
|
|
248
|
+
* LAST FETCHED row, so any narrowing `visit` does in JS can never stall or skip pagination.
|
|
249
|
+
*
|
|
250
|
+
* Returns how the walk ended: `'complete'` (reached the end of the matching set), `'stopped'`
|
|
251
|
+
* (`visit` returned `false`) or `'failed'` (a page failed to load). Callers that reason about the
|
|
252
|
+
* WHOLE set (e.g. pruning state for absent rows) must act only on `'complete'`.
|
|
253
|
+
*/
|
|
254
|
+
private forEachSessionPage;
|
|
107
255
|
/** Fetch one keyset page of matching sessions, or null on a load failure (logged). */
|
|
108
256
|
private fetchPage;
|
|
109
257
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionJanitor.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EACH,iBAAiB,EACjB,QAAQ,EAMX,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionJanitor.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"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"}
|