@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
@@ -13,58 +13,58 @@ import {
13
13
  @ObjectType()
14
14
  export class MemorySnapshotGQL {
15
15
  @Field(() => Float)
16
- heapUsed: number;
16
+ heapUsed: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
17
17
 
18
18
  @Field(() => Float)
19
- heapTotal: number;
19
+ heapTotal: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
20
20
 
21
21
  @Field(() => Float)
22
- timestamp: number;
22
+ timestamp: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
23
23
  }
24
24
 
25
25
  @ObjectType()
26
26
  export class TelemetryEventGQL {
27
27
  @Field(() => String)
28
- id: string;
28
+ id: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
29
29
 
30
30
  @Field(() => String)
31
- category: string;
31
+ category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
32
32
 
33
33
  @Field(() => String)
34
- operation: string;
34
+ operation: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
35
35
 
36
36
  @Field(() => String)
37
- fingerprint: string;
37
+ fingerprint: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
38
38
 
39
39
  @Field(() => Float)
40
- startTime: number;
40
+ startTime: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
41
41
 
42
42
  @Field(() => Float, { nullable: true })
43
- endTime?: number;
43
+ endTime?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
44
44
 
45
45
  @Field(() => Float, { nullable: true })
46
- elapsedMs?: number;
46
+ elapsedMs?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
47
47
 
48
48
  @Field(() => String, { nullable: true })
49
- userId?: string;
49
+ userId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
50
50
 
51
51
  @Field(() => String)
52
- params: string; // JSON stringified
52
+ params: string; // JSON stringified — case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
53
53
 
54
54
  @Field(() => [String], { nullable: true })
55
- tags?: string[];
55
+ tags?: string[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
56
56
 
57
57
  @Field(() => String, { nullable: true })
58
- stackTrace?: string;
58
+ stackTrace?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
59
59
 
60
60
  @Field(() => MemorySnapshotGQL, { nullable: true })
61
- memoryBefore?: MemorySnapshotGQL;
61
+ memoryBefore?: MemorySnapshotGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
62
62
 
63
63
  @Field(() => MemorySnapshotGQL, { nullable: true })
64
- memoryAfter?: MemorySnapshotGQL;
64
+ memoryAfter?: MemorySnapshotGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
65
65
 
66
66
  @Field(() => String, { nullable: true })
67
- parentEventId?: string;
67
+ parentEventId?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
68
68
  }
69
69
 
70
70
  // ============================================================================
@@ -74,52 +74,52 @@ export class TelemetryEventGQL {
74
74
  @ObjectType()
75
75
  export class CallerLocationGQL {
76
76
  @Field(() => String)
77
- location: string;
77
+ location: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
78
78
 
79
79
  @Field(() => Int)
80
- count: number;
80
+ count: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
81
81
  }
82
82
 
83
83
  @ObjectType()
84
84
  export class TelemetryPatternGQL {
85
85
  @Field(() => String)
86
- fingerprint: string;
86
+ fingerprint: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
87
87
 
88
88
  @Field(() => String)
89
- category: string;
89
+ category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
90
90
 
91
91
  @Field(() => String)
92
- operation: string;
92
+ operation: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
93
93
 
94
94
  @Field(() => String)
95
- sampleParams: string; // JSON stringified
95
+ sampleParams: string; // JSON stringified — case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
96
96
 
97
97
  @Field(() => Int)
98
- count: number;
98
+ count: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
99
99
 
100
100
  @Field(() => Float)
101
- totalElapsedMs: number;
101
+ totalElapsedMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
102
102
 
103
103
  @Field(() => Float)
104
- avgElapsedMs: number;
104
+ avgElapsedMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
105
105
 
106
106
  @Field(() => Float)
107
- minElapsedMs: number;
107
+ minElapsedMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
108
108
 
109
109
  @Field(() => Float)
110
- maxElapsedMs: number;
110
+ maxElapsedMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
111
111
 
112
112
  @Field(() => [CallerLocationGQL])
113
- callerLocations: CallerLocationGQL[];
113
+ callerLocations: CallerLocationGQL[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
114
114
 
115
115
  @Field(() => Float)
116
- firstSeen: number;
116
+ firstSeen: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
117
117
 
118
118
  @Field(() => Float)
119
- lastSeen: number;
119
+ lastSeen: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
120
120
 
121
121
  @Field(() => Float)
122
- windowStartTime: number;
122
+ windowStartTime: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
123
123
  }
124
124
 
125
125
  // ============================================================================
@@ -129,37 +129,37 @@ export class TelemetryPatternGQL {
129
129
  @ObjectType()
130
130
  export class TelemetryInsightGQL {
131
131
  @Field(() => String)
132
- id: string;
132
+ id: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
133
133
 
134
134
  @Field(() => String)
135
- severity: string;
135
+ severity: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
136
136
 
137
137
  @Field(() => String)
138
- analyzerName: string;
138
+ analyzerName: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
139
139
 
140
140
  @Field(() => String)
141
- category: string;
141
+ category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
142
142
 
143
143
  @Field(() => String)
144
- title: string;
144
+ title: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
145
145
 
146
146
  @Field(() => String)
147
- message: string;
147
+ message: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
148
148
 
149
149
  @Field(() => String)
150
- suggestion: string;
150
+ suggestion: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
151
151
 
152
152
  @Field(() => [String])
153
- relatedEventIds: string[];
153
+ relatedEventIds: string[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
154
154
 
155
155
  @Field(() => String, { nullable: true })
156
- entityName?: string;
156
+ entityName?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
157
157
 
158
158
  @Field(() => String, { nullable: true })
159
- metadata?: string; // JSON stringified
159
+ metadata?: string; // JSON stringified — case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
160
160
 
161
161
  @Field(() => Float)
162
- timestamp: number;
162
+ timestamp: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
163
163
  }
164
164
 
165
165
  // ============================================================================
@@ -169,31 +169,31 @@ export class TelemetryInsightGQL {
169
169
  @ObjectType()
170
170
  export class CategoryStatsGQL {
171
171
  @Field(() => String)
172
- category: string;
172
+ category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
173
173
 
174
174
  @Field(() => Int)
175
- events: number;
175
+ events: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
176
176
 
177
177
  @Field(() => Float)
178
- avgMs: number;
178
+ avgMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
179
179
  }
180
180
 
181
181
  @ObjectType()
182
182
  export class TelemetryStatsGQL {
183
183
  @Field(() => Int)
184
- totalEvents: number;
184
+ totalEvents: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
185
185
 
186
186
  @Field(() => Int)
187
- totalPatterns: number;
187
+ totalPatterns: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
188
188
 
189
189
  @Field(() => Int)
190
- totalInsights: number;
190
+ totalInsights: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
191
191
 
192
192
  @Field(() => Int)
193
- activeEvents: number;
193
+ activeEvents: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
194
194
 
195
195
  @Field(() => [CategoryStatsGQL])
196
- byCategory: CategoryStatsGQL[];
196
+ byCategory: CategoryStatsGQL[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
197
197
  }
198
198
 
199
199
  // ============================================================================
@@ -203,64 +203,64 @@ export class TelemetryStatsGQL {
203
203
  @ObjectType()
204
204
  export class CategoryOverrideGQL {
205
205
  @Field(() => String)
206
- category: string;
206
+ category: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
207
207
 
208
208
  @Field(() => Boolean)
209
- enabled: boolean;
209
+ enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
210
210
 
211
211
  @Field(() => String, { nullable: true })
212
- level?: string;
212
+ level?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
213
213
  }
214
214
 
215
215
  @ObjectType()
216
216
  export class AutoTrimSettingsGQL {
217
217
  @Field(() => Boolean)
218
- enabled: boolean;
218
+ enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
219
219
 
220
220
  @Field(() => Int, { nullable: true })
221
- maxEvents?: number;
221
+ maxEvents?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
222
222
 
223
223
  @Field(() => Int, { nullable: true })
224
- maxAgeMs?: number;
224
+ maxAgeMs?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
225
225
  }
226
226
 
227
227
  @ObjectType()
228
228
  export class DuplicateDetectionSettingsGQL {
229
229
  @Field(() => Boolean)
230
- enabled: boolean;
230
+ enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
231
231
 
232
232
  @Field(() => Int)
233
- windowMs: number;
233
+ windowMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
234
234
  }
235
235
 
236
236
  @ObjectType()
237
237
  export class AnalyzerSettingsGQL {
238
238
  @Field(() => Boolean)
239
- enabled: boolean;
239
+ enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
240
240
 
241
241
  @Field(() => Int)
242
- dedupeWindowMs: number;
242
+ dedupeWindowMs: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
243
243
  }
244
244
 
245
245
  @ObjectType()
246
246
  export class TelemetrySettingsGQL {
247
247
  @Field(() => Boolean)
248
- enabled: boolean;
248
+ enabled: boolean; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
249
249
 
250
250
  @Field(() => String)
251
- level: string;
251
+ level: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
252
252
 
253
253
  @Field(() => [CategoryOverrideGQL])
254
- categoryOverrides: CategoryOverrideGQL[];
254
+ categoryOverrides: CategoryOverrideGQL[]; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
255
255
 
256
256
  @Field(() => AutoTrimSettingsGQL)
257
- autoTrim: AutoTrimSettingsGQL;
257
+ autoTrim: AutoTrimSettingsGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
258
258
 
259
259
  @Field(() => DuplicateDetectionSettingsGQL)
260
- duplicateDetection: DuplicateDetectionSettingsGQL;
260
+ duplicateDetection: DuplicateDetectionSettingsGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
261
261
 
262
262
  @Field(() => AnalyzerSettingsGQL)
263
- analyzers: AnalyzerSettingsGQL;
263
+ analyzers: AnalyzerSettingsGQL; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
264
264
  }
265
265
 
266
266
  // ============================================================================
@@ -270,46 +270,46 @@ export class TelemetrySettingsGQL {
270
270
  @InputType()
271
271
  export class TelemetryEventFilterInput {
272
272
  @Field(() => String, { nullable: true })
273
- category?: string;
273
+ category?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
274
274
 
275
275
  @Field(() => String, { nullable: true })
276
- operation?: string;
276
+ operation?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
277
277
 
278
278
  @Field(() => Float, { nullable: true })
279
- minElapsedMs?: number;
279
+ minElapsedMs?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
280
280
 
281
281
  @Field(() => Float, { nullable: true })
282
- since?: number;
282
+ since?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
283
283
 
284
284
  @Field(() => Int, { nullable: true })
285
- limit?: number;
285
+ limit?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
286
286
  }
287
287
 
288
288
  @InputType()
289
289
  export class TelemetryPatternFilterInput {
290
290
  @Field(() => String, { nullable: true })
291
- category?: string;
291
+ category?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
292
292
 
293
293
  @Field(() => Int, { nullable: true })
294
- minCount?: number;
294
+ minCount?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
295
295
 
296
296
  @Field(() => String, { nullable: true })
297
- sortBy?: string;
297
+ sortBy?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
298
298
  }
299
299
 
300
300
  @InputType()
301
301
  export class TelemetryInsightFilterInput {
302
302
  @Field(() => String, { nullable: true })
303
- severity?: string;
303
+ severity?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
304
304
 
305
305
  @Field(() => String, { nullable: true })
306
- category?: string;
306
+ category?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
307
307
 
308
308
  @Field(() => String, { nullable: true })
309
- entityName?: string;
309
+ entityName?: string; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
310
310
 
311
311
  @Field(() => Int, { nullable: true })
312
- limit?: number;
312
+ limit?: number; // case-violation-ok-legacy-back-compat: the property name is the GraphQL schema field name — renaming it breaks every client query
313
313
  }
314
314
 
315
315
  // ============================================================================
@@ -1,26 +1,27 @@
1
1
  import { Resolver, Mutation, Arg, Ctx, ObjectType, Field, Float } from 'type-graphql';
2
2
  import { AppContext } from '../types.js';
3
- import { LogError, LogStatus, UserInfo } from '@memberjunction/core';
3
+ import { IMetadataProvider, LogError, LogStatus, UserInfo } from '@memberjunction/core';
4
4
  import { ResolverBase } from '../generic/ResolverBase.js';
5
5
  import { EntityVectorSyncer, VectorizeEntityParams, VectorizeProgressUpdate } from '@memberjunction/ai-vector-sync';
6
6
  import { PubSubManager } from '../generic/PubSubManager.js';
7
7
  import { PipelineProgressNotification } from './PipelineProgressResolver.js';
8
8
  import { v4 as uuidv4 } from 'uuid';
9
+ import { GetReadWriteProvider } from '../util.js';
9
10
 
10
11
  const PIPELINE_PROGRESS_TOPIC = 'PIPELINE_PROGRESS';
11
12
 
12
13
  @ObjectType()
13
14
  export class VectorizeEntityResult {
14
- @Field()
15
+ @Field(() => Boolean)
15
16
  Success: boolean;
16
17
 
17
- @Field({ nullable: true })
18
+ @Field(() => String, { nullable: true })
18
19
  Status?: string;
19
20
 
20
- @Field({ nullable: true })
21
+ @Field(() => String, { nullable: true })
21
22
  ErrorMessage?: string;
22
23
 
23
- @Field({ nullable: true })
24
+ @Field(() => String, { nullable: true })
24
25
  PipelineRunID?: string;
25
26
  }
26
27
 
@@ -28,10 +29,10 @@ export class VectorizeEntityResult {
28
29
  export class VectorizeEntityResolver extends ResolverBase {
29
30
  @Mutation(() => VectorizeEntityResult)
30
31
  async VectorizeEntity(
31
- @Arg('entityDocumentID') entityDocumentID: string,
32
- @Arg('entityID') entityID: string,
32
+ @Arg('entityDocumentID', () => String) entityDocumentID: string,
33
+ @Arg('entityID', () => String) entityID: string,
33
34
  @Arg('batchSize', () => Float, { nullable: true }) batchSize?: number,
34
- @Ctx() { userPayload }: AppContext = {} as AppContext
35
+ @Ctx() { userPayload, providers }: AppContext = {} as AppContext
35
36
  ): Promise<VectorizeEntityResult> {
36
37
  try {
37
38
  const currentUser = this.GetUserFromPayload(userPayload);
@@ -39,12 +40,15 @@ export class VectorizeEntityResolver extends ResolverBase {
39
40
  return { Success: false, Status: 'Error', ErrorMessage: 'Unable to determine current user' };
40
41
  }
41
42
 
43
+ // Capture the request's provider before returning, so the background run writes through the
44
+ // same connection the caller used. It is also the colocated vector host (#4910).
45
+ const provider = GetReadWriteProvider(providers, { allowFallbackToReadOnly: true }) ?? undefined;
42
46
  const pipelineRunID = uuidv4();
43
47
  LogStatus(`VectorizeEntity: starting pipeline ${pipelineRunID} for entity document ${entityDocumentID}`);
44
48
 
45
49
  // Fire-and-forget: start the pipeline in the background and return immediately.
46
50
  // Progress is delivered to the client via the PipelineProgress GraphQL subscription.
47
- this.runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser);
51
+ this.runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser, provider);
48
52
 
49
53
  return {
50
54
  Success: true,
@@ -71,10 +75,11 @@ export class VectorizeEntityResolver extends ResolverBase {
71
75
  entityDocumentID: string,
72
76
  entityID: string,
73
77
  batchSize: number | undefined,
74
- currentUser: UserInfo
78
+ currentUser: UserInfo,
79
+ provider?: IMetadataProvider
75
80
  ): Promise<void> {
76
81
  try {
77
- const syncer = new EntityVectorSyncer();
82
+ const syncer = new EntityVectorSyncer(provider);
78
83
  await syncer.Config(true, currentUser);
79
84
 
80
85
  const params: VectorizeEntityParams = {
@@ -12,22 +12,24 @@ import { describe, it, expect, vi } from 'vitest';
12
12
  // vars to even import. Mock those heavy imports out so this file stays a true,
13
13
  // isolated unit test of the token-tracking logic (mirrors the mocking convention
14
14
  // in RealtimeBridgeResolver.test.ts).
15
- vi.mock('../../index.js', () => ({ getDbType: vi.fn() }));
15
+ vi.mock('../../index.js', () => ({ GetDbType: vi.fn(),
16
+ get getDbType() { return this.GetDbType; } }));
16
17
  vi.mock('@memberjunction/generic-database-provider', () => ({
17
18
  QueryCompositionEngine: vi.fn(() => ({ HasCompositionTokens: vi.fn(() => false) })),
18
19
  }));
19
20
  vi.mock('../../util.js', () => ({ GetReadOnlyDataSource: vi.fn(), GetReadOnlyProvider: vi.fn() }));
20
- vi.mock('../../auth/index.js', () => ({ getSystemUser: vi.fn() }));
21
+ vi.mock('../../auth/index.js', () => ({ GetSystemUser: vi.fn(),
22
+ get getSystemUser() { return this.GetSystemUser; } }));
21
23
  vi.mock('mssql', () => ({ default: { Request: vi.fn() } }));
22
24
 
23
25
  import {
24
- registerAccessToken,
25
- deleteAccessToken,
26
- tokenExists,
27
- isTokenValid,
28
- recordTokenUse,
29
- pruneExpiredTokens,
30
- getAccessTokenCount,
26
+ RegisterAccessToken,
27
+ DeleteAccessToken,
28
+ TokenExists,
29
+ IsTokenValid,
30
+ RecordTokenUse,
31
+ PruneExpiredTokens,
32
+ GetAccessTokenCount,
31
33
  } from '../GetDataResolver.js';
32
34
 
33
35
  // ---------------------------------------------------------------------------
@@ -51,88 +53,88 @@ const uniqueToken = () => `test-token-${Date.now()}-${++seq}`;
51
53
  describe('GetDataResolver access-token lifecycle', () => {
52
54
  it('registerAccessToken() creates a token that is valid and exists', () => {
53
55
  const token = uniqueToken();
54
- const created = registerAccessToken(token, 60_000);
56
+ const created = RegisterAccessToken(token, 60_000);
55
57
  expect(created.Token).toBe(token);
56
- expect(tokenExists(token)).toBe(true);
57
- expect(isTokenValid(token)).toBe(true);
58
+ expect(TokenExists(token)).toBe(true);
59
+ expect(IsTokenValid(token)).toBe(true);
58
60
  });
59
61
 
60
62
  it('registerAccessToken() throws when the same custom token is registered twice', () => {
61
63
  const token = uniqueToken();
62
- registerAccessToken(token, 60_000);
63
- expect(() => registerAccessToken(token, 60_000)).toThrow(/already exists/);
64
+ RegisterAccessToken(token, 60_000);
65
+ expect(() => RegisterAccessToken(token, 60_000)).toThrow(/already exists/);
64
66
  });
65
67
 
66
68
  it('isTokenValid() is false for an unknown token and for an expired one', () => {
67
- expect(isTokenValid('never-registered-token')).toBe(false);
69
+ expect(IsTokenValid('never-registered-token')).toBe(false);
68
70
 
69
71
  const token = uniqueToken();
70
- registerAccessToken(token, -1); // already expired (ExpiresAt in the past)
71
- expect(isTokenValid(token)).toBe(false);
72
+ RegisterAccessToken(token, -1); // already expired (ExpiresAt in the past)
73
+ expect(IsTokenValid(token)).toBe(false);
72
74
  });
73
75
 
74
76
  it('deleteAccessToken() removes a token and throws for an unknown one', () => {
75
77
  const token = uniqueToken();
76
- registerAccessToken(token, 60_000);
77
- expect(tokenExists(token)).toBe(true);
78
+ RegisterAccessToken(token, 60_000);
79
+ expect(TokenExists(token)).toBe(true);
78
80
 
79
- deleteAccessToken(token);
80
- expect(tokenExists(token)).toBe(false);
81
- expect(() => deleteAccessToken(token)).toThrow(/does not exist/);
81
+ DeleteAccessToken(token);
82
+ expect(TokenExists(token)).toBe(false);
83
+ expect(() => DeleteAccessToken(token)).toThrow(/does not exist/);
82
84
  });
83
85
 
84
86
  it('recordTokenUse() appends to TokenUses and throws for an unknown token', () => {
85
87
  const token = uniqueToken();
86
- registerAccessToken(token, 60_000);
88
+ RegisterAccessToken(token, 60_000);
87
89
 
88
- expect(() => recordTokenUse(token, { some: 'payload' })).not.toThrow();
89
- expect(() => recordTokenUse('never-registered-token', {})).toThrow(/does not exist/);
90
+ expect(() => RecordTokenUse(token, { some: 'payload' })).not.toThrow();
91
+ expect(() => RecordTokenUse('never-registered-token', {})).toThrow(/does not exist/);
90
92
  });
91
93
 
92
94
  it('pruneExpiredTokens() removes only tokens whose ExpiresAt has passed', () => {
93
95
  const expiredToken = uniqueToken();
94
96
  const liveToken = uniqueToken();
95
- registerAccessToken(expiredToken, -1); // already expired
96
- registerAccessToken(liveToken, 60_000); // still valid
97
+ RegisterAccessToken(expiredToken, -1); // already expired
98
+ RegisterAccessToken(liveToken, 60_000); // still valid
97
99
 
98
- pruneExpiredTokens();
100
+ PruneExpiredTokens();
99
101
 
100
- expect(tokenExists(expiredToken)).toBe(false);
101
- expect(tokenExists(liveToken)).toBe(true);
102
+ expect(TokenExists(expiredToken)).toBe(false);
103
+ expect(TokenExists(liveToken)).toBe(true);
102
104
  });
103
105
 
104
106
  it('pruneExpiredTokens() accepts an injected "now" for deterministic testing', () => {
105
107
  const token = uniqueToken();
106
108
  const registeredAt = new Date('2026-01-01T00:00:00Z');
107
- registerAccessToken(token, 5 * 60 * 1000); // 5-minute lifespan from real "now"
109
+ RegisterAccessToken(token, 5 * 60 * 1000); // 5-minute lifespan from real "now"
108
110
 
109
111
  // Simulate a check far in the future — token should count as expired at that instant.
110
112
  const farFuture = new Date(registeredAt.getTime() + 365 * 24 * 60 * 60 * 1000);
111
- pruneExpiredTokens(farFuture);
113
+ PruneExpiredTokens(farFuture);
112
114
 
113
- expect(tokenExists(token)).toBe(false);
115
+ expect(TokenExists(token)).toBe(false);
114
116
  });
115
117
 
116
118
  it('the core Round 7 regression: registering many expired tokens does not grow the array without bound', () => {
117
- const before = getAccessTokenCount();
119
+ const before = GetAccessTokenCount();
118
120
 
119
121
  // Simulate 50 short-lived tokens that all expire immediately (e.g. a burst
120
122
  // of external calls with a near-zero lifespan, or tokens whose consumer
121
123
  // never came back before expiry — the exact shape of the leak this fix
122
124
  // addresses).
123
125
  for (let i = 0; i < 50; i++) {
124
- registerAccessToken(`${uniqueToken()}-burst-${i}`, -1);
126
+ RegisterAccessToken(`${uniqueToken()}-burst-${i}`, -1);
125
127
  }
126
128
 
127
129
  // Register one more, healthy token — its registerAccessToken() call sweeps
128
130
  // all 50 expired ones out, so the count should NOT have grown by 51; it
129
131
  // should only reflect whatever was live before plus this one new token.
130
132
  const survivorToken = uniqueToken();
131
- registerAccessToken(survivorToken, 60_000);
133
+ RegisterAccessToken(survivorToken, 60_000);
132
134
 
133
135
  // The 50 expired burst tokens must be gone — the array self-bounded rather
134
136
  // than accumulating every registration for the life of the process.
135
- expect(getAccessTokenCount()).toBeLessThan(before + 51);
136
- expect(tokenExists(survivorToken)).toBe(true);
137
+ expect(GetAccessTokenCount()).toBeLessThan(before + 51);
138
+ expect(TokenExists(survivorToken)).toBe(true);
137
139
  });
138
140
  });