@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
package/src/config.ts CHANGED
@@ -5,6 +5,15 @@ import { LogError, LogStatus, LogStatusEx } from '@memberjunction/core';
5
5
  import { mergeConfigs, parseBooleanEnv } from '@memberjunction/config';
6
6
  import { TelemetryEnabledDefault } from './telemetryConfigUnits.js';
7
7
  import { RealtimeEnabledDefault } from './realtimeConfigUnits.js';
8
+ import { ResolveServerRole, type ServerRole } from './serverRoleConfigUnits.js';
9
+ import {
10
+ AgentRunWatchdogDefaultsFromEnv,
11
+ AgentRunWatchdogSchema,
12
+ AgentSessionsDefaultsFromEnv,
13
+ AgentSessionsSchema,
14
+ ConversationDetailReconcilerDefaultsFromEnv,
15
+ ConversationDetailReconcilerSchema,
16
+ } from './backgroundSweepConfigUnits.js';
8
17
 
9
18
  const explorer = cosmiconfigSync('mj', { searchStrategy: 'global' });
10
19
 
@@ -316,6 +325,45 @@ const cacheSettingsSchema = z.object({
316
325
  * for it. 0 disables the turn-taking. Default: 30.
317
326
  */
318
327
  startupWarmupLeaseSeconds: z.number().int().nonnegative().optional().default(30),
328
+ /**
329
+ * Pluggable cache invalidation broadcast topology configuration.
330
+ * Defaults to `'SequencedRoleBucket'` (Topology 1 Monotonic Sequence Ring Buffer + Topology 2
331
+ * Role-Fingerprint $O(\text{Roles})$ evaluation & shaping memoizer).
332
+ */
333
+ broadcast: z
334
+ .object({
335
+ provider: z.string().optional().default('SequencedRoleBucket'),
336
+ ringBufferSize: z.number().int().positive().optional().default(5000),
337
+ excludedEntities: z.array(z.string()).optional().default([]),
338
+ azureWebPubSub: z
339
+ .object({
340
+ endpoint: z.string().optional(),
341
+ hubName: z.string().optional(),
342
+ accessKey: z.string().optional(),
343
+ tokenTtlMinutes: z.number().positive().optional(),
344
+ })
345
+ .optional(),
346
+ awsIoTCore: z
347
+ .object({
348
+ endpoint: z.string().optional(),
349
+ region: z.string().optional(),
350
+ topicPrefix: z.string().optional(),
351
+ accessKeyId: z.string().optional(),
352
+ secretAccessKey: z.string().optional(),
353
+ tokenTtlSeconds: z.number().positive().optional(),
354
+ })
355
+ .optional(),
356
+ gcpPubSub: z
357
+ .object({
358
+ projectId: z.string().optional(),
359
+ topicPrefix: z.string().optional(),
360
+ gatewayUrl: z.string().optional(),
361
+ signingSecret: z.string().optional(),
362
+ tokenTtlSeconds: z.number().positive().optional(),
363
+ })
364
+ .optional(),
365
+ })
366
+ .optional(),
319
367
  });
320
368
 
