@memberjunction/server 6.2.0-edge.0 → 6.2.0-edge.2

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 (459) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/agentSessions/ReturningVisitorRecap.d.ts +2 -0
  3. package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
  4. package/dist/agentSessions/ReturningVisitorRecap.js +5 -1
  5. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  6. package/dist/agentSessions/SessionManager.js +2 -2
  7. package/dist/agentSessions/remoteBrowserGoalEngine.d.ts +8 -0
  8. package/dist/agentSessions/remoteBrowserGoalEngine.d.ts.map +1 -1
  9. package/dist/agentSessions/remoteBrowserGoalEngine.js +21 -5
  10. package/dist/agentSessions/remoteBrowserGoalEngine.js.map +1 -1
  11. package/dist/auth/AuthProviderCatalogRouter.d.ts +2 -0
  12. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  13. package/dist/auth/AuthProviderCatalogRouter.js +5 -1
  14. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  15. package/dist/auth/index.d.ts +20 -1
  16. package/dist/auth/index.d.ts.map +1 -1
  17. package/dist/auth/index.js +20 -10
  18. package/dist/auth/index.js.map +1 -1
  19. package/dist/auth/initializeProviders.d.ts +8 -0
  20. package/dist/auth/initializeProviders.d.ts.map +1 -1
  21. package/dist/auth/initializeProviders.js +21 -5
  22. package/dist/auth/initializeProviders.js.map +1 -1
  23. package/dist/auth/magicLink/MagicLinkRouter.d.ts +9 -0
  24. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  25. package/dist/auth/magicLink/MagicLinkRouter.js +22 -10
  26. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  27. package/dist/auth/magicLink/MagicLinkService.d.ts +17 -15
  28. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  29. package/dist/auth/magicLink/MagicLinkService.js +65 -51
  30. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  31. package/dist/auth/magicLink/index.d.ts +2 -2
  32. package/dist/auth/magicLink/index.d.ts.map +1 -1
  33. package/dist/auth/magicLink/index.js +2 -2
  34. package/dist/auth/magicLink/index.js.map +1 -1
  35. package/dist/auth/magicLink/magicLinkCore.d.ts +54 -33
  36. package/dist/auth/magicLink/magicLinkCore.d.ts.map +1 -1
  37. package/dist/auth/magicLink/magicLinkCore.js +61 -61
  38. package/dist/auth/magicLink/magicLinkCore.js.map +1 -1
  39. package/dist/auth/magicLink/redeemLanding.d.ts +4 -0
  40. package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
  41. package/dist/auth/magicLink/redeemLanding.js +12 -4
  42. package/dist/auth/magicLink/redeemLanding.js.map +1 -1
  43. package/dist/auth/magicLink/types.d.ts +4 -4
  44. package/dist/auth/principals.d.ts +2 -0
  45. package/dist/auth/principals.d.ts.map +1 -1
  46. package/dist/auth/principals.js +6 -2
  47. package/dist/auth/principals.js.map +1 -1
  48. package/dist/cache.d.ts +2 -0
  49. package/dist/cache.d.ts.map +1 -1
  50. package/dist/cache.js +3 -1
  51. package/dist/cache.js.map +1 -1
  52. package/dist/config.d.ts +346 -2
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +34 -4
  55. package/dist/config.js.map +1 -1
  56. package/dist/context.d.ts +20 -0
  57. package/dist/context.d.ts.map +1 -1
  58. package/dist/context.js +27 -19
  59. package/dist/context.js.map +1 -1
  60. package/dist/directives/Public.d.ts +2 -0
  61. package/dist/directives/Public.d.ts.map +1 -1
  62. package/dist/directives/Public.js +3 -1
  63. package/dist/directives/Public.js.map +1 -1
  64. package/dist/directives/RequireSystemUser.d.ts +2 -0
  65. package/dist/directives/RequireSystemUser.d.ts.map +1 -1
  66. package/dist/directives/RequireSystemUser.js +3 -1
  67. package/dist/directives/RequireSystemUser.js.map +1 -1
  68. package/dist/generated/graphql-schemas/__mj.d.ts +1021 -0
  69. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  70. package/dist/generated/graphql-schemas/__mj.js +7368 -2145
  71. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  72. package/dist/generic/CacheInvalidationResolver.d.ts +94 -4
  73. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  74. package/dist/generic/CacheInvalidationResolver.js +122 -3
  75. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  76. package/dist/generic/DeleteOptionsInput.d.ts +8 -1
  77. package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
  78. package/dist/generic/DeleteOptionsInput.js +1 -1
  79. package/dist/generic/DeleteOptionsInput.js.map +1 -1
  80. package/dist/generic/FireAndForgetHeartbeat.d.ts +18 -2
  81. package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
  82. package/dist/generic/FireAndForgetHeartbeat.js +24 -6
  83. package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
  84. package/dist/generic/OrphanedConversationDetailReconciler.d.ts +31 -0
  85. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -0
  86. package/dist/generic/OrphanedConversationDetailReconciler.js +215 -0
  87. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -0
  88. package/dist/generic/PushStatusResolver.d.ts +48 -1
  89. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  90. package/dist/generic/PushStatusResolver.js +95 -4
  91. package/dist/generic/PushStatusResolver.js.map +1 -1
  92. package/dist/generic/ResolverBase.d.ts +18 -2
  93. package/dist/generic/ResolverBase.d.ts.map +1 -1
  94. package/dist/generic/ResolverBase.js +64 -55
  95. package/dist/generic/ResolverBase.js.map +1 -1
  96. package/dist/index.d.ts +9 -0
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +120 -11
  99. package/dist/index.js.map +1 -1
  100. package/dist/integration/CustomColumnPromoter.d.ts +2 -0
  101. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  102. package/dist/integration/CustomColumnPromoter.js +5 -1
  103. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  104. package/dist/integration/EntityMapLifecycle.d.ts +4 -0
  105. package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
  106. package/dist/integration/EntityMapLifecycle.js +10 -2
  107. package/dist/integration/EntityMapLifecycle.js.map +1 -1
  108. package/dist/logging/NoLog.d.ts +4 -0
  109. package/dist/logging/NoLog.d.ts.map +1 -1
  110. package/dist/logging/NoLog.js +10 -2
  111. package/dist/logging/NoLog.js.map +1 -1
  112. package/dist/logging/StartupLogger.d.ts +2 -0
  113. package/dist/logging/StartupLogger.d.ts.map +1 -1
  114. package/dist/logging/StartupLogger.js +5 -1
  115. package/dist/logging/StartupLogger.js.map +1 -1
  116. package/dist/logging/bootAudit.d.ts +11 -7
  117. package/dist/logging/bootAudit.d.ts.map +1 -1
  118. package/dist/logging/bootAudit.js +15 -7
  119. package/dist/logging/bootAudit.js.map +1 -1
  120. package/dist/logging/boundaryLogPayload.d.ts +4 -0
  121. package/dist/logging/boundaryLogPayload.d.ts.map +1 -1
  122. package/dist/logging/boundaryLogPayload.js +5 -1
  123. package/dist/logging/boundaryLogPayload.js.map +1 -1
  124. package/dist/logging/secretRedactor.d.ts +2 -0
  125. package/dist/logging/secretRedactor.d.ts.map +1 -1
  126. package/dist/logging/secretRedactor.js +8 -4
  127. package/dist/logging/secretRedactor.js.map +1 -1
  128. package/dist/logging/shortenForLog.d.ts +2 -0
  129. package/dist/logging/shortenForLog.d.ts.map +1 -1
  130. package/dist/logging/shortenForLog.js +7 -3
  131. package/dist/logging/shortenForLog.js.map +1 -1
  132. package/dist/logging/variablesLoggingMiddleware.d.ts +2 -0
  133. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  134. package/dist/logging/variablesLoggingMiddleware.js +8 -6
  135. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  136. package/dist/metadataRefreshSignal.d.ts +19 -0
  137. package/dist/metadataRefreshSignal.d.ts.map +1 -0
  138. package/dist/metadataRefreshSignal.js +45 -0
  139. package/dist/metadataRefreshSignal.js.map +1 -0
  140. package/dist/middleware/MJTenantFilterMiddleware.js +4 -4
  141. package/dist/multiTenancy/index.d.ts +8 -0
  142. package/dist/multiTenancy/index.d.ts.map +1 -1
  143. package/dist/multiTenancy/index.js +21 -5
  144. package/dist/multiTenancy/index.js.map +1 -1
  145. package/dist/realtimeWidget/WidgetRouter.d.ts +5 -0
  146. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  147. package/dist/realtimeWidget/WidgetRouter.js +14 -10
  148. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  149. package/dist/realtimeWidget/WidgetSessionService.d.ts +6 -6
  150. package/dist/realtimeWidget/WidgetSessionService.js +27 -27
  151. package/dist/realtimeWidget/host-identity.d.ts +5 -1
  152. package/dist/realtimeWidget/host-identity.d.ts.map +1 -1
  153. package/dist/realtimeWidget/host-identity.js +11 -3
  154. package/dist/realtimeWidget/host-identity.js.map +1 -1
  155. package/dist/realtimeWidget/index.d.ts +2 -2
  156. package/dist/realtimeWidget/index.d.ts.map +1 -1
  157. package/dist/realtimeWidget/index.js +2 -2
  158. package/dist/realtimeWidget/index.js.map +1 -1
  159. package/dist/realtimeWidget/visitorIdentity.d.ts +21 -1
  160. package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
  161. package/dist/realtimeWidget/visitorIdentity.js +16 -4
  162. package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
  163. package/dist/realtimeWidget/widgetCore.d.ts +48 -0
  164. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  165. package/dist/realtimeWidget/widgetCore.js +38 -10
  166. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  167. package/dist/realtimeWidget/widgetGuestElevation.d.ts +10 -6
  168. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  169. package/dist/realtimeWidget/widgetGuestElevation.js +14 -6
  170. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  171. package/dist/resolvers/AdhocQueryResolver.js +3 -3
  172. package/dist/resolvers/AgentRunStatusPublisher.d.ts +55 -0
  173. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -0
  174. package/dist/resolvers/AgentRunStatusPublisher.js +141 -0
  175. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -0
  176. package/dist/resolvers/ConversationRunEventsResolver.d.ts +90 -0
  177. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -0
  178. package/dist/resolvers/ConversationRunEventsResolver.js +283 -0
  179. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -0
  180. package/dist/resolvers/DuplicateEntryCheckResolver.d.ts +98 -0
  181. package/dist/resolvers/DuplicateEntryCheckResolver.d.ts.map +1 -0
  182. package/dist/resolvers/DuplicateEntryCheckResolver.js +227 -0
  183. package/dist/resolvers/DuplicateEntryCheckResolver.js.map +1 -0
  184. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  185. package/dist/resolvers/FetchEntityVectorsResolver.js +2 -1
  186. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  187. package/dist/resolvers/FileResolver.js +3 -3
  188. package/dist/resolvers/GeoResolver.d.ts +2 -2
  189. package/dist/resolvers/GeoResolver.js +4 -4
  190. package/dist/resolvers/GetDataResolver.d.ts +14 -0
  191. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  192. package/dist/resolvers/GetDataResolver.js +43 -15
  193. package/dist/resolvers/GetDataResolver.js.map +1 -1
  194. package/dist/resolvers/IntegrationDiscoveryResolver.js +2 -2
  195. package/dist/resolvers/ListOperationsResolver.d.ts +20 -0
  196. package/dist/resolvers/ListOperationsResolver.d.ts.map +1 -1
  197. package/dist/resolvers/ListOperationsResolver.js +68 -28
  198. package/dist/resolvers/ListOperationsResolver.js.map +1 -1
  199. package/dist/resolvers/MCPResolver.d.ts +11 -1
  200. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  201. package/dist/resolvers/MCPResolver.js +7 -3
  202. package/dist/resolvers/MCPResolver.js.map +1 -1
  203. package/dist/resolvers/MergeRecordsResolver.d.ts +7 -0
  204. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  205. package/dist/resolvers/MergeRecordsResolver.js +16 -2
  206. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  207. package/dist/resolvers/RealtimeBridgeResolver.js +3 -3
  208. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +44 -6
  209. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  210. package/dist/resolvers/RealtimeClientSessionResolver.js +93 -37
  211. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  212. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -5
  213. package/dist/resolvers/RunAIAgentResolver.d.ts +8 -18
  214. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  215. package/dist/resolvers/RunAIAgentResolver.js +85 -184
  216. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  217. package/dist/resolvers/RunAIPromptResolver.d.ts +1 -1
  218. package/dist/resolvers/RunAIPromptResolver.js +2 -2
  219. package/dist/resolvers/RunDecisionResolver.d.ts +149 -0
  220. package/dist/resolvers/RunDecisionResolver.d.ts.map +1 -0
  221. package/dist/resolvers/RunDecisionResolver.js +396 -0
  222. package/dist/resolvers/RunDecisionResolver.js.map +1 -0
  223. package/dist/resolvers/RunTestResolver.js +5 -5
  224. package/dist/resolvers/SqlLoggingConfigResolver.d.ts +8 -4
  225. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  226. package/dist/resolvers/SqlLoggingConfigResolver.js +5 -5
  227. package/dist/resolvers/TaskGraphFrameResolver.d.ts +8 -1
  228. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
  229. package/dist/resolvers/TaskGraphFrameResolver.js +6 -2
  230. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
  231. package/dist/resolvers/VectorizeEntityResolver.d.ts +1 -1
  232. package/dist/resolvers/VectorizeEntityResolver.d.ts.map +1 -1
  233. package/dist/resolvers/VectorizeEntityResolver.js +14 -10
  234. package/dist/resolvers/VectorizeEntityResolver.js.map +1 -1
  235. package/dist/resolvers/adhoc-query-helpers.d.ts +6 -0
  236. package/dist/resolvers/adhoc-query-helpers.d.ts.map +1 -1
  237. package/dist/resolvers/adhoc-query-helpers.js +10 -2
  238. package/dist/resolvers/adhoc-query-helpers.js.map +1 -1
  239. package/dist/resolvers/artifact-routing.d.ts +8 -8
  240. package/dist/resolvers/artifact-routing.js +2 -2
  241. package/dist/resolvers/artifact-routing.js.map +1 -1
  242. package/dist/resolvers/meetingRecordingRegistration.d.ts +10 -2
  243. package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
  244. package/dist/resolvers/meetingRecordingRegistration.js +24 -8
  245. package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
  246. package/dist/resolvers/peaksSidecar.d.ts +4 -0
  247. package/dist/resolvers/peaksSidecar.d.ts.map +1 -1
  248. package/dist/resolvers/peaksSidecar.js +10 -2
  249. package/dist/resolvers/peaksSidecar.js.map +1 -1
  250. package/dist/rest/EntityCRUDHandler.d.ts +28 -0
  251. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  252. package/dist/rest/EntityCRUDHandler.js +20 -4
  253. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  254. package/dist/rest/MediaStreamHandler.d.ts +2 -0
  255. package/dist/rest/MediaStreamHandler.d.ts.map +1 -1
  256. package/dist/rest/MediaStreamHandler.js +10 -6
  257. package/dist/rest/MediaStreamHandler.js.map +1 -1
  258. package/dist/rest/OAuthCallbackHandler.d.ts +9 -0
  259. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
  260. package/dist/rest/OAuthCallbackHandler.js +15 -3
  261. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  262. package/dist/rest/RESTEndpointHandler.d.ts +6 -4
  263. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  264. package/dist/rest/RESTEndpointHandler.js +15 -11
  265. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  266. package/dist/rest/RealtimeSdpBrokerHandler.d.ts +5 -1
  267. package/dist/rest/RealtimeSdpBrokerHandler.d.ts.map +1 -1
  268. package/dist/rest/RealtimeSdpBrokerHandler.js +12 -4
  269. package/dist/rest/RealtimeSdpBrokerHandler.js.map +1 -1
  270. package/dist/rest/SignatureWebhookHandler.d.ts +2 -0
  271. package/dist/rest/SignatureWebhookHandler.d.ts.map +1 -1
  272. package/dist/rest/SignatureWebhookHandler.js +5 -1
  273. package/dist/rest/SignatureWebhookHandler.js.map +1 -1
  274. package/dist/rest/UploadTokenManager.d.ts +24 -8
  275. package/dist/rest/UploadTokenManager.d.ts.map +1 -1
  276. package/dist/rest/UploadTokenManager.js +53 -21
  277. package/dist/rest/UploadTokenManager.js.map +1 -1
  278. package/dist/rest/ViewOperationsHandler.d.ts +20 -0
  279. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  280. package/dist/rest/ViewOperationsHandler.js +20 -4
  281. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  282. package/dist/rest/mediaRange.d.ts +4 -0
  283. package/dist/rest/mediaRange.d.ts.map +1 -1
  284. package/dist/rest/mediaRange.js +10 -2
  285. package/dist/rest/mediaRange.js.map +1 -1
  286. package/dist/rest/setupRESTEndpoints.d.ts +4 -0
  287. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  288. package/dist/rest/setupRESTEndpoints.js +13 -7
  289. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  290. package/dist/serverExtensionReservedRoots.d.ts +2 -0
  291. package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
  292. package/dist/serverExtensionReservedRoots.js +5 -1
  293. package/dist/serverExtensionReservedRoots.js.map +1 -1
  294. package/dist/services/TaskGraphActionRunner.d.ts +13 -8
  295. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  296. package/dist/services/TaskGraphActionRunner.js +16 -15
  297. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  298. package/dist/types.d.ts +2 -0
  299. package/dist/types.d.ts.map +1 -1
  300. package/dist/types.js +7 -3
  301. package/dist/types.js.map +1 -1
  302. package/dist/util.d.ts +6 -0
  303. package/dist/util.d.ts.map +1 -1
  304. package/dist/util.js +13 -5
  305. package/dist/util.js.map +1 -1
  306. package/package.json +94 -92
  307. package/src/__tests__/AgentRunStatusPublisher.test.ts +175 -0
  308. package/src/__tests__/DeleteOptionsInput.wireShape.test.ts +62 -0
  309. package/src/__tests__/DuplicateEntryCheckResolver.test.ts +300 -0
  310. package/src/__tests__/FileResolverPeaks.test.ts +13 -13
  311. package/src/__tests__/ListOperationsResolver.test.ts +17 -17
  312. package/src/__tests__/MediaStreamHandler.test.ts +28 -28
  313. package/src/__tests__/NoLog.test.ts +11 -11
  314. package/src/__tests__/PrimaryKeyAlwaysMapped.test.ts +10 -10
  315. package/src/__tests__/RESTEndpointHandler.test.ts +14 -14
  316. package/src/__tests__/RealtimeBridgeResolver.test.ts +4 -2
  317. package/src/__tests__/RealtimeClientSessionResolver.test.ts +216 -2
  318. package/src/__tests__/RealtimeSdpBrokerHandler.test.ts +6 -6
  319. package/src/__tests__/RefreshAdoptsNewColumns.test.ts +8 -8
  320. package/src/__tests__/RemoteBrowserActionRecovery.test.ts +7 -1
  321. package/src/__tests__/RemoteBrowserAudioStream.test.ts +7 -1
  322. package/src/__tests__/RemoteBrowserGoalEngine.test.ts +18 -18
  323. package/src/__tests__/RemoteBrowserSnapshot.test.ts +7 -1
  324. package/src/__tests__/ResolverBase.clientOldValues.test.ts +52 -0
  325. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +398 -0
  326. package/src/__tests__/RunAIAgentResolver.streaming.test.ts +18 -27
  327. package/src/__tests__/RunDecisionResolver.test.ts +699 -0
  328. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +131 -0
  329. package/src/__tests__/TaskGraphFrameResolver.test.ts +2 -2
  330. package/src/__tests__/VectorizeEntityResolver.test.ts +106 -0
  331. package/src/__tests__/WidgetSessionService.test.ts +8 -4
  332. package/src/__tests__/adhoc-query-helpers.test.ts +21 -21
  333. package/src/__tests__/bootAudit.test.ts +11 -11
  334. package/src/__tests__/boundaryLogPayload.test.ts +6 -6
  335. package/src/__tests__/cacheInvalidationRecordData.test.ts +177 -0
  336. package/src/__tests__/conversationRunEvents.test.ts +399 -0
  337. package/src/__tests__/databaseAbstraction.test.ts +12 -6
  338. package/src/__tests__/getDataTokenRedaction.test.ts +7 -7
  339. package/src/__tests__/initializeProviders.refresh.test.ts +4 -4
  340. package/src/__tests__/magicLink.test.ts +73 -134
  341. package/src/__tests__/magicLinkService.consume.test.ts +224 -0
  342. package/src/__tests__/meetingRecordingRegistration.test.ts +12 -12
  343. package/src/__tests__/metadataRefreshSignal.test.ts +78 -0
  344. package/src/__tests__/multiTenancy.security.test.ts +40 -40
  345. package/src/__tests__/multiTenancy.test.ts +18 -18
  346. package/src/__tests__/newUsers.test.ts +24 -23
  347. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +283 -0
  348. package/src/__tests__/principals.test.ts +22 -22
  349. package/src/__tests__/pushStatusFanOut.test.ts +206 -0
  350. package/src/__tests__/pushStatusResolver.filter.test.ts +8 -8
  351. package/src/__tests__/secretRedactor.failOpen.test.ts +12 -12
  352. package/src/__tests__/secretRedactor.test.ts +12 -12
  353. package/src/__tests__/serverExtensionReservedRoots.test.ts +7 -7
  354. package/src/__tests__/subscriptionRedaction.test.ts +5 -5
  355. package/src/__tests__/unifiedAuth.test.ts +15 -9
  356. package/src/__tests__/visitorIdentity.resolve.test.ts +6 -6
  357. package/src/__tests__/widget.test.ts +45 -45
  358. package/src/__tests__/widgetGuestElevation.test.ts +7 -7
  359. package/src/__tests__/widgetHostIdentity.test.ts +14 -14
  360. package/src/agentSessions/ReturningVisitorRecap.ts +12 -1
  361. package/src/agentSessions/SessionManager.ts +2 -2
  362. package/src/agentSessions/remoteBrowserGoalEngine.ts +30 -5
  363. package/src/auth/AuthProviderCatalogRouter.ts +6 -1
  364. package/src/auth/__tests__/backward-compatibility.test.ts +4 -3
  365. package/src/auth/index.ts +43 -28
  366. package/src/auth/initializeProviders.ts +25 -5
  367. package/src/auth/magicLink/MagicLinkRouter.ts +28 -10
  368. package/src/auth/magicLink/MagicLinkService.ts +71 -52
  369. package/src/auth/magicLink/index.ts +7 -7
  370. package/src/auth/magicLink/magicLinkCore.ts +96 -64
  371. package/src/auth/magicLink/redeemLanding.ts +14 -4
  372. package/src/auth/magicLink/types.ts +54 -54
  373. package/src/auth/newUsers.ts +1 -1
  374. package/src/auth/principals.ts +11 -2
  375. package/src/cache.ts +4 -1
  376. package/src/config.ts +37 -4
  377. package/src/context.ts +37 -24
  378. package/src/directives/Public.ts +4 -1
  379. package/src/directives/RequireSystemUser.ts +4 -1
  380. package/src/generated/graphql-schemas/__mj.ts +3674 -4
  381. package/src/generic/CacheInvalidationResolver.ts +148 -4
  382. package/src/generic/DeleteOptionsInput.ts +9 -2
  383. package/src/generic/FireAndForgetHeartbeat.ts +35 -16
  384. package/src/generic/OrphanedConversationDetailReconciler.ts +267 -0
  385. package/src/generic/PushStatusResolver.ts +118 -8
  386. package/src/generic/ResolverBase.ts +65 -57
  387. package/src/generic/RunViewResolver.ts +22 -22
  388. package/src/generic/__tests__/FireAndForgetHeartbeat.test.ts +7 -7
  389. package/src/index.ts +137 -11
  390. package/src/integration/CustomColumnPromoter.ts +6 -1
  391. package/src/integration/EntityMapLifecycle.ts +20 -2
  392. package/src/logging/NoLog.ts +16 -2
  393. package/src/logging/StartupLogger.ts +6 -1
  394. package/src/logging/bootAudit.ts +26 -16
  395. package/src/logging/boundaryLogPayload.ts +8 -1
  396. package/src/logging/secretRedactor.ts +14 -9
  397. package/src/logging/shortenForLog.ts +8 -3
  398. package/src/logging/variablesLoggingMiddleware.ts +9 -6
  399. package/src/metadataRefreshSignal.ts +45 -0
  400. package/src/middleware/MJTenantFilterMiddleware.ts +4 -4
  401. package/src/multiTenancy/index.ts +29 -5
  402. package/src/realtimeWidget/WidgetRouter.ts +15 -10
  403. package/src/realtimeWidget/WidgetSessionService.ts +76 -76
  404. package/src/realtimeWidget/host-identity.ts +24 -10
  405. package/src/realtimeWidget/index.ts +3 -3
  406. package/src/realtimeWidget/visitorIdentity.ts +39 -8
  407. package/src/realtimeWidget/widgetCore.ts +75 -10
  408. package/src/realtimeWidget/widgetGuestElevation.ts +25 -12
  409. package/src/resolvers/AdhocQueryResolver.ts +3 -3
  410. package/src/resolvers/AgentRunStatusPublisher.ts +175 -0
  411. package/src/resolvers/AgentSessionResolver.ts +3 -3
  412. package/src/resolvers/ColorResolver.ts +6 -6
  413. package/src/resolvers/ComponentRegistryResolver.ts +36 -36
  414. package/src/resolvers/ConversationRunEventsResolver.ts +308 -0
  415. package/src/resolvers/DuplicateEntryCheckResolver.ts +232 -0
  416. package/src/resolvers/EntityCommunicationsResolver.ts +4 -4
  417. package/src/resolvers/ExecuteRemoteOperationResolver.ts +9 -9
  418. package/src/resolvers/FetchEntityVectorsResolver.ts +2 -1
  419. package/src/resolvers/FileResolver.ts +42 -42
  420. package/src/resolvers/GeoResolver.ts +4 -4
  421. package/src/resolvers/GetDataResolver.ts +50 -15
  422. package/src/resolvers/IntegrationDiscoveryResolver.ts +2 -2
  423. package/src/resolvers/ListOperationsResolver.ts +78 -28
  424. package/src/resolvers/MCPResolver.ts +30 -15
  425. package/src/resolvers/MergeRecordsResolver.ts +14 -2
  426. package/src/resolvers/QueryResolver.ts +13 -13
  427. package/src/resolvers/RealtimeBridgeResolver.ts +3 -3
  428. package/src/resolvers/RealtimeClientSessionResolver.ts +96 -38
  429. package/src/resolvers/RemoteBrowserActionResolver.ts +5 -5
  430. package/src/resolvers/RunAIAgentResolver.ts +134 -239
  431. package/src/resolvers/RunAIPromptResolver.ts +22 -22
  432. package/src/resolvers/RunDecisionResolver.ts +435 -0
  433. package/src/resolvers/RunTemplateResolver.ts +4 -4
  434. package/src/resolvers/RunTestResolver.ts +25 -25
  435. package/src/resolvers/SqlLoggingConfigResolver.ts +56 -56
  436. package/src/resolvers/TaskGraphFrameResolver.ts +37 -28
  437. package/src/resolvers/TelemetryResolver.ts +79 -79
  438. package/src/resolvers/VectorizeEntityResolver.ts +16 -11
  439. package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +40 -38
  440. package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +93 -0
  441. package/src/resolvers/__tests__/artifact-routing.test.ts +23 -23
  442. package/src/resolvers/adhoc-query-helpers.ts +19 -2
  443. package/src/resolvers/artifact-routing.ts +19 -19
  444. package/src/resolvers/meetingRecordingRegistration.ts +44 -10
  445. package/src/resolvers/peaksSidecar.ts +12 -2
  446. package/src/rest/EntityCRUDHandler.ts +24 -4
  447. package/src/rest/MediaStreamHandler.ts +11 -6
  448. package/src/rest/OAuthCallbackHandler.ts +25 -7
  449. package/src/rest/RESTEndpointHandler.ts +20 -15
  450. package/src/rest/RealtimeSdpBrokerHandler.ts +14 -4
  451. package/src/rest/SignatureWebhookHandler.ts +6 -1
  452. package/src/rest/UploadTokenManager.ts +66 -30
  453. package/src/rest/ViewOperationsHandler.ts +24 -4
  454. package/src/rest/mediaRange.ts +16 -6
  455. package/src/rest/setupRESTEndpoints.ts +24 -12
  456. package/src/serverExtensionReservedRoots.ts +6 -1
  457. package/src/services/TaskGraphActionRunner.ts +16 -15
  458. package/src/types.ts +21 -16
  459. package/src/util.ts +16 -6
