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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/agentSessions/BridgeHostInstance.d.ts +25 -0
  3. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -0
  4. package/dist/agentSessions/BridgeHostInstance.js +30 -0
  5. package/dist/agentSessions/BridgeHostInstance.js.map +1 -0
  6. package/dist/agentSessions/HostInstance.d.ts +75 -11
  7. package/dist/agentSessions/HostInstance.d.ts.map +1 -1
  8. package/dist/agentSessions/HostInstance.js +99 -28
  9. package/dist/agentSessions/HostInstance.js.map +1 -1
  10. package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
  11. package/dist/agentSessions/ReturningVisitorRecap.js +7 -3
  12. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  13. package/dist/agentSessions/SessionJanitor.d.ts +173 -25
  14. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  15. package/dist/agentSessions/SessionJanitor.js +452 -54
  16. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  17. package/dist/agentSessions/SessionManager.d.ts +43 -2
  18. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  19. package/dist/agentSessions/SessionManager.js +99 -8
  20. package/dist/agentSessions/SessionManager.js.map +1 -1
  21. package/dist/agentSessions/SessionRunIDVerifier.d.ts +63 -0
  22. package/dist/agentSessions/SessionRunIDVerifier.d.ts.map +1 -0
  23. package/dist/agentSessions/SessionRunIDVerifier.js +129 -0
  24. package/dist/agentSessions/SessionRunIDVerifier.js.map +1 -0
  25. package/dist/agentSessions/index.d.ts +2 -0
  26. package/dist/agentSessions/index.d.ts.map +1 -1
  27. package/dist/agentSessions/index.js +10 -3
  28. package/dist/agentSessions/index.js.map +1 -1
  29. package/dist/auth/actionAuthorization.d.ts +40 -0
  30. package/dist/auth/actionAuthorization.d.ts.map +1 -0
  31. package/dist/auth/actionAuthorization.js +94 -0
  32. package/dist/auth/actionAuthorization.js.map +1 -0
  33. package/dist/auth/index.d.ts.map +1 -1
  34. package/dist/auth/index.js +3 -10
  35. package/dist/auth/index.js.map +1 -1
  36. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  37. package/dist/auth/magicLink/MagicLinkService.js +6 -3
  38. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  39. package/dist/auth/newUsers.d.ts +10 -0
  40. package/dist/auth/newUsers.d.ts.map +1 -1
  41. package/dist/auth/newUsers.js +80 -11
  42. package/dist/auth/newUsers.js.map +1 -1
  43. package/dist/config.d.ts +2378 -0
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/config.js +123 -0
  46. package/dist/config.js.map +1 -1
  47. package/dist/context.d.ts +8 -0
  48. package/dist/context.d.ts.map +1 -1
  49. package/dist/context.js +14 -11
  50. package/dist/context.js.map +1 -1
  51. package/dist/generated/graphql-schemas/__mj.d.ts +135 -0
  52. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  53. package/dist/generated/graphql-schemas/__mj.js +706 -0
  54. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  55. package/dist/generic/OrphanedConversationDetailReconciler.js +3 -3
  56. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  57. package/dist/generic/ResolverBase.d.ts +20 -4
  58. package/dist/generic/ResolverBase.d.ts.map +1 -1
  59. package/dist/generic/ResolverBase.js +39 -10
  60. package/dist/generic/ResolverBase.js.map +1 -1
  61. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  62. package/dist/generic/RunViewResolver.js +4 -0
  63. package/dist/generic/RunViewResolver.js.map +1 -1
  64. package/dist/index.d.ts +6 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +120 -131
  67. package/dist/index.js.map +1 -1
  68. package/dist/isolatedProvider.d.ts +20 -0
  69. package/dist/isolatedProvider.d.ts.map +1 -0
  70. package/dist/isolatedProvider.js +22 -0
  71. package/dist/isolatedProvider.js.map +1 -0
  72. package/dist/realtimeProxy/RealtimeProxyServer.d.ts +44 -4
  73. package/dist/realtimeProxy/RealtimeProxyServer.d.ts.map +1 -1
  74. package/dist/realtimeProxy/RealtimeProxyServer.js +121 -16
  75. package/dist/realtimeProxy/RealtimeProxyServer.js.map +1 -1
  76. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts +171 -0
  77. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts.map +1 -0
  78. package/dist/realtimeProxy/RealtimeRelayTunnel.js +532 -0
  79. package/dist/realtimeProxy/RealtimeRelayTunnel.js.map +1 -0
  80. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts +148 -0
  81. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts.map +1 -0
  82. package/dist/realtimeSessions/RealtimeSessionEventService.js +191 -0
  83. package/dist/realtimeSessions/RealtimeSessionEventService.js.map +1 -0
  84. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts +66 -0
  85. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -0
  86. package/dist/realtimeSessions/RealtimeSessionVerificationService.js +138 -0
  87. package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -0
  88. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts +38 -0
  89. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -0
  90. package/dist/realtimeSessions/RealtimeVerifyRouter.js +98 -0
  91. package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -0
  92. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts +61 -0
  93. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -0
  94. package/dist/realtimeSessions/SessionVerificationPortsBase.js +149 -0
  95. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -0
  96. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts +57 -0
  97. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts.map +1 -0
  98. package/dist/realtimeSessions/SlidingWindowRateLimiter.js +69 -0
  99. package/dist/realtimeSessions/SlidingWindowRateLimiter.js.map +1 -0
  100. package/dist/realtimeSessions/index.d.ts +17 -0
  101. package/dist/realtimeSessions/index.d.ts.map +1 -0
  102. package/dist/realtimeSessions/index.js +17 -0
  103. package/dist/realtimeSessions/index.js.map +1 -0
  104. package/dist/realtimeSessions/sessionAccess.d.ts +86 -0
  105. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -0
  106. package/dist/realtimeSessions/sessionAccess.js +90 -0
  107. package/dist/realtimeSessions/sessionAccess.js.map +1 -0
  108. package/dist/realtimeSessions/sessionConfigStamps.d.ts +70 -0
  109. package/dist/realtimeSessions/sessionConfigStamps.d.ts.map +1 -0
  110. package/dist/realtimeSessions/sessionConfigStamps.js +93 -0
  111. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -0
  112. package/dist/realtimeSessions/subscriptionAuthorization.d.ts +65 -0
  113. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -0
  114. package/dist/realtimeSessions/subscriptionAuthorization.js +71 -0
  115. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -0
  116. package/dist/realtimeSessions/verificationCore.d.ts +243 -0
  117. package/dist/realtimeSessions/verificationCore.d.ts.map +1 -0
  118. package/dist/realtimeSessions/verificationCore.js +356 -0
  119. package/dist/realtimeSessions/verificationCore.js.map +1 -0
  120. package/dist/realtimeSessions/verificationPages.d.ts +66 -0
  121. package/dist/realtimeSessions/verificationPages.d.ts.map +1 -0
  122. package/dist/realtimeSessions/verificationPages.js +110 -0
  123. package/dist/realtimeSessions/verificationPages.js.map +1 -0
  124. package/dist/realtimeSessions/verificationPolicy.d.ts +147 -0
  125. package/dist/realtimeSessions/verificationPolicy.d.ts.map +1 -0
  126. package/dist/realtimeSessions/verificationPolicy.js +249 -0
  127. package/dist/realtimeSessions/verificationPolicy.js.map +1 -0
  128. package/dist/realtimeSessions/verificationWorkflow.d.ts +263 -0
  129. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -0
  130. package/dist/realtimeSessions/verificationWorkflow.js +435 -0
  131. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -0
  132. package/dist/realtimeWidget/widgetGuestElevation.d.ts +20 -2
  133. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  134. package/dist/realtimeWidget/widgetGuestElevation.js +31 -2
  135. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  136. package/dist/resolvers/ActionResolver.d.ts +31 -5
  137. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  138. package/dist/resolvers/ActionResolver.js +75 -14
  139. package/dist/resolvers/ActionResolver.js.map +1 -1
  140. package/dist/resolvers/AdhocQueryResolver.d.ts +14 -1
  141. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  142. package/dist/resolvers/AdhocQueryResolver.js +21 -5
  143. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  144. package/dist/resolvers/CacheStatsResolver.d.ts +27 -0
  145. package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -1
  146. package/dist/resolvers/CacheStatsResolver.js +113 -2
  147. package/dist/resolvers/CacheStatsResolver.js.map +1 -1
  148. package/dist/resolvers/ClientToolRequestResolver.d.ts +4 -2
  149. package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -1
  150. package/dist/resolvers/ClientToolRequestResolver.js +28 -10
  151. package/dist/resolvers/ClientToolRequestResolver.js.map +1 -1
  152. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +12 -1
  153. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  154. package/dist/resolvers/FetchEntityVectorsResolver.js +83 -2
  155. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  156. package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -1
  157. package/dist/resolvers/HumanHandoffResolver.js +7 -1
  158. package/dist/resolvers/HumanHandoffResolver.js.map +1 -1
  159. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  160. package/dist/resolvers/MCPResolver.js +9 -4
  161. package/dist/resolvers/MCPResolver.js.map +1 -1
  162. package/dist/resolvers/RealtimeBridgeResolver.d.ts +54 -2
  163. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  164. package/dist/resolvers/RealtimeBridgeResolver.js +155 -10
  165. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  166. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +155 -25
  167. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  168. package/dist/resolvers/RealtimeClientSessionResolver.js +394 -90
  169. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  170. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts +61 -0
  171. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts.map +1 -0
  172. package/dist/resolvers/RealtimeSessionEventsResolver.js +130 -0
  173. package/dist/resolvers/RealtimeSessionEventsResolver.js.map +1 -0
  174. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts +85 -0
  175. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts.map +1 -0
  176. package/dist/resolvers/RealtimeSessionVerificationResolver.js +188 -0
  177. package/dist/resolvers/RealtimeSessionVerificationResolver.js.map +1 -0
  178. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +2 -0
  179. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  180. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -1
  181. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  182. package/dist/resolvers/RunAIAgentResolver.d.ts +10 -0
  183. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  184. package/dist/resolvers/RunAIAgentResolver.js +68 -11
  185. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  186. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  187. package/dist/resolvers/RunTemplateResolver.js +12 -11
  188. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  189. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  190. package/dist/resolvers/SyncDataResolver.js +6 -2
  191. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  192. package/dist/resolvers/SyncRolesUsersResolver.d.ts +2 -0
  193. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  194. package/dist/resolvers/SyncRolesUsersResolver.js +23 -6
  195. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  196. package/dist/resolvers/UserAvatarResolver.d.ts +16 -0
  197. package/dist/resolvers/UserAvatarResolver.d.ts.map +1 -0
  198. package/dist/resolvers/UserAvatarResolver.js +124 -0
  199. package/dist/resolvers/UserAvatarResolver.js.map +1 -0
  200. package/dist/resolvers/UserResolver.d.ts.map +1 -1
  201. package/dist/resolvers/UserResolver.js +2 -17
  202. package/dist/resolvers/UserResolver.js.map +1 -1
  203. package/dist/resolvers/agentVisionConsentAudit.d.ts +37 -0
  204. package/dist/resolvers/agentVisionConsentAudit.d.ts.map +1 -0
  205. package/dist/resolvers/agentVisionConsentAudit.js +63 -0
  206. package/dist/resolvers/agentVisionConsentAudit.js.map +1 -0
  207. package/dist/resolvers/avatarInputValidation.d.ts +40 -0
  208. package/dist/resolvers/avatarInputValidation.d.ts.map +1 -0
  209. package/dist/resolvers/avatarInputValidation.js +97 -0
  210. package/dist/resolvers/avatarInputValidation.js.map +1 -0
  211. package/dist/resolvers/currentUserRoles.d.ts +29 -0
  212. package/dist/resolvers/currentUserRoles.d.ts.map +1 -1
  213. package/dist/resolvers/currentUserRoles.js +30 -0
  214. package/dist/resolvers/currentUserRoles.js.map +1 -1
  215. package/dist/resolvers/meetings/meetingMutations.d.ts +6 -0
  216. package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -1
  217. package/dist/resolvers/meetings/meetingMutations.js +21 -0
  218. package/dist/resolvers/meetings/meetingMutations.js.map +1 -1
  219. package/dist/services/TaskGraphContinuationDeliverer.d.ts +4 -3
  220. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  221. package/dist/services/TaskGraphContinuationDeliverer.js +13 -7
  222. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  223. package/dist/sharedCache.d.ts +105 -0
  224. package/dist/sharedCache.d.ts.map +1 -0
  225. package/dist/sharedCache.js +276 -0
  226. package/dist/sharedCache.js.map +1 -0
  227. package/dist/types.d.ts +6 -0
  228. package/dist/types.d.ts.map +1 -1
  229. package/dist/types.js.map +1 -1
  230. package/package.json +97 -95
  231. package/src/__tests__/ActionResolver.authorization.test.ts +353 -0
  232. package/src/__tests__/AdhocQueryResolver.sqlAuthorizer.test.ts +104 -0
  233. package/src/__tests__/BridgeHostInstance.test.ts +232 -0
  234. package/src/__tests__/ClientToolRequestResolver.test.ts +116 -0
  235. package/src/__tests__/FetchEntityVectorsResolver.test.ts +285 -0
  236. package/src/__tests__/HostInstance.test.ts +84 -0
  237. package/src/__tests__/HumanHandoffResolver.test.ts +17 -0
  238. package/src/__tests__/MeetingResolver.test.ts +75 -1
  239. package/src/__tests__/RealtimeBridgeResolver.test.ts +415 -6
  240. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +383 -0
  241. package/src/__tests__/RealtimeClientSessionResolver.test.ts +682 -58
  242. package/src/__tests__/RealtimeProxyServer.test.ts +16 -1
  243. package/src/__tests__/RealtimeRelay.test.ts +876 -0
  244. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +129 -0
  245. package/src/__tests__/ResolverBase.aggregateScreen.test.ts +174 -0
  246. package/src/__tests__/ResolverBase.clientOldValues.test.ts +6 -3
  247. package/src/__tests__/ReturningVisitorRecap.test.ts +115 -0
  248. package/src/__tests__/RunAIAgentResolver.branch.test.ts +169 -0
  249. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +4 -4
  250. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +166 -0
  251. package/src/__tests__/RunTemplateResolver.test.ts +132 -0
  252. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +63 -0
  253. package/src/__tests__/SessionJanitor.test.ts +845 -18
  254. package/src/__tests__/SessionManager.test.ts +213 -17
  255. package/src/__tests__/SessionRunIDVerifier.test.ts +251 -0
  256. package/src/__tests__/SyncRolesUsersResolver.userRoles.test.ts +97 -0
  257. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +50 -3
  258. package/src/__tests__/UserAvatarResolver.test.ts +255 -0
  259. package/src/__tests__/UserResolver.currentUser.test.ts +16 -1
  260. package/src/__tests__/actionAuthorization.test.ts +130 -0
  261. package/src/__tests__/agentVisionConsentAudit.test.ts +118 -0
  262. package/src/__tests__/avatarInputValidation.test.ts +160 -0
  263. package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
  264. package/src/__tests__/magicLinkService.consume.test.ts +6 -0
  265. package/src/__tests__/magicLinkService.provisionLog.test.ts +5 -0
  266. package/src/__tests__/newUsers.template.test.ts +151 -0
  267. package/src/__tests__/newUsers.test.ts +74 -5
  268. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +17 -2
  269. package/src/__tests__/realtimeSessions/RealtimeSessionEventService.test.ts +201 -0
  270. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +215 -0
  271. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationResolver.test.ts +102 -0
  272. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationService.test.ts +349 -0
  273. package/src/__tests__/realtimeSessions/RealtimeVerifyRouter.test.ts +131 -0
  274. package/src/__tests__/realtimeSessions/SlidingWindowRateLimiter.test.ts +56 -0
  275. package/src/__tests__/realtimeSessions/helpers.ts +4 -0
  276. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +129 -0
  277. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +124 -0
  278. package/src/__tests__/realtimeSessions/verificationCore.test.ts +355 -0
  279. package/src/__tests__/realtimeSessions/verificationPages.test.ts +84 -0
  280. package/src/__tests__/realtimeSessions/verificationPolicy.test.ts +226 -0
  281. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +633 -0
  282. package/src/__tests__/resolverBase.fls.test.ts +87 -4
  283. package/src/__tests__/serverExtensionReservedRoots.test.ts +2 -0
  284. package/src/__tests__/sharedCache.test.ts +310 -0
  285. package/src/__tests__/widgetGuestElevation.test.ts +44 -0
  286. package/src/agentSessions/BridgeHostInstance.ts +32 -0
  287. package/src/agentSessions/HostInstance.ts +124 -28
  288. package/src/agentSessions/ReturningVisitorRecap.ts +7 -3
  289. package/src/agentSessions/SessionJanitor.ts +543 -57
  290. package/src/agentSessions/SessionManager.ts +125 -25
  291. package/src/agentSessions/SessionRunIDVerifier.ts +171 -0
  292. package/src/agentSessions/index.ts +10 -3
  293. package/src/auth/actionAuthorization.ts +116 -0
  294. package/src/auth/index.ts +3 -8
  295. package/src/auth/magicLink/MagicLinkService.ts +6 -3
  296. package/src/auth/newUsers.ts +99 -11
  297. package/src/config.ts +125 -0
  298. package/src/context.ts +15 -10
  299. package/src/generated/graphql-schemas/__mj.ts +496 -1
  300. package/src/generic/OrphanedConversationDetailReconciler.ts +3 -3
  301. package/src/generic/ResolverBase.ts +39 -9
  302. package/src/generic/RunViewResolver.ts +4 -0
  303. package/src/index.ts +132 -143
  304. package/src/isolatedProvider.ts +22 -0
  305. package/src/realtimeProxy/RealtimeProxyServer.ts +148 -16
  306. package/src/realtimeProxy/RealtimeRelayTunnel.ts +645 -0
  307. package/src/realtimeSessions/README.md +179 -0
  308. package/src/realtimeSessions/RealtimeSessionEventService.ts +274 -0
  309. package/src/realtimeSessions/RealtimeSessionVerificationService.ts +167 -0
  310. package/src/realtimeSessions/RealtimeVerifyRouter.ts +108 -0
  311. package/src/realtimeSessions/SessionVerificationPortsBase.ts +189 -0
  312. package/src/realtimeSessions/SlidingWindowRateLimiter.ts +92 -0
  313. package/src/realtimeSessions/index.ts +16 -0
  314. package/src/realtimeSessions/sessionAccess.ts +141 -0
  315. package/src/realtimeSessions/sessionConfigStamps.ts +123 -0
  316. package/src/realtimeSessions/subscriptionAuthorization.ts +116 -0
  317. package/src/realtimeSessions/verificationCore.ts +502 -0
  318. package/src/realtimeSessions/verificationPages.ts +149 -0
  319. package/src/realtimeSessions/verificationPolicy.ts +321 -0
  320. package/src/realtimeSessions/verificationWorkflow.ts +702 -0
  321. package/src/realtimeWidget/widgetGuestElevation.ts +34 -2
  322. package/src/resolvers/ActionResolver.ts +84 -21
  323. package/src/resolvers/AdhocQueryResolver.ts +24 -6
  324. package/src/resolvers/CacheStatsResolver.ts +89 -2
  325. package/src/resolvers/ClientToolRequestResolver.ts +25 -7
  326. package/src/resolvers/FetchEntityVectorsResolver.ts +97 -2
  327. package/src/resolvers/HumanHandoffResolver.ts +8 -0
  328. package/src/resolvers/MCPResolver.ts +8 -5
  329. package/src/resolvers/RealtimeBridgeResolver.ts +163 -11
  330. package/src/resolvers/RealtimeClientSessionResolver.ts +501 -96
  331. package/src/resolvers/RealtimeSessionEventsResolver.ts +133 -0
  332. package/src/resolvers/RealtimeSessionVerificationResolver.ts +174 -0
  333. package/src/resolvers/RemoteBrowserActionResolver.ts +11 -1
  334. package/src/resolvers/RunAIAgentResolver.ts +78 -11
  335. package/src/resolvers/RunTemplateResolver.ts +13 -12
  336. package/src/resolvers/SyncDataResolver.ts +6 -2
  337. package/src/resolvers/SyncRolesUsersResolver.ts +24 -6
  338. package/src/resolvers/UserAvatarResolver.ts +111 -0
  339. package/src/resolvers/UserResolver.ts +2 -16
  340. package/src/resolvers/agentVisionConsentAudit.ts +82 -0
  341. package/src/resolvers/avatarInputValidation.ts +123 -0
  342. package/src/resolvers/currentUserRoles.ts +32 -1
  343. package/src/resolvers/meetings/meetingMutations.ts +21 -0
  344. package/src/services/TaskGraphContinuationDeliverer.ts +13 -7
  345. package/src/sharedCache.ts +302 -0
  346. package/src/types.ts +7 -0
