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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/README.md +27 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/SessionJanitor.d.ts +3 -3
  4. package/dist/agentSessions/SessionJanitor.js +3 -3
  5. package/dist/agentSessions/SessionManager.d.ts +15 -5
  6. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  7. package/dist/agentSessions/SessionManager.js +34 -12
  8. package/dist/agentSessions/SessionManager.js.map +1 -1
  9. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  10. package/dist/auth/AuthProviderCatalogRouter.js +2 -0
  11. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  12. package/dist/auth/index.d.ts.map +1 -1
  13. package/dist/auth/index.js +51 -10
  14. package/dist/auth/index.js.map +1 -1
  15. package/dist/auth/initializeProviders.d.ts +10 -0
  16. package/dist/auth/initializeProviders.d.ts.map +1 -1
  17. package/dist/auth/initializeProviders.js +37 -1
  18. package/dist/auth/initializeProviders.js.map +1 -1
  19. package/dist/auth/localDevAuth.d.ts +79 -0
  20. package/dist/auth/localDevAuth.d.ts.map +1 -0
  21. package/dist/auth/localDevAuth.js +439 -0
  22. package/dist/auth/localDevAuth.js.map +1 -0
  23. package/dist/auth/magicLink/MagicLinkKeys.d.ts +2 -2
  24. package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
  25. package/dist/auth/magicLink/MagicLinkKeys.js +1 -1
  26. package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
  27. package/dist/auth/magicLink/types.d.ts +12 -0
  28. package/dist/auth/magicLink/types.d.ts.map +1 -1
  29. package/dist/auth/sessionUserClone.d.ts +1 -1
  30. package/dist/auth/sessionUserClone.d.ts.map +1 -1
  31. package/dist/auth/sessionUserClone.js +3 -2
  32. package/dist/auth/sessionUserClone.js.map +1 -1
  33. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts +292 -0
  34. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -0
  35. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +442 -0
  36. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -0
  37. package/dist/broadcast/index.d.ts +6 -0
  38. package/dist/broadcast/index.d.ts.map +1 -0
  39. package/dist/broadcast/index.js +6 -0
  40. package/dist/broadcast/index.js.map +1 -0
  41. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts +43 -0
  42. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts.map +1 -0
  43. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js +144 -0
  44. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js.map +1 -0
  45. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts +46 -0
  46. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts.map +1 -0
  47. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js +149 -0
  48. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js.map +1 -0
  49. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts +49 -0
  50. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts.map +1 -0
  51. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js +131 -0
  52. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js.map +1 -0
  53. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts +24 -0
  54. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts.map +1 -0
  55. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js +51 -0
  56. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js.map +1 -0
  57. package/dist/cache.d.ts +3 -2
  58. package/dist/cache.d.ts.map +1 -1
  59. package/dist/cache.js.map +1 -1
  60. package/dist/config.d.ts +496 -0
  61. package/dist/config.d.ts.map +1 -1
  62. package/dist/config.js +61 -0
  63. package/dist/config.js.map +1 -1
  64. package/dist/context.d.ts +3 -1
  65. package/dist/context.d.ts.map +1 -1
  66. package/dist/context.js +29 -8
  67. package/dist/context.js.map +1 -1
  68. package/dist/coreRoutes.d.ts.map +1 -1
  69. package/dist/coreRoutes.js +14 -0
  70. package/dist/coreRoutes.js.map +1 -1
  71. package/dist/generated/graphql-schemas/__mj.d.ts +635 -14
  72. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  73. package/dist/generated/graphql-schemas/__mj.js +3366 -418
  74. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  75. package/dist/generic/CacheInvalidationResolver.d.ts +50 -30
  76. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  77. package/dist/generic/CacheInvalidationResolver.js +154 -79
  78. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  79. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
  80. package/dist/generic/OrphanedConversationDetailReconciler.js +2 -0
  81. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  82. package/dist/generic/PubSubManager.d.ts +10 -0
  83. package/dist/generic/PubSubManager.d.ts.map +1 -1
  84. package/dist/generic/PubSubManager.js +44 -1
  85. package/dist/generic/PubSubManager.js.map +1 -1
  86. package/dist/generic/PushStatusResolver.d.ts +39 -6
  87. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  88. package/dist/generic/PushStatusResolver.js +93 -11
  89. package/dist/generic/PushStatusResolver.js.map +1 -1
  90. package/dist/generic/ResolverBase.d.ts +65 -25
  91. package/dist/generic/ResolverBase.d.ts.map +1 -1
  92. package/dist/generic/ResolverBase.js +201 -101
  93. package/dist/generic/ResolverBase.js.map +1 -1
  94. package/dist/generic/RunViewResolver.d.ts +11 -3
  95. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  96. package/dist/generic/RunViewResolver.js +79 -13
  97. package/dist/generic/RunViewResolver.js.map +1 -1
  98. package/dist/generic/actionOutputFieldSecurity.d.ts +26 -0
  99. package/dist/generic/actionOutputFieldSecurity.d.ts.map +1 -0
  100. package/dist/generic/actionOutputFieldSecurity.js +47 -0
  101. package/dist/generic/actionOutputFieldSecurity.js.map +1 -0
  102. package/dist/generic/fieldSecurityTransport.d.ts +30 -0
  103. package/dist/generic/fieldSecurityTransport.d.ts.map +1 -0
  104. package/dist/generic/fieldSecurityTransport.js +30 -0
  105. package/dist/generic/fieldSecurityTransport.js.map +1 -0
  106. package/dist/index.d.ts +3 -0
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +122 -66
  109. package/dist/index.js.map +1 -1
  110. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  111. package/dist/integration/CustomColumnPromoter.js +6 -1
  112. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  113. package/dist/logging/variablesLoggingMiddleware.d.ts +12 -0
  114. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  115. package/dist/logging/variablesLoggingMiddleware.js +50 -1
  116. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  117. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -1
  118. package/dist/realtimeSessions/SessionVerificationPortsBase.js +1 -0
  119. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -1
  120. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +8 -6
  121. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
  122. package/dist/realtimeSessions/ownedRealtimeSession.js +15 -6
  123. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
  124. package/dist/realtimeSessions/sessionAccess.d.ts +88 -11
  125. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
  126. package/dist/realtimeSessions/sessionAccess.js +125 -22
  127. package/dist/realtimeSessions/sessionAccess.js.map +1 -1
  128. package/dist/realtimeSessions/sessionConfigStamps.js +1 -1
  129. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -1
  130. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -1
  131. package/dist/realtimeSessions/subscriptionAuthorization.js +5 -2
  132. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -1
  133. package/dist/realtimeSessions/verificationWorkflow.d.ts +2 -0
  134. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -1
  135. package/dist/realtimeSessions/verificationWorkflow.js +1 -1
  136. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -1
  137. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  138. package/dist/realtimeWidget/WidgetRouter.js +19 -3
  139. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  140. package/dist/realtimeWidget/WidgetSessionService.d.ts +67 -7
  141. package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
  142. package/dist/realtimeWidget/WidgetSessionService.js +201 -19
  143. package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
  144. package/dist/realtimeWidget/host-identity.d.ts +1 -1
  145. package/dist/realtimeWidget/host-identity.js +1 -1
  146. package/dist/realtimeWidget/widgetCore.d.ts +20 -1
  147. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  148. package/dist/realtimeWidget/widgetCore.js +17 -1
  149. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  150. package/dist/realtimeWidget/widgetGuestElevation.d.ts +1 -1
  151. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  152. package/dist/realtimeWidget/widgetGuestElevation.js +2 -1
  153. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  154. package/dist/resolvers/ActionResolver.d.ts +19 -1
  155. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  156. package/dist/resolvers/ActionResolver.js +63 -12
  157. package/dist/resolvers/ActionResolver.js.map +1 -1
  158. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  159. package/dist/resolvers/AdhocQueryResolver.js +1 -0
  160. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  161. package/dist/resolvers/AgentRunStatusPublisher.d.ts +18 -4
  162. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
  163. package/dist/resolvers/AgentRunStatusPublisher.js +32 -8
  164. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
  165. package/dist/resolvers/AgentSessionResolver.d.ts +10 -4
  166. package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
  167. package/dist/resolvers/AgentSessionResolver.js +40 -17
  168. package/dist/resolvers/AgentSessionResolver.js.map +1 -1
  169. package/dist/resolvers/EntityCommunicationsResolver.d.ts +13 -1
  170. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  171. package/dist/resolvers/EntityCommunicationsResolver.js +50 -14
  172. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  173. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +28 -0
  174. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  175. package/dist/resolvers/FetchEntityVectorsResolver.js +117 -21
  176. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  177. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  178. package/dist/resolvers/FileCategoryResolver.js +1 -0
  179. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  180. package/dist/resolvers/FileResolver.d.ts +5 -0
  181. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  182. package/dist/resolvers/FileResolver.js +13 -4
  183. package/dist/resolvers/FileResolver.js.map +1 -1
  184. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  185. package/dist/resolvers/IntegrationDiscoveryResolver.js +45 -7
  186. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  187. package/dist/resolvers/MergeRecordsResolver.d.ts +8 -1
  188. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  189. package/dist/resolvers/MergeRecordsResolver.js +31 -3
  190. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  191. package/dist/resolvers/PipelineProgressResolver.d.ts +6 -0
  192. package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -1
  193. package/dist/resolvers/PipelineProgressResolver.js +5 -3
  194. package/dist/resolvers/PipelineProgressResolver.js.map +1 -1
  195. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  196. package/dist/resolvers/QueryResolver.js +20 -6
  197. package/dist/resolvers/QueryResolver.js.map +1 -1
  198. package/dist/resolvers/QuerySystemUserResolver.d.ts +2 -0
  199. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  200. package/dist/resolvers/QuerySystemUserResolver.js +15 -6
  201. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  202. package/dist/resolvers/RSUResolver.d.ts.map +1 -1
  203. package/dist/resolvers/RSUResolver.js +12 -0
  204. package/dist/resolvers/RSUResolver.js.map +1 -1
  205. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +16 -2
  206. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  207. package/dist/resolvers/RealtimeClientSessionResolver.js +82 -28
  208. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  209. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  210. package/dist/resolvers/RemoteBrowserActionResolver.js +11 -9
  211. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  212. package/dist/resolvers/RunAIAgentResolver.d.ts +56 -8
  213. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  214. package/dist/resolvers/RunAIAgentResolver.js +209 -64
  215. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  216. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  217. package/dist/resolvers/RunTemplateResolver.js +4 -4
  218. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  219. package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
  220. package/dist/resolvers/RunTestResolver.js +3 -1
  221. package/dist/resolvers/RunTestResolver.js.map +1 -1
  222. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  223. package/dist/resolvers/SyncDataResolver.js +4 -0
  224. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  225. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  226. package/dist/resolvers/TestQuerySQLResolver.js +1 -0
  227. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  228. package/dist/resolvers/TransactionGroupResolver.d.ts +17 -2
  229. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  230. package/dist/resolvers/TransactionGroupResolver.js +60 -15
  231. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  232. package/dist/resolvers/UserViewResolver.d.ts +1 -1
  233. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  234. package/dist/resolvers/UserViewResolver.js +2 -1
  235. package/dist/resolvers/UserViewResolver.js.map +1 -1
  236. package/dist/rest/EntityCRUDHandler.d.ts +6 -0
  237. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  238. package/dist/rest/EntityCRUDHandler.js +19 -5
  239. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  240. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  241. package/dist/rest/RESTEndpointHandler.js +8 -5
  242. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  243. package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
  244. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
  245. package/dist/rest/RealtimeRecordingHandler.js +7 -7
  246. package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
  247. package/dist/rest/ViewOperationsHandler.d.ts +6 -0
  248. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  249. package/dist/rest/ViewOperationsHandler.js +22 -5
  250. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  251. package/dist/serverRoleConfigUnits.d.ts +29 -0
  252. package/dist/serverRoleConfigUnits.d.ts.map +1 -0
  253. package/dist/serverRoleConfigUnits.js +33 -0
  254. package/dist/serverRoleConfigUnits.js.map +1 -0
  255. package/dist/services/TaskGraphContinuationDeliverer.d.ts +5 -0
  256. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  257. package/dist/services/TaskGraphContinuationDeliverer.js +42 -15
  258. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  259. package/dist/types.d.ts +23 -1
  260. package/dist/types.d.ts.map +1 -1
  261. package/dist/types.js.map +1 -1
  262. package/package.json +98 -98
  263. package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -0
  264. package/src/__tests__/AdhocQueryResolver.dialect.test.ts +137 -0
  265. package/src/__tests__/AgentRunStatusPublisher.test.ts +49 -0
  266. package/src/__tests__/AgentSessionResolver.ownership.test.ts +137 -0
  267. package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
  268. package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
  269. package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
  270. package/src/__tests__/FetchEntityVectorsResolver.test.ts +206 -3
  271. package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
  272. package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
  273. package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
  274. package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
  275. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
  276. package/src/__tests__/RealtimeClientSessionResolver.test.ts +324 -46
  277. package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +98 -0
  278. package/src/__tests__/ResolverBase.clientOldValues.test.ts +37 -4
  279. package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
  280. package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +176 -0
  281. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +23 -1
  282. package/src/__tests__/ResolverBase.publishStatusUpdate.test.ts +68 -0
  283. package/src/__tests__/ResolverBase.userViewCacheAndDedup.test.ts +130 -0
  284. package/src/__tests__/RunAIAgentResolver.branch.test.ts +68 -13
  285. package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
  286. package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
  287. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +17 -27
  288. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +8 -2
  289. package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
  290. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +4 -1
  291. package/src/__tests__/RunTemplateResolver.test.ts +35 -2
  292. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
  293. package/src/__tests__/SessionManager.test.ts +95 -0
  294. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +114 -3
  295. package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
  296. package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
  297. package/src/__tests__/ViewOperationsHandler.test.ts +7 -2
  298. package/src/__tests__/WidgetSessionService.test.ts +583 -4
  299. package/src/__tests__/apiRootBoot.test.ts +1 -1
  300. package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
  301. package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
  302. package/src/__tests__/cacheInvalidationRecordData.test.ts +45 -0
  303. package/src/__tests__/fieldSecurityFixtures.ts +91 -0
  304. package/src/__tests__/globalCors.test.ts +3 -3
  305. package/src/__tests__/localDevAuth.test.ts +196 -0
  306. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
  307. package/src/__tests__/pushStatusResolver.filter.test.ts +57 -1
  308. package/src/__tests__/realtimeRecordingHandler.test.ts +19 -2
  309. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +29 -1
  310. package/src/__tests__/realtimeSessions/ownedRealtimeSession.anonymous.test.ts +31 -0
  311. package/src/__tests__/realtimeSessions/ownedRealtimeSession.namedScoped.test.ts +37 -0
  312. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +146 -7
  313. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
  314. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
  315. package/src/__tests__/resolverBase.cloudEventChangedFields.test.ts +157 -0
  316. package/src/__tests__/resolverBase.fieldSecurityTransport.test.ts +222 -0
  317. package/src/__tests__/resolverBase.fls.test.ts +146 -97
  318. package/src/__tests__/restTransport.fieldSecurity.test.ts +148 -0
  319. package/src/__tests__/runParamsTimeZone.test.ts +179 -0
  320. package/src/__tests__/runStreams.fieldSecurity.test.ts +100 -0
  321. package/src/__tests__/runViewProperties.test.ts +114 -0
  322. package/src/__tests__/scalabilityBenchmarks.test.ts +765 -0
  323. package/src/__tests__/scalabilityDatabaseIntegration.test.ts +207 -0
  324. package/src/__tests__/sessionUserClone.test.ts +5 -1
  325. package/src/__tests__/startupSweepOrder.test.ts +40 -0
  326. package/src/__tests__/unifiedAuth.test.ts +28 -0
  327. package/src/__tests__/widgetGuestElevation.test.ts +2 -0
  328. package/src/agentSessions/SessionJanitor.ts +3 -3
  329. package/src/agentSessions/SessionManager.ts +35 -12
  330. package/src/auth/AuthProviderCatalogRouter.ts +3 -0
  331. package/src/auth/index.ts +56 -12
  332. package/src/auth/initializeProviders.ts +43 -1
  333. package/src/auth/localDevAuth.ts +528 -0
  334. package/src/auth/magicLink/MagicLinkKeys.ts +2 -2
  335. package/src/auth/magicLink/types.ts +10 -0
  336. package/src/auth/sessionUserClone.ts +3 -2
  337. package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +674 -0
  338. package/src/broadcast/index.ts +5 -0
  339. package/src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts +180 -0
  340. package/src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts +182 -0
  341. package/src/broadcast/providers/GCPPubSubBroadcastProvider.ts +169 -0
  342. package/src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts +57 -0
  343. package/src/cache.ts +2 -1
  344. package/src/config.ts +69 -0
  345. package/src/context.ts +32 -8
  346. package/src/coreRoutes.ts +15 -0
  347. package/src/generated/graphql-schemas/__mj.ts +2239 -102
  348. package/src/generic/CacheInvalidationResolver.ts +135 -78
  349. package/src/generic/OrphanedConversationDetailReconciler.ts +4 -2
  350. package/src/generic/PubSubManager.ts +54 -1
  351. package/src/generic/PushStatusResolver.ts +108 -11
  352. package/src/generic/ResolverBase.ts +237 -107
  353. package/src/generic/RunViewResolver.ts +80 -15
  354. package/src/generic/actionOutputFieldSecurity.ts +75 -0
  355. package/src/generic/fieldSecurityTransport.ts +62 -0
  356. package/src/index.ts +127 -68
  357. package/src/integration/CustomColumnPromoter.ts +6 -1
  358. package/src/logging/variablesLoggingMiddleware.ts +59 -3
  359. package/src/realtimeSessions/README.md +7 -3
  360. package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
  361. package/src/realtimeSessions/ownedRealtimeSession.ts +20 -6
  362. package/src/realtimeSessions/sessionAccess.ts +181 -25
  363. package/src/realtimeSessions/sessionConfigStamps.ts +1 -1
  364. package/src/realtimeSessions/subscriptionAuthorization.ts +4 -2
  365. package/src/realtimeSessions/verificationWorkflow.ts +3 -1
  366. package/src/realtimeWidget/WidgetRouter.ts +22 -4
  367. package/src/realtimeWidget/WidgetSessionService.ts +252 -17
  368. package/src/realtimeWidget/host-identity.ts +1 -1
  369. package/src/realtimeWidget/widgetCore.ts +30 -1
  370. package/src/realtimeWidget/widgetGuestElevation.ts +2 -1
  371. package/src/resolvers/ActionResolver.ts +78 -15
  372. package/src/resolvers/AdhocQueryResolver.ts +1 -0
  373. package/src/resolvers/AgentRunStatusPublisher.ts +36 -8
  374. package/src/resolvers/AgentSessionResolver.ts +46 -18
  375. package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
  376. package/src/resolvers/FetchEntityVectorsResolver.ts +132 -21
  377. package/src/resolvers/FileCategoryResolver.ts +1 -0
  378. package/src/resolvers/FileResolver.ts +14 -4
  379. package/src/resolvers/IntegrationDiscoveryResolver.ts +49 -7
  380. package/src/resolvers/MergeRecordsResolver.ts +23 -2
  381. package/src/resolvers/PipelineProgressResolver.ts +12 -3
  382. package/src/resolvers/QueryResolver.ts +20 -6
  383. package/src/resolvers/QuerySystemUserResolver.ts +15 -6
  384. package/src/resolvers/RSUResolver.ts +12 -0
  385. package/src/resolvers/RealtimeClientSessionResolver.ts +104 -33
  386. package/src/resolvers/RemoteBrowserActionResolver.ts +15 -10
  387. package/src/resolvers/RunAIAgentResolver.ts +258 -82
  388. package/src/resolvers/RunTemplateResolver.ts +6 -4
  389. package/src/resolvers/RunTestResolver.ts +3 -1
  390. package/src/resolvers/SyncDataResolver.ts +4 -0
  391. package/src/resolvers/TestQuerySQLResolver.ts +1 -0
  392. package/src/resolvers/TransactionGroupResolver.ts +66 -15
  393. package/src/resolvers/UserViewResolver.ts +2 -1
  394. package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
  395. package/src/rest/EntityCRUDHandler.ts +22 -5
  396. package/src/rest/RESTEndpointHandler.ts +8 -5
  397. package/src/rest/RealtimeRecordingHandler.ts +13 -10
  398. package/src/rest/ViewOperationsHandler.ts +24 -6
  399. package/src/serverRoleConfigUnits.ts +48 -0
  400. package/src/services/TaskGraphContinuationDeliverer.ts +52 -20
  401. package/src/types.ts +23 -1
