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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (664) hide show
  1. package/README.md +96 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/BridgeHostInstance.d.ts +8 -3
  4. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -1
  5. package/dist/agentSessions/BridgeHostInstance.js +14 -4
  6. package/dist/agentSessions/BridgeHostInstance.js.map +1 -1
  7. package/dist/agentSessions/HandoffOfferExpiry.d.ts +10 -0
  8. package/dist/agentSessions/HandoffOfferExpiry.d.ts.map +1 -0
  9. package/dist/agentSessions/HandoffOfferExpiry.js +18 -0
  10. package/dist/agentSessions/HandoffOfferExpiry.js.map +1 -0
  11. package/dist/agentSessions/ReturningVisitorRecap.js +1 -0
  12. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  13. package/dist/agentSessions/SessionJanitor.d.ts +34 -11
  14. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  15. package/dist/agentSessions/SessionJanitor.js +88 -44
  16. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  17. package/dist/agentSessions/SessionManager.d.ts +29 -9
  18. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  19. package/dist/agentSessions/SessionManager.js +62 -16
  20. package/dist/agentSessions/SessionManager.js.map +1 -1
  21. package/dist/agentSessions/conversationBrowsers.d.ts +61 -0
  22. package/dist/agentSessions/conversationBrowsers.d.ts.map +1 -0
  23. package/dist/agentSessions/conversationBrowsers.js +118 -0
  24. package/dist/agentSessions/conversationBrowsers.js.map +1 -0
  25. package/dist/agentSessions/sessionDeadline.d.ts +43 -0
  26. package/dist/agentSessions/sessionDeadline.d.ts.map +1 -0
  27. package/dist/agentSessions/sessionDeadline.js +68 -0
  28. package/dist/agentSessions/sessionDeadline.js.map +1 -0
  29. package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
  30. package/dist/auth/APIKeyScopeAuth.js +5 -4
  31. package/dist/auth/APIKeyScopeAuth.js.map +1 -1
  32. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  33. package/dist/auth/AuthProviderCatalogRouter.js +2 -0
  34. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  35. package/dist/auth/index.d.ts.map +1 -1
  36. package/dist/auth/index.js +51 -10
  37. package/dist/auth/index.js.map +1 -1
  38. package/dist/auth/initializeProviders.d.ts +10 -0
  39. package/dist/auth/initializeProviders.d.ts.map +1 -1
  40. package/dist/auth/initializeProviders.js +37 -1
  41. package/dist/auth/initializeProviders.js.map +1 -1
  42. package/dist/auth/localDevAuth.d.ts +79 -0
  43. package/dist/auth/localDevAuth.d.ts.map +1 -0
  44. package/dist/auth/localDevAuth.js +439 -0
  45. package/dist/auth/localDevAuth.js.map +1 -0
  46. package/dist/auth/loginEmailResolution.d.ts +41 -0
  47. package/dist/auth/loginEmailResolution.d.ts.map +1 -0
  48. package/dist/auth/loginEmailResolution.js +47 -0
  49. package/dist/auth/loginEmailResolution.js.map +1 -0
  50. package/dist/auth/magicLink/MagicLinkKeys.d.ts +51 -3
  51. package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
  52. package/dist/auth/magicLink/MagicLinkKeys.js +130 -13
  53. package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
  54. package/dist/auth/magicLink/MagicLinkRouter.d.ts +3 -0
  55. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  56. package/dist/auth/magicLink/MagicLinkRouter.js +23 -5
  57. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  58. package/dist/auth/magicLink/MagicLinkService.d.ts +39 -5
  59. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  60. package/dist/auth/magicLink/MagicLinkService.js +221 -9
  61. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  62. package/dist/auth/magicLink/index.d.ts +1 -1
  63. package/dist/auth/magicLink/index.d.ts.map +1 -1
  64. package/dist/auth/magicLink/index.js +1 -1
  65. package/dist/auth/magicLink/index.js.map +1 -1
  66. package/dist/auth/magicLink/redeemLanding.d.ts +2 -2
  67. package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
  68. package/dist/auth/magicLink/redeemLanding.js +7 -4
  69. package/dist/auth/magicLink/redeemLanding.js.map +1 -1
  70. package/dist/auth/magicLink/types.d.ts +39 -3
  71. package/dist/auth/magicLink/types.d.ts.map +1 -1
  72. package/dist/auth/magicLink/types.js +0 -4
  73. package/dist/auth/magicLink/types.js.map +1 -1
  74. package/dist/auth/newUsers.d.ts.map +1 -1
  75. package/dist/auth/newUsers.js +1 -0
  76. package/dist/auth/newUsers.js.map +1 -1
  77. package/dist/auth/sessionUserClone.d.ts +1 -1
  78. package/dist/auth/sessionUserClone.d.ts.map +1 -1
  79. package/dist/auth/sessionUserClone.js +3 -2
  80. package/dist/auth/sessionUserClone.js.map +1 -1
  81. package/dist/backgroundSweepConfigUnits.d.ts +231 -0
  82. package/dist/backgroundSweepConfigUnits.d.ts.map +1 -0
  83. package/dist/backgroundSweepConfigUnits.js +180 -0
  84. package/dist/backgroundSweepConfigUnits.js.map +1 -0
  85. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts +292 -0
  86. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -0
  87. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +442 -0
  88. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -0
  89. package/dist/broadcast/index.d.ts +6 -0
  90. package/dist/broadcast/index.d.ts.map +1 -0
  91. package/dist/broadcast/index.js +6 -0
  92. package/dist/broadcast/index.js.map +1 -0
  93. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts +43 -0
  94. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts.map +1 -0
  95. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js +144 -0
  96. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js.map +1 -0
  97. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts +46 -0
  98. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts.map +1 -0
  99. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js +149 -0
  100. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js.map +1 -0
  101. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts +49 -0
  102. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts.map +1 -0
  103. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js +131 -0
  104. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js.map +1 -0
  105. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts +24 -0
  106. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts.map +1 -0
  107. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js +51 -0
  108. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js.map +1 -0
  109. package/dist/cache.d.ts +3 -2
  110. package/dist/cache.d.ts.map +1 -1
  111. package/dist/cache.js.map +1 -1
  112. package/dist/config.d.ts +1402 -8
  113. package/dist/config.d.ts.map +1 -1
  114. package/dist/config.js +120 -0
  115. package/dist/config.js.map +1 -1
  116. package/dist/context.d.ts +5 -1
  117. package/dist/context.d.ts.map +1 -1
  118. package/dist/context.js +64 -12
  119. package/dist/context.js.map +1 -1
  120. package/dist/coreRoutes.d.ts +3 -1
  121. package/dist/coreRoutes.d.ts.map +1 -1
  122. package/dist/coreRoutes.js +20 -4
  123. package/dist/coreRoutes.js.map +1 -1
  124. package/dist/generated/graphql-schemas/__mj.d.ts +863 -14
  125. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  126. package/dist/generated/graphql-schemas/__mj.js +4167 -62
  127. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  128. package/dist/generic/CacheInvalidationResolver.d.ts +50 -30
  129. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  130. package/dist/generic/CacheInvalidationResolver.js +154 -79
  131. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  132. package/dist/generic/OrphanedConversationDetailReconciler.d.ts +11 -0
  133. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
  134. package/dist/generic/OrphanedConversationDetailReconciler.js +29 -1
  135. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  136. package/dist/generic/PubSubManager.d.ts +10 -0
  137. package/dist/generic/PubSubManager.d.ts.map +1 -1
  138. package/dist/generic/PubSubManager.js +44 -1
  139. package/dist/generic/PubSubManager.js.map +1 -1
  140. package/dist/generic/PushStatusResolver.d.ts +39 -6
  141. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  142. package/dist/generic/PushStatusResolver.js +93 -11
  143. package/dist/generic/PushStatusResolver.js.map +1 -1
  144. package/dist/generic/ResolverBase.d.ts +114 -29
  145. package/dist/generic/ResolverBase.d.ts.map +1 -1
  146. package/dist/generic/ResolverBase.js +509 -220
  147. package/dist/generic/ResolverBase.js.map +1 -1
  148. package/dist/generic/RunViewResolver.d.ts +15 -3
  149. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  150. package/dist/generic/RunViewResolver.js +126 -20
  151. package/dist/generic/RunViewResolver.js.map +1 -1
  152. package/dist/generic/actionOutputFieldSecurity.d.ts +26 -0
  153. package/dist/generic/actionOutputFieldSecurity.d.ts.map +1 -0
  154. package/dist/generic/actionOutputFieldSecurity.js +47 -0
  155. package/dist/generic/actionOutputFieldSecurity.js.map +1 -0
  156. package/dist/generic/fieldSecurityTransport.d.ts +30 -0
  157. package/dist/generic/fieldSecurityTransport.d.ts.map +1 -0
  158. package/dist/generic/fieldSecurityTransport.js +30 -0
  159. package/dist/generic/fieldSecurityTransport.js.map +1 -0
  160. package/dist/index.d.ts +4 -0
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +262 -84
  163. package/dist/index.js.map +1 -1
  164. package/dist/integration/ConnectionPause.d.ts +121 -0
  165. package/dist/integration/ConnectionPause.d.ts.map +1 -0
  166. package/dist/integration/ConnectionPause.js +183 -0
  167. package/dist/integration/ConnectionPause.js.map +1 -0
  168. package/dist/integration/CustomColumnPromoter.d.ts +72 -6
  169. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  170. package/dist/integration/CustomColumnPromoter.js +93 -47
  171. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  172. package/dist/integration/EntityMapLifecycle.d.ts +78 -4
  173. package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
  174. package/dist/integration/EntityMapLifecycle.js +199 -5
  175. package/dist/integration/EntityMapLifecycle.js.map +1 -1
  176. package/dist/integration/InactiveRowWarnings.d.ts +31 -0
  177. package/dist/integration/InactiveRowWarnings.d.ts.map +1 -1
  178. package/dist/integration/InactiveRowWarnings.js +29 -0
  179. package/dist/integration/InactiveRowWarnings.js.map +1 -1
  180. package/dist/integration/ObjectNamesByID.d.ts +28 -0
  181. package/dist/integration/ObjectNamesByID.d.ts.map +1 -0
  182. package/dist/integration/ObjectNamesByID.js +87 -0
  183. package/dist/integration/ObjectNamesByID.js.map +1 -0
  184. package/dist/integration/PostRestartIntrospect.d.ts +26 -0
  185. package/dist/integration/PostRestartIntrospect.d.ts.map +1 -0
  186. package/dist/integration/PostRestartIntrospect.js +27 -0
  187. package/dist/integration/PostRestartIntrospect.js.map +1 -0
  188. package/dist/integration/RSUPostRestartProgress.d.ts +176 -0
  189. package/dist/integration/RSUPostRestartProgress.d.ts.map +1 -0
  190. package/dist/integration/RSUPostRestartProgress.js +323 -0
  191. package/dist/integration/RSUPostRestartProgress.js.map +1 -0
  192. package/dist/integration/RSUProgressBridge.d.ts +41 -2
  193. package/dist/integration/RSUProgressBridge.d.ts.map +1 -1
  194. package/dist/integration/RSUProgressBridge.js +84 -1
  195. package/dist/integration/RSUProgressBridge.js.map +1 -1
  196. package/dist/integration/RunArtifactAuthorization.d.ts +39 -0
  197. package/dist/integration/RunArtifactAuthorization.d.ts.map +1 -0
  198. package/dist/integration/RunArtifactAuthorization.js +45 -0
  199. package/dist/integration/RunArtifactAuthorization.js.map +1 -0
  200. package/dist/integration/SchemaRefreshLaunch.d.ts +9 -0
  201. package/dist/integration/SchemaRefreshLaunch.d.ts.map +1 -1
  202. package/dist/integration/SchemaRefreshLaunch.js +3 -2
  203. package/dist/integration/SchemaRefreshLaunch.js.map +1 -1
  204. package/dist/integration/ScopedFieldsForBuild.d.ts +46 -0
  205. package/dist/integration/ScopedFieldsForBuild.d.ts.map +1 -0
  206. package/dist/integration/ScopedFieldsForBuild.js +91 -0
  207. package/dist/integration/ScopedFieldsForBuild.js.map +1 -0
  208. package/dist/integration/TargetConfigGuard.d.ts +40 -0
  209. package/dist/integration/TargetConfigGuard.d.ts.map +1 -0
  210. package/dist/integration/TargetConfigGuard.js +40 -0
  211. package/dist/integration/TargetConfigGuard.js.map +1 -0
  212. package/dist/logging/variablesLoggingMiddleware.d.ts +12 -0
  213. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  214. package/dist/logging/variablesLoggingMiddleware.js +50 -1
  215. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  216. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -1
  217. package/dist/realtimeSessions/SessionVerificationPortsBase.js +1 -0
  218. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -1
  219. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +8 -6
  220. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
  221. package/dist/realtimeSessions/ownedRealtimeSession.js +14 -6
  222. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
  223. package/dist/realtimeSessions/sessionAccess.d.ts +103 -11
  224. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
  225. package/dist/realtimeSessions/sessionAccess.js +147 -22
  226. package/dist/realtimeSessions/sessionAccess.js.map +1 -1
  227. package/dist/realtimeSessions/sessionConfigStamps.js +1 -1
  228. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -1
  229. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -1
  230. package/dist/realtimeSessions/subscriptionAuthorization.js +5 -2
  231. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -1
  232. package/dist/realtimeSessions/verificationWorkflow.d.ts +2 -0
  233. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -1
  234. package/dist/realtimeSessions/verificationWorkflow.js +1 -1
  235. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -1
  236. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  237. package/dist/realtimeWidget/WidgetRouter.js +19 -3
  238. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  239. package/dist/realtimeWidget/WidgetSessionService.d.ts +67 -7
  240. package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
  241. package/dist/realtimeWidget/WidgetSessionService.js +203 -19
  242. package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
  243. package/dist/realtimeWidget/host-identity.d.ts +1 -1
  244. package/dist/realtimeWidget/host-identity.js +1 -1
  245. package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
  246. package/dist/realtimeWidget/visitorIdentity.js +1 -0
  247. package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
  248. package/dist/realtimeWidget/widgetCore.d.ts +20 -1
  249. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  250. package/dist/realtimeWidget/widgetCore.js +21 -8
  251. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  252. package/dist/realtimeWidget/widgetGuestElevation.d.ts +1 -1
  253. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  254. package/dist/realtimeWidget/widgetGuestElevation.js +3 -1
  255. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  256. package/dist/requestOrigin.d.ts +22 -0
  257. package/dist/requestOrigin.d.ts.map +1 -0
  258. package/dist/requestOrigin.js +60 -0
  259. package/dist/requestOrigin.js.map +1 -0
  260. package/dist/resolvers/ActionResolver.d.ts +19 -1
  261. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  262. package/dist/resolvers/ActionResolver.js +63 -12
  263. package/dist/resolvers/ActionResolver.js.map +1 -1
  264. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  265. package/dist/resolvers/AdhocQueryResolver.js +1 -0
  266. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  267. package/dist/resolvers/AgentRunStatusPublisher.d.ts +18 -4
  268. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
  269. package/dist/resolvers/AgentRunStatusPublisher.js +32 -8
  270. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
  271. package/dist/resolvers/AgentSessionResolver.d.ts +10 -4
  272. package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
  273. package/dist/resolvers/AgentSessionResolver.js +44 -17
  274. package/dist/resolvers/AgentSessionResolver.js.map +1 -1
  275. package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
  276. package/dist/resolvers/AutotagPipelineResolver.js +2 -1
  277. package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
  278. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
  279. package/dist/resolvers/ConversationRunEventsResolver.js +2 -0
  280. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
  281. package/dist/resolvers/EntityCommunicationsResolver.d.ts +13 -1
  282. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  283. package/dist/resolvers/EntityCommunicationsResolver.js +50 -14
  284. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  285. package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts +6 -0
  286. package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts.map +1 -1
  287. package/dist/resolvers/ExecuteRemoteOperationResolver.js +30 -7
  288. package/dist/resolvers/ExecuteRemoteOperationResolver.js.map +1 -1
  289. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +28 -0
  290. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  291. package/dist/resolvers/FetchEntityVectorsResolver.js +117 -21
  292. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  293. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  294. package/dist/resolvers/FileCategoryResolver.js +1 -0
  295. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  296. package/dist/resolvers/FileResolver.d.ts +5 -0
  297. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  298. package/dist/resolvers/FileResolver.js +13 -4
  299. package/dist/resolvers/FileResolver.js.map +1 -1
  300. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  301. package/dist/resolvers/GetDataResolver.js +34 -13
  302. package/dist/resolvers/GetDataResolver.js.map +1 -1
  303. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +401 -11
  304. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  305. package/dist/resolvers/IntegrationDiscoveryResolver.js +2713 -1290
  306. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  307. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  308. package/dist/resolvers/MCPResolver.js +13 -2
  309. package/dist/resolvers/MCPResolver.js.map +1 -1
  310. package/dist/resolvers/MergeRecordsResolver.d.ts +8 -1
  311. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  312. package/dist/resolvers/MergeRecordsResolver.js +31 -3
  313. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  314. package/dist/resolvers/PipelineProgressResolver.d.ts +6 -0
  315. package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -1
  316. package/dist/resolvers/PipelineProgressResolver.js +5 -3
  317. package/dist/resolvers/PipelineProgressResolver.js.map +1 -1
  318. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  319. package/dist/resolvers/QueryResolver.js +20 -6
  320. package/dist/resolvers/QueryResolver.js.map +1 -1
  321. package/dist/resolvers/QuerySystemUserResolver.d.ts +38 -0
  322. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  323. package/dist/resolvers/QuerySystemUserResolver.js +184 -88
  324. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  325. package/dist/resolvers/RSUResolver.d.ts.map +1 -1
  326. package/dist/resolvers/RSUResolver.js +12 -0
  327. package/dist/resolvers/RSUResolver.js.map +1 -1
  328. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  329. package/dist/resolvers/RealtimeBridgeResolver.js +1 -0
  330. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  331. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +22 -2
  332. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  333. package/dist/resolvers/RealtimeClientSessionResolver.js +118 -33
  334. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  335. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +62 -10
  336. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  337. package/dist/resolvers/RemoteBrowserActionResolver.js +224 -39
  338. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  339. package/dist/resolvers/RunAIAgentResolver.d.ts +80 -16
  340. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  341. package/dist/resolvers/RunAIAgentResolver.js +388 -125
  342. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  343. package/dist/resolvers/RunAIPromptResolver.d.ts +5 -3
  344. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  345. package/dist/resolvers/RunAIPromptResolver.js +19 -18
  346. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  347. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  348. package/dist/resolvers/RunTemplateResolver.js +7 -5
  349. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  350. package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
  351. package/dist/resolvers/RunTestResolver.js +3 -1
  352. package/dist/resolvers/RunTestResolver.js.map +1 -1
  353. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  354. package/dist/resolvers/SyncDataResolver.js +4 -0
  355. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  356. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  357. package/dist/resolvers/TestQuerySQLResolver.js +1 -0
  358. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  359. package/dist/resolvers/TransactionGroupResolver.d.ts +17 -2
  360. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  361. package/dist/resolvers/TransactionGroupResolver.js +60 -15
  362. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  363. package/dist/resolvers/UserViewResolver.d.ts +1 -1
  364. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  365. package/dist/resolvers/UserViewResolver.js +2 -1
  366. package/dist/resolvers/UserViewResolver.js.map +1 -1
  367. package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
  368. package/dist/resolvers/meetingRecordingRegistration.js +2 -0
  369. package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
  370. package/dist/rest/EntityCRUDHandler.d.ts +6 -0
  371. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  372. package/dist/rest/EntityCRUDHandler.js +19 -5
  373. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  374. package/dist/rest/MediaAccessKeys.d.ts.map +1 -1
  375. package/dist/rest/MediaAccessKeys.js +6 -2
  376. package/dist/rest/MediaAccessKeys.js.map +1 -1
  377. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
  378. package/dist/rest/OAuthCallbackHandler.js +11 -5
  379. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  380. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  381. package/dist/rest/RESTEndpointHandler.js +8 -5
  382. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  383. package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
  384. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
  385. package/dist/rest/RealtimeRecordingHandler.js +6 -8
  386. package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
  387. package/dist/rest/ViewOperationsHandler.d.ts +6 -0
  388. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  389. package/dist/rest/ViewOperationsHandler.js +24 -6
  390. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  391. package/dist/rest/setupRESTEndpoints.d.ts +3 -1
  392. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  393. package/dist/rest/setupRESTEndpoints.js +11 -2
  394. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  395. package/dist/serverRoleConfigUnits.d.ts +29 -0
  396. package/dist/serverRoleConfigUnits.d.ts.map +1 -0
  397. package/dist/serverRoleConfigUnits.js +33 -0
  398. package/dist/serverRoleConfigUnits.js.map +1 -0
  399. package/dist/services/DurableEntityActionTaskSubmitter.d.ts.map +1 -1
  400. package/dist/services/DurableEntityActionTaskSubmitter.js +6 -1
  401. package/dist/services/DurableEntityActionTaskSubmitter.js.map +1 -1
  402. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  403. package/dist/services/TaskGraphActionRunner.js +2 -26
  404. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  405. package/dist/services/TaskGraphAgentRunner.d.ts +6 -0
  406. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
  407. package/dist/services/TaskGraphAgentRunner.js +38 -0
  408. package/dist/services/TaskGraphAgentRunner.js.map +1 -1
  409. package/dist/services/TaskGraphContinuationDeliverer.d.ts +5 -0
  410. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  411. package/dist/services/TaskGraphContinuationDeliverer.js +43 -15
  412. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  413. package/dist/services/WorkQueueHostService.d.ts +2 -1
  414. package/dist/services/WorkQueueHostService.d.ts.map +1 -1
  415. package/dist/services/WorkQueueHostService.js +19 -4
  416. package/dist/services/WorkQueueHostService.js.map +1 -1
  417. package/dist/services/workQueueConfig.d.ts +2 -2
  418. package/dist/services/workQueueConfig.js +5 -5
  419. package/dist/services/workQueueConfig.js.map +1 -1
  420. package/dist/sharedCache.js +1 -1
  421. package/dist/sharedCache.js.map +1 -1
  422. package/dist/types.d.ts +40 -1
  423. package/dist/types.d.ts.map +1 -1
  424. package/dist/types.js.map +1 -1
  425. package/package.json +98 -98
  426. package/src/__tests__/APIKeyScopeAuth.test.ts +4 -8
  427. package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -0
  428. package/src/__tests__/ActiveOperations.test.ts +68 -0
  429. package/src/__tests__/AdhocQueryResolver.dialect.test.ts +137 -0
  430. package/src/__tests__/AgentRunStatusPublisher.test.ts +49 -0
  431. package/src/__tests__/AgentSessionResolver.ownership.test.ts +150 -0
  432. package/src/__tests__/AssertTargetConfigs.test.ts +75 -0
  433. package/src/__tests__/BatchApplyParity.test.ts +109 -0
  434. package/src/__tests__/BridgeHostInstance.test.ts +42 -0
  435. package/src/__tests__/CollectInactiveRowWarnings.test.ts +115 -0
  436. package/src/__tests__/ConnectionPause.test.ts +192 -0
  437. package/src/__tests__/ConnectionPauseResolver.test.ts +166 -0
  438. package/src/__tests__/ConnectionPauseSave.test.ts +143 -0
  439. package/src/__tests__/CustomColumnPromoterCompletion.test.ts +142 -0
  440. package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
  441. package/src/__tests__/DeleteConnectionRemovesPerConnectionCatalog.test.ts +51 -0
  442. package/src/__tests__/DetachedDiscoveryStart.test.ts +65 -0
  443. package/src/__tests__/DurableEntityActionTaskSubmitter.test.ts +73 -0
  444. package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
  445. package/src/__tests__/EntityMapLifecycle.rekey.test.ts +252 -0
  446. package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
  447. package/src/__tests__/ExecuteRemoteOperationResolver.test.ts +213 -0
  448. package/src/__tests__/FetchEntityVectorsResolver.test.ts +206 -3
  449. package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
  450. package/src/__tests__/HandoffOfferExpiry.test.ts +40 -0
  451. package/src/__tests__/IntegrationRunArtifactAuthorization.test.ts +126 -0
  452. package/src/__tests__/MagicLinkKeys.test.ts +102 -0
  453. package/src/__tests__/MediaAccessKeys.test.ts +57 -10
  454. package/src/__tests__/NewArrivalsDefaultDisabled.test.ts +50 -0
  455. package/src/__tests__/ObjectNamesByID.test.ts +176 -0
  456. package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
  457. package/src/__tests__/PostRestartMapsInCatalogScope.test.ts +146 -0
  458. package/src/__tests__/QuerySystemUserResolver.childRows.test.ts +80 -0
  459. package/src/__tests__/QuerySystemUserResolver.collision.test.ts +200 -0
  460. package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
  461. package/src/__tests__/QuerySystemUserResolver.permissions.test.ts +132 -0
  462. package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
  463. package/src/__tests__/RSUPostRestartProgress.test.ts +343 -0
  464. package/src/__tests__/RSUProgressBridge.test.ts +188 -5
  465. package/src/__tests__/RSUStartupSweepWiring.test.ts +30 -0
  466. package/src/__tests__/ReactivateRefreshMessage.test.ts +10 -3
  467. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
  468. package/src/__tests__/RealtimeClientSessionResolver.test.ts +346 -46
  469. package/src/__tests__/{RefreshAdoptsNewColumns.test.ts → RefreshReportsNewColumns.test.ts} +25 -16
  470. package/src/__tests__/RemoteBrowserActionRecovery.test.ts +287 -0
  471. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +3 -0
  472. package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +100 -0
  473. package/src/__tests__/RemoteBrowserAudioStream.test.ts +3 -0
  474. package/src/__tests__/RemoteBrowserSnapshot.test.ts +3 -0
  475. package/src/__tests__/ResolverBase.clientOldValues.test.ts +344 -14
  476. package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
  477. package/src/__tests__/ResolverBase.encryptedApiZeroReencrypt.test.ts +307 -0
  478. package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +227 -0
  479. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +83 -1
  480. package/src/__tests__/ResolverBase.publishStatusUpdate.test.ts +68 -0
  481. package/src/__tests__/ResolverBase.userViewCacheAndDedup.test.ts +130 -0
  482. package/src/__tests__/RunAIAgentResolver.branch.test.ts +72 -13
  483. package/src/__tests__/RunAIAgentResolver.consultPredecessor.test.ts +289 -0
  484. package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
  485. package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
  486. package/src/__tests__/RunAIAgentResolver.handoff.test.ts +649 -0
  487. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +19 -27
  488. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +10 -2
  489. package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
  490. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +91 -13
  491. package/src/__tests__/RunTemplateResolver.test.ts +35 -2
  492. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
  493. package/src/__tests__/SchemaEvolutionCustomColumns.test.ts +119 -0
  494. package/src/__tests__/SchemaRefreshLaunch.test.ts +24 -2
  495. package/src/__tests__/ScopedFieldsForBuild.test.ts +192 -0
  496. package/src/__tests__/SessionJanitor.test.ts +195 -4
  497. package/src/__tests__/SessionManager.test.ts +164 -0
  498. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +2 -2
  499. package/src/__tests__/TaskGraphAgentRunner.test.ts +272 -16
  500. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +114 -3
  501. package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
  502. package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
  503. package/src/__tests__/ViewOperationsHandler.test.ts +9 -7
  504. package/src/__tests__/WidgetSessionService.test.ts +583 -4
  505. package/src/__tests__/WorkQueueHostService.test.ts +25 -7
  506. package/src/__tests__/apiRootBoot.test.ts +1 -1
  507. package/src/__tests__/backgroundSweepConfigUnits.test.ts +153 -0
  508. package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
  509. package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
  510. package/src/__tests__/cacheInvalidationRecordData.test.ts +45 -0
  511. package/src/__tests__/contextRequestOrigin.test.ts +105 -0
  512. package/src/__tests__/conversationBrowsers.test.ts +62 -0
  513. package/src/__tests__/fieldSecurityFixtures.ts +91 -0
  514. package/src/__tests__/globalCors.test.ts +3 -3
  515. package/src/__tests__/localDevAuth.test.ts +196 -0
  516. package/src/__tests__/magicLinkExtensionCapabilities.test.ts +413 -0
  517. package/src/__tests__/orphanedConversationDetailReconciler.start.test.ts +82 -0
  518. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
  519. package/src/__tests__/ownedRealtimeSession.test.ts +14 -0
  520. package/src/__tests__/pushStatusResolver.filter.test.ts +57 -1
  521. package/src/__tests__/realtimeRecordingHandler.test.ts +24 -2
  522. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +29 -1
  523. package/src/__tests__/realtimeSessions/ownedRealtimeSession.anonymous.test.ts +31 -0
  524. package/src/__tests__/realtimeSessions/ownedRealtimeSession.namedScoped.test.ts +37 -0
  525. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +224 -7
  526. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
  527. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
  528. package/src/__tests__/requestOrigin.test.ts +104 -0
  529. package/src/__tests__/resolverBase.cloudEventChangedFields.test.ts +157 -0
  530. package/src/__tests__/resolverBase.fieldSecurityTransport.test.ts +222 -0
  531. package/src/__tests__/resolverBase.fls.test.ts +146 -97
  532. package/src/__tests__/restTransport.fieldSecurity.test.ts +148 -0
  533. package/src/__tests__/runParamsTimeZone.test.ts +179 -0
  534. package/src/__tests__/runStreams.fieldSecurity.test.ts +100 -0
  535. package/src/__tests__/runViewProperties.test.ts +114 -0
  536. package/src/__tests__/scalabilityBenchmarks.test.ts +765 -0
  537. package/src/__tests__/scalabilityDatabaseIntegration.test.ts +207 -0
  538. package/src/__tests__/securityHardeningPr6034.test.ts +120 -0
  539. package/src/__tests__/sessionDeadline.test.ts +51 -0
  540. package/src/__tests__/sessionUserClone.test.ts +5 -1
  541. package/src/__tests__/sharedCache.test.ts +11 -0
  542. package/src/__tests__/startupSweepOrder.test.ts +40 -0
  543. package/src/__tests__/unifiedAuth.test.ts +101 -1
  544. package/src/__tests__/widgetGuestElevation.test.ts +2 -0
  545. package/src/agentSessions/BridgeHostInstance.ts +20 -5
  546. package/src/agentSessions/HandoffOfferExpiry.ts +18 -0
  547. package/src/agentSessions/ReturningVisitorRecap.ts +1 -0
  548. package/src/agentSessions/SessionJanitor.ts +95 -45
  549. package/src/agentSessions/SessionManager.ts +73 -20
  550. package/src/agentSessions/conversationBrowsers.ts +143 -0
  551. package/src/agentSessions/sessionDeadline.ts +81 -0
  552. package/src/auth/APIKeyScopeAuth.ts +5 -4
  553. package/src/auth/AuthProviderCatalogRouter.ts +3 -0
  554. package/src/auth/__tests__/loginEmailResolution.test.ts +67 -0
  555. package/src/auth/index.ts +56 -12
  556. package/src/auth/initializeProviders.ts +43 -1
  557. package/src/auth/localDevAuth.ts +528 -0
  558. package/src/auth/loginEmailResolution.ts +67 -0
  559. package/src/auth/magicLink/MagicLinkKeys.ts +147 -15
  560. package/src/auth/magicLink/MagicLinkRouter.ts +33 -6
  561. package/src/auth/magicLink/MagicLinkService.ts +250 -10
  562. package/src/auth/magicLink/index.ts +1 -1
  563. package/src/auth/magicLink/redeemLanding.ts +7 -4
  564. package/src/auth/magicLink/types.ts +38 -3
  565. package/src/auth/newUsers.ts +1 -0
  566. package/src/auth/sessionUserClone.ts +3 -2
  567. package/src/backgroundSweepConfigUnits.ts +213 -0
  568. package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +674 -0
  569. package/src/broadcast/index.ts +5 -0
  570. package/src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts +180 -0
  571. package/src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts +182 -0
  572. package/src/broadcast/providers/GCPPubSubBroadcastProvider.ts +169 -0
  573. package/src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts +57 -0
  574. package/src/cache.ts +2 -1
  575. package/src/config.ts +138 -0
  576. package/src/context.ts +71 -14
  577. package/src/coreRoutes.ts +29 -7
  578. package/src/generated/graphql-schemas/__mj.ts +4145 -1193
  579. package/src/generic/CacheInvalidationResolver.ts +135 -78
  580. package/src/generic/OrphanedConversationDetailReconciler.ts +36 -3
  581. package/src/generic/PubSubManager.ts +54 -1
  582. package/src/generic/PushStatusResolver.ts +108 -11
  583. package/src/generic/ResolverBase.ts +635 -234
  584. package/src/generic/RunViewResolver.ts +176 -64
  585. package/src/generic/actionOutputFieldSecurity.ts +75 -0
  586. package/src/generic/fieldSecurityTransport.ts +62 -0
  587. package/src/index.ts +310 -85
  588. package/src/integration/ConnectionPause.ts +222 -0
  589. package/src/integration/CustomColumnPromoter.ts +129 -54
  590. package/src/integration/EntityMapLifecycle.ts +229 -6
  591. package/src/integration/InactiveRowWarnings.ts +50 -0
  592. package/src/integration/ObjectNamesByID.ts +97 -0
  593. package/src/integration/PostRestartIntrospect.ts +49 -0
  594. package/src/integration/RSUPostRestartProgress.ts +359 -0
  595. package/src/integration/RSUProgressBridge.ts +85 -2
  596. package/src/integration/RunArtifactAuthorization.ts +65 -0
  597. package/src/integration/SchemaRefreshLaunch.ts +12 -2
  598. package/src/integration/ScopedFieldsForBuild.ts +113 -0
  599. package/src/integration/TargetConfigGuard.ts +71 -0
  600. package/src/logging/variablesLoggingMiddleware.ts +59 -3
  601. package/src/realtimeSessions/README.md +7 -3
  602. package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
  603. package/src/realtimeSessions/ownedRealtimeSession.ts +16 -6
  604. package/src/realtimeSessions/sessionAccess.ts +211 -25
  605. package/src/realtimeSessions/sessionConfigStamps.ts +1 -1
  606. package/src/realtimeSessions/subscriptionAuthorization.ts +4 -2
  607. package/src/realtimeSessions/verificationWorkflow.ts +3 -1
  608. package/src/realtimeWidget/WidgetRouter.ts +22 -4
  609. package/src/realtimeWidget/WidgetSessionService.ts +254 -17
  610. package/src/realtimeWidget/host-identity.ts +1 -1
  611. package/src/realtimeWidget/visitorIdentity.ts +1 -0
  612. package/src/realtimeWidget/widgetCore.ts +34 -9
  613. package/src/realtimeWidget/widgetGuestElevation.ts +3 -1
  614. package/src/requestOrigin.ts +64 -0
  615. package/src/resolvers/ActionResolver.ts +78 -15
  616. package/src/resolvers/AdhocQueryResolver.ts +1 -0
  617. package/src/resolvers/AgentRunStatusPublisher.ts +36 -8
  618. package/src/resolvers/AgentSessionResolver.ts +50 -18
  619. package/src/resolvers/AutotagPipelineResolver.ts +2 -1
  620. package/src/resolvers/ConversationRunEventsResolver.ts +2 -0
  621. package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
  622. package/src/resolvers/ExecuteRemoteOperationResolver.ts +41 -9
  623. package/src/resolvers/FetchEntityVectorsResolver.ts +132 -21
  624. package/src/resolvers/FileCategoryResolver.ts +1 -0
  625. package/src/resolvers/FileResolver.ts +14 -4
  626. package/src/resolvers/GetDataResolver.ts +35 -13
  627. package/src/resolvers/IntegrationDiscoveryResolver.ts +1570 -209
  628. package/src/resolvers/MCPResolver.ts +15 -2
  629. package/src/resolvers/MergeRecordsResolver.ts +23 -2
  630. package/src/resolvers/PipelineProgressResolver.ts +12 -3
  631. package/src/resolvers/QueryResolver.ts +20 -6
  632. package/src/resolvers/QuerySystemUserResolver.ts +207 -99
  633. package/src/resolvers/RSUResolver.ts +12 -0
  634. package/src/resolvers/RealtimeBridgeResolver.ts +1 -0
  635. package/src/resolvers/RealtimeClientSessionResolver.ts +144 -40
  636. package/src/resolvers/RemoteBrowserActionResolver.ts +252 -37
  637. package/src/resolvers/RunAIAgentResolver.ts +518 -163
  638. package/src/resolvers/RunAIPromptResolver.ts +18 -18
  639. package/src/resolvers/RunTemplateResolver.ts +9 -5
  640. package/src/resolvers/RunTestResolver.ts +3 -1
  641. package/src/resolvers/SyncDataResolver.ts +4 -0
  642. package/src/resolvers/TestQuerySQLResolver.ts +1 -0
  643. package/src/resolvers/TransactionGroupResolver.ts +66 -15
  644. package/src/resolvers/UserViewResolver.ts +2 -1
  645. package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +52 -0
  646. package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
  647. package/src/resolvers/meetingRecordingRegistration.ts +2 -0
  648. package/src/rest/EntityCRUDHandler.ts +22 -5
  649. package/src/rest/MediaAccessKeys.ts +6 -2
  650. package/src/rest/OAuthCallbackHandler.ts +13 -5
  651. package/src/rest/RESTEndpointHandler.ts +8 -5
  652. package/src/rest/RealtimeRecordingHandler.ts +9 -10
  653. package/src/rest/ViewOperationsHandler.ts +26 -7
  654. package/src/rest/setupRESTEndpoints.ts +11 -2
  655. package/src/serverRoleConfigUnits.ts +48 -0
  656. package/src/services/DurableEntityActionTaskSubmitter.ts +10 -2
  657. package/src/services/TaskGraphActionRunner.ts +2 -23
  658. package/src/services/TaskGraphAgentRunner.ts +43 -0
  659. package/src/services/TaskGraphContinuationDeliverer.ts +53 -20
  660. package/src/services/WorkQueueHostService.ts +26 -4
  661. package/src/services/workQueueConfig.ts +5 -5
  662. package/src/sharedCache.ts +1 -1
  663. package/src/types.ts +41 -1
  664. package/src/services/TaskOrchestration-Integration.md +0 -188
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Completing a promotion after the restart.
3
+ *
4
+ * The post-restart consumer calls CompletePromotion with no catalog scope. Unscoped, a connection
5
+ * with per-connection rows reads as having none, so building its catalog writer threw
6
+ * PER_CONNECTION_CATALOG_MISSING. CompletePromotion caught that per entity and returned normally,
7
+ * and the consumer marked the pending work Completed: the columns existed in the database and were
8
+ * never mapped, with nothing failed anywhere.
9
+ *
10
+ * So: the catalog writes run in the connection's own scope, entered per entry; and a failed entry
11
+ * no longer returns normally — the others still run, then the failure is thrown, so the consumer
12
+ * fails the pending row instead of completing it.
13
+ */
14
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
15
+
16
+ const h = vi.hoisted(() => ({
17
+ scopeAtBuild: [] as Array<string | undefined>,
18
+ savedFields: [] as string[],
19
+ }));
20
+
21
+ vi.mock('@memberjunction/schema-engine', () => ({
22
+ RuntimeSchemaManager: { get Instance() { return {}; } },
23
+ }));
24
+ vi.mock('@memberjunction/integration-schema-builder', () => ({ DDLGenerator: class {} }));
25
+
26
+ // The real scope; only the writer is replaced. It behaves as the real one does for a connection
27
+ // with per-connection rows: outside that connection's scope it cannot tell, and refuses.
28
+ vi.mock('@memberjunction/integration-engine', async (orig) => {
29
+ const actual = await orig<typeof import('@memberjunction/integration-engine')>();
30
+ return {
31
+ ...actual,
32
+ BuildCatalogWriter: () => {
33
+ const ci = actual.CurrentCatalogCI();
34
+ h.scopeAtBuild.push(ci);
35
+ if (!ci) throw new Error('PER_CONNECTION_CATALOG_MISSING: built outside the connection scope');
36
+ return {
37
+ ObjectsInScope: async () => [{ Name: 'Members', ID: 'obj-members' }],
38
+ FieldsForObject: async () => [],
39
+ LoadField: async () => null,
40
+ NewFieldRow: async () => {
41
+ const row: Record<string, unknown> = {};
42
+ return Object.assign(row, { Save: async () => { h.savedFields.push(String(row.Name)); return true; } });
43
+ },
44
+ StampNewField: () => undefined,
45
+ };
46
+ },
47
+ };
48
+ });
49
+
50
+ import type { UserInfo, IMetadataProvider, EntityInfo } from '@memberjunction/core';
51
+ import { IntegrationEngineBase } from '@memberjunction/integration-engine-base';
52
+ import { WithCatalogScope } from '@memberjunction/integration-engine';
53
+ import { IntegrationCustomColumnPromoter } from '../integration/CustomColumnPromoter.js';
54
+
55
+ const USER = { ID: 'u-1' } as UserInfo;
56
+ const CONN = 'CCCCCCCC-0000-0000-0000-000000000001';
57
+ const OTHER_CONN = 'CCCCCCCC-0000-0000-0000-000000000002';
58
+
59
+ type Seams = {
60
+ createIntegrationObjectFields: (integrationID: string, entityMapID: string, objectName: string, named: unknown[]) => Promise<void>;
61
+ activeFieldMaps: unknown; createFieldMaps: unknown; spreadAndRebaseline: unknown;
62
+ };
63
+
64
+ function provider(known: string[]): IMetadataProvider {
65
+ return {
66
+ EntityByName: (n: string) => (known.includes(n) ? ({ Name: n } as unknown as EntityInfo) : undefined),
67
+ PlatformKey: 'sqlserver',
68
+ } as unknown as IMetadataProvider;
69
+ }
70
+
71
+ const region = { sourceKey: 'region', columnName: 'region', candidate: { Coverage: 0.5, Inferred: { SchemaFieldType: 'nvarchar', MaxLength: 50 } } };
72
+
73
+ function entry(entityName: string) {
74
+ return {
75
+ EntityName: entityName, EntityMapID: `em-${entityName}`, ExternalObjectName: 'Members', IntegrationID: 'int-1',
76
+ Columns: [{ SourceKey: 'region', ColumnName: 'region', SchemaFieldType: 'nvarchar', MaxLength: 50, Coverage: 0.5 }],
77
+ };
78
+ }
79
+
80
+ beforeEach(() => {
81
+ h.scopeAtBuild.length = 0;
82
+ h.savedFields.length = 0;
83
+ // No catalog entities registered: entering a scope loads nothing and reads nothing.
84
+ vi.spyOn(IntegrationEngineBase.Instance, 'ProviderToUse', 'get').mockImplementation(() => ({ EntityByName: () => undefined }) as never);
85
+ vi.spyOn(IntegrationEngineBase.Instance, 'EntityMaps', 'get')
86
+ .mockReturnValue([{ ID: 'em-Members', CompanyIntegrationID: CONN }] as never);
87
+ vi.spyOn(IntegrationEngineBase.Instance, 'GetCompanyIntegrationByID')
88
+ .mockImplementation((id: string) => ({ ID: id }) as never);
89
+ vi.spyOn(console, 'error').mockImplementation(() => undefined);
90
+ });
91
+ afterEach(() => { vi.restoreAllMocks(); });
92
+
93
+ describe('the catalog writes of a promotion run in the connection\'s own scope', () => {
94
+ it('called with no scope (the post-restart consumer), the writer is built in the connection\'s scope', async () => {
95
+ const promoter = new IntegrationCustomColumnPromoter(USER, provider([])) as unknown as Seams;
96
+ await promoter.createIntegrationObjectFields('int-1', 'em-Members', 'Members', [region]);
97
+ expect(h.scopeAtBuild).toEqual([CONN]);
98
+ expect(h.savedFields).toEqual(['region']);
99
+ });
100
+
101
+ it('called inside another connection\'s scope, the entry\'s own connection wins', async () => {
102
+ const promoter = new IntegrationCustomColumnPromoter(USER, provider([])) as unknown as Seams;
103
+ await WithCatalogScope(OTHER_CONN, () => promoter.createIntegrationObjectFields('int-1', 'em-Members', 'Members', [region]), USER);
104
+ expect(h.scopeAtBuild).toEqual([CONN]);
105
+ });
106
+ });
107
+
108
+ describe('CompletePromotion does not complete over a failed entity', () => {
109
+ function stub(known: string[], failing: string[] = []) {
110
+ const promoter = new IntegrationCustomColumnPromoter(USER, provider(known));
111
+ const p = promoter as unknown as Seams;
112
+ p.activeFieldMaps = vi.fn().mockResolvedValue(new Map<string, string>());
113
+ p.createIntegrationObjectFields = vi.fn(async (_i: string, emID: string) => {
114
+ if (failing.some(f => emID === `em-${f}`)) throw new Error('PER_CONNECTION_CATALOG_MISSING');
115
+ });
116
+ const maps = vi.fn().mockResolvedValue(undefined);
117
+ p.createFieldMaps = maps;
118
+ p.spreadAndRebaseline = vi.fn().mockResolvedValue(undefined);
119
+ return { promoter, maps };
120
+ }
121
+
122
+ it('every entry completes: returns the columns and throws nothing', async () => {
123
+ const { promoter } = stub(['A', 'B']);
124
+ await expect(promoter.CompletePromotion([entry('A'), entry('B')])).resolves.toEqual([
125
+ { EntityName: 'A', ColumnName: 'region' },
126
+ { EntityName: 'B', ColumnName: 'region' },
127
+ ]);
128
+ });
129
+
130
+ it('one entry fails: the others still complete, then it throws naming the failed one', async () => {
131
+ const { promoter, maps } = stub(['A', 'B'], ['A']);
132
+ await expect(promoter.CompletePromotion([entry('A'), entry('B')]))
133
+ .rejects.toThrow(/PROMOTION_INCOMPLETE: 1 of 2 .*A: PER_CONNECTION_CATALOG_MISSING/);
134
+ expect(maps).toHaveBeenCalledTimes(1); // B's field maps were still created
135
+ });
136
+
137
+ it('an entity that is not found after the restart is a failure, not a skip', async () => {
138
+ const { promoter } = stub(['B']);
139
+ await expect(promoter.CompletePromotion([entry('A'), entry('B')]))
140
+ .rejects.toThrow(/PROMOTION_INCOMPLETE: 1 of 2 .*A: entity not found/);
141
+ });
142
+ });
@@ -14,10 +14,19 @@
14
14
  import { describe, it, expect, beforeEach, vi } from 'vitest';