@@ -7,8 +7,13 @@ import {
7
7
  LiveKitTokenService,
8
8
  LiveKitAgentRoomCoordinator,
9
9
  LiveKitEgressService,
10
+ LiveKitParticipantService,
10
11
  LiveKitUserIdentity,
11
12
  RoomHandoffEngine,
13
+ type AgentRoomHostOptions,
14
+ type AgentRoomSession,
15
+ type ParticipantUpdateResult,
16
+ type StartAgentRoomSessionParams,
12
17
  } from '@memberjunction/livekit-room-server';
13
18
  import { AppContext } from '../types.js';
14
19
  import { ResolverBase } from '../generic/ResolverBase.js';
@@ -18,7 +23,8 @@ import { AIBridgeEngine } from '@memberjunction/ai-bridge-server';
18
23
  import { SessionManager } from '../agentSessions/SessionManager.js';
19
24
  import { NotificationEngine } from '@memberjunction/notifications';
20
25
  import { RegisterMeetingRecordingFile, CorrelateRecordingStart } from './meetingRecordingRegistration.js';
21
- import { RoomAuthorizationService } from '@memberjunction/livekit-room-server';
26
+ import { WriteAgentVisionConsentAudit } from './agentVisionConsentAudit.js';
27
+ import { RoomAuthorizationService, type RoomAuthorizationResult } from '@memberjunction/livekit-room-server';
22
28
 