321
369
  const loggingSettingsSchema = z.object({
@@ -466,6 +514,13 @@ const magicLinkSchema = z.object({
466
514
  * returns the token as JSON. Append `?format=json` to force JSON regardless.
467
515
  */
468
516
  explorerUrl: z.string().optional(),
517
+ /**
518
+ * Explicit frontend origins permitted for per-invite `RedirectUrl` targets (in addition to
519
+ * `explorerUrl` and concrete non-wildcard entries in `cors.allowedOrigins`). Wildcard `'*'`
520
+ * entries are always ignored so deployments using the default `cors.allowedOrigins: ['*']`
521
+ * never expose an open redirect carrying session tokens.
522
+ */
523
+ allowedRedirectOrigins: z.array(z.string()).optional(),
469
524
  }).passthrough();
470
525
 
471
526
  /**
@@ -831,6 +886,44 @@ const identityVerificationSchema = z.object({
831
886
  }).optional().default({}),
832
887
  }).passthrough();
833
888
 
889
+ /**
890
+ * Remote browsers a TEXT conversation opens (`<mj-conversation-chat-area [AllowRemoteBrowser]>`), whose
891
+ * agents drive them through the `browser_*` tools. Realtime calls' browsers are not affected.
892
+ *
893
+ * Off by default: until `enabled` is true, every remote-browser operation on a conversation is refused,
894
+ * since each browser is a server Chromium process or a billed hosted session.
895
+ */
896
+ const conversationBrowserSchema = z.object({
897
+ /** Master switch. When false, no conversation can open a browser. */
898
+ enabled: zodBooleanWithTransforms().default(false),
899
+ /** Also let anonymous principals (public widget guests, anonymous magic links) open one. */
900
+ allowAnonymous: zodBooleanWithTransforms().default(false),
901
+ /** Most conversation browsers one user (or one anonymous guest) may hold at once. Default 2. */
902
+ maxPerUser: z.coerce.number().int().positive().optional().default(2),
903
+ /**
904
+ * Most conversation browsers all anonymous guests together may hold at once, since a guest can start a
905
+ * new guest scope cheaply (limited only by the per-IP rate limit). Applies only with `allowAnonymous`. Default 4.
906
+ */
907
+ maxAnonymousTotal: z.coerce.number().int().positive().optional().default(4),
908
+ /**
909
+ * Minutes unused after which a conversation browser is ended (a reloaded or closed tab never ends its own).
910
+ * Used means an agent or the user acts on it, or its open drawer polls for a snapshot; a drawer showing a
911
+ * pushed screencast with nothing else happening counts as unused. Default 15.
912
+ */
913
+ idleMinutes: z.coerce.number().positive().optional().default(15),
914
+ /**
915
+ * Private hosts a conversation browser may still reach, as `host` or `host:port` (e.g. `localhost:4200`).
916
+ * Every other loopback, link-local or private-network HOSTNAME is refused (private IPv4 and IPv6 ranges,
917
+ * `localhost`, names under `.local`, `.localdomain`, `.internal`, `.intranet`, `.lan`, `.corp`, `.home`,
918
+ * `.home.arpa`, `.private` and `.svc`, and the Docker, Kubernetes and cloud-metadata names), including where
919
+ * a main-frame redirect lands, and in popups the page opens. This is a best-effort hostname check. Gets through: a public name that resolves to a
920
+ * private address, WebSockets, service-worker fetches, an iframe whose source redirects to a private
921
+ * host, redirects of the page's own requests, and the redirect request itself (only where it lands is
922
+ * refused). For real isolation, run the browsers under network egress rules. Default none.
923
+ */
924
+ allowedPrivateHosts: z.array(z.string()).optional().default([]),
925
+ }).passthrough();
926
+
834
927
  const realtimeSchema = z.object({
835
928
  /** Master switch. When false, the WebRTC SDP broker router is not mounted. Defaults to true. */
836
929
  enabled: zodBooleanWithTransforms().default(true),
@@ -841,11 +934,21 @@ const realtimeSchema = z.object({
841
934
  * is assembled anyway as `Partial` (gaps become silence). Defaults to 90.
842
935
  */
843
936
  recordingAssemblyGraceSeconds: z.coerce.number().positive().optional().default(90),
937
+ /** Remote browsers that text conversations open (off by default). */
938
+ conversationBrowser: conversationBrowserSchema.optional().default({}),
939
+ }).passthrough();
940
+
941
+ const devAuthSchema = z.object({
942
+ /** Master switch for local-only development JWT auth (`MJ_DEV_AUTH_ENABLED=true`). Forbidden when NODE_ENV=production. */
943
+ enabled: zodBooleanWithTransforms().default(false),
944
+ /** Optional default email for `/auth/dev-login` when no email is specified in the request body. */
945
+ defaultEmail: z.string().optional(),
844
946
  }).passthrough();
845
947
 
846
948
  const configInfoSchema = z.object({
847
949
  userHandling: userHandlingInfoSchema,
848
950
  magicLink: magicLinkSchema.optional().default({}),
951
+ devAuth: devAuthSchema.optional().default({}),
849
952
  widget: widgetSchema.optional().default({}),
850
953
  telephony: telephonySchema.optional().default({}),
851
954
  realtime: realtimeSchema.optional().default({}),
@@ -856,6 +959,9 @@ const configInfoSchema = z.object({
856
959
  authProviders: z.array(authProviderSchema).optional(),
857
960
  componentRegistries: z.array(componentRegistrySchema).optional(),
858
961
  scheduledJobs: scheduledJobsSchema.optional().default({}),
962
+ agentSessions: AgentSessionsSchema.optional().default({}),
963
+ agentRunWatchdog: AgentRunWatchdogSchema.optional().default({}),
964
+ conversationDetailReconciler: ConversationDetailReconcilerSchema.optional().default({}),
859
965
  integrationSyncWorker: integrationSyncWorkerSchema.optional().default({}),
860
966
  workQueue: WorkQueueSchema.optional().default({}),
861
967
  telemetry: telemetrySchema.optional().default({}),
@@ -905,13 +1011,24 @@ const configInfoSchema = z.object({
905
1011
  .transform((val) => z.record(z.string()).parse(JSON.parse(val)))
906
1012
  .optional(),
907
1013
  mjCoreSchema: z.string(),
1014
+ /**
1015
+ * Server execution role for horizontal scaling:
1016
+ * - `'all'` (default): runs both interactive HTTP/GraphQL/WebSocket handlers and background worker loops.
1017
+ * - `'api'`: runs interactive HTTP/GraphQL/WebSocket handlers only; background worker loops are skipped.
1018
+ * - `'worker'`: runs background worker loops (`ScheduledJobsService`, `IntegrationSyncWorkerService`,
1019
+ * `StartTaskGraphDispatcher`, `StartWorkQueueHost`, `SessionJanitor`, reconcilers).
1020
+ */
1021
+ serverRole: z.enum(['all', 'api', 'worker']).optional().default('all'),
908
1022
  });
909
1023
 
1024
+ export type { ServerRole };
1025
+
910
1026
  export type UserHandlingInfo = z.infer<typeof userHandlingInfoSchema>;
911
1027
  export type MagicLinkConfig = z.infer<typeof magicLinkSchema>;
912
1028
  export type WidgetConfig = z.infer<typeof widgetSchema>;
913
1029
  export type TelephonyConfig = z.infer<typeof telephonySchema>;
914
1030
  export type RealtimeConfig = z.infer<typeof realtimeSchema>;
1031
+ export type ConversationBrowserConfig = z.infer<typeof conversationBrowserSchema>;
915
1032
  export type IdentityVerificationConfig = z.infer<typeof identityVerificationSchema>;
916
1033
  export type TwilioTelephonyConfig = z.infer<typeof twilioTelephonySchema>;
917
1034
  export type VonageTelephonyConfig = z.infer<typeof vonageTelephonySchema>;
@@ -976,6 +1093,7 @@ export const DEFAULT_SERVER_CONFIG: Partial<ConfigInfo> = {
976
1093
  enableIntrospection: process.env.ENABLE_INTROSPECTION === 'true',
977
1094
  apiKey: process.env.MJ_API_KEY,
978
1095
  websiteRunFromPackage: process.env.WEBSITE_RUN_FROM_PACKAGE ? parseInt(process.env.WEBSITE_RUN_FROM_PACKAGE, 10) : undefined,
1096
+ serverRole: ResolveServerRole(process.env.MJ_SERVER_ROLE),
979
1097
 
980
1098
  // User handling defaults
981
1099
  userHandling: {
@@ -1055,6 +1173,16 @@ export const DEFAULT_SERVER_CONFIG: Partial<ConfigInfo> = {
1055
1173
  staleLockCleanupInterval: 300000
1056
1174
  },
1057
1175
 
1176
+ // Background sweeps that query the database on a timer (session janitor, bridge and conversation-
1177
+ // detail reconcilers, agent-run watchdog). Defaults are the values MJAPI always used; each has an
1178
+ // env override (MJ_SESSION_JANITOR_*, MJ_BRIDGE_RECONCILER_*, MJ_CONVERSATION_DETAIL_RECONCILER_*,
1179
+ // MJ_AGENT_RUN_WATCHDOG_SWEEP_INTERVAL_MS), read here rather than in the schema because this object
1180
+ // is the merge base (see the telemetry note below). A bad value fails startup, naming the variable.
1181
+ // guides/SERVERLESS_DATABASE_AUTO_PAUSE_GUIDE.md lists every switch.
1182
+ agentSessions: AgentSessionsDefaultsFromEnv(process.env),
1183
+ conversationDetailReconciler: ConversationDetailReconcilerDefaultsFromEnv(process.env),
1184
+ agentRunWatchdog: AgentRunWatchdogDefaultsFromEnv(process.env),
1185
+
1058
1186
  // Integration sync worker defaults (off — syncs run inline unless a worker is enabled)
1059
1187
  integrationSyncWorker: {
1060
1188
  enabled: false,
@@ -1187,6 +1315,16 @@ export function LoadConfig() {
1187
1315
  LogError('Error parsing config file', null, JSON.stringify(configParsing.error.issues, null, 2));
1188
1316
  throw new Error('Configuration validation failed');
1189
1317
  }
1318
+
1319
+ const rawDevAuthEnv = process.env.MJ_DEV_AUTH_ENABLED?.trim().toLowerCase();
1320
+ const isDevAuthEnabled =
1321
+ rawDevAuthEnv === 'true' || rawDevAuthEnv === '1' || configParsing.data.devAuth?.enabled === true;
1322
+ if (isDevAuthEnabled && process.env.NODE_ENV?.trim().toLowerCase() === 'production') {
1323
+ throw new Error(
1324
+ '[SECURITY] Local dev auth (MJ_DEV_AUTH_ENABLED) is strictly forbidden when NODE_ENV=production. Refusing to start.'
1325
+ );
1326
+ }
1327
+
1190
1328
  return configParsing.data;
1191
1329
  }
1192
1330
 
package/src/context.ts CHANGED
@@ -7,6 +7,7 @@ import { AuthenticationError, AuthorizationError } from 'type-graphql';
7
7
  import sql from 'mssql';
8
8
  import { GetSigningKeys, GetSystemUser, GetValidationOptions, VerifyUserRecord, ExtractUserInfoFromPayload } from './auth/index.js';
9
9
  import { CloneUserForSessionContext } from './auth/sessionUserClone.js';
10
+ import { EmailsMatch, ResolveUserLookupEmail, type LoginEmailResolution } from './auth/loginEmailResolution.js';
10
11
  import { GetAPIKeyActingContextResolver } from './auth/actingContextResolver.js';
11
12
  import { TokenExpiredError, AuthProviderFactory } from '@memberjunction/auth-providers';
12
13
  import { AuthCache } from './cache.js';
@@ -15,13 +16,15 @@ import { BuildPostgreSQLConnectionConfig, PostgreSQLReadOnlyPool, ResolvePostgre
15
16
  import { BuildBoundaryLogPayload } from './logging/boundaryLogPayload.js';
16
17
  import { StartupLogger } from './logging/StartupLogger.js';
17
18
  import { DataSourceInfo, UserPayload } from './types.js';
19
+ import { ReadRequestOrigin } from './requestOrigin.js';
18
20
  import { GetReadOnlyDataSource, GetReadWriteDataSource } from './util.js';
19
21
  import { v4 as uuidv4 } from 'uuid';
20
22
  import e from 'express';
21
23
  import type { RequestHandler, Request, Response, NextFunction } from 'express';
22
24
  import { DatabaseProviderBase, UserInfo, type IMetadataProvider, type MagicLinkScope, type ReturningVisitorContext, type WidgetGuestContext } from '@memberjunction/core';
23
25
  import { SQLServerDataProvider, SQLServerProviderConfigData } from '@memberjunction/sqlserver-dataprovider';
24
- import { Metadata } from '@memberjunction/core';
26
+ import { PostgreSQLDataProvider, PostgreSQLProviderConfigData } from '@memberjunction/postgresql-dataprovider';
27
+ import { Metadata, IsValidTimeZone, TIME_ZONE_HEADER } from '@memberjunction/core';
25
28
  import { IdentityClaimEngineServer } from '@memberjunction/core-entities-server';
26
29
  import { UUIDsEqual } from '@memberjunction/global';
27
30
  import { UserCache, resolveDbPlatformFromEnv } from '@memberjunction/generic-database-provider';
@@ -145,6 +148,28 @@ async function writeSessionAudit(args: {
145
148
  }
146
149
  }
147
150
 
151
+ /**
152
+ * Logs a session whose User record is not the identity its token carries, and returns whether that
153
+ * is the case. Runs once per issued token (inside the session-audit dedup). A `USER_EMAIL_MAP`
154
+ * rewrite is reported as such; any other difference means the lookup reached another person's
155
+ * record. Anonymous magic-link sessions run as a synthetic principal by design and are skipped.
156
+ */
157
+ function reportIdentityMismatch(loginEmail: LoginEmailResolution, sessionUser: UserInfo): boolean {
158
+ if (sessionUser.IsMagicLinkAnonymous || EmailsMatch(loginEmail.TokenEmail, sessionUser.Email)) {
159
+ return false;
160
+ }
161
+ if (loginEmail.Remapped) {
162
+ console.warn(
163
+ `[Auth] USER_EMAIL_MAP remapped login '${loginEmail.TokenEmail}' to '${loginEmail.LookupEmail}'; the session runs as user ${sessionUser.ID} (${sessionUser.Email})`,
164
+ );
165
+ } else {
166
+ console.warn(
167
+ `[Auth] Login identity '${loginEmail.TokenEmail ?? ''}' resolved to user ${sessionUser.ID} with a different email (${sessionUser.Email}); check the User records for this address`,
168
+ );
169
+ }
170
+ return true;
171
+ }
172
+
148
173
  /** Best-effort failure audit: decodes the attempted identity, dedupes, attributes to the system user. */
149
174
  async function auditLoginFailure(
150
175
  bearerToken: string | undefined,
@@ -204,12 +229,17 @@ async function auditLoginFailure(
204
229
  // userRecord may be a SHARED cached instance (e.g. multiple recruiters on one per-company
205
230
  // link) — mutating it would leak one session's scope to another. Non-magic-link sessions,
206
231
  // and named sessions with no resource scope, are returned untouched.
207
- function buildMagicLinkSessionUser(userRecord: UserInfo, payload: jwt.JwtPayload): UserInfo {
232
+ export function BuildMagicLinkSessionUser(userRecord: UserInfo, payload: jwt.JwtPayload): UserInfo {
208
233
  if (payload['mj_magic_link'] !== true) {
209
234
  return userRecord;
210
235
  }
211
236
  const md = Metadata.Provider; // global-provider-ok: server-side magic-link session built under the server's single default provider
212
237
  const isAnon = payload['mj_anon'] === true;
238
+ const rawSid = payload['mj_sid'];
239
+ const mjSid = typeof rawSid === 'string' ? rawSid.trim() : '';
240
+ if (isAnon && !mjSid) {
241
+ throw new AuthenticationError('Anonymous magic-link session token is missing required mj_sid claim');
242
+ }
213
243
  const scopes = payload['mj_scopes'];
214
244
 
215
245
  // Per-session resource scope (single-resource share; multi-resource union is a follow-on).
@@ -279,6 +309,7 @@ function buildMagicLinkSessionUser(userRecord: UserInfo, payload: jwt.JwtPayload
279
309
  // Mark the session so the CurrentUser field resolver serves these synthesized roles
280
310
  // (the shared Anonymous principal holds none in the DB). See UserInfo.IsMagicLinkAnonymous.
281
311
  sessionUser.IsMagicLinkAnonymous = true;
312
+ sessionUser.AnonymousVisitorID = mjSid;
282
313
  }
283
314
  return sessionUser;
284
315
  }
@@ -420,7 +451,7 @@ export const GetUserPayload = async (
420
451
  // very often the SHARED UserCache instance, and stamping it in place
421
452
  // leaks one session's row-filter bindings / acting context to every
422
453
  // concurrent session of the same user (same pattern as
423
- // buildMagicLinkSessionUser — see sessionUserClone.ts).
454
+ // BuildMagicLinkSessionUser — see sessionUserClone.ts).
424
455
  const userRecord = CloneUserForSessionContext(resolvedUser);
425
456
 
426
457
  // Row-filter bindings for this key, rebuilt PER REQUEST from the
@@ -486,7 +517,11 @@ export const GetUserPayload = async (
486
517
  throw new AuthenticationError('Missing token');
487
518
  }
488
519
 
489
- const payload = jwt.decode(token);
520
+ const cachedAuth = AuthCache.get(token);
521
+ const payload =
522
+ cachedAuth && typeof cachedAuth === 'object'
523
+ ? cachedAuth
524
+ : jwt.decode(token);
490
525
  if (!payload || typeof payload === 'string') {
491
526
  throw new AuthenticationError('Invalid token payload');
492
527
  }
@@ -498,7 +533,7 @@ export const GetUserPayload = async (
498
533
  throw new TokenExpiredError(expiryDate);
499
534
  }
500
535
 
501
- if (!AuthCache.has(token)) {
536
+ if (!cachedAuth) {
502
537
  const issuer = payload.iss;
503
538
  if (!issuer) {
504
539
  console.warn('No issuer claim on token');
@@ -513,12 +548,13 @@ export const GetUserPayload = async (
513
548
  }
514
549
 
515
550
  await verifyAsync(issuer, token);
516
- AuthCache.set(token, true);
551
+ AuthCache.set(token, payload);
517
552
  }
518
553
 
519
554
  // Use provider to extract user information
520
555
  const userInfo = ExtractUserInfoFromPayload(payload);
521
- const email = userInfo.email ? ((userEmailMap ?? {})[userInfo.email] ?? userInfo.email) : userInfo.preferredUsername;
556
+ const loginEmail = ResolveUserLookupEmail(userInfo, userEmailMap);
557
+ const email = loginEmail.LookupEmail;
522
558
 
523
559
  const userRecord = await VerifyUserRecord(
524
560
  email,
@@ -540,11 +576,12 @@ export const GetUserPayload = async (
540
576
  // Anonymous principal with an in-memory UserInfo carrying the claimed role(s), so
541
577
  // the session enforces exactly the link's granted scope (no DB accretion). No-op
542
578
  // for everything else.
543
- const sessionUser = buildMagicLinkSessionUser(userRecord, payload);
579
+ const sessionUser = BuildMagicLinkSessionUser(userRecord, payload);
544
580
 
545
581
  // Session-established audit — once per issued token (deduped), fire-and-forget so
546
582
  // it never adds latency to the request. The dedup mark is set synchronously here.
547
583
  if (markSessionAuditSeen(sessionAuditKey('sess', payload))) {
584
+ const identityMismatch = reportIdentityMismatch(loginEmail, sessionUser);
548
585
  void writeSessionAudit({
549
586
  user: sessionUser,
550
587
  auditTypeName: SESSION_AUDIT_TYPE,
@@ -552,7 +589,16 @@ export const GetUserPayload = async (
552
589
  payload,
553
590
  requestContext,
554
591
  requestDomain,
555
- description: `Session established via ${payload.iss ?? 'unknown provider'}`,
592
+ description: identityMismatch
593
+ ? `Session established via ${payload.iss ?? 'unknown provider'}: token identity '${loginEmail.TokenEmail ?? ''}' runs as user '${sessionUser.Email}'`
594
+ : `Session established via ${payload.iss ?? 'unknown provider'}`,
595
+ extraDetails: {
596
+ tokenEmail: loginEmail.TokenEmail ?? null,
597
+ lookupEmail: loginEmail.LookupEmail ?? null,
598
+ resolvedUserEmail: sessionUser.Email ?? null,
599
+ remappedByUserEmailMap: loginEmail.Remapped,
600
+ identityMismatch,
601
+ },
556
602
  });
557
603
  }
558
604
 
@@ -626,6 +672,15 @@ function parseRequestHostname(origin: string | undefined): string | undefined {
626
672
  }
627
673
  }
628
674
 
675
+ /**
676
+ * The caller's IANA time zone from the `x-mj-timezone` header, or undefined when the header is
677
+ * absent, repeated, or names no zone this runtime knows (callers then use UTC).
678
+ */
679
+ function readTimeZoneHeader(req: IncomingMessage): string | undefined {
680
+ const value = req.headers[TIME_ZONE_HEADER];
681
+ return typeof value === 'string' && IsValidTimeZone(value) ? value : undefined;
682
+ }
683
+
629
684
  function extractAuthInputs(req: IncomingMessage): {
630
685
  bearerToken: string;
631
686
  sessionId: string;
@@ -633,6 +688,7 @@ function extractAuthInputs(req: IncomingMessage): {
633
688
  systemApiKey: string;
634
689
  userApiKey: string;
635
690
  requestContext: RequestContext;
691
+ timeZone: string | undefined;
636
692
  } {
637
693
  const sessionIdRaw = req.headers['x-session-id'];
638
694
  const requestDomain = parseRequestHostname(req.headers.origin);
@@ -657,6 +713,7 @@ function extractAuthInputs(req: IncomingMessage): {
657
713
  systemApiKey,
658
714
  userApiKey,
659
715
  requestContext,
716
+ timeZone: readTimeZoneHeader(req),
660
717
  };
661
718
  }
662
719
 
@@ -681,7 +738,7 @@ export function CreateUnifiedAuthMiddleware(
681
738
  }
682
739
 
683
740
  try {
684
- const { bearerToken, sessionId, requestDomain, systemApiKey, userApiKey, requestContext } =
741
+ const { bearerToken, sessionId, requestDomain, systemApiKey, userApiKey, requestContext, timeZone } =
685
742
  extractAuthInputs(req);
686
743
 
687
744
  const userPayload = await GetUserPayload(
@@ -699,6 +756,9 @@ export function CreateUnifiedAuthMiddleware(
699
756
  res.status(401).json({ error: 'Invalid token' });
700
757
  return;
701
758
  }
759
+ if (timeZone) {
760
+ userPayload.TimeZone = timeZone;
761
+ }
702
762
 
703
763
  // Attach to request for downstream consumers
704
764
  req.userPayload = userPayload;
@@ -782,6 +842,7 @@ export const ContextFunction =
782
842
  userPayload,
783
843
  providers,
784
844
  ClientIp: expressReq.ip,
845
+ RequestOrigin: ReadRequestOrigin(req.headers.origin),
785
846
  };
786
847
  };
787
848
 
@@ -836,8 +897,6 @@ export async function CreateReadOnlyProvider(dataSources: DataSourceInfo[]): Pro
836
897
  * from the primary provider to avoid pool exhaustion.
837
898
  */
838
899
  async function createPostgresProvider(): Promise<DatabaseProviderBase> {
839
- const { PostgreSQLDataProvider, PostgreSQLProviderConfigData } = await import('@memberjunction/postgresql-dataprovider');
840
-
841
900
  const pgProvider = new PostgreSQLDataProvider();
842
901
  const pgConfig = new PostgreSQLProviderConfigData(
843
902
  BuildPostgreSQLConnectionConfig(ResolvePostgreSQLEndpoint(), configInfo.databaseSettings, 'api'),
@@ -872,8 +931,6 @@ async function tryCreateReadOnlyPostgresProvider(): Promise<DatabaseProviderBase
872
931
  }
873
932
 
874
933
  try {
875
- const { PostgreSQLDataProvider, PostgreSQLProviderConfigData } = await import('@memberjunction/postgresql-dataprovider');
876
-
877
934
  const roProvider = new PostgreSQLDataProvider();
878
935
  const roConfig = new PostgreSQLProviderConfigData(
879
936
  BuildPostgreSQLConnectionConfig({ ...ResolvePostgreSQLEndpoint(), ...credentials }, configInfo.databaseSettings, 'read-only'),
package/src/coreRoutes.ts CHANGED
@@ -19,18 +19,20 @@ import { CreateOAuthCallbackHandler } from './rest/OAuthCallbackHandler.js';
19
19
  import { CreateSignatureWebhookHandler } from './rest/SignatureWebhookHandler.js';
20
20
  import { CreateMediaStreamRouter } from './rest/MediaStreamHandler.js';
21
21
  import { CreateRealtimeSdpBrokerRouter } from './rest/RealtimeSdpBrokerHandler.js';
22
- import { CreateMagicLinkHandler, CreateMagicLinkJwksRouter, RegisterMagicLinkAuthProvider, MAGIC_LINK_MOUNT_PATH } from './auth/magicLink/index.js';
22
+ import { CreateMagicLinkHandler, CreateMagicLinkJwksRouter, MagicLinkService, RegisterMagicLinkAuthProvider, MAGIC_LINK_MOUNT_PATH } from './auth/magicLink/index.js';
23
23
  import { CreateWidgetHandler, WIDGET_MOUNT_PATH } from './realtimeWidget/index.js';
24
24
  import { CreateRealtimeVerifyRouter, REALTIME_VERIFY_MOUNT_PATH, RealtimeSessionVerificationService } from './realtimeSessions/index.js';
25
25
  import { CreateAuthProviderCatalogRouter, AUTH_CATALOG_MOUNT_PATH } from './auth/AuthProviderCatalogRouter.js';
26
+ import { AssertLocalDevAuthAllowed, IsLocalDevAuthEnabled, RegisterLocalDevAuthProvider } from './auth/localDevAuth.js';
26
27
  import type { StartupLogger } from './logging/StartupLogger.js';
27
28
 
28
29
  type RouteLog = Pick<StartupLogger, 'LogIf'>;
29
30
 
30
- /** Routers the public mounts create that must be mounted again after the auth middleware. */
31
+ /** Routers (and host services) the public mounts create for post-auth mounting and extension sharing. */
31
32
  export interface CoreAuthenticatedRouters {
32
33
  OAuth?: Router;
33
34
  MagicLink?: Router;
35
+ MagicLinkService?: MagicLinkService;
34
36
  Widget?: Router;
35
37
  }
36
38
 
@@ -61,12 +63,28 @@ export function MountPublicCoreRoutes(app: Application, publicUrl: string, log:
61
63
  log.LogIf('verbose', `[Realtime] WebRTC SDP broker registered at ${ApiRoute(REALTIME_SDP_EXCHANGE_PATH)}`);
62
64
  }
63
65
 
64
- routers.MagicLink = mountMagicLinkPublic(app, publicUrl, log);
66
+ const magicLink = mountMagicLinkPublic(app, publicUrl, log);
67
+ routers.MagicLink = magicLink?.authenticatedRouter;
68
+ routers.MagicLinkService = magicLink?.service;
65
69
  routers.Widget = mountWidgetPublic(app, publicUrl, log);
70
+ mountLocalDevAuthPublic(app, publicUrl, log);
66
71
  mountRealtimeVerify(app, log);
67
72
  return routers;
68
73
  }
69
74
 
75
+ function mountLocalDevAuthPublic(app: Application, publicUrl: string, log: RouteLog): void {
76
+ AssertLocalDevAuthAllowed();
77
+ if (!IsLocalDevAuthEnabled()) {
78
+ return;
79
+ }
80
+ RegisterLocalDevAuthProvider(publicUrl);
81
+ if (!configInfo.magicLink?.enabled && !configInfo.widget?.enabled) {
82
+ app.use(ApiRoute(MAGIC_LINK_MOUNT_PATH), cors<cors.CorsRequest>(), CreateMagicLinkJwksRouter());
83
+ log.LogIf('verbose', `[LocalDevAuth] Published RS256 signing key at ${ApiRoute(MAGIC_LINK_MOUNT_PATH)}/jwks.json`);
84
+ }
85
+ log.LogIf('verbose', `[LocalDevAuth] Local dev auth routes enabled at ${ApiRoute(AUTH_CATALOG_MOUNT_PATH)}/dev-login (localhost only)`);
86
+ }
87
+
70
88
  function mountOAuthCallback(app: Application, publicUrl: string, log: RouteLog): Router | undefined {
71
89
  if (!publicUrl) {
72
90
  return undefined;
@@ -84,16 +102,20 @@ function mountOAuthCallback(app: Application, publicUrl: string, log: RouteLog):
84
102
  return authenticatedRouter;
85
103
  }
86
104
 
87
- /** Public magic-link router (JWKS + redeem). The invite-creation router is returned for after auth. */
88
- function mountMagicLinkPublic(app: Application, publicUrl: string, log: RouteLog): Router | undefined {
105
+ /** Public magic-link router (JWKS + redeem). The invite-creation router + service are returned for post-auth / extensions. */
106
+ function mountMagicLinkPublic(
107
+ app: Application,
108
+ publicUrl: string,
109
+ log: RouteLog,
110
+ ): { authenticatedRouter: Router; service: MagicLinkService } | undefined {
89
111
  if (!configInfo.magicLink?.enabled) {
90
112
  return undefined;
91
113
  }
92
- const { publicRouter, authenticatedRouter } = CreateMagicLinkHandler(publicUrl, configInfo.magicLink);
114
+ const { publicRouter, authenticatedRouter, service } = CreateMagicLinkHandler(publicUrl, configInfo.magicLink);
93
115
  RegisterMagicLinkAuthProvider(publicUrl, configInfo.magicLink);
94
116
  app.use(ApiRoute(MAGIC_LINK_MOUNT_PATH), cors<cors.CorsRequest>(), publicRouter);
95
117
  log.LogIf('verbose', `[MagicLink] Public routes registered at ${ApiRoute(MAGIC_LINK_MOUNT_PATH)}/redeem and ${ApiRoute(MAGIC_LINK_MOUNT_PATH)}/jwks.json`);
96
- return authenticatedRouter;
118
+ return { authenticatedRouter, service };
97
119
  }
98
120
 
99
121
  /**