@memberjunction/server 6.2.0-edge.3 → 6.2.0-edge.5

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 (543) hide show
  1. package/README.md +20 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/BridgeHostInstance.d.ts +25 -0
  4. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -0
  5. package/dist/agentSessions/BridgeHostInstance.js +30 -0
  6. package/dist/agentSessions/BridgeHostInstance.js.map +1 -0
  7. package/dist/agentSessions/HostInstance.d.ts +75 -11
  8. package/dist/agentSessions/HostInstance.d.ts.map +1 -1
  9. package/dist/agentSessions/HostInstance.js +99 -28
  10. package/dist/agentSessions/HostInstance.js.map +1 -1
  11. package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
  12. package/dist/agentSessions/ReturningVisitorRecap.js +7 -3
  13. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  14. package/dist/agentSessions/SessionJanitor.d.ts +236 -27
  15. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  16. package/dist/agentSessions/SessionJanitor.js +682 -54
  17. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  18. package/dist/agentSessions/SessionManager.d.ts +48 -3
  19. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  20. package/dist/agentSessions/SessionManager.js +112 -9
  21. package/dist/agentSessions/SessionManager.js.map +1 -1
  22. package/dist/agentSessions/SessionRunIDVerifier.d.ts +63 -0
  23. package/dist/agentSessions/SessionRunIDVerifier.d.ts.map +1 -0
  24. package/dist/agentSessions/SessionRunIDVerifier.js +129 -0
  25. package/dist/agentSessions/SessionRunIDVerifier.js.map +1 -0
  26. package/dist/agentSessions/index.d.ts +2 -0
  27. package/dist/agentSessions/index.d.ts.map +1 -1
  28. package/dist/agentSessions/index.js +10 -3
  29. package/dist/agentSessions/index.js.map +1 -1
  30. package/dist/apiRoot.d.ts +32 -0
  31. package/dist/apiRoot.d.ts.map +1 -0
  32. package/dist/apiRoot.js +67 -0
  33. package/dist/apiRoot.js.map +1 -0
  34. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  35. package/dist/auth/AuthProviderCatalogRouter.js +25 -0
  36. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  37. package/dist/auth/LoginScreenEngine.d.ts +22 -0
  38. package/dist/auth/LoginScreenEngine.d.ts.map +1 -0
  39. package/dist/auth/LoginScreenEngine.js +57 -0
  40. package/dist/auth/LoginScreenEngine.js.map +1 -0
  41. package/dist/auth/actionAuthorization.d.ts +40 -0
  42. package/dist/auth/actionAuthorization.d.ts.map +1 -0
  43. package/dist/auth/actionAuthorization.js +94 -0
  44. package/dist/auth/actionAuthorization.js.map +1 -0
  45. package/dist/auth/index.d.ts +1 -0
  46. package/dist/auth/index.d.ts.map +1 -1
  47. package/dist/auth/index.js +4 -10
  48. package/dist/auth/index.js.map +1 -1
  49. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  50. package/dist/auth/magicLink/MagicLinkRouter.js +3 -2
  51. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  52. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  53. package/dist/auth/magicLink/MagicLinkService.js +6 -3
  54. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  55. package/dist/auth/newUsers.d.ts +10 -0
  56. package/dist/auth/newUsers.d.ts.map +1 -1
  57. package/dist/auth/newUsers.js +80 -11
  58. package/dist/auth/newUsers.js.map +1 -1
  59. package/dist/config.d.ts +2514 -22
  60. package/dist/config.d.ts.map +1 -1
  61. package/dist/config.js +166 -4
  62. package/dist/config.js.map +1 -1
  63. package/dist/context.d.ts +8 -0
  64. package/dist/context.d.ts.map +1 -1
  65. package/dist/context.js +14 -11
  66. package/dist/context.js.map +1 -1
  67. package/dist/coreRoutes.d.ts +29 -0
  68. package/dist/coreRoutes.d.ts.map +1 -0
  69. package/dist/coreRoutes.js +142 -0
  70. package/dist/coreRoutes.js.map +1 -0
  71. package/dist/generated/graphql-schemas/__mj.d.ts +504 -3
  72. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  73. package/dist/generated/graphql-schemas/__mj.js +2456 -7
  74. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  75. package/dist/generic/CacheInvalidationResolver.d.ts +43 -8
  76. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  77. package/dist/generic/CacheInvalidationResolver.js +59 -19
  78. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  79. package/dist/generic/OrphanedConversationDetailReconciler.js +3 -3
  80. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  81. package/dist/generic/PushStatusResolver.js +1 -1
  82. package/dist/generic/PushStatusResolver.js.map +1 -1
  83. package/dist/generic/ResolverBase.d.ts +123 -48
  84. package/dist/generic/ResolverBase.d.ts.map +1 -1
  85. package/dist/generic/ResolverBase.js +293 -305
  86. package/dist/generic/ResolverBase.js.map +1 -1
  87. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  88. package/dist/generic/RunViewResolver.js +16 -0
  89. package/dist/generic/RunViewResolver.js.map +1 -1
  90. package/dist/globalCors.d.ts +33 -0
  91. package/dist/globalCors.d.ts.map +1 -0
  92. package/dist/globalCors.js +58 -0
  93. package/dist/globalCors.js.map +1 -0
  94. package/dist/index.d.ts +17 -0
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +219 -278
  97. package/dist/index.js.map +1 -1
  98. package/dist/isolatedProvider.d.ts +20 -0
  99. package/dist/isolatedProvider.d.ts.map +1 -0
  100. package/dist/isolatedProvider.js +22 -0
  101. package/dist/isolatedProvider.js.map +1 -0
  102. package/dist/multiTenancy/index.d.ts.map +1 -1
  103. package/dist/multiTenancy/index.js +22 -2
  104. package/dist/multiTenancy/index.js.map +1 -1
  105. package/dist/realtimeProxy/RealtimeProxyServer.d.ts +44 -4
  106. package/dist/realtimeProxy/RealtimeProxyServer.d.ts.map +1 -1
  107. package/dist/realtimeProxy/RealtimeProxyServer.js +121 -16
  108. package/dist/realtimeProxy/RealtimeProxyServer.js.map +1 -1
  109. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts +171 -0
  110. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts.map +1 -0
  111. package/dist/realtimeProxy/RealtimeRelayTunnel.js +532 -0
  112. package/dist/realtimeProxy/RealtimeRelayTunnel.js.map +1 -0
  113. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts +148 -0
  114. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts.map +1 -0
  115. package/dist/realtimeSessions/RealtimeSessionEventService.js +191 -0
  116. package/dist/realtimeSessions/RealtimeSessionEventService.js.map +1 -0
  117. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts +66 -0
  118. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -0
  119. package/dist/realtimeSessions/RealtimeSessionVerificationService.js +139 -0
  120. package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -0
  121. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts +38 -0
  122. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -0
  123. package/dist/realtimeSessions/RealtimeVerifyRouter.js +99 -0
  124. package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -0
  125. package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts +100 -0
  126. package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts.map +1 -0
  127. package/dist/realtimeSessions/RecordingAssemblyScheduler.js +173 -0
  128. package/dist/realtimeSessions/RecordingAssemblyScheduler.js.map +1 -0
  129. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts +61 -0
  130. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -0
  131. package/dist/realtimeSessions/SessionVerificationPortsBase.js +149 -0
  132. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -0
  133. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts +57 -0
  134. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts.map +1 -0
  135. package/dist/realtimeSessions/SlidingWindowRateLimiter.js +69 -0
  136. package/dist/realtimeSessions/SlidingWindowRateLimiter.js.map +1 -0
  137. package/dist/realtimeSessions/index.d.ts +19 -0
  138. package/dist/realtimeSessions/index.d.ts.map +1 -0
  139. package/dist/realtimeSessions/index.js +19 -0
  140. package/dist/realtimeSessions/index.js.map +1 -0
  141. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +30 -0
  142. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -0
  143. package/dist/realtimeSessions/ownedRealtimeSession.js +47 -0
  144. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -0
  145. package/dist/realtimeSessions/sessionAccess.d.ts +92 -0
  146. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -0
  147. package/dist/realtimeSessions/sessionAccess.js +94 -0
  148. package/dist/realtimeSessions/sessionAccess.js.map +1 -0
  149. package/dist/realtimeSessions/sessionConfigStamps.d.ts +70 -0
  150. package/dist/realtimeSessions/sessionConfigStamps.d.ts.map +1 -0
  151. package/dist/realtimeSessions/sessionConfigStamps.js +93 -0
  152. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -0
  153. package/dist/realtimeSessions/subscriptionAuthorization.d.ts +65 -0
  154. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -0
  155. package/dist/realtimeSessions/subscriptionAuthorization.js +71 -0
  156. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -0
  157. package/dist/realtimeSessions/verificationCore.d.ts +243 -0
  158. package/dist/realtimeSessions/verificationCore.d.ts.map +1 -0
  159. package/dist/realtimeSessions/verificationCore.js +356 -0
  160. package/dist/realtimeSessions/verificationCore.js.map +1 -0
  161. package/dist/realtimeSessions/verificationPages.d.ts +66 -0
  162. package/dist/realtimeSessions/verificationPages.d.ts.map +1 -0
  163. package/dist/realtimeSessions/verificationPages.js +110 -0
  164. package/dist/realtimeSessions/verificationPages.js.map +1 -0
  165. package/dist/realtimeSessions/verificationPolicy.d.ts +147 -0
  166. package/dist/realtimeSessions/verificationPolicy.d.ts.map +1 -0
  167. package/dist/realtimeSessions/verificationPolicy.js +249 -0
  168. package/dist/realtimeSessions/verificationPolicy.js.map +1 -0
  169. package/dist/realtimeSessions/verificationWorkflow.d.ts +263 -0
  170. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -0
  171. package/dist/realtimeSessions/verificationWorkflow.js +435 -0
  172. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -0
  173. package/dist/realtimeWidget/widgetGuestElevation.d.ts +20 -2
  174. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  175. package/dist/realtimeWidget/widgetGuestElevation.js +31 -2
  176. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  177. package/dist/resolvers/ActionResolver.d.ts +31 -5
  178. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  179. package/dist/resolvers/ActionResolver.js +75 -14
  180. package/dist/resolvers/ActionResolver.js.map +1 -1
  181. package/dist/resolvers/AdhocQueryResolver.d.ts +14 -1
  182. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  183. package/dist/resolvers/AdhocQueryResolver.js +21 -5
  184. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  185. package/dist/resolvers/ArtifactFileResolver.d.ts +5 -1
  186. package/dist/resolvers/ArtifactFileResolver.d.ts.map +1 -1
  187. package/dist/resolvers/ArtifactFileResolver.js +9 -7
  188. package/dist/resolvers/ArtifactFileResolver.js.map +1 -1
  189. package/dist/resolvers/CacheStatsResolver.d.ts +27 -0
  190. package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -1
  191. package/dist/resolvers/CacheStatsResolver.js +113 -2
  192. package/dist/resolvers/CacheStatsResolver.js.map +1 -1
  193. package/dist/resolvers/ClientToolRequestResolver.d.ts +4 -2
  194. package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -1
  195. package/dist/resolvers/ClientToolRequestResolver.js +28 -10
  196. package/dist/resolvers/ClientToolRequestResolver.js.map +1 -1
  197. package/dist/resolvers/ConversationRunEventsResolver.d.ts +8 -4
  198. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
  199. package/dist/resolvers/ConversationRunEventsResolver.js +6 -6
  200. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
  201. package/dist/resolvers/DatasetResolver.d.ts +24 -3
  202. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  203. package/dist/resolvers/DatasetResolver.js +57 -8
  204. package/dist/resolvers/DatasetResolver.js.map +1 -1
  205. package/dist/resolvers/EntityRecordNameResolver.d.ts +2 -1
  206. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  207. package/dist/resolvers/EntityRecordNameResolver.js +3 -2
  208. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  209. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +27 -1
  210. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  211. package/dist/resolvers/FetchEntityVectorsResolver.js +148 -2
  212. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  213. package/dist/resolvers/FileResolver.d.ts +82 -11
  214. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  215. package/dist/resolvers/FileResolver.js +279 -101
  216. package/dist/resolvers/FileResolver.js.map +1 -1
  217. package/dist/resolvers/GetDataContextDataResolver.d.ts +33 -7
  218. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  219. package/dist/resolvers/GetDataContextDataResolver.js +117 -38
  220. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  221. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  222. package/dist/resolvers/GetDataResolver.js +6 -3
  223. package/dist/resolvers/GetDataResolver.js.map +1 -1
  224. package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -1
  225. package/dist/resolvers/HumanHandoffResolver.js +7 -1
  226. package/dist/resolvers/HumanHandoffResolver.js.map +1 -1
  227. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  228. package/dist/resolvers/IntegrationDiscoveryResolver.js +4 -2
  229. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  230. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  231. package/dist/resolvers/MCPResolver.js +9 -4
  232. package/dist/resolvers/MCPResolver.js.map +1 -1
  233. package/dist/resolvers/QueryResolver.d.ts +2 -0
  234. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  235. package/dist/resolvers/QueryResolver.js +13 -0
  236. package/dist/resolvers/QueryResolver.js.map +1 -1
  237. package/dist/resolvers/RealtimeBridgeResolver.d.ts +54 -2
  238. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  239. package/dist/resolvers/RealtimeBridgeResolver.js +155 -10
  240. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  241. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +157 -33
  242. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  243. package/dist/resolvers/RealtimeClientSessionResolver.js +404 -116
  244. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  245. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts +61 -0
  246. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts.map +1 -0
  247. package/dist/resolvers/RealtimeSessionEventsResolver.js +130 -0
  248. package/dist/resolvers/RealtimeSessionEventsResolver.js.map +1 -0
  249. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts +85 -0
  250. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts.map +1 -0
  251. package/dist/resolvers/RealtimeSessionVerificationResolver.js +188 -0
  252. package/dist/resolvers/RealtimeSessionVerificationResolver.js.map +1 -0
  253. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +2 -0
  254. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  255. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -1
  256. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  257. package/dist/resolvers/RunAIAgentResolver.d.ts +10 -0
  258. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  259. package/dist/resolvers/RunAIAgentResolver.js +100 -14
  260. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  261. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  262. package/dist/resolvers/RunTemplateResolver.js +12 -11
  263. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  264. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts +12 -1
  265. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts.map +1 -1
  266. package/dist/resolvers/SearchKnowledgeStreamResolver.js +15 -2
  267. package/dist/resolvers/SearchKnowledgeStreamResolver.js.map +1 -1
  268. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  269. package/dist/resolvers/SqlLoggingConfigResolver.js +2 -3
  270. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  271. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  272. package/dist/resolvers/SyncDataResolver.js +6 -2
  273. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  274. package/dist/resolvers/SyncRolesUsersResolver.d.ts +2 -0
  275. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  276. package/dist/resolvers/SyncRolesUsersResolver.js +23 -6
  277. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  278. package/dist/resolvers/TaskGraphFrameResolver.d.ts +2 -1
  279. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
  280. package/dist/resolvers/TaskGraphFrameResolver.js +28 -1
  281. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
  282. package/dist/resolvers/TestQuerySQLResolver.d.ts +24 -0
  283. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  284. package/dist/resolvers/TestQuerySQLResolver.js +65 -13
  285. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  286. package/dist/resolvers/TransactionGroupResolver.d.ts +19 -2
  287. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  288. package/dist/resolvers/TransactionGroupResolver.js +102 -24
  289. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  290. package/dist/resolvers/UserAvatarResolver.d.ts +16 -0
  291. package/dist/resolvers/UserAvatarResolver.d.ts.map +1 -0
  292. package/dist/resolvers/UserAvatarResolver.js +124 -0
  293. package/dist/resolvers/UserAvatarResolver.js.map +1 -0
  294. package/dist/resolvers/UserResolver.d.ts.map +1 -1
  295. package/dist/resolvers/UserResolver.js +2 -17
  296. package/dist/resolvers/UserResolver.js.map +1 -1
  297. package/dist/resolvers/agent-run-data-guard.d.ts +31 -0
  298. package/dist/resolvers/agent-run-data-guard.d.ts.map +1 -0
  299. package/dist/resolvers/agent-run-data-guard.js +72 -0
  300. package/dist/resolvers/agent-run-data-guard.js.map +1 -0
  301. package/dist/resolvers/agentVisionConsentAudit.d.ts +37 -0
  302. package/dist/resolvers/agentVisionConsentAudit.d.ts.map +1 -0
  303. package/dist/resolvers/agentVisionConsentAudit.js +63 -0
  304. package/dist/resolvers/agentVisionConsentAudit.js.map +1 -0
  305. package/dist/resolvers/avatarInputValidation.d.ts +40 -0
  306. package/dist/resolvers/avatarInputValidation.d.ts.map +1 -0
  307. package/dist/resolvers/avatarInputValidation.js +97 -0
  308. package/dist/resolvers/avatarInputValidation.js.map +1 -0
  309. package/dist/resolvers/currentUserRoles.d.ts +29 -0
  310. package/dist/resolvers/currentUserRoles.d.ts.map +1 -1
  311. package/dist/resolvers/currentUserRoles.js +30 -0
  312. package/dist/resolvers/currentUserRoles.js.map +1 -1
  313. package/dist/resolvers/meetings/meetingMutations.d.ts +6 -0
  314. package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -1
  315. package/dist/resolvers/meetings/meetingMutations.js +21 -0
  316. package/dist/resolvers/meetings/meetingMutations.js.map +1 -1
  317. package/dist/rest/RealtimeRecordingHandler.d.ts +49 -0
  318. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -0
  319. package/dist/rest/RealtimeRecordingHandler.js +383 -0
  320. package/dist/rest/RealtimeRecordingHandler.js.map +1 -0
  321. package/dist/rest/ViewOperationsHandler.d.ts +3 -1
  322. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  323. package/dist/rest/ViewOperationsHandler.js +21 -12
  324. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  325. package/dist/rest/setupRESTEndpoints.d.ts +6 -0
  326. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  327. package/dist/rest/setupRESTEndpoints.js +6 -0
  328. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  329. package/dist/serverExtensionReservedRoots.d.ts +12 -10
  330. package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
  331. package/dist/serverExtensionReservedRoots.js +14 -17
  332. package/dist/serverExtensionReservedRoots.js.map +1 -1
  333. package/dist/services/MJStorageBlobStore.d.ts +8 -1
  334. package/dist/services/MJStorageBlobStore.d.ts.map +1 -1
  335. package/dist/services/MJStorageBlobStore.js +25 -19
  336. package/dist/services/MJStorageBlobStore.js.map +1 -1
  337. package/dist/services/StartTaskGraphDispatcher.js +2 -2
  338. package/dist/services/StartTaskGraphDispatcher.js.map +1 -1
  339. package/dist/services/TaskGraphActionRunner.d.ts +5 -3
  340. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  341. package/dist/services/TaskGraphActionRunner.js +27 -5
  342. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  343. package/dist/services/TaskGraphAgentRunner.d.ts +14 -2
  344. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
  345. package/dist/services/TaskGraphAgentRunner.js +157 -9
  346. package/dist/services/TaskGraphAgentRunner.js.map +1 -1
  347. package/dist/services/TaskGraphContinuationDeliverer.d.ts +57 -4
  348. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  349. package/dist/services/TaskGraphContinuationDeliverer.js +607 -18
  350. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  351. package/dist/sharedCache.d.ts +105 -0
  352. package/dist/sharedCache.d.ts.map +1 -0
  353. package/dist/sharedCache.js +279 -0
  354. package/dist/sharedCache.js.map +1 -0
  355. package/dist/types.d.ts +6 -0
  356. package/dist/types.d.ts.map +1 -1
  357. package/dist/types.js.map +1 -1
  358. package/package.json +99 -96
  359. package/src/__tests__/ActionResolver.authorization.test.ts +353 -0
  360. package/src/__tests__/AdhocQueryResolver.sqlAuthorizer.test.ts +104 -0
  361. package/src/__tests__/BridgeHostInstance.test.ts +232 -0
  362. package/src/__tests__/ClientToolRequestResolver.test.ts +116 -0
  363. package/src/__tests__/DatasetResolver.itemFilters.test.ts +201 -0
  364. package/src/__tests__/EntityRecordNameResolver.rowSecurity.test.ts +152 -0
  365. package/src/__tests__/FetchEntityVectorsResolver.test.ts +433 -0
  366. package/src/__tests__/FileResolver.storageAccess.test.ts +562 -0
  367. package/src/__tests__/GetDataContextDataResolver.sqlItems.test.ts +416 -0
  368. package/src/__tests__/HostInstance.test.ts +84 -0
  369. package/src/__tests__/HumanHandoffResolver.test.ts +17 -0
  370. package/src/__tests__/ListOperationsResolver.adhocScreen.test.ts +137 -0
  371. package/src/__tests__/LoginScreenEngine.test.ts +86 -0
  372. package/src/__tests__/MJStorageBlobStore.storageGate.test.ts +63 -0
  373. package/src/__tests__/MeetingResolver.test.ts +75 -1
  374. package/src/__tests__/RealtimeBridgeResolver.test.ts +415 -6
  375. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +383 -0
  376. package/src/__tests__/RealtimeClientSessionResolver.test.ts +682 -58
  377. package/src/__tests__/RealtimeProxyServer.test.ts +16 -1
  378. package/src/__tests__/RealtimeRelay.test.ts +876 -0
  379. package/src/__tests__/RecordingAssemblyScheduler.test.ts +178 -0
  380. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +129 -0
  381. package/src/__tests__/ResolverBase.adhocReadScope.test.ts +133 -2
  382. package/src/__tests__/ResolverBase.aggregateScreen.test.ts +174 -0
  383. package/src/__tests__/ResolverBase.balancedClause.test.ts +155 -0
  384. package/src/__tests__/ResolverBase.clauseUnscopedRead.test.ts +127 -0
  385. package/src/__tests__/ResolverBase.clientOldValues.test.ts +212 -6
  386. package/src/__tests__/ResolverBase.filterEscaping.test.ts +5 -2
  387. package/src/__tests__/ReturningVisitorRecap.test.ts +115 -0
  388. package/src/__tests__/RunAIAgentResolver.branch.test.ts +170 -0
  389. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +6 -4
  390. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +258 -0
  391. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +166 -0
  392. package/src/__tests__/RunTemplateResolver.test.ts +132 -0
  393. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +63 -0
  394. package/src/__tests__/RunViewResolver.cacheCheckScreen.test.ts +165 -0
  395. package/src/__tests__/SearchKnowledgeStreamResolver.test.ts +161 -0
  396. package/src/__tests__/SessionJanitor.test.ts +1203 -21
  397. package/src/__tests__/SessionManager.test.ts +240 -17
  398. package/src/__tests__/SessionRunIDVerifier.test.ts +251 -0
  399. package/src/__tests__/SyncRolesUsersResolver.userRoles.test.ts +97 -0
  400. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +25 -0
  401. package/src/__tests__/TaskGraphAgentRunner.test.ts +266 -0
  402. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +403 -22
  403. package/src/__tests__/TaskGraphFrameResolver.test.ts +22 -0
  404. package/src/__tests__/TestQuerySQLResolver.test.ts +274 -0
  405. package/src/__tests__/TransactionGroupResolver.refusals.test.ts +98 -1
  406. package/src/__tests__/UpdateMJDataContextItem.oldValues.test.ts +220 -0
  407. package/src/__tests__/UserAvatarResolver.test.ts +255 -0
  408. package/src/__tests__/UserResolver.currentUser.test.ts +16 -1
  409. package/src/__tests__/ViewOperationsHandler.clauseScreen.test.ts +157 -0
  410. package/src/__tests__/actionAuthorization.test.ts +130 -0
  411. package/src/__tests__/agent-run-data-guard.test.ts +130 -0
  412. package/src/__tests__/agentVisionConsentAudit.test.ts +118 -0
  413. package/src/__tests__/apiRootBoot.test.ts +202 -0
  414. package/src/__tests__/avatarInputValidation.test.ts +160 -0
  415. package/src/__tests__/cacheInvalidationRecordData.test.ts +64 -0
  416. package/src/__tests__/conversationRunEvents.test.ts +56 -14
  417. package/src/__tests__/globalCors.test.ts +217 -0
  418. package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
  419. package/src/__tests__/magicLinkService.consume.test.ts +6 -0
  420. package/src/__tests__/magicLinkService.provisionLog.test.ts +5 -0
  421. package/src/__tests__/multiTenancy.postgresRewrite.test.ts +181 -0
  422. package/src/__tests__/multiTenancy.security.test.ts +51 -0
  423. package/src/__tests__/multiTenancy.test.ts +1 -1
  424. package/src/__tests__/newUsers.template.test.ts +151 -0
  425. package/src/__tests__/newUsers.test.ts +74 -5
  426. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +17 -2
  427. package/src/__tests__/ownedRealtimeSession.test.ts +39 -0
  428. package/src/__tests__/pushStatusResolver.filter.test.ts +7 -0
  429. package/src/__tests__/realtimeRecordingHandler.test.ts +652 -0
  430. package/src/__tests__/realtimeSessions/RealtimeSessionEventService.test.ts +201 -0
  431. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +215 -0
  432. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationResolver.test.ts +102 -0
  433. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationService.test.ts +349 -0
  434. package/src/__tests__/realtimeSessions/RealtimeVerifyRouter.test.ts +131 -0
  435. package/src/__tests__/realtimeSessions/SlidingWindowRateLimiter.test.ts +56 -0
  436. package/src/__tests__/realtimeSessions/helpers.ts +4 -0
  437. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +129 -0
  438. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +124 -0
  439. package/src/__tests__/realtimeSessions/verificationCore.test.ts +355 -0
  440. package/src/__tests__/realtimeSessions/verificationPages.test.ts +84 -0
  441. package/src/__tests__/realtimeSessions/verificationPolicy.test.ts +226 -0
  442. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +633 -0
  443. package/src/__tests__/resolverBase.fls.test.ts +87 -4
  444. package/src/__tests__/serverExtensionHostOverlay.test.ts +66 -0
  445. package/src/__tests__/serverExtensionReservedRoots.test.ts +11 -96
  446. package/src/__tests__/sharedCache.test.ts +312 -0
  447. package/src/__tests__/widgetGuestElevation.test.ts +44 -0
  448. package/src/agentSessions/BridgeHostInstance.ts +32 -0
  449. package/src/agentSessions/HostInstance.ts +124 -28
  450. package/src/agentSessions/ReturningVisitorRecap.ts +7 -3
  451. package/src/agentSessions/SessionJanitor.ts +821 -59
  452. package/src/agentSessions/SessionManager.ts +138 -26
  453. package/src/agentSessions/SessionRunIDVerifier.ts +171 -0
  454. package/src/agentSessions/index.ts +10 -3
  455. package/src/apiRoot.ts +78 -0
  456. package/src/auth/AuthProviderCatalogRouter.ts +26 -0
  457. package/src/auth/LoginScreenEngine.ts +50 -0
  458. package/src/auth/actionAuthorization.ts +116 -0
  459. package/src/auth/index.ts +4 -8
  460. package/src/auth/magicLink/MagicLinkRouter.ts +3 -2
  461. package/src/auth/magicLink/MagicLinkService.ts +6 -3
  462. package/src/auth/newUsers.ts +99 -11
  463. package/src/config.ts +171 -5
  464. package/src/context.ts +15 -10
  465. package/src/coreRoutes.ts +166 -0
  466. package/src/generated/graphql-schemas/__mj.ts +1815 -57
  467. package/src/generic/CacheInvalidationResolver.ts +73 -18
  468. package/src/generic/OrphanedConversationDetailReconciler.ts +3 -3
  469. package/src/generic/PushStatusResolver.ts +1 -1
  470. package/src/generic/ResolverBase.ts +335 -326
  471. package/src/generic/RunViewResolver.ts +21 -0
  472. package/src/globalCors.ts +71 -0
  473. package/src/index.ts +231 -300
  474. package/src/isolatedProvider.ts +22 -0
  475. package/src/multiTenancy/index.ts +24 -2
  476. package/src/realtimeProxy/RealtimeProxyServer.ts +148 -16
  477. package/src/realtimeProxy/RealtimeRelayTunnel.ts +645 -0
  478. package/src/realtimeSessions/README.md +179 -0
  479. package/src/realtimeSessions/RealtimeSessionEventService.ts +274 -0
  480. package/src/realtimeSessions/RealtimeSessionVerificationService.ts +168 -0
  481. package/src/realtimeSessions/RealtimeVerifyRouter.ts +109 -0
  482. package/src/realtimeSessions/RecordingAssemblyScheduler.ts +234 -0
  483. package/src/realtimeSessions/SessionVerificationPortsBase.ts +189 -0
  484. package/src/realtimeSessions/SlidingWindowRateLimiter.ts +92 -0
  485. package/src/realtimeSessions/index.ts +18 -0
  486. package/src/realtimeSessions/ownedRealtimeSession.ts +55 -0
  487. package/src/realtimeSessions/sessionAccess.ts +145 -0
  488. package/src/realtimeSessions/sessionConfigStamps.ts +123 -0
  489. package/src/realtimeSessions/subscriptionAuthorization.ts +116 -0
  490. package/src/realtimeSessions/verificationCore.ts +502 -0
  491. package/src/realtimeSessions/verificationPages.ts +149 -0
  492. package/src/realtimeSessions/verificationPolicy.ts +321 -0
  493. package/src/realtimeSessions/verificationWorkflow.ts +702 -0
  494. package/src/realtimeWidget/widgetGuestElevation.ts +34 -2
  495. package/src/resolvers/ActionResolver.ts +84 -21
  496. package/src/resolvers/AdhocQueryResolver.ts +24 -6
  497. package/src/resolvers/ArtifactFileResolver.ts +9 -8
  498. package/src/resolvers/CacheStatsResolver.ts +89 -2
  499. package/src/resolvers/ClientToolRequestResolver.ts +25 -7
  500. package/src/resolvers/ConversationRunEventsResolver.ts +15 -11
  501. package/src/resolvers/DatasetResolver.ts +70 -10
  502. package/src/resolvers/EntityRecordNameResolver.ts +3 -2
  503. package/src/resolvers/FetchEntityVectorsResolver.ts +179 -2
  504. package/src/resolvers/FileResolver.ts +321 -106
  505. package/src/resolvers/GetDataContextDataResolver.ts +139 -41
  506. package/src/resolvers/GetDataResolver.ts +6 -3
  507. package/src/resolvers/HumanHandoffResolver.ts +8 -0
  508. package/src/resolvers/IntegrationDiscoveryResolver.ts +4 -2
  509. package/src/resolvers/MCPResolver.ts +8 -5
  510. package/src/resolvers/QueryResolver.ts +11 -0
  511. package/src/resolvers/RealtimeBridgeResolver.ts +163 -11
  512. package/src/resolvers/RealtimeClientSessionResolver.ts +511 -129
  513. package/src/resolvers/RealtimeSessionEventsResolver.ts +133 -0
  514. package/src/resolvers/RealtimeSessionVerificationResolver.ts +174 -0
  515. package/src/resolvers/RemoteBrowserActionResolver.ts +11 -1
  516. package/src/resolvers/RunAIAgentResolver.ts +116 -14
  517. package/src/resolvers/RunTemplateResolver.ts +13 -12
  518. package/src/resolvers/SearchKnowledgeStreamResolver.ts +19 -3
  519. package/src/resolvers/SqlLoggingConfigResolver.ts +2 -4
  520. package/src/resolvers/SyncDataResolver.ts +6 -2
  521. package/src/resolvers/SyncRolesUsersResolver.ts +24 -6
  522. package/src/resolvers/TaskGraphFrameResolver.ts +33 -1
  523. package/src/resolvers/TestQuerySQLResolver.ts +68 -13
  524. package/src/resolvers/TransactionGroupResolver.ts +131 -27
  525. package/src/resolvers/UserAvatarResolver.ts +111 -0
  526. package/src/resolvers/UserResolver.ts +2 -16
  527. package/src/resolvers/__tests__/GetDataResolver.validation.test.ts +95 -0
  528. package/src/resolvers/agent-run-data-guard.ts +89 -0
  529. package/src/resolvers/agentVisionConsentAudit.ts +82 -0
  530. package/src/resolvers/avatarInputValidation.ts +123 -0
  531. package/src/resolvers/currentUserRoles.ts +32 -1
  532. package/src/resolvers/meetings/meetingMutations.ts +21 -0
  533. package/src/rest/RealtimeRecordingHandler.ts +464 -0
  534. package/src/rest/ViewOperationsHandler.ts +29 -13
  535. package/src/rest/setupRESTEndpoints.ts +6 -0
  536. package/src/serverExtensionReservedRoots.ts +14 -17
  537. package/src/services/MJStorageBlobStore.ts +31 -30
  538. package/src/services/StartTaskGraphDispatcher.ts +2 -2
  539. package/src/services/TaskGraphActionRunner.ts +25 -5
  540. package/src/services/TaskGraphAgentRunner.ts +188 -11
  541. package/src/services/TaskGraphContinuationDeliverer.ts +713 -17
  542. package/src/sharedCache.ts +305 -0
  543. package/src/types.ts +7 -0
