@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/server",
3
- "version": "6.2.0-edge.0",
3
+ "version": "6.2.0-edge.2",
4
4
  "description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./src/index.ts",
@@ -19,97 +19,98 @@
19
19
  "@as-integrations/express5": "^1.0.0",
20
20
  "@graphql-tools/schema": "^10.0.38",
21
21
  "@graphql-tools/utils": "^11.0.0",
22
- "@memberjunction/actions": "6.2.0-edge.0",
23
- "@memberjunction/actions-apollo": "6.2.0-edge.0",
24
- "@memberjunction/actions-base": "6.2.0-edge.0",
25
- "@memberjunction/actions-bizapps-accounting": "6.2.0-edge.0",
26
- "@memberjunction/actions-bizapps-crm": "6.2.0-edge.0",
27
- "@memberjunction/actions-bizapps-formbuilders": "6.2.0-edge.0",
28
- "@memberjunction/actions-bizapps-lms": "6.2.0-edge.0",
29
- "@memberjunction/actions-bizapps-social": "6.2.0-edge.0",
30
- "@memberjunction/ai": "6.2.0-edge.0",
31
- "@memberjunction/ai-agent-manager": "6.2.0-edge.0",
32
- "@memberjunction/ai-agent-manager-actions": "6.2.0-edge.0",
33
- "@memberjunction/ai-agents": "6.2.0-edge.0",
34
- "@memberjunction/ai-bridge-base": "6.2.0-edge.0",
35
- "@memberjunction/ai-bridge-ringcentral": "6.2.0-edge.0",
36
- "@memberjunction/ai-bridge-server": "6.2.0-edge.0",
37
- "@memberjunction/ai-bridge-teams": "6.2.0-edge.0",
38
- "@memberjunction/ai-bridge-twilio": "6.2.0-edge.0",
39
- "@memberjunction/ai-bridge-vonage": "6.2.0-edge.0",
40
- "@memberjunction/ai-core-plus": "6.2.0-edge.0",
41
- "@memberjunction/ai-engine-base": "6.2.0-edge.0",
42
- "@memberjunction/ai-mcp-client": "6.2.0-edge.0",
43
- "@memberjunction/ai-prompts": "6.2.0-edge.0",
44
- "@memberjunction/ai-provider-bundle": "6.2.0-edge.0",
45
- "@memberjunction/ai-vector-sync": "6.2.0-edge.0",
46
- "@memberjunction/ai-vectordb": "6.2.0-edge.0",
47
- "@memberjunction/ai-vectors-pinecone": "6.2.0-edge.0",
48
- "@memberjunction/aiengine": "6.2.0-edge.0",
49
- "@memberjunction/api-keys": "6.2.0-edge.0",
50
- "@memberjunction/auth-providers": "6.2.0-edge.0",
51
- "@memberjunction/clustering-engine": "6.2.0-edge.0",
52
- "@memberjunction/codegen-lib": "6.2.0-edge.0",
53
- "@memberjunction/communication-engine": "6.2.0-edge.0",
54
- "@memberjunction/communication-ms-graph": "6.2.0-edge.0",
55
- "@memberjunction/communication-sendgrid": "6.2.0-edge.0",
56
- "@memberjunction/communication-types": "6.2.0-edge.0",
57
- "@memberjunction/component-registry-client-sdk": "6.2.0-edge.0",
58
- "@memberjunction/computer-use": "6.2.0-edge.0",
59
- "@memberjunction/computer-use-engine": "6.2.0-edge.0",
60
- "@memberjunction/config": "6.2.0-edge.0",
61
- "@memberjunction/core": "6.2.0-edge.0",
62
- "@memberjunction/core-actions": "6.2.0-edge.0",
63
- "@memberjunction/core-entities": "6.2.0-edge.0",
64
- "@memberjunction/core-entities-server": "6.2.0-edge.0",
65
- "@memberjunction/credentials": "6.2.0-edge.0",
66
- "@memberjunction/data-context": "6.2.0-edge.0",
67
- "@memberjunction/data-context-server": "6.2.0-edge.0",
68
- "@memberjunction/doc-utils": "6.2.0-edge.0",
69
- "@memberjunction/encryption": "6.2.0-edge.0",
70
- "@memberjunction/entity-communications-base": "6.2.0-edge.0",
71
- "@memberjunction/entity-communications-server": "6.2.0-edge.0",
72
- "@memberjunction/esignature": "6.2.0-edge.0",
73
- "@memberjunction/external-change-detection": "6.2.0-edge.0",
74
- "@memberjunction/generic-database-provider": "6.2.0-edge.0",
75
- "@memberjunction/global": "6.2.0-edge.0",
76
- "@memberjunction/graphql-dataprovider": "6.2.0-edge.0",
77
- "@memberjunction/integration-engine": "6.2.0-edge.0",
78
- "@memberjunction/integration-engine-base": "6.2.0-edge.0",
79
- "@memberjunction/integration-progress-artifacts": "6.2.0-edge.0",
80
- "@memberjunction/integration-schema-builder": "6.2.0-edge.0",
81
- "@memberjunction/interactive-component-types": "6.2.0-edge.0",
82
- "@memberjunction/lists": "6.2.0-edge.0",
83
- "@memberjunction/lists-base": "6.2.0-edge.0",
84
- "@memberjunction/livekit-room-server": "6.2.0-edge.0",
85
- "@memberjunction/network-utils": "6.2.0-edge.0",
86
- "@memberjunction/notifications": "6.2.0-edge.0",
87
- "@memberjunction/postgresql-dataprovider": "6.2.0-edge.0",
88
- "@memberjunction/queue": "6.2.0-edge.0",
89
- "@memberjunction/record-comparison": "6.2.0-edge.0",
90
- "@memberjunction/redis-provider": "6.2.0-edge.0",
91
- "@memberjunction/remote-browser-base": "6.2.0-edge.0",
92
- "@memberjunction/remote-browser-cdp": "6.2.0-edge.0",
93
- "@memberjunction/remote-browser-selfhost": "6.2.0-edge.0",
94
- "@memberjunction/remote-browser-server": "6.2.0-edge.0",
95
- "@memberjunction/scheduling-actions": "6.2.0-edge.0",
96
- "@memberjunction/scheduling-base-types": "6.2.0-edge.0",
97
- "@memberjunction/scheduling-engine": "6.2.0-edge.0",
98
- "@memberjunction/scheduling-engine-base": "6.2.0-edge.0",
99
- "@memberjunction/schema-engine": "6.2.0-edge.0",
100
- "@memberjunction/search-engine": "6.2.0-edge.0",
101
- "@memberjunction/server-extensions-core": "6.2.0-edge.0",
102
- "@memberjunction/sql-dialect": "6.2.0-edge.0",
103
- "@memberjunction/sql-parser": "6.2.0-edge.0",
104
- "@memberjunction/sqlserver-dataprovider": "6.2.0-edge.0",
105
- "@memberjunction/storage": "6.2.0-edge.0",
106
- "@memberjunction/tag-engine": "6.2.0-edge.0",
107
- "@memberjunction/tag-engine-base": "6.2.0-edge.0",
108
- "@memberjunction/task-graph": "6.2.0-edge.0",
109
- "@memberjunction/templates": "6.2.0-edge.0",
110
- "@memberjunction/testing-engine": "6.2.0-edge.0",
111
- "@memberjunction/testing-engine-base": "6.2.0-edge.0",
112
- "@memberjunction/version-history": "6.2.0-edge.0",
22
+ "@memberjunction/actions": "6.2.0-edge.2",
23
+ "@memberjunction/actions-apollo": "6.2.0-edge.2",
24
+ "@memberjunction/actions-base": "6.2.0-edge.2",
25
+ "@memberjunction/actions-bizapps-accounting": "6.2.0-edge.2",
26
+ "@memberjunction/actions-bizapps-crm": "6.2.0-edge.2",
27
+ "@memberjunction/actions-bizapps-formbuilders": "6.2.0-edge.2",
28
+ "@memberjunction/actions-bizapps-lms": "6.2.0-edge.2",
29
+ "@memberjunction/actions-bizapps-social": "6.2.0-edge.2",
30
+ "@memberjunction/ai": "6.2.0-edge.2",
31
+ "@memberjunction/ai-agent-manager": "6.2.0-edge.2",
32
+ "@memberjunction/ai-agent-manager-actions": "6.2.0-edge.2",
33
+ "@memberjunction/ai-agents": "6.2.0-edge.2",
34
+ "@memberjunction/ai-bridge-base": "6.2.0-edge.2",
35
+ "@memberjunction/ai-bridge-ringcentral": "6.2.0-edge.2",
36
+ "@memberjunction/ai-bridge-server": "6.2.0-edge.2",
37
+ "@memberjunction/ai-bridge-teams": "6.2.0-edge.2",
38
+ "@memberjunction/ai-bridge-twilio": "6.2.0-edge.2",
39
+ "@memberjunction/ai-bridge-vonage": "6.2.0-edge.2",
40
+ "@memberjunction/ai-core-plus": "6.2.0-edge.2",
41
+ "@memberjunction/ai-engine-base": "6.2.0-edge.2",
42
+ "@memberjunction/ai-mcp-client": "6.2.0-edge.2",
43
+ "@memberjunction/ai-prompts": "6.2.0-edge.2",
44
+ "@memberjunction/ai-provider-bundle": "6.2.0-edge.2",
45
+ "@memberjunction/ai-vector-dupe": "6.2.0-edge.2",
46
+ "@memberjunction/ai-vector-sync": "6.2.0-edge.2",
47
+ "@memberjunction/ai-vectordb": "6.2.0-edge.2",
48
+ "@memberjunction/ai-vectors-pinecone": "6.2.0-edge.2",
49
+ "@memberjunction/aiengine": "6.2.0-edge.2",
50
+ "@memberjunction/api-keys": "6.2.0-edge.2",
51
+ "@memberjunction/auth-providers": "6.2.0-edge.2",
52
+ "@memberjunction/clustering-engine": "6.2.0-edge.2",
53
+ "@memberjunction/codegen-lib": "6.2.0-edge.2",
54
+ "@memberjunction/communication-engine": "6.2.0-edge.2",
55
+ "@memberjunction/communication-ms-graph": "6.2.0-edge.2",
56
+ "@memberjunction/communication-sendgrid": "6.2.0-edge.2",
57
+ "@memberjunction/communication-types": "6.2.0-edge.2",
58
+ "@memberjunction/component-registry-client-sdk": "6.2.0-edge.2",
59
+ "@memberjunction/computer-use": "6.2.0-edge.2",
60
+ "@memberjunction/computer-use-engine": "6.2.0-edge.2",
61
+ "@memberjunction/config": "6.2.0-edge.2",
62
+ "@memberjunction/core": "6.2.0-edge.2",
63
+ "@memberjunction/core-actions": "6.2.0-edge.2",
64
+ "@memberjunction/core-entities": "6.2.0-edge.2",
65
+ "@memberjunction/core-entities-server": "6.2.0-edge.2",
66
+ "@memberjunction/credentials": "6.2.0-edge.2",
67
+ "@memberjunction/data-context": "6.2.0-edge.2",
68
+ "@memberjunction/data-context-server": "6.2.0-edge.2",
69
+ "@memberjunction/doc-utils": "6.2.0-edge.2",
70
+ "@memberjunction/encryption": "6.2.0-edge.2",
71
+ "@memberjunction/entity-communications-base": "6.2.0-edge.2",
72
+ "@memberjunction/entity-communications-server": "6.2.0-edge.2",
73
+ "@memberjunction/esignature": "6.2.0-edge.2",
74
+ "@memberjunction/external-change-detection": "6.2.0-edge.2",
75
+ "@memberjunction/generic-database-provider": "6.2.0-edge.2",
76
+ "@memberjunction/global": "6.2.0-edge.2",
77
+ "@memberjunction/graphql-dataprovider": "6.2.0-edge.2",
78
+ "@memberjunction/integration-engine": "6.2.0-edge.2",
79
+ "@memberjunction/integration-engine-base": "6.2.0-edge.2",
80
+ "@memberjunction/integration-progress-artifacts": "6.2.0-edge.2",
81
+ "@memberjunction/integration-schema-builder": "6.2.0-edge.2",
82
+ "@memberjunction/interactive-component-types": "6.2.0-edge.2",
83
+ "@memberjunction/lists": "6.2.0-edge.2",
84
+ "@memberjunction/lists-base": "6.2.0-edge.2",
85
+ "@memberjunction/livekit-room-server": "6.2.0-edge.2",
86
+ "@memberjunction/network-utils": "6.2.0-edge.2",
87
+ "@memberjunction/notifications": "6.2.0-edge.2",
88
+ "@memberjunction/postgresql-dataprovider": "6.2.0-edge.2",
89
+ "@memberjunction/queue": "6.2.0-edge.2",
90
+ "@memberjunction/record-comparison": "6.2.0-edge.2",
91
+ "@memberjunction/redis-provider": "6.2.0-edge.2",
92
+ "@memberjunction/remote-browser-base": "6.2.0-edge.2",
93
+ "@memberjunction/remote-browser-cdp": "6.2.0-edge.2",
94
+ "@memberjunction/remote-browser-selfhost": "6.2.0-edge.2",
95
+ "@memberjunction/remote-browser-server": "6.2.0-edge.2",
96
+ "@memberjunction/scheduling-actions": "6.2.0-edge.2",
97
+ "@memberjunction/scheduling-base-types": "6.2.0-edge.2",
98
+ "@memberjunction/scheduling-engine": "6.2.0-edge.2",
99
+ "@memberjunction/scheduling-engine-base": "6.2.0-edge.2",
100
+ "@memberjunction/schema-engine": "6.2.0-edge.2",
101
+ "@memberjunction/search-engine": "6.2.0-edge.2",
102
+ "@memberjunction/server-extensions-core": "6.2.0-edge.2",
103
+ "@memberjunction/sql-dialect": "6.2.0-edge.2",
104
+ "@memberjunction/sql-parser": "6.2.0-edge.2",
105
+ "@memberjunction/sqlserver-dataprovider": "6.2.0-edge.2",
106
+ "@memberjunction/storage": "6.2.0-edge.2",
107
+ "@memberjunction/tag-engine": "6.2.0-edge.2",
108
+ "@memberjunction/tag-engine-base": "6.2.0-edge.2",
109
+ "@memberjunction/task-graph": "6.2.0-edge.2",
110
+ "@memberjunction/templates": "6.2.0-edge.2",
111
+ "@memberjunction/testing-engine": "6.2.0-edge.2",
112
+ "@memberjunction/testing-engine-base": "6.2.0-edge.2",
113
+ "@memberjunction/version-history": "6.2.0-edge.2",
113
114
  "@octokit/auth-app": "^7.1.5",
