@memberjunction/server 6.2.0-edge.6 → 6.2.0-edge.8

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.
Files changed (463) hide show
  1. package/README.md +69 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/BridgeHostInstance.d.ts +8 -3
  4. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -1
  5. package/dist/agentSessions/BridgeHostInstance.js +14 -4
  6. package/dist/agentSessions/BridgeHostInstance.js.map +1 -1
  7. package/dist/agentSessions/HandoffOfferExpiry.d.ts +10 -0
  8. package/dist/agentSessions/HandoffOfferExpiry.d.ts.map +1 -0
  9. package/dist/agentSessions/HandoffOfferExpiry.js +18 -0
  10. package/dist/agentSessions/HandoffOfferExpiry.js.map +1 -0
  11. package/dist/agentSessions/ReturningVisitorRecap.js +1 -0
  12. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  13. package/dist/agentSessions/SessionJanitor.d.ts +31 -8
  14. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  15. package/dist/agentSessions/SessionJanitor.js +85 -41
  16. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  17. package/dist/agentSessions/SessionManager.d.ts +14 -4
  18. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  19. package/dist/agentSessions/SessionManager.js +28 -4
  20. package/dist/agentSessions/SessionManager.js.map +1 -1
  21. package/dist/agentSessions/conversationBrowsers.d.ts +61 -0
  22. package/dist/agentSessions/conversationBrowsers.d.ts.map +1 -0
  23. package/dist/agentSessions/conversationBrowsers.js +118 -0
  24. package/dist/agentSessions/conversationBrowsers.js.map +1 -0
  25. package/dist/agentSessions/sessionDeadline.d.ts +43 -0
  26. package/dist/agentSessions/sessionDeadline.d.ts.map +1 -0
  27. package/dist/agentSessions/sessionDeadline.js +68 -0
  28. package/dist/agentSessions/sessionDeadline.js.map +1 -0
  29. package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
  30. package/dist/auth/APIKeyScopeAuth.js +5 -4
  31. package/dist/auth/APIKeyScopeAuth.js.map +1 -1
  32. package/dist/auth/loginEmailResolution.d.ts +41 -0
  33. package/dist/auth/loginEmailResolution.d.ts.map +1 -0
  34. package/dist/auth/loginEmailResolution.js +47 -0
  35. package/dist/auth/loginEmailResolution.js.map +1 -0
  36. package/dist/auth/magicLink/MagicLinkKeys.d.ts +50 -2
  37. package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
  38. package/dist/auth/magicLink/MagicLinkKeys.js +129 -12
  39. package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
  40. package/dist/auth/magicLink/MagicLinkRouter.d.ts +3 -0
  41. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  42. package/dist/auth/magicLink/MagicLinkRouter.js +23 -5
  43. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  44. package/dist/auth/magicLink/MagicLinkService.d.ts +39 -5
  45. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  46. package/dist/auth/magicLink/MagicLinkService.js +221 -9
  47. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  48. package/dist/auth/magicLink/index.d.ts +1 -1
  49. package/dist/auth/magicLink/index.d.ts.map +1 -1
  50. package/dist/auth/magicLink/index.js +1 -1
  51. package/dist/auth/magicLink/index.js.map +1 -1
  52. package/dist/auth/magicLink/redeemLanding.d.ts +2 -2
  53. package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
  54. package/dist/auth/magicLink/redeemLanding.js +7 -4
  55. package/dist/auth/magicLink/redeemLanding.js.map +1 -1
  56. package/dist/auth/magicLink/types.d.ts +27 -3
  57. package/dist/auth/magicLink/types.d.ts.map +1 -1
  58. package/dist/auth/magicLink/types.js +0 -4
  59. package/dist/auth/magicLink/types.js.map +1 -1
  60. package/dist/auth/newUsers.d.ts.map +1 -1
  61. package/dist/auth/newUsers.js +1 -0
  62. package/dist/auth/newUsers.js.map +1 -1
  63. package/dist/backgroundSweepConfigUnits.d.ts +231 -0
  64. package/dist/backgroundSweepConfigUnits.d.ts.map +1 -0
  65. package/dist/backgroundSweepConfigUnits.js +180 -0
  66. package/dist/backgroundSweepConfigUnits.js.map +1 -0
  67. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -1
  68. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +2 -1
  69. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -1
  70. package/dist/config.d.ts +906 -8
  71. package/dist/config.d.ts.map +1 -1
  72. package/dist/config.js +59 -0
  73. package/dist/config.js.map +1 -1
  74. package/dist/context.d.ts +2 -0
  75. package/dist/context.d.ts.map +1 -1
  76. package/dist/context.js +41 -12
  77. package/dist/context.js.map +1 -1
  78. package/dist/coreRoutes.d.ts +3 -1
  79. package/dist/coreRoutes.d.ts.map +1 -1
  80. package/dist/coreRoutes.js +6 -4
  81. package/dist/coreRoutes.js.map +1 -1
  82. package/dist/generated/graphql-schemas/__mj.d.ts +1072 -5
  83. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  84. package/dist/generated/graphql-schemas/__mj.js +10174 -4618
  85. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  86. package/dist/generic/OrphanedConversationDetailReconciler.d.ts +11 -0
  87. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
  88. package/dist/generic/OrphanedConversationDetailReconciler.js +27 -1
  89. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  90. package/dist/generic/ResolverBase.d.ts +50 -5
  91. package/dist/generic/ResolverBase.d.ts.map +1 -1
  92. package/dist/generic/ResolverBase.js +329 -132
  93. package/dist/generic/ResolverBase.js.map +1 -1
  94. package/dist/generic/RunViewResolver.d.ts +4 -0
  95. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  96. package/dist/generic/RunViewResolver.js +47 -7
  97. package/dist/generic/RunViewResolver.js.map +1 -1
  98. package/dist/globalCors.d.ts.map +1 -1
  99. package/dist/globalCors.js +1 -0
  100. package/dist/globalCors.js.map +1 -1
  101. package/dist/index.d.ts +3 -0
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +201 -43
  104. package/dist/index.js.map +1 -1
  105. package/dist/integration/ConnectionPause.d.ts +121 -0
  106. package/dist/integration/ConnectionPause.d.ts.map +1 -0
  107. package/dist/integration/ConnectionPause.js +183 -0
  108. package/dist/integration/ConnectionPause.js.map +1 -0
  109. package/dist/integration/CustomColumnPromoter.d.ts +72 -6
  110. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  111. package/dist/integration/CustomColumnPromoter.js +87 -46
  112. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  113. package/dist/integration/EntityMapLifecycle.d.ts +78 -4
  114. package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
  115. package/dist/integration/EntityMapLifecycle.js +199 -5
  116. package/dist/integration/EntityMapLifecycle.js.map +1 -1
  117. package/dist/integration/InactiveRowWarnings.d.ts +31 -0
  118. package/dist/integration/InactiveRowWarnings.d.ts.map +1 -1
  119. package/dist/integration/InactiveRowWarnings.js +29 -0
  120. package/dist/integration/InactiveRowWarnings.js.map +1 -1
  121. package/dist/integration/ObjectNamesByID.d.ts +28 -0
  122. package/dist/integration/ObjectNamesByID.d.ts.map +1 -0
  123. package/dist/integration/ObjectNamesByID.js +87 -0
  124. package/dist/integration/ObjectNamesByID.js.map +1 -0
  125. package/dist/integration/PostRestartIntrospect.d.ts +26 -0
  126. package/dist/integration/PostRestartIntrospect.d.ts.map +1 -0
  127. package/dist/integration/PostRestartIntrospect.js +27 -0
  128. package/dist/integration/PostRestartIntrospect.js.map +1 -0
  129. package/dist/integration/RSUPostRestartProgress.d.ts +176 -0
  130. package/dist/integration/RSUPostRestartProgress.d.ts.map +1 -0
  131. package/dist/integration/RSUPostRestartProgress.js +323 -0
  132. package/dist/integration/RSUPostRestartProgress.js.map +1 -0
  133. package/dist/integration/RSUProgressBridge.d.ts +41 -2
  134. package/dist/integration/RSUProgressBridge.d.ts.map +1 -1
  135. package/dist/integration/RSUProgressBridge.js +84 -1
  136. package/dist/integration/RSUProgressBridge.js.map +1 -1
  137. package/dist/integration/RunArtifactAuthorization.d.ts +39 -0
  138. package/dist/integration/RunArtifactAuthorization.d.ts.map +1 -0
  139. package/dist/integration/RunArtifactAuthorization.js +45 -0
  140. package/dist/integration/RunArtifactAuthorization.js.map +1 -0
  141. package/dist/integration/SchemaRefreshLaunch.d.ts +9 -0
  142. package/dist/integration/SchemaRefreshLaunch.d.ts.map +1 -1
  143. package/dist/integration/SchemaRefreshLaunch.js +3 -2
  144. package/dist/integration/SchemaRefreshLaunch.js.map +1 -1
  145. package/dist/integration/ScopedFieldsForBuild.d.ts +46 -0
  146. package/dist/integration/ScopedFieldsForBuild.d.ts.map +1 -0
  147. package/dist/integration/ScopedFieldsForBuild.js +91 -0
  148. package/dist/integration/ScopedFieldsForBuild.js.map +1 -0
  149. package/dist/integration/TargetConfigGuard.d.ts +40 -0
  150. package/dist/integration/TargetConfigGuard.d.ts.map +1 -0
  151. package/dist/integration/TargetConfigGuard.js +40 -0
  152. package/dist/integration/TargetConfigGuard.js.map +1 -0
  153. package/dist/logging/StartupLogger.d.ts +50 -0
  154. package/dist/logging/StartupLogger.d.ts.map +1 -1
  155. package/dist/logging/StartupLogger.js +15 -22
  156. package/dist/logging/StartupLogger.js.map +1 -1
  157. package/dist/middleware/BaseServerMiddleware.d.ts +21 -3
  158. package/dist/middleware/BaseServerMiddleware.d.ts.map +1 -1
  159. package/dist/middleware/BaseServerMiddleware.js +4 -2
  160. package/dist/middleware/BaseServerMiddleware.js.map +1 -1
  161. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
  162. package/dist/realtimeSessions/ownedRealtimeSession.js +2 -3
  163. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
  164. package/dist/realtimeSessions/sessionAccess.d.ts +15 -0
  165. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
  166. package/dist/realtimeSessions/sessionAccess.js +22 -0
  167. package/dist/realtimeSessions/sessionAccess.js.map +1 -1
  168. package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
  169. package/dist/realtimeWidget/WidgetSessionService.js +2 -0
  170. package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
  171. package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
  172. package/dist/realtimeWidget/visitorIdentity.js +1 -0
  173. package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
  174. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  175. package/dist/realtimeWidget/widgetCore.js +4 -7
  176. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  177. package/dist/realtimeWidget/widgetGuestElevation.js +1 -0
  178. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  179. package/dist/requestOrigin.d.ts +22 -0
  180. package/dist/requestOrigin.d.ts.map +1 -0
  181. package/dist/requestOrigin.js +60 -0
  182. package/dist/requestOrigin.js.map +1 -0
  183. package/dist/resolvers/AgentRunStatusPublisher.d.ts +10 -0
  184. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
  185. package/dist/resolvers/AgentRunStatusPublisher.js +18 -2
  186. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
  187. package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
  188. package/dist/resolvers/AgentSessionResolver.js +6 -2
  189. package/dist/resolvers/AgentSessionResolver.js.map +1 -1
  190. package/dist/resolvers/AutotagPipelineResolver.d.ts +1 -1
  191. package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
  192. package/dist/resolvers/AutotagPipelineResolver.js +61 -16
  193. package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
  194. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
  195. package/dist/resolvers/ConversationRunEventsResolver.js +2 -0
  196. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
  197. package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts +6 -0
  198. package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts.map +1 -1
  199. package/dist/resolvers/ExecuteRemoteOperationResolver.js +30 -7
  200. package/dist/resolvers/ExecuteRemoteOperationResolver.js.map +1 -1
  201. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  202. package/dist/resolvers/GetDataResolver.js +34 -13
  203. package/dist/resolvers/GetDataResolver.js.map +1 -1
  204. package/dist/resolvers/InfoResolver.js +1 -1
  205. package/dist/resolvers/InfoResolver.js.map +1 -1
  206. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +401 -11
  207. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  208. package/dist/resolvers/IntegrationDiscoveryResolver.js +2690 -1305
  209. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  210. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  211. package/dist/resolvers/MCPResolver.js +13 -2
  212. package/dist/resolvers/MCPResolver.js.map +1 -1
  213. package/dist/resolvers/QuerySystemUserResolver.d.ts +38 -1
  214. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  215. package/dist/resolvers/QuerySystemUserResolver.js +181 -88
  216. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  217. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  218. package/dist/resolvers/RealtimeBridgeResolver.js +1 -0
  219. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  220. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +6 -0
  221. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  222. package/dist/resolvers/RealtimeClientSessionResolver.js +36 -5
  223. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  224. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +62 -10
  225. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  226. package/dist/resolvers/RemoteBrowserActionResolver.js +217 -34
  227. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  228. package/dist/resolvers/RunAIAgentResolver.d.ts +24 -8
  229. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  230. package/dist/resolvers/RunAIAgentResolver.js +185 -67
  231. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  232. package/dist/resolvers/RunAIPromptResolver.d.ts +5 -3
  233. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  234. package/dist/resolvers/RunAIPromptResolver.js +19 -18
  235. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  236. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  237. package/dist/resolvers/RunTemplateResolver.js +3 -1
  238. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  239. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  240. package/dist/resolvers/SqlLoggingConfigResolver.js +7 -8
  241. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  242. package/dist/resolvers/TagGovernanceResolver.d.ts +12 -0
  243. package/dist/resolvers/TagGovernanceResolver.d.ts.map +1 -1
  244. package/dist/resolvers/TagGovernanceResolver.js +84 -0
  245. package/dist/resolvers/TagGovernanceResolver.js.map +1 -1
  246. package/dist/resolvers/TelemetryResolver.d.ts +13 -8
  247. package/dist/resolvers/TelemetryResolver.d.ts.map +1 -1
  248. package/dist/resolvers/TelemetryResolver.js +40 -9
  249. package/dist/resolvers/TelemetryResolver.js.map +1 -1
  250. package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
  251. package/dist/resolvers/meetingRecordingRegistration.js +2 -0
  252. package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
  253. package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -1
  254. package/dist/resolvers/meetings/meetingMutations.js +34 -4
  255. package/dist/resolvers/meetings/meetingMutations.js.map +1 -1
  256. package/dist/rest/MediaAccessKeys.d.ts.map +1 -1
  257. package/dist/rest/MediaAccessKeys.js +6 -2
  258. package/dist/rest/MediaAccessKeys.js.map +1 -1
  259. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
  260. package/dist/rest/OAuthCallbackHandler.js +11 -5
  261. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  262. package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
  263. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
  264. package/dist/rest/RealtimeRecordingHandler.js +2 -4
  265. package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
  266. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  267. package/dist/rest/ViewOperationsHandler.js +2 -1
  268. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  269. package/dist/rest/setupRESTEndpoints.d.ts +3 -1
  270. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  271. package/dist/rest/setupRESTEndpoints.js +11 -2
  272. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  273. package/dist/services/DurableEntityActionTaskSubmitter.d.ts.map +1 -1
  274. package/dist/services/DurableEntityActionTaskSubmitter.js +6 -1
  275. package/dist/services/DurableEntityActionTaskSubmitter.js.map +1 -1
  276. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  277. package/dist/services/TaskGraphActionRunner.js +2 -26
  278. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  279. package/dist/services/TaskGraphAgentRunner.d.ts +6 -0
  280. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
  281. package/dist/services/TaskGraphAgentRunner.js +38 -0
  282. package/dist/services/TaskGraphAgentRunner.js.map +1 -1
  283. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  284. package/dist/services/TaskGraphContinuationDeliverer.js +1 -0
  285. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  286. package/dist/services/WorkQueueHostService.d.ts +2 -1
  287. package/dist/services/WorkQueueHostService.d.ts.map +1 -1
  288. package/dist/services/WorkQueueHostService.js +19 -4
  289. package/dist/services/WorkQueueHostService.js.map +1 -1
  290. package/dist/services/workQueueConfig.d.ts +2 -2
  291. package/dist/services/workQueueConfig.js +5 -5
  292. package/dist/services/workQueueConfig.js.map +1 -1
  293. package/dist/sharedCache.js +1 -1
  294. package/dist/sharedCache.js.map +1 -1
  295. package/dist/types.d.ts +17 -0
  296. package/dist/types.d.ts.map +1 -1
  297. package/dist/types.js.map +1 -1
  298. package/dist/util.d.ts.map +1 -1
  299. package/dist/util.js +55 -2
  300. package/dist/util.js.map +1 -1
  301. package/package.json +107 -100
  302. package/src/__tests__/APIKeyScopeAuth.test.ts +4 -8
  303. package/src/__tests__/ActiveOperations.test.ts +68 -0
  304. package/src/__tests__/AgentSessionResolver.ownership.test.ts +13 -0
  305. package/src/__tests__/AssertTargetConfigs.test.ts +75 -0
  306. package/src/__tests__/BatchApplyParity.test.ts +109 -0
  307. package/src/__tests__/BridgeHostInstance.test.ts +42 -0
  308. package/src/__tests__/CollectInactiveRowWarnings.test.ts +115 -0
  309. package/src/__tests__/ConnectionPause.test.ts +192 -0
  310. package/src/__tests__/ConnectionPauseResolver.test.ts +166 -0
  311. package/src/__tests__/ConnectionPauseSave.test.ts +143 -0
  312. package/src/__tests__/CustomColumnPromoterCompletion.test.ts +142 -0
  313. package/src/__tests__/DeleteConnectionRemovesPerConnectionCatalog.test.ts +51 -0
  314. package/src/__tests__/DetachedDiscoveryStart.test.ts +65 -0
  315. package/src/__tests__/DurableEntityActionTaskSubmitter.test.ts +73 -0
  316. package/src/__tests__/EntityMapLifecycle.rekey.test.ts +252 -0
  317. package/src/__tests__/ExecuteRemoteOperationResolver.test.ts +213 -0
  318. package/src/__tests__/HandoffOfferExpiry.test.ts +40 -0
  319. package/src/__tests__/IntegrationRunArtifactAuthorization.test.ts +126 -0
  320. package/src/__tests__/MagicLinkKeys.test.ts +102 -0
  321. package/src/__tests__/MediaAccessKeys.test.ts +57 -10
  322. package/src/__tests__/NewArrivalsDefaultDisabled.test.ts +50 -0
  323. package/src/__tests__/ObjectNamesByID.test.ts +176 -0
  324. package/src/__tests__/PostRestartMapsInCatalogScope.test.ts +146 -0
  325. package/src/__tests__/QuerySystemUserResolver.childRows.test.ts +80 -0
  326. package/src/__tests__/QuerySystemUserResolver.collision.test.ts +200 -0
  327. package/src/__tests__/QuerySystemUserResolver.permissions.test.ts +132 -0
  328. package/src/__tests__/RSUPostRestartProgress.test.ts +343 -0
  329. package/src/__tests__/RSUProgressBridge.test.ts +188 -5
  330. package/src/__tests__/RSUStartupSweepWiring.test.ts +30 -0
  331. package/src/__tests__/ReactivateRefreshMessage.test.ts +10 -3
  332. package/src/__tests__/RealtimeClientSessionResolver.test.ts +22 -0
  333. package/src/__tests__/{RefreshAdoptsNewColumns.test.ts → RefreshReportsNewColumns.test.ts} +25 -16
  334. package/src/__tests__/RemoteBrowserActionRecovery.test.ts +287 -0
  335. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +3 -0
  336. package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +6 -4
  337. package/src/__tests__/RemoteBrowserAudioStream.test.ts +3 -0
  338. package/src/__tests__/RemoteBrowserSnapshot.test.ts +3 -0
  339. package/src/__tests__/ResolverBase.clientOldValues.test.ts +327 -26
  340. package/src/__tests__/ResolverBase.diagnosticSenderRegistrations.test.ts +26 -0
  341. package/src/__tests__/ResolverBase.encryptedApiZeroReencrypt.test.ts +307 -0
  342. package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +53 -2
  343. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +60 -0
  344. package/src/__tests__/RunAIAgentResolver.branch.test.ts +4 -0
  345. package/src/__tests__/RunAIAgentResolver.consultPredecessor.test.ts +289 -0
  346. package/src/__tests__/RunAIAgentResolver.handoff.test.ts +649 -0
  347. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +2 -0
  348. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +2 -0
  349. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +87 -12
  350. package/src/__tests__/RunAIAgentResolver.streaming.test.ts +28 -4
  351. package/src/__tests__/SchemaEvolutionCustomColumns.test.ts +119 -0
  352. package/src/__tests__/SchemaRefreshLaunch.test.ts +24 -2
  353. package/src/__tests__/ScopedFieldsForBuild.test.ts +192 -0
  354. package/src/__tests__/SessionJanitor.test.ts +195 -4
  355. package/src/__tests__/SessionManager.test.ts +69 -0
  356. package/src/__tests__/TagGovernanceAndAutotagResolvers.test.ts +261 -0
  357. package/src/__tests__/TagGovernanceResolver.test.ts +60 -2
  358. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +2 -2
  359. package/src/__tests__/TaskGraphAgentRunner.test.ts +272 -16
  360. package/src/__tests__/ViewOperationsHandler.test.ts +2 -5
  361. package/src/__tests__/WorkQueueHostService.test.ts +25 -7
  362. package/src/__tests__/backgroundSweepConfigUnits.test.ts +153 -0
  363. package/src/__tests__/contextRequestOrigin.test.ts +105 -0
  364. package/src/__tests__/conversationBrowsers.test.ts +62 -0
  365. package/src/__tests__/globalCors.test.ts +12 -0
  366. package/src/__tests__/magicLinkExtensionCapabilities.test.ts +413 -0
  367. package/src/__tests__/orphanedConversationDetailReconciler.start.test.ts +82 -0
  368. package/src/__tests__/ownedRealtimeSession.test.ts +14 -0
  369. package/src/__tests__/realtimeRecordingHandler.test.ts +7 -2
  370. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +79 -1
  371. package/src/__tests__/requestOrigin.test.ts +104 -0
  372. package/src/__tests__/review-capture-valid-token-log.test.ts +98 -0
  373. package/src/__tests__/runStreams.fieldSecurity.test.ts +5 -5
  374. package/src/__tests__/securityHardeningPr6034.test.ts +120 -0
  375. package/src/__tests__/sessionDeadline.test.ts +51 -0
  376. package/src/__tests__/sharedCache.test.ts +11 -0
  377. package/src/__tests__/unifiedAuth.test.ts +73 -1
  378. package/src/agentSessions/BridgeHostInstance.ts +20 -5
  379. package/src/agentSessions/HandoffOfferExpiry.ts +18 -0
  380. package/src/agentSessions/ReturningVisitorRecap.ts +1 -0
  381. package/src/agentSessions/SessionJanitor.ts +92 -42
  382. package/src/agentSessions/SessionManager.ts +38 -8
  383. package/src/agentSessions/conversationBrowsers.ts +143 -0
  384. package/src/agentSessions/sessionDeadline.ts +81 -0
  385. package/src/auth/APIKeyScopeAuth.ts +5 -4
  386. package/src/auth/__tests__/loginEmailResolution.test.ts +67 -0
  387. package/src/auth/loginEmailResolution.ts +67 -0
  388. package/src/auth/magicLink/MagicLinkKeys.ts +146 -14
  389. package/src/auth/magicLink/MagicLinkRouter.ts +33 -6
  390. package/src/auth/magicLink/MagicLinkService.ts +250 -10
  391. package/src/auth/magicLink/index.ts +1 -1
  392. package/src/auth/magicLink/redeemLanding.ts +7 -4
  393. package/src/auth/magicLink/types.ts +28 -3
  394. package/src/auth/newUsers.ts +1 -0
  395. package/src/backgroundSweepConfigUnits.ts +213 -0
  396. package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +2 -1
  397. package/src/config.ts +69 -0
  398. package/src/context.ts +46 -15
  399. package/src/coreRoutes.ts +14 -7
  400. package/src/generated/graphql-schemas/__mj.ts +10360 -6479
  401. package/src/generic/OrphanedConversationDetailReconciler.ts +32 -1
  402. package/src/generic/ResolverBase.ts +422 -143
  403. package/src/generic/RunViewResolver.ts +96 -49
  404. package/src/globalCors.ts +1 -0
  405. package/src/index.ts +246 -44
  406. package/src/integration/ConnectionPause.ts +222 -0
  407. package/src/integration/CustomColumnPromoter.ts +123 -53
  408. package/src/integration/EntityMapLifecycle.ts +229 -6
  409. package/src/integration/InactiveRowWarnings.ts +50 -0
  410. package/src/integration/ObjectNamesByID.ts +97 -0
  411. package/src/integration/PostRestartIntrospect.ts +49 -0
  412. package/src/integration/RSUPostRestartProgress.ts +359 -0
  413. package/src/integration/RSUProgressBridge.ts +85 -2
  414. package/src/integration/RunArtifactAuthorization.ts +65 -0
  415. package/src/integration/SchemaRefreshLaunch.ts +12 -2
  416. package/src/integration/ScopedFieldsForBuild.ts +113 -0
  417. package/src/integration/TargetConfigGuard.ts +71 -0
  418. package/src/logging/StartupLogger.ts +24 -0
  419. package/src/middleware/BaseServerMiddleware.ts +20 -3
  420. package/src/realtimeSessions/ownedRealtimeSession.ts +2 -6
  421. package/src/realtimeSessions/sessionAccess.ts +30 -0
  422. package/src/realtimeWidget/WidgetSessionService.ts +2 -0
  423. package/src/realtimeWidget/visitorIdentity.ts +1 -0
  424. package/src/realtimeWidget/widgetCore.ts +4 -8
  425. package/src/realtimeWidget/widgetGuestElevation.ts +1 -0
  426. package/src/requestOrigin.ts +64 -0
  427. package/src/resolvers/AgentRunStatusPublisher.ts +27 -2
  428. package/src/resolvers/AgentSessionResolver.ts +6 -2
  429. package/src/resolvers/AutotagPipelineResolver.ts +59 -14
  430. package/src/resolvers/ConversationRunEventsResolver.ts +2 -0
  431. package/src/resolvers/ExecuteRemoteOperationResolver.ts +41 -9
  432. package/src/resolvers/GetDataResolver.ts +35 -13
  433. package/src/resolvers/InfoResolver.ts +1 -1
  434. package/src/resolvers/IntegrationDiscoveryResolver.ts +1522 -203
  435. package/src/resolvers/MCPResolver.ts +15 -2
  436. package/src/resolvers/QuerySystemUserResolver.ts +211 -100
  437. package/src/resolvers/RealtimeBridgeResolver.ts +1 -0
  438. package/src/resolvers/RealtimeClientSessionResolver.ts +40 -7
  439. package/src/resolvers/RemoteBrowserActionResolver.ts +242 -32
  440. package/src/resolvers/RunAIAgentResolver.ts +265 -86
  441. package/src/resolvers/RunAIPromptResolver.ts +18 -18
  442. package/src/resolvers/RunTemplateResolver.ts +3 -1
  443. package/src/resolvers/SqlLoggingConfigResolver.ts +7 -9
  444. package/src/resolvers/TagGovernanceResolver.ts +65 -0
  445. package/src/resolvers/TelemetryResolver.ts +44 -9
  446. package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +52 -0
  447. package/src/resolvers/meetingRecordingRegistration.ts +2 -0
  448. package/src/resolvers/meetings/meetingMutations.ts +37 -7
  449. package/src/rest/MediaAccessKeys.ts +6 -2
  450. package/src/rest/OAuthCallbackHandler.ts +13 -5
  451. package/src/rest/RealtimeRecordingHandler.ts +5 -9
  452. package/src/rest/ViewOperationsHandler.ts +2 -1
  453. package/src/rest/setupRESTEndpoints.ts +11 -2
  454. package/src/services/DurableEntityActionTaskSubmitter.ts +10 -2
  455. package/src/services/TaskGraphActionRunner.ts +2 -23
  456. package/src/services/TaskGraphAgentRunner.ts +43 -0
  457. package/src/services/TaskGraphContinuationDeliverer.ts +1 -0
  458. package/src/services/WorkQueueHostService.ts +26 -4
  459. package/src/services/workQueueConfig.ts +5 -5
  460. package/src/sharedCache.ts +1 -1
  461. package/src/types.ts +18 -0
  462. package/src/util.ts +55 -3
  463. package/src/services/TaskOrchestration-Integration.md +0 -188
