@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,144 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { createHash, createHmac } from 'node:crypto';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { BaseCacheInvalidationBroadcastProvider, } from '../BaseCacheInvalidationBroadcastProvider.js';
10
+ /**
11
+ * Topology 3 Cloud Multiplexer Provider for **AWS IoT Core MQTT over WebSockets** (`'AWSIoTCore'`).
12
+ *
13
+ * Offloads per-client WebSocket connection management and message fan-out from MJServer
14
+ * to AWS IoT Core's managed MQTT message broker:
15
+ * - Each authenticated browser client calls `NegotiateCacheBroadcastConnection` to obtain
16
+ * a SigV4-presigned `wss://<endpoint>/mqtt` URL and its authorized MQTT topic list
17
+ * (`<topicPrefix>/roles/<RoleID>`).
18
+ * - When an entity mutation occurs, MJServer shapes the invalidation payload once per
19
+ * authorized role on the entity and publishes to `<topicPrefix>/roles/<RoleID>`.
20
+ */
21
+ let AWSIoTCoreBroadcastProvider = class AWSIoTCoreBroadcastProvider extends BaseCacheInvalidationBroadcastProvider {
22
+ constructor() {
23
+ super(...arguments);
24
+ this._topicPublisher = null;
25
+ }
26
+ get Topology() {
27
+ return 'AWSIoTCore';
28
+ }
29
+ /**
30
+ * Installs a custom MQTT topic publisher (e.g., AWS SDK `IoTDataPlaneClient` adapter or test spy).
31
+ */
32
+ SetTopicPublisher(publisher) {
33
+ this._topicPublisher = publisher;
34
+ }
35
+ /**
36
+ * Computes the MQTT topic filters (`<topicPrefix>/roles/<roleId>`) for a user's roles.
37
+ */
38
+ GetAuthorizedTopicsForUser(user) {
39
+ const prefix = (this._config.awsIoTCore?.topicPrefix || 'mj/cache').replace(/\/+$/, '');
40
+ const roles = user.UserRoles ?? [];
41
+ const topics = [];
42
+ for (const r of roles) {
43
+ const roleId = (r.RoleID ?? '').trim().toLowerCase();
44
+ if (roleId.length > 0) {
45
+ topics.push(`${prefix}/roles/${roleId}`);
46
+ }
47
+ }
48
+ topics.sort();
49
+ return topics;
50
+ }
51
+ async OnInvalidationRecorded(payload) {
52
+ const prefix = (this._config.awsIoTCore?.topicPrefix || 'mj/cache').replace(/\/+$/, '');
53
+ const entity = this.ResolveEntityForPayload(payload);
54
+ if (!entity) {
55
+ return;
56
+ }
57
+ for (const perm of entity.Permissions) {
58
+ if (!perm.CanRead)
59
+ continue;
60
+ const roleId = (perm.RoleID ?? '').trim().toLowerCase();
61
+ if (!roleId)
62
+ continue;
63
+ const syntheticRoleHolder = { UserRoles: [{ RoleID: roleId }] };
64
+ const shaped = this.ShapeEventForSubscriber(payload, syntheticRoleHolder, entity);
65
+ const message = {
66
+ Topic: `${prefix}/roles/${roleId}`,
67
+ QoS: 1,
68
+ Event: shaped,
69
+ };
70
+ if (this._topicPublisher) {
71
+ await this._topicPublisher(message);
72
+ }
73
+ }
74
+ }
75
+ async NegotiateClientConnection(user, defaultGraphQLWsUrl = '/graphql') {
76
+ const endpoint = (this._config.awsIoTCore?.endpoint ?? '').replace(/^https?:\/\//i, '').replace(/\/+$/, '');
77
+ const region = this._config.awsIoTCore?.region || 'us-east-1';
78
+ const ttlSeconds = this._config.awsIoTCore?.tokenTtlSeconds ?? 3600;
79
+ const expiresAtMs = Date.now() + ttlSeconds * 1000;
80
+ const topics = this.GetAuthorizedTopicsForUser(user);
81
+ if (!endpoint) {
82
+ return {
83
+ Provider: this.Topology,
84
+ Url: defaultGraphQLWsUrl,
85
+ Groups: topics,
86
+ ExpiresAt: new Date(expiresAtMs).toISOString(),
87
+ ServerProcessID: this.ServerProcessID,
88
+ CurrentSequence: this.CurrentSequence,
89
+ };
90
+ }
91
+ const accessKeyId = this._config.awsIoTCore?.accessKeyId;
92
+ const secretAccessKey = this._config.awsIoTCore?.secretAccessKey;
93
+ const presignedUrl = accessKeyId && secretAccessKey
94
+ ? this.buildSigV4PresignedMqttUrl(endpoint, region, accessKeyId, secretAccessKey, ttlSeconds)
95
+ : `wss://${endpoint}/mqtt`;
96
+ return {
97
+ Provider: this.Topology,
98
+ Url: presignedUrl,
99
+ Groups: topics,
100
+ ExpiresAt: new Date(expiresAtMs).toISOString(),
101
+ ServerProcessID: this.ServerProcessID,
102
+ CurrentSequence: this.CurrentSequence,
103
+ };
104
+ }
105
+ buildSigV4PresignedMqttUrl(host, region, accessKeyId, secretAccessKey, expiresSeconds) {
106
+ const now = new Date();
107
+ const amzDate = now.toISOString().replace(/[:-]|\.\d{3}/g, '');
108
+ const dateStamp = amzDate.slice(0, 8);
109
+ const service = 'iotdevicegateway';
110
+ const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;
111
+ const queryParams = [
112
+ `X-Amz-Algorithm=AWS4-HMAC-SHA256`,
113
+ `X-Amz-Credential=${encodeURIComponent(`${accessKeyId}/${credentialScope}`)}`,
114
+ `X-Amz-Date=${amzDate}`,
115
+ `X-Amz-Expires=${expiresSeconds}`,
116
+ `X-Amz-SignedHeaders=host`,
117
+ ].join('&');
118
+ const canonicalRequest = [
119
+ 'GET',
120
+ '/mqtt',
121
+ queryParams,
122
+ `host:${host}\n`,
123
+ 'host',
124
+ createHash('sha256').update('').digest('hex'),
125
+ ].join('\n');
126
+ const stringToSign = [
127
+ 'AWS4-HMAC-SHA256',
128
+ amzDate,
129
+ credentialScope,
130
+ createHash('sha256').update(canonicalRequest).digest('hex'),
131
+ ].join('\n');
132
+ const kDate = createHmac('sha256', `AWS4${secretAccessKey}`).update(dateStamp).digest();
133
+ const kRegion = createHmac('sha256', kDate).update(region).digest();
134
+ const kService = createHmac('sha256', kRegion).update(service).digest();
135
+ const kSigning = createHmac('sha256', kService).update('aws4_request').digest();
136
+ const signature = createHmac('sha256', kSigning).update(stringToSign).digest('hex');
137
+ return `wss://${host}/mqtt?${queryParams}&X-Amz-Signature=${signature}`;
138
+ }
139
+ };
140
+ AWSIoTCoreBroadcastProvider = __decorate([
141
+ RegisterClass(BaseCacheInvalidationBroadcastProvider, 'AWSIoTCore')
142
+ ], AWSIoTCoreBroadcastProvider);
143
+ export { AWSIoTCoreBroadcastProvider };
144
+ //# sourceMappingURL=AWSIoTCoreBroadcastProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AWSIoTCoreBroadcastProvider.js","sourceRoot":"","sources":["../../../src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { UserInfo } from '@memberjunction/core';
2
+ import { BaseCacheInvalidationBroadcastProvider, CacheBroadcastNegotiationResult, CacheInvalidationBroadcastTopology } from '../BaseCacheInvalidationBroadcastProvider.js';
3
+ import type { CacheInvalidationNotification, CacheInvalidationPayload } from '../../generic/CacheInvalidationResolver.js';
4
+ /**
5
+ * Envelope published to an Azure Web PubSub role group.
6
+ */
7
+ export interface AzureWebPubSubGroupMessage {
8
+ HubName: string;
9
+ GroupName: string;
10
+ Event: CacheInvalidationNotification;
11
+ }
12
+ /**
13
+ * Transport callback used by {@link AzureWebPubSubBroadcastProvider} to deliver a shaped
14
+ * invalidation notification to an Azure Web PubSub group.
15
+ */
16
+ export type AzureWebPubSubGroupPublisher = (message: AzureWebPubSubGroupMessage) => Promise<void>;
17
+ /**
18
+ * Topology 3 Cloud Multiplexer Provider for **Azure Web PubSub** (`'AzureWebPubSub'`).
19
+ *
20
+ * Offloads per-client WebSocket connection management and message fan-out from MJServer
21
+ * to Azure Web PubSub:
22
+ * - Each authenticated browser client calls `NegotiateCacheBroadcastConnection` to receive
23
+ * a short-lived, HMAC-signed JWT access token scoped to its authorized role groups (`mj-role-<RoleID>`).
24
+ * - When an entity mutation occurs, MJServer shapes the invalidation payload once per
25
+ * authorized role group on the entity and publishes a single group broadcast to Azure Web PubSub,
26
+ * which fans the message out to thousands of connected browsers in C++ edge infrastructure.
27
+ */
28
+ export declare class AzureWebPubSubBroadcastProvider extends BaseCacheInvalidationBroadcastProvider {
29
+ private _groupPublisher;
30
+ get Topology(): CacheInvalidationBroadcastTopology;
31
+ /**
32
+ * Installs a custom group publisher (e.g., Azure WebPubSubServiceClient adapter or test spy).
33
+ * When unset and an HTTP endpoint + accessKey are configured, defaults to the Azure Web PubSub
34
+ * REST Data Plane API (`POST /api/hubs/{hub}/groups/{group}/:send`).
35
+ */
36
+ SetGroupPublisher(publisher: AzureWebPubSubGroupPublisher | null): void;
37
+ /**
38
+ * Computes the Azure Web PubSub group names (`mj-role-<roleId>`) for a user's roles.
39
+ */
40
+ GetAuthorizedGroupsForUser(user: UserInfo): string[];
41
+ protected OnInvalidationRecorded(payload: CacheInvalidationPayload): Promise<void>;
42
+ NegotiateClientConnection(user: UserInfo, defaultGraphQLWsUrl?: string): Promise<CacheBroadcastNegotiationResult>;
43
+ private mintJwtToken;
44
+ private publishViaRestApi;
45
+ }
46
+ //# sourceMappingURL=AzureWebPubSubBroadcastProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AzureWebPubSubBroadcastProvider.d.ts","sourceRoot":"","sources":["../../../src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACH,sCAAsC,EACtC,+BAA+B,EAC/B,kCAAkC,EACrC,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EACR,6BAA6B,EAC7B,wBAAwB,EAC3B,MAAM,4CAA4C,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,6BAA6B,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElG;;;;;;;;;;GAUG;AACH,qBACa,+BAAgC,SAAQ,sCAAsC;IACvF,OAAO,CAAC,eAAe,CAA6C;IAEpE,IAAoB,QAAQ,IAAI,kCAAkC,CAEjE;IAED;;;;OAIG;IACI,iBAAiB,CAAC,SAAS,EAAE,4BAA4B,GAAG,IAAI,GAAG,IAAI;IAI9E;;OAEG;IACI,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE;cAalC,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B3E,yBAAyB,CAC3C,IAAI,EAAE,QAAQ,EACd,mBAAmB,SAAa,GACjC,OAAO,CAAC,+BAA+B,CAAC;IAuC3C,OAAO,CAAC,YAAY;YAsBN,iBAAiB;CAgBlC"}
@@ -0,0 +1,149 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { createHmac } from 'node:crypto';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { BaseCacheInvalidationBroadcastProvider, } from '../BaseCacheInvalidationBroadcastProvider.js';
10
+ /**
11
+ * Topology 3 Cloud Multiplexer Provider for **Azure Web PubSub** (`'AzureWebPubSub'`).
12
+ *
13
+ * Offloads per-client WebSocket connection management and message fan-out from MJServer
14
+ * to Azure Web PubSub:
15
+ * - Each authenticated browser client calls `NegotiateCacheBroadcastConnection` to receive
16
+ * a short-lived, HMAC-signed JWT access token scoped to its authorized role groups (`mj-role-<RoleID>`).
17
+ * - When an entity mutation occurs, MJServer shapes the invalidation payload once per
18
+ * authorized role group on the entity and publishes a single group broadcast to Azure Web PubSub,
19
+ * which fans the message out to thousands of connected browsers in C++ edge infrastructure.
20
+ */
21
+ let AzureWebPubSubBroadcastProvider = class AzureWebPubSubBroadcastProvider extends BaseCacheInvalidationBroadcastProvider {
22
+ constructor() {
23
+ super(...arguments);
24
+ this._groupPublisher = null;
25
+ }
26
+ get Topology() {
27
+ return 'AzureWebPubSub';
28
+ }
29
+ /**
30
+ * Installs a custom group publisher (e.g., Azure WebPubSubServiceClient adapter or test spy).
31
+ * When unset and an HTTP endpoint + accessKey are configured, defaults to the Azure Web PubSub
32
+ * REST Data Plane API (`POST /api/hubs/{hub}/groups/{group}/:send`).
33
+ */
34
+ SetGroupPublisher(publisher) {
35
+ this._groupPublisher = publisher;
36
+ }
37
+ /**
38
+ * Computes the Azure Web PubSub group names (`mj-role-<roleId>`) for a user's roles.
39
+ */
40
+ GetAuthorizedGroupsForUser(user) {
41
+ const roles = user.UserRoles ?? [];
42
+ const groups = [];
43
+ for (const r of roles) {
44
+ const roleId = (r.RoleID ?? '').trim().toLowerCase();
45
+ if (roleId.length > 0) {
46
+ groups.push(`mj-role-${roleId}`);
47
+ }
48
+ }
49
+ groups.sort();
50
+ return groups;
51
+ }
52
+ async OnInvalidationRecorded(payload) {
53
+ const hubName = this._config.azureWebPubSub?.hubName || 'mj_cache_hub';
54
+ const entity = this.ResolveEntityForPayload(payload);
55
+ if (!entity) {
56
+ return;
57
+ }
58
+ // Group entity permissions by RoleID and shape once per authorized role
59
+ for (const perm of entity.Permissions) {
60
+ if (!perm.CanRead)
61
+ continue;
62
+ const roleId = (perm.RoleID ?? '').trim().toLowerCase();
63
+ if (!roleId)
64
+ continue;
65
+ const syntheticRoleHolder = { UserRoles: [{ RoleID: roleId }] };
66
+ const shaped = this.ShapeEventForSubscriber(payload, syntheticRoleHolder, entity);
67
+ const message = {
68
+ HubName: hubName,
69
+ GroupName: `mj-role-${roleId}`,
70
+ Event: shaped,
71
+ };
72
+ if (this._groupPublisher) {
73
+ await this._groupPublisher(message);
74
+ }
75
+ else if (this._config.azureWebPubSub?.endpoint && this._config.azureWebPubSub?.accessKey) {
76
+ await this.publishViaRestApi(message);
77
+ }
78
+ }
79
+ }
80
+ async NegotiateClientConnection(user, defaultGraphQLWsUrl = '/graphql') {
81
+ const endpoint = (this._config.azureWebPubSub?.endpoint ?? '').replace(/\/+$/, '');
82
+ const hubName = this._config.azureWebPubSub?.hubName || 'mj_cache_hub';
83
+ const accessKey = this._config.azureWebPubSub?.accessKey || '';
84
+ const ttlMinutes = this._config.azureWebPubSub?.tokenTtlMinutes ?? 60;
85
+ const expiresAtMs = Date.now() + ttlMinutes * 60 * 1000;
86
+ const groups = this.GetAuthorizedGroupsForUser(user);
87
+ if (!endpoint) {
88
+ return {
89
+ Provider: this.Topology,
90
+ Url: defaultGraphQLWsUrl,
91
+ Groups: groups,
92
+ ExpiresAt: new Date(expiresAtMs).toISOString(),
93
+ ServerProcessID: this.ServerProcessID,
94
+ CurrentSequence: this.CurrentSequence,
95
+ };
96
+ }
97
+ const wsEndpoint = endpoint.replace(/^http:/i, 'ws:').replace(/^https:/i, 'wss:');
98
+ const audience = `${endpoint}/client/hubs/${hubName}`;
99
+ const token = accessKey
100
+ ? this.mintJwtToken(audience, user.ID, groups, Math.floor(expiresAtMs / 1000), accessKey)
101
+ : undefined;
102
+ const url = token
103
+ ? `${wsEndpoint}/client/hubs/${hubName}?access_token=${encodeURIComponent(token)}`
104
+ : `${wsEndpoint}/client/hubs/${hubName}`;
105
+ return {
106
+ Provider: this.Topology,
107
+ Url: url,
108
+ Token: token,
109
+ Groups: groups,
110
+ ExpiresAt: new Date(expiresAtMs).toISOString(),
111
+ ServerProcessID: this.ServerProcessID,
112
+ CurrentSequence: this.CurrentSequence,
113
+ };
114
+ }
115
+ mintJwtToken(audience, subject, groups, expSeconds, secret) {
116
+ const header = Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT' })).toString('base64url');
117
+ const claims = Buffer.from(JSON.stringify({
118
+ aud: audience,
119
+ sub: subject,
120
+ iat: Math.floor(Date.now() / 1000),
121
+ exp: expSeconds,
122
+ role: groups.map((g) => `webpubsub.joinLeaveGroup.${g}`),
123
+ })).toString('base64url');
124
+ const signingInput = `${header}.${claims}`;
125
+ const signature = createHmac('sha256', secret).update(signingInput).digest('base64url');
126
+ return `${signingInput}.${signature}`;
127
+ }
128
+ async publishViaRestApi(message) {
129
+ const endpoint = (this._config.azureWebPubSub?.endpoint ?? '').replace(/\/+$/, '');
130
+ const accessKey = this._config.azureWebPubSub?.accessKey ?? '';
131
+ if (!endpoint || !accessKey)
132
+ return;
133
+ const targetUrl = `${endpoint}/api/hubs/${encodeURIComponent(message.HubName)}/groups/${encodeURIComponent(message.GroupName)}/:send?api-version=2024-01-01`;
134
+ const token = this.mintJwtToken(targetUrl, 'mj-server', [], Math.floor(Date.now() / 1000) + 300, accessKey);
135
+ await fetch(targetUrl, {
136
+ method: 'POST',
137
+ headers: {
138
+ Authorization: `Bearer ${token}`,
139
+ 'Content-Type': 'application/json',
140
+ },
141
+ body: JSON.stringify(message.Event),
142
+ });
143
+ }
144
+ };
145
+ AzureWebPubSubBroadcastProvider = __decorate([
146
+ RegisterClass(BaseCacheInvalidationBroadcastProvider, 'AzureWebPubSub')
147
+ ], AzureWebPubSubBroadcastProvider);
148
+ export { AzureWebPubSubBroadcastProvider };
149
+ //# sourceMappingURL=AzureWebPubSubBroadcastProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AzureWebPubSubBroadcastProvider.js","sourceRoot":"","sources":["../../../src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { UserInfo } from '@memberjunction/core';
2
+ import { BaseCacheInvalidationBroadcastProvider, CacheBroadcastNegotiationResult, CacheInvalidationBroadcastTopology } from '../BaseCacheInvalidationBroadcastProvider.js';
3
+ import type { CacheInvalidationNotification, CacheInvalidationPayload } from '../../generic/CacheInvalidationResolver.js';
4
+ /**
5
+ * Envelope published to a Google Cloud Pub/Sub role topic.
6
+ */
7
+ export interface GCPPubSubTopicMessage {
8
+ ProjectId: string;
9
+ TopicName: string;
10
+ Attributes: {
11
+ roleId: string;
12
+ entityName: string;
13
+ action: string;
14
+ sequence: string;
15
+ };
16
+ Event: CacheInvalidationNotification;
17
+ }
18
+ /**
19
+ * Transport callback used by {@link GCPPubSubBroadcastProvider} to publish a shaped
20
+ * invalidation notification to Google Cloud Pub/Sub.
21
+ */
22
+ export type GCPPubSubTopicPublisher = (message: GCPPubSubTopicMessage) => Promise<void>;
23
+ /**
24
+ * Topology 3 Cloud Multiplexer Provider for **Google Cloud Pub/Sub + Cloud Run WebSockets** (`'GCPPubSub'`).
25
+ *
26
+ * Offloads per-client WebSocket connection management and message fan-out from MJServer
27
+ * to a Google Cloud Pub/Sub + Cloud Run WebSocket fan-out gateway:
28
+ * - Each authenticated browser client calls `NegotiateCacheBroadcastConnection` to obtain
29
+ * a signed gateway token and its authorized Pub/Sub role subscription attributes
30
+ * (`projects/<projectId>/topics/<topicPrefix>-role-<RoleID>`).
31
+ * - When an entity mutation occurs, MJServer shapes the invalidation payload once per
32
+ * authorized role on the entity and publishes a message with Pub/Sub filtering attributes.
33
+ */
34
+ export declare class GCPPubSubBroadcastProvider extends BaseCacheInvalidationBroadcastProvider {
35
+ private _topicPublisher;
36
+ get Topology(): CacheInvalidationBroadcastTopology;
37
+ /**
38
+ * Installs a custom Google Cloud Pub/Sub topic publisher (e.g., `@google-cloud/pubsub` adapter or test spy).
39
+ */
40
+ SetTopicPublisher(publisher: GCPPubSubTopicPublisher | null): void;
41
+ /**
42
+ * Computes the fully-qualified GCP Pub/Sub topic names for a user's roles.
43
+ */
44
+ GetAuthorizedTopicsForUser(user: UserInfo): string[];
45
+ protected OnInvalidationRecorded(payload: CacheInvalidationPayload): Promise<void>;
46
+ NegotiateClientConnection(user: UserInfo, defaultGraphQLWsUrl?: string): Promise<CacheBroadcastNegotiationResult>;
47
+ private mintGatewayToken;
48
+ }
49
+ //# sourceMappingURL=GCPPubSubBroadcastProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GCPPubSubBroadcastProvider.d.ts","sourceRoot":"","sources":["../../../src/broadcast/providers/GCPPubSubBroadcastProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACH,sCAAsC,EACtC,+BAA+B,EAC/B,kCAAkC,EACrC,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EACR,6BAA6B,EAC7B,wBAAwB,EAC3B,MAAM,4CAA4C,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,EAAE,6BAA6B,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAExF;;;;;;;;;;GAUG;AACH,qBACa,0BAA2B,SAAQ,sCAAsC;IAClF,OAAO,CAAC,eAAe,CAAwC;IAE/D,IAAoB,QAAQ,IAAI,kCAAkC,CAEjE;IAED;;OAEG;IACI,iBAAiB,CAAC,SAAS,EAAE,uBAAuB,GAAG,IAAI,GAAG,IAAI;IAIzE;;OAEG;IACI,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE;cAelC,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC3E,yBAAyB,CAC3C,IAAI,EAAE,QAAQ,EACd,mBAAmB,SAAa,GACjC,OAAO,CAAC,+BAA+B,CAAC;IAmC3C,OAAO,CAAC,gBAAgB;CAmB3B"}
@@ -0,0 +1,131 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { createHmac } from 'node:crypto';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { BaseCacheInvalidationBroadcastProvider, } from '../BaseCacheInvalidationBroadcastProvider.js';
10
+ /**
11
+ * Topology 3 Cloud Multiplexer Provider for **Google Cloud Pub/Sub + Cloud Run WebSockets** (`'GCPPubSub'`).
12
+ *
13
+ * Offloads per-client WebSocket connection management and message fan-out from MJServer
14
+ * to a Google Cloud Pub/Sub + Cloud Run WebSocket fan-out gateway:
15
+ * - Each authenticated browser client calls `NegotiateCacheBroadcastConnection` to obtain
16
+ * a signed gateway token and its authorized Pub/Sub role subscription attributes
17
+ * (`projects/<projectId>/topics/<topicPrefix>-role-<RoleID>`).
18
+ * - When an entity mutation occurs, MJServer shapes the invalidation payload once per
19
+ * authorized role on the entity and publishes a message with Pub/Sub filtering attributes.
20
+ */
21
+ let GCPPubSubBroadcastProvider = class GCPPubSubBroadcastProvider extends BaseCacheInvalidationBroadcastProvider {
22
+ constructor() {
23
+ super(...arguments);
24
+ this._topicPublisher = null;
25
+ }
26
+ get Topology() {
27
+ return 'GCPPubSub';
28
+ }
29
+ /**
30
+ * Installs a custom Google Cloud Pub/Sub topic publisher (e.g., `@google-cloud/pubsub` adapter or test spy).
31
+ */
32
+ SetTopicPublisher(publisher) {
33
+ this._topicPublisher = publisher;
34
+ }
35
+ /**
36
+ * Computes the fully-qualified GCP Pub/Sub topic names for a user's roles.
37
+ */
38
+ GetAuthorizedTopicsForUser(user) {
39
+ const projectId = this._config.gcpPubSub?.projectId || 'mj-default-project';
40
+ const prefix = this._config.gcpPubSub?.topicPrefix || 'mj-cache';
41
+ const roles = user.UserRoles ?? [];
42
+ const topics = [];
43
+ for (const r of roles) {
44
+ const roleId = (r.RoleID ?? '').trim().toLowerCase();
45
+ if (roleId.length > 0) {
46
+ topics.push(`projects/${projectId}/topics/${prefix}-role-${roleId}`);
47
+ }
48
+ }
49
+ topics.sort();
50
+ return topics;
51
+ }
52
+ async OnInvalidationRecorded(payload) {
53
+ const projectId = this._config.gcpPubSub?.projectId || 'mj-default-project';
54
+ const prefix = this._config.gcpPubSub?.topicPrefix || 'mj-cache';
55
+ const entity = this.ResolveEntityForPayload(payload);
56
+ if (!entity) {
57
+ return;
58
+ }
59
+ for (const perm of entity.Permissions) {
60
+ if (!perm.CanRead)
61
+ continue;
62
+ const roleId = (perm.RoleID ?? '').trim().toLowerCase();
63
+ if (!roleId)
64
+ continue;
65
+ const syntheticRoleHolder = { UserRoles: [{ RoleID: roleId }] };
66
+ const shaped = this.ShapeEventForSubscriber(payload, syntheticRoleHolder, entity);
67
+ const message = {
68
+ ProjectId: projectId,
69
+ TopicName: `projects/${projectId}/topics/${prefix}-role-${roleId}`,
70
+ Attributes: {
71
+ roleId,
72
+ entityName: payload.entityName,
73
+ action: payload.action,
74
+ sequence: String(payload.sequence ?? 0),
75
+ },
76
+ Event: shaped,
77
+ };
78
+ if (this._topicPublisher) {
79
+ await this._topicPublisher(message);
80
+ }
81
+ }
82
+ }
83
+ async NegotiateClientConnection(user, defaultGraphQLWsUrl = '/graphql') {
84
+ const gatewayUrl = (this._config.gcpPubSub?.gatewayUrl ?? '').replace(/\/+$/, '');
85
+ const signingSecret = this._config.gcpPubSub?.signingSecret || '';
86
+ const ttlSeconds = this._config.gcpPubSub?.tokenTtlSeconds ?? 3600;
87
+ const expiresAtMs = Date.now() + ttlSeconds * 1000;
88
+ const topics = this.GetAuthorizedTopicsForUser(user);
89
+ if (!gatewayUrl) {
90
+ return {
91
+ Provider: this.Topology,
92
+ Url: defaultGraphQLWsUrl,
93
+ Groups: topics,
94
+ ExpiresAt: new Date(expiresAtMs).toISOString(),
95
+ ServerProcessID: this.ServerProcessID,
96
+ CurrentSequence: this.CurrentSequence,
97
+ };
98
+ }
99
+ const wsGatewayUrl = gatewayUrl.replace(/^http:/i, 'ws:').replace(/^https:/i, 'wss:');
100
+ const token = signingSecret
101
+ ? this.mintGatewayToken(user.ID, topics, Math.floor(expiresAtMs / 1000), signingSecret)
102
+ : undefined;
103
+ const url = token ? `${wsGatewayUrl}?token=${encodeURIComponent(token)}` : wsGatewayUrl;
104
+ return {
105
+ Provider: this.Topology,
106
+ Url: url,
107
+ Token: token,
108
+ Groups: topics,
109
+ ExpiresAt: new Date(expiresAtMs).toISOString(),
110
+ ServerProcessID: this.ServerProcessID,
111
+ CurrentSequence: this.CurrentSequence,
112
+ };
113
+ }
114
+ mintGatewayToken(subject, topics, expSeconds, secret) {
115
+ const header = Buffer.from(JSON.stringify({ alg: 'HS256', typ: 'JWT' })).toString('base64url');
116
+ const claims = Buffer.from(JSON.stringify({
117
+ sub: subject,
118
+ iat: Math.floor(Date.now() / 1000),
119
+ exp: expSeconds,
120
+ topics,
121
+ })).toString('base64url');
122
+ const signingInput = `${header}.${claims}`;
123
+ const signature = createHmac('sha256', secret).update(signingInput).digest('base64url');
124
+ return `${signingInput}.${signature}`;
125
+ }
126
+ };
127
+ GCPPubSubBroadcastProvider = __decorate([
128
+ RegisterClass(BaseCacheInvalidationBroadcastProvider, 'GCPPubSub')
129
+ ], GCPPubSubBroadcastProvider);
130
+ export { GCPPubSubBroadcastProvider };
131
+ //# sourceMappingURL=GCPPubSubBroadcastProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GCPPubSubBroadcastProvider.js","sourceRoot":"","sources":["../../../src/broadcast/providers/GCPPubSubBroadcastProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { UserInfo } from '@memberjunction/core';
2
+ import { BaseCacheInvalidationBroadcastProvider, CacheBroadcastNegotiationResult, CacheInvalidationBroadcastTopology } from '../BaseCacheInvalidationBroadcastProvider.js';
3
+ import type { CacheInvalidationPayload } from '../../generic/CacheInvalidationResolver.js';
4
+ /**
5
+ * Default MemberJunction cache invalidation broadcast provider (`'SequencedRoleBucket'`).
6
+ *
7
+ * Combines:
8
+ * - **Topology 1 (Monotonic Sequence Ring Buffer + HTTP Header Piggybacking)**:
9
+ * Every mutation assigns a monotonic `Sequence` integer, stores the event in a bounded ring buffer,
10
+ * and piggybacks `X-MJ-Cache-Seq` and `X-MJ-Server-ID` onto GraphQL HTTP responses so clients can
11
+ * detect and recover missed invalidations via `GetCacheInvalidationsSince` in a single delta query.
12
+ * - **Topology 2 (Role-Fingerprint $O(\text{Roles})$ Evaluation & Shaping Memoizer)**:
13
+ * Memoizes entity-level read permission (`CanRead`) and row-level security key-withholding
14
+ * (`ReadIsRowFiltered`) once per unique role fingerprint (`RoleID` set) per event instead of
15
+ * re-evaluating permissions $N$ times across all connected WebSocket clients.
16
+ *
17
+ * Zero external cloud infrastructure is required.
18
+ */
19
+ export declare class SequencedRoleBucketBroadcastProvider extends BaseCacheInvalidationBroadcastProvider {
20
+ get Topology(): CacheInvalidationBroadcastTopology;
21
+ protected OnInvalidationRecorded(_payload: CacheInvalidationPayload): Promise<void>;
22
+ NegotiateClientConnection(user: UserInfo, defaultGraphQLWsUrl?: string): Promise<CacheBroadcastNegotiationResult>;
23
+ }
24
+ //# sourceMappingURL=SequencedRoleBucketBroadcastProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SequencedRoleBucketBroadcastProvider.d.ts","sourceRoot":"","sources":["../../../src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACH,sCAAsC,EACtC,+BAA+B,EAE/B,kCAAkC,EACrC,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAE3F;;;;;;;;;;;;;;GAcG;AACH,qBACa,oCAAqC,SAAQ,sCAAsC;IAC5F,IAAoB,QAAQ,IAAI,kCAAkC,CAEjE;cAEwB,sBAAsB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5E,yBAAyB,CAC3C,IAAI,EAAE,QAAQ,EACd,mBAAmB,SAAa,GACjC,OAAO,CAAC,+BAA+B,CAAC;CAY9C"}
@@ -0,0 +1,51 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { RegisterClass } from '@memberjunction/global';
8
+ import { BaseCacheInvalidationBroadcastProvider, CacheInvalidationBroadcastManager, } from '../BaseCacheInvalidationBroadcastProvider.js';
9
+ /**
10
+ * Default MemberJunction cache invalidation broadcast provider (`'SequencedRoleBucket'`).
11
+ *
12
+ * Combines:
13
+ * - **Topology 1 (Monotonic Sequence Ring Buffer + HTTP Header Piggybacking)**:
14
+ * Every mutation assigns a monotonic `Sequence` integer, stores the event in a bounded ring buffer,
15
+ * and piggybacks `X-MJ-Cache-Seq` and `X-MJ-Server-ID` onto GraphQL HTTP responses so clients can
16
+ * detect and recover missed invalidations via `GetCacheInvalidationsSince` in a single delta query.
17
+ * - **Topology 2 (Role-Fingerprint $O(\text{Roles})$ Evaluation & Shaping Memoizer)**:
18
+ * Memoizes entity-level read permission (`CanRead`) and row-level security key-withholding
19
+ * (`ReadIsRowFiltered`) once per unique role fingerprint (`RoleID` set) per event instead of
20
+ * re-evaluating permissions $N$ times across all connected WebSocket clients.
21
+ *
22
+ * Zero external cloud infrastructure is required.
23
+ */
24
+ let SequencedRoleBucketBroadcastProvider = class SequencedRoleBucketBroadcastProvider extends BaseCacheInvalidationBroadcastProvider {
25
+ get Topology() {
26
+ return 'SequencedRoleBucket';
27
+ }
28
+ async OnInvalidationRecorded(_payload) {
29
+ // In-process GraphQL WebSocket subscriptions read directly from PubSub + role-bucket memoizer;
30
+ // no external cloud multiplexer dispatch is needed in SequencedRoleBucket mode.
31
+ }
32
+ async NegotiateClientConnection(user, defaultGraphQLWsUrl = '/graphql') {
33
+ const fingerprint = this.GetRoleFingerprint(user);
34
+ const expiresAt = new Date(Date.now() + 60 * 60 * 1000).toISOString();
35
+ return {
36
+ Provider: this.Topology,
37
+ Url: defaultGraphQLWsUrl,
38
+ Groups: [fingerprint],
39
+ ExpiresAt: expiresAt,
40
+ ServerProcessID: this.ServerProcessID,
41
+ CurrentSequence: this.CurrentSequence,
42
+ };
43
+ }
44
+ };
45
+ SequencedRoleBucketBroadcastProvider = __decorate([
46
+ RegisterClass(BaseCacheInvalidationBroadcastProvider, 'SequencedRoleBucket')
47
+ ], SequencedRoleBucketBroadcastProvider);
48
+ export { SequencedRoleBucketBroadcastProvider };
49
+ // Ensure the default provider factory is always registered even if ClassFactory lookup happens early.
50
+ CacheInvalidationBroadcastManager.Instance.RegisterDefaultProviderFactory(() => new SequencedRoleBucketBroadcastProvider());
51
+ //# sourceMappingURL=SequencedRoleBucketBroadcastProvider.js.map