@memberjunction/server 6.2.0-edge.4 → 6.2.0-edge.6

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 (560) hide show
  1. package/README.md +47 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/SessionJanitor.d.ts +91 -30
  4. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  5. package/dist/agentSessions/SessionJanitor.js +311 -81
  6. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  7. package/dist/agentSessions/SessionManager.d.ts +17 -3
  8. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  9. package/dist/agentSessions/SessionManager.js +44 -10
  10. package/dist/agentSessions/SessionManager.js.map +1 -1
  11. package/dist/apiRoot.d.ts +32 -0
  12. package/dist/apiRoot.d.ts.map +1 -0
  13. package/dist/apiRoot.js +67 -0
  14. package/dist/apiRoot.js.map +1 -0
  15. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  16. package/dist/auth/AuthProviderCatalogRouter.js +27 -0
  17. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  18. package/dist/auth/LoginScreenEngine.d.ts +22 -0
  19. package/dist/auth/LoginScreenEngine.d.ts.map +1 -0
  20. package/dist/auth/LoginScreenEngine.js +57 -0
  21. package/dist/auth/LoginScreenEngine.js.map +1 -0
  22. package/dist/auth/index.d.ts +1 -0
  23. package/dist/auth/index.d.ts.map +1 -1
  24. package/dist/auth/index.js +52 -10
  25. package/dist/auth/index.js.map +1 -1
  26. package/dist/auth/initializeProviders.d.ts +10 -0
  27. package/dist/auth/initializeProviders.d.ts.map +1 -1
  28. package/dist/auth/initializeProviders.js +37 -1
  29. package/dist/auth/initializeProviders.js.map +1 -1
  30. package/dist/auth/localDevAuth.d.ts +79 -0
  31. package/dist/auth/localDevAuth.d.ts.map +1 -0
  32. package/dist/auth/localDevAuth.js +439 -0
  33. package/dist/auth/localDevAuth.js.map +1 -0
  34. package/dist/auth/magicLink/MagicLinkKeys.d.ts +2 -2
  35. package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
  36. package/dist/auth/magicLink/MagicLinkKeys.js +1 -1
  37. package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
  38. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  39. package/dist/auth/magicLink/MagicLinkRouter.js +3 -2
  40. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  41. package/dist/auth/magicLink/types.d.ts +12 -0
  42. package/dist/auth/magicLink/types.d.ts.map +1 -1
  43. package/dist/auth/sessionUserClone.d.ts +1 -1
  44. package/dist/auth/sessionUserClone.d.ts.map +1 -1
  45. package/dist/auth/sessionUserClone.js +3 -2
  46. package/dist/auth/sessionUserClone.js.map +1 -1
  47. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts +292 -0
  48. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -0
  49. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +442 -0
  50. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -0
  51. package/dist/broadcast/index.d.ts +6 -0
  52. package/dist/broadcast/index.d.ts.map +1 -0
  53. package/dist/broadcast/index.js +6 -0
  54. package/dist/broadcast/index.js.map +1 -0
  55. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts +43 -0
  56. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts.map +1 -0
  57. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js +144 -0
  58. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js.map +1 -0
  59. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts +46 -0
  60. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts.map +1 -0
  61. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js +149 -0
  62. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js.map +1 -0
  63. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts +49 -0
  64. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts.map +1 -0
  65. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js +131 -0
  66. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js.map +1 -0
  67. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts +24 -0
  68. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts.map +1 -0
  69. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js +51 -0
  70. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js.map +1 -0
  71. package/dist/cache.d.ts +3 -2
  72. package/dist/cache.d.ts.map +1 -1
  73. package/dist/cache.js.map +1 -1
  74. package/dist/config.d.ts +632 -22
  75. package/dist/config.d.ts.map +1 -1
  76. package/dist/config.js +104 -4
  77. package/dist/config.js.map +1 -1
  78. package/dist/context.d.ts +3 -1
  79. package/dist/context.d.ts.map +1 -1
  80. package/dist/context.js +29 -8
  81. package/dist/context.js.map +1 -1
  82. package/dist/coreRoutes.d.ts +29 -0
  83. package/dist/coreRoutes.d.ts.map +1 -0
  84. package/dist/coreRoutes.js +156 -0
  85. package/dist/coreRoutes.js.map +1 -0
  86. package/dist/generated/graphql-schemas/__mj.d.ts +1016 -29
  87. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  88. package/dist/generated/graphql-schemas/__mj.js +5125 -434
  89. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  90. package/dist/generic/CacheInvalidationResolver.d.ts +85 -30
  91. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  92. package/dist/generic/CacheInvalidationResolver.js +175 -60
  93. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  94. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
  95. package/dist/generic/OrphanedConversationDetailReconciler.js +2 -0
  96. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  97. package/dist/generic/PubSubManager.d.ts +10 -0
  98. package/dist/generic/PubSubManager.d.ts.map +1 -1
  99. package/dist/generic/PubSubManager.js +44 -1
  100. package/dist/generic/PubSubManager.js.map +1 -1
  101. package/dist/generic/PushStatusResolver.d.ts +39 -6
  102. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  103. package/dist/generic/PushStatusResolver.js +94 -12
  104. package/dist/generic/PushStatusResolver.js.map +1 -1
  105. package/dist/generic/ResolverBase.d.ts +168 -69
  106. package/dist/generic/ResolverBase.d.ts.map +1 -1
  107. package/dist/generic/ResolverBase.js +464 -405
  108. package/dist/generic/ResolverBase.js.map +1 -1
  109. package/dist/generic/RunViewResolver.d.ts +11 -3
  110. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  111. package/dist/generic/RunViewResolver.js +91 -13
  112. package/dist/generic/RunViewResolver.js.map +1 -1
  113. package/dist/generic/actionOutputFieldSecurity.d.ts +26 -0
  114. package/dist/generic/actionOutputFieldSecurity.d.ts.map +1 -0
  115. package/dist/generic/actionOutputFieldSecurity.js +47 -0
  116. package/dist/generic/actionOutputFieldSecurity.js.map +1 -0
  117. package/dist/generic/fieldSecurityTransport.d.ts +30 -0
  118. package/dist/generic/fieldSecurityTransport.d.ts.map +1 -0
  119. package/dist/generic/fieldSecurityTransport.js +30 -0
  120. package/dist/generic/fieldSecurityTransport.js.map +1 -0
  121. package/dist/globalCors.d.ts +33 -0
  122. package/dist/globalCors.d.ts.map +1 -0
  123. package/dist/globalCors.js +58 -0
  124. package/dist/globalCors.js.map +1 -0
  125. package/dist/index.d.ts +14 -0
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +230 -222
  128. package/dist/index.js.map +1 -1
  129. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  130. package/dist/integration/CustomColumnPromoter.js +6 -1
  131. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  132. package/dist/logging/variablesLoggingMiddleware.d.ts +12 -0
  133. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  134. package/dist/logging/variablesLoggingMiddleware.js +50 -1
  135. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  136. package/dist/multiTenancy/index.d.ts.map +1 -1
  137. package/dist/multiTenancy/index.js +22 -2
  138. package/dist/multiTenancy/index.js.map +1 -1
  139. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -1
  140. package/dist/realtimeSessions/RealtimeSessionVerificationService.js +2 -1
  141. package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -1
  142. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -1
  143. package/dist/realtimeSessions/RealtimeVerifyRouter.js +2 -1
  144. package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -1
  145. package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts +100 -0
  146. package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts.map +1 -0
  147. package/dist/realtimeSessions/RecordingAssemblyScheduler.js +173 -0
  148. package/dist/realtimeSessions/RecordingAssemblyScheduler.js.map +1 -0
  149. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -1
  150. package/dist/realtimeSessions/SessionVerificationPortsBase.js +1 -0
  151. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -1
  152. package/dist/realtimeSessions/index.d.ts +2 -0
  153. package/dist/realtimeSessions/index.d.ts.map +1 -1
  154. package/dist/realtimeSessions/index.js +2 -0
  155. package/dist/realtimeSessions/index.js.map +1 -1
  156. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +32 -0
  157. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -0
  158. package/dist/realtimeSessions/ownedRealtimeSession.js +56 -0
  159. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -0
  160. package/dist/realtimeSessions/sessionAccess.d.ts +91 -8
  161. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
  162. package/dist/realtimeSessions/sessionAccess.js +127 -20
  163. package/dist/realtimeSessions/sessionAccess.js.map +1 -1
  164. package/dist/realtimeSessions/sessionConfigStamps.js +1 -1
  165. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -1
  166. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -1
  167. package/dist/realtimeSessions/subscriptionAuthorization.js +5 -2
  168. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -1
  169. package/dist/realtimeSessions/verificationWorkflow.d.ts +2 -0
  170. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -1
  171. package/dist/realtimeSessions/verificationWorkflow.js +1 -1
  172. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -1
  173. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  174. package/dist/realtimeWidget/WidgetRouter.js +19 -3
  175. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  176. package/dist/realtimeWidget/WidgetSessionService.d.ts +67 -7
  177. package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
  178. package/dist/realtimeWidget/WidgetSessionService.js +201 -19
  179. package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
  180. package/dist/realtimeWidget/host-identity.d.ts +1 -1
  181. package/dist/realtimeWidget/host-identity.js +1 -1
  182. package/dist/realtimeWidget/widgetCore.d.ts +20 -1
  183. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  184. package/dist/realtimeWidget/widgetCore.js +17 -1
  185. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  186. package/dist/realtimeWidget/widgetGuestElevation.d.ts +1 -1
  187. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  188. package/dist/realtimeWidget/widgetGuestElevation.js +2 -1
  189. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  190. package/dist/resolvers/ActionResolver.d.ts +19 -1
  191. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  192. package/dist/resolvers/ActionResolver.js +63 -12
  193. package/dist/resolvers/ActionResolver.js.map +1 -1
  194. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  195. package/dist/resolvers/AdhocQueryResolver.js +1 -0
  196. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  197. package/dist/resolvers/AgentRunStatusPublisher.d.ts +18 -4
  198. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
  199. package/dist/resolvers/AgentRunStatusPublisher.js +32 -8
  200. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
  201. package/dist/resolvers/AgentSessionResolver.d.ts +10 -4
  202. package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
  203. package/dist/resolvers/AgentSessionResolver.js +40 -17
  204. package/dist/resolvers/AgentSessionResolver.js.map +1 -1
  205. package/dist/resolvers/ArtifactFileResolver.d.ts +5 -1
  206. package/dist/resolvers/ArtifactFileResolver.d.ts.map +1 -1
  207. package/dist/resolvers/ArtifactFileResolver.js +9 -7
  208. package/dist/resolvers/ArtifactFileResolver.js.map +1 -1
  209. package/dist/resolvers/ConversationRunEventsResolver.d.ts +8 -4
  210. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
  211. package/dist/resolvers/ConversationRunEventsResolver.js +6 -6
  212. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
  213. package/dist/resolvers/DatasetResolver.d.ts +24 -3
  214. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  215. package/dist/resolvers/DatasetResolver.js +57 -8
  216. package/dist/resolvers/DatasetResolver.js.map +1 -1
  217. package/dist/resolvers/EntityCommunicationsResolver.d.ts +13 -1
  218. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  219. package/dist/resolvers/EntityCommunicationsResolver.js +50 -14
  220. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  221. package/dist/resolvers/EntityRecordNameResolver.d.ts +2 -1
  222. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  223. package/dist/resolvers/EntityRecordNameResolver.js +3 -2
  224. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  225. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +46 -3
  226. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  227. package/dist/resolvers/FetchEntityVectorsResolver.js +211 -50
  228. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  229. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  230. package/dist/resolvers/FileCategoryResolver.js +1 -0
  231. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  232. package/dist/resolvers/FileResolver.d.ts +87 -11
  233. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  234. package/dist/resolvers/FileResolver.js +292 -105
  235. package/dist/resolvers/FileResolver.js.map +1 -1
  236. package/dist/resolvers/GetDataContextDataResolver.d.ts +33 -7
  237. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  238. package/dist/resolvers/GetDataContextDataResolver.js +117 -38
  239. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  240. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  241. package/dist/resolvers/GetDataResolver.js +6 -3
  242. package/dist/resolvers/GetDataResolver.js.map +1 -1
  243. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  244. package/dist/resolvers/IntegrationDiscoveryResolver.js +49 -9
  245. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  246. package/dist/resolvers/MergeRecordsResolver.d.ts +8 -1
  247. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  248. package/dist/resolvers/MergeRecordsResolver.js +31 -3
  249. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  250. package/dist/resolvers/PipelineProgressResolver.d.ts +6 -0
  251. package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -1
  252. package/dist/resolvers/PipelineProgressResolver.js +5 -3
  253. package/dist/resolvers/PipelineProgressResolver.js.map +1 -1
  254. package/dist/resolvers/QueryResolver.d.ts +2 -0
  255. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  256. package/dist/resolvers/QueryResolver.js +33 -6
  257. package/dist/resolvers/QueryResolver.js.map +1 -1
  258. package/dist/resolvers/QuerySystemUserResolver.d.ts +2 -0
  259. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  260. package/dist/resolvers/QuerySystemUserResolver.js +15 -6
  261. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  262. package/dist/resolvers/RSUResolver.d.ts.map +1 -1
  263. package/dist/resolvers/RSUResolver.js +12 -0
  264. package/dist/resolvers/RSUResolver.js.map +1 -1
  265. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +18 -10
  266. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  267. package/dist/resolvers/RealtimeClientSessionResolver.js +92 -54
  268. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  269. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  270. package/dist/resolvers/RemoteBrowserActionResolver.js +11 -9
  271. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  272. package/dist/resolvers/RunAIAgentResolver.d.ts +56 -8
  273. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  274. package/dist/resolvers/RunAIAgentResolver.js +241 -67
  275. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  276. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  277. package/dist/resolvers/RunTemplateResolver.js +4 -4
  278. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  279. package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
  280. package/dist/resolvers/RunTestResolver.js +3 -1
  281. package/dist/resolvers/RunTestResolver.js.map +1 -1
  282. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts +12 -1
  283. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts.map +1 -1
  284. package/dist/resolvers/SearchKnowledgeStreamResolver.js +15 -2
  285. package/dist/resolvers/SearchKnowledgeStreamResolver.js.map +1 -1
  286. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  287. package/dist/resolvers/SqlLoggingConfigResolver.js +2 -3
  288. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  289. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  290. package/dist/resolvers/SyncDataResolver.js +4 -0
  291. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  292. package/dist/resolvers/TaskGraphFrameResolver.d.ts +2 -1
  293. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
  294. package/dist/resolvers/TaskGraphFrameResolver.js +28 -1
  295. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
  296. package/dist/resolvers/TestQuerySQLResolver.d.ts +24 -0
  297. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  298. package/dist/resolvers/TestQuerySQLResolver.js +66 -13
  299. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  300. package/dist/resolvers/TransactionGroupResolver.d.ts +34 -2
  301. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  302. package/dist/resolvers/TransactionGroupResolver.js +150 -27
  303. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  304. package/dist/resolvers/UserViewResolver.d.ts +1 -1
  305. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  306. package/dist/resolvers/UserViewResolver.js +2 -1
  307. package/dist/resolvers/UserViewResolver.js.map +1 -1
  308. package/dist/resolvers/agent-run-data-guard.d.ts +31 -0
  309. package/dist/resolvers/agent-run-data-guard.d.ts.map +1 -0
  310. package/dist/resolvers/agent-run-data-guard.js +72 -0
  311. package/dist/resolvers/agent-run-data-guard.js.map +1 -0
  312. package/dist/rest/EntityCRUDHandler.d.ts +6 -0
  313. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  314. package/dist/rest/EntityCRUDHandler.js +19 -5
  315. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  316. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  317. package/dist/rest/RESTEndpointHandler.js +8 -5
  318. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  319. package/dist/rest/RealtimeRecordingHandler.d.ts +49 -0
  320. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -0
  321. package/dist/rest/RealtimeRecordingHandler.js +383 -0
  322. package/dist/rest/RealtimeRecordingHandler.js.map +1 -0
  323. package/dist/rest/ViewOperationsHandler.d.ts +9 -1
  324. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  325. package/dist/rest/ViewOperationsHandler.js +43 -17
  326. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  327. package/dist/rest/setupRESTEndpoints.d.ts +6 -0
  328. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  329. package/dist/rest/setupRESTEndpoints.js +6 -0
  330. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  331. package/dist/serverExtensionReservedRoots.d.ts +12 -10
  332. package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
  333. package/dist/serverExtensionReservedRoots.js +14 -17
  334. package/dist/serverExtensionReservedRoots.js.map +1 -1
  335. package/dist/serverRoleConfigUnits.d.ts +29 -0
  336. package/dist/serverRoleConfigUnits.d.ts.map +1 -0
  337. package/dist/serverRoleConfigUnits.js +33 -0
  338. package/dist/serverRoleConfigUnits.js.map +1 -0
  339. package/dist/services/MJStorageBlobStore.d.ts +8 -1
  340. package/dist/services/MJStorageBlobStore.d.ts.map +1 -1
  341. package/dist/services/MJStorageBlobStore.js +25 -19
  342. package/dist/services/MJStorageBlobStore.js.map +1 -1
  343. package/dist/services/StartTaskGraphDispatcher.js +2 -2
  344. package/dist/services/StartTaskGraphDispatcher.js.map +1 -1
  345. package/dist/services/TaskGraphActionRunner.d.ts +5 -3
  346. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  347. package/dist/services/TaskGraphActionRunner.js +27 -5
  348. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  349. package/dist/services/TaskGraphAgentRunner.d.ts +14 -2
  350. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
  351. package/dist/services/TaskGraphAgentRunner.js +157 -9
  352. package/dist/services/TaskGraphAgentRunner.js.map +1 -1
  353. package/dist/services/TaskGraphContinuationDeliverer.d.ts +59 -2
  354. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  355. package/dist/services/TaskGraphContinuationDeliverer.js +626 -16
  356. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  357. package/dist/sharedCache.d.ts.map +1 -1
  358. package/dist/sharedCache.js +3 -0
  359. package/dist/sharedCache.js.map +1 -1
  360. package/dist/types.d.ts +23 -1
  361. package/dist/types.d.ts.map +1 -1
  362. package/dist/types.js.map +1 -1
  363. package/package.json +99 -98
  364. package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -0
  365. package/src/__tests__/AdhocQueryResolver.dialect.test.ts +137 -0
  366. package/src/__tests__/AgentRunStatusPublisher.test.ts +49 -0
  367. package/src/__tests__/AgentSessionResolver.ownership.test.ts +137 -0
  368. package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
  369. package/src/__tests__/DatasetResolver.itemFilters.test.ts +201 -0
  370. package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
  371. package/src/__tests__/EntityRecordNameResolver.rowSecurity.test.ts +152 -0
  372. package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
  373. package/src/__tests__/FetchEntityVectorsResolver.test.ts +369 -18
  374. package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
  375. package/src/__tests__/FileResolver.storageAccess.test.ts +562 -0
  376. package/src/__tests__/GetDataContextDataResolver.sqlItems.test.ts +416 -0
  377. package/src/__tests__/ListOperationsResolver.adhocScreen.test.ts +137 -0
  378. package/src/__tests__/LoginScreenEngine.test.ts +86 -0
  379. package/src/__tests__/MJStorageBlobStore.storageGate.test.ts +63 -0
  380. package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
  381. package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
  382. package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
  383. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
  384. package/src/__tests__/RealtimeClientSessionResolver.test.ts +324 -46
  385. package/src/__tests__/RecordingAssemblyScheduler.test.ts +178 -0
  386. package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +98 -0
  387. package/src/__tests__/ResolverBase.adhocReadScope.test.ts +133 -2
  388. package/src/__tests__/ResolverBase.balancedClause.test.ts +155 -0
  389. package/src/__tests__/ResolverBase.clauseUnscopedRead.test.ts +127 -0
  390. package/src/__tests__/ResolverBase.clientOldValues.test.ts +243 -7
  391. package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
  392. package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +176 -0
  393. package/src/__tests__/ResolverBase.filterEscaping.test.ts +5 -2
  394. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +23 -1
  395. package/src/__tests__/ResolverBase.publishStatusUpdate.test.ts +68 -0
  396. package/src/__tests__/ResolverBase.userViewCacheAndDedup.test.ts +130 -0
  397. package/src/__tests__/RunAIAgentResolver.branch.test.ts +69 -13
  398. package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
  399. package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
  400. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +20 -28
  401. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +264 -0
  402. package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
  403. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +4 -1
  404. package/src/__tests__/RunTemplateResolver.test.ts +35 -2
  405. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
  406. package/src/__tests__/RunViewResolver.cacheCheckScreen.test.ts +165 -0
  407. package/src/__tests__/SearchKnowledgeStreamResolver.test.ts +161 -0
  408. package/src/__tests__/SessionJanitor.test.ts +365 -10
  409. package/src/__tests__/SessionManager.test.ts +122 -0
  410. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +25 -0
  411. package/src/__tests__/TaskGraphAgentRunner.test.ts +266 -0
  412. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +468 -23
  413. package/src/__tests__/TaskGraphFrameResolver.test.ts +22 -0
  414. package/src/__tests__/TestQuerySQLResolver.test.ts +274 -0
  415. package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
  416. package/src/__tests__/TransactionGroupResolver.refusals.test.ts +98 -1
  417. package/src/__tests__/UpdateMJDataContextItem.oldValues.test.ts +220 -0
  418. package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
  419. package/src/__tests__/ViewOperationsHandler.clauseScreen.test.ts +157 -0
  420. package/src/__tests__/ViewOperationsHandler.test.ts +7 -2
  421. package/src/__tests__/WidgetSessionService.test.ts +583 -4
  422. package/src/__tests__/agent-run-data-guard.test.ts +130 -0
  423. package/src/__tests__/apiRootBoot.test.ts +202 -0
  424. package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
  425. package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
  426. package/src/__tests__/cacheInvalidationRecordData.test.ts +109 -0
  427. package/src/__tests__/conversationRunEvents.test.ts +56 -14
  428. package/src/__tests__/fieldSecurityFixtures.ts +91 -0
  429. package/src/__tests__/globalCors.test.ts +217 -0
  430. package/src/__tests__/localDevAuth.test.ts +196 -0
  431. package/src/__tests__/multiTenancy.postgresRewrite.test.ts +181 -0
  432. package/src/__tests__/multiTenancy.security.test.ts +51 -0
  433. package/src/__tests__/multiTenancy.test.ts +1 -1
  434. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
  435. package/src/__tests__/ownedRealtimeSession.test.ts +39 -0
  436. package/src/__tests__/pushStatusResolver.filter.test.ts +64 -1
  437. package/src/__tests__/realtimeRecordingHandler.test.ts +669 -0
  438. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +29 -1
  439. package/src/__tests__/realtimeSessions/ownedRealtimeSession.anonymous.test.ts +31 -0
  440. package/src/__tests__/realtimeSessions/ownedRealtimeSession.namedScoped.test.ts +37 -0
  441. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +146 -7
  442. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
  443. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
  444. package/src/__tests__/resolverBase.cloudEventChangedFields.test.ts +157 -0
  445. package/src/__tests__/resolverBase.fieldSecurityTransport.test.ts +222 -0
  446. package/src/__tests__/resolverBase.fls.test.ts +146 -97
  447. package/src/__tests__/restTransport.fieldSecurity.test.ts +148 -0
  448. package/src/__tests__/runParamsTimeZone.test.ts +179 -0
  449. package/src/__tests__/runStreams.fieldSecurity.test.ts +100 -0
  450. package/src/__tests__/runViewProperties.test.ts +114 -0
  451. package/src/__tests__/scalabilityBenchmarks.test.ts +765 -0
  452. package/src/__tests__/scalabilityDatabaseIntegration.test.ts +207 -0
  453. package/src/__tests__/serverExtensionHostOverlay.test.ts +66 -0
  454. package/src/__tests__/serverExtensionReservedRoots.test.ts +11 -98
  455. package/src/__tests__/sessionUserClone.test.ts +5 -1
  456. package/src/__tests__/sharedCache.test.ts +5 -3
  457. package/src/__tests__/startupSweepOrder.test.ts +40 -0
  458. package/src/__tests__/unifiedAuth.test.ts +28 -0
  459. package/src/__tests__/widgetGuestElevation.test.ts +2 -0
  460. package/src/agentSessions/SessionJanitor.ts +369 -93
  461. package/src/agentSessions/SessionManager.ts +45 -10
  462. package/src/apiRoot.ts +78 -0
  463. package/src/auth/AuthProviderCatalogRouter.ts +29 -0
  464. package/src/auth/LoginScreenEngine.ts +50 -0
  465. package/src/auth/index.ts +57 -12
  466. package/src/auth/initializeProviders.ts +43 -1
  467. package/src/auth/localDevAuth.ts +528 -0
  468. package/src/auth/magicLink/MagicLinkKeys.ts +2 -2
  469. package/src/auth/magicLink/MagicLinkRouter.ts +3 -2
  470. package/src/auth/magicLink/types.ts +10 -0
  471. package/src/auth/sessionUserClone.ts +3 -2
  472. package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +674 -0
  473. package/src/broadcast/index.ts +5 -0
  474. package/src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts +180 -0
  475. package/src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts +182 -0
  476. package/src/broadcast/providers/GCPPubSubBroadcastProvider.ts +169 -0
  477. package/src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts +57 -0
  478. package/src/cache.ts +2 -1
  479. package/src/config.ts +115 -5
  480. package/src/context.ts +32 -8
  481. package/src/coreRoutes.ts +181 -0
  482. package/src/generated/graphql-schemas/__mj.ts +3684 -284
  483. package/src/generic/CacheInvalidationResolver.ts +172 -60
  484. package/src/generic/OrphanedConversationDetailReconciler.ts +4 -2
  485. package/src/generic/PubSubManager.ts +54 -1
  486. package/src/generic/PushStatusResolver.ts +109 -12
  487. package/src/generic/ResolverBase.ts +540 -431
  488. package/src/generic/RunViewResolver.ts +97 -15
  489. package/src/generic/actionOutputFieldSecurity.ts +75 -0
  490. package/src/generic/fieldSecurityTransport.ts +62 -0
  491. package/src/globalCors.ts +71 -0
  492. package/src/index.ts +239 -238
  493. package/src/integration/CustomColumnPromoter.ts +6 -1
  494. package/src/logging/variablesLoggingMiddleware.ts +59 -3
  495. package/src/multiTenancy/index.ts +24 -2
  496. package/src/realtimeSessions/README.md +7 -3
  497. package/src/realtimeSessions/RealtimeSessionVerificationService.ts +2 -1
  498. package/src/realtimeSessions/RealtimeVerifyRouter.ts +2 -1
  499. package/src/realtimeSessions/RecordingAssemblyScheduler.ts +234 -0
  500. package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
  501. package/src/realtimeSessions/index.ts +2 -0
  502. package/src/realtimeSessions/ownedRealtimeSession.ts +69 -0
  503. package/src/realtimeSessions/sessionAccess.ts +183 -23
  504. package/src/realtimeSessions/sessionConfigStamps.ts +1 -1
  505. package/src/realtimeSessions/subscriptionAuthorization.ts +4 -2
  506. package/src/realtimeSessions/verificationWorkflow.ts +3 -1
  507. package/src/realtimeWidget/WidgetRouter.ts +22 -4
  508. package/src/realtimeWidget/WidgetSessionService.ts +252 -17
  509. package/src/realtimeWidget/host-identity.ts +1 -1
  510. package/src/realtimeWidget/widgetCore.ts +30 -1
  511. package/src/realtimeWidget/widgetGuestElevation.ts +2 -1
  512. package/src/resolvers/ActionResolver.ts +78 -15
  513. package/src/resolvers/AdhocQueryResolver.ts +1 -0
  514. package/src/resolvers/AgentRunStatusPublisher.ts +36 -8
  515. package/src/resolvers/AgentSessionResolver.ts +46 -18
  516. package/src/resolvers/ArtifactFileResolver.ts +9 -8
  517. package/src/resolvers/ConversationRunEventsResolver.ts +15 -11
  518. package/src/resolvers/DatasetResolver.ts +70 -10
  519. package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
  520. package/src/resolvers/EntityRecordNameResolver.ts +3 -2
  521. package/src/resolvers/FetchEntityVectorsResolver.ts +248 -55
  522. package/src/resolvers/FileCategoryResolver.ts +1 -0
  523. package/src/resolvers/FileResolver.ts +334 -109
  524. package/src/resolvers/GetDataContextDataResolver.ts +139 -41
  525. package/src/resolvers/GetDataResolver.ts +6 -3
  526. package/src/resolvers/IntegrationDiscoveryResolver.ts +53 -9
  527. package/src/resolvers/MergeRecordsResolver.ts +23 -2
  528. package/src/resolvers/PipelineProgressResolver.ts +12 -3
  529. package/src/resolvers/QueryResolver.ts +31 -6
  530. package/src/resolvers/QuerySystemUserResolver.ts +15 -6
  531. package/src/resolvers/RSUResolver.ts +12 -0
  532. package/src/resolvers/RealtimeClientSessionResolver.ts +114 -66
  533. package/src/resolvers/RemoteBrowserActionResolver.ts +15 -10
  534. package/src/resolvers/RunAIAgentResolver.ts +296 -85
  535. package/src/resolvers/RunTemplateResolver.ts +6 -4
  536. package/src/resolvers/RunTestResolver.ts +3 -1
  537. package/src/resolvers/SearchKnowledgeStreamResolver.ts +19 -3
  538. package/src/resolvers/SqlLoggingConfigResolver.ts +2 -4
  539. package/src/resolvers/SyncDataResolver.ts +4 -0
  540. package/src/resolvers/TaskGraphFrameResolver.ts +33 -1
  541. package/src/resolvers/TestQuerySQLResolver.ts +69 -13
  542. package/src/resolvers/TransactionGroupResolver.ts +185 -30
  543. package/src/resolvers/UserViewResolver.ts +2 -1
  544. package/src/resolvers/__tests__/GetDataResolver.validation.test.ts +95 -0
  545. package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
  546. package/src/resolvers/agent-run-data-guard.ts +89 -0
  547. package/src/rest/EntityCRUDHandler.ts +22 -5
  548. package/src/rest/RESTEndpointHandler.ts +8 -5
  549. package/src/rest/RealtimeRecordingHandler.ts +467 -0
  550. package/src/rest/ViewOperationsHandler.ts +52 -18
  551. package/src/rest/setupRESTEndpoints.ts +6 -0
  552. package/src/serverExtensionReservedRoots.ts +14 -17
  553. package/src/serverRoleConfigUnits.ts +48 -0
  554. package/src/services/MJStorageBlobStore.ts +31 -30
  555. package/src/services/StartTaskGraphDispatcher.ts +2 -2
  556. package/src/services/TaskGraphActionRunner.ts +25 -5
  557. package/src/services/TaskGraphAgentRunner.ts +188 -11
  558. package/src/services/TaskGraphContinuationDeliverer.ts +738 -16
  559. package/src/sharedCache.ts +3 -0
  560. package/src/types.ts +23 -1