@@ -1,4 +1,5 @@
1
1
  import { IMetadataProvider, UserInfo } from '@memberjunction/core';
2
+ import { type BridgeReconcilerSettings } from '../backgroundSweepConfigUnits.js';
2
3
  /**
3
4
  * Gives the realtime bridge engine (`AIBridgeEngine`) this MJAPI instance's identity, the one its agent-session rows
4
5
  * carry: `hostname:port:pid:bootId` ({@link GetCurrentHostInstance}). The engine stamps it into the `HostInstanceID`
@@ -11,8 +12,11 @@ import { IMetadataProvider, UserInfo } from '@memberjunction/core';
11
12
  */
12
13
  export declare function BindBridgeEngineHostInstance(): void;
13
14
  /**
14
- * Starts the realtime bridge engine's orphan reconcile: now, then every 10 minutes, it closes the bridges an earlier
15
- * boot of this instance left `Connecting` or `Connected` (reason `Janitor`) and finalizes their co-agent runs.
15
+ * Starts the realtime bridge engine's orphan reconcile: now, then every `settings.sweepIntervalMs` (10 minutes by
16
+ * default), it closes the bridges an earlier boot of this instance left `Connecting` or `Connected` (reason `Janitor`)
17
+ * and finalizes their co-agent runs. With `settings.enabled` false it reconciles once now and schedules no repeat, so an
18
+ * idle server sends no periodic queries for it (`agentSessions.bridgeReconciler`; see the Serverless Database
19
+ * Auto-Pause guide).
16
20
  *
17
21
  * `Serve` calls it once the server listens on its port, where it starts the session janitor. Holding the port is what
18
22
  * makes another boot of this instance a process that has ended; before that, an MJAPI started on a port another MJAPI
@@ -20,6 +24,7 @@ export declare function BindBridgeEngineHostInstance(): void;
20
24
  *
21
25
  * @param provider The server's metadata provider, for the reads and writes.
22
26
  * @param systemUser The user the writes run as.
27
+ * @param settings Whether to repeat the reconcile, and how often. Defaults to the shipped settings.
23
28
  */