23
29
  /**
24
30
  * Binds the agent realtime-session factory onto the LiveKit room coordinator's model-session creation seam.
@@ -44,6 +50,23 @@ LiveKitAgentRoomCoordinator.Instance.SetTurnToolBinder((session, handler) => {
44
50
  runtime.SetLocalToolHandler(handler);
45
51
  });
46
52
 
53
+ /**
54
+ * Binds whether an agent watches meetings (same module-load rationale as the factory above). The coordinator asks per
55
+ * model session; the answer is the agent's `realtime.video.watchMeetings` setting, which the session runtime read from
56
+ * its effective configuration (`@memberjunction/ai-agents`). The coordinator also requires a model that takes video.
57
+ */
58
+ LiveKitAgentRoomCoordinator.Instance.SetAgentVisionResolver((session) => GetBridgeRealtimeRuntime(session)?.WatchesMeetingVideo === true);
59
+
60
+ /**
61
+ * Binds how a failed agent start is recorded on the agent's co-agent run (same module-load rationale as the factory
62
+ * above). The coordinator closes the model session of a start that fails before the bridge engine takes it; that close
63
+ * alone finalizes the run as Completed, so the coordinator first has the session's runtime finalize it as Failed, with the
64
+ * start's error.
65
+ */
66
+ LiveKitAgentRoomCoordinator.Instance.SetFailedStartRecorder(async (session, error) => {
67
+ await GetBridgeRealtimeRuntime(session)?.Finalize(false, error);
68
+ });
69
+
47
70
  /**
48
71
  * Binds the co-agent run finalizer onto the bridge engine (same module-load rationale as the factory above).
49
72
  * Lets the engine finalize a session's dangling co-agent observability run when it reaps a bridge WITHOUT a
@@ -233,7 +256,30 @@ export class LiveKitRecordingResult {
233
256
  RecordingFileID?: string;
234
257
  }
235
258
 
236
- /** A selectable provider-native voice for the dev voice picker. */
259
+ /** A person's choice of whether agents may see their camera and shared screen in a room. */
260
+ @InputType()
261
+ export class SetLiveKitAgentVisionInput {
262
+ @Field(() => String)
263
+ RoomName: string;
264
+
265
+ /** `true` to let agents see, `false` to stop. */
266
+ @Field(() => Boolean)
267
+ Allow: boolean;
268
+ }
269
+
270
+ @ObjectType()
271
+ export class LiveKitAgentVisionResult {
272
+ @Field(() => Boolean)
273
+ Success: boolean;
274
+
275
+ @Field(() => String, { nullable: true })
276
+ ErrorMessage?: string;
277
+ }
278
+
279
+ /**
280
+ * A selectable provider-native voice for the dev voice picker: one per persona, or one per voice only the driver declares.
281
+ * Two personas can share an `ID` (a voice, and the same voice with a face); `PersonaID` tells them apart.
282
+ */
237
283
  @ObjectType()