@@ -1,61 +1,127 @@
1
1
  import { BaseSingleton, IShutdownable } from '@memberjunction/global';
2
- import { IMetadataProvider, UserInfo } from '@memberjunction/core';
2
+ import { DatabaseProviderBase, 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 staleness sweep runs once {@link SessionJanitor.Start} is called. */
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
- * Two sweeps, both writing through {@link SessionManager.CloseSession} so Record Changes captures
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-host recovery ({@link RunStartupRecovery})** — run once at boot. Closes any `Active`/`Idle`
19
- * session whose `HostInstanceID` belongs to a *previous* boot of *this* host (same hostname prefix,
20
- * different `bootId`). Primary defense against the "Active forever" leak after a restart.
21
- * 2. **Global staleness sweep ({@link RunStalenessSweep})** — run periodically on every instance.
22
- * Closes any `Active`/`Idle` session whose `LastActiveAt` is older than `closeThresholdMinutes`,
23
- * regardless of host. Catches sessions whose owner died without a clean reboot (OOM, scaled-down pod).
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).
24
43
  *
25
- * Both sweeps stamp `CloseReason = 'Janitor'`. A third, shutdown-time path —
26
- * {@link RunShutdownDrain}, invoked from {@link Shutdown} during the graceful ShutdownRegistry
27
- * drain — closes this exact host instance's own live sessions with `CloseReason = 'Shutdown'`.
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'`.
28
47
  *