@@ -0,0 +1,442 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { BaseSingleton, MJGlobal } from '@memberjunction/global';
3
+ import { Metadata } from '@memberjunction/core';
4
+ /**
5
+ * High-churn system telemetry/logging entities that can optionally be excluded from browser
6
+ * invalidation fan-out because browsers do not maintain live dataset caches for them.
7
+ */
8
+ export const DEFAULT_HIGH_CHURN_SYSTEM_ENTITIES = [
9
+ 'MJ: Audit Logs',
10
+ 'MJ: Error Logs',
11
+ 'MJ: AI Prompt Runs',
12
+ 'MJ: AI Agent Runs',
13
+ 'MJ: AI Agent Run Steps',
14
+ 'MJ: Query Execution Histories',
15
+ ];
16
+ /**
17
+ * Abstract base class for MemberJunction's pluggable Cache Invalidation Broadcast Hierarchy.
18
+ *
19
+ * Provides the shared primitives used by all broadcast topologies:
20
+ * 1. **Monotonic Sequence Ring Buffer (Topology 1)**: Every invalidation event is stamped with a
21
+ * monotonically increasing `Sequence` integer and stored in a bounded circular buffer (`MaxRingBufferSize`),
22
+ * enabling HTTP `X-MJ-Cache-Seq` piggybacking and `GetCacheInvalidationsSince` delta catch-up.
23
+ * 2. **Role-Fingerprint $O(\text{Roles})$ Evaluation & Shaping Memoizer (Topology 2)**: Computes a canonical
24
+ * fingerprint of a user's sorted `RoleID`s (cached per `UserInfo` in a `WeakMap`) and memoizes
25
+ * entity read-permission checks (`CanRead`) and row-level security key-withholding (`ReadIsRowFiltered`)
26
+ * once per `(payload, entity, roleFingerprint)` tuple instead of once per connected WebSocket client.
27
+ * 3. **Cloud Multiplexer Extension Hooks (Topology 3)**: Subclasses (`AzureWebPubSubBroadcastProvider`,
28
+ * `AWSIoTCoreBroadcastProvider`, `GCPPubSubBroadcastProvider`) override `PublishInvalidation` and
29
+ * `NegotiateClientConnection` to offload WebSocket fan-out to managed cloud pub/sub infrastructure.
30
+ */
31
+ export class BaseCacheInvalidationBroadcastProvider {
32
+ constructor() {
33
+ this._currentSequence = 0;
34
+ this._maxRingBufferSize = 5000;
35
+ this._ringBuffer = [];
36
+ this._ringHead = 0;
37
+ this._ringCount = 0;
38
+ this._excludedEntities = new Set();
39
+ this._config = {};
40
+ /**
41
+ * Memoizes canonical role fingerprints per `RoleHolder` / `UserInfo` object reference.
42
+ */
43
+ this._roleFingerprintCache = new WeakMap();
44
+ /**
45
+ * Memoizes `Metadata.EntityByName` lookup per `CacheInvalidationPayload` object reference
46
+ * so `CacheInvalidationFilter` and `CacheInvalidationResolver` only look up the entity once per event.
47
+ */
48
+ this._payloadEntityCache = new WeakMap();
49
+ /**
50
+ * Memoizes entity-level read permission (`CanRead`) per `(payload, roleFingerprint)`.
51
+ */
52
+ this._payloadFilterMemo = new WeakMap();
53
+ /**
54
+ * Memoizes row-level security key-withholding and shaped `CacheInvalidationNotification`
55
+ * per `(payload, entity, roleFingerprint)`.
56
+ */
57
+ this._payloadShapeMemo = new WeakMap();
58
+ }
59
+ static { this._serverProcessId = randomUUID(); }
60
+ /**
61
+ * Unique identifier of the running MJServer process, emitted in `X-MJ-Server-ID`.
62
+ */
63
+ get ServerProcessID() {
64
+ return BaseCacheInvalidationBroadcastProvider._serverProcessId;
65
+ }
66
+ /**
67
+ * Latest monotonic sequence number assigned to a cache invalidation event in this process.
68
+ */
69
+ get CurrentSequence() {
70
+ return this._currentSequence;
71
+ }
72
+ /**
73
+ * Maximum number of invalidation events held in the circular ring buffer.
74
+ */
75
+ get MaxRingBufferSize() {
76
+ return this._maxRingBufferSize;
77
+ }
78
+ /**
79
+ * Number of invalidation events currently retained in the circular ring buffer.
80
+ */
81
+ get BufferedEventCount() {
82
+ return this._ringCount;
83
+ }
84
+ /**
85
+ * Configures the provider instance with buffer sizing, entity exclusions, and cloud settings.
86
+ */
87
+ Configure(config) {
88
+ this._config = config ?? {};
89
+ const desiredSize = config?.ringBufferSize && config.ringBufferSize > 0 ? Math.floor(config.ringBufferSize) : 5000;
90
+ if (desiredSize !== this._maxRingBufferSize || this._ringBuffer.length === 0) {
91
+ this._maxRingBufferSize = desiredSize;
92
+ this._ringBuffer = new Array(this._maxRingBufferSize);
93
+ this._ringHead = 0;
94
+ this._ringCount = 0;
95
+ }
96
+ this._excludedEntities = new Set((config?.excludedEntities ?? [])
97
+ .map((name) => name.trim().toLowerCase())
98
+ .filter((name) => name.length > 0));
99
+ }
100
+ /**
101
+ * Returns whether invalidation events for `entityName` should be broadcast to clients.
102
+ * Returns `false` for blank names or entities explicitly listed in `excludedEntities`.
103
+ */
104
+ ShouldBroadcastEntity(entityName) {
105
+ if (!entityName) {
106
+ return false;
107
+ }
108
+ const normalized = entityName.trim().toLowerCase();
109
+ if (normalized.length === 0) {
110
+ return false;
111
+ }
112
+ return !this._excludedEntities.has(normalized);
113
+ }
114
+ /**
115
+ * Computes a canonical, order-independent role fingerprint for a user (`RoleHolder`).
116
+ * Memoized per user object in a `WeakMap` so repeated evaluations across thousands of events are $O(1)$.
117
+ */
118
+ GetRoleFingerprint(user) {
119
+ if (!user || typeof user !== 'object') {
120
+ return 'anonymous';
121
+ }
122
+ const roles = user.UserRoles;
123
+ if (!Array.isArray(roles)) {
124
+ return 'no-roles';
125
+ }
126
+ const cached = this._roleFingerprintCache.get(user);
127
+ if (cached && cached.roleCount === roles.length) {
128
+ return cached.fingerprint;
129
+ }
130
+ let fingerprint;
131
+ if (roles.length === 0) {
132
+ fingerprint = 'roles:empty';
133
+ }
134
+ else if (roles.length === 1) {
135
+ fingerprint = `roles:${(roles[0]?.RoleID ?? '').trim().toLowerCase()}`;
136
+ }
137
+ else {
138
+ const normalizedIds = new Array(roles.length);
139
+ for (let i = 0; i < roles.length; i++) {
140
+ normalizedIds[i] = (roles[i]?.RoleID ?? '').trim().toLowerCase();
141
+ }
142
+ normalizedIds.sort();
143
+ fingerprint = `roles:${normalizedIds.join('|')}`;
144
+ }
145
+ this._roleFingerprintCache.set(user, { roleCount: roles.length, fingerprint });
146
+ return fingerprint;
147
+ }
148
+ /**
149
+ * Resolves and caches the `EntityInfo` for a `CacheInvalidationPayload` so that
150
+ * `CacheInvalidationFilter` and `CacheInvalidationResolver` do not repeat metadata lookups.
151
+ */
152
+ ResolveEntityForPayload(payload, entityLookup) {
153
+ if (this._payloadEntityCache.has(payload)) {
154
+ return this._payloadEntityCache.get(payload) ?? null;
155
+ }
156
+ const entityName = payload?.entityName;
157
+ if (!entityName) {
158
+ this._payloadEntityCache.set(payload, null);
159
+ return null;
160
+ }
161
+ const entity = entityLookup
162
+ ? (entityLookup(entityName) ?? null)
163
+ : (new Metadata().EntityByName(entityName) ?? null); // global-provider-ok: subscription broadcast provider resolves server-wide entity metadata once per event
164
+ this._payloadEntityCache.set(payload, entity);
165
+ return entity;
166
+ }
167
+ /**
168
+ * Evaluates whether `user` has entity-level read permission for `payload`, memoized by
169
+ * `(payload, entityName, roleFingerprint)` so $N$ subscribers sharing $R$ role combinations
170
+ * only run `GetUserPermisions` $R$ times per event.
171
+ */
172
+ EvaluateEntityReadAccess(payload, user, entityLookup) {
173
+ if (!user) {
174
+ return false;
175
+ }
176
+ const entityName = payload?.entityName;
177
+ if (!this.ShouldBroadcastEntity(entityName)) {
178
+ return false;
179
+ }
180
+ const entity = this.ResolveEntityForPayload(payload, entityLookup);
181
+ if (!entity) {
182
+ // Unknown entity: deliver rather than leaving client cache silently stale
183
+ return true;
184
+ }
185
+ // Only coalesce across users when UserRoles is an array; mock users without UserRoles
186
+ // in isolated unit tests are evaluated directly.
187
+ if (!Array.isArray(user.UserRoles)) {
188
+ return entity.GetUserPermisions(user).CanRead;
189
+ }
190
+ let bucketMap = this._payloadFilterMemo.get(payload);
191
+ if (!bucketMap) {
192
+ bucketMap = new Map();
193
+ this._payloadFilterMemo.set(payload, bucketMap);
194
+ }
195
+ const bucketKey = `${entity.Name.toLowerCase()}::${this.GetRoleFingerprint(user)}`;
196
+ const cached = bucketMap.get(bucketKey);
197
+ if (cached !== undefined) {
198
+ return cached;
199
+ }
200
+ const canRead = entity.GetUserPermisions(user).CanRead;
201
+ bucketMap.set(bucketKey, canRead);
202
+ return canRead;
203
+ }
204
+ /**
205
+ * Evaluates whether every read permission the user holds on `entity` is gated by a
206
+ * Row-Level Security filter (`ReadRLSFilterID`).
207
+ */
208
+ ReadIsRowFiltered(entity, user) {
209
+ const roles = new Set((user.UserRoles ?? []).map((role) => (role.RoleID ?? '').trim().toLowerCase()));
210
+ let filteredReads = 0;
211
+ for (const row of entity.Permissions) {
212
+ if (!row.CanRead)
213
+ continue;
214
+ const isDeny = row.IsDeny ?? (row.Type ?? 'Allow').trim().toLowerCase() === 'deny';
215
+ if (isDeny)
216
+ continue;
217
+ if (!roles.has((row.RoleID ?? '').trim().toLowerCase()))
218
+ continue;
219
+ if (!row.ReadRLSFilterID)
220
+ return false;
221
+ filteredReads += 1;
222
+ }
223
+ return filteredReads > 0;
224
+ }
225
+ /**
226
+ * Shapes a `CacheInvalidationPayload` into a `CacheInvalidationNotification` for `user` and `entity`.
227
+ * When `user` and `entity` are present and `user.UserRoles` is populated, the shaped object is
228
+ * memoized per `(payload, entity, roleFingerprint)` so $N$ subscribers sharing $R$ role buckets
229
+ * only allocate and evaluate `ReadIsRowFiltered` $R$ times per event.
230
+ */
231
+ ShapeEventForSubscriber(payload, user, entity) {
232
+ if (!user || !entity || !Array.isArray(user.UserRoles)) {
233
+ const withholdKey = !!user && !!entity && this.ReadIsRowFiltered(entity, user);
234
+ return this.buildNotification(payload, withholdKey);
235
+ }
236
+ let entityMap = this._payloadShapeMemo.get(payload);
237
+ if (!entityMap) {
238
+ entityMap = new WeakMap();
239
+ this._payloadShapeMemo.set(payload, entityMap);
240
+ }
241
+ let roleMap = entityMap.get(entity);
242
+ if (!roleMap) {
243
+ roleMap = new Map();
244
+ entityMap.set(entity, roleMap);
245
+ }
246
+ const fingerprint = this.GetRoleFingerprint(user);
247
+ const existing = roleMap.get(fingerprint);
248
+ if (existing) {
249
+ return existing;
250
+ }
251
+ const withholdKey = this.ReadIsRowFiltered(entity, user);
252
+ const shaped = this.buildNotification(payload, withholdKey);
253
+ roleMap.set(fingerprint, shaped);
254
+ return shaped;
255
+ }
256
+ /**
257
+ * Assigns the next monotonic sequence number to `payload` (if not already stamped on this server),
258
+ * appends it to the bounded circular ring buffer, and invokes `OnInvalidationRecorded` for
259
+ * provider-specific fan-out.
260
+ */
261
+ RecordInvalidation(payload) {
262
+ if (!this.ShouldBroadcastEntity(payload.entityName)) {
263
+ return payload;
264
+ }
265
+ if (this._ringBuffer.length === 0) {
266
+ this.Configure(this._config);
267
+ }
268
+ const seq = ++this._currentSequence;
269
+ payload.sequence = seq;
270
+ const writeIndex = (this._ringHead + this._ringCount) % this._maxRingBufferSize;
271
+ if (this._ringCount < this._maxRingBufferSize) {
272
+ this._ringBuffer[writeIndex] = { Sequence: seq, Payload: payload };
273
+ this._ringCount++;
274
+ }
275
+ else {
276
+ // Buffer full: overwrite oldest at _ringHead and advance head
277
+ this._ringBuffer[this._ringHead] = { Sequence: seq, Payload: payload };
278
+ this._ringHead = (this._ringHead + 1) % this._maxRingBufferSize;
279
+ }
280
+ void this.OnInvalidationRecorded(payload);
281
+ return payload;
282
+ }
283
+ /**
284
+ * Returns all permission-allowed, RLS-shaped invalidation events strictly after `sinceSequence`
285
+ * for `user`. If `sinceSequence` has already been evicted from the ring buffer (or lies in the
286
+ * future due to a server restart), sets `RequiresFullRefresh: true` and returns an empty `Events` list.
287
+ */
288
+ GetChangesSince(sinceSequence, user) {
289
+ if (!user) {
290
+ return {
291
+ RequiresFullRefresh: true,
292
+ CurrentSequence: this._currentSequence,
293
+ ServerProcessID: this.ServerProcessID,
294
+ Events: [],
295
+ };
296
+ }
297
+ if (sinceSequence < 0 || sinceSequence > this._currentSequence) {
298
+ return {
299
+ RequiresFullRefresh: true,
300
+ CurrentSequence: this._currentSequence,
301
+ ServerProcessID: this.ServerProcessID,
302
+ Events: [],
303
+ };
304
+ }
305
+ if (sinceSequence === this._currentSequence) {
306
+ return {
307
+ RequiresFullRefresh: false,
308
+ CurrentSequence: this._currentSequence,
309
+ ServerProcessID: this.ServerProcessID,
310
+ Events: [],
311
+ };
312
+ }
313
+ if (this._ringCount === 0) {
314
+ return {
315
+ RequiresFullRefresh: true,
316
+ CurrentSequence: this._currentSequence,
317
+ ServerProcessID: this.ServerProcessID,
318
+ Events: [],
319
+ };
320
+ }
321
+ const oldestEntry = this._ringBuffer[this._ringHead];
322
+ if (!oldestEntry || sinceSequence < oldestEntry.Sequence - 1) {
323
+ return {
324
+ RequiresFullRefresh: true,
325
+ CurrentSequence: this._currentSequence,
326
+ ServerProcessID: this.ServerProcessID,
327
+ Events: [],
328
+ };
329
+ }
330
+ // Coalesce duplicate entity+PK events within the catch-up window (latest event wins)
331
+ const coalescedPayloads = new Map();
332
+ for (let i = 0; i < this._ringCount; i++) {
333
+ const idx = (this._ringHead + i) % this._maxRingBufferSize;
334
+ const entry = this._ringBuffer[idx];
335
+ if (!entry || entry.Sequence <= sinceSequence) {
336
+ continue;
337
+ }
338
+ const payload = entry.Payload;
339
+ if (!this.EvaluateEntityReadAccess(payload, user)) {
340
+ continue;
341
+ }
342
+ const entity = this.ResolveEntityForPayload(payload);
343
+ const shaped = this.ShapeEventForSubscriber(payload, user, entity);
344
+ // If key is withheld (RLS-filtered), coalesce at whole-entity granularity; otherwise entity + PK
345
+ const dedupKey = shaped.PrimaryKeyValues
346
+ ? `${shaped.EntityName.toLowerCase()}::pk::${shaped.PrimaryKeyValues}`
347
+ : `${shaped.EntityName.toLowerCase()}::all`;
348
+ coalescedPayloads.set(dedupKey, payload);
349
+ }
350
+ const events = [];
351
+ for (const payload of coalescedPayloads.values()) {
352
+ const entity = this.ResolveEntityForPayload(payload);
353
+ events.push(this.ShapeEventForSubscriber(payload, user, entity));
354
+ }
355
+ return {
356
+ RequiresFullRefresh: false,
357
+ CurrentSequence: this._currentSequence,
358
+ ServerProcessID: this.ServerProcessID,
359
+ Events: events,
360
+ };
361
+ }
362
+ /**
363
+ * Resets the sequence counter and ring buffer. Intended for unit tests.
364
+ */
365
+ ResetStateForTesting() {
366
+ this._currentSequence = 0;
367
+ this._ringHead = 0;
368
+ this._ringCount = 0;
369
+ this._ringBuffer = new Array(this._maxRingBufferSize);
370
+ }
371
+ buildNotification(payload, withholdKey) {
372
+ const notification = {
373
+ EntityName: payload.entityName,
374
+ PrimaryKeyValues: withholdKey ? undefined : (payload.primaryKeyValues ?? undefined),
375
+ Action: payload.action,
376
+ SourceServerID: payload.sourceServerId,
377
+ Timestamp: payload.timestamp,
378
+ OriginSessionID: payload.originSessionId ?? undefined,
379
+ RecordData: withholdKey ? undefined : (payload.recordData ?? undefined),
380
+ };
381
+ if (payload.sequence !== undefined) {
382
+ notification.Sequence = payload.sequence;
383
+ }
384
+ return notification;
385
+ }
386
+ }
387
+ /**
388
+ * Process-wide singleton managing the active {@link BaseCacheInvalidationBroadcastProvider}.
389
+ *
390
+ * Uses `MJGlobal.Instance.ClassFactory` to instantiate the configured provider class
391
+ * (defaulting to `'SequencedRoleBucket'`).
392
+ */
393
+ export class CacheInvalidationBroadcastManager extends BaseSingleton {
394
+ constructor() {
395
+ super();
396
+ this._provider = null;
397
+ this._fallbackFactory = null;
398
+ }
399
+ static get Instance() {
400
+ return super.getInstance();
401
+ }
402
+ /**
403
+ * Registers the default fallback provider factory so `Provider` is always available even
404
+ * before `Configure()` is explicitly called.
405
+ */
406
+ RegisterDefaultProviderFactory(factory) {
407
+ this._fallbackFactory = factory;
408
+ }
409
+ /**
410
+ * Returns the active broadcast provider, lazily instantiating the default
411
+ * `SequencedRoleBucketBroadcastProvider` if not yet configured.
412
+ */
413
+ get Provider() {
414
+ if (!this._provider) {
415
+ this.Configure();
416
+ }
417
+ return this._provider;
418
+ }
419
+ /**
420
+ * Configures and activates a broadcast provider via `MJGlobal.Instance.ClassFactory`.
421
+ */
422
+ Configure(config) {
423
+ const driverKey = config?.provider?.trim() || 'SequencedRoleBucket';
424
+ let instance = MJGlobal.Instance.ClassFactory.CreateInstance(BaseCacheInvalidationBroadcastProvider, driverKey);
425
+ if (!instance && this._fallbackFactory) {
426
+ instance = this._fallbackFactory();
427
+ }
428
+ if (!instance) {
429
+ throw new Error(`Failed to instantiate BaseCacheInvalidationBroadcastProvider for driver '${driverKey}'.`);
430
+ }
431
+ instance.Configure(config);
432
+ this._provider = instance;
433
+ return instance;
434
+ }
435
+ /**
436
+ * Explicitly sets the active provider instance (useful for testing or custom programmatic wiring).
437
+ */
438
+ SetProvider(provider) {
439
+ this._provider = provider;
440
+ }
441
+ }
442
+ //# sourceMappingURL=BaseCacheInvalidationBroadcastProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseCacheInvalidationBroadcastProvider.js","sourceRoot":"","sources":["../../src/broadcast/BaseCacheInvalidationBroadcastProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './BaseCacheInvalidationBroadcastProvider.js';
2
+ export * from './providers/SequencedRoleBucketBroadcastProvider.js';
3
+ export * from './providers/AzureWebPubSubBroadcastProvider.js';
4
+ export * from './providers/AWSIoTCoreBroadcastProvider.js';
5
+ export * from './providers/GCPPubSubBroadcastProvider.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/broadcast/index.ts"],"names":[],"mappings":"AAAA,cAAc,6CAA6C,CAAC;AAC5D,cAAc,qDAAqD,CAAC;AACpE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,2CAA2C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './BaseCacheInvalidationBroadcastProvider.js';
2
+ export * from './providers/SequencedRoleBucketBroadcastProvider.js';
3
+ export * from './providers/AzureWebPubSubBroadcastProvider.js';
4
+ export * from './providers/AWSIoTCoreBroadcastProvider.js';
5
+ export * from './providers/GCPPubSubBroadcastProvider.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/broadcast/index.ts"],"names":[],"mappings":"AAAA,cAAc,6CAA6C,CAAC;AAC5D,cAAc,qDAAqD,CAAC;AACpE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,2CAA2C,CAAC"}
@@ -0,0 +1,43 @@
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 AWS IoT Core MQTT role topic.
6
+ */
7
+ export interface AWSIoTCoreTopicMessage {
8
+ Topic: string;
9
+ QoS: 0 | 1;
10
+ Event: CacheInvalidationNotification;
11
+ }
12
+ /**
13
+ * Transport callback used by {@link AWSIoTCoreBroadcastProvider} to publish a shaped
14
+ * invalidation notification to an AWS IoT Core MQTT topic.
15
+ */
16
+ export type AWSIoTCoreTopicPublisher = (message: AWSIoTCoreTopicMessage) => Promise<void>;
17
+ /**
18
+ * Topology 3 Cloud Multiplexer Provider for **AWS IoT Core MQTT over WebSockets** (`'AWSIoTCore'`).
19
+ *
20
+ * Offloads per-client WebSocket connection management and message fan-out from MJServer
21
+ * to AWS IoT Core's managed MQTT message broker:
22
+ * - Each authenticated browser client calls `NegotiateCacheBroadcastConnection` to obtain
23
+ * a SigV4-presigned `wss://<endpoint>/mqtt` URL and its authorized MQTT topic list
24
+ * (`<topicPrefix>/roles/<RoleID>`).
25
+ * - When an entity mutation occurs, MJServer shapes the invalidation payload once per
26
+ * authorized role on the entity and publishes to `<topicPrefix>/roles/<RoleID>`.
27
+ */
28
+ export declare class AWSIoTCoreBroadcastProvider extends BaseCacheInvalidationBroadcastProvider {
29
+ private _topicPublisher;
30
+ get Topology(): CacheInvalidationBroadcastTopology;
31
+ /**
32
+ * Installs a custom MQTT topic publisher (e.g., AWS SDK `IoTDataPlaneClient` adapter or test spy).
33
+ */
34
+ SetTopicPublisher(publisher: AWSIoTCoreTopicPublisher | null): void;
35
+ /**
36
+ * Computes the MQTT topic filters (`<topicPrefix>/roles/<roleId>`) for a user's roles.
37
+ */
38
+ GetAuthorizedTopicsForUser(user: UserInfo): string[];
39
+ protected OnInvalidationRecorded(payload: CacheInvalidationPayload): Promise<void>;
40
+ NegotiateClientConnection(user: UserInfo, defaultGraphQLWsUrl?: string): Promise<CacheBroadcastNegotiationResult>;
41
+ private buildSigV4PresignedMqttUrl;
42
+ }
43
+ //# sourceMappingURL=AWSIoTCoreBroadcastProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AWSIoTCoreBroadcastProvider.d.ts","sourceRoot":"","sources":["../../../src/broadcast/providers/AWSIoTCoreBroadcastProvider.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,sBAAsB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACX,KAAK,EAAE,6BAA6B,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1F;;;;;;;;;;GAUG;AACH,qBACa,2BAA4B,SAAQ,sCAAsC;IACnF,OAAO,CAAC,eAAe,CAAyC;IAEhE,IAAoB,QAAQ,IAAI,kCAAkC,CAEjE;IAED;;OAEG;IACI,iBAAiB,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI,GAAG,IAAI;IAI1E;;OAEG;IACI,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE;cAclC,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B3E,yBAAyB,CAC3C,IAAI,EAAE,QAAQ,EACd,mBAAmB,SAAa,GACjC,OAAO,CAAC,+BAA+B,CAAC;IAmC3C,OAAO,CAAC,0BAA0B;CA4CrC"}