24
- export declare function StartBridgeOrphanReconciliation(provider: IMetadataProvider, systemUser: UserInfo): void;
29
+ export declare function StartBridgeOrphanReconciliation(provider: IMetadataProvider, systemUser: UserInfo, settings?: BridgeReconcilerSettings): void;
25
30
  //# sourceMappingURL=BridgeHostInstance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BridgeHostInstance.d.ts","sourceRoot":"","sources":["../../src/agentSessions/BridgeHostInstance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAInE;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,CAEvG"}
1
+ {"version":3,"file":"BridgeHostInstance.d.ts","sourceRoot":"","sources":["../../src/agentSessions/BridgeHostInstance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG7E,OAAO,EAAsC,KAAK,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAErH;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,+BAA+B,CAC3C,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,QAAQ,EACpB,QAAQ,GAAE,wBAA6D,GACxE,IAAI,CAQN"}
@@ -1,5 +1,7 @@
1
+ import { LogError } from '@memberjunction/core';
1
2
  import { AIBridgeEngine } from '@memberjunction/ai-bridge-server';
2
3
  import { GetCurrentHostInstance } from './HostInstance.js';
4
+ import { DEFAULT_BRIDGE_RECONCILER_SETTINGS } from '../backgroundSweepConfigUnits.js';
3
5
  /**
4
6
  * Gives the realtime bridge engine (`AIBridgeEngine`) this MJAPI instance's identity, the one its agent-session rows
5
7
  * carry: `hostname:port:pid:bootId` ({@link GetCurrentHostInstance}). The engine stamps it into the `HostInstanceID`
@@ -14,8 +16,11 @@ export function BindBridgeEngineHostInstance() {
14
16
  AIBridgeEngine.Instance.SetHostInstanceIdentity(GetCurrentHostInstance());
15
17
  }
16
18
  /**
17
- * Starts the realtime bridge engine's orphan reconcile: now, then every 10 minutes, it closes the bridges an earlier
18
- * boot of this instance left `Connecting` or `Connected` (reason `Janitor`) and finalizes their co-agent runs.
19
+ * Starts the realtime bridge engine's orphan reconcile: now, then every `settings.sweepIntervalMs` (10 minutes by
20
+ * default), it closes the bridges an earlier boot of this instance left `Connecting` or `Connected` (reason `Janitor`)
21
+ * and finalizes their co-agent runs. With `settings.enabled` false it reconciles once now and schedules no repeat, so an
22
+ * idle server sends no periodic queries for it (`agentSessions.bridgeReconciler`; see the Serverless Database
23
+ * Auto-Pause guide).
19
24
  *
20
25
  * `Serve` calls it once the server listens on its port, where it starts the session janitor. Holding the port is what
21
26
  * makes another boot of this instance a process that has ended; before that, an MJAPI started on a port another MJAPI
@@ -23,8 +28,13 @@ export function BindBridgeEngineHostInstance() {
23
28
  *
24
29
  * @param provider The server's metadata provider, for the reads and writes.
25
30
  * @param systemUser The user the writes run as.
31
+ * @param settings Whether to repeat the reconcile, and how often. Defaults to the shipped settings.
26
32
  */
27
- export function StartBridgeOrphanReconciliation(provider, systemUser) {
28
- AIBridgeEngine.Instance.StartOrphanReconciliation(systemUser, provider);
33
+ export function StartBridgeOrphanReconciliation(provider, systemUser, settings = DEFAULT_BRIDGE_RECONCILER_SETTINGS) {
34
+ if (settings.enabled) {
35
+ AIBridgeEngine.Instance.StartOrphanReconciliation(systemUser, provider, settings.sweepIntervalMs);
36
+ return;
37
+ }
38
+ void AIBridgeEngine.Instance.ReconcileOrphans(systemUser, provider).catch((err) => LogError(`[AIBridgeEngine] orphan reconciliation failed: ${err instanceof Error ? err.message : String(err)}`));
29
39
  }
30
40
  //# sourceMappingURL=BridgeHostInstance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BridgeHostInstance.js","sourceRoot":"","sources":["../../src/agentSessions/BridgeHostInstance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B;IACxC,cAAc,CAAC,QAAQ,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,+BAA+B,CAAC,QAA2B,EAAE,UAAoB;IAC7F,cAAc,CAAC,QAAQ,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"BridgeHostInstance.js","sourceRoot":"","sources":["../../src/agentSessions/BridgeHostInstance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,kCAAkC,EAAiC,MAAM,kCAAkC,CAAC;AAErH;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B;IACxC,cAAc,CAAC,QAAQ,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,+BAA+B,CAC3C,QAA2B,EAC3B,UAAoB,EACpB,WAAqC,kCAAkC;IAEvE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,cAAc,CAAC,QAAQ,CAAC,yBAAyB,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;QAClG,OAAO;IACX,CAAC;IACD,KAAK,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9E,QAAQ,CAAC,kDAAkD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CACjH,CAAC;AACN,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { HandoffOfferSweepSettings } from '../backgroundSweepConfigUnits.js';
2
+ /**
3
+ * Applies `agentSessions.handoffOfferExpiry` to the process-wide handoff offer registry. The registry
4
+ * starts its expiry sweep (a read of `MJ: Interaction Offers` every 15 seconds) as soon as it loads, on
5
+ * every MJAPI whatever its role; this either stops that sweep, so an idle server sends no periodic
6
+ * query for it, or restarts it on the configured interval. Overdue offers still read as expired when
7
+ * the sweep is off. See the Serverless Database Auto-Pause guide.
8
+ */
9
+ export declare function ApplyHandoffOfferExpirySettings(settings: HandoffOfferSweepSettings): void;
10
+ //# sourceMappingURL=HandoffOfferExpiry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HandoffOfferExpiry.d.ts","sourceRoot":"","sources":["../../src/agentSessions/HandoffOfferExpiry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAElF;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI,CAOzF"}
@@ -0,0 +1,18 @@
1
+ import { HandoffOfferRegistry } from '@memberjunction/livekit-room-server';
2
+ /**
3
+ * Applies `agentSessions.handoffOfferExpiry` to the process-wide handoff offer registry. The registry
4
+ * starts its expiry sweep (a read of `MJ: Interaction Offers` every 15 seconds) as soon as it loads, on
5
+ * every MJAPI whatever its role; this either stops that sweep, so an idle server sends no periodic
6
+ * query for it, or restarts it on the configured interval. Overdue offers still read as expired when
7
+ * the sweep is off. See the Serverless Database Auto-Pause guide.
8
+ */
9
+ export function ApplyHandoffOfferExpirySettings(settings) {
10
+ const registry = HandoffOfferRegistry.Instance;
11
+ if (settings.enabled) {
12
+ registry.StartPeriodicSweep(settings.sweepIntervalMs);
13
+ }
14
+ else {
15
+ registry.StopPeriodicSweep();
16
+ }
17
+ }
18
+ //# sourceMappingURL=HandoffOfferExpiry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HandoffOfferExpiry.js","sourceRoot":"","sources":["../../src/agentSessions/HandoffOfferExpiry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAG3E;;;;;;GAMG;AACH,MAAM,UAAU,+BAA+B,CAAC,QAAmC;IAC/E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC;IAC/C,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACJ,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;AACL,CAAC"}
@@ -114,6 +114,7 @@ async function recapAlreadyExists(conversationId, contextUser) {
114
114
  ExtraFilter: `SourceConversationID = '${conversationId}' AND IsAutoGenerated = 1 AND Type = 'Context'`,
115
115
  Fields: ['ID'],
116
116
  MaxRows: 1,
117
+ SkipTotalRowCount: true,
117
118
  ResultType: 'simple',
118
119
  }, contextUser);
119
120
  return result.Success && (result.Results?.length ?? 0) > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"ReturningVisitorRecap.js","sourceRoot":"","sources":["../../src/agentSessions/ReturningVisitorRecap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReturningVisitorRecap.js","sourceRoot":"","sources":["../../src/agentSessions/ReturningVisitorRecap.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { BaseSingleton, IShutdownable } from '@memberjunction/global';
2
2
  import { DatabaseProviderBase, IMetadataProvider, UserInfo } from '@memberjunction/core';
3
3
  import { HostInstanceIdentity } from './HostInstance.js';
4
+ import type { SessionJanitorSettings } from '../backgroundSweepConfigUnits.js';
4
5
  /** Tuning knobs for the janitor. All durations in their named units. */
5
6
  export interface SessionJanitorConfig {
6
7
  /** A non-`Closed` session whose `LastActiveAt` is older than this is force-closed by the global sweep. */
@@ -39,9 +40,12 @@ export interface SessionJanitorConfig {
39
40
  * `closeThresholdMinutes`, regardless of host. Catches sessions whose owner died without a clean
40
41
  * reboot (OOM, scaled-down pod).
41
42
  * 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
+ * staleness sweep. Closes any session past its stored hard deadline (the public voice cost cap), and
44
+ * any deadline-carrying session whose idle moment has passed; it stamps that row `'Idle'` when the idle
45
+ * moment came before the deadline.
43
46
  *
44
- * The close sweeps stamp `CloseReason = 'Janitor'`. A shutdown-time path — {@link RunShutdownDrain},
47
+ * Startup recovery stamps `CloseReason = 'Janitor'`; the staleness and max-duration sweeps stamp `'Idle'` or
48
+ * `'TimeLimit'`, whichever expiry moment passed first ({@link ExpiryCloseReason}). A shutdown-time path — {@link RunShutdownDrain},
45
49
  * invoked from {@link Shutdown} during the graceful ShutdownRegistry drain — closes this exact host
46
50
  * instance's own live sessions with `CloseReason = 'Shutdown'`.
47
51
  *
@@ -112,6 +116,21 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
112
116
  * recording recovery calls the shard ledger's stored procedures.
113
117
  */
114
118
  Start(provider: DatabaseProviderBase, systemUser: UserInfo, intervalMs?: number): Promise<void>;
119
+ /**
120
+ * Starts the janitor the way the host's `agentSessions.janitor` settings ask: applies the interval
121
+ * and close threshold, then {@link Start} when enabled, or {@link StartRecoveryOnly} when not.
122
+ * Throws (before doing any work) on an invalid interval or threshold; see {@link Configure}.
123
+ */
124
+ StartWithSettings(settings: SessionJanitorSettings, provider: DatabaseProviderBase, systemUser: UserInfo): Promise<void>;
125
+ /**
126
+ * {@link Start} without the periodic tick, for hosts that turned the janitor off: run own-host
127
+ * startup recovery once and register for the graceful-shutdown drain, but schedule nothing, so an
128
+ * idle process issues no periodic queries. Stale-session, max-duration and recording-recovery
129
+ * sweeps then do not run in this process. Stops a tick an earlier {@link Start} scheduled.
130
+ */
131
+ StartRecoveryOnly(provider: DatabaseProviderBase, systemUser: UserInfo): Promise<void>;
132
+ /** Whether the periodic tick is currently scheduled (diagnostics and tests). */
133
+ get IsSweepScheduled(): boolean;
115
134
  /**
116
135
  * Stops the periodic tick and keeps any new recording recovery pass from starting until the next
117
136
  * {@link Start}, including one a tick already in progress would have started. A pass that is already
@@ -122,7 +141,7 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
122
141
  * {@link IShutdownable}: stop the timer, then drain this host's own live sessions so a
123
142
  * graceful stop never strands `Active`/`Idle` rows for the next boot's janitor to mop up, then wait
124
143
  * (at most {@link RECOVERY_SHUTDOWN_WAIT_MS}) for an in-flight recording recovery pass.
125
- * Drained sessions are stamped `CloseReason = 'Shutdown'` (vs. `'Janitor'` for crash orphans),
144
+ * Drained sessions are stamped `CloseReason = 'Shutdown'` (vs. `'Janitor'` for crash orphans from an earlier boot),
126
145
  * so the dashboards can tell a clean redeploy from a reconciled crash. Never throws; the drain
127
146
  * is skipped when {@link Start} was never called (no captured provider/user).
128
147
  */
@@ -147,7 +166,10 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
147
166
  RunStartupRecovery(provider: IMetadataProvider, systemUser: UserInfo, hostInstance?: HostInstanceIdentity): Promise<number>;
148
167
  /**
149
168
  * Force-close any `Active`/`Idle` session whose `LastActiveAt` is older than the configured
150
- * close threshold, regardless of host. Idempotent and concurrency-safe. Returns the count closed.
169
+ * close threshold, regardless of host. Stamped `'Idle'`, or `'TimeLimit'` when the row's authored deadline
170
+ * passed before its idle moment ({@link ExpiryCloseReason}). A row the SQL judged stale is never skipped:
171
+ * when its `LastActiveAt` will not parse it closes as `'Idle'` with a `LogError` ({@link staleRowCloseReason}).
172
+ * Idempotent and concurrency-safe. Returns the count closed.
151
173
  */
152
174
  RunStalenessSweep(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
153
175
  /**
@@ -158,7 +180,8 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
158
180
  *
159
181
  * Only sessions that CARRY a deadline are loaded (a cheap `Config_ LIKE` pre-filter), then the exact
160
182
  * ISO deadline is parsed and compared in JS (`Config_` is JSON, not a queryable column). Stamped
161
- * `CloseReason = 'Janitor'`, idempotent + concurrency-safe like the other sweeps. Returns the count closed.
183
+ * `'TimeLimit'`, or `'Idle'` when the row's idle moment passed before its deadline ({@link ExpiryCloseReason});
184
+ * idempotent + concurrency-safe like the other sweeps. Returns the count closed.
162
185
  */
163
186
  RunMaxDurationSweep(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
164
187
  /**
@@ -235,8 +258,6 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
235
258
  * window, which no sweep assembles any more. Never throws: a failure is logged and retried next pass.
236
259
  */
237
260
  private purgeExpiredLedgerShards;
238
- /** Parses the absolute deadline (ms) from a session's `Config_` JSON, or null when absent/malformed. */
239
- private parseSessionDeadlineMs;
240
261
  /** Register for graceful shutdown exactly once. */
241
262
  private ensureRegistered;
242
263
  /** Schedule the periodic sweep tick (close sweeps + recording recovery), exactly once. Timer is unref'd so it never blocks exit. */
@@ -295,7 +316,9 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
295
316
  private recordRecoveryFailure;
296
317
  /**
297
318
  * Page through every session matching `filter` with keyset (`AfterKey`) pagination and close each
298
- * via {@link SessionManager.CloseSession}, stamping `closeReason` on every row it transitions.
319
+ * via {@link SessionManager.CloseSession}, stamping the reason `reasonFor` returns for that row.
320
+ * A `null` reason skips the row (the SQL filter only narrows; `reasonFor` decides), and skipped rows
321
+ * are dropped before the channel batch load so it covers only rows that will close.
299
322
  * Returns the number successfully closed. A `Closed`-by-now row (raced by another instance) is a
300
323
  * harmless no-op that keeps its original reason.
301
324
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionJanitor.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionJanitor.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { CompositeKey, RunView, LogError, LogStatus, } from '@memberjunction/cor
3
3
  import { AssembleRealtimeRecordingFromLedger, RecoverRealtimeRecordingFromSegments, ResolveRecordingStorageAccountID, SqlRealtimeRecordingLedger, } from '@memberjunction/ai-agents';
4
4
  import { GetCurrentHostInstance, GetHostInstanceID } from './HostInstance.js';
5
5
  import { SessionManager } from './SessionManager.js';
6
+ import { ExpiryCloseReason } from './sessionDeadline.js';
6
7
  /** Entity name for session rows (kept in sync with {@link SessionManager}). */
7
8
  const SESSION_ENTITY = 'MJ: AI Agent Sessions';
8
9
  /** Rows fetched per keyset page during a sweep. Small enough to bound memory on a large backlog. */
@@ -113,6 +114,21 @@ class RecoveryBackoffTracker {
113
114
  }
114
115
  }
115
116
  }
117
+ /**
118
+ * The close reason for a row the staleness sweep's SQL already judged stale (`LastActiveAt < cutoff`).
119
+ * {@link ExpiryCloseReason} returns null for such a row only when `LastActiveAt` will not parse (or the
120
+ * threshold is non-finite); skipping it would leave it `Active` forever, so it closes as `'Idle'` and the
121
+ * fallback is logged with the session ID.
122
+ */
123
+ function staleRowCloseReason(session, nowMs, thresholdMs) {
124
+ const reason = ExpiryCloseReason(session, nowMs, thresholdMs);
125
+ if (reason !== null) {
126
+ return reason;
127
+ }
128
+ LogError(`[SessionJanitor] Staleness sweep: session ${session.ID} has LastActiveAt ${String(session.LastActiveAt)}; ` +
129
+ 'LastActiveAt unparseable; closing as Idle');
130
+ return 'Idle';
131
+ }
116
132
  /**
117
133
  * `BaseSingleton` background reconciler that keeps the durable `AIAgentSession` state from drifting
118
134
  * away from volatile process reality. A crash/redeploy vaporizes a host's in-memory sockets but
@@ -130,9 +146,12 @@ class RecoveryBackoffTracker {
130
146
  * `closeThresholdMinutes`, regardless of host. Catches sessions whose owner died without a clean
131
147
  * reboot (OOM, scaled-down pod).
132
148
  * 3. **Max-duration sweep ({@link RunMaxDurationSweep})** — run on every periodic tick after the
133
- * staleness sweep. Closes any session past its stored hard deadline (the public voice cost cap).
149
+ * staleness sweep. Closes any session past its stored hard deadline (the public voice cost cap), and
150
+ * any deadline-carrying session whose idle moment has passed; it stamps that row `'Idle'` when the idle
151
+ * moment came before the deadline.
134
152
  *
135
- * The close sweeps stamp `CloseReason = 'Janitor'`. A shutdown-time path — {@link RunShutdownDrain},
153
+ * Startup recovery stamps `CloseReason = 'Janitor'`; the staleness and max-duration sweeps stamp `'Idle'` or
154
+ * `'TimeLimit'`, whichever expiry moment passed first ({@link ExpiryCloseReason}). A shutdown-time path — {@link RunShutdownDrain},
136
155
  * invoked from {@link Shutdown} during the graceful ShutdownRegistry drain — closes this exact host
137
156
  * instance's own live sessions with `CloseReason = 'Shutdown'`.
138
157
  *
@@ -230,6 +249,37 @@ export class SessionJanitor extends BaseSingleton {
230
249
  await this.RunStartupRecovery(provider, systemUser);
231
250
  this.scheduleSweep();
232
251
  }
252
+ /**
253
+ * Starts the janitor the way the host's `agentSessions.janitor` settings ask: applies the interval
254
+ * and close threshold, then {@link Start} when enabled, or {@link StartRecoveryOnly} when not.
255
+ * Throws (before doing any work) on an invalid interval or threshold; see {@link Configure}.
256
+ */
257
+ async StartWithSettings(settings, provider, systemUser) {
258
+ this.Configure({ sweepIntervalMs: settings.sweepIntervalMs, closeThresholdMinutes: settings.closeThresholdMinutes });
259
+ if (settings.enabled) {
260
+ await this.Start(provider, systemUser);
261
+ }
262
+ else {
263
+ await this.StartRecoveryOnly(provider, systemUser);
264
+ }
265
+ }
266
+ /**
267
+ * {@link Start} without the periodic tick, for hosts that turned the janitor off: run own-host
268
+ * startup recovery once and register for the graceful-shutdown drain, but schedule nothing, so an
269
+ * idle process issues no periodic queries. Stale-session, max-duration and recording-recovery
270
+ * sweeps then do not run in this process. Stops a tick an earlier {@link Start} scheduled.
271
+ */
272
+ async StartRecoveryOnly(provider, systemUser) {
273
+ this.Stop();
274
+ this._provider = provider;
275
+ this._systemUser = systemUser;
276
+ this.ensureRegistered();
277
+ await this.RunStartupRecovery(provider, systemUser);
278
+ }
279
+ /** Whether the periodic tick is currently scheduled (diagnostics and tests). */
280
+ get IsSweepScheduled() {
281
+ return this._sweepTimer !== null;
282
+ }
233
283
  /**
234
284
  * Stops the periodic tick and keeps any new recording recovery pass from starting until the next
235
285
  * {@link Start}, including one a tick already in progress would have started. A pass that is already
@@ -246,7 +296,7 @@ export class SessionJanitor extends BaseSingleton {
246
296
  * {@link IShutdownable}: stop the timer, then drain this host's own live sessions so a
247
297
  * graceful stop never strands `Active`/`Idle` rows for the next boot's janitor to mop up, then wait
248
298
  * (at most {@link RECOVERY_SHUTDOWN_WAIT_MS}) for an in-flight recording recovery pass.
249
- * Drained sessions are stamped `CloseReason = 'Shutdown'` (vs. `'Janitor'` for crash orphans),
299
+ * Drained sessions are stamped `CloseReason = 'Shutdown'` (vs. `'Janitor'` for crash orphans from an earlier boot),
250
300
  * so the dashboards can tell a clean redeploy from a reconciled crash. Never throws; the drain
251
301
  * is skipped when {@link Start} was never called (no captured provider/user).
252
302
  */
@@ -271,7 +321,7 @@ export class SessionJanitor extends BaseSingleton {
271
321
  async RunShutdownDrain(provider, systemUser) {
272
322
  const current = GetHostInstanceID().replace(/'/g, "''");
273
323
  const filter = `Status IN ('Active','Idle') AND HostInstanceID = '${current}'`;
274
- const closed = await this.sweepAndClose(filter, provider, systemUser, 'Shutdown');
324
+ const closed = await this.sweepAndClose(filter, provider, systemUser, () => 'Shutdown');
275
325
  if (closed > 0) {
276
326
  LogStatus(`[SessionJanitor] Shutdown drain closed ${closed} live session(s) owned by this host instance`);
277
327
  }
@@ -294,8 +344,8 @@ export class SessionJanitor extends BaseSingleton {
294
344
  `AND HostInstanceID LIKE '${prefix}%' ` +
295
345
  `AND HostInstanceID <> '${current}'`;
296
346
  // The LIKE narrows the read; the exact check decides, since LIKE reads a `_` in a host name as any character.
297
- const isPriorBoot = (session) => hostInstance.IsPriorBoot(session.HostInstanceID);
298
- const closed = await this.sweepAndClose(filter, provider, systemUser, 'Janitor', isPriorBoot);
347
+ const reasonFor = (session) => hostInstance.IsPriorBoot(session.HostInstanceID) ? 'Janitor' : null;
348
+ const closed = await this.sweepAndClose(filter, provider, systemUser, reasonFor);
299
349
  if (closed > 0) {
300
350
  LogStatus(`[SessionJanitor] Startup recovery closed ${closed} orphaned session(s) from an earlier boot of this instance ` +
301
351
  `(${hostInstance.GetInstancePrefix()})`);
@@ -304,12 +354,18 @@ export class SessionJanitor extends BaseSingleton {
304
354
  }
305
355
  /**
306
356
  * Force-close any `Active`/`Idle` session whose `LastActiveAt` is older than the configured
307
- * close threshold, regardless of host. Idempotent and concurrency-safe. Returns the count closed.
357
+ * close threshold, regardless of host. Stamped `'Idle'`, or `'TimeLimit'` when the row's authored deadline
358
+ * passed before its idle moment ({@link ExpiryCloseReason}). A row the SQL judged stale is never skipped:
359
+ * when its `LastActiveAt` will not parse it closes as `'Idle'` with a `LogError` ({@link staleRowCloseReason}).
360
+ * Idempotent and concurrency-safe. Returns the count closed.
308
361
  */
309
362
  async RunStalenessSweep(provider, systemUser) {
310
- const cutoffIso = new Date(Date.now() - this._config.closeThresholdMinutes * 60_000).toISOString();
363
+ // One clock read feeds both the SQL cutoff and the per-row decision, so they cannot disagree.
364
+ const nowMs = Date.now();
365
+ const thresholdMs = this._config.closeThresholdMinutes * 60_000;
366
+ const cutoffIso = new Date(nowMs - thresholdMs).toISOString();
311
367
  const filter = `Status IN ('Active','Idle') AND LastActiveAt < '${cutoffIso}'`;
312
- const closed = await this.sweepAndClose(filter, provider, systemUser, 'Janitor');
368
+ const closed = await this.sweepAndClose(filter, provider, systemUser, s => staleRowCloseReason(s, nowMs, thresholdMs));
313
369
  if (closed > 0) {
314
370
  LogStatus(`[SessionJanitor] Staleness sweep closed ${closed} stale session(s) (>${this._config.closeThresholdMinutes}m idle)`);
315
371
  }
@@ -323,20 +379,18 @@ export class SessionJanitor extends BaseSingleton {
323
379
  *
324
380
  * Only sessions that CARRY a deadline are loaded (a cheap `Config_ LIKE` pre-filter), then the exact
325
381
  * ISO deadline is parsed and compared in JS (`Config_` is JSON, not a queryable column). Stamped
326
- * `CloseReason = 'Janitor'`, idempotent + concurrency-safe like the other sweeps. Returns the count closed.
382
+ * `'TimeLimit'`, or `'Idle'` when the row's idle moment passed before its deadline ({@link ExpiryCloseReason});
383
+ * idempotent + concurrency-safe like the other sweeps. Returns the count closed.
327
384
  */
328
385
  async RunMaxDurationSweep(provider, systemUser) {
329
386
  const nowMs = Date.now();
330
387
  // Only consider sessions that carry a deadline marker — keeps this sweep cheap (it never touches
331
388
  // the far-more-common uncapped sessions) while the JS check below enforces the exact deadline.
332
389
  const filter = `Status IN ('Active','Idle') AND Config LIKE '%maxSessionDeadlineIso%'`;
333
- const isExpired = (session) => {
334
- const deadlineMs = this.parseSessionDeadlineMs(session.Config_);
335
- return deadlineMs != null && deadlineMs <= nowMs;
336
- };
337
- const closed = await this.sweepAndClose(filter, provider, systemUser, 'Janitor', isExpired);
390
+ const thresholdMs = this._config.closeThresholdMinutes * 60_000;
391
+ const closed = await this.sweepAndClose(filter, provider, systemUser, s => ExpiryCloseReason(s, nowMs, thresholdMs));
338
392
  if (closed > 0) {
339
- LogStatus(`[SessionJanitor] Max-duration sweep closed ${closed} session(s) past their hard duration cap`);
393
+ LogStatus(`[SessionJanitor] Max-duration sweep closed ${closed} capped session(s) past their deadline or idle threshold`);
340
394
  }
341
395
  return closed;
342
396
  }
@@ -563,23 +617,6 @@ export class SessionJanitor extends BaseSingleton {
563
617
  `${err instanceof Error ? err.message : String(err)}`);
564
618
  }
565
619
  }
566
- /** Parses the absolute deadline (ms) from a session's `Config_` JSON, or null when absent/malformed. */
567
- parseSessionDeadlineMs(configJson) {
568
- if (!configJson) {
569
- return null;
570
- }
571
- try {
572
- const parsed = JSON.parse(configJson);
573
- if (typeof parsed.maxSessionDeadlineIso !== 'string') {
574
- return null;
575
- }
576
- const ms = Date.parse(parsed.maxSessionDeadlineIso);
577
- return Number.isNaN(ms) ? null : ms;
578
- }
579
- catch {
580
- return null;
581
- }
582
- }
583
620
  // ----- internals -------------------------------------------------------------------------
584
621
  /** Register for graceful shutdown exactly once. */
585
622
  ensureRegistered() {
@@ -830,24 +867,31 @@ export class SessionJanitor extends BaseSingleton {
830
867
  }
831
868
  /**
832
869
  * Page through every session matching `filter` with keyset (`AfterKey`) pagination and close each
833
- * via {@link SessionManager.CloseSession}, stamping `closeReason` on every row it transitions.
870
+ * via {@link SessionManager.CloseSession}, stamping the reason `reasonFor` returns for that row.
871
+ * A `null` reason skips the row (the SQL filter only narrows; `reasonFor` decides), and skipped rows
872
+ * are dropped before the channel batch load so it covers only rows that will close.
834
873
  * Returns the number successfully closed. A `Closed`-by-now row (raced by another instance) is a
835
874
  * harmless no-op that keeps its original reason.
836
875
  */
837
- async sweepAndClose(filter, provider, systemUser, closeReason, shouldClose) {
876
+ async sweepAndClose(filter, provider, systemUser, reasonFor) {
838
877
  let closedCount = 0;
839
878
  await this.forEachSessionPage(filter, provider, systemUser, async (fetched) => {
840
- // Optional in-JS narrowing (e.g. exact deadline check the SQL pre-filter can't express).
841
- const page = shouldClose ? fetched.filter(shouldClose) : fetched;
842
- if (page.length === 0) {
879
+ const toClose = [];
880
+ for (const session of fetched) {
881
+ const reason = reasonFor(session);
882
+ if (reason !== null) {
883
+ toClose.push({ session, reason });
884
+ }
885
+ }
886
+ if (toClose.length === 0) {
843
887
  return;
844
888
  }
845
889
  // Batch-load every channel for this whole page of sessions in ONE query, then hand each
846
890
  // session its own slice to CloseSession — avoids the N+1 channel read (one RunView per
847
891
  // closing session) that tripped the sequential / multiple-same-entity telemetry.
848
- const channelsBySession = await this.sessionManager.LoadActiveChannelsBySession(page.map(s => s.ID), systemUser, provider);
849
- for (const session of page) {
850
- const closed = await this.sessionManager.CloseSession(session.ID, systemUser, provider, closeReason, channelsBySession.get(session.ID.toLowerCase()) ?? []);
892
+ const channelsBySession = await this.sessionManager.LoadActiveChannelsBySession(toClose.map(c => c.session.ID), systemUser, provider);
893
+ for (const { session, reason } of toClose) {
894
+ const closed = await this.sessionManager.CloseSession(session.ID, systemUser, provider, reason, channelsBySession.get(session.ID.toLowerCase()) ?? []);
851
895
  if (closed) {
852
896
  closedCount++;
853
897
  }