29
- * Both sweeps are **idempotent and safe to run concurrently** on every instance: closing an
30
- * already-`Closed` session is a no-op, and the close path is last-writer-wins. Both page with keyset
48
+ * Separately from closing, a recording recovery pass runs after the close sweeps on every periodic tick,
49
+ * without blocking them, and closes nothing. It purges shard-ledger rows past the lookback window, then
50
+ * {@link RunRecordingLedgerSweep} assembles the recordings of `Closed` sessions on the shard ledger that
51
+ * no terminal signal (or a dead assembler) left unassembled, then {@link RunRecordingRecoverySweep}
52
+ * rebuilds, from legacy storage segments, the recording of `Closed` sessions not on the ledger whose
53
+ * end-of-call upload never arrived.
54
+ *
55
+ * The close sweeps are **idempotent and safe to run concurrently** on every instance: closing an
56
+ * already-`Closed` session is a no-op, and the close path is last-writer-wins. Ledger assembly is
57
+ * arbitrated by the ledger's atomic claim. Legacy recovery is not: two instances can recover the same
58
+ * session at once (there is no claim column for it). Each
59
+ * attempt uploads its own file and defers to an already-stamped recording on a best-effort basis, so
60
+ * the cost is duplicate work and an extra file, not a lost recording. The extra file is an orphan when the
61
+ * second attempt's re-check sees the first stamp; when both re-checks pass first, both files are stamped in
62
+ * turn and both are linked to the session (the later stamp wins `RecordingFileID`). Every sweep pages with keyset
31
63
  * (`AfterKey`) pagination per the deep-pagination guide so a large backlog can't blow up memory.
