@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,7 +1,7 @@
1
1
  import { LogError, UserInfo, IMetadataProvider, Metadata } from '@memberjunction/core';
2
2
  import { MJGlobal } from '@memberjunction/global';
3
3
  import type { MJFileEntity, MJFileStorageProviderEntity } from '@memberjunction/core-entities';
4
- import { FileStorageBase, FileStorageEngine } from '@memberjunction/storage';
4
+ import { FileStorageBase, FileStorageEngine, StorageAccessEvaluator, StorageAccountAccess, StorageObjectKeyOf } from '@memberjunction/storage';
5
5
  import type {
6
6
  AttachmentBlobUploadInput,
7
7
  AttachmentBlobUploadResult,
@@ -113,7 +113,7 @@ export class MJStorageBlobStore implements IAttachmentBlobStore {
113
113
  provider?: IMetadataProvider
114
114
  ): Promise<string | null> {
115
115
  try {
116
- const resolved = await this.resolveFileAndDriver(fileId, contextUser, provider);
116
+ const resolved = await this.resolveFileAndDriver(fileId, contextUser, 'Read', provider);
117
117
  if (!resolved) return null;
118
118
 
119
119
  const content = await resolved.driver.GetObject({ fullPath: resolved.objectKey });
@@ -132,7 +132,7 @@ export class MJStorageBlobStore implements IAttachmentBlobStore {
132
132
  provider?: IMetadataProvider
133
133
  ): Promise<string | null> {
134
134
  try {
135
- const resolved = await this.resolveFileAndDriver(fileId, contextUser, provider);
135
+ const resolved = await this.resolveFileAndDriver(fileId, contextUser, 'Read', provider);
136
136
  if (!resolved) return null;
137
137
  return resolved.driver.CreatePreAuthDownloadUrl(resolved.objectKey);
138
138
  } catch (err) {
@@ -148,7 +148,7 @@ export class MJStorageBlobStore implements IAttachmentBlobStore {
148
148
  provider?: IMetadataProvider
149
149
  ): Promise<boolean> {
150
150
  try {
151
- const resolved = await this.resolveFileAndDriver(fileId, contextUser, provider);
151
+ const resolved = await this.resolveFileAndDriver(fileId, contextUser, 'Write', provider);
152
152
  if (!resolved) return false;
153
153
 
154
154
  const deleted = await resolved.driver.DeleteObject(resolved.objectKey);
@@ -165,45 +165,46 @@ export class MJStorageBlobStore implements IAttachmentBlobStore {
165
165
  }
166
166
 
167
167
  /**
168
- * Loads a file, its storage provider, and a driver able to act on it.
168
+ * Loads a file (as the caller), and a driver able to act on it — through the storage gate.
169
169
  *
170
170
  * Shared by download, URL and delete, which previously repeated this block three times with
171
171
  * subtly different fallbacks — the account-credential path existed in only one of them.
172
+ *
173
+ * When an account links to the file's provider, `FileStorageEngine.ResolveFileObject` resolves it and refuses unless
174
+ * the caller may use that account for `access` and may read every `MJ: Files` row tracking the object (a row can
175
+ * alias another row's object). Otherwise the environment-configured driver serves the file; there is no account to
176
+ * gate, so only the tracked-file rule applies. A refusal throws, and each caller logs it and reports failure.
172
177
  */
173
178
  private async resolveFileAndDriver(
174
179
  fileId: string,
175
180
  contextUser: UserInfo,
181
+ access: StorageAccountAccess,
176
182
  provider?: IMetadataProvider
177
183
  ): Promise<{ file: MJFileEntity; driver: FileStorageBase; objectKey: string } | null> {
178
184
  const md = provider ?? Metadata.Provider;
179
-
180
- // Load the engine before asking it anything. `Accounts` returns an empty array when it has
181
- // not been configured, so on a cold process the account-credential branch below would be
182
- // skipped silently and the driver would fall back to environment-only credentials — which
183
- // then fails to read a file that is perfectly readable. Every other MJServer call site
184
- // configures immediately before use for the same reason.
185
- await FileStorageEngine.Instance.Config(false, contextUser);
186
-
187
185
  const file = await md.GetEntityObject<MJFileEntity>('MJ: Files', contextUser);
188
186
  if (!(await file.Load(fileId))) return null;
189
187
 
190
- const storageProvider = await md.GetEntityObject<MJFileStorageProviderEntity>(
191
- 'MJ: File Storage Providers',
192
- contextUser
193
- );
194
- if (!(await storageProvider.Load(file.ProviderID))) return null;
195
-
196
- // Prefer account-scoped credentials when an account links to this provider; fall back to
197
- // environment-configured credentials otherwise.
198
- const matchingAccounts = FileStorageEngine.Instance.GetAccountsByProviderID(file.ProviderID);
199
- const driver =
200
- matchingAccounts.length > 0
201
- ? await FileStorageEngine.Instance.GetDriver(matchingAccounts[0].ID, contextUser)
202
- : MJGlobal.Instance.ClassFactory.CreateInstance<FileStorageBase>(
203
- FileStorageBase,
204
- storageProvider.ServerDriverKey
205
- );
188
+ // Prefer account-scoped credentials (gated) when an account links to this provider. ResolveFileObject configures
189
+ // the engine first, so a cold process does not silently skip this branch.
190
+ const resolved = await FileStorageEngine.Instance.ResolveFileObject(file, contextUser, access, md);
191
+ if (resolved) {
192
+ return { file, driver: resolved.Driver, objectKey: resolved.ObjectKey };
193
+ }
194
+ return this.environmentDriverFor(file, contextUser, md);
195
+ }
206
196
 
207
- return { file, driver, objectKey: file.ProviderKey || file.Name };
197
+ /** The environment-configured driver for a file whose provider has no account — after the tracked-file rule. */
198
+ private async environmentDriverFor(
199
+ file: MJFileEntity,
200
+ contextUser: UserInfo,
201
+ md: IMetadataProvider
202
+ ): Promise<{ file: MJFileEntity; driver: FileStorageBase; objectKey: string } | null> {
203
+ const storageProvider = await md.GetEntityObject<MJFileStorageProviderEntity>('MJ: File Storage Providers', contextUser);
204
+ if (!(await storageProvider.Load(file.ProviderID))) return null;
205
+ const objectKey = StorageObjectKeyOf(file);
206
+ await StorageAccessEvaluator.Instance.AssertTrackedObjectsReadable(file.ProviderID, [objectKey], contextUser, md);
207
+ const driver = MJGlobal.Instance.ClassFactory.CreateInstance<FileStorageBase>(FileStorageBase, storageProvider.ServerDriverKey);
208
+ return { file, driver, objectKey };
208
209
  }
209
210
  }
@@ -75,10 +75,10 @@ export async function StartTaskGraphDispatcher(
75
75
  { InstanceID: instanceID ?? defaultInstanceID() },
76
76
  // Without this the dispatcher had nowhere to deliver: a finished graph logged its outcome,
77
77
  // marked itself delivered, and said nothing to the conversation that asked for it.
78
- new TaskGraphContinuationDeliverer(providerFactory, contextUser),
78
+ new TaskGraphContinuationDeliverer(providerFactory, contextUser, pubSub),
79
79
  // Live signal. Supplied only when a PubSub engine exists — in a worker or a test there is
80
80
  // nobody to publish to, and the dispatcher runs identically without one.
81
- pubSub ? new TaskGraphFrameBroadcaster(pubSub) : undefined,
81
+ pubSub ? new TaskGraphFrameBroadcaster(pubSub, true) : undefined,
82
82
  // Action nodes — the third execution shape, beside agents and people. Durable After* entity
83
83
  // actions land as these.
84
84
  new TaskGraphActionRunner(),
@@ -35,7 +35,7 @@ export class TaskGraphActionRunner implements TaskActionRunner {
35
35
  Filters: [],
36
36
  });
37
37
 
38
- const output = this.buildOutput(result.Params);
38
+ const output = this.buildOutput(result.Params, result.Message);
39
39
  const unstorable = this.findUnstorableOutput(output);
40
40
  if (unstorable) {
41
41
  const message =
@@ -90,15 +90,35 @@ export class TaskGraphActionRunner implements TaskActionRunner {
90
90
  * is exactly what the Demo workflow did: step 1 completed with an output payload of `{}` and
91
91
  * every downstream branch was skipped, with nothing anywhere reporting a problem.
92
92
  *
93
- * Only `Output` and `Both` params are included. Echoing the inputs back would let a step's own
94
- * parameters masquerade as its results, so an output mapping could "succeed" by reading the
95
- * value the step was given rather than the one it produced.
93
+ * Only `Output` and `Both` params are included (plus any structured JSON object returned in
94
+ * `resultMessage`, such as `Create Document`'s `{ handle, documentType, fileName }`). Echoing
95
+ * `Input`-only params back would let a step's own parameters masquerade as its results, so an
96
+ * output mapping could "succeed" by reading the value the step was given rather than the one it
97
+ * produced.
96
98
  */
97
- private buildOutput(actionParams: ActionParam[]): Record<string, unknown> {
99
+ private buildOutput(actionParams: ActionParam[], resultMessage?: string | null): Record<string, unknown> {
98
100
  const output: Record<string, unknown> = {};
101
+ if (typeof resultMessage === 'string') {
102
+ const trimmed = resultMessage.trim();
103
+ if (trimmed.startsWith('{') && trimmed.endsWith('}')) {
104
+ try {
105
+ const parsed: unknown = JSON.parse(trimmed);
106
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
107
+ Object.assign(output, parsed as Record<string, unknown>);
108
+ }
109
+ } catch {
110
+ // Non-JSON prose message; ignore.
111
+ }
112
+ }
113
+ }
99
114
  for (const p of actionParams ?? []) {
100
115
  if (p.Type === 'Output' || p.Type === 'Both') output[p.Name] = p.Value;
101
116
  }
117
+ if (typeof output.handle === 'string' && output.Handle === undefined) {
118
+ output.Handle = output.handle;
119
+ } else if (typeof output.Handle === 'string' && output.handle === undefined) {
120
+ output.handle = output.Handle;
121
+ }
102
122
  return output;
103
123
  }
104
124
 
@@ -13,8 +13,12 @@
13
13
  * @module @memberjunction/server
14
14
  */
15
15
  import { AgentRunner } from '@memberjunction/ai-agents';
16
+ import { AIEngine } from '@memberjunction/aiengine';
16
17
  import { ChatMessageRole } from '@memberjunction/ai';
17
- import { LogError } from '@memberjunction/core';
18
+ import { LogError, type UserInfo } from '@memberjunction/core';
19
+ import { UUIDsEqual } from '@memberjunction/global';
20
+ import { UserCache } from '@memberjunction/generic-database-provider';
21
+ import { MJTaskEntity } from '@memberjunction/core-entities';
18
22
  import { MJAIAgentEntityExtended, MJAIAgentRunEntityExtended } from '@memberjunction/ai-core-plus';
19
23
  import type { AgentExecutionProgressCallback } from '@memberjunction/ai-core-plus';
20
24
  import type { TaskAgentRunner, TaskAgentRunParams, TaskAgentRunResult } from '@memberjunction/task-graph';
@@ -27,14 +31,41 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
27
31
  return { Success: false, ErrorMessage: `Agent ${params.AgentID} could not be loaded.` };
28
32
  }
29
33
 
30
- const result = await new AgentRunner().RunAgent({
34
+ const parentRun = await this.loadSubmittingRun(params);
35
+ const actingUser = this.resolveActingUser(parentRun?.UserID, params.ContextUser);
36
+ const engineLoaded = (AIEngine.Instance?.Agents?.length ?? 0) > 0;
37
+ if (engineLoaded && actingUser && typeof AIEngine.Instance.CanUserRunAgent === 'function') {
38
+ const permitted = await AIEngine.Instance.CanUserRunAgent(agent.ID, actingUser);
39
+ if (!permitted) {
40
+ return {
41
+ Success: false,
42
+ ErrorMessage: `User does not have permission to run agent "${agent.Name}".`,
43
+ };
44
+ }
45
+ }
46
+ const taskContext = await this.resolveTaskContext(params);
47
+ const conversationDetailId =
48
+ parentRun?.ConversationDetailID ?? taskContext.conversationDetailId ?? undefined;
49
+
50
+ const runner = new AgentRunner(params.Provider);
51
+ const result = await runner.RunAgent({
31
52
  agent,
32
- conversationMessages: [{ role: ChatMessageRole.user, content: this.buildPrompt(params) }],
33
- contextUser: params.ContextUser,
53
+ provider: params.Provider,
54
+ conversationMessages: [{
55
+ role: ChatMessageRole.user,
56
+ content: this.buildPrompt(params, taskContext.name, taskContext.description),
57
+ }],
58
+ contextUser: actingUser,
59
+ conversationId: parentRun?.ConversationID ?? undefined,
60
+ // A task-graph step receives its explicit InputPayload and DependencyOutputs.
61
+ // Passing an empty inputArtifacts array prevents AgentRunner.hydrateConversationArtifacts
62
+ // from loading unrelated artifacts from earlier turns in the conversation and tempting
63
+ // the step agent to emit `version-source` against a prior turn's artifact.
64
+ inputArtifacts: [],
34
65
  // Inherited from the graph, so a graph this run goes on to emit is one hop deeper
35
66
  // rather than starting the chain over. Without it MAX_REINVOKE_DEPTH never fires.
36
67
  continuationDepth: params.ContinuationDepth ?? 0,
37
- parentRun: await this.loadSubmittingRun(params),
68
+ parentRun,
38
69
  // The bridge from the agent's own progress stream up to graph-level observers: the
39
70
  // dispatcher turns these into rate-limited `NodeProgress` frames, which is how a
40
71
  // running Agent step shows "what it is doing right now" on the workflow canvas.
@@ -42,6 +73,41 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
42
73
  });
43
74
 
44
75
  const success = result?.success === true;
76
+ if (
77
+ success &&
78
+ result?.payload != null &&
79
+ conversationDetailId &&
80
+ result.artifactDirective?.behavior !== 'suppress' &&
81
+ typeof runner.ProcessAgentArtifacts === 'function'
82
+ ) {
83
+ try {
84
+ // Each step in a task graph is an independent workflow node and multiple steps
85
+ // in the same graph share the originating ConversationDetailID. Enforcing
86
+ // `behavior: 'create-new'` (while preserving any directive name/description)
87
+ // prevents a step from accidentally versioning an earlier turn's artifact or
88
+ // overwriting a sibling DAG step's artifact via FindPreviousArtifactForMessage.
89
+ const stepArtifactResult = {
90
+ ...result,
91
+ artifactDirective: {
92
+ ...result.artifactDirective,
93
+ behavior: 'create-new' as const,
94
+ },
95
+ };
96
+ await runner.ProcessAgentArtifacts(
97
+ stepArtifactResult,
98
+ conversationDetailId,
99
+ undefined,
100
+ actingUser,
101
+ params.Provider,
102
+ );
103
+ } catch (artifactErr) {
104
+ LogError(
105
+ `[TaskGraphAgentRunner] Task ${params.TaskID}: artifact persistence failed (non-fatal): ` +
106
+ `${artifactErr instanceof Error ? artifactErr.message : String(artifactErr)}`,
107
+ );
108
+ }
109
+ }
110
+
45
111
  return {
46
112
  Success: success,
47
113
  Output: this.extractOutput(result),
@@ -55,6 +121,58 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
55
121
  }
56
122
  }
57
123
 
124
+ private resolveActingUser(ownerUserId: string | null | undefined, fallback: UserInfo): UserInfo {
125
+ if (!ownerUserId) {
126
+ return fallback;
127
+ }
128
+ try {
129
+ const users = UserCache.Instance?.Users ?? UserCache.Users ?? [];
130
+ const matched = users.find((u) => UUIDsEqual(u.ID, ownerUserId));
131
+ if (matched) {
132
+ return matched;
133
+ }
134
+ } catch {
135
+ // Fall back to params.ContextUser when UserCache is not initialized.
136
+ }
137
+ return fallback;
138
+ }
139
+
140
+ /**
141
+ * Resolves the step task's `Name`, `Description`, and originating `ConversationDetailID`
142
+ * (falling back to the parent workflow task row for `ConversationDetailID`).
143
+ */
144
+ private async resolveTaskContext(params: TaskAgentRunParams): Promise<{
145
+ name: string | null;
146
+ description: string | null;
147
+ conversationDetailId: string | null;
148
+ }> {
149
+ if (!params.TaskID) {
150
+ return { name: null, description: null, conversationDetailId: null };
151
+ }
152
+ try {
153
+ const task = await params.Provider.GetEntityObject<MJTaskEntity>('MJ: Tasks', params.ContextUser);
154
+ if (!(await task.Load(params.TaskID))) {
155
+ return { name: null, description: null, conversationDetailId: null };
156
+ }
157
+ const rawDesc = (task.Description || '').trim();
158
+ const cleanDesc = rawDesc.split(/\n\n--- (?:Output|Error) ---\n/)[0]?.trim() || null;
159
+ let conversationDetailId = task.ConversationDetailID ?? null;
160
+ if (!conversationDetailId && task.ParentID) {
161
+ const parentTask = await params.Provider.GetEntityObject<MJTaskEntity>('MJ: Tasks', params.ContextUser);
162
+ if (await parentTask.Load(task.ParentID)) {
163
+ conversationDetailId = parentTask.ConversationDetailID ?? null;
164
+ }
165
+ }
166
+ return {
167
+ name: task.Name?.trim() || null,
168
+ description: cleanDesc,
169
+ conversationDetailId,
170
+ };
171
+ } catch {
172
+ return { name: null, description: null, conversationDetailId: null };
173
+ }
174
+ }
175
+
58
176
  /**
59
177
  * Adapts the agent framework's progress callback onto the dispatcher's plain sink.
60
178
  *
@@ -104,15 +222,25 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
104
222
  }
105
223
 
106
224
  /**
107
- * Builds the agent's instruction from the task's own input plus its dependencies' outputs.
225
+ * Builds the agent's instruction from the task's name/description, its structured input payload,
226
+ * and its dependencies' outputs.
108
227
  *
109
228
  * Dependency outputs are included inline because a task's whole reason for depending on another
110
229
  * is to consume what it produced. They are rendered as labelled JSON rather than prose so the
111
230
  * agent can parse them reliably rather than inferring structure from formatting.
112
231
  */
113
- private buildPrompt(params: TaskAgentRunParams): string {
232
+ private buildPrompt(
233
+ params: TaskAgentRunParams,
234
+ taskName?: string | null,
235
+ taskDescription?: string | null,
236
+ ): string {
114
237
  const sections: string[] = [];
115
238
 
239
+ if (taskName || taskDescription) {
240
+ const header = taskName ? `## Task: ${taskName}` : '## Task Description';
241
+ sections.push(taskDescription ? `${header}\n${taskDescription}` : header);
242
+ }
243
+
116
244
  if (params.InputPayload != null) {
117
245
  sections.push(`## Task input\n\`\`\`json\n${JSON.stringify(params.InputPayload, null, 2)}\n\`\`\``);
118
246
  }
@@ -129,10 +257,59 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
129
257
  : 'Execute this task.';
130
258
  }
131
259
 
132
- /** Prefers a structured payload over prose, so downstream tasks get data rather than text. */
260
+ /**
261
+ * Prefers a structured payload over prose so downstream tasks get data rather than text,
262
+ * while preserving `agentRun.Message` when the payload object has no `message`/`summary`
263
+ * property (e.g., when a sub-agent returns a clarification question or human-readable summary)
264
+ * and normalizing `results` / `result` / `succeeded` for downstream condition evaluation.
265
+ */
133
266
  private extractOutput(result: unknown): unknown {
134
- const r = result as { payload?: unknown; agentRun?: { Message?: string } } | null;
135
- if (r?.payload != null) return r.payload;
136
- return r?.agentRun?.Message ?? null;
267
+ const r = result as {
268
+ success?: boolean;
269
+ payload?: unknown;
270
+ agentRun?: { Message?: string; FinalStep?: string };
271
+ } | null;
272
+ const runMessage = typeof r?.agentRun?.Message === 'string' ? r.agentRun.Message.trim() : '';
273
+ const isChatStop = r?.agentRun?.FinalStep === 'Chat';
274
+ if (r?.payload != null) {
275
+ if (typeof r.payload === 'object' && !Array.isArray(r.payload)) {
276
+ const payloadObj = r.payload as Record<string, unknown>;
277
+ const enriched: Record<string, unknown> = { ...payloadObj };
278
+
279
+ if (
280
+ enriched.results &&
281
+ typeof enriched.results === 'object' &&
282
+ !Array.isArray(enriched.results)
283
+ ) {
284
+ for (const [k, v] of Object.entries(enriched.results as Record<string, unknown>)) {
285
+ if (enriched[k] === undefined) {
286
+ enriched[k] = v;
287
+ }
288
+ }
289
+ }
290
+ if (enriched.results !== undefined && enriched.result === undefined) {
291
+ enriched.result = enriched.results;
292
+ } else if (enriched.result !== undefined && enriched.results === undefined) {
293
+ enriched.results = enriched.result;
294
+ }
295
+
296
+ if (runMessage && enriched.message == null && enriched.summary == null) {
297
+ enriched.message = runMessage;
298
+ }
299
+ if (isChatStop) {
300
+ enriched.finalStep = 'Chat';
301
+ } else if (typeof r.success === 'boolean' && enriched.succeeded === undefined) {
302
+ enriched.succeeded = r.success;
303
+ }
304
+ return enriched;
305
+ }
306
+ return r.payload;
307
+ }
308
+ if (runMessage) {
309
+ return isChatStop
310
+ ? { message: runMessage, finalStep: 'Chat' }
311
+ : { message: runMessage, succeeded: r?.success === true };
312
+ }
313
+ return null;
137
314
  }
138
315
  }