114
115
  "@octokit/rest": "^21.1.1",
115
116
  "@types/compression": "^1.8.1",
@@ -148,6 +149,7 @@
148
149
  "zod": "^3.25.0"
149
150
  },
150
151
  "devDependencies": {
152
+ "@memberjunction/conversations-runtime": "6.2.0-edge.2",
151
153
  "@types/express": "^5.0.6",
152
154
  "pkgroll": "2.23.0",
153
155
  "rimraf": "6.1.2",
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Pins the status messages RunAIAgentResolver publishes for one run, and shows a host
3
+ * driving the same publisher into ConversationStreaming.
4
+ *
5
+ * The wire assertions are the contract the resolver already published before this class
6
+ * existed: a significant step and not a noise step, streamed text, the partial result,
7
+ * then the completion.
8
+ */
9
+ import 'reflect-metadata';
10
+ import { describe, it, expect, vi } from 'vitest';
11
+ import type { PubSubEngine } from 'type-graphql';
12
+
13
+ vi.mock('type-graphql', () => {
14
+ const decoratorFactory = (..._args: unknown[]) => (..._decorated: unknown[]) => undefined;
15
+ const exportNames = [
16
+ 'Resolver', 'Query', 'Mutation', 'Subscription', 'Arg', 'Args', 'ArgsType', 'Ctx', 'Root',
17
+ 'Info', 'Field', 'FieldResolver', 'ObjectType', 'InputType', 'InterfaceType', 'Authorized',
18
+ 'UseMiddleware', 'Extensions', 'Directive', 'ID', 'Int', 'Float', 'GraphQLISODateTime',
19
+ 'GraphQLTimestamp', 'registerEnumType', 'createMethodDecorator', 'createParamDecorator',
20
+ 'buildSchema', 'buildSchemaSync', 'PubSub',
21
+ ];
22
+ return Object.fromEntries(exportNames.map((name) => [name, decoratorFactory]));
23
+ });
24
+
25
+ vi.mock('@memberjunction/graphql-dataprovider', () => ({
26
+ GraphQLDataProvider: { Instance: { PushStatusUpdates: vi.fn() } },
27
+ }));
28
+
29
+ import type { ExecuteAgentResult } from '@memberjunction/ai-core-plus';
30
+ import { ConversationStreaming, type IConversationsRuntimeContext } from '@memberjunction/conversations-runtime';
31
+ import { AgentRunStatusPublisher } from '../resolvers/AgentRunStatusPublisher.js';
32
+ import type { UserPayload } from '../types.js';
33
+
34
+ const run = {
35
+ ID: 'run-1',
36
+ ConversationDetailID: 'detail-1',
37
+ ErrorMessage: undefined as string | undefined,
38
+ Steps: [{ StepName: 'Answer' }],
39
+ GetAll: () => ({ ID: 'run-1', ConversationDetailID: 'detail-1', Agent: 'Betty' }),
40
+ };
41
+
42
+ function publisher() {
43
+ const publish = vi.fn().mockResolvedValue(undefined);
44
+ const pubSub = { publish } as unknown as PubSubEngine;
45
+ const userPayload = { sessionId: 'session-1', userRecord: { ID: 'user-1' } } as UserPayload;
46
+ return { publish, made: new AgentRunStatusPublisher(pubSub, userPayload, 'session-1') };
47
+ }
48
+
49
+ function envelopes(publish: ReturnType<typeof vi.fn>): Array<Record<string, unknown>> {
50
+ return publish.mock.calls.map((call) => {
51
+ const payload = call[1] as { message: string; sessionId: string; ownerUserId: string };
52
+ expect(payload.sessionId).toBe('session-1');
53
+ expect(payload.ownerUserId).toBe('user-1');
54
+ return JSON.parse(payload.message) as Record<string, unknown>;
55
+ });
56
+ }
57
+
58
+ describe('AgentRunStatusPublisher', () => {
59
+ it('publishes the resolver sequence: a significant step, streamed text, the partial result, then the completion', () => {
60
+ const { publish, made } = publisher();
61
+
62
+ made.OnProgress({ step: 'initialization', message: 'noise', metadata: { agentRun: run } });
63
+ made.OnProgress({
64
+ step: 'prompt_execution',
65
+ message: 'Writing',
66
+ percentage: 40,
67
+ metadata: { agentRun: run, agentName: 'Betty' },
68
+ });
69
+ made.OnStreaming({ content: 'Hel', isComplete: false, stepType: 'prompt', kind: 'final-response' });
70
+ made.PublishFinal({ success: true, agentRun: run, payload: { text: 'Hello' } } as ExecuteAgentResult, 'detail-1', '{"text":"Hello"}');
71
+
72
+ const sent = envelopes(publish);
73
+ expect(sent.map((row) => (row.data as { type: string }).type)).toEqual([
74
+ 'progress',
75
+ 'streaming',
76
+ 'partial_result',
77
+ 'complete',
78
+ ]);
79
+ expect(sent[0].type).toBe('ExecutionProgress');
80
+ expect(sent[0].resolver).toBe('RunAIAgentResolver');
81
+ expect((sent[1].data as { streaming: { content: string } }).streaming.content).toBe('Hel');
82
+ expect((sent[2].data as { partialResult: { currentStep: string } }).partialResult.currentStep).toBe('Answer');
83
+ const completion = sent[3].data as { type: string; conversationDetailId: string; result: string; agentRunId: string };
84
+ expect(completion.conversationDetailId).toBe('detail-1');
85
+ expect(completion.agentRunId).toBe('run-1');
86
+ expect(completion.result).toBe('{"text":"Hello"}');
87
+ });
88
+
89
+ it('stamps the reply row on the completion when that id differs from the run', () => {
90
+ const { publish, made } = publisher();
91
+ made.PublishFinal(
92
+ { success: true, agentRun: run, payload: { text: 'Hello' } } as ExecuteAgentResult,
93
+ 'reply-9',
94
+ '{"text":"Hello"}',
95
+ );
96
+
97
+ const sent = envelopes(publish);
98
+ const completion = sent[sent.length - 1].data as { type: string; conversationDetailId: string; agentRunId: string };
99
+ expect(completion.type).toBe('complete');
100
+ expect(completion.conversationDetailId).toBe('reply-9');
101
+ expect(completion.agentRunId).toBe('run-1');
102
+ expect(run.ConversationDetailID).toBe('detail-1');
103
+ });
104
+
105
+ it('publishes a failure completion when there is no run', () => {
106
+ const { publish, made } = publisher();
107
+ made.PublishFailure('detail-1', 'background blew up');
108
+
109
+ const sent = envelopes(publish);
110
+ expect(sent).toHaveLength(1);
111
+ expect(sent[0].type).toBe('StreamingContent');
112
+ const completion = sent[0].data as {
113
+ type: string;
114
+ agentRunId: string;
115
+ conversationDetailId: string;
116
+ success: boolean;
117
+ errorMessage: string;
118
+ result: string;
119
+ };
120
+ expect(completion.type).toBe('complete');
121
+ expect(completion.agentRunId).toBe('unknown');
122
+ expect(completion.conversationDetailId).toBe('detail-1');
123
+ expect(completion.success).toBe(false);
124
+ expect(completion.errorMessage).toBe('background blew up');
125
+ expect(completion.result).toBe(JSON.stringify({ success: false, errorMessage: 'background blew up' }));
126
+ });
127
+
128
+ it('logs when a significant step or a streamed chunk arrives before any run', () => {
129
+ const error = vi.spyOn(console, 'error').mockImplementation(() => undefined);
130
+ const { publish, made } = publisher();
131
+
132
+ made.OnProgress({ step: 'initialization', message: 'noise' });
133
+ made.OnProgress({ step: 'prompt_execution', message: 'Writing' });
134
+ made.OnStreaming({ content: 'Hel', isComplete: false });
135
+
136
+ expect(publish).not.toHaveBeenCalled();
137
+ expect(error).toHaveBeenCalledWith('❌ No agent run available for progress callback');
138
+ expect(error).toHaveBeenCalledWith('❌ No agent run available for streaming callback');
139
+ expect(error).toHaveBeenCalledTimes(2);
140
+ error.mockRestore();
141
+ });
142
+
143
+ it('routes a host publisher progress and completion to the reply row', async () => {
144
+ const { publish, made } = publisher();
145
+ made.OnProgress({
146
+ step: 'action_execution',
147
+ message: 'Looking',
148
+ percentage: 10,
149
+ metadata: { agentRun: run },
150
+ });
151
+ made.PublishFinal({ success: true, agentRun: run } as ExecuteAgentResult, 'detail-1', '{"ok":true}');
152
+
153
+ const streaming = new ConversationStreaming({
154
+ Notification: { Notify: vi.fn() },
155
+ Tasks: { RemoveByAgentRunId: vi.fn().mockReturnValue(false) },
156
+ } as IConversationsRuntimeContext);
157
+ const onReply = vi.fn();
158
+ streaming.registerMessageCallback('detail-1', onReply);
159
+ const completions: Array<{ conversationDetailId: string; agentRunId: string }> = [];
160
+ streaming.CompletionEvents$.subscribe((event) => completions.push(event));
161
+
162
+ const deliver = streaming as unknown as {
163
+ handlePushStatusUpdate(status: unknown): Promise<void>;
164
+ };
165
+ for (const message of envelopes(publish)) {
166
+ await deliver.handlePushStatusUpdate(message);
167
+ }
168
+
169
+ expect(onReply).toHaveBeenCalledOnce();
170
+ expect(onReply.mock.calls[0][0].conversationDetailId).toBe('detail-1');
171
+ expect(onReply.mock.calls[0][0].message).toBe('Looking');
172
+ expect(completions).toEqual([{ conversationDetailId: 'detail-1', agentRunId: 'run-1', success: true, errorMessage: undefined }]);
173
+ expect(streaming.GetRecentCompletion('detail-1')?.agentRunId).toBe('run-1');
174
+ });
175
+ });
@@ -0,0 +1,62 @@
1
+ /**
2
+ * `DeleteOptionsInput.SkipRecordChanges` is optional on the wire.
3
+ *
4
+ * The field arrived in 6.1.0 as `Boolean!`. 5.51.x clients spell out every delete option in
5
+ * `options___`, and none of them knows this field, so on 6.1.0 to 6.1.3 every such delete failed
6
+ * schema validation with `Field "DeleteOptionsInput.SkipRecordChanges" of required type
7
+ * "Boolean!" was not provided` (Izzy, 6.1 certification gate 5). The server never honours the
8
+ * flag from the wire anyway (see SanitizeFromWire), so absent and `false` are the same request.
9
+ *
10
+ * These tests pin the built schema type, which is what a client's validation runs against, and the
11
+ * sanitizer's behaviour on a 5.51-shaped request that omits the field entirely.
12
+ */
13
+ import 'reflect-metadata';
14
+ import { describe, it, expect } from 'vitest';
15
+ import { Arg, buildSchema, Mutation, Query, Resolver } from 'type-graphql';
16
+ import type { GraphQLInputObjectType } from 'graphql';
17
+ import { DeleteOptionsInput } from '../generic/DeleteOptionsInput.js';
18
+
19
+ @Resolver()
20
+ class ProbeResolver {
21
+ // type-graphql refuses a schema with no Query type; the probe only needs the mutation.
22
+ @Query(() => Boolean)
23
+ Ping(): boolean {
24
+ return true;
25
+ }
26
+
27
+ @Mutation(() => Boolean)
28
+ Probe(@Arg('options___', () => DeleteOptionsInput) options: DeleteOptionsInput): boolean {
29
+ return options.SkipRecordChanges === true;
30
+ }
31
+ }
32
+
33
+ describe('DeleteOptionsInput wire shape', () => {
34
+ it('builds SkipRecordChanges as optional with a false default, every other field required', async () => {
35
+ const schema = await buildSchema({ resolvers: [ProbeResolver], validate: false });
36
+ // Read the built type directly rather than printing the schema: printSchema runs
37
+ // instanceOf checks that fail when type-graphql and the test resolve separate copies
38
+ // of `graphql`, and the field objects carry everything the assertion needs.
39
+ const input = schema.getType('DeleteOptionsInput') as GraphQLInputObjectType;
40
+ expect(input).toBeDefined();
41
+ const fields = input.getFields();
42
+ expect(String(fields['SkipRecordChanges'].type)).toBe('Boolean');
43
+ expect(fields['SkipRecordChanges'].defaultValue).toBe(false);
44
+ for (const required of ['SkipEntityAIActions', 'SkipEntityActions', 'ReplayOnly', 'IsParentEntityDelete']) {
45
+ expect(String(fields[required].type), required).toBe('Boolean!');
46
+ expect(fields[required].defaultValue, required).toBeUndefined();
47
+ }
48
+ });
49
+
50
+ it('sanitizer treats a 5.51-shaped request that omits the field as the ordinary case', () => {
51
+ const legacy = {
52
+ SkipEntityAIActions: false,
53
+ SkipEntityActions: true,
54
+ ReplayOnly: false,
55
+ IsParentEntityDelete: false,
56
+ } as DeleteOptionsInput;
57
+ const sanitized = DeleteOptionsInput.SanitizeFromWire(legacy, 'Customers', 'user@example.test');
58
+ expect(sanitized).toBe(legacy);
59
+ expect(sanitized.SkipRecordChanges).toBeUndefined();
60
+ expect(sanitized.SkipEntityActions).toBe(true);
61
+ });
62
+ });