32
64
  */
33
65
  export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implements IShutdownable {
34
66
  private _config;
35
67
  private _sweepTimer;
36
68
  private _sweepRunning;
69
+ /**
70
+ * The in-flight recording recovery pass, or null. Separate from {@link _sweepRunning}: slow recovery
71
+ * must never block the close sweeps. Kept as a promise so {@link Shutdown} can wait for it.
72
+ */
73
+ private _recoveryPass;
74
+ /** Set by {@link Stop}, cleared by {@link Start}: no new recovery pass starts while stopped. */
75
+ private _stopped;
37
76
  private _registered;
38
77
  private _provider;
39
78
  private _systemUser;
40
79
  private readonly sessionManager;
80
+ /** Retry state of the legacy storage-segment recovery. */
81
+ private readonly recoveryBackoff;
82
+ /**
83
+ * Retry state of the ledger sweep, kept apart from {@link recoveryBackoff}: each sweep prunes its
84
+ * tracker by its own candidate set, so a shared one would forget the other sweep's failures.
85
+ */
86
+ private readonly ledgerBackoff;
87
+ /**
88
+ * Lowercase ids of sessions whose recovery attempt timed out but has not settled. Skipped by later
89
+ * sweeps so a second attempt never runs alongside the abandoned one; removed when it settles.
90
+ */
91
+ private readonly abandonedRecoveries;
92
+ /** True once the "recovery paused" error has been logged for the current pause; reset when it lifts. */
93
+ private _recoveryPauseLogged;
41
94
  protected constructor();
42
95
  /** Process-wide singleton accessor (Global Object Store backed via {@link BaseSingleton}). */
43
96
  static get Instance(): SessionJanitor;
44
97
  /** Identifier surfaced in graceful-shutdown logs. */
45
98
  readonly ShutdownName = "SessionJanitor";
46
- /** Overrides default tuning. Safe to call before or after {@link Start}. */
99
+ /**
100
+ * Overrides default tuning. Safe to call before or after {@link Start}. Every value given must be a
101
+ * finite number greater than zero: a NaN or non-positive duration would otherwise build an invalid
102
+ * cutoff date and make every later sweep throw. All-or-nothing: on an invalid value it throws, naming
103
+ * the field and value, and applies nothing. `undefined` values are ignored.
104
+ */
47
105
  Configure(config: Partial<SessionJanitorConfig>): void;
48
106
  /**
49
- * Run own-host startup recovery once, then schedule the periodic staleness sweep. Idempotent:
50
- * a second call does not stack a second timer. Captures the provider + system user so the timer
51
- * callback can run without re-supplying them.
107
+ * Run own-host startup recovery once, then schedule the periodic tick (staleness and max-duration
108
+ * close sweeps, then recording recovery). Idempotent: a second call does not stack a second timer.
109
+ * Captures the provider + system user so the timer callback can run without re-supplying them, and
110
+ * re-enables recording recovery after a {@link Stop}. Throws, before doing any work, when
111
+ * `intervalMs` is invalid (see {@link Configure}). Takes the server's database provider because
112
+ * recording recovery calls the shard ledger's stored procedures.
113
+ */
114
+ Start(provider: DatabaseProviderBase, systemUser: UserInfo, intervalMs?: number): Promise<void>;
115
+ /**
116
+ * Stops the periodic tick and keeps any new recording recovery pass from starting until the next
117
+ * {@link Start}, including one a tick already in progress would have started. A pass that is already
118
+ * running is not interrupted ({@link Shutdown} waits for it). Idempotent. Part of {@link IShutdownable}.
52
119
  */
53
- Start(provider: IMetadataProvider, systemUser: UserInfo, intervalMs?: number): Promise<void>;
54
- /** Stops the periodic sweep timer. Idempotent. Part of {@link IShutdownable}. */
55
120
  Stop(): void;
56
121
  /**
57
- * {@link IShutdownable}: clear the timer, then drain this host's own live sessions so a
58
- * graceful stop never strands `Active`/`Idle` rows for the next boot's janitor to mop up.
122
+ * {@link IShutdownable}: stop the timer, then drain this host's own live sessions so a
123
+ * graceful stop never strands `Active`/`Idle` rows for the next boot's janitor to mop up, then wait
124
+ * (at most {@link RECOVERY_SHUTDOWN_WAIT_MS}) for an in-flight recording recovery pass.
59
125
  * Drained sessions are stamped `CloseReason = 'Shutdown'` (vs. `'Janitor'` for crash orphans),
60
126
  * so the dashboards can tell a clean redeploy from a reconciled crash. Never throws; the drain
61
127
  * is skipped when {@link Start} was never called (no captured provider/user).
@@ -69,10 +135,16 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
69
135
  */
70
136
  RunShutdownDrain(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
71
137
  /**
72
- * Force-close any `Active`/`Idle` session left behind by a *previous boot of this host*
73
- * (matching hostname prefix, differing `bootId`). Returns the number of sessions closed.
138
+ * Force-close any `Active`/`Idle` session left behind by an earlier boot of this MJAPI instance: its
139
+ * `HostInstanceID` has this instance's prefix (`hostname:port:`) and another boot. The sessions of another
140
+ * MJAPI on the same host carry another port and stay open. Returns the number of sessions closed.
141
+ *
142
+ * @param provider The metadata provider for the reads and writes.
143
+ * @param systemUser The user the closes run as.
144
+ * @param hostInstance The instance whose earlier boots to close. Defaults to this process's
145
+ * ({@link GetCurrentHostInstance}).
74
146
  */
75
- RunStartupRecovery(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
147
+ RunStartupRecovery(provider: IMetadataProvider, systemUser: UserInfo, hostInstance?: HostInstanceIdentity): Promise<number>;
76
148
  /**
77
149
  * Force-close any `Active`/`Idle` session whose `LastActiveAt` is older than the configured
78
150
  * close threshold, regardless of host. Idempotent and concurrency-safe. Returns the count closed.
@@ -89,14 +161,138 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
89
161
  * `CloseReason = 'Janitor'`, idempotent + concurrency-safe like the other sweeps. Returns the count closed.
90
162
  */
91
163
  RunMaxDurationSweep(provider: IMetadataProvider, systemUser: UserInfo): Promise<number>;
164
+ /**
165
+ * Rebuilds the recording of sessions whose end-of-call upload never arrived (browser died, tab
166
+ * closed). A session is a candidate when it is `Closed`, has `RecordingStartedAt` (consent is implied:
167
+ * recording only starts after the guest agreed), still has no `RecordingFileID`, and closed between
168
+ * the lookback window and the grace period (see {@link SessionJanitorConfig.recordingRecoveryGraceMinutes}).
169
+ *
170
+ * Work is bounded: candidates are handled sequentially, at most {@link MAX_RECOVERIES_PER_SWEEP}
171
+ * recovery attempts per call, and a failing session backs off exponentially (`min(2^k * 5 min, 6 h)`)
172
+ * and is abandoned after {@link MAX_RECOVERY_ATTEMPTS} failures with one `LogError`. Backoff entries of
173
+ * sessions that left the candidate set are pruned, but only after a pass that saw every candidate, so
174
+ * a capped pass never forgets sessions it did not reach.
175
+ *
176
+ * Sessions on the shard ledger (a `RecordingStatus`, or any ledger row) are left to
177
+ * {@link RunRecordingLedgerSweep}: their audio is in SQL, not in storage segments.
178
+ *
179
+ * Never throws for a single bad session. Returns the number of recordings recovered.
180
+ */
181
+ RunRecordingRecoverySweep(provider: DatabaseProviderBase, systemUser: UserInfo): Promise<number>;
182
+ /**
183
+ * Backstop for client-direct recordings on the shard ledger: assembles the recording of `Closed`
184
+ * sessions that closed between the lookback window and the grace period and are still
185
+ * - `Pending` (shards, or a terminal signal, with no assembly since: the browser died before its
186
+ * terminal request, or the in-process assembly request was lost with its host),
187
+ * - `Assembling` with no write for `recordingRecoveryAttemptTimeoutMinutes` (the assembler died, or
188
+ * it hit a transient error and left the claim for a re-claim), or
189
+ * - status-less while the ledger holds shards for them (see {@link restoreLostRecordingStatus}).
190
+ *
191
+ * Each candidate is claimed with the ledger's atomic, stale-aware claim (a lost claim is skipped: another
192
+ * assembler has it) and assembled with `ForcePartial`, so missing shards become silence. An attempt is
193
+ * bounded by `recordingRecoveryAttemptTimeoutMinutes` and shares the legacy sweep's abandoned-attempt
194
+ * pause; failures back off and are given up on exactly like legacy recovery, in their own tracker.
195
+ * At most {@link MAX_RECOVERIES_PER_SWEEP} assemblies per call. Never throws for a single bad session.
196
+ * Returns the number of recordings assembled (`Complete` or `Partial`).
197
+ */
198
+ RunRecordingLedgerSweep(provider: DatabaseProviderBase, systemUser: UserInfo): Promise<number>;
199
+ /** The closed-at window recording recovery considers: older than the grace, newer than the lookback. */
200
+ private recoveryWindow;
201
+ /** The schema-qualified, dialect-quoted shard-ledger view, for filter sub-queries. */
202
+ private shardViewName;
203
+ /**
204
+ * Walks every session matching `filter` and runs `recover` on each one that is not backed off, not
205
+ * abandoned, and not `isBusy`, sequentially, stopping at {@link MAX_RECOVERIES_PER_SWEEP} attempts or
206
+ * {@link MAX_ABANDONED_RECOVERIES} abandoned attempts. Backoff entries of sessions that left the
207
+ * candidate set are pruned, but only after a walk that saw every candidate, so a capped walk never
208
+ * forgets sessions it did not reach. Returns the number recovered.
209
+ */
210
+ private sweepRecoveryCandidates;
211
+ /**
212
+ * Claims and assembles one ledger candidate and updates its backoff. Never throws: any exception is
213
+ * logged with the session id and counted as a failure.
214
+ */
215
+ private assembleSessionFromLedger;
216
+ /**
217
+ * Gives a status-less session with ledger shards back a `Pending` status so it can be claimed (the
218
+ * claim only takes Pending/Partial/stale Assembling). The status is lost when a `BaseEntity.Save` of
219
+ * the session (e.g. its close) loaded the row before a shard or terminal proc wrote it and saved
220
+ * after: `spUpdate` rewrites every column, so it puts back the stale NULL status and counts.
221
+ *
222
+ * The terminal proc is the existing way to set a NULL status to `Pending`. It is stamped with the
223
+ * counts the session still stores, or 0 for a NULL count (the proc accepts any count over NULL), and
224
+ * never with counts invented from the ledger: a made-up terminal could make a recording whose tail
225
+ * never arrived assemble as Complete, which deletes its shards. With no real terminal the stored shard
226
+ * count differs from the stamped one, so the assembly is Partial and keeps the shards; a later real
227
+ * terminal (higher counts) or late shard re-opens it intact.
228
+ * Returns false (logged) when the status could not be restored.
229
+ */
230
+ private restoreLostRecordingStatus;
231
+ /** Counts a failed ledger assembly in its backoff (see {@link RecoveryBackoffTracker.RecordFailure}). */
232
+ private recordLedgerFailure;
233
+ /**
234
+ * Deletes up to {@link MAX_PURGED_SHARDS_PER_PASS} ledger shards of sessions closed before the lookback
235
+ * window, which no sweep assembles any more. Never throws: a failure is logged and retried next pass.
236
+ */
237
+ private purgeExpiredLedgerShards;
92
238
  /** Parses the absolute deadline (ms) from a session's `Config_` JSON, or null when absent/malformed. */
93
239
  private parseSessionDeadlineMs;
94
240
  /** Register for graceful shutdown exactly once. */
95
241
  private ensureRegistered;
96
- /** Schedule the periodic staleness sweep, exactly once. Timer is unref'd so it never blocks exit. */
242
+ /** Schedule the periodic sweep tick (close sweeps + recording recovery), exactly once. Timer is unref'd so it never blocks exit. */
97
243
  private scheduleSweep;
98
- /** Timer tick: run the staleness sweep under the captured provider/user, guarding overlap. */
244
+ /**
245
+ * Timer tick: run the close sweeps (staleness, then max-duration) under the captured
246
+ * provider/user, guarding overlap, then kick off recording recovery.
247
+ *
248
+ * Recovery is started WITHOUT awaiting and has its own overlap guard: it can spend minutes on
249
+ * large downloads/uploads, and awaiting it under the close sweeps' guard would delay the
250
+ * max-duration cost cap and make every later tick return early. Each tick skips recovery while a pass
251
+ * is still running; because every session's attempt is bounded by
252
+ * `recordingRecoveryAttemptTimeoutMinutes`, a hung storage call delays later passes, never stops them.
253
+ */
99
254
  private periodicSweep;
255
+ /**
256
+ * One recording recovery pass: purge expired ledger shards, then the ledger sweep, then legacy
257
+ * segment recovery. The ledger sweep goes first because its sessions are the current recording path;
258
+ * a failed ledger sweep is logged here so legacy recovery still runs. A legacy failure rejects (logged
259
+ * by {@link startRecoveryPass}).
260
+ */
261
+ private runRecoveryPass;
262
+ /**
263
+ * Fire-and-forget recording recovery, skipped when the previous pass is still running or the janitor
264
+ * has been stopped (a tick that was mid-close-sweep when {@link Stop} ran must not start one).
265
+ */
266
+ private startRecoveryPass;
267
+ /**
268
+ * Waits for the in-flight recovery pass, if any, for at most {@link RECOVERY_SHUTDOWN_WAIT_MS}; logs
269
+ * once when it gives up. Never throws: the pass promise already logs and absorbs its own errors.
270
+ */
271
+ private waitForRecoveryPass;
272
+ /**
273
+ * Recovers one candidate's recording and updates its backoff. Never throws: any exception is logged
274
+ * with the session id and counted as a failure.
275
+ */
276
+ private recoverSessionRecording;
277
+ /**
278
+ * Waits for one session's recovery attempt for at most `recordingRecoveryAttemptTimeoutMinutes`.
279
+ * An attempt cannot be cancelled, so a timed-out one keeps running: the session is marked abandoned
280
+ * until it settles (later sweeps skip it), and its late outcome (`describeLate`) is logged then.
281
+ */
282
+ private runWithinAttemptTimeout;
283
+ /**
284
+ * True while {@link MAX_ABANDONED_RECOVERIES} timed-out attempts are still running: no new attempt
285
+ * starts until one settles. Logs one `LogError` per pause.
286
+ */
287
+ private isRecoveryPausedForAbandonedAttempts;
288
+ /**
289
+ * Loads the agent carrying a session's recording storage config and resolves its storage account,
290
+ * memoized per agent for the sweep: the resolve may force a storage-engine reload, so it must not
291
+ * repeat for every session of the same agent.
292
+ */
293
+ private resolveRecoveryStorage;
294
+ /** Counts a failed legacy recovery in its backoff (see {@link RecoveryBackoffTracker.RecordFailure}). */
295
+ private recordRecoveryFailure;
100
296
  /**
101
297
  * Page through every session matching `filter` with keyset (`AfterKey`) pagination and close each
102
298
  * via {@link SessionManager.CloseSession}, stamping `closeReason` on every row it transitions.
@@ -104,6 +300,19 @@ export declare class SessionJanitor extends BaseSingleton<SessionJanitor> implem
104
300
  * harmless no-op that keeps its original reason.
105
301
  */
106
302
  private sweepAndClose;
303
+ /**
304
+ * Keyset-page (`AfterKey`) through every session matching `filter`, handing each full fetched page
305
+ * to `visit`. Stops on a load failure (already logged), an empty page, a partial page, or when
306
+ * `visit` returns `false`.
307
+ *
308
+ * `visit` receives the page exactly as the SQL filter matched it. The keyset advances from the
309
+ * LAST FETCHED row, so any narrowing `visit` does in JS can never stall or skip pagination.
310
+ *
311
+ * Returns how the walk ended: `'complete'` (reached the end of the matching set), `'stopped'`
312
+ * (`visit` returned `false`) or `'failed'` (a page failed to load). Callers that reason about the
313
+ * WHOLE set (e.g. pruning state for absent rows) must act only on `'complete'`.
314
+ */
315
+ private forEachSessionPage;
107
316
  /** Fetch one keyset page of matching sessions, or null on a load failure (logged). */
108
317
  private fetchPage;
109
318
  }
@@ -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;AAW9B,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACjC,0GAA0G;IAC1G,qBAAqB,EAAE,MAAM,CAAC;IAC9B,+FAA+F;IAC/F,eAAe,EAAE,MAAM,CAAC;CAC3B;AAOD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,cAAe,SAAQ,aAAa,CAAC,cAAc,CAAE,YAAW,aAAa;IACtF,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAEvD,SAAS;IAIT,8FAA8F;IAC9F,WAAkB,QAAQ,IAAI,cAAc,CAE3C;IAED,qDAAqD;IACrD,SAAgB,YAAY,oBAAoB;IAEhD,4EAA4E;IACrE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAI7D;;;;OAIG;IACU,KAAK,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzG,iFAAiF;IAC1E,IAAI,IAAI,IAAI;IAOnB;;;;;;OAMG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtC;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAUjG;;;OAGG;IACU,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnG;;;OAGG;IACU,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlG;;;;;;;;;OASG;IACU,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBpG,wGAAwG;IACxG,OAAO,CAAC,sBAAsB;IAkB9B,mDAAmD;IACnD,OAAO,CAAC,gBAAgB;IAOxB,qGAAqG;IACrG,OAAO,CAAC,aAAa;IAQrB,8FAA8F;YAChF,aAAa;IAiB3B;;;;;OAKG;YACW,aAAa;IA4D3B,sFAAsF;YACxE,SAAS;CAqB1B"}
1
+ {"version":3,"file":"SessionJanitor.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"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"}