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

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 (664) hide show
  1. package/README.md +96 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/BridgeHostInstance.d.ts +8 -3
  4. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -1
  5. package/dist/agentSessions/BridgeHostInstance.js +14 -4
  6. package/dist/agentSessions/BridgeHostInstance.js.map +1 -1
  7. package/dist/agentSessions/HandoffOfferExpiry.d.ts +10 -0
  8. package/dist/agentSessions/HandoffOfferExpiry.d.ts.map +1 -0
  9. package/dist/agentSessions/HandoffOfferExpiry.js +18 -0
  10. package/dist/agentSessions/HandoffOfferExpiry.js.map +1 -0
  11. package/dist/agentSessions/ReturningVisitorRecap.js +1 -0
  12. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  13. package/dist/agentSessions/SessionJanitor.d.ts +34 -11
  14. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  15. package/dist/agentSessions/SessionJanitor.js +88 -44
  16. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  17. package/dist/agentSessions/SessionManager.d.ts +29 -9
  18. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  19. package/dist/agentSessions/SessionManager.js +62 -16
  20. package/dist/agentSessions/SessionManager.js.map +1 -1
  21. package/dist/agentSessions/conversationBrowsers.d.ts +61 -0
  22. package/dist/agentSessions/conversationBrowsers.d.ts.map +1 -0
  23. package/dist/agentSessions/conversationBrowsers.js +118 -0
  24. package/dist/agentSessions/conversationBrowsers.js.map +1 -0
  25. package/dist/agentSessions/sessionDeadline.d.ts +43 -0
  26. package/dist/agentSessions/sessionDeadline.d.ts.map +1 -0
  27. package/dist/agentSessions/sessionDeadline.js +68 -0
  28. package/dist/agentSessions/sessionDeadline.js.map +1 -0
  29. package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
  30. package/dist/auth/APIKeyScopeAuth.js +5 -4
  31. package/dist/auth/APIKeyScopeAuth.js.map +1 -1
  32. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  33. package/dist/auth/AuthProviderCatalogRouter.js +2 -0
  34. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  35. package/dist/auth/index.d.ts.map +1 -1
  36. package/dist/auth/index.js +51 -10
  37. package/dist/auth/index.js.map +1 -1
  38. package/dist/auth/initializeProviders.d.ts +10 -0
  39. package/dist/auth/initializeProviders.d.ts.map +1 -1
  40. package/dist/auth/initializeProviders.js +37 -1
  41. package/dist/auth/initializeProviders.js.map +1 -1
  42. package/dist/auth/localDevAuth.d.ts +79 -0
  43. package/dist/auth/localDevAuth.d.ts.map +1 -0
  44. package/dist/auth/localDevAuth.js +439 -0
  45. package/dist/auth/localDevAuth.js.map +1 -0
  46. package/dist/auth/loginEmailResolution.d.ts +41 -0
  47. package/dist/auth/loginEmailResolution.d.ts.map +1 -0
  48. package/dist/auth/loginEmailResolution.js +47 -0
  49. package/dist/auth/loginEmailResolution.js.map +1 -0
  50. package/dist/auth/magicLink/MagicLinkKeys.d.ts +51 -3
  51. package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
  52. package/dist/auth/magicLink/MagicLinkKeys.js +130 -13
  53. package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
  54. package/dist/auth/magicLink/MagicLinkRouter.d.ts +3 -0
  55. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  56. package/dist/auth/magicLink/MagicLinkRouter.js +23 -5
  57. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  58. package/dist/auth/magicLink/MagicLinkService.d.ts +39 -5
  59. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  60. package/dist/auth/magicLink/MagicLinkService.js +221 -9
  61. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  62. package/dist/auth/magicLink/index.d.ts +1 -1
  63. package/dist/auth/magicLink/index.d.ts.map +1 -1
  64. package/dist/auth/magicLink/index.js +1 -1
  65. package/dist/auth/magicLink/index.js.map +1 -1
  66. package/dist/auth/magicLink/redeemLanding.d.ts +2 -2
  67. package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
  68. package/dist/auth/magicLink/redeemLanding.js +7 -4
  69. package/dist/auth/magicLink/redeemLanding.js.map +1 -1
  70. package/dist/auth/magicLink/types.d.ts +39 -3
  71. package/dist/auth/magicLink/types.d.ts.map +1 -1
  72. package/dist/auth/magicLink/types.js +0 -4
  73. package/dist/auth/magicLink/types.js.map +1 -1
  74. package/dist/auth/newUsers.d.ts.map +1 -1
  75. package/dist/auth/newUsers.js +1 -0
  76. package/dist/auth/newUsers.js.map +1 -1
  77. package/dist/auth/sessionUserClone.d.ts +1 -1
  78. package/dist/auth/sessionUserClone.d.ts.map +1 -1
  79. package/dist/auth/sessionUserClone.js +3 -2
  80. package/dist/auth/sessionUserClone.js.map +1 -1
  81. package/dist/backgroundSweepConfigUnits.d.ts +231 -0
  82. package/dist/backgroundSweepConfigUnits.d.ts.map +1 -0
  83. package/dist/backgroundSweepConfigUnits.js +180 -0
  84. package/dist/backgroundSweepConfigUnits.js.map +1 -0
  85. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts +292 -0
  86. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -0
  87. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +442 -0
  88. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -0
  89. package/dist/broadcast/index.d.ts +6 -0
  90. package/dist/broadcast/index.d.ts.map +1 -0
  91. package/dist/broadcast/index.js +6 -0
  92. package/dist/broadcast/index.js.map +1 -0
  93. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts +43 -0
  94. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts.map +1 -0
  95. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js +144 -0
  96. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js.map +1 -0
  97. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts +46 -0
  98. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts.map +1 -0
  99. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js +149 -0
  100. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js.map +1 -0
  101. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts +49 -0
  102. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts.map +1 -0
  103. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js +131 -0
  104. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js.map +1 -0
  105. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts +24 -0
  106. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts.map +1 -0
  107. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js +51 -0
  108. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js.map +1 -0
  109. package/dist/cache.d.ts +3 -2
  110. package/dist/cache.d.ts.map +1 -1
  111. package/dist/cache.js.map +1 -1
  112. package/dist/config.d.ts +1402 -8
  113. package/dist/config.d.ts.map +1 -1
  114. package/dist/config.js +120 -0
  115. package/dist/config.js.map +1 -1
  116. package/dist/context.d.ts +5 -1
  117. package/dist/context.d.ts.map +1 -1
  118. package/dist/context.js +64 -12
  119. package/dist/context.js.map +1 -1
  120. package/dist/coreRoutes.d.ts +3 -1
  121. package/dist/coreRoutes.d.ts.map +1 -1
  122. package/dist/coreRoutes.js +20 -4
  123. package/dist/coreRoutes.js.map +1 -1
  124. package/dist/generated/graphql-schemas/__mj.d.ts +863 -14
  125. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  126. package/dist/generated/graphql-schemas/__mj.js +4167 -62
  127. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  128. package/dist/generic/CacheInvalidationResolver.d.ts +50 -30
  129. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  130. package/dist/generic/CacheInvalidationResolver.js +154 -79
  131. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  132. package/dist/generic/OrphanedConversationDetailReconciler.d.ts +11 -0
  133. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
  134. package/dist/generic/OrphanedConversationDetailReconciler.js +29 -1
  135. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  136. package/dist/generic/PubSubManager.d.ts +10 -0
  137. package/dist/generic/PubSubManager.d.ts.map +1 -1
  138. package/dist/generic/PubSubManager.js +44 -1
  139. package/dist/generic/PubSubManager.js.map +1 -1
  140. package/dist/generic/PushStatusResolver.d.ts +39 -6
  141. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  142. package/dist/generic/PushStatusResolver.js +93 -11
  143. package/dist/generic/PushStatusResolver.js.map +1 -1
  144. package/dist/generic/ResolverBase.d.ts +114 -29
  145. package/dist/generic/ResolverBase.d.ts.map +1 -1
  146. package/dist/generic/ResolverBase.js +509 -220
  147. package/dist/generic/ResolverBase.js.map +1 -1
  148. package/dist/generic/RunViewResolver.d.ts +15 -3
  149. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  150. package/dist/generic/RunViewResolver.js +126 -20
  151. package/dist/generic/RunViewResolver.js.map +1 -1
  152. package/dist/generic/actionOutputFieldSecurity.d.ts +26 -0
  153. package/dist/generic/actionOutputFieldSecurity.d.ts.map +1 -0
  154. package/dist/generic/actionOutputFieldSecurity.js +47 -0
  155. package/dist/generic/actionOutputFieldSecurity.js.map +1 -0
  156. package/dist/generic/fieldSecurityTransport.d.ts +30 -0
  157. package/dist/generic/fieldSecurityTransport.d.ts.map +1 -0
  158. package/dist/generic/fieldSecurityTransport.js +30 -0
  159. package/dist/generic/fieldSecurityTransport.js.map +1 -0
  160. package/dist/index.d.ts +4 -0
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +262 -84
  163. package/dist/index.js.map +1 -1
  164. package/dist/integration/ConnectionPause.d.ts +121 -0
  165. package/dist/integration/ConnectionPause.d.ts.map +1 -0
  166. package/dist/integration/ConnectionPause.js +183 -0
  167. package/dist/integration/ConnectionPause.js.map +1 -0
  168. package/dist/integration/CustomColumnPromoter.d.ts +72 -6
  169. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  170. package/dist/integration/CustomColumnPromoter.js +93 -47
  171. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  172. package/dist/integration/EntityMapLifecycle.d.ts +78 -4
  173. package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
  174. package/dist/integration/EntityMapLifecycle.js +199 -5
  175. package/dist/integration/EntityMapLifecycle.js.map +1 -1
  176. package/dist/integration/InactiveRowWarnings.d.ts +31 -0
  177. package/dist/integration/InactiveRowWarnings.d.ts.map +1 -1
  178. package/dist/integration/InactiveRowWarnings.js +29 -0
  179. package/dist/integration/InactiveRowWarnings.js.map +1 -1
  180. package/dist/integration/ObjectNamesByID.d.ts +28 -0
  181. package/dist/integration/ObjectNamesByID.d.ts.map +1 -0
  182. package/dist/integration/ObjectNamesByID.js +87 -0
  183. package/dist/integration/ObjectNamesByID.js.map +1 -0
  184. package/dist/integration/PostRestartIntrospect.d.ts +26 -0
  185. package/dist/integration/PostRestartIntrospect.d.ts.map +1 -0
  186. package/dist/integration/PostRestartIntrospect.js +27 -0
  187. package/dist/integration/PostRestartIntrospect.js.map +1 -0
  188. package/dist/integration/RSUPostRestartProgress.d.ts +176 -0
  189. package/dist/integration/RSUPostRestartProgress.d.ts.map +1 -0
  190. package/dist/integration/RSUPostRestartProgress.js +323 -0
  191. package/dist/integration/RSUPostRestartProgress.js.map +1 -0
  192. package/dist/integration/RSUProgressBridge.d.ts +41 -2
  193. package/dist/integration/RSUProgressBridge.d.ts.map +1 -1
  194. package/dist/integration/RSUProgressBridge.js +84 -1
  195. package/dist/integration/RSUProgressBridge.js.map +1 -1
  196. package/dist/integration/RunArtifactAuthorization.d.ts +39 -0
  197. package/dist/integration/RunArtifactAuthorization.d.ts.map +1 -0
  198. package/dist/integration/RunArtifactAuthorization.js +45 -0
  199. package/dist/integration/RunArtifactAuthorization.js.map +1 -0
  200. package/dist/integration/SchemaRefreshLaunch.d.ts +9 -0
  201. package/dist/integration/SchemaRefreshLaunch.d.ts.map +1 -1
  202. package/dist/integration/SchemaRefreshLaunch.js +3 -2
  203. package/dist/integration/SchemaRefreshLaunch.js.map +1 -1
  204. package/dist/integration/ScopedFieldsForBuild.d.ts +46 -0
  205. package/dist/integration/ScopedFieldsForBuild.d.ts.map +1 -0
  206. package/dist/integration/ScopedFieldsForBuild.js +91 -0
  207. package/dist/integration/ScopedFieldsForBuild.js.map +1 -0
  208. package/dist/integration/TargetConfigGuard.d.ts +40 -0
  209. package/dist/integration/TargetConfigGuard.d.ts.map +1 -0
  210. package/dist/integration/TargetConfigGuard.js +40 -0
  211. package/dist/integration/TargetConfigGuard.js.map +1 -0
  212. package/dist/logging/variablesLoggingMiddleware.d.ts +12 -0
  213. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  214. package/dist/logging/variablesLoggingMiddleware.js +50 -1
  215. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  216. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -1
  217. package/dist/realtimeSessions/SessionVerificationPortsBase.js +1 -0
  218. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -1
  219. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +8 -6
  220. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
  221. package/dist/realtimeSessions/ownedRealtimeSession.js +14 -6
  222. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
  223. package/dist/realtimeSessions/sessionAccess.d.ts +103 -11
  224. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
  225. package/dist/realtimeSessions/sessionAccess.js +147 -22
  226. package/dist/realtimeSessions/sessionAccess.js.map +1 -1
  227. package/dist/realtimeSessions/sessionConfigStamps.js +1 -1
  228. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -1
  229. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -1
  230. package/dist/realtimeSessions/subscriptionAuthorization.js +5 -2
  231. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -1
  232. package/dist/realtimeSessions/verificationWorkflow.d.ts +2 -0
  233. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -1
  234. package/dist/realtimeSessions/verificationWorkflow.js +1 -1
  235. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -1
  236. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  237. package/dist/realtimeWidget/WidgetRouter.js +19 -3
  238. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  239. package/dist/realtimeWidget/WidgetSessionService.d.ts +67 -7
  240. package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
  241. package/dist/realtimeWidget/WidgetSessionService.js +203 -19
  242. package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
  243. package/dist/realtimeWidget/host-identity.d.ts +1 -1
  244. package/dist/realtimeWidget/host-identity.js +1 -1
  245. package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
  246. package/dist/realtimeWidget/visitorIdentity.js +1 -0
  247. package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
  248. package/dist/realtimeWidget/widgetCore.d.ts +20 -1
  249. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  250. package/dist/realtimeWidget/widgetCore.js +21 -8
  251. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  252. package/dist/realtimeWidget/widgetGuestElevation.d.ts +1 -1
  253. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  254. package/dist/realtimeWidget/widgetGuestElevation.js +3 -1
  255. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  256. package/dist/requestOrigin.d.ts +22 -0
  257. package/dist/requestOrigin.d.ts.map +1 -0
  258. package/dist/requestOrigin.js +60 -0
  259. package/dist/requestOrigin.js.map +1 -0
  260. package/dist/resolvers/ActionResolver.d.ts +19 -1
  261. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  262. package/dist/resolvers/ActionResolver.js +63 -12
  263. package/dist/resolvers/ActionResolver.js.map +1 -1
  264. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  265. package/dist/resolvers/AdhocQueryResolver.js +1 -0
  266. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  267. package/dist/resolvers/AgentRunStatusPublisher.d.ts +18 -4
  268. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
  269. package/dist/resolvers/AgentRunStatusPublisher.js +32 -8
  270. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
  271. package/dist/resolvers/AgentSessionResolver.d.ts +10 -4
  272. package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
  273. package/dist/resolvers/AgentSessionResolver.js +44 -17
  274. package/dist/resolvers/AgentSessionResolver.js.map +1 -1
  275. package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
  276. package/dist/resolvers/AutotagPipelineResolver.js +2 -1
  277. package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
  278. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
  279. package/dist/resolvers/ConversationRunEventsResolver.js +2 -0
  280. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
  281. package/dist/resolvers/EntityCommunicationsResolver.d.ts +13 -1
  282. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  283. package/dist/resolvers/EntityCommunicationsResolver.js +50 -14
  284. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  285. package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts +6 -0
  286. package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts.map +1 -1
  287. package/dist/resolvers/ExecuteRemoteOperationResolver.js +30 -7
  288. package/dist/resolvers/ExecuteRemoteOperationResolver.js.map +1 -1
  289. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +28 -0
  290. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  291. package/dist/resolvers/FetchEntityVectorsResolver.js +117 -21
  292. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  293. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  294. package/dist/resolvers/FileCategoryResolver.js +1 -0
  295. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  296. package/dist/resolvers/FileResolver.d.ts +5 -0
  297. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  298. package/dist/resolvers/FileResolver.js +13 -4
  299. package/dist/resolvers/FileResolver.js.map +1 -1
  300. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  301. package/dist/resolvers/GetDataResolver.js +34 -13
  302. package/dist/resolvers/GetDataResolver.js.map +1 -1
  303. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +401 -11
  304. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  305. package/dist/resolvers/IntegrationDiscoveryResolver.js +2713 -1290
  306. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  307. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  308. package/dist/resolvers/MCPResolver.js +13 -2
  309. package/dist/resolvers/MCPResolver.js.map +1 -1
  310. package/dist/resolvers/MergeRecordsResolver.d.ts +8 -1
  311. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  312. package/dist/resolvers/MergeRecordsResolver.js +31 -3
  313. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  314. package/dist/resolvers/PipelineProgressResolver.d.ts +6 -0
  315. package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -1
  316. package/dist/resolvers/PipelineProgressResolver.js +5 -3
  317. package/dist/resolvers/PipelineProgressResolver.js.map +1 -1
  318. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  319. package/dist/resolvers/QueryResolver.js +20 -6
  320. package/dist/resolvers/QueryResolver.js.map +1 -1
  321. package/dist/resolvers/QuerySystemUserResolver.d.ts +38 -0
  322. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  323. package/dist/resolvers/QuerySystemUserResolver.js +184 -88
  324. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  325. package/dist/resolvers/RSUResolver.d.ts.map +1 -1
  326. package/dist/resolvers/RSUResolver.js +12 -0
  327. package/dist/resolvers/RSUResolver.js.map +1 -1
  328. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  329. package/dist/resolvers/RealtimeBridgeResolver.js +1 -0
  330. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  331. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +22 -2
  332. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  333. package/dist/resolvers/RealtimeClientSessionResolver.js +118 -33
  334. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  335. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +62 -10
  336. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  337. package/dist/resolvers/RemoteBrowserActionResolver.js +224 -39
  338. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  339. package/dist/resolvers/RunAIAgentResolver.d.ts +80 -16
  340. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  341. package/dist/resolvers/RunAIAgentResolver.js +388 -125
  342. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  343. package/dist/resolvers/RunAIPromptResolver.d.ts +5 -3
  344. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  345. package/dist/resolvers/RunAIPromptResolver.js +19 -18
  346. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  347. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  348. package/dist/resolvers/RunTemplateResolver.js +7 -5
  349. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  350. package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
  351. package/dist/resolvers/RunTestResolver.js +3 -1
  352. package/dist/resolvers/RunTestResolver.js.map +1 -1
  353. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  354. package/dist/resolvers/SyncDataResolver.js +4 -0
  355. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  356. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  357. package/dist/resolvers/TestQuerySQLResolver.js +1 -0
  358. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  359. package/dist/resolvers/TransactionGroupResolver.d.ts +17 -2
  360. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  361. package/dist/resolvers/TransactionGroupResolver.js +60 -15
  362. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  363. package/dist/resolvers/UserViewResolver.d.ts +1 -1
  364. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  365. package/dist/resolvers/UserViewResolver.js +2 -1
  366. package/dist/resolvers/UserViewResolver.js.map +1 -1
  367. package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
  368. package/dist/resolvers/meetingRecordingRegistration.js +2 -0
  369. package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
  370. package/dist/rest/EntityCRUDHandler.d.ts +6 -0
  371. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  372. package/dist/rest/EntityCRUDHandler.js +19 -5
  373. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  374. package/dist/rest/MediaAccessKeys.d.ts.map +1 -1
  375. package/dist/rest/MediaAccessKeys.js +6 -2
  376. package/dist/rest/MediaAccessKeys.js.map +1 -1
  377. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
  378. package/dist/rest/OAuthCallbackHandler.js +11 -5
  379. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  380. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  381. package/dist/rest/RESTEndpointHandler.js +8 -5
  382. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  383. package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
  384. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
  385. package/dist/rest/RealtimeRecordingHandler.js +6 -8
  386. package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
  387. package/dist/rest/ViewOperationsHandler.d.ts +6 -0
  388. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  389. package/dist/rest/ViewOperationsHandler.js +24 -6
  390. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  391. package/dist/rest/setupRESTEndpoints.d.ts +3 -1
  392. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  393. package/dist/rest/setupRESTEndpoints.js +11 -2
  394. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  395. package/dist/serverRoleConfigUnits.d.ts +29 -0
  396. package/dist/serverRoleConfigUnits.d.ts.map +1 -0
  397. package/dist/serverRoleConfigUnits.js +33 -0
  398. package/dist/serverRoleConfigUnits.js.map +1 -0
  399. package/dist/services/DurableEntityActionTaskSubmitter.d.ts.map +1 -1
  400. package/dist/services/DurableEntityActionTaskSubmitter.js +6 -1
  401. package/dist/services/DurableEntityActionTaskSubmitter.js.map +1 -1
  402. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  403. package/dist/services/TaskGraphActionRunner.js +2 -26
  404. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  405. package/dist/services/TaskGraphAgentRunner.d.ts +6 -0
  406. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
  407. package/dist/services/TaskGraphAgentRunner.js +38 -0
  408. package/dist/services/TaskGraphAgentRunner.js.map +1 -1
  409. package/dist/services/TaskGraphContinuationDeliverer.d.ts +5 -0
  410. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  411. package/dist/services/TaskGraphContinuationDeliverer.js +43 -15
  412. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  413. package/dist/services/WorkQueueHostService.d.ts +2 -1
  414. package/dist/services/WorkQueueHostService.d.ts.map +1 -1
  415. package/dist/services/WorkQueueHostService.js +19 -4
  416. package/dist/services/WorkQueueHostService.js.map +1 -1
  417. package/dist/services/workQueueConfig.d.ts +2 -2
  418. package/dist/services/workQueueConfig.js +5 -5
  419. package/dist/services/workQueueConfig.js.map +1 -1
  420. package/dist/sharedCache.js +1 -1
  421. package/dist/sharedCache.js.map +1 -1
  422. package/dist/types.d.ts +40 -1
  423. package/dist/types.d.ts.map +1 -1
  424. package/dist/types.js.map +1 -1
  425. package/package.json +98 -98
  426. package/src/__tests__/APIKeyScopeAuth.test.ts +4 -8
  427. package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -0
  428. package/src/__tests__/ActiveOperations.test.ts +68 -0
  429. package/src/__tests__/AdhocQueryResolver.dialect.test.ts +137 -0
  430. package/src/__tests__/AgentRunStatusPublisher.test.ts +49 -0
  431. package/src/__tests__/AgentSessionResolver.ownership.test.ts +150 -0
  432. package/src/__tests__/AssertTargetConfigs.test.ts +75 -0
  433. package/src/__tests__/BatchApplyParity.test.ts +109 -0
  434. package/src/__tests__/BridgeHostInstance.test.ts +42 -0
  435. package/src/__tests__/CollectInactiveRowWarnings.test.ts +115 -0
  436. package/src/__tests__/ConnectionPause.test.ts +192 -0
  437. package/src/__tests__/ConnectionPauseResolver.test.ts +166 -0
  438. package/src/__tests__/ConnectionPauseSave.test.ts +143 -0
  439. package/src/__tests__/CustomColumnPromoterCompletion.test.ts +142 -0
  440. package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
  441. package/src/__tests__/DeleteConnectionRemovesPerConnectionCatalog.test.ts +51 -0
  442. package/src/__tests__/DetachedDiscoveryStart.test.ts +65 -0
  443. package/src/__tests__/DurableEntityActionTaskSubmitter.test.ts +73 -0
  444. package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
  445. package/src/__tests__/EntityMapLifecycle.rekey.test.ts +252 -0
  446. package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
  447. package/src/__tests__/ExecuteRemoteOperationResolver.test.ts +213 -0
  448. package/src/__tests__/FetchEntityVectorsResolver.test.ts +206 -3
  449. package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
  450. package/src/__tests__/HandoffOfferExpiry.test.ts +40 -0
  451. package/src/__tests__/IntegrationRunArtifactAuthorization.test.ts +126 -0
  452. package/src/__tests__/MagicLinkKeys.test.ts +102 -0
  453. package/src/__tests__/MediaAccessKeys.test.ts +57 -10
  454. package/src/__tests__/NewArrivalsDefaultDisabled.test.ts +50 -0
  455. package/src/__tests__/ObjectNamesByID.test.ts +176 -0
  456. package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
  457. package/src/__tests__/PostRestartMapsInCatalogScope.test.ts +146 -0
  458. package/src/__tests__/QuerySystemUserResolver.childRows.test.ts +80 -0
  459. package/src/__tests__/QuerySystemUserResolver.collision.test.ts +200 -0
  460. package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
  461. package/src/__tests__/QuerySystemUserResolver.permissions.test.ts +132 -0
  462. package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
  463. package/src/__tests__/RSUPostRestartProgress.test.ts +343 -0
  464. package/src/__tests__/RSUProgressBridge.test.ts +188 -5
  465. package/src/__tests__/RSUStartupSweepWiring.test.ts +30 -0
  466. package/src/__tests__/ReactivateRefreshMessage.test.ts +10 -3
  467. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
  468. package/src/__tests__/RealtimeClientSessionResolver.test.ts +346 -46
  469. package/src/__tests__/{RefreshAdoptsNewColumns.test.ts → RefreshReportsNewColumns.test.ts} +25 -16
  470. package/src/__tests__/RemoteBrowserActionRecovery.test.ts +287 -0
  471. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +3 -0
  472. package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +100 -0
  473. package/src/__tests__/RemoteBrowserAudioStream.test.ts +3 -0
  474. package/src/__tests__/RemoteBrowserSnapshot.test.ts +3 -0
  475. package/src/__tests__/ResolverBase.clientOldValues.test.ts +344 -14
  476. package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
  477. package/src/__tests__/ResolverBase.encryptedApiZeroReencrypt.test.ts +307 -0
  478. package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +227 -0
  479. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +83 -1
  480. package/src/__tests__/ResolverBase.publishStatusUpdate.test.ts +68 -0
  481. package/src/__tests__/ResolverBase.userViewCacheAndDedup.test.ts +130 -0
  482. package/src/__tests__/RunAIAgentResolver.branch.test.ts +72 -13
  483. package/src/__tests__/RunAIAgentResolver.consultPredecessor.test.ts +289 -0
  484. package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
  485. package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
  486. package/src/__tests__/RunAIAgentResolver.handoff.test.ts +649 -0
  487. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +19 -27
  488. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +10 -2
  489. package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
  490. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +91 -13
  491. package/src/__tests__/RunTemplateResolver.test.ts +35 -2
  492. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
  493. package/src/__tests__/SchemaEvolutionCustomColumns.test.ts +119 -0
  494. package/src/__tests__/SchemaRefreshLaunch.test.ts +24 -2
  495. package/src/__tests__/ScopedFieldsForBuild.test.ts +192 -0
  496. package/src/__tests__/SessionJanitor.test.ts +195 -4
  497. package/src/__tests__/SessionManager.test.ts +164 -0
  498. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +2 -2
  499. package/src/__tests__/TaskGraphAgentRunner.test.ts +272 -16
  500. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +114 -3
  501. package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
  502. package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
  503. package/src/__tests__/ViewOperationsHandler.test.ts +9 -7
  504. package/src/__tests__/WidgetSessionService.test.ts +583 -4
  505. package/src/__tests__/WorkQueueHostService.test.ts +25 -7
  506. package/src/__tests__/apiRootBoot.test.ts +1 -1
  507. package/src/__tests__/backgroundSweepConfigUnits.test.ts +153 -0
  508. package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
  509. package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
  510. package/src/__tests__/cacheInvalidationRecordData.test.ts +45 -0
  511. package/src/__tests__/contextRequestOrigin.test.ts +105 -0
  512. package/src/__tests__/conversationBrowsers.test.ts +62 -0
  513. package/src/__tests__/fieldSecurityFixtures.ts +91 -0
  514. package/src/__tests__/globalCors.test.ts +3 -3
  515. package/src/__tests__/localDevAuth.test.ts +196 -0
  516. package/src/__tests__/magicLinkExtensionCapabilities.test.ts +413 -0
  517. package/src/__tests__/orphanedConversationDetailReconciler.start.test.ts +82 -0
  518. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
  519. package/src/__tests__/ownedRealtimeSession.test.ts +14 -0
  520. package/src/__tests__/pushStatusResolver.filter.test.ts +57 -1
  521. package/src/__tests__/realtimeRecordingHandler.test.ts +24 -2
  522. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +29 -1
  523. package/src/__tests__/realtimeSessions/ownedRealtimeSession.anonymous.test.ts +31 -0
  524. package/src/__tests__/realtimeSessions/ownedRealtimeSession.namedScoped.test.ts +37 -0
  525. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +224 -7
  526. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
  527. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
  528. package/src/__tests__/requestOrigin.test.ts +104 -0
  529. package/src/__tests__/resolverBase.cloudEventChangedFields.test.ts +157 -0
  530. package/src/__tests__/resolverBase.fieldSecurityTransport.test.ts +222 -0
  531. package/src/__tests__/resolverBase.fls.test.ts +146 -97
  532. package/src/__tests__/restTransport.fieldSecurity.test.ts +148 -0
  533. package/src/__tests__/runParamsTimeZone.test.ts +179 -0
  534. package/src/__tests__/runStreams.fieldSecurity.test.ts +100 -0
  535. package/src/__tests__/runViewProperties.test.ts +114 -0
  536. package/src/__tests__/scalabilityBenchmarks.test.ts +765 -0
  537. package/src/__tests__/scalabilityDatabaseIntegration.test.ts +207 -0
  538. package/src/__tests__/securityHardeningPr6034.test.ts +120 -0
  539. package/src/__tests__/sessionDeadline.test.ts +51 -0
  540. package/src/__tests__/sessionUserClone.test.ts +5 -1
  541. package/src/__tests__/sharedCache.test.ts +11 -0
  542. package/src/__tests__/startupSweepOrder.test.ts +40 -0
  543. package/src/__tests__/unifiedAuth.test.ts +101 -1
  544. package/src/__tests__/widgetGuestElevation.test.ts +2 -0
  545. package/src/agentSessions/BridgeHostInstance.ts +20 -5
  546. package/src/agentSessions/HandoffOfferExpiry.ts +18 -0
  547. package/src/agentSessions/ReturningVisitorRecap.ts +1 -0
  548. package/src/agentSessions/SessionJanitor.ts +95 -45
  549. package/src/agentSessions/SessionManager.ts +73 -20
  550. package/src/agentSessions/conversationBrowsers.ts +143 -0
  551. package/src/agentSessions/sessionDeadline.ts +81 -0
  552. package/src/auth/APIKeyScopeAuth.ts +5 -4
  553. package/src/auth/AuthProviderCatalogRouter.ts +3 -0
  554. package/src/auth/__tests__/loginEmailResolution.test.ts +67 -0
  555. package/src/auth/index.ts +56 -12
  556. package/src/auth/initializeProviders.ts +43 -1
  557. package/src/auth/localDevAuth.ts +528 -0
  558. package/src/auth/loginEmailResolution.ts +67 -0
  559. package/src/auth/magicLink/MagicLinkKeys.ts +147 -15
  560. package/src/auth/magicLink/MagicLinkRouter.ts +33 -6
  561. package/src/auth/magicLink/MagicLinkService.ts +250 -10
  562. package/src/auth/magicLink/index.ts +1 -1
  563. package/src/auth/magicLink/redeemLanding.ts +7 -4
  564. package/src/auth/magicLink/types.ts +38 -3
  565. package/src/auth/newUsers.ts +1 -0
  566. package/src/auth/sessionUserClone.ts +3 -2
  567. package/src/backgroundSweepConfigUnits.ts +213 -0
  568. package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +674 -0
  569. package/src/broadcast/index.ts +5 -0
  570. package/src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts +180 -0
  571. package/src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts +182 -0
  572. package/src/broadcast/providers/GCPPubSubBroadcastProvider.ts +169 -0
  573. package/src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts +57 -0
  574. package/src/cache.ts +2 -1
  575. package/src/config.ts +138 -0
  576. package/src/context.ts +71 -14
  577. package/src/coreRoutes.ts +29 -7
  578. package/src/generated/graphql-schemas/__mj.ts +4145 -1193
  579. package/src/generic/CacheInvalidationResolver.ts +135 -78
  580. package/src/generic/OrphanedConversationDetailReconciler.ts +36 -3
  581. package/src/generic/PubSubManager.ts +54 -1
  582. package/src/generic/PushStatusResolver.ts +108 -11
  583. package/src/generic/ResolverBase.ts +635 -234
  584. package/src/generic/RunViewResolver.ts +176 -64
  585. package/src/generic/actionOutputFieldSecurity.ts +75 -0
  586. package/src/generic/fieldSecurityTransport.ts +62 -0
  587. package/src/index.ts +310 -85
  588. package/src/integration/ConnectionPause.ts +222 -0
  589. package/src/integration/CustomColumnPromoter.ts +129 -54
  590. package/src/integration/EntityMapLifecycle.ts +229 -6
  591. package/src/integration/InactiveRowWarnings.ts +50 -0
  592. package/src/integration/ObjectNamesByID.ts +97 -0
  593. package/src/integration/PostRestartIntrospect.ts +49 -0
  594. package/src/integration/RSUPostRestartProgress.ts +359 -0
  595. package/src/integration/RSUProgressBridge.ts +85 -2
  596. package/src/integration/RunArtifactAuthorization.ts +65 -0
  597. package/src/integration/SchemaRefreshLaunch.ts +12 -2
  598. package/src/integration/ScopedFieldsForBuild.ts +113 -0
  599. package/src/integration/TargetConfigGuard.ts +71 -0
  600. package/src/logging/variablesLoggingMiddleware.ts +59 -3
  601. package/src/realtimeSessions/README.md +7 -3
  602. package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
  603. package/src/realtimeSessions/ownedRealtimeSession.ts +16 -6
  604. package/src/realtimeSessions/sessionAccess.ts +211 -25
  605. package/src/realtimeSessions/sessionConfigStamps.ts +1 -1
  606. package/src/realtimeSessions/subscriptionAuthorization.ts +4 -2
  607. package/src/realtimeSessions/verificationWorkflow.ts +3 -1
  608. package/src/realtimeWidget/WidgetRouter.ts +22 -4
  609. package/src/realtimeWidget/WidgetSessionService.ts +254 -17
  610. package/src/realtimeWidget/host-identity.ts +1 -1
  611. package/src/realtimeWidget/visitorIdentity.ts +1 -0
  612. package/src/realtimeWidget/widgetCore.ts +34 -9
  613. package/src/realtimeWidget/widgetGuestElevation.ts +3 -1
  614. package/src/requestOrigin.ts +64 -0
  615. package/src/resolvers/ActionResolver.ts +78 -15
  616. package/src/resolvers/AdhocQueryResolver.ts +1 -0
  617. package/src/resolvers/AgentRunStatusPublisher.ts +36 -8
  618. package/src/resolvers/AgentSessionResolver.ts +50 -18
  619. package/src/resolvers/AutotagPipelineResolver.ts +2 -1
  620. package/src/resolvers/ConversationRunEventsResolver.ts +2 -0
  621. package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
  622. package/src/resolvers/ExecuteRemoteOperationResolver.ts +41 -9
  623. package/src/resolvers/FetchEntityVectorsResolver.ts +132 -21
  624. package/src/resolvers/FileCategoryResolver.ts +1 -0
  625. package/src/resolvers/FileResolver.ts +14 -4
  626. package/src/resolvers/GetDataResolver.ts +35 -13
  627. package/src/resolvers/IntegrationDiscoveryResolver.ts +1570 -209
  628. package/src/resolvers/MCPResolver.ts +15 -2
  629. package/src/resolvers/MergeRecordsResolver.ts +23 -2
  630. package/src/resolvers/PipelineProgressResolver.ts +12 -3
  631. package/src/resolvers/QueryResolver.ts +20 -6
  632. package/src/resolvers/QuerySystemUserResolver.ts +207 -99
  633. package/src/resolvers/RSUResolver.ts +12 -0
  634. package/src/resolvers/RealtimeBridgeResolver.ts +1 -0
  635. package/src/resolvers/RealtimeClientSessionResolver.ts +144 -40
  636. package/src/resolvers/RemoteBrowserActionResolver.ts +252 -37
  637. package/src/resolvers/RunAIAgentResolver.ts +518 -163
  638. package/src/resolvers/RunAIPromptResolver.ts +18 -18
  639. package/src/resolvers/RunTemplateResolver.ts +9 -5
  640. package/src/resolvers/RunTestResolver.ts +3 -1
  641. package/src/resolvers/SyncDataResolver.ts +4 -0
  642. package/src/resolvers/TestQuerySQLResolver.ts +1 -0
  643. package/src/resolvers/TransactionGroupResolver.ts +66 -15
  644. package/src/resolvers/UserViewResolver.ts +2 -1
  645. package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +52 -0
  646. package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
  647. package/src/resolvers/meetingRecordingRegistration.ts +2 -0
  648. package/src/rest/EntityCRUDHandler.ts +22 -5
  649. package/src/rest/MediaAccessKeys.ts +6 -2
  650. package/src/rest/OAuthCallbackHandler.ts +13 -5
  651. package/src/rest/RESTEndpointHandler.ts +8 -5
  652. package/src/rest/RealtimeRecordingHandler.ts +9 -10
  653. package/src/rest/ViewOperationsHandler.ts +26 -7
  654. package/src/rest/setupRESTEndpoints.ts +11 -2
  655. package/src/serverRoleConfigUnits.ts +48 -0
  656. package/src/services/DurableEntityActionTaskSubmitter.ts +10 -2
  657. package/src/services/TaskGraphActionRunner.ts +2 -23
  658. package/src/services/TaskGraphAgentRunner.ts +43 -0
  659. package/src/services/TaskGraphContinuationDeliverer.ts +53 -20
  660. package/src/services/WorkQueueHostService.ts +26 -4
  661. package/src/services/workQueueConfig.ts +5 -5
  662. package/src/sharedCache.ts +1 -1
  663. package/src/types.ts +41 -1
  664. package/src/services/TaskOrchestration-Integration.md +0 -188