@@ -1,6 +1,6 @@
1
1
  import { Resolver, Query, Arg, Ctx, ObjectType, Field, Float, Int } from 'type-graphql';
2
2
  import { AppContext } from '../types.js';
3
- import { CompositeKey, EntityInfo, IMetadataProvider, LogError, LogStatus, Metadata, RunView, UserInfo } from '@memberjunction/core';
3
+ import { CompositeKey, EntityInfo, IMetadataProvider, LogError, LogStatus, Metadata, RunView, RunViewParams, UserInfo } from '@memberjunction/core';
4
4
  import { MJEntityDocumentEntity, MJVectorIndexEntity, MJVectorDatabaseEntity } from '@memberjunction/core-entities';
5
5
  import { ResolverBase } from '../generic/ResolverBase.js';
6
6
  import { GetReadOnlyProvider } from '../util.js';
@@ -41,6 +41,21 @@ export class FetchEntityVectorsResult {
41
41
  ErrorMessage?: string;
42
42
  }
43
43
 
44
+ /** A stored vector's listing row, as `fetchStoredVectors` reads it from `MJ: Entity Record Documents`. */
45
+ type StoredVectorRow = { ID: string; RecordID: string };
46
+
47
+ /** A stored vector chosen for the result, with the labels of the record it belongs to. */
48
+ type LabelledVector = { row: StoredVectorRow; labels: Record<string, string> };
49
+
50
+ /** Most Entity Record Document IDs named in one `ID IN (...)` filter when fetching VectorJSON. */
51
+ const VECTOR_FETCH_CHUNK_SIZE = 1000;
52
+
53
+ /** Most record keys named in one view when checking which matched records the caller may read. */
54
+ const READABLE_KEY_CHECK_CHUNK_SIZE = 1000;
55
+
56
+ /** A match returned by an external vector index's `QueryIndex`. */
57
+ type IndexMatch = { id: string; values?: number[]; metadata?: Record<string, unknown>; score?: number };
58
+
44
59
  /* ───── Resolver ───── */