238
284
  export class RealtimeVoiceOptionResult {
239
285
  @Field(() => String)
@@ -241,6 +287,22 @@ export class RealtimeVoiceOptionResult {
241
287
 
242
288
  @Field(() => String)
243
289
  Name: string;
290
+
291
+ /** The persona this voice belongs to (`MJ: AI Personas.ID`). Null for a voice only the driver declares. */
292
+ @Field(() => String, { nullable: true })
293
+ PersonaID?: string;
294
+
295
+ /**
296
+ * The avatar that comes with this voice: the `APIName` of its persona's preset Video binding on the model's vendor,
297
+ * which is what `realtime.video.avatarId` takes. Null for a voice without one, and for every voice only the driver
298
+ * declares.
299
+ */
300
+ @Field(() => String, { nullable: true })
301
+ AvatarID?: string;
302
+
303
+ /** The persona's preview image URL, or null when it has none. */
304
+ @Field(() => String, { nullable: true })
305
+ PreviewImageURL?: string;
244
306
  }
245
307
 
246
308
  /** An active Realtime model with the voices its driver supports — feeds the dev model/voice picker. */
@@ -300,7 +362,9 @@ export class RealtimeBridgeResolver extends ResolverBase {
300
362
 
301
363
  /**
302
364
  * Starts (or reuses) an agent's presence in a LiveKit room and returns a client token so the calling
303
- * user can immediately join the same room.
365
+ * user can immediately join the same room. The token is minted before anything starts, so a start that can't give the
366
+ * user one fails with nothing started. When no `AgentSessionID` is passed, an agent session is created for the
367
+ * agent; if the agent then fails to start, that session is closed (`Error`) before the failure is returned.
304
368
  */
305
369
  @Mutation(() => LiveKitAgentRoomSessionResult)
306
370
  async StartLiveKitAgentRoomSession(
@@ -331,18 +395,22 @@ export class RealtimeBridgeResolver extends ResolverBase {
331
395
  }
332
396
  }
333
397
 
398
+ // The user's token first: a start that can't let the user into the room fails before anything starts there. Minted
399
+ // after the agent joined, a failure left the agent in a room the user couldn't enter and gave the UI no bridge id to
400
+ // stop it by.
401
+ const clientToken = await new LiveKitTokenService().MintClientToken(roomName, this.participantIdentity(user), user.Name ?? user.Email);
402
+
334
403
  // Opt-in: an agent that can bring a person, a number or another agent into this room (the same room, so a visitor
335
404
  // is escalated without leaving it). Falls through to the standard start when the server cannot do handoffs.
336
405
  const handoffSessionBridgeID = await this.startWithHandoff(input, roomName, user, provider);
337
406
  if (handoffSessionBridgeID) {
338
- const handoffToken = await new LiveKitTokenService().MintClientToken(roomName, this.participantIdentity(user), user.Name ?? user.Email);
339
407
  return {
340
408
  Success: true,
341
409
  SessionBridgeID: handoffSessionBridgeID,
342
410
  RoomName: roomName,
343
- ServerUrl: handoffToken.ServerUrl,
344
- ClientToken: handoffToken.Token,
345
- Identity: handoffToken.Identity,
411
+ ServerUrl: clientToken.ServerUrl,
412
+ ClientToken: clientToken.Token,
413
+ Identity: clientToken.Identity,
346
414
  };
347
415
  }
348
416
 
@@ -351,6 +419,10 @@ export class RealtimeBridgeResolver extends ResolverBase {
351
419
  // freshly-created one. Previously this minted a bare random UUID with no backing row, so the
352
420
  // bridge INSERT failed the FK_AIAgentSessionBridge_Session constraint.
353
421
  let agentSessionID = input.AgentSessionID?.trim();
422
+ // A session created here exists for this agent's time in the room alone, so it closes when the agent leaves, however
423
+ // it leaves, or at once if the agent fails to start (see startAgentInRoom). A session the caller supplied is the
424
+ // caller's to close.
425
+ let createdSessionID: string | undefined;
354
426
  if (!agentSessionID) {
355
427
  if (!input.AgentID?.trim()) {
356
428
  return failure('An AgentID is required to start an agent room session.', roomName);
@@ -361,9 +433,10 @@ export class RealtimeBridgeResolver extends ResolverBase {
361
433
  provider,
362
434
  );
363
435
  agentSessionID = createdSession.ID;
436
+ createdSessionID = createdSession.ID;
364
437
  }
365
438
 
366
- const session = await LiveKitAgentRoomCoordinator.Instance.StartAgentRoomSession({
439
+ const session = await this.startAgentInRoom(createdSessionID, user, provider, {
367
440
  AgentSessionID: agentSessionID,
368
441
  RoomName: roomName,
369
442
  AgentID: input.AgentID,
@@ -377,9 +450,6 @@ export class RealtimeBridgeResolver extends ResolverBase {
377
450
  MetadataProvider: provider,
378
451
  });
379
452
 
380
- const tokenService = new LiveKitTokenService();
381
- const clientToken = await tokenService.MintClientToken(roomName, this.participantIdentity(user), user.Name ?? user.Email);
382
-
383
453
  return {
384
454
  Success: true,
385
455
  SessionBridgeID: session.SessionBridgeID,
@@ -399,6 +469,7 @@ export class RealtimeBridgeResolver extends ResolverBase {
399
469
  * Stops one agent's presence in a room (the bot leaves) — the remove half of in-room agent management.
400
470
  * Identified by the `SessionBridgeID` returned from {@link StartLiveKitAgentRoomSession}. Returns `true`
401
471
  * when the bridge was stopped. Best-effort: a missing/already-stopped bridge or any error resolves `false`.
472
+ * The agent session the start created for the agent is closed (`Explicit`) before this returns.
402
473
  *
403
474
  * @param sessionBridgeID The `MJ: AI Agent Session Bridges` row id of the agent to remove.
404
475
  */
@@ -433,6 +504,7 @@ export class RealtimeBridgeResolver extends ResolverBase {
433
504
  * coordinator's server-side roster). This is the "End meeting" half of the Zoom-style leave control —
434
505
  * usable by any participant, including one who only *joined* the room and never tracked the bridge ids.
435
506
  * Returns `true` when the teardown ran (even if the room held zero agents). Best-effort: any error → `false`.
507
+ * The agent sessions the starts created for the agents are closed (`Explicit`) as each agent leaves.
436
508
  *
437
509
  * @param roomName The LiveKit room to end.
438
510
  */
@@ -672,6 +744,46 @@ export class RealtimeBridgeResolver extends ResolverBase {
672
744
  }
673
745
  }
674
746
 
747
+ /**
748
+ * Records whether the current user lets agents see their camera and shared screen in a room. The participant is
749
+ * worked out from the authenticated user, never sent by the client, so a person can only answer for themselves. To
750
+ * allow, the room must be one they may enter ({@link RoomAuthorizationService}, as for every room mutation). A
751
+ * withdrawal skips that check: a cancelled meeting or a failed lookup must not keep an agent watching someone who is
752
+ * still in the room, and the identity is always the caller's own. LiveKit refuses either way when they are not in it. The choice is set as their `mj.agentCanSee` attribute through LiveKit's server SDK (a
753
+ * participant's token can't change its own attributes) and audited, applied or not.
754
+ */
755
+ @Mutation(() => LiveKitAgentVisionResult)
756
+ async SetLiveKitAgentVision(
757
+ @Arg('input', () => SetLiveKitAgentVisionInput) input: SetLiveKitAgentVisionInput,
758
+ @Ctx() context: AppContext = {} as AppContext,
759
+ ): Promise<LiveKitAgentVisionResult> {
760
+ try {
761
+ const user = this.GetUserFromPayload(context.userPayload);
762
+ if (!user) {
763
+ return { Success: false, ErrorMessage: 'Unable to determine current user.' };
764
+ }
765
+ const provider = GetReadWriteProvider(context.providers) as unknown as IMetadataProvider;
766
+ const auth: RoomAuthorizationResult = input.Allow
767
+ ? await RoomAuthorizationService.Instance.AuthorizeRoomAccess(input.RoomName, user, provider)
768
+ : { Authorized: true };
769
+ const result: ParticipantUpdateResult = auth.Authorized
770
+ ? await new LiveKitParticipantService().SetAgentVision(input.RoomName, this.participantIdentity(user), input.Allow)
771
+ : { Success: false, ErrorMessage: auth.Reason ?? 'Unauthorized room access.' };
772
+ await WriteAgentVisionConsentAudit(
773
+ { User: user, RoomName: input.RoomName, Allow: input.Allow, Applied: result.Success, ErrorMessage: result.ErrorMessage },
774
+ provider,
775
+ );
776
+ if (result.Success) {
777
+ return { Success: true };
778
+ }
779
+ return { Success: false, ErrorMessage: result.NotInRoom ? 'You are not in this room.' : result.ErrorMessage };
780
+ } catch (error) {
781
+ const msg = error instanceof Error ? error.message : String(error);
782
+ LogError(`SetLiveKitAgentVision failed: ${msg}`);
783
+ return { Success: false, ErrorMessage: msg };
784
+ }
785
+ }
786
+
675
787
  /**
676
788
  * Starts the agent through the handoff-capable room starter when the caller asked for it and the server can do it.
677
789
  * Returns the bridge id, or `undefined` to mean "use the standard start" (not requested, no starter, no agent named).
@@ -704,6 +816,46 @@ export class RealtimeBridgeResolver extends ResolverBase {
704
816
  return started.SessionBridgeID;
705
817
  }
706
818
 
819
+ /**
820
+ * Starts the agent in the room through the coordinator. An agent session created for this agent's time in the room
821
+ * (`createdSessionID`) is this start's to close: once the agent has joined, through the end-of-session hook from
822
+ * {@link closeSessionWhenAgentLeaves}; when the start fails, at once, as `Error`, through
823
+ * {@link SessionManager.CloseSessionForFailedStart}, before the error propagates, since the agent never joined and that
824
+ * hook never runs (#5308). By then the coordinator has closed any model session the start opened, its co-agent run
825
+ * finalized as failed. A session the caller supplied gets neither: it is the caller's.
826
+ */
827
+ private async startAgentInRoom(
828
+ createdSessionID: string | undefined,
829
+ user: UserInfo,
830
+ provider: IMetadataProvider,
831
+ params: Omit<StartAgentRoomSessionParams, 'Host'>,
832
+ ): Promise<AgentRoomSession> {
833
+ const coordinator = LiveKitAgentRoomCoordinator.Instance;
834
+ if (!createdSessionID) {
835
+ return coordinator.StartAgentRoomSession(params);
836
+ }
837
+ try {
838
+ return await coordinator.StartAgentRoomSession({ ...params, Host: this.closeSessionWhenAgentLeaves(createdSessionID, user, provider) });
839
+ } catch (error) {
840
+ await this.sessionManager.CloseSessionForFailedStart(createdSessionID, user, provider);
841
+ throw error;
842
+ }
843
+ }
844
+
845
+ /**
846
+ * What the coordinator is given for an agent session created for one agent's time in a room: its end-of-session hook
847
+ * closes the session once the agent's bridge has ended, whatever ended it (the agent stopped, the meeting ended, everyone
848
+ * left, the model session lost), through {@link SessionManager.CloseSessionForEndedBridge}. The close runs as the user
849
+ * who started the agent, whoever stops it: the session is theirs.
850
+ */
851
+ private closeSessionWhenAgentLeaves(agentSessionID: string, user: UserInfo, provider: IMetadataProvider): AgentRoomHostOptions {
852
+ return {
853
+ OnSessionEnded: async (reason) => {
854
+ await this.sessionManager.CloseSessionForEndedBridge(agentSessionID, reason, user, provider);
855
+ },
856
+ };
857
+ }
858
+
707
859
  /** Builds a stable, lowercased participant identity from the authenticated user (shared with the handoff engine, which watches for it). */
708
860
  private participantIdentity(user: UserInfo): string {
709
861
  return LiveKitUserIdentity(user.ID);