@@ -28,6 +28,15 @@ const ENTITY_MCP_SERVERS = 'MJ: MCP Servers';
28
28
  /** Entity name for OAuth Authorization States */
29
29
  const ENTITY_OAUTH_AUTHORIZATION_STATES = 'MJ: O Auth Authorization States';
30
30
 
31
+ const UUID_SHAPE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
32
+
33
+ function sqlUuid(value: string, argName: string): string {
34
+ if (typeof value !== 'string' || !UUID_SHAPE.test(value)) {
35
+ throw new Error(`${argName} must be a UUID`);
36
+ }
37
+ return value;
38
+ }
39
+
31
40
  /**
32
41
  * Configuration for OAuth callback handler
33
42
  */
@@ -693,12 +702,11 @@ export class OAuthCallbackHandler {
693
702
  const rv = new RunView();
694
703
 
695
704
  // Get connection to get server ID.
696
- // connectionId is caller-supplied (POST /oauth/initiate body). MJ ExtraFilter is a raw
697
- // SQL fragment, so single quotes MUST be doubled to prevent injection — matching the
698
- // escaping used for stateParameter in loadAuthorizationState().
705
+ // connectionId is caller-supplied (POST /oauth/initiate body); enforce strict UUID shape
706
+ // (matching MCPResolver.getServerOAuthConfig) before interpolating into ExtraFilter.
699
707
  const connResult = await rv.RunView<{ MCPServerID: string }>({
700
708
  EntityName: ENTITY_MCP_SERVER_CONNECTIONS,
701
- ExtraFilter: `ID='${connectionId.replace(/'/g, "''")}'`,
709
+ ExtraFilter: `ID='${sqlUuid(connectionId, 'connectionId')}'`,
702
710
  Fields: ['MCPServerID'],
703
711
  ResultType: 'simple'
704
712
  }, contextUser);
@@ -719,7 +727,7 @@ export class OAuthCallbackHandler {
719
727
  OAuthRequirePKCE: boolean | null;
720
728
  }>({
721
729
  EntityName: ENTITY_MCP_SERVERS,
722
- ExtraFilter: `ID='${serverId}'`,
730
+ ExtraFilter: `ID='${sqlUuid(serverId, 'serverId')}'`,
723
731
  Fields: [
724
732
  'OAuthIssuerURL', 'OAuthScopes', 'OAuthMetadataCacheTTLMinutes',
725
733
  'OAuthClientID', 'OAuthClientSecretEncrypted', 'OAuthRequirePKCE'
@@ -2,7 +2,7 @@ import express from 'express';
2
2
  import {
3
3
  BaseEntity, CompositeKey, EntityDeleteOptions, EntityInfo,
4
4
  EntityPermissionType, EntitySaveOptions, LogError, Metadata,
5
- RunView, RunViewParams, UserInfo
5
+ RunView, RunViewParams, StripServerOnlyRunViewParams, UserInfo
6
6
  } from '@memberjunction/core';
7
7
  import { EntityCRUDHandler } from './EntityCRUDHandler.js';
8
8
  import { ViewOperationsHandler } from './ViewOperationsHandler.js';
@@ -499,10 +499,11 @@ export class RESTEndpointHandler {
499
499
 
500
500
  const user = req['mjUser'];
501
501
 
502
- // Create RunViewParams from the request body
502
+ // Create RunViewParams from the request body, without the fields only server code sets;
503
+ // the time zone comes from the x-mj-timezone header, as on the GraphQL path
503
504
  const params: RunViewParams = {
504
- EntityName: entityName,
505
- ...viewParams
505
+ ...StripServerOnlyRunViewParams({ ...viewParams, EntityName: entityName }),
506
+ TimeZone: req.userPayload?.TimeZone
506
507
  };
507
508
 
508
509
  const result = await ViewOperationsHandler.runView(params, user);
@@ -533,7 +534,9 @@ export class RESTEndpointHandler {
533
534
 
534
535
  // Filter out any views for entities that aren't allowed
535
536
  // using our enhanced entity filtering with wildcards and schema support
536
- const filteredParams = params.filter(p => this.isEntityAllowed(p.EntityName));
537
+ const filteredParams = params
538
+ .filter(p => this.isEntityAllowed(p.EntityName))
539
+ .map(p => ({ ...StripServerOnlyRunViewParams(p), TimeZone: req.userPayload?.TimeZone }));
537
540
 
538
541
  // If all requested entities were filtered out, return an error
539
542
  if (filteredParams.length === 0 && params.length > 0) {
@@ -34,7 +34,7 @@ import {
34
34
  LoadOwnedRealtimeSession, RealtimeSessionNotFoundError, RealtimeSessionOwnershipError,
35
35
  } from '../realtimeSessions/ownedRealtimeSession.js';
36
36
  import type { IRecordingAssemblyScheduler } from '../realtimeSessions/RecordingAssemblyScheduler.js';
37
- import { AuthorizeSessionAccess, LoadSessionConversationExternalID } from '../realtimeSessions/sessionAccess.js';
37
+ import { AuthorizeLoadedSession } from '../realtimeSessions/sessionAccess.js';
38
38
 
39
39
  /** Where {@link CreateRealtimeRecordingRouter} is mounted (under the reserved `/realtime` root). */
40
40
  export const REALTIME_RECORDING_MOUNT_PATH = '/realtime/recording';
@@ -76,8 +76,8 @@ export interface RealtimeRecordingRouterDeps {
76
76
  /** The authenticated caller, or null (answered 401). */
77
77
  ResolveCaller(req: Request): RealtimeRecordingCaller | null;
78
78
  LoadOwnedSession: typeof LoadOwnedRealtimeSession;
79
- /** The session conversation's per-session scope id, for the anonymous-guest half of the access decision. */
80
- LoadConversationExternalID: typeof LoadSessionConversationExternalID;
79
+ /** The per-session scope rule of the access decision, applied to the session {@link LoadOwnedSession} returned. */
80
+ AuthorizeSession: typeof AuthorizeLoadedSession;
81
81
  /** The ledger for one request; `contextUser` is the caller (used for logging by the procs). */
82
82
  CreateLedger(provider: DatabaseProviderBase, contextUser: UserInfo): IRealtimeRecordingLedger;
83
83
  Scheduler: IRecordingAssemblyScheduler;
@@ -258,16 +258,15 @@ async function handleTerminal(deps: RealtimeRecordingRouterDeps, req: Request, r
258
258
 
259
259
  /**
260
260
  * Loads the session through the shared ownership gate, then applies the per-session scope rule of
261
- * {@link AuthorizeSessionAccess}. The gate alone checks `UserID`, which every anonymous widget guest shares
262
- * (they all authenticate as the one Anonymous user); without the scope rule one guest could write shards to
263
- * another guest's recording, and a different-bytes shard would mark it Failed. The owner half of the
264
- * decision repeats the gate's check on purpose: the decision is one rule, applied whole. Named users carry
265
- * no scope and are unaffected.
261
+ * {@link AuthorizeLoadedSession}. The production gate (`LoadOwnedRealtimeSession`) already applies the same
262
+ * rule, so this is a deliberate second check at the HTTP boundary: `LoadOwnedSession` is an injected dependency,
263
+ * and without the scope rule one anonymous guest could write shards to another guest's recording (every guest
264
+ * shares the one Anonymous user), and a different-bytes shard would mark it Failed. It costs one extra
265
+ * conversation read per request. Named users without a scope are unaffected.
266
266
  */
267
267
  async function loadAuthorizedSession(deps: RealtimeRecordingRouterDeps, sessionID: string, caller: RealtimeRecordingCaller): Promise<MJAIAgentSessionEntity> {
268
268
  const session = await deps.LoadOwnedSession(sessionID, caller.ContextUser, caller.Provider);
269
- const externalID = await deps.LoadConversationExternalID(session, caller.ContextUser, caller.Provider);
270
- const decision = AuthorizeSessionAccess({ SessionUserID: session.UserID, ConversationExternalID: externalID }, caller.ContextUser);
269
+ const decision = await deps.AuthorizeSession(session, caller.ContextUser, caller.Provider);
271
270
  if (decision.Allowed === false) {
272
271
  LogError(`RealtimeRecordingHandler: refused user ${caller.ContextUser.ID} on session ${sessionID}: ${decision.Reason}`);
273
272
  throw new RecordingRequestError(403, 'Not authorized for this realtime session');
@@ -1,8 +1,10 @@
1
1
  import {
2
- BaseEntity, LogError, Metadata, RunView, RunViewParams,
2
+ BaseEntity, EntityInfo, LogError, Metadata, RunView, RunViewParams,
3
3
  RunViewResult, UserInfo, type IRunViewProvider
4
4
  } from '@memberjunction/core';
5
+ import { EscapeSQLString } from '@memberjunction/global';
5
6
  import { ClientClauseScreen } from '@memberjunction/generic-database-provider';
7
+ import { ProjectRowsForCaller } from '../generic/fieldSecurityTransport.js';
6
8
 
7
9
  /**
8
10
  * View Operations Implementation for REST endpoints
@@ -40,7 +42,7 @@ export class ViewOperationsHandler {
40
42
  // Execute the view
41
43
  const result = await runView.RunView(params, user);
42
44
 
43
- return { success: true, result };
45
+ return { success: true, result: this.projectResult(result, entity, user, md) };
44
46
  } catch (error) {
45
47
  LogError(error);
46
48
  return { success: false, error: (error as Error)?.message || 'Unknown error' };
@@ -60,6 +62,7 @@ export class ViewOperationsHandler {
60
62
  // Validate and sanitize each set of parameters against the provider that runs the views
61
63
  const md = new Metadata(); // global-provider-ok: REST endpoint — no per-request provider injection in REST middleware yet
62
64
  const runView = new RunView();
65
+ const entities: EntityInfo[] = [];
63
66
  for (const params of paramsArray) {
64
67
  // Validate entity exists
65
68
  const entity = md.Entities.find(e => e.Name === params.EntityName);
@@ -81,12 +84,14 @@ export class ViewOperationsHandler {
81
84
 
82
85
  // Sanitize parameters
83
86
  this.sanitizeRunViewParams(params, md, runView.ProviderToUse, user);
87
+ entities.push(entity);
84
88
  }
85
89
 
86
90
  // Execute the views
87
91
  const results = await runView.RunViews(paramsArray, user);
88
92
 
89
- return { success: true, results };
93
+ const projected = results?.map((r, i) => this.projectResult(r, entities[i], user, md));
94
+ return { success: true, results: projected?.some((r, i) => r !== results[i]) ? projected : results };
90
95
  } catch (error) {
91
96
  LogError(error);
92
97
  return { success: false, error: (error as Error)?.message || 'Unknown error' };
@@ -120,7 +125,7 @@ export class ViewOperationsHandler {
120
125
  this.sanitizeRunViewParams(params, md, runView.ProviderToUse, user);
121
126
 
122
127
  // Execute the view
123
- return await runView.RunView(params, user);
128
+ return this.projectResult(await runView.RunView(params, user), entity, user, md);
124
129
  } catch (error) {
125
130
  LogError(error);
126
131
  throw error;
@@ -159,7 +164,7 @@ export class ViewOperationsHandler {
159
164
  // Run a view to get the available views
160
165
  const params: RunViewParams = {
161
166
  EntityName: 'MJ: User Views',
162
- ExtraFilter: `Entity = '${entityName}'`
167
+ ExtraFilter: `Entity = '${EscapeSQLString(entity.Name)}'`
163
168
  };
164
169
 
165
170
  const runView = new RunView();
@@ -193,6 +198,19 @@ export class ViewOperationsHandler {
193
198
  return this.GetEntityViews(entityName, user);
194
199
  }
195
200
 
201
+ /**
202
+ * The result with its rows reduced to what `user` may READ. The provider already narrows the
203
+ * rows it reads for a restricted caller; this is the backstop for any that arrive wider. The
204
+ * same result object comes back when no row needed changing.
205
+ */
206
+ private static projectResult(result: RunViewResult, entity: EntityInfo, user: UserInfo, md: Metadata): RunViewResult {
207
+ if (!result?.Results?.length) {
208
+ return result;
209
+ }
210
+ const rows = ProjectRowsForCaller(entity, result.Results as Record<string, unknown>[], user, md);
211
+ return rows === result.Results ? result : { ...result, Results: rows };
212
+ }
213
+
196
214
  /**
197
215
  * Sanitize and validate RunViewParams. Client filter and sort text passes the same clause
198
216
  * screen as the GraphQL RunView resolvers, parsed in the dialect of `provider`, the provider
@@ -231,8 +249,9 @@ export class ViewOperationsHandler {
231
249
  params.StartRow = Number.isFinite(parsed) ? Math.max(0, Math.floor(parsed as number)) : undefined;
232
250
  }
233
251
 
234
- // Default ResultType if not provided
235
- if (!params.ResultType) {
252
+ // Plain rows only on the wire. An entity object serializes its internal state rather than
253
+ // its projected field values, so a caller may not ask for one; a count carries no row.
254
+ if (params.ResultType !== 'count_only') {
236
255
  params.ResultType = 'simple';
237
256
  }
238
257
 
@@ -53,10 +53,12 @@ export interface RESTApiOptions {
53
53
  }
54
54
 
55
55
  /**
56
- * Default REST API configuration
56
+ * Default REST API configuration. Disabled by default (matching the documented default and
57
+ * MJServer's own config default): mounting a full-entity REST API must be an explicit decision,
58
+ * never a side effect of calling SetupRESTEndpoints with no options.
57
59
  */
58
60
  export const DEFAULT_REST_API_OPTIONS: RESTApiOptions = {
59
- enabled: true,
61
+ enabled: false,
60
62
  };
61
63
 
62
64
  /**
@@ -95,6 +97,13 @@ export function SetupRESTEndpoints(
95
97
  if (authMiddleware) {
96
98
  app.use(basePath, BodyParser.json({ limit: '50mb' }), authMiddleware, restHandler.getRouter());
97
99
  } else {
100
+ // MJServer itself is safe here (its unified auth middleware runs globally before this
101
+ // mount), but a third-party caller passing no authMiddleware may be mounting a fully
102
+ // UNauthenticated entity CRUD API — say so loudly.
103
+ LogStatusEx({
104
+ message: `REST API mounted at ${basePath} WITHOUT a route-level auth middleware. ` +
105
+ `Ensure an authentication middleware runs globally before this mount, or pass one to SetupRESTEndpoints.`,
106
+ });
98
107
  app.use(basePath, BodyParser.json({ limit: '50mb' }), restHandler.getRouter());
99
108
  }
100
109
 
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Supported MJServer horizontal scaling roles (`MJ_SERVER_ROLE`).
3
+ * - `'all'` (default): Monolithic mode — serves HTTP/GraphQL/WebSocket traffic AND runs all background worker loops.
4
+ * - `'api'`: Stateless API/WebSocket edge — serves HTTP/GraphQL/WebSocket traffic ONLY; skips background schedulers,
5
+ * queue dispatchers, and janitors so event-loop responsiveness is isolated from heavy background jobs.
6
+ * - `'worker'`: Background worker replica — runs `ScheduledJobsService`, `IntegrationSyncWorkerService`,
7
+ * `StartTaskGraphDispatcher`, `StartWorkQueueHost`, `SessionJanitor`, and orphan reconcilers while keeping
8
+ * only lightweight healthcheck/metrics HTTP endpoints active.
9
+ */
10
+ export type ServerRole = 'all' | 'api' | 'worker';
11
+
12
+ const VALID_SERVER_ROLES: ReadonlySet<string> = new Set<ServerRole>(['all', 'api', 'worker']);
13
+
14
+ /**
15
+ * Resolves the server role from `MJ_SERVER_ROLE` or `mj.config.cjs`'s `serverRole`.
16
+ * Defaults to `'all'` when unset or blank. Throws on unrecognized values so deployment typos
17
+ * fail fast at startup instead of silently running the wrong workload profile.
18
+ */
19
+ export function ResolveServerRole(rawValue?: string | null): ServerRole {
20
+ const trimmed = rawValue?.trim().toLowerCase();
21
+ if (!trimmed) {
22
+ return 'all';
23
+ }
24
+ if (VALID_SERVER_ROLES.has(trimmed)) {
25
+ return trimmed as ServerRole;
26
+ }
27
+ throw new Error(
28
+ `Invalid MJ_SERVER_ROLE "${rawValue}". Expected one of: 'all', 'api', 'worker'.`
29
+ );
30
+ }
31
+
32
+ /**
33
+ * Returns `true` when this server instance should start background worker loops
34
+ * (`ScheduledJobsService`, `IntegrationSyncWorkerService`, `StartTaskGraphDispatcher`,
35
+ * `StartWorkQueueHost`, `SessionJanitor`, `StartBridgeOrphanReconciliation`, and
36
+ * `OrphanDetailReconciler`).
37
+ */
38
+ export function ShouldRunBackgroundWorkers(role: ServerRole): boolean {
39
+ return role === 'all' || role === 'worker';
40
+ }
41
+
42
+ /**
43
+ * Returns `true` when this server instance is designated to serve interactive
44
+ * API / GraphQL / WebSocket client traffic.
45
+ */
46
+ export function ShouldServeInteractiveTraffic(role: ServerRole): boolean {
47
+ return role === 'all' || role === 'api';
48
+ }
@@ -15,7 +15,7 @@ import type {
15
15
  DurableEntityActionSubmission,
16
16
  DurableEntityActionSubmitter,
17
17
  } from '@memberjunction/actions-base';
18
- import { LogError } from '@memberjunction/core';
18
+ import { type IEntityDataProvider, type IMetadataProvider, LogError } from '@memberjunction/core';
19
19
  import { TaskNode, type TaskGraphSpec } from '@memberjunction/ai-core-plus';
20
20
  import { MJEnvironmentEntityExtended } from '@memberjunction/core-entities';
21
21
  import { TaskGraphService, type ProviderFactory } from '@memberjunction/task-graph';
@@ -59,7 +59,9 @@ export class DurableEntityActionTaskSubmitter implements DurableEntityActionSubm
59
59
  durable: true,
60
60
  };
61
61
 
62
- const provider = await this.providerFactory.CreateProvider();
62
+ const provider: IMetadataProvider = isMetadataProvider(request.Provider)
63
+ ? request.Provider
64
+ : await this.providerFactory.CreateProvider();
63
65
  const result = await new TaskGraphService().Submit(spec, {
64
66
  EnvironmentID: this.environmentID,
65
67
  ContextUser: request.ContextUser,
@@ -76,3 +78,9 @@ export class DurableEntityActionTaskSubmitter implements DurableEntityActionSubm
76
78
  }
77
79
  }
78
80
  }
81
+
82
+ function isMetadataProvider(
83
+ provider: IMetadataProvider | IEntityDataProvider | undefined,
84
+ ): provider is IMetadataProvider {
85
+ return !!provider && 'GetEntityObject' in provider && typeof provider.GetEntityObject === 'function';
86
+ }
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import { ActionEngineServer } from '@memberjunction/actions';
13
13
  import { ActionParam } from '@memberjunction/actions-base';
14
+ import { BuildActionOutputObject } from '@memberjunction/ai-core-plus';
14
15
  import { LogError } from '@memberjunction/core';
15
16
  import { UUIDsEqual } from '@memberjunction/global';
16
17
  import type { TaskActionRunner, TaskActionRunParams, TaskActionRunResult } from '@memberjunction/task-graph';
@@ -97,29 +98,7 @@ export class TaskGraphActionRunner implements TaskActionRunner {
97
98
  * produced.
98
99
  */
99
100
  private buildOutput(actionParams: ActionParam[], resultMessage?: string | null): Record<string, unknown> {
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
- }
114
- for (const p of actionParams ?? []) {
115
- if (p.Type === 'Output' || p.Type === 'Both') output[p.Name] = p.Value;
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
- }
122
- return output;
101
+ return BuildActionOutputObject(actionParams, resultMessage);
123
102
  }
124
103
 
125
104
  /**
@@ -43,6 +43,25 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
43
43
  };
44
44
  }
45
45
  }
46
+
47
+ let configurationId: string | undefined;
48
+ const requestedPreset = params.ConfigurationPresetName?.trim();
49
+ if (requestedPreset) {
50
+ const matched = AIEngine.Instance.FindActiveAgentConfigurationPreset(agent.ID, requestedPreset);
51
+ if (!matched) {
52
+ const presets = AIEngine.Instance.GetAgentConfigurationPresets(agent.ID, true);
53
+ const available = presets.map((p) => p.Name).join(', ') || 'none';
54
+ return {
55
+ Success: false,
56
+ ErrorMessage: `Agent '${agent.Name || params.AgentID}' has no active preset '${requestedPreset}'. Available: ${available}.`,
57
+ };
58
+ }
59
+ configurationId = matched.AIConfigurationID ?? undefined;
60
+ } else {
61
+ configurationId = parentRun?.ConfigurationID ?? undefined;
62
+ }
63
+
64
+ const parentAgentHierarchy = this.buildParentAgentHierarchy(parentRun, params);
46
65
  const taskContext = await this.resolveTaskContext(params);
47
66
  const conversationDetailId =
48
67
  parentRun?.ConversationDetailID ?? taskContext.conversationDetailId ?? undefined;
@@ -66,6 +85,8 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
66
85
  // rather than starting the chain over. Without it MAX_REINVOKE_DEPTH never fires.
67
86
  continuationDepth: params.ContinuationDepth ?? 0,
68
87
  parentRun,
88
+ parentAgentHierarchy,
89
+ configurationId,
69
90
  // The bridge from the agent's own progress stream up to graph-level observers: the
70
91
  // dispatcher turns these into rate-limited `NodeProgress` frames, which is how a
71
92
  // running Agent step shows "what it is doing right now" on the workflow canvas.
@@ -221,6 +242,28 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
221
242
  }
222
243
  }
223
244
 
245
+ /**
246
+ * Reads the root-first ancestor agent name hierarchy carried on the task from when its graph was
247
+ * submitted (`params.ParentAgentHierarchy`), falling back to the submitting run's own agent name
248
+ * when no hierarchy was persisted on the parent task.
249
+ */
250
+ private buildParentAgentHierarchy(
251
+ parentRun: MJAIAgentRunEntityExtended | undefined,
252
+ params: TaskAgentRunParams,
253
+ ): string[] | undefined {
254
+ if (Array.isArray(params.ParentAgentHierarchy)) {
255
+ const carried = params.ParentAgentHierarchy
256
+ .filter((name): name is string => typeof name === 'string')
257
+ .map((name) => name.trim())
258
+ .filter((name) => name.length > 0);
259
+ if (carried.length > 0) {
260
+ return carried;
261
+ }
262
+ }
263
+ const submittingAgentName = parentRun?.Agent?.trim();
264
+ return submittingAgentName ? [submittingAgentName] : undefined;
265
+ }
266
+
224
267
  /**
225
268
  * Builds the agent's instruction from the task's name/description, its structured input payload,
226
269
  * and its dependencies' outputs.
@@ -13,9 +13,9 @@
13
13
  * @module @memberjunction/server
14
14
  */
15
15
  import { LogError, LogStatus, RunView, type IMetadataProvider, type UserInfo } from '@memberjunction/core';
16
- import { UUIDsEqual } from '@memberjunction/global';
16
+ import { MJAIAgentRunEntity, MJConversationDetailEntity, MJConversationDetailEntityExtended } from '@memberjunction/core-entities';
17
17
  import { UserCache } from '@memberjunction/generic-database-provider';
18
- import { MJAIAgentRunEntity, MJConversationDetailEntity } from '@memberjunction/core-entities';
18
+ import { UUIDsEqual } from '@memberjunction/global';
19
19
  import { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';
20
20
  import { AgentRunner } from '@memberjunction/ai-agents';
21
21
  import { ChatMessageRole } from '@memberjunction/ai';
@@ -68,7 +68,12 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
68
68
  }
69
69
 
70
70
  const provider = await this.providerFactory.CreateProvider();
71
- const origin = await this.resolveOrigin(params.ConversationDetailID, provider);
71
+ // Written as the person who submitted the graph, marked as the server's: the conversation detail gate lets
72
+ // only a marked server write create or update an agent's reply, and only in a conversation its user owns or
73
+ // holds an Edit grant on. Not as the conversation's owner: `TaskGraph.Submit` takes any conversation detail
74
+ // ID, so writing as the owner would let anyone who can submit a graph post into a conversation they can't reach.
75
+ const writer = this.resolveSubmitter(params.SubmittedByUserID);
76
+ const origin = await this.resolveOrigin(params.ConversationDetailID, provider, writer.ID);
72
77
  if (!origin) {
73
78
  LogError(
74
79
  `[TaskGraphContinuationDeliverer] Conversation detail ${params.ConversationDetailID} could not be loaded — ` +
@@ -77,7 +82,6 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
77
82
  return;
78
83
  }
79
84
 
80
- const actingUser = this.resolveActingUser(origin.OwnerUserID);
81
85
  const enrichedParams = await this.enrichTasksWithOutputs(params, provider);
82
86
  const renderedOutcome = this.renderMessage(enrichedParams);
83
87
 
@@ -105,8 +109,9 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
105
109
  return;
106
110
  }
107
111
 
108
- const detail = await provider.GetEntityObject<MJConversationDetailEntity>('MJ: Conversation Details', actingUser);
112
+ const detail = await provider.GetEntityObject<MJConversationDetailEntityExtended>('MJ: Conversation Details', writer);
109
113
  detail.NewRecord();
114
+ detail.MarkServerAuthoredReply();
110
115
  detail.ConversationID = origin.ConversationID;
111
116
  detail.BranchID = origin.BranchID;
112
117
  detail.ParentID = params.ConversationDetailID;
@@ -191,7 +196,7 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
191
196
 
192
197
  // Run on the fork of the message that started the graph, as PostMessage posts into it:
193
198
  // RunAgent derives the conversation from the detail, but not the fork.
194
- const runUserId = targetRun.UserID || priorRun.UserID;
199
+ const runUserId = targetRun.UserID || priorRun.UserID || params.SubmittedByUserID;
195
200
  const origin = params.ConversationDetailID
196
201
  ? await this.resolveOrigin(params.ConversationDetailID, provider, runUserId)
197
202
  : null;
@@ -205,15 +210,16 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
205
210
  // - When intervening messages were sent while the workflow ran (origin.IsLatest === false),
206
211
  // create a bottom continuation message linked via ParentID = params.ConversationDetailID
207
212
  // and update the originating message's stale "I'll follow up..." copy.
208
- let replyDetail: MJConversationDetailEntity | null = null;
213
+ let replyDetail: MJConversationDetailEntityExtended | null = null;
209
214
  let replySaved = false;
210
215
  if (origin?.ConversationID) {
211
216
  if (origin.IsLatest) {
212
217
  replyDetail = origin.OriginDetail;
213
218
  replySaved = true;
214
219
  } else {
215
- replyDetail = await provider.GetEntityObject<MJConversationDetailEntity>('MJ: Conversation Details', actingUser);
220
+ replyDetail = await provider.GetEntityObject<MJConversationDetailEntityExtended>('MJ: Conversation Details', actingUser);
216
221
  replyDetail.NewRecord();
222
+ replyDetail.MarkServerAuthoredReply();
217
223
  replyDetail.ConversationID = origin.ConversationID;
218
224
  replyDetail.BranchID = origin.BranchID;
219
225
  replyDetail.ParentID = params.ConversationDetailID;
@@ -272,7 +278,12 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
272
278
  if (result?.automaticCommands && result.automaticCommands.length > 0) {
273
279
  replyDetail.AutomaticCommands = JSON.stringify(result.automaticCommands);
274
280
  }
275
- await replyDetail.Save();
281
+ if (!(await replyDetail.Save())) {
282
+ LogError(
283
+ `[TaskGraphContinuationDeliverer] Could not save synthesized reply for "${params.WorkflowName}": ` +
284
+ `${replyDetail.LatestResult?.CompleteMessage ?? 'unknown error'}`
285
+ );
286
+ }
276
287
 
277
288
  if (!origin?.IsLatest && origin?.OriginDetail) {
278
289
  await this.markOriginDetailCompleted(origin.OriginDetail, params.WorkflowName);
@@ -335,6 +346,18 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
335
346
  }
336
347
  }
337
348
 
349
+ /**
350
+ * The person who submitted the graph; the deliverer's own user when the graph records no submitter or they are not
351
+ * in the user cache (the gate then decides, and refuses a conversation that user cannot write to).
352
+ */
353
+ private resolveSubmitter(submittedByUserID: string | null): UserInfo {
354
+ if (!submittedByUserID) {
355
+ return this.contextUser;
356
+ }
357
+ const users = UserCache.Instance?.Users ?? UserCache.Users ?? [];
358
+ return users.find((u) => UUIDsEqual(u.ID, submittedByUserID)) ?? this.contextUser;
359
+ }
360
+
338
361
  /**
339
362
  * Broadcasts a completion event on `PUSH_STATUS_UPDATES_TOPIC` so open conversation tabs
340
363
  * immediately reload both the originating workflow message and the newly posted continuation reply.
@@ -405,11 +428,11 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
405
428
  ConversationID: string;
406
429
  BranchID: string | null;
407
430
  OwnerUserID: string;
408
- OriginDetail: MJConversationDetailEntity;
431
+ OriginDetail: MJConversationDetailEntityExtended;
409
432
  IsLatest: boolean;
410
433
  } | null> {
411
434
  const initialUser = this.resolveActingUser(fallbackOwnerUserId);
412
- let detail = await provider.GetEntityObject<MJConversationDetailEntity>('MJ: Conversation Details', initialUser);
435
+ let detail = await provider.GetEntityObject<MJConversationDetailEntityExtended>('MJ: Conversation Details', initialUser);
413
436
  if (!(await detail.Load(conversationDetailID))) {
414
437
  return null;
415
438
  }
@@ -418,16 +441,20 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
418
441
  ownerUserId = await this.lookupConversationOwnerId(detail.ConversationID, provider);
419
442
  }
420
443
  const resolvedOwnerUserId = ownerUserId || this.contextUser.ID;
421
- const actingUser = this.resolveActingUser(resolvedOwnerUserId);
422
- // `MJConversationDetailEntityExtended.Save()` refuses writes when the entity's context user
423
- // is not the conversation owner (`this.contextUser` is the server system user). Re-bind
424
- // `OriginDetail` to `actingUser` whenever `ownerUserId` was discovered after loading `detail`.
425
- if (!UUIDsEqual(actingUser.ID, initialUser.ID)) {
426
- const writableDetail = await provider.GetEntityObject<MJConversationDetailEntity>('MJ: Conversation Details', actingUser);
427
- if (await writableDetail.Load(conversationDetailID)) {
428
- detail = writableDetail;
444
+ if (!fallbackOwnerUserId && !UUIDsEqual(resolvedOwnerUserId, initialUser.ID)) {
445
+ const ownerUser = this.resolveActingUser(resolvedOwnerUserId);
446
+ if (!UUIDsEqual(ownerUser.ID, initialUser.ID)) {
447
+ const reloaded = await provider.GetEntityObject<MJConversationDetailEntityExtended>('MJ: Conversation Details', ownerUser);
448
+ if (await reloaded.Load(conversationDetailID)) {
449
+ detail = reloaded;
450
+ }
429
451
  }
430
452
  }
453
+ // Mark the originating detail as server-authored when it is the workflow status or planning AI/error reply.
454
+ const role = detail.Role?.trim().toLowerCase();
455
+ if (!role || role === 'ai' || role === 'error') {
456
+ detail.MarkServerAuthoredReply();
457
+ }
431
458
  const branchId = detail.BranchID ?? null;
432
459
  const isLatest = detail.ConversationID
433
460
  ? await this.isLatestConversationMessage(detail.ConversationID, branchId, conversationDetailID, provider)
@@ -464,6 +491,7 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
464
491
  Fields: ['ID'],
465
492
  OrderBy: '__mj_CreatedAt DESC',
466
493
  MaxRows: 1,
494
+ SkipTotalRowCount: true,
467
495
  ResultType: 'simple',
468
496
  BypassCache: true,
469
497
  },
@@ -497,7 +525,12 @@ export class TaskGraphContinuationDeliverer implements TaskContinuationDeliverer
497
525
  ? `${cleaned}\n\n${completionNote}`
498
526
  : completionNote;
499
527
  originDetail.Status = 'Complete';
500
- await originDetail.Save();
528
+ if (!(await originDetail.Save())) {
529
+ LogError(
530
+ `[TaskGraphContinuationDeliverer] Could not update originating detail for "${workflowName}": ` +
531
+ `${originDetail.LatestResult?.CompleteMessage ?? 'unknown error'}`
532
+ );
533
+ }
501
534
  }
502
535
  } catch {
503
536
  // Non-fatal if origin detail note update fails.