15
15
 
16
16
  const runPipelineBatchMock = vi.fn();
17
+ /**
18
+ * MJ-APPLY-6 — the BARE, non-retrying entry point. Bound separately so a regression back to it is
19
+ * an assertion failure rather than an invisible loss of the retry. Promotion runs unattended
20
+ * mid-sync; a transient pipeline step failing there drops the whole promotion silently.
21
+ */
22
+ const runPipelineBatchBareMock = vi.fn();
17
23
  vi.mock('@memberjunction/schema-engine', () => ({
18
24
  RuntimeSchemaManager: {
19
25
  get Instance() {
20
- return { RunPipelineBatch: runPipelineBatchMock };
26
+ return {
27
+ RunPipelineBatch: runPipelineBatchBareMock,
28
+ RunPipelineBatchWithRetry: runPipelineBatchMock,
29
+ };
21
30
  },
22
31
  },
23
32
  }));
@@ -104,6 +113,7 @@ function stubPromoter(
104
113
 
105
114
  beforeEach(() => {
106
115
  runPipelineBatchMock.mockReset();
116
+ runPipelineBatchBareMock.mockReset();
107
117
  });
108
118
 
109
119
  describe('PromoteForSync — one batched RSU pass', () => {
@@ -122,6 +132,10 @@ describe('PromoteForSync — one batched RSU pass', () => {
122
132
  const result = await promoter.PromoteForSync('ci-1', ['A', 'B', 'C']);
123
133
 
124
134
  expect(runPipelineBatchMock).toHaveBeenCalledTimes(1);
135
+ // MJ-APPLY-6 — the ONE pass has to be the RETRYING one. Promotion is unattended: a
136
+ // transient ExecuteMigration/RunCodeGen/Compile/Restart failure with no replay drops every
137
+ // accepted column back into overflow and nothing reruns it.
138
+ expect(runPipelineBatchBareMock).not.toHaveBeenCalled();
125
139
  expect(runPipelineBatchMock.mock.calls[0][0]).toHaveLength(3);
126
140
  expect(result.Promoted).toBe(true);
127
141
  expect(result.ColumnsAdded).toEqual([
@@ -0,0 +1,51 @@
1
+ /**
2
+ * The per-connection catalog rows carry a plain FK to the connection and nothing cascades, so a
3
+ * connection that ever ran a discovery on it could not be deleted at all: the CompanyIntegration
4
+ * delete violated the constraint and the whole cascade rolled back (MJ-CAT-18). The fix deletes
5
+ * the field rows, then the object rows, inside the same transaction group, before the connection.
6
+ *
7
+ * Pinned from source, like PostRestartMapsInCatalogScope: the delete is a transaction over a live
8
+ * provider, and the fact being pinned is ORDER inside one method body.
9
+ */
10
+ import { describe, it, expect } from 'vitest';
11
+ import { readFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+
14
+ const SRC = readFileSync(join(__dirname, '..', 'resolvers', 'IntegrationDiscoveryResolver.ts'), 'utf-8');
15
+ const start = SRC.indexOf('async IntegrationDeleteConnection(');
16
+ const end = SRC.indexOf('// ── SCHEMA EVOLUTION', start);
17
+ const BODY = SRC.slice(start, end);
18
+
19
+ describe('IntegrationDeleteConnection removes the per-connection catalog before the connection', () => {
20
+ it('is scoped to the method body', () => {
21
+ expect(start).toBeGreaterThan(0);
22
+ expect(end).toBeGreaterThan(start);
23
+ });
24
+
25
+ it('deletes per-connection fields, then objects, then the CompanyIntegration — in that order', () => {
26
+ const fields = BODY.indexOf("EntityName: 'MJ: Company Integration Object Fields'");
27
+ const objects = BODY.indexOf("EntityName: 'MJ: Company Integration Objects'");
28
+ const fieldDelete = BODY.indexOf('field.TransactionGroup = tg;');
29
+ const objectDelete = BODY.indexOf('object.TransactionGroup = tg;');
30
+ const ciDelete = BODY.indexOf('ci.TransactionGroup = tg;');
31
+ expect(objects).toBeGreaterThan(0);
32
+ expect(fields).toBeGreaterThan(objects);
33
+ expect(fieldDelete).toBeGreaterThan(fields);
34
+ expect(objectDelete).toBeGreaterThan(fieldDelete);
35
+ expect(ciDelete).toBeGreaterThan(objectDelete);
36
+ });
37
+
38
+ it('queues every catalog delete on the same transaction group as the cascade', () => {
39
+ expect(BODY).toMatch(/field\.TransactionGroup = tg;\s*await field\.Delete\(\);/);
40
+ expect(BODY).toMatch(/object\.TransactionGroup = tg;\s*await object\.Delete\(\);/);
41
+ });
42
+
43
+ it('is guarded on the catalog entities being registered, so an unmigrated workspace is untouched', () => {
44
+ expect(BODY).toMatch(/md\.Entities\.some\(e => e\.Name === 'MJ: Company Integration Objects'\)/);
45
+ });
46
+
47
+ it('selects the fields by the objects of THIS connection only', () => {
48
+ expect(BODY).toMatch(/ExtraFilter: `CompanyIntegrationID='\$\{companyIntegrationID\}'`,\s*ResultType: 'entity_object',\s*\}, sysUser\);\s*const perConnectionObjects/);
49
+ expect(BODY).toMatch(/ExtraFilter: `CompanyIntegrationObjectID IN \(\$\{objectIDs\}\)`/);
50
+ });
51
+ });
@@ -0,0 +1,65 @@
1
+ /**
2
+ * plan.md: "going to a page should NEVER, NEVER trigger such things automatically, it must in a
3
+ * very clean way tell the user to click a button to start discovery of tables".
4
+ *
5
+ * A button needs a call that returns at once. The only discovery entry point that existed was
6
+ * synchronous - it runs the whole pipeline inline and times out at the gateway on a large catalog -
7
+ * so both wizards auto-triggered on page entry and adopted whatever run they happened to find.
8
+ * IntegrationStartSchemaRefresh is the explicit start: it returns a tailable RunID immediately.
9
+ *
10
+ * Source-level, for the same reason the sibling default tests are: these are decorator and
11
+ * argument shapes, and invoking the resolver needs a provider, a connector driver and the RSU
12
+ * pipeline stood up.
13
+ */
14
+ import { describe, it, expect } from 'vitest';
15
+ import { readFileSync } from 'node:fs';
16
+ import { join } from 'node:path';
17
+
18
+ const SRC = readFileSync(
19
+ join(__dirname, '..', 'resolvers', 'IntegrationDiscoveryResolver.ts'), 'utf-8');
20
+
21
+ function methodBody(name: string): string {
22
+ const start = SRC.indexOf(`async ${name}(`);
23
+ expect(start, `${name} not found`).toBeGreaterThan(-1);
24
+ const rest = SRC.slice(start);
25
+ const end = rest.search(/\n @(Query|Mutation)\(/);
26
+ return end === -1 ? rest : rest.slice(0, end);
27
+ }
28
+
29
+ describe('IntegrationStartSchemaRefresh', () => {
30
+ it('exists as a mutation', () => {
31
+ expect(SRC).toMatch(/@Mutation\(\(\) => StartSchemaRefreshOutput\)/);
32
+ expect(SRC).toMatch(/async IntegrationStartSchemaRefresh\(/);
33
+ });
34
+
35
+ it('launches DETACHED rather than awaiting the pipeline', () => {
36
+ const body = methodBody('IntegrationStartSchemaRefresh');
37
+ expect(body).toMatch(/startSchemaRefreshPipelineDetached\(/);
38
+ // an await on the pipeline would reintroduce the gateway timeout this exists to avoid
39
+ expect(body).not.toMatch(/await this\.runSchemaRefreshPipeline\(/);
40
+ });
41
+
42
+ it('refuses a second start with the reason, instead of handing back a doomed RunID', () => {
43
+ const body = methodBody('IntegrationStartSchemaRefresh');
44
+ expect(body).toMatch(/GetMaintenanceLock\(/);
45
+ expect(body).toMatch(/RunID: 'not-started'/);
46
+ expect(body).toMatch(/BlockedBy/);
47
+ });
48
+
49
+ it('probes the lock BEFORE launching, or the refusal is useless', () => {
50
+ const body = methodBody('IntegrationStartSchemaRefresh');
51
+ expect(body.indexOf('GetMaintenanceLock('))
52
+ .toBeLessThan(body.indexOf('startSchemaRefreshPipelineDetached('));
53
+ });
54
+
55
+ it('uses the read-write provider, since the pipeline writes the catalog', () => {
56
+ expect(methodBody('IntegrationStartSchemaRefresh')).toMatch(/GetReadWriteProvider\(/);
57
+ });
58
+
59
+ it('is a separate mutation, so the synchronous one keeps its real-counts contract', () => {
60
+ // the synchronous reply promises counts because it waited; a detached launch has only zeros
61
+ expect(SRC).toMatch(/async IntegrationRefreshConnectorSchema\(/);
62
+ const detached = methodBody('IntegrationStartSchemaRefresh');
63
+ expect(detached).not.toMatch(/ObjectsCreated/);
64
+ });
65
+ });
@@ -0,0 +1,73 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import type { IMetadataProvider, UserInfo } from '@memberjunction/core';
3
+
4
+ const { submitMock } = vi.hoisted(() => ({
5
+ submitMock: vi.fn(),
6
+ }));
7
+
8
+ vi.mock('@memberjunction/task-graph', () => ({
9
+ TaskGraphService: class {
10
+ public Submit = submitMock;
11
+ },
12
+ }));
13
+
14
+ import { DurableEntityActionTaskSubmitter } from '../services/DurableEntityActionTaskSubmitter.js';
15
+
16
+ describe('DurableEntityActionTaskSubmitter', () => {
17
+ const contextUser = { ID: 'user-1', Email: 'test@example.com' } as UserInfo;
18
+
19
+ beforeEach(() => {
20
+ submitMock.mockReset();
21
+ submitMock.mockResolvedValue({ Success: true, ParentTaskID: 'parent-task-1' });
22
+ });
23
+
24
+ it('enlists in request.Provider when supplied instead of minting an isolated provider connection', async () => {
25
+ const savingProvider = { Name: 'saving-tx-provider', GetEntityObject: vi.fn() } as object as IMetadataProvider;
26
+ const createProvider = vi.fn();
27
+ const submitter = new DurableEntityActionTaskSubmitter({ CreateProvider: createProvider }, 'env-1');
28
+
29
+ const result = await submitter.Submit({
30
+ EntityActionID: 'ea-1',
31
+ ActionID: 'act-1',
32
+ ActionName: 'Send Order Webhook',
33
+ EntityID: 'ent-1',
34
+ EntityName: 'Orders',
35
+ RecordID: 'ID|ord-1',
36
+ InvocationType: 'AfterCreate',
37
+ RedactedParams: { OrderID: 'ord-1' },
38
+ ContextUser: contextUser,
39
+ Provider: savingProvider,
40
+ });
41
+
42
+ expect(result).toEqual({ Success: true, ParentTaskID: 'parent-task-1' });
43
+ expect(createProvider).not.toHaveBeenCalled();
44
+ expect(submitMock).toHaveBeenCalledTimes(1);
45
+ expect(submitMock.mock.calls[0][1]).toMatchObject({
46
+ EnvironmentID: 'env-1',
47
+ ContextUser: contextUser,
48
+ Provider: savingProvider,
49
+ });
50
+ });
51
+
52
+ it('falls back to providerFactory.CreateProvider() when request.Provider is omitted', async () => {
53
+ const factoryProvider = { Name: 'factory-provider' } as IMetadataProvider;
54
+ const createProvider = vi.fn().mockResolvedValue(factoryProvider);
55
+ const submitter = new DurableEntityActionTaskSubmitter({ CreateProvider: createProvider }, 'env-1');
56
+
57
+ const result = await submitter.Submit({
58
+ EntityActionID: 'ea-1',
59
+ ActionID: 'act-1',
60
+ ActionName: 'Send Order Webhook',
61
+ EntityID: 'ent-1',
62
+ EntityName: 'Orders',
63
+ RecordID: 'ID|ord-1',
64
+ InvocationType: 'AfterCreate',
65
+ RedactedParams: {},
66
+ ContextUser: contextUser,
67
+ });
68
+
69
+ expect(result).toEqual({ Success: true, ParentTaskID: 'parent-task-1' });
70
+ expect(createProvider).toHaveBeenCalledTimes(1);
71
+ expect(submitMock.mock.calls[0][1]).toMatchObject({ Provider: factoryProvider });
72
+ });
73
+ });
@@ -0,0 +1,151 @@
1
+ // The resolver module pulls in type-graphql decorators, which need the Reflect.metadata polyfill.
2
+ import 'reflect-metadata';
3
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
4
+ import type { DatabaseProviderBase, UserInfo } from '@memberjunction/core';
5
+ import type { EntityCommunicationParams } from '@memberjunction/entity-communications-base';
6
+
7
+ /**
8
+ * `RunEntityCommunicationByViewID` with `previewOnly` + `includeProcessedMessages` returns the rows
9
+ * it read. It must hand the engine the authenticated caller as the acting user, and screen the
10
+ * view's client-supplied clauses the way a RunView request is screened, because this entry point
11
+ * does not pass through the RunView resolvers.
12
+ */
13
+
14
+ const { captured } = vi.hoisted(() => ({ captured: { params: [] as EntityCommunicationParams[] } }));
15
+
16
+ // The resolver's input types declare fields without explicit GraphQL types; the test runner emits no
17
+ // decorator metadata, so the decorators are stubbed out.
18
+ vi.mock('type-graphql', () => {
19
+ const noopDecorator = () => () => undefined;
20
+ return {
21
+ Resolver: noopDecorator, Mutation: noopDecorator, Query: noopDecorator, Subscription: noopDecorator,
22
+ ObjectType: noopDecorator, InputType: noopDecorator, Field: noopDecorator, Arg: noopDecorator,
23
+ Args: noopDecorator, Ctx: noopDecorator, PubSub: noopDecorator, Root: noopDecorator,
24
+ Directive: noopDecorator, Authorized: noopDecorator, UseMiddleware: noopDecorator,
25
+ createUnionType: () => class {},
26
+ AuthorizationError: class AuthorizationError extends Error {},
27
+ Float: class {}, Int: class {}, ID: class {},
28
+ };
29
+ });
30
+
31
+ vi.mock('@memberjunction/entity-communications-server', () => ({
32
+ EntityCommunicationsEngine: {
33
+ Instance: {
34
+ Config: vi.fn(),
35
+ RunEntityCommunication: vi.fn(async (params: EntityCommunicationParams) => {
36
+ captured.params.push(params);
37
+ return { Success: true, Results: [] };
38
+ }),
39
+ },
40
+ },
41
+ }));
42
+
43
+ vi.mock('@memberjunction/templates', () => ({
44
+ TemplateEngineServer: { Instance: { Config: vi.fn(), FindTemplate: vi.fn() } },
45
+ }));
46
+
47
+ import { ReportResolver } from '../resolvers/EntityCommunicationsResolver.js';
48
+ import type { AppContext } from '../types.js';
49
+ import type { RunViewByIDInput } from '../generic/RunViewResolver.js';
50
+ import type { CommunicationMessageInput } from '../resolvers/EntityCommunicationsResolver.js';
51
+
52
+ const SENDER = { ID: 'sender', Email: 'sender@example.com' } as UserInfo;
53
+
54
+ /** Entity metadata the clause screen reads: one entity the sender can read, one it cannot. */
55
+ function fakeProvider(): DatabaseProviderBase {
56
+ const entity = (name: string, view: string, canRead: boolean) => ({
57
+ ID: name,
58
+ Name: name,
59
+ SchemaName: '__mj',
60
+ BaseView: view,
61
+ BaseTable: view.replace(/^vw/, ''),
62
+ Fields: [{ Name: 'ID', NeedsQuotes: true }, { Name: 'Email', NeedsQuotes: true }],
63
+ GetUserPermisions: () => ({ CanRead: canRead }),
64
+ GetEffectiveRowFilterWhereClause: () => '',
65
+ GetDeniedReadFields: () => new Set<string>(),
66
+ });
67
+ return {
68
+ Entities: [entity('Customers', 'vwCustomers', true), entity('Salaries', 'vwSalaries', false)],
69
+ GetEntityObject: async () => fakeView(),
70
+ } as unknown as DatabaseProviderBase;
71
+ }
72
+
73
+ /** Saved views by ID, as the caller can load them: `view-1` is a Customers view, `view-salaries` is not. */
74
+ const VIEWS: Record<string, { ID: string; EntityID: string }> = {
75
+ 'view-1': { ID: 'view-1', EntityID: 'Customers' },
76
+ 'view-salaries': { ID: 'view-salaries', EntityID: 'Salaries' },
77
+ };
78
+
79
+ function fakeView() {
80
+ const view = {
81
+ ID: undefined as string | undefined,
82
+ EntityID: undefined as string | undefined,
83
+ async Load(id: string) {
84
+ const found = VIEWS[id];
85
+ if (!found) return false;
86
+ Object.assign(view, found);
87
+ return true;
88
+ },
89
+ };
90
+ return view;
91
+ }
92
+
93
+ function context(): AppContext {
94
+ return {
95
+ userPayload: { email: SENDER.Email, userRecord: SENDER },
96
+ providers: [{ provider: fakeProvider(), type: 'Read-Write' }],
97
+ } as unknown as AppContext;
98
+ }
99
+
100
+ function run(extraFilter?: string, viewID = 'view-1') {
101
+ const viewInput = { ViewID: viewID, ExtraFilter: extraFilter } as RunViewByIDInput;
102
+ const message = { MessageType: {}, From: 'a@example.com', To: '' } as unknown as CommunicationMessageInput;
103
+ return new ReportResolver().RunEntityCommunicationByViewID('Customers', viewInput, 'SendGrid', 'Email', message, true, true, context());
104
+ }
105
+
106
+ describe('RunEntityCommunicationByViewID — runs as the caller', () => {
107
+ beforeEach(() => {
108
+ captured.params = [];
109
+ });
110
+
111
+ it('passes the authenticated caller to the engine as the acting user', async () => {
112
+ const result = await run();
113
+ expect(result.Success).toBe(true);
114
+ expect(captured.params).toHaveLength(1);
115
+ expect(captured.params[0].ContextUser).toBe(SENDER);
116
+ });
117
+
118
+ it('refuses an ExtraFilter whose subquery reads an entity the caller cannot read, before the engine runs', async () => {
119
+ const result = await run("ID IN (SELECT ID FROM __mj.vwSalaries WHERE Amount > 100000)");
120
+ expect(result.Success).toBe(false);
121
+ expect(result.ErrorMessage).toMatch(/ExtraFilter/);
122
+ expect(captured.params).toHaveLength(0);
123
+ });
124
+
125
+ it('refuses an ExtraFilter that carries a second statement', async () => {
126
+ const result = await run("1=1; SELECT 1");
127
+ expect(result.Success).toBe(false);
128
+ expect(captured.params).toHaveLength(0);
129
+ });
130
+ });
131
+
132
+ describe('RunEntityCommunicationByViewID — the view must belong to the entity', () => {
133
+ beforeEach(() => {
134
+ captured.params = [];
135
+ });
136
+
137
+ it('refuses a view of a different entity, before the engine runs', async () => {
138
+ const result = await run(undefined, 'view-salaries');
139
+ expect(result.Success).toBe(false);
140
+ expect(captured.params).toHaveLength(0);
141
+ });
142
+
143
+ it('gives the same error for a view of another entity as for a view that does not exist', async () => {
144
+ const mismatched = await run(undefined, 'view-salaries');
145
+ const missing = await run(undefined, 'view-missing');
146
+ expect(missing.Success).toBe(false);
147
+ expect(mismatched.ErrorMessage).toBe(missing.ErrorMessage);
148
+ expect(mismatched.ErrorMessage).toMatch(/does not exist or you do not have access/);
149
+ expect(captured.params).toHaveLength(0);
150
+ });
151
+ });