45
60
 
46
61
  @Resolver()
@@ -61,15 +76,18 @@ export class FetchEntityVectorsResolver extends ResolverBase {
61
76
  }
62
77
 
63
78
  const limit = maxRecords ?? 1000;
79
+ // Every read runs on this request's provider.
80
+ const md = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true }) ?? Metadata.Provider;
81
+ const rv = RunView.FromMetadataProvider(md);
64
82
 
65
83
  // Step 1: Load the EntityDocument
66
- const entityDoc = await this.loadEntityDocument(entityDocumentID, currentUser);
84
+ const entityDoc = await this.loadEntityDocument(entityDocumentID, currentUser, rv);
67
85
  if (!entityDoc) {
68
86
  return this.errorResult(`EntityDocument not found: ${entityDocumentID}`, startTime);
69
87
  }
70
88
 
71
89
  // Step 2: Resolve the VectorIndex
72
- const vectorIndex = await this.resolveVectorIndex(entityDoc, currentUser);
90
+ const vectorIndex = await this.resolveVectorIndex(entityDoc, currentUser, rv);
73
91
  if (!vectorIndex) {
74
92
  return this.errorResult(
75
93
  `Could not resolve VectorIndex for EntityDocument "${entityDoc.Name}"`,
@@ -78,7 +96,7 @@ export class FetchEntityVectorsResolver extends ResolverBase {
78
96
  }
79
97
 
80
98
  // Step 3: Create VectorDB provider instance
81
- const vectorDBInstance = await this.createVectorDBInstance(vectorIndex, currentUser);
99
+ const vectorDBInstance = await this.createVectorDBInstance(vectorIndex, currentUser, rv);
82
100
  if (!vectorDBInstance) {
83
101
  return this.errorResult(
84
102
  `Could not create VectorDB provider for index "${vectorIndex.Name}"`,
@@ -88,15 +106,24 @@ export class FetchEntityVectorsResolver extends ResolverBase {
88
106
 
89
107
  // Providers that keep their vectors in MJ, keyed by EntityDocumentID (the in-process
90
108
  // SimpleVectorServiceProvider), can't be listed through QueryIndex: they key by the
91
- // document ID rather than the index name, aren't handed the context user, and return
92
- // matches without vector values. Read the stored Entity Record Document rows instead.
109
+ // document ID rather than the index name, and return matches without vector values.
110
+ // Read the stored Entity Record Document rows instead.
93
111
  if (vectorDBInstance.QueryKeyIsEntityDocumentID) {
94
- const md = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true }) ?? Metadata.Provider;
95
- const results = await this.fetchStoredVectors(entityDoc, limit, filter, currentUser, md);
112
+ const results = await this.fetchStoredVectors(entityDoc, limit, filter, currentUser, md, rv);
96
113
  LogStatus(`FetchEntityVectors: Loaded ${results.length} stored vectors for entity "${entityDoc.Entity}" in ${Date.now() - startTime}ms`);
97
114
  return { Success: true, Results: results, TotalCount: results.length, ElapsedMs: Date.now() - startTime };
98
115
  }
99
116
 
117
+ // The external index was built under whoever ran the sync and is not filtered for this
118
+ // caller, so check here that they may read the source entity at all.
119
+ const entityInfo = this.readableEntity(entityDoc.Entity, currentUser, md);
120
+ if (!entityInfo) {
121
+ return this.errorResult(
122
+ `Entity "${entityDoc.Entity}" does not exist or you do not have permission to read it`,
123
+ startTime
124
+ );
125
+ }
126
+
100
127
  // Step 4: Query with zero vector + Entity metadata filter.
101
128
  // Pinecone's list API doesn't support metadata filtering, but query does.
102
129
  // A zero vector returns results in arbitrary order (similarity is meaningless),
@@ -127,12 +154,15 @@ export class FetchEntityVectorsResolver extends ResolverBase {
127
154
  );
128
155
  }
129
156
 
130
- // Step 5: Convert query matches to result format
131
- const matches = (queryResponse.data as { matches?: Array<{ id: string; values?: number[]; metadata?: Record<string, unknown>; score?: number }> }).matches ?? [];
157
+ // Step 5: Keep only matches for records this caller may read (the index is not filtered
158
+ // by row-level security), then convert them without the fields this caller may not read
159
+ const allMatches = (queryResponse.data as { matches?: IndexMatch[] }).matches ?? [];
160
+ const matches = await this.readableMatches(entityInfo, allMatches, currentUser, rv);
161
+ const denied = entityInfo.GetDeniedReadFields(currentUser);
132
162
  const results: EntityVectorItem[] = matches.map(match => ({
133
163
  ID: match.id,
134
164
  Values: match.values ?? [],
135
- Metadata: JSON.stringify(match.metadata ?? {}),
165
+ Metadata: JSON.stringify(this.withoutDeniedFields(match.metadata ?? {}, denied)),
136
166
  }));
137
167
  LogStatus(`FetchEntityVectors: Queried ${results.length} vectors for entity "${entityName}" in ${Date.now() - startTime}ms`);
138
168
 
@@ -149,12 +179,100 @@ export class FetchEntityVectorsResolver extends ResolverBase {
149
179
  }
150
180
  }
151
181
 
182
+ /**
183
+ * The entity's metadata when `contextUser` may read it, else null — whether it is missing or
184
+ * unreadable is deliberately not distinguished.
185
+ */
186
+ private readableEntity(entityName: string, contextUser: UserInfo, md: IMetadataProvider): EntityInfo | null {
187
+ const entityInfo = md.EntityByName(entityName);
188
+ if (!entityInfo) return null;
189
+ return entityInfo.GetUserPermisions(contextUser)?.CanRead ? entityInfo : null;
190
+ }
191
+
192
+ /**
193
+ * The matches whose record `contextUser` may read, in their original order. A match is kept only
194
+ * when its `RecordID` metadata names a key of the entity and a view run as `contextUser` returns
195
+ * that record; a match without a usable record ID cannot be checked, so it is dropped.
196
+ */
197
+ private async readableMatches(entityInfo: EntityInfo, matches: IndexMatch[], contextUser: UserInfo, rv: RunView): Promise<IndexMatch[]> {
198
+ const keyed = matches
199
+ .map(match => ({ match, key: this.matchRecordKey(entityInfo, match) }))
200
+ .filter((m): m is { match: IndexMatch; key: CompositeKey } => m.key !== null);
201
+ if (keyed.length === 0) return [];
202
+ const readable = await this.loadReadableKeys(entityInfo, keyed.map(k => k.key), contextUser, rv);
203
+ return keyed.filter(k => readable.has(this.canonicalKey(k.key))).map(k => k.match);
204
+ }
205
+
206
+ /** The record key a match's `RecordID` metadata names, or null when it names no key of the entity. */
207
+ private matchRecordKey(entityInfo: EntityInfo, match: IndexMatch): CompositeKey | null {
208
+ const recordID = match.metadata?.RecordID;
209
+ if (typeof recordID !== 'string' || recordID.length === 0) return null;
210
+ try {
211
+ return CompositeKey.FromRecordID(entityInfo, recordID);
212
+ } catch {
213
+ return null; // field names that are not the entity's primary key: never put into SQL
214
+ }
215
+ }
216
+
217
+ /**
218
+ * The canonical forms of the keys among `keys` whose record a view run as `contextUser` returns.
219
+ * The keys are checked in lists of at most {@link READABLE_KEY_CHECK_CHUNK_SIZE}, all sent in one
220
+ * `RunViews` batch.
221
+ */
222
+ private async loadReadableKeys(entityInfo: EntityInfo, keys: CompositeKey[], contextUser: UserInfo, rv: RunView): Promise<Set<string>> {
223
+ const views: RunViewParams[] = [];
224
+ for (let i = 0; i < keys.length; i += READABLE_KEY_CHECK_CHUNK_SIZE) {
225
+ views.push({
226
+ EntityName: entityInfo.Name,
227
+ ExtraFilter: this.keyFilter(entityInfo, keys.slice(i, i + READABLE_KEY_CHECK_CHUNK_SIZE)),
228
+ Fields: entityInfo.PrimaryKeys.map(pk => pk.Name),
229
+ IgnoreMaxRows: true,
230
+ BypassCache: true, // one-off key lists: a cache slot per call would only hold memory
231
+ ResultType: 'simple',
232
+ });
233
+ }
234
+ const readable = new Set<string>();
235
+ const results = await rv.RunViews<Record<string, unknown>>(views, contextUser);
236
+ for (const result of results) {
237
+ if (!result.Success) {
238
+ throw new Error(`Failed to check access to "${entityInfo.Name}" records: ${result.ErrorMessage}`);
239
+ }
240
+ for (const row of result.Results) {
241
+ readable.add(this.canonicalKey(CompositeKey.FromEntityRecord(entityInfo, row)));
242
+ }
243
+ }
244
+ return readable;
245
+ }
246
+
247
+ /** A filter matching exactly `keys`: `PK IN (...)` for a single-column key, one clause per key otherwise. */
248
+ private keyFilter(entityInfo: EntityInfo, keys: CompositeKey[]): string {
249
+ if (entityInfo.PrimaryKeys.length === 1) {
250
+ const values = keys.map(k => `'${EscapeSQLString(String(k.KeyValuePairs[0].Value))}'`).join(',');
251
+ return `${entityInfo.FirstPrimaryKey.Name} IN (${values})`; // first-pk-ok: single-column key, checked above
252
+ }
253
+ return keys.map(k => `(${k.ToWhereClause()})`).join(' OR ');
254
+ }
255
+
256
+ /** A key's field names and values, lower-cased, so keys from the index and from a view compare equal. */
257
+ private canonicalKey(key: CompositeKey): string {
258
+ return key.KeyValuePairs.map(kv => `${kv.FieldName.toLowerCase()}|${String(kv.Value).toLowerCase()}`).join('||');
259
+ }
260
+
261
+ /**
262
+ * A copy of a vector's metadata without the keys naming fields in `denied` (lowercased field
263
+ * names, as `EntityInfo.GetDeniedReadFields` returns them), compared case-insensitively.
264
+ */
265
+ private withoutDeniedFields(metadata: Record<string, unknown>, denied: Set<string>): Record<string, unknown> {
266
+ if (denied.size === 0) return metadata;
267
+ return Object.fromEntries(Object.entries(metadata).filter(([key]) => !denied.has(key.toLowerCase())));
268
+ }
269
+
152
270
  /** Load EntityDocument by ID */
153
271
  private async loadEntityDocument(
154
272
  entityDocumentID: string,
155
- contextUser: UserInfo
273
+ contextUser: UserInfo,
274
+ rv: RunView
156
275
  ): Promise<MJEntityDocumentEntity | null> {
157
- const rv = new RunView();
158
276
  const result = await rv.RunView<MJEntityDocumentEntity>({
159
277
  EntityName: 'MJ: Entity Documents',
160
278
  ExtraFilter: `ID='${EscapeSQLString(entityDocumentID)}'`,
@@ -174,9 +292,9 @@ export class FetchEntityVectorsResolver extends ResolverBase {
174
292
  */
175
293
  private async resolveVectorIndex(
176
294
  entityDoc: MJEntityDocumentEntity,
177
- contextUser: UserInfo
295
+ contextUser: UserInfo,
296
+ rv: RunView
178
297
  ): Promise<MJVectorIndexEntity | null> {
179
- const rv = new RunView();
180
298
 
181
299
  // If the EntityDocument has an explicit VectorIndexID, use it directly
182
300
  if (entityDoc.VectorIndexID) {
@@ -213,9 +331,9 @@ export class FetchEntityVectorsResolver extends ResolverBase {
213
331
  /** Create a VectorDBBase provider instance for a given VectorIndex */
214
332
  private async createVectorDBInstance(
215
333
  vectorIndex: MJVectorIndexEntity,
216
- contextUser: UserInfo
334
+ contextUser: UserInfo,
335
+ rv: RunView
217
336
  ): Promise<VectorDBBase | null> {
218
- const rv = new RunView();
219
337
  const dbResult = await rv.RunView<MJVectorDatabaseEntity>({
220
338
  EntityName: 'MJ: Vector Databases',
221
339
  ExtraFilter: `ID='${vectorIndex.VectorDatabaseID}'`,
@@ -249,69 +367,144 @@ export class FetchEntityVectorsResolver extends ResolverBase {
249
367
  limit: number,
250
368
  filter: string | undefined,
251
369
  contextUser: UserInfo,
252
- md: IMetadataProvider
370
+ md: IMetadataProvider,
371
+ rv: RunView
253
372
  ): Promise<EntityVectorItem[]> {
254
373
  const entityInfo = md.EntityByName(entityDoc.Entity);
255
374
  if (!entityInfo) {
256
375
  throw new Error(`Entity "${entityDoc.Entity}" not found in metadata`);
257
376
  }
258
- const labelsByRecordID = await this.loadRecordLabels(entityInfo, filter, contextUser);
259
-
260
- const rv = new RunView();
261
- const docResult = await rv.RunView<{ ID: string; RecordID: string; VectorJSON: string }>({
262
- EntityName: 'MJ: Entity Record Documents',
263
- ExtraFilter: `EntityDocumentID='${EscapeSQLString(entityDoc.ID)}' AND VectorJSON IS NOT NULL`,
264
- Fields: ['ID', 'RecordID', 'VectorJSON'],
265
- IgnoreMaxRows: true,
266
- ResultType: 'simple',
267
- }, contextUser);
268
- if (!docResult.Success) {
269
- throw new Error(`Failed to load stored vectors: ${docResult.ErrorMessage}`);
270
- }
377
+ const nameFields = this.labelFieldNames(entityInfo);
378
+ const { records, vectors } = await this.loadRecordsAndStoredVectors(entityInfo, entityDoc, nameFields, filter, contextUser, rv);
379
+ const labelsByRecordID = this.mapRecordLabels(entityInfo, nameFields, records);
380
+
381
+ // VectorJSON is the heavy column: list without it, then fetch it only for the items returned.
382
+ const chosen = this.selectLabelledVectors(vectors, labelsByRecordID, limit);
383
+ const valuesByID = await this.loadVectorValues(chosen.map(c => c.row.ID), contextUser, rv);
271
384
 
272
385
  const results: EntityVectorItem[] = [];
273
- for (const row of docResult.Results) {
274
- const labels = labelsByRecordID.get(row.RecordID.toLowerCase());
275
- if (!labels) continue; // filtered out, not readable by this user, or the record no longer exists
386
+ for (const { row, labels } of chosen) {
387
+ const vectorJSON = valuesByID.get(row.ID);
388
+ if (!vectorJSON) continue; // removed or cleared since the listing
276
389
  results.push({
277
390
  ID: row.ID,
278
- Values: JSON.parse(row.VectorJSON) as number[],
391
+ Values: JSON.parse(vectorJSON) as number[],
279
392
  Metadata: JSON.stringify({ Entity: entityDoc.Entity, RecordID: row.RecordID, ...labels }),
280
393
  });
281
- if (results.length >= limit) break;
282
394
  }
283
395
  return results;
284
396
  }
285
397
 
398
+ /** The first `limit` stored vectors whose record was loaded, in listing order. */
399
+ private selectLabelledVectors(
400
+ vectors: StoredVectorRow[],
401
+ labelsByRecordID: Map<string, Record<string, string>>,
402
+ limit: number
403
+ ): LabelledVector[] {
404
+ const chosen: LabelledVector[] = [];
405
+ for (const row of vectors) {
406
+ if (chosen.length >= limit) break;
407
+ const labels = labelsByRecordID.get(row.RecordID.toLowerCase());
408
+ if (!labels) continue; // filtered out, not readable by this user, or the record no longer exists
409
+ chosen.push({ row, labels });
410
+ }
411
+ return chosen;
412
+ }
413
+
286
414
  /**
287
- * Map each record that passes `filter` to its name-field values, keyed by the same compact
288
- * record-ID form the vector sync writes to `MJ: Entity Record Documents.RecordID` (lower-cased).
415
+ * Fetch `VectorJSON` for the given Entity Record Document IDs, keyed by ID. The ID lists are
416
+ * capped at {@link VECTOR_FETCH_CHUNK_SIZE} per view and all sent in one `RunViews` batch.
289
417
  */
290
- private async loadRecordLabels(
291
- entityInfo: EntityInfo,
292
- filter: string | undefined,
293
- contextUser: UserInfo
294
- ): Promise<Map<string, Record<string, string>>> {
418
+ private async loadVectorValues(ids: string[], contextUser: UserInfo, rv: RunView): Promise<Map<string, string>> {
419
+ const valuesByID = new Map<string, string>();
420
+ if (ids.length === 0) return valuesByID;
421
+
422
+ const views: RunViewParams[] = [];
423
+ for (let i = 0; i < ids.length; i += VECTOR_FETCH_CHUNK_SIZE) {
424
+ const idList = ids.slice(i, i + VECTOR_FETCH_CHUNK_SIZE).map(id => `'${EscapeSQLString(id)}'`).join(',');
425
+ views.push({
426
+ EntityName: 'MJ: Entity Record Documents',
427
+ ExtraFilter: `ID IN (${idList})`,
428
+ Fields: ['ID', 'VectorJSON'],
429
+ IgnoreMaxRows: true,
430
+ BypassCache: true, // one-off ID lists: a cache slot per call would only hold memory
431
+ ResultType: 'simple',
432
+ });
433
+ }
434
+ const results = await rv.RunViews<{ ID: string; VectorJSON: string | null }>(views, contextUser);
435
+ for (const result of results) {
436
+ if (!result.Success) {
437
+ throw new Error(`Failed to load vector values: ${result.ErrorMessage}`);
438
+ }
439
+ for (const row of result.Results) {
440
+ if (row.VectorJSON) valuesByID.set(row.ID, row.VectorJSON);
441
+ }
442
+ }
443
+ return valuesByID;
444
+ }
445
+
446
+ /** The fields a stored vector is labelled with: the entity's name fields, else its NameField. */
447
+ private labelFieldNames(entityInfo: EntityInfo): string[] {
295
448
  const nameFields = entityInfo.Fields.filter(f => f.IsNameField).map(f => f.Name);
296
449
  if (nameFields.length === 0 && entityInfo.NameField) {
297
450
  nameFields.push(entityInfo.NameField.Name);
298
451
  }
299
- const keyFields = entityInfo.PrimaryKeys.map(pk => pk.Name);
452
+ return nameFields;
453
+ }
300
454
 
301
- const rv = new RunView();
302
- const result = await rv.RunView<Record<string, unknown>>({
303
- EntityName: entityInfo.Name,
304
- ExtraFilter: filter || undefined,
305
- Fields: [...new Set([...keyFields, ...nameFields])],
306
- IgnoreMaxRows: true,
307
- ResultType: 'simple',
308
- }, contextUser);
309
- if (!result.Success) {
310
- throw new Error(`Failed to load "${entityInfo.Name}" records: ${result.ErrorMessage}`);
455
+ /**
456
+ * Load the records that pass `filter` (key and name fields only) and the list of the document's
457
+ * stored vectors (ID and RecordID, no VectorJSON). The two views don't depend on each other, so
458
+ * they go in one `RunViews` round trip.
459
+ */
460
+ private async loadRecordsAndStoredVectors(
461
+ entityInfo: EntityInfo,
462
+ entityDoc: MJEntityDocumentEntity,
463
+ nameFields: string[],
464
+ filter: string | undefined,
465
+ contextUser: UserInfo,
466
+ rv: RunView
467
+ ): Promise<{ records: Record<string, unknown>[]; vectors: StoredVectorRow[] }> {
468
+ const keyFields = entityInfo.PrimaryKeys.map(pk => pk.Name);
469
+ const [recordResult, docResult] = await rv.RunViews<Record<string, unknown>>([
470
+ {
471
+ EntityName: entityInfo.Name,
472
+ ExtraFilter: filter || undefined,
473
+ Fields: [...new Set([...keyFields, ...nameFields])],
474
+ IgnoreMaxRows: true,
475
+ ResultType: 'simple',
476
+ },
477
+ {
478
+ EntityName: 'MJ: Entity Record Documents',
479
+ ExtraFilter: `EntityDocumentID='${EscapeSQLString(entityDoc.ID)}' AND VectorJSON IS NOT NULL`,
480
+ Fields: ['ID', 'RecordID'],
481
+ IgnoreMaxRows: true,
482
+ // A cached RunView fetches every column so its slot can serve any field set, which
483
+ // would pull each vector's VectorJSON here. Bypass the cache so Fields is honoured.
484
+ BypassCache: true,
485
+ ResultType: 'simple',
486
+ },
487
+ ], contextUser);
488
+ if (!recordResult.Success) {
489
+ throw new Error(`Failed to load "${entityInfo.Name}" records: ${recordResult.ErrorMessage}`);
490
+ }
491
+ if (!docResult.Success) {
492
+ throw new Error(`Failed to load stored vectors: ${docResult.ErrorMessage}`);
311
493
  }
494
+ return { records: recordResult.Results, vectors: docResult.Results as StoredVectorRow[] };
495
+ }
312
496
 
497
+ /**
498
+ * Map each loaded record to its name-field values, keyed by the same compact record-ID form
499
+ * the vector sync writes to `MJ: Entity Record Documents.RecordID` (lower-cased).
500
+ */
501
+ private mapRecordLabels(
502
+ entityInfo: EntityInfo,
503
+ nameFields: string[],
504
+ rows: Record<string, unknown>[]
505
+ ): Map<string, Record<string, string>> {
313
506
  const map = new Map<string, Record<string, string>>();
314
- for (const row of result.Results) {
507
+ for (const row of rows) {
315
508
  const key = CompositeKey.FromEntityRecord(entityInfo, row).ToCompactURLSegment().toLowerCase();
316
509
  const labels: Record<string, string> = {};
317
510
  for (const name of nameFields) {
@@ -34,6 +34,7 @@ export class FileCategoryResolver extends FileCategoryResolverBase {
34
34
  fileCategoryEntity.CheckPermissions(EntityPermissionType.Delete, true);
35
35
 
36
36
  await fileCategoryEntity.Load(ID);
37
+ // fls-guard: loaded as the caller; width follows its user
37
38
  const returnValue = fileCategoryEntity.GetAll();
38
39
 
39
40
  // Any files using the deleted category fall back to its parent