@@ -15,14 +15,21 @@ export declare class RecordDependencyResult {
15
15
  EntityName: string;
16
16
  RelatedEntityName: string;
17
17
  FieldName: string;
18
+ PrimaryKey: CompositeKey;
19
+ /** The same key under its pre-6.2 name, so older clients keep working. */
18
20
  CompositeKey: CompositeKey;
21
+ IsSoftLink?: boolean;
22
+ EntityIDFieldName?: string;
19
23
  }
20
24
  export declare class RecordDependencyResolver {
21
25
  GetRecordDependencies(entityName: string, ckInput: CompositeKeyInputType, { dataSource, userPayload, providers }: AppContext, pubSub: PubSubEngine): Promise<{
22
26
  EntityName: string;
23
27
  RelatedEntityName: string;
24
28
  FieldName: string;
29
+ PrimaryKey: CompositeKey;
25
30
  CompositeKey: CompositeKey;
31
+ IsSoftLink: boolean;
32
+ EntityIDFieldName: string;
26
33
  }[]>;
27
34
  }
28
35
  declare class FieldMapping {
@@ -1 +1 @@
1
- {"version":3,"file":"MergeRecordsResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/MergeRecordsResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAiE,YAAY,EAAmB,MAAM,cAAc,CAAC;AAC5H,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAGlG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,qBACa,sBAAsB;IAEjC,UAAU,EAAE,MAAM,CAAC;IAGnB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,wBAAwB;IAE7B,qBAAqB,CACQ,UAAU,EAAE,MAAM,EAC5C,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,UAAU,EAC/C,MAAM,EAAE,YAAY;CAYjC;AAED,qBACa,sBAAsB;IAEjC,UAAU,EAAE,MAAM,CAAC;IAGnB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,SAAS,EAAE,MAAM,CAAC;IAGlB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBACa,wBAAwB;IAE7B,qBAAqB,CACQ,UAAU,EAAE,MAAM,EACD,OAAO,EAAE,qBAAqB,EACzE,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,UAAU,EAC/C,MAAM,EAAE,YAAY;;;;;;CAmBjC;AAED,cACM,YAAY;IAEhB,SAAS,EAAE,MAAM,CAAC;IAGlB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cACM,kBAAkB;IAEtB,SAAS,EAAE,MAAM,CAAC;IAGlB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBACa,kBAAkB;IAE7B,UAAU,EAAE,MAAM,CAAC;IAGnB,2BAA2B,EAAE,YAAY,CAAC;IAG1C,cAAc,EAAE,YAAY,EAAE,CAAC;IAG/B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,qBACa,wBAAwB;IAEnC,UAAU,EAAE,MAAM,CAAC;IAGnB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,cAAc,EAAE,MAAM,EAAE,CAAC;IAGzB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,qBACa,uBAAuB;IAElC,YAAY,EAAE,sBAAsB,CAAC;IAGrC,OAAO,EAAE,OAAO,CAAC;IAIjB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAGlC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBACa,iBAAiB;IAE5B,OAAO,EAAE,OAAO,CAAC;IAGjB,aAAa,EAAE,MAAM,CAAC;IAKtB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,YAAY,EAAE,uBAAuB,EAAE,CAAC;IAGxC,OAAO,EAAE,wBAAwB,CAAC;CACnC;AAED,qBACa,mBAAoB,SAAQ,YAAY;IAE7C,YAAY,CAC0B,OAAO,EAAE,kBAAkB,EAC9D,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,UAAU,EAC/C,MAAM,EAAE,YAAY;CAyBjC;AAED,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"MergeRecordsResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/MergeRecordsResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAiE,YAAY,EAAmB,MAAM,cAAc,CAAC;AAC5H,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAGlG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,qBACa,sBAAsB;IAEjC,UAAU,EAAE,MAAM,CAAC;IAGnB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,wBAAwB;IAE7B,qBAAqB,CACQ,UAAU,EAAE,MAAM,EAC5C,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,UAAU,EAC/C,MAAM,EAAE,YAAY;CAYjC;AAED,qBACa,sBAAsB;IAEjC,UAAU,EAAE,MAAM,CAAC;IAGnB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,SAAS,EAAE,MAAM,CAAC;IAGlB,UAAU,EAAE,YAAY,CAAC;IAEzB,0EAA0E;IAE1E,YAAY,EAAE,YAAY,CAAC;IAG3B,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBACa,wBAAwB;IAE7B,qBAAqB,CACQ,UAAU,EAAE,MAAM,EACD,OAAO,EAAE,qBAAqB,EACzE,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,UAAU,EAC/C,MAAM,EAAE,YAAY;;;;;;;;;CAqBjC;AAED,cACM,YAAY;IAEhB,SAAS,EAAE,MAAM,CAAC;IAGlB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cACM,kBAAkB;IAEtB,SAAS,EAAE,MAAM,CAAC;IAGlB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBACa,kBAAkB;IAE7B,UAAU,EAAE,MAAM,CAAC;IAGnB,2BAA2B,EAAE,YAAY,CAAC;IAG1C,cAAc,EAAE,YAAY,EAAE,CAAC;IAG/B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,qBACa,wBAAwB;IAEnC,UAAU,EAAE,MAAM,CAAC;IAGnB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,cAAc,EAAE,MAAM,EAAE,CAAC;IAGzB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,qBACa,uBAAuB;IAElC,YAAY,EAAE,sBAAsB,CAAC;IAGrC,OAAO,EAAE,OAAO,CAAC;IAIjB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAGlC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBACa,iBAAiB;IAE5B,OAAO,EAAE,OAAO,CAAC;IAGjB,aAAa,EAAE,MAAM,CAAC;IAKtB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,YAAY,EAAE,uBAAuB,EAAE,CAAC;IAGxC,OAAO,EAAE,wBAAwB,CAAC;CACnC;AAED,qBACa,mBAAoB,SAAQ,YAAY;IAE7C,YAAY,CAC0B,OAAO,EAAE,kBAAkB,EAC9D,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,UAAU,EAC/C,MAAM,EAAE,YAAY;CAyBjC;AAED,eAAe,wBAAwB,CAAC"}
@@ -77,7 +77,19 @@ __decorate([
77
77
  __decorate([
78
78
  Field(() => CompositeKeyOutputType),
79
79
  __metadata("design:type", CompositeKey)
80
+ ], RecordDependencyResult.prototype, "PrimaryKey", void 0);
81
+ __decorate([
82
+ Field(() => CompositeKeyOutputType, { deprecationReason: 'Use PrimaryKey. CompositeKey will be removed in a future release.' }),
83
+ __metadata("design:type", CompositeKey)
80
84
  ], RecordDependencyResult.prototype, "CompositeKey", void 0);
85
+ __decorate([
86
+ Field(() => Boolean, { nullable: true }),
87
+ __metadata("design:type", Boolean)
88
+ ], RecordDependencyResult.prototype, "IsSoftLink", void 0);
89
+ __decorate([
90
+ Field(() => String, { nullable: true }),
91
+ __metadata("design:type", String)
92
+ ], RecordDependencyResult.prototype, "EntityIDFieldName", void 0);
81
93
  RecordDependencyResult = __decorate([
82
94
  ObjectType()
83
95
  ], RecordDependencyResult);
@@ -88,12 +100,14 @@ let RecordDependencyResolver = class RecordDependencyResolver {
88
100
  const md = GetReadOnlyProvider(providers);
89
101
  const ck = new CompositeKey(ckInput.KeyValuePairs);
90
102
  const result = await md.GetRecordDependencies(entityName, ck);
91
- // Map PrimaryKey to CompositeKey for GraphQL response
92
103
  return result.map(dep => ({
93
104
  EntityName: dep.EntityName,
94
105
  RelatedEntityName: dep.RelatedEntityName,
95
106
  FieldName: dep.FieldName,
96
- CompositeKey: dep.PrimaryKey // Map PrimaryKey to CompositeKey
107
+ PrimaryKey: dep.PrimaryKey,
108
+ CompositeKey: dep.PrimaryKey,
109
+ IsSoftLink: dep.IsSoftLink,
110
+ EntityIDFieldName: dep.EntityIDFieldName,
97
111
  }));
98
112
  }
99
113
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"MergeRecordsResolver.js","sourceRoot":"","sources":["../../src/resolvers/MergeRecordsResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MergeRecordsResolver.js","sourceRoot":"","sources":["../../src/resolvers/MergeRecordsResolver.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ import { CreateBridgeRealtimeSession, FinalizeBridgeCoAgentRuns, GetRealtimeMode
20
20
  import { AIBridgeEngine } from '@memberjunction/ai-bridge-server';
21
21
  import { SessionManager } from '../agentSessions/SessionManager.js';
22
22
  import { NotificationEngine } from '@memberjunction/notifications';
23
- import { registerMeetingRecordingFile, correlateRecordingStart } from './meetingRecordingRegistration.js';
23
+ import { RegisterMeetingRecordingFile, CorrelateRecordingStart } from './meetingRecordingRegistration.js';
24
24
  /**
25
25
  * Binds the agent realtime-session factory onto the LiveKit room coordinator's model-session creation seam.
26
26
  * Module-load side effect — it runs when MJServer builds its GraphQL schema (which imports this resolver),
@@ -477,7 +477,7 @@ let RealtimeBridgeResolver = class RealtimeBridgeResolver extends ResolverBase {
477
477
  // Best-effort: correlate the live recording with the room's Meeting-Room Conversation (if it exists
478
478
  // yet) by stamping its EgressID. Never fail the start on this — the stop-flow resolves/creates it.
479
479
  const provider = GetReadWriteProvider(context.providers);
480
- void correlateRecordingStart(input.RoomName, info.EgressID, user, provider);
480
+ void CorrelateRecordingStart(input.RoomName, info.EgressID, user, provider);
481
481
  return { Success: true, EgressID: info.EgressID, Status: info.Status };
482
482
  }
483
483
  catch (error) {
@@ -503,7 +503,7 @@ let RealtimeBridgeResolver = class RealtimeBridgeResolver extends ResolverBase {
503
503
  // Register the completed egress MP4 as a Files row on the Meeting-Room Conversation. Best-effort:
504
504
  // any failure (e.g. storage provider not configured) leaves RecordingFileID unset but still
505
505
  // returns the successful stop result.
506
- const registration = await registerMeetingRecordingFile({ EgressID: info.EgressID, RoomName: info.RoomName, OutputLocation: info.OutputLocation, OutputSizeBytes: info.OutputSizeBytes }, user, provider);
506
+ const registration = await RegisterMeetingRecordingFile({ EgressID: info.EgressID, RoomName: info.RoomName, OutputLocation: info.OutputLocation, OutputSizeBytes: info.OutputSizeBytes }, user, provider);
507
507
  if (!registration.Success) {
508
508
  LogError(`StopLiveKitRecording: recording stopped but registration did not complete: ${registration.ErrorMessage ?? 'unknown'}`);
509
509
  }
@@ -148,6 +148,18 @@ export declare class UploadRealtimeRecordingResult {
148
148
  export declare class RealtimeClientSessionResolver extends ResolverBase {
149
149
  private readonly clientSessionService;
150
150
  private readonly sessionManager;
151
+ /**
152
+ * The reason a `Save()`/`Delete()` returned false, for a log line. `CompleteMessage` renders
153
+ * `Message`, `Error` and every `Errors[]` entry (validation errors included, since `Save()`
154
+ * runs `Validate()` and records its errors there), so there is no separate `Validate()` call.
155
+ * When a subclass refused the write without recording anything, say so explicitly instead of
156
+ * "unknown error", which is what hid MJ#4791.
157
+ *
158
+ * Only a NULL `LatestResult` proves the refusal happened before the provider (nothing was
159
+ * registered at all). A SUCCESS `LatestResult` is an earlier save on the same instance — the
160
+ * refusal registered nothing — so its text must never be reported as this failure's reason.
161
+ */
162
+ private describeSaveFailure;
151
163
  /**
152
164
  * Start a client-direct realtime voice session targeting `targetAgentId`.
153
165
  *
@@ -749,6 +761,14 @@ export declare class RealtimeClientSessionResolver extends ResolverBase {
749
761
  * queries (which scan junctions across ALL details) still surface the artifact. This is the
750
762
  * least-invasive correct anchor — no fake visible message, no orphaned artifact.
751
763
  *
764
+ * TWO PRINCIPALS, deliberately: the lookup (`findLatestSessionDetailID`) and the junction row
765
+ * itself (`saveDetailArtifactJunction`, `MJ: Conversation Detail Artifacts`) run as `runUser`
766
+ * (elevated for a scoped-anonymous caller) — that junction entity is outside an anonymous
767
+ * caller's relay grants. The hidden ANCHOR `Conversation Detail` this may need to create runs as
768
+ * `callerUser` instead: like every other `MJ: Conversation Details` write, the System user is
769
+ * refused because it is not the conversation's owner (see {@link persistDirectActionTurn},
770
+ * issue #4791) — only the actual caller can create it.
771
+ *
752
772
  * Strictly best-effort: every failure path logs and returns; a relayed tool call NEVER fails
753
773
  * because history linking did.
754
774
  */
@@ -815,12 +835,6 @@ export declare class RealtimeClientSessionResolver extends ResolverBase {
815
835
  * than blocking the start.
816
836
  */
817
837
  private resolveWidgetVoiceCapSeconds;
818
- /**
819
- * Persists a single transcript turn as a `Conversation Detail` stamped with the session's
820
- * conversation, the mapped role, the turn text, the session id, and the owning user.
821
- *
822
- * @returns The boolean save result (logs `CompleteMessage` on failure).
823
- */
824
838
  /**
825
839
  * Stamps `RecordingStartedAt` (the recording `t0` alignment origin) + `RecordingMedia` on a
826
840
  * just-started session when the browser captured WITH consent. Best-effort: a parse/save failure
@@ -831,6 +845,13 @@ export declare class RealtimeClientSessionResolver extends ResolverBase {
831
845
  * @param recordingStartedAt ISO-8601 recording start timestamp from the browser.
832
846
  */
833
847
  private stampRecordingStart;
848
+ /**
849
+ * Persists a single transcript turn as a `Conversation Detail` stamped with the session's
850
+ * conversation, the mapped role, the turn text, the session id, and the owning user.
851
+ *
852
+ * @returns The boolean save result. On failure it logs the session, the write user and the
853
+ * reason from {@link describeSaveFailure}.
854
+ */
834
855
  private persistTranscriptTurn;
835
856
  /**
836
857
  * CORRECTION persistence (the client transcript's `ReplacesPrevious` marker — e.g.
@@ -851,6 +872,23 @@ export declare class RealtimeClientSessionResolver extends ResolverBase {
851
872
  * Stored as stable facts (Role: 'AI', HiddenToUser: true, ExternalID: callId, CompletionTime: durationMs,
852
873
  * Message: JSON-serialized tool facts) so that session review can reconstruct the action card dynamically
853
874
  * on load (Option 1) without polluting user-facing speech chat bubbles.
875
+ *
876
+ * Writes as the CALLER, never the elevated run user (issue #4791). Owning the session
877
+ * (`loadOwnedActiveSession`'s gate has already run on every path here) does NOT imply owning
878
+ * the conversation: the conversation id was client-supplied at session start. What authorizes
879
+ * this write is the save itself, evaluated for the caller — the conversation owner gate in
880
+ * `MJConversationDetailEntityExtended`, plus the caller's own entity permission and Create RLS
881
+ * on `MJ: Conversation Details` (for the magic-link role that RLS scopes by the invite's
882
+ * `ScopeResourceID`, and the role belongs to a downstream app, not MJ core). That is why
883
+ * writing as the caller is safe even though the conversation id originated client-side.
884
+ * Elevating to the System user would bypass RLS entirely, and the owner gate refuses it anyway
885
+ * because the System user is not the conversation owner. Measured on MJ#4791 (before the
886
+ * core-entities fix that now records the denial): `Save()` returned `false` with a NULL `LatestResult` and an empty
887
+ * `ResultHistory` — indistinguishable from any other silent failure. Elevating this write is
888
+ * what silently dropped both hidden tool-execution turns of a real magic-link session; the
889
+ * denial itself still happens today, only its silence was fixed separately.
890
+ * `ResolveScopedAnonymousRunUser` elevates AI-**run**-entity writes only (prompt runs, agent
891
+ * runs, the relayed dispatch itself) — never this one.
854
892
  */
855
893
  private persistDirectActionTurn;
856
894
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RealtimeClientSessionResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/RealtimeClientSessionResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealtimeClientSessionResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/RealtimeClientSessionResolver.ts"],"names":[],"mappings":"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"}
@@ -45,7 +45,7 @@ import { RealtimeClientSessionService, RealtimeChannelServerHost, EvaluateRuntim
45
45
  import { ResolverBase } from '../generic/ResolverBase.js';
46
46
  import { GetReadWriteProvider } from '../util.js';
47
47
  import { SessionManager } from '../agentSessions/index.js';
48
- import { resolveWidgetGuestRunContext, ResolveScopedAnonymousRunUser } from '../realtimeWidget/widgetGuestElevation.js';
48
+ import { ResolveWidgetGuestRunContext, ResolveScopedAnonymousRunUser } from '../realtimeWidget/widgetGuestElevation.js';
49
49
  /**
50
50
  * Progress steps worth narrating to the realtime model — mirrors the normal agent-run path's filter
51
51
  * in {@link import('./RunAIAgentResolver.js').RunAIAgentResolver}. Initialization/validation/finalization
@@ -270,6 +270,30 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
270
270
  this.clientSessionService = new RealtimeClientSessionService();
271
271
  this.sessionManager = new SessionManager(this.clientSessionService);
272
272
  }
273
+ /**
274
+ * The reason a `Save()`/`Delete()` returned false, for a log line. `CompleteMessage` renders
275
+ * `Message`, `Error` and every `Errors[]` entry (validation errors included, since `Save()`
276
+ * runs `Validate()` and records its errors there), so there is no separate `Validate()` call.
277
+ * When a subclass refused the write without recording anything, say so explicitly instead of
278
+ * "unknown error", which is what hid MJ#4791.
279
+ *
280
+ * Only a NULL `LatestResult` proves the refusal happened before the provider (nothing was
281
+ * registered at all). A SUCCESS `LatestResult` is an earlier save on the same instance — the
282
+ * refusal registered nothing — so its text must never be reported as this failure's reason.
283
+ */
284
+ describeSaveFailure(entity) {
285
+ const latest = entity.LatestResult;
286
+ if (!latest) {
287
+ return `no failure detail recorded (LatestResult null; ResultHistory length ${entity.ResultHistory.length}) ` +
288
+ '— the write was refused before reaching the provider';
289
+ }
290
+ if (latest.Success) {
291
+ return 'no failure detail recorded (latest result entry is a prior success; ' +
292
+ `ResultHistory length ${entity.ResultHistory.length})`;
293
+ }
294
+ const detail = latest.CompleteMessage?.trim();
295
+ return detail || `no failure detail recorded (LatestResult empty; ResultHistory length ${entity.ResultHistory.length})`;
296
+ }
273
297
  /**
274
298
  * Start a client-direct realtime voice session targeting `targetAgentId`.
275
299
  *
@@ -421,7 +445,9 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
421
445
  // Junction-link any artifacts the delegated run produced into the session's conversation
422
446
  // history (best-effort) — so chat, session review, and resume carryover can all see them.
423
447
  // Runs as `runUser`: the junction entity is not among an anonymous caller's relay grants.
424
- await this.linkDelegatedArtifactsToConversation(session, Artifacts, runUser, provider);
448
+ // The hidden anchor detail it may need to create, though, is written by the CALLER (#4791)
449
+ // — same reason `persistDirectActionTurn` is: the System user is not the conversation owner.
450
+ await this.linkDelegatedArtifactsToConversation(session, Artifacts, runUser, contextUser, provider);
425
451
  await this.sessionManager.Heartbeat(agentSessionId, contextUser, provider);
426
452
  return ResultJson;
427
453
  }
@@ -472,7 +498,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
472
498
  };
473
499
  session.Config_ = JSON.stringify(next);
474
500
  if (!(await session.Save())) {
475
- LogError(`RealtimeClientSessionResolver.updatePendingFeedbackRunID save failed: ${session.LatestResult?.CompleteMessage ?? 'unknown error'}`);
501
+ LogError(`RealtimeClientSessionResolver.updatePendingFeedbackRunID save failed for session ${session.ID}: ${this.describeSaveFailure(session)}`);
476
502
  }
477
503
  }
478
504
  /**
@@ -1378,7 +1404,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
1378
1404
  session.Config_ = JSON.stringify(config);
1379
1405
  const saved = await session.Save();
1380
1406
  if (!saved) {
1381
- LogError(`RealtimeClientSessionResolver.persistObservabilityRunIDs save failed: ${session.LatestResult?.CompleteMessage ?? 'unknown error'}`);
1407
+ LogError(`RealtimeClientSessionResolver.persistObservabilityRunIDs save failed for session ${session.ID}: ${this.describeSaveFailure(session)}`);
1382
1408
  }
1383
1409
  }
1384
1410
  /**
@@ -1462,7 +1488,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
1462
1488
  const saved = await row.Save();
1463
1489
  if (!saved) {
1464
1490
  LogError(`SaveSessionChannelState: save failed for session ${agentSessionID} / channel ${channelID}: ` +
1465
- `${row.LatestResult?.CompleteMessage ?? 'unknown error'}`);
1491
+ `${this.describeSaveFailure(row)}`);
1466
1492
  }
1467
1493
  return saved;
1468
1494
  }
@@ -1765,7 +1791,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
1765
1791
  artifact.UserID = contextUser.ID;
1766
1792
  artifact.Visibility = 'Always';
1767
1793
  if (!(await artifact.Save())) {
1768
- const message = `SaveSessionChannelArtifact: artifact save failed: ${artifact.LatestResult?.CompleteMessage ?? 'unknown error'}`;
1794
+ const message = `SaveSessionChannelArtifact: artifact save failed for session ${session.ID}: ${this.describeSaveFailure(artifact)}`;
1769
1795
  LogError(message);
1770
1796
  return { Success: false, ErrorMessage: message, ConversationDetailLinked: false };
1771
1797
  }
@@ -1776,7 +1802,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
1776
1802
  version.Content = contentJson;
1777
1803
  version.UserID = contextUser.ID;
1778
1804
  if (!(await version.Save())) {
1779
- const message = `SaveSessionChannelArtifact: artifact version save failed: ${version.LatestResult?.CompleteMessage ?? 'unknown error'}`;
1805
+ const message = `SaveSessionChannelArtifact: artifact version save failed for session ${session.ID} (artifact ${artifact.ID}): ${this.describeSaveFailure(version)}`;
1780
1806
  LogError(message);
1781
1807
  return { Success: false, ErrorMessage: message, ArtifactID: artifact.ID, ConversationDetailLinked: false };
1782
1808
  }
@@ -1826,21 +1852,29 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
1826
1852
  * queries (which scan junctions across ALL details) still surface the artifact. This is the
1827
1853
  * least-invasive correct anchor — no fake visible message, no orphaned artifact.
1828
1854
  *
1855
+ * TWO PRINCIPALS, deliberately: the lookup (`findLatestSessionDetailID`) and the junction row
1856
+ * itself (`saveDetailArtifactJunction`, `MJ: Conversation Detail Artifacts`) run as `runUser`
1857
+ * (elevated for a scoped-anonymous caller) — that junction entity is outside an anonymous
1858
+ * caller's relay grants. The hidden ANCHOR `Conversation Detail` this may need to create runs as
1859
+ * `callerUser` instead: like every other `MJ: Conversation Details` write, the System user is
1860
+ * refused because it is not the conversation's owner (see {@link persistDirectActionTurn},
1861
+ * issue #4791) — only the actual caller can create it.
1862
+ *
1829
1863
  * Strictly best-effort: every failure path logs and returns; a relayed tool call NEVER fails
1830
1864
  * because history linking did.
1831
1865
  */
1832
- async linkDelegatedArtifactsToConversation(session, artifacts, contextUser, provider) {
1866
+ async linkDelegatedArtifactsToConversation(session, artifacts, runUser, callerUser, provider) {
1833
1867
  if (!artifacts || artifacts.length === 0 || !session.ConversationID) {
1834
1868
  return;
1835
1869
  }
1836
1870
  try {
1837
- const detailID = (await this.findLatestSessionDetailID(session, contextUser, provider)) ??
1838
- (await this.createHiddenSessionAnchorDetail(session, contextUser, provider));
1871
+ const detailID = (await this.findLatestSessionDetailID(session, runUser, provider)) ??
1872
+ (await this.createHiddenSessionAnchorDetail(session, callerUser, provider));
1839
1873
  if (!detailID) {
1840
1874
  return; // anchor unavailable — logged in the helpers
1841
1875
  }
1842
1876
  for (const artifact of artifacts) {
1843
- await this.saveDetailArtifactJunction(detailID, artifact.ArtifactVersionID, contextUser, provider);
1877
+ await this.saveDetailArtifactJunction(detailID, artifact.ArtifactVersionID, runUser, provider);
1844
1878
  }
1845
1879
  }
1846
1880
  catch (error) {
@@ -1871,22 +1905,22 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
1871
1905
  * {@link linkDelegatedArtifactsToConversation}). Returns the new detail's id, or `null`
1872
1906
  * (logged) when the save fails.
1873
1907
  */
1874
- async createHiddenSessionAnchorDetail(session, contextUser, provider) {
1875
- const detail = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, contextUser);
1908
+ async createHiddenSessionAnchorDetail(session, callerUser, provider) {
1909
+ const detail = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, callerUser);
1876
1910
  detail.NewRecord();
1877
1911
  detail.ConversationID = session.ConversationID;
1878
1912
  detail.Role = 'AI';
1879
1913
  detail.HiddenToUser = true;
1880
1914
  detail.Message = 'Artifacts produced during a realtime session (system anchor).';
1881
1915
  detail.AgentSessionID = session.ID;
1882
- // Attribute the anchor to the SESSION owner, not the (possibly elevated) writer — identical
1883
- // for every non-elevated caller, whose ownership of the session is already proven.
1916
+ // Attribute to the SESSION owner — the caller writing this row, whose ownership
1917
+ // `loadOwnedActiveSession` already proved.
1884
1918
  detail.UserID = session.UserID;
1885
1919
  if (await detail.Save()) {
1886
1920
  return detail.ID;
1887
1921
  }
1888
1922
  LogError(`ExecuteRealtimeSessionTool: hidden anchor detail save failed for session ${session.ID}: ` +
1889
- `${detail.LatestResult?.CompleteMessage ?? 'unknown error'}`);
1923
+ `${this.describeSaveFailure(detail)}`);
1890
1924
  return null;
1891
1925
  }
1892
1926
  /**
@@ -1902,7 +1936,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
1902
1936
  const saved = await junction.Save();
1903
1937
  if (!saved) {
1904
1938
  LogError(`RealtimeClientSessionResolver: artifact junction save failed for detail ${conversationDetailID} / version ${artifactVersionID}: ` +
1905
- `${junction.LatestResult?.CompleteMessage ?? 'unknown error'}`);
1939
+ `${this.describeSaveFailure(junction)}`);
1906
1940
  }
1907
1941
  return saved;
1908
1942
  }
@@ -1931,7 +1965,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
1931
1965
  row.LastActiveAt = new Date();
1932
1966
  if (!(await row.Save())) {
1933
1967
  LogError(`SaveSessionChannelArtifact: LastActiveAt stamp failed for session ${agentSessionID} / channel ${channelID}: ` +
1934
- `${row.LatestResult?.CompleteMessage ?? 'unknown error'}`);
1968
+ `${this.describeSaveFailure(row)}`);
1935
1969
  }
1936
1970
  }
1937
1971
  catch (error) {
@@ -2060,16 +2094,10 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2060
2094
  * than blocking the start.
2061
2095
  */
2062
2096
  async resolveWidgetVoiceCapSeconds(userPayload, providers) {
2063
- const elevation = await resolveWidgetGuestRunContext(userPayload, GetReadWriteProvider(providers));
2064
- const minutes = elevation?.widget.VoiceMaxSessionMinutes;
2097
+ const elevation = await ResolveWidgetGuestRunContext(userPayload, GetReadWriteProvider(providers));
2098
+ const minutes = elevation?.Widget.VoiceMaxSessionMinutes;
2065
2099
  return minutes && minutes > 0 ? minutes * 60 : undefined;
2066
2100
  }
2067
- /**
2068
- * Persists a single transcript turn as a `Conversation Detail` stamped with the session's
2069
- * conversation, the mapped role, the turn text, the session id, and the owning user.
2070
- *
2071
- * @returns The boolean save result (logs `CompleteMessage` on failure).
2072
- */
2073
2101
  /**
2074
2102
  * Stamps `RecordingStartedAt` (the recording `t0` alignment origin) + `RecordingMedia` on a
2075
2103
  * just-started session when the browser captured WITH consent. Best-effort: a parse/save failure
@@ -2091,9 +2119,16 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2091
2119
  session.RecordingStartedAt = startedAt;
2092
2120
  session.RecordingMedia = 'Audio';
2093
2121
  if (!(await session.Save())) {
2094
- LogError(`RealtimeClientSessionResolver.stampRecordingStart save failed: ${session.LatestResult?.CompleteMessage ?? 'unknown error'}`);
2122
+ LogError(`RealtimeClientSessionResolver.stampRecordingStart save failed for session ${session.ID}: ${this.describeSaveFailure(session)}`);
2095
2123
  }
2096
2124
  }
2125
+ /**
2126
+ * Persists a single transcript turn as a `Conversation Detail` stamped with the session's
2127
+ * conversation, the mapped role, the turn text, the session id, and the owning user.
2128
+ *
2129
+ * @returns The boolean save result. On failure it logs the session, the write user and the
2130
+ * reason from {@link describeSaveFailure}.
2131
+ */
2097
2132
  async persistTranscriptTurn(session, role, text, contextUser, provider, utteranceStartMs, utteranceEndMs) {
2098
2133
  const detail = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, contextUser);
2099
2134
  detail.NewRecord();
@@ -2110,7 +2145,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2110
2145
  }
2111
2146
  const saved = await detail.Save();
2112
2147
  if (!saved) {
2113
- LogError(`RealtimeClientSessionResolver.persistTranscriptTurn save failed: ${detail.LatestResult?.CompleteMessage ?? 'unknown error'}`);
2148
+ LogError(`RealtimeClientSessionResolver.persistTranscriptTurn save failed for session ${session.ID} (write user ${contextUser.ID}): ${this.describeSaveFailure(detail)}`);
2114
2149
  }
2115
2150
  return saved;
2116
2151
  }
@@ -2141,8 +2176,13 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2141
2176
  // ⚠️ ELEVATING INSTEAD WAS TRIED AND IS A TRAP. `ResolveScopedAnonymousRunUser` returns
2142
2177
  // `UserCache.GetSystemUser()`, which on this deployment resolves to the unconfigured
2143
2178
  // placeholder `not.set@nowhere.com` ("Configured provisioning user not found; falling back
2144
- // to an Owner"). Saving as a user that does not exist returns false with a NULL
2145
- // `LatestResult` — indistinguishable from a permission denial, and just as silent.
2179
+ // to an Owner"). That user EXISTS — it is not a missing/invalid principal — and even carries
2180
+ // full CRUD on `MJ: Conversation Details`. It is refused anyway:
2181
+ // `MJConversationDetailEntityExtended`'s owner gate accepts only the conversation's OWNER or
2182
+ // an Edit/Owner Resource Permission grantee, and the System user is neither. Measured on
2183
+ // MJ#4791 (before the core-entities fix that now records the denial): `Save()` → `false`,
2184
+ // `LatestResult` null — indistinguishable from a permission denial, and just as silent. The
2185
+ // denial itself still happens; that fix only made it stop being silent.
2146
2186
  const writeUser = contextUser;
2147
2187
  const rv = RunView.FromMetadataProvider(provider);
2148
2188
  const result = await rv.RunView({
@@ -2160,8 +2200,8 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2160
2200
  //
2161
2201
  // `ResultType: 'entity_object'` hands back hydrated entities, but they do not carry the
2162
2202
  // context user the way `GetEntityObject(entity, user)` does — so `Save()` ran with no
2163
- // principal and failed with an EMPTY message ("unknown error"), which is what the elevation
2164
- // fix above looked like when it was still broken. The insert path beside this one has
2203
+ // principal and failed with an EMPTY message ("unknown error"), which is what an empty-message
2204
+ // failure here looked like before the re-load. The insert path beside this one has
2165
2205
  // always used `GetEntityObject`; this now matches it, which is also why they now succeed
2166
2206
  // and fail for the same reasons.
2167
2207
  const previous = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, writeUser);
@@ -2187,7 +2227,7 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2187
2227
  LogError(`RealtimeClientSessionResolver.replacePreviousTranscriptTurn save failed for session `
2188
2228
  + `${session.ID} — the ${mappedRole} turn keeps its PREVIOUS, shorter text and the `
2189
2229
  + `transcript now understates what was said: `
2190
- + `${previous.LatestResult?.CompleteMessage || JSON.stringify(previous.LatestResult ?? null)}`);
2230
+ + `${this.describeSaveFailure(previous)}`);
2191
2231
  }
2192
2232
  return saved;
2193
2233
  }
@@ -2204,14 +2244,30 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2204
2244
  * Stored as stable facts (Role: 'AI', HiddenToUser: true, ExternalID: callId, CompletionTime: durationMs,
2205
2245
  * Message: JSON-serialized tool facts) so that session review can reconstruct the action card dynamically
2206
2246
  * on load (Option 1) without polluting user-facing speech chat bubbles.
2247
+ *
2248
+ * Writes as the CALLER, never the elevated run user (issue #4791). Owning the session
2249
+ * (`loadOwnedActiveSession`'s gate has already run on every path here) does NOT imply owning
2250
+ * the conversation: the conversation id was client-supplied at session start. What authorizes
2251
+ * this write is the save itself, evaluated for the caller — the conversation owner gate in
2252
+ * `MJConversationDetailEntityExtended`, plus the caller's own entity permission and Create RLS
2253
+ * on `MJ: Conversation Details` (for the magic-link role that RLS scopes by the invite's
2254
+ * `ScopeResourceID`, and the role belongs to a downstream app, not MJ core). That is why
2255
+ * writing as the caller is safe even though the conversation id originated client-side.
2256
+ * Elevating to the System user would bypass RLS entirely, and the owner gate refuses it anyway
2257
+ * because the System user is not the conversation owner. Measured on MJ#4791 (before the
2258
+ * core-entities fix that now records the denial): `Save()` returned `false` with a NULL `LatestResult` and an empty
2259
+ * `ResultHistory` — indistinguishable from any other silent failure. Elevating this write is
2260
+ * what silently dropped both hidden tool-execution turns of a real magic-link session; the
2261
+ * denial itself still happens today, only its silence was fixed separately.
2262
+ * `ResolveScopedAnonymousRunUser` elevates AI-**run**-entity writes only (prompt runs, agent
2263
+ * runs, the relayed dispatch itself) — never this one.
2207
2264
  */
2208
2265
  async persistDirectActionTurn(session, callId, toolName, argsJson, resultJson, durationMs, contextUser, provider) {
2209
2266
  if (!session.ConversationID) {
2210
2267
  return false;
2211
2268
  }
2212
2269
  try {
2213
- const writeUser = ResolveScopedAnonymousRunUser(contextUser);
2214
- const detail = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, writeUser);
2270
+ const detail = await provider.GetEntityObject(CONVERSATION_DETAIL_ENTITY, contextUser);
2215
2271
  detail.NewRecord();
2216
2272
  detail.ConversationID = session.ConversationID;
2217
2273
  detail.Role = 'AI';
@@ -2249,13 +2305,13 @@ let RealtimeClientSessionResolver = class RealtimeClientSessionResolver extends
2249
2305
  detail.Message = JSON.stringify(factPayload);
2250
2306
  const saved = await detail.Save();
2251
2307
  if (!saved) {
2252
- LogError(`RealtimeClientSessionResolver.persistDirectActionTurn save failed: ${detail.LatestResult?.CompleteMessage ?? 'unknown error'}`);
2308
+ LogError(`RealtimeClientSessionResolver.persistDirectActionTurn save failed for session ${session.ID} (tool '${toolName}', call ${callId ?? 'n/a'}, write user ${contextUser.ID}): ${this.describeSaveFailure(detail)}`);
2253
2309
  }
2254
2310
  return saved;
2255
2311
  }
2256
2312
  catch (error) {
2257
2313
  const message = error instanceof Error ? error.message : String(error);
2258
- LogError(`RealtimeClientSessionResolver.persistDirectActionTurn unexpected error: ${message}`);
2314
+ LogError(`RealtimeClientSessionResolver.persistDirectActionTurn unexpected error for session ${session.ID}: ${message}`);
2259
2315
  return false;
2260
2316
  }
